[
  {
    "path": ".circleci/config.yml",
    "content": "build_job: &build_job\n  working_directory: ~/wice_grid\n  steps:\n    - checkout\n\n    # Install PhantomJS (if not found in cache)\n    - run:\n        name: Install phantomjs\n        command: |\n          if ! [ $(which phantomjs) ]; then\n          sudo curl --output /usr/local/bin/phantomjs https://s3.amazonaws.com/circle-downloads/phantomjs-2.1.1\n          fi\n\n          sudo chmod ugo+x /usr/local/bin/phantomjs\n\n    # Restore Cached Dependencies\n    - type: cache-restore\n      name: Restore bundle cache\n      key: wice_grid-{{ checksum \"Gemfile.lock\" }}\n\n    # Bundle install dependencies\n    - run: bundle install --path vendor/bundle\n\n    # Install Appraisal gemfiles\n    - run: bundle exec appraisal install\n\n    # Cache Dependencies\n    - type: cache-save\n      name: Store bundle cache\n      key: wice_grid-{{ checksum \"Gemfile.lock\" }}\n      paths:\n      - vendor/bundle\n\n    # Run the tests\n    - run: bundle exec appraisal rspec\n\n    - store_artifacts:\n        path: spec/support/test_app/tmp/capybara\n        destination: screenshots\n\nversion: 2\njobs:\n  build-ruby24:\n    <<: *build_job\n    docker:\n      - image: circleci/ruby:2.4\n        environment:\n          RAILS_ENV: test\n  build-ruby25:\n    <<: *build_job\n    docker:\n      - image: circleci/ruby:2.5\n        environment:\n          RAILS_ENV: test\n  build-ruby26:\n    <<: *build_job\n    docker:\n      - image: circleci/ruby:2.6\n        environment:\n          RAILS_ENV: test\n\nworkflows:\n  version: 2\n  build:\n    jobs:\n    - build-ruby24\n    - build-ruby25\n    - build-ruby26\n"
  },
  {
    "path": ".circleci/run-build-locally.sh",
    "content": "#!/usr/bin/env bash\ncurl --user ${CIRCLE_TOKEN}: \\\n  --request POST \\\n  --form revision=fa279c82728d4e0d764f09f3db0f63269575fba4 \\\n  --form config=@config.yml \\\n  --form notify=false \\\n  https://circleci.com/api/v1.1/project/github/patricklindsay/wice_grid/tree/master\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n## Precheck\n\n- For bugs, do a quick search and make sure the bug has not yet been reported\n- Try to be clear and concise - the more information you provide the easier it is for us to resolve\n- Things to include;\n  - Code samples\n  - Stack traces\n  - Screenshots\n  - Sample application or a test case that reproduces the error.\n\n## Environment\n\n- Ruby **[version]**\n- Rails **[version]**\n- WiceGrid **[version]**\n\n## Description of issue\n\n\n## Current behaviour\n\n\n## Expected behaviour\n\n\n## Additional context\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: bundler\n  directory: \"/\"\n  schedule:\n    interval: monthly\n  open-pull-requests-limit: 10\n  ignore:\n  - dependency-name: activerecord\n  - dependency-name: activesupport\n  - dependency-name: actionpack\n  - dependency-name: appraisal\n  - dependency-name: byebug\n  - dependency-name: capybara\n  - dependency-name: capybara-screenshot\n  - dependency-name: coderay\n  - dependency-name: coffee-rails\n  - dependency-name: faker\n  - dependency-name: font-awesome-sass\n  - dependency-name: haml\n  - dependency-name: inch\n  - dependency-name: jquery-rails\n  - dependency-name: nokogiri\n  - dependency-name: rack\n  - dependency-name: rails\n  - dependency-name: rake\n  - dependency-name: rdoc\n  - dependency-name: rspec\n  - dependency-name: rspec-rails\n  - dependency-name: sass-rails\n  - dependency-name: selenium-webdriver\n  - dependency-name: shoulda-matchers\n  - dependency-name: simplecov\n  - dependency-name: sqlite3\n  - dependency-name: turbolinks\n  - dependency-name: yard\n"
  },
  {
    "path": ".gitignore",
    "content": "*.gem\n*.rbc\n.bundle\n.config\n.idea\n.yardoc\n.rbenv-version\nInstalledFiles\n_yardoc\ncoverage\ndoc/\nlib/bundler/man\npkg\nrdoc\nspec/reports\ntest/tmp\ntest/version_tmp\ntmp\n.byebug_history\nspec/support/test_app/log\nspec/support/test_app/tmp\nspec/support/test_app/db/*.sqlite3*\n"
  },
  {
    "path": ".inch.yml",
    "content": "files:\n  excluded:\n    - lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb\n"
  },
  {
    "path": ".rspec",
    "content": "--color\n--require rails_helper\n--format d\n"
  },
  {
    "path": ".rubocop.yml",
    "content": "AllCops:\n  DisabledByDefault: true\n\nStyle/MultilineTernaryOperator:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/DefWithParentheses:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/MethodCallParentheses:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyleInsidePipes, SupportedStyles.\nStyle/SpaceAroundBlockParameters:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.\nStyle/TrailingCommaInArguments:\n  EnforcedStyleForMultiline: no_comma\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.\nStyle/TrailingCommaInLiteral:\n  EnforcedStyleForMultiline: no_comma\n\n# Cop supports --auto-correct.\nStyle/SpaceBeforeFirstArg:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/FirstParameterIndentation:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: AllowSafeAssignment.\nStyle/ParenthesesAroundCondition:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/SpecialGlobalVars:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: IgnoredMethods.\nStyle/SymbolProc:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/Lambda:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/MethodDefParentheses:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/EmptyLiteral:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues.\nStyle/HashSyntax:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/Not:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: AllowMultipleReturnValues.\nStyle/RedundantReturn:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/SpaceAfterComma:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/SignalException:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/LineEndConcatenation:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/AndOr:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: PreferredDelimiters.\nStyle/PercentLiteralDelimiters:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles, AutoCorrectEncodingComment.\nStyle/Encoding:\n  Enabled: true\n\n# Cop supports --auto-correct.\nLint/UnusedMethodArgument:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/AlignArray:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/ColonMethodCall:\n  Enabled: true\n\n# Cop supports --auto-correct.\nLint/UnusedBlockArgument:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/DotPosition:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/EmptyElse:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: MultiSpaceAllowedForOperators.\nStyle/SpaceAroundOperators:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/SpaceBeforeComma:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/SpaceInsideParens:\n  Enabled: true\n\n# Cop supports --auto-correct.\nStyle/DeprecatedHashMethods:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods.\nStyle/BlockDelimiters:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/BracesAroundHashParameters:\n  Enabled: true\n\nLint/AmbiguousRegexpLiteral:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/StringLiterals:\n  Enabled: true\n\nLint/AmbiguousOperator:\n  Enabled: true\n\nLint/UselessAssignment:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/ClassCheck:\n  Enabled: true\n\n# Cop supports --auto-correct.\n# Configuration parameters: EnforcedStyle, SupportedStyles.\nStyle/AlignParameters:\n  Enabled: true\n\nLint/ConditionPosition:\n  Enabled: true\n"
  },
  {
    "path": "Appraisals",
    "content": "appraise \"rails-5.0\" do\n  gem \"rails\", \"~> 5.0.0\"\nend\n\nappraise \"rails-5.1\" do\n  gem \"rails\", \"~> 5.1.0\"\nend\n\nappraise \"rails-5.2\" do\n  gem \"rails\", \"~> 5.2.0\"\nend\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## 7.1.4\n\n* Allow Rails 7.0\n* Wice::Columns#add_css_class does not update the value given\nto the :class option of Wice::GridRenderer#column method.\n\n## 7.1.3\n\n* Fixes [the bug](https://github.com/leikind/wice_grid/issues/395).\n\n## 7.1.2\n\n* This is the fix for the workaround of the [Facebook](https://www.facebook.com) problem.\n\n## 7.1.1\n\n* I have discovered that [Facebook](https://www.facebook.com) spoils the links\nthat have WiceGrid filters when you share them. That lead to the exception\nin the application. This is a workaround for the case.\n\n## 7.1.0\n\n* Rails 7.1 uses the gem `dartsass-rails` instead of the deprecatad gem `sass-rails`.\nAnd the gem `importmap-rails` is the standard gem for Javascript.\nThe support of them is added and the required gems for development are changed.\n* Turbolinks was replaced with Turbo.\n* Added the dependencies of `jquery-rails`.\n* I could not fix the problem with the Specs to run without a browser that is required\nwith the environment variable `BROWSER` set to any value. Moreover not always all the test are green. The suggesons are welcome.\n\n## 6.1.2\n\n* Added Rails 6.1 support\n* Fix bug in \"Dangerous query methods\" deprecation warning fix in custom order when using Arel.sql\n\n## 4.1.0 (28 November, 2018)\n\n* Add option `filter_control_options` to columns. Initial use is to pass in the options `start_year`, `end_year`, and `max_year_allowed` when using `rails_datetime_helper` - [#12](https://github.com/leikind/wice_grid/pull/18)\n* Fix deprecation (in Rails 5.0.x) and incorrect behaviour (in Rails 5.1.x) of CSV exports - [#4](https://github.com/leikind/wice_grid/pull/4)\n* Fix deprecation (in Rails 5.2) regarding \"Dangerous query methods\" in `order` clauses. Note that when using the `custom_order` option you must pass a value acceptable for ActiveRecord's `order` method, otherwise you will receive the same warning. - [#41](https://github.com/leikind/wice_grid/pull/41)\n* Add support for using `Arel::Attributes::Attribute`s with the `custom_order` option. - [#41](https://github.com/leikind/wice_grid/pull/41)\n* Added `sort_by` option to column to allow arbitrary, Ruby-based ordering. - [#3](https://github.com/leikind/wice_grid/pull/3)\n* Added Rails 5.2 support\n* Bump Kaminari to ~> 1.1.0\n\n## 4.0.1 (31 May, 2018)\n\n* Fixed tagbuilder issue with Rails 5.0.x - [#1](https://github.com/leikind/wice_grid/pull/1)\n* Moved testbed into repo - [#12](https://github.com/leikind/wice_grid/pull/12)\n* Remove old release notes and empty /test directory\n* Removed `Gemfile.lock` from `.gitignore`\n* Removed `codeclimate-test-reporter` dev dependancy\n\n## 4.0.0 (18 Jan, 2018)\n\n### Rails 5.0 & 5.1 Support\nAdded support for Rails 5.0 & 5.1. Anything below Rails 5 is no longer supported.\n\n### Focused Filter Has Cursor/Caret at the End of Input\n\nThe cursor/caret used to appear at the beginning of the focused autocomplete in FF and IE.\nThis caused annoyances for users of those browsers who typed slowly since the page would\nreload and when they started typing again the text would appear before their last entries.\n\nFor example if someone was searching for 'john' but paused after 'joh', they would end up typing 'njoh', instead of 'john'. If they weren't paying attention,\nthey might think there is no 'john', when they'd mistakenly searched for 'njoh'.\n\n### Turbolinks 5 Support\nHandled by initializing WiceGrid on `turbolinks:render` as well as `page:load ready`\n\n## 3.6.0\n\n## New API For Joined Tables\n\nBefore 3.6.0 `:model_class` was used in column definitions for columns from joined tables.\n\nIn 3.6.0 the API has changed to use associations.\nIf, say, a `Task` `belongs_to` a `Priority`, a column definition should specify this association using `:assoc`:\n\n```ruby\ng.column name: 'Priority', attribute: 'name',  assoc: :priority do |task|\n  task.priority.name if task.priority\nend\n```\n\nIf, say, a `Task` `belongs_to` a `Project`, and a `Project` belongs to a `Customer`,\n`assoc:` should be a list of these associations:\n\n```ruby\ng.column name: 'Customer', attribute: 'name', assoc: [:project, :customer]  do |task|\n  task.project.customer.name if task.project && task.project.customer\nend\n```\n\n\n## Blockless Columns For Joined Tables\n\nBlockless columns used to only work for the main model.\nNow they can be used for joined tables, too.\n\nInstead of\n\n```ruby\ng.column name: 'Priority', attribute: 'name',  assoc: :priority do |task|\n  task.priority.name if task.priority\nend\n```\n\nyou can write\n\n```ruby\ng.column name: 'Priority', attribute: 'name',  assoc: :priority\n```\n\nInstead of\n\n```ruby\ng.column name: 'Customer', attribute: 'name', assoc: [:project, :customer]  do |task|\n  task.project.customer.name if task.project && task.project.customer\nend\n```\n\nyou can write\n\n```ruby\n  g.column name: 'Customer', attribute: 'name', assoc: [:project, :customer]\n```\n\n\n## New Way To Choose Datepickers\n\nBefore 3.6.0 to choose a datepicker type we used `:helper_style` in column definitions and `Wice::Defaults:HELPER_STYLE` in the configuration_file.\n\nIn 3.6.0 `:helper_style` and `Wice::Defaults:HELPER_STYLE` are gone.\n\nNow each datepicker is simply a separate filter type, and to pick a datepicker we can use `:filter_type`, just like other filter types are chosen.\n\nFilter types for dates and datetimes are\n\n* `:rails_datetime_helper`\n* `:rails_date_helper`\n* `:jquery_datepicker`\n* `:bootstrap_datepicker`\n\nExample:\n\n```ruby\ng.column name: 'Updated', attribute: 'updated_at', filter_type: :rails_datetime_helper do |task|\n  task.updated_at.to_fs(:db)\nend\n```\n\nDefault filter types for date and datetime columns are set by `Wice::Defaults:DEFAULT_FILTER_FOR_DATE` and `Wice::Defaults:DEFAULT_FILTER_FOR_DATETIME`.\n\n\n## Icons\n\nThere are no more icons inside of the gem. Instead, [Font Awesome](https://github.com/FortAwesome/font-awesome-sass) is used.\n\n## CSS\n\nCSS is no longer copied to the applications asset directory. Instead the user is supposed to add\n\n```sass\n@import \"wice_grid\";\n@import \"font-awesome-sprockets\";\n@import \"font-awesome\";\n```\n\nto `application.scss`.\n\n`font-awesome-sass` is not a dependency of WiceGrid in case you decide to style WiceGrid icons differently,\nso you need to add it explicitly to your Gemfile:\n\n```ruby\ngem 'font-awesome-sass',  '~> 4.3'\n```\n\n\n## CI_LIKE\n\nSetting a configuration value in Wice::Defaults::STRING_MATCHING_OPERATORS to CI_LIKE will result in the following SQL generated for string filters:\n\n```sql\nUPPER(table.field) LIKE UPPER(?)\"\n```\n\n\n## USE_DEFAULT_SCOPE\n\nNew `USE_DEFAULT_SCOPE` configuration value from @nathanvda.\nBy default ActiveRecord calls are always executed inside `Model.unscoped{}`.\nSetting `USE_DEFAULT_SCOPE` to `true` will use the default scope for all queries.\n\n\n# 3.5.0\n\n* In addition to two icons \"SET ALL\" and \"UNSET ALL\" in the action column, there is now\n  an option to use a standard HTML checkbox. This is now the default.\n* Support for Bootstrap Datepicker. A suggested way to use Bootstrap Datepicker in a Rails app\n  is https://github.com/Nerian/bootstrap-datepicker-rails. Configuration variable HELPER_STYLE\n  sets the default flavor of date pickers. Can also be set per grid with helper_style: :bootstrap\n  * :calendar  jQuery UI datepicker\n  * :bootstrap Bootstrap datepicker\n  * :standard\n* Italian locale\n* Spanish locale\n* various fixes\n* Configuration variable ALLOW_SHOWING_ALL_QUERIES renamed to ALLOW_SHOWING_ALL_RECORDS\n\n\n\n# 3.4.14\n\nWice::Defaults::HIDE_ALL_LINK_FROM is nil by default\n\n# 3.4.13\n\nNew configuration variable Wice::Defaults::HIDE_ALL_LINK_FROM! When set and the total\nnumber of row exceeds its value, the \"SHOW ALL\" link disappears.\n\n# 3.4.12\n\nfixes\n\n# 3.4.11\n\nstarted adding HTML5 datepicker\nchanged how relations are detected so that it can work with relation proxies (aka octopus)\n\n# 3.4.10\n\nbug fixes\nbetter support for :group\n\n# 3.4.9\n\nbetter support for Asset Pipeline\n\nbugfixes\n\ndropped support for Ruby 1.8\n\n# 3.4.8\n\na friendlier exception message when a constant is missing in wice_grid_config.rb\n\nbugfixes\n\n# 3.4.6\n\nBetter support for Turbolinks\n\nBetter support for ActiveRelation #references\n\nvariable Wice::Defaults::PAGE_METHOD_NAME\n\n# 3.4.5\n\nSupport for ActiveRelation #references\n\nbugfixes\n\n# 3.4.4\n\nbugfixes\n\n# 3.4.3\n\nbugfixes\n\n# 3.4.2\n\nExternal columns processors\n\nOperators '<','>','<=','>=','=' in the integer column\n\nBugfixes\n\n# 3.4.1\n\nSupport for Bootstrap 3\n\n# 3.4.0\n\nSupport for Rails 4\n\n# 3.3.0\n\nThe with_paginated_resultset callback receives an ActiveRelation object, not a lambda\n\nWice::Defaults::DATEPICKER_YEAR_RANGE added to the config to define the default year range in Datepicker (https://github.com/leikind/wice_grid/issues/61)\n\nImprovement of the javascript calendar control: if the FROM field is set to a value after TO, TO is set to the value of FROM.\nVice versa: if the TO field is set to a value before FROM, FROM is set to the value of TO\n\nNew view helpers filter_and_order_state_as_hash(grid) and filter_state_as_hash(grid)\n\nHTML tag caption supported\n\nSupport for Ruby 2.0\n\n2 errors fixed in the Saved Queries UI ( https://github.com/leikind/wice_grid/issues/89 )\n\nBug fixed: extra_request_parameters not propagating to the pagination panel\n\nDocumentation improvements\n\n# 3.2.2\n\nimprovement of the javascript calendar control: if the FROM field is set to a value after TO, TO is set to the value of FROM.\nVice versa: if the TO field is set to a value before FROM, FROM is set to the value of TO\n\nWice::Defaults::DATEPICKER_YEAR_RANGE added to the config to define the default year range in Datepicker (https://github.com/leikind/wice_grid/issues/61)\n\nsupport for Ruby 2.0\n\n<caption> supported\n\n2 js errors fixed in the Saved Queries UI ( https://github.com/leikind/wice_grid/issues/89\n\nhelpers filter_and_order_state_as_hash(grid) and filter_state_as_hash(grid)\n\nthe with_paginated_resultset callback receives an ActiveRelation object, not a lambda\n\n# 3.2.1\n\naction_column can now also take a block. If the block returns a falsy value, no checkbox will be rendered.\n\nA fix: the css class submitted to column is also added to the <th> tags of the column.\n\nFilter related code has been refactored: condition generators are unified together with view column processors into one module. Writing your own filters has been simplified.\n\nThe default filter for numeric columns has been replaced by a simple one field filter which checks the values for equality, not the inclusion in a range.\nNew column parameter :filter_type allows to load custom alternative filters.\nThe old numeric range filter can still be used by specifying filter_type: :range. See lib/columns/column_processor_index.rb for the list of available filters.\n\n# 3.2.0\n\nFixes:\nhttps://github.com/leikind/wice_grid/issues/83\nhttps://github.com/leikind/wice_grid/issues/82\n\naction_column can now also take a block. If the block returns a falsy value, no checkbox will be rendered\n\nA fix: the css class submitted to column is also added to <th> tags of the column\n\nFilter related code has been refactored: condition generators are unified together with view column processors into one module. Writing your own filters has been simplified.\n\nThe default filter for numeric columns has been replaced by a simple one field filter which checks the values for equality, not the inclusion in a range.\nNew column parameter :filter_type allows to load custom alternative filters. The old numeric range filter can still be used by specifying  filter_type: :range.\nSee lib/columns/column_processor_index.rb</tt> for the list of available filters.\n\n\n# 3.0.4\n\nbugfixes\n\n# 3.0.3\n\nbugxixes\n\n# 3.0.2\n\nbugxixes\n\n# 3.0.1\n\nFixed the \"Cannot modify SafeBuffer in place\" problem and thus Rails # 3.0.8 and # 3.0.9\nSupport for ActiveRecord::Relation\n\n# 3.0.0\n\nRails 3 support\n\n0.6\n\nwice_grid_custom_filter_params used to be a view helper, not it is also accessible from the controller, to be used in cases like redirect_to(my_resource_path(wice_grid_custom_filter_params(...)))\n\nauto reloading filters\n\nhelper export_to_csv_javascript to create custom CSV buttons\n\noption :hide_csv_button to hide the default CSV export button\n\nMethod WiceGrid#selected_records and parameter :after were a bit of a mess and have been substituted by\n\n* WiceGrid#current_page_records returning records on the current page\n* WiceGrid#all_pages_records returning records browsable throughout all pages\n* :with_paginated_resultset - callback to process records on the current page\n* :with_resultset - callback to process records browsable throughout all pages\n\nCompliant with Rails 1.2.8 with or without rails_xss and erubis\n\nRuby 1.9.1 compliance\n\nDropdowns generated with :custom_filter => :auto and :custom_filter => [method chain] are now ordered by option labels\n\nhow_filters => false is the same as :show_filters => :no and :show_filters => true is the same as :show_filters => :always\n\naction_column - Adds a column with checkboxes for each record.\nUseful for actions with multiple records, for example, delete\nthe selected records.\n\nusing merge_conditions to merge conditions :)\n\nWiceGrid is now compatible with the new Rails XSS behavior which\nwill be the default in Rails # 3.0 and can be used in Rails 2.3.5\nusing the rails_xss plugin.\nRead http://github.com/nzkoz/rails_xss for more\n\nwice_grid_custom_filter_params\n\nsupport for with_scope and with_exclusive_scope\n\n:total_entries parameter added to initialize_grid (will_paginate)\n\nLocalization\n\nassert_keys wherever possible\n\n== 0.5\n\nToday \"WiceGrid\":http://leikind.org/pages/wicegrid has reached its next level of maturity and was awarded the tag of version 0.5.\n\nThis version of WiceGrid is accompanied by an application called _WiceGrid Examples_ running \"online\":http://grid.leikind.org/ and with source code available on  \"GitHub\":http://github.com/leikind/wice_grid_examples.\n\nHere's a list of changes as compared with \"version 0.4\":https://blog.wice.eu/2009/7/6/moving-to-github-and-wicegrid-version-0-4 :\n\n\n--- RHTML\n<%= grid(@tasks_grid) do |g|\n   ...\nend -%>\n\n<% selected = @tasks_grid.selected_records %>\n<p><%= selected.size %> records selected: <%= selected.map(&:id).to_sentence %></p>\n---\n\n\"See an online example\":http://grid.leikind.org/integration_with_application_view\n\nh4. placement of filter related icons\n\nA change in placement of filter related icons (filter icon, reset icon, show/hide icon): if the last column doesn't have  any filter or a column name, icons will be placed in the header of this column, otherwise it falls back to the usual   behavior when an additional table column is added. To change the behavior back to the old style, set   @Wice::Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS@ to @false@ in the configuration file.\n\n\"See an online example\":http://grid.leikind.org/custom_filters2\n\n\nh4. wice_grid_assets generator\n\nCopying asset files (images, css, js, and the configuration file) is now done by a plugin generator, not rake tasks:\n\n---\n./script/generate wice_grid_assets\n---\n\nh4. blank slate\n\nBlank slate feature: it is now possible to replace the grid with some alternative view if no filters are active  and there are no records to render:\n\n--- RHTML\n<%= grid(@grid) do |g|\n\n   g.blank_slate  do\n     \"There are no records\"\n   end\n\n   g.column  do |product|\n      ...\n   end\nend  -%>\n---\n\nThere are also two alternative three ways to do it:\n\n--- Ruby\ng.blank_slate \"some text to be rendered\"\n---\nand\n--- Ruby\ng.blank_slate :partial => \"partial_name\"\n---\n\n\"See an online example\":http://grid.leikind.org/no_records\n\nh4. custom filters with symbols\n\nImprovement to custom filters, namely to\n--- Ruby\n:custom_filter => :symbol\n---\nand\n--- Ruby\n:custom_filter => [:symbol1, :symbol2, :symbol3]\n---\n\nNow, if the last method returns an array of 2 elements, the first element becomes  the select option label and the second - the select option value (usually @id@).\n\nBefore this change the value returned by the method had been used for both the value and the label of the select option.\n\n\"See an online example\":http://grid.leikind.org/custom_filters3\n\nh4. custom filters and NULL\n\nValues @null@ and @not null@ in a generated custom filter dropdown are treated specially, as SQL @null@ statement  and not as strings.  Value @null@ is transformed into SQL condition @IS NULL@, and @not null@ into @IS NOT NULL@ .\n\nThus, if in a filter defined by\n\n--- Ruby\n:custom_filter => {'No' => 'null', 'Yes' => 'not null', '1' => 1, '2' => '2', '3' => '3'}\n---\nvalues @1@, @2@ and @'No'@ are selected (in a multi-select mode),  this will result in the following SQL:\n\n--- SQL\n( table.field IN ( '1', '2' ) OR table.field IS NULL )\n---\n\n\"See an online example\":http://grid.leikind.org/null_values\n\nh4. Wice::Defaults::STRING_MATCHING_OPERATORS\n\n in addition to the configuration constant @Wice::Defaults::STRING_MATCHING_OPERATOR@   to define the operator for matching strings (@LIKE@ in most cases), hash @Wice::Defaults::STRING_MATCHING_OPERATORS@   was added to specify string matching operators on per-database basis:\n\n--- Ruby\nWice::Defaults::STRING_MATCHING_OPERATORS = {\n 'ActiveRecord::ConnectionAdapters::MysqlAdapter' => 'LIKE',\n 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter' => 'ILIKE'\n}\n---\n\nA use-case for this is a Rails application connecting to two databases, one of which is MySQL, and the other is Postgresql. To use case-insensitive matching in Postgresql 'ILIKE' has to be used, but this operator is unknown to MySQL.\n\nh4. td_html_attrs and table_html_attrs shortcuts\n\n@:td_html_attrs@ in column definitions and @table_html_attrs@ in the table definitions are mostly used to add css classes, so a shorter way has been added to add css classes.\n\nInstead of\n\n--- RHTML\n<%= grid(@grid, :table_html_attrs => {:class => 'css_class1'}) do |g|\n    g.column(:td_html_attrs => {:class => 'css_class2'}) do\n      ...\n    end\nend -%>\n---\n\nIt's possible to just use the new @:class@ option:\n\n--- RHTML\n<%= grid(@grid, :class => 'css_class1') do |g|\n  g.column(:class => 'css_class2') do\n  end\nend -%>\n---\n\nh4. allow_multiple_selection\n\nNew options for @column@: @:allow_multiple_selection@, use @:allow_multiple_selection => false@ to disable switching between single and multiple selection modes for custom dropdown boxes.\n\n\"See an online example\":http://grid.leikind.org/custom_filters4\n\nh4. allow_ordering\n\nNew parameter for @column@: @:allow_ordering@. Use @:allow_ordering => false@ to disable the ordering of the column.\n\n\"See an online example\":http://grid.leikind.org/basics6\n\nh4. allow_showing_all_records\n\nParameter @:allow_showing_all_records@ moved from @initialize_grid@  to the view helper.\n\nh4. other\n\n* Default styles updated.\n* Javascript code cleaned up and refactored.\n* Quite some number of bugs fixed\n\n== 0.4\n\n* Detached filters: it has become possible to detach filters and place them anywhere on the page, before or after the grid.\n  Read section \"Detached Filters\" in the README.\n\n*  More control over Submit and Reset buttons.\n   Two new view helpers: submit_grid_javascript returns javascript which applies current filters; reset_grid_javascript returns javascript\n   which resets the grid, clearing the state of filters. This allows to create your own Submit and Reset buttons anywhere on the page\n   with the help of button_to_function:\n\n     <%= button_to_function \"Submit\", submit_grid_javascript(@grid) %>\n     <%= button_to_function \"Reset\",  reset_grid_javascript(@grid) %>\n\n   To complement this feature there are two new parameters in the +grid+ helper :hide_submit_button and :hide_reset_button which\n   hide default buttons in the grid if set to true. Together with detached filter this allows to completely\n   get rid of the filter row with filters and icons.\n\n* erb_mode option has been moved to the grid view helper - watch for warnings and remove the parameter from initialize_grid if you have it there.\n\n* helper include_wice_grid_assets will require WiceGrid javascripts and stylesheets on demand, that is, only if at least one initialize_grid\n  has been called in the controller. Otherwise the helper returns an empty string. However, you can force the old unconditioned behavior if you\n  need by submitting  parameter :load_on_demand set to false:\n    <%= include_wice_grid_assets(:load_on_demand => false) %>\n\n* Compatibility with Rails asset caching. Helpers names_of_wice_grid_stylesheets and names_of_wice_grid_javascripts return names of stylesheet and\n  javascript files and can be used with stylesheet_link_tag and javascript_include_tag with :cache => true. Using this trick you have to deal with\n  the parameters correctly, mind that Prototype has to be loaded before WiceGrid javascripts:\n\n    <%= stylesheet_link_tag *(['core',  'modalbox'] + names_of_wice_grid_stylesheets + [ {:cache => true}]) %>\n    <%= javascript_include_tag *([:defaults] + names_of_wice_grid_javascripts + [ 'ui', 'swfobject', {:cache => true}]) %>\n\n*  When a page with a WiceGrid instance is loaded there is check a small chunk of javascript that checks whether Prototype is loaded and whether\n   the main WiceGrid javascript files is loaded and is of the correct version. Problems are reported to the user via alert() dialog boxes.\n   This check has now been disabled in the production mode.\n\n*  The default field separator in generated CSV (comma) can now be overridden by setting :enable_export_to_csv  to a string instead of +true+.\n\n*  It is possible to add your own handcrafted HTML after and/or before each grid row. This works similar to +row_attributes+,\n   by adding blocks after_row and before_row:\n\n   <%= grid(@tasks_grid) do |g|\n      g.before_row do |task|\n        if task.active?\n          \"<tr><td colspan=\\\"10\\\">Custom line for #{t.name}</td></tr>\"  # this would add a row\n                                                                        # before every active task row\n        else\n          nil\n        end\n      end\n      .......\n    end %>\n\n\n\n*  Bug fixes\n\n*  Refactoring\n=============\n\n=== 03/04/2009\n\nPossibility to add custom lines after and/or before a grid row.\n\n\n=== 16/03/2009\n\nOption to override the default field separator in generated CSV (comma).\n\n\n=== 13/02/2009\n\na bug fix for incorrect generation if dom ids for javascript calendar filter. Happened only for columns belonging to joined tables\n\n=== 12/01/2009\n\nWiceGrid 0.3 released\n\n=== 12/01/2009\n\nAll records mode\n\n=== 10/12/2008\n\ncustom_filter made Rails-compliant, a new flavor -  Array of two-element arrays\n\n=== 4/12/2008\nA single helper to include all assets in a page\n\nA javascript error message if Prototype is not loaded\n\nA javascript error message if wice_grid.js is not loaded\n\nAdded status info to the pagination line:\n       « Previous 1 2 3 Next »          1-20 / 50\n\n=== 3/12/2008\nFirst implementation of saved queries\n\n\n=== 25/11/2008\n\nNegation for string filters: match records where this fiels DOES NOT include the given fragment.\n\n=== 24/11/2008\n\nThe string matching operator for string filters (LIKE) has been moved to wice_grid_config.rb in order to make it easier to substitute it with\nsomething else, for example, ILIKE of Postgresql.\n\n\n=== 19/11/2008\n\nExperimental feature: :table_alias parameter to allow ordering and filtering for joining associations referring the same table.\n(See \"Joined associations referring to the same table\" in README)\n\n=== 18/11/2008\n\nRefactoring\n\n=== 6/11/2008\n\nAbility to provide a callback to a Proc object or a method, the callback will be called with the objects of the current selection of\nobjects (throughout all pages). Can be used to use the WiceGrid filters set up by the user for further processing of the user's selection  of\nobjects.\n\n=== 5/11/2008\n\nJavascript calendars as Date/Datetime filters\n\n\n=== 4/11/2008\n\nAbility to inject custom sql code into the ORDER BY clause, for example, ORDER BY char_length(table1.foo)\n\n=== 4/11/2008\n\nCreates a new branch for version 2.3\n\n\n\n=== 21/10/2008\n\nA bugfix related to custom filters influencing other columns with filters\nA more informative error message if the grid can't find the underlying database column for a view column (incorrect :column_name and :model)\n\n=== 8/10/2008\n\nNew view helper parameter <tt>:sorting_dependant_row_cycling</tt> - When set to true (by default it is false) the row styles +odd+ and +even+\nwill be changed only when the content of the cell belonging to the sorted column changes. In other words, rows with identical values in the\nordered column will have the same style (color).\n\n=== 3/10/2008\n\nFor simple columns like\n\n  g.column :column_name => 'Username', :attribute_name => 'username'  do |account|\n    account.username\n  end\n\nthe following blockless shortcut can be used:\n\n  g.column :column_name => 'Username', :attribute_name => 'username'\n\nIn this case +attribute_name+ will be used as the method name to send to the ActiveRecord instance.\n\n=== revision 27 (30/09/2008)\n\n* CSV export\n* Custom filters can switch between a dropdown list and a multiple select list, thus allowing to search for records matching\n  more that one value (operator OR)\n\n=== revision 17 (19/08/2008)\n\n* A bug fixed: extra_request_parameters did not propagate to will_paginate page panel. Now it does.\n\n=== revision 13 (6/08/2008)\n\n* File <tt>config.rb</tt> renamed.\n* New parameters for +column+ :\n  * <tt>:boolean_filter_true_label</tt> - overrides the default value for <tt>BOOLEAN_FILTER_TRUE_LABEL</tt> ('+yes+') in the config.\n    Only has effect in a column with a boolean filter.\n  * <tt>:boolean_filter_false_label</tt> - overrides the default value for <tt>BOOLEAN_FILTER_FALSE_LABEL</tt> ('+no+') in the config.\n    Only has effect in a column with a boolean filter.\n  * <tt>:filter_all_label</tt> - overrides the default value for <tt>BOOLEAN_FILTER_FALSE_LABEL</tt> ('<tt>--</tt>') in the config.\n    Has effect in a column with a boolean filter _or_ a custom filter.\n\n=== revision 11\n\n* New row_attributes method to dynamically generate HTML attributes for the <tt><tr></tt> tag:\n\n\t<%= grid(@portal_applications_grid) do |g|\n\t\tg.row_attributes{ |portal_application|\n\t\t\t{:id => \"#{@portal_applications_grid.name}_row_#{portal_application.id}\"}\n\t\t}\n\n\t\tg.column{ |portal_application| ... }\n\t\tg.column{ |portal_application| ... }\n\tend    -%>\n\n* The column block can now optionally return an array of two values, where the first element is the cell\n  contents and the second is a hash of HTML attributes to be added for the <td> tag of the current cell.\n\n=== revision 10\n\n* New parameter +grid+ parameter: <tt>:extra_request_parameters</tt>.\n  (Read http://redmine.wice.eu/api/wice_grid/classes/Wice/GridViewHelper.html#M000002)\n\n=== 0\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\n# Use custom version of jquery-ui-rails and font-awesome-sass\ngem 'jquery-ui-rails', github: 'dima4p/jquery-ui-rails'\ngem 'font-awesome-sass', github: 'dima4p/font-awesome-sass'\n\ngemspec\n"
  },
  {
    "path": "Guardfile",
    "content": "# A sample Guardfile\n# More info at https://github.com/guard/guard#readme\n\n## Uncomment and set this to only include directories you want to watch\n# directories %w(app lib config test spec features) \\\n#  .select{|d| Dir.exist?(d) ? d : UI.warning(\"Directory #{d} does not exist\")}\n\n## Note: if you are using the `directories` clause above and you are not\n## watching the project directory ('.'), then you will want to move\n## the Guardfile to a watched dir and symlink it back, e.g.\n#\n#  $ mkdir config\n#  $ mv Guardfile config/\n#  $ ln -s config/Guardfile .\n#\n# and, you'll have to watch \"config/Guardfile\" instead of \"Guardfile\"\n\n# Note: The cmd option is now required due to the increasing number of ways\n#       rspec may be run, below are examples of the most common uses.\n#  * bundler: 'bundle exec rspec'\n#  * bundler binstubs: 'bin/rspec'\n#  * spring: 'bin/rspec' (This will use spring if running and you have\n#                          installed the spring binstubs per the docs)\n#  * zeus: 'zeus rspec' (requires the server to be started separately)\n#  * 'just' rspec: 'rspec'\n\nguard :rspec, cmd: \"bundle exec rspec\",\n    all_after_pass: false, all_on_start: false, failed_mode: :focus do\n  require \"guard/rspec/dsl\"\n  dsl = Guard::RSpec::Dsl.new(self)\n\n  # Feel free to open issues for suggestions and improvements\n\n  # RSpec files\n  rspec = dsl.rspec\n  watch(rspec.spec_helper) { rspec.spec_dir }\n  watch(rspec.spec_support) { rspec.spec_dir }\n  watch(rspec.spec_files)\n\n  # Ruby files\n  ruby = dsl.ruby\n  dsl.watch_spec_files_for(ruby.lib_files)\n\n  # Rails files\n  rails = dsl.rails(view_extensions: %w(erb haml slim))\n  dsl.watch_spec_files_for(rails.app_files)\n  dsl.watch_spec_files_for(rails.views)\n\n  watch(rails.controllers) do |m|\n    [\n      rspec.spec.call(\"routing/#{m[1]}_routing\"),\n      rspec.spec.call(\"controllers/#{m[1]}_controller\"),\n      rspec.spec.call(\"acceptance/#{m[1]}\")\n    ]\n  end\n\n  # Rails config changes\n  watch(rails.spec_helper)     { rspec.spec_dir }\n  watch(rails.routes)          { \"#{rspec.spec_dir}/routing\" }\n  watch(rails.app_controller)  { \"#{rspec.spec_dir}/controllers\" }\n\n  # Capybara features specs\n  watch(rails.view_dirs)     { |m| rspec.spec.call(\"features/#{m[1]}\") }\n  watch(rails.layouts)       { |m| rspec.spec.call(\"features/#{m[1]}\") }\n\n  # Turnip features and steps\n  watch(%r{^spec/acceptance/(.+)\\.feature$})\n  watch(%r{^spec/acceptance/steps/(.+)_steps\\.rb$}) do |m|\n    Dir[File.join(\"**/#{m[1]}.feature\")][0] || \"spec/acceptance\"\n  end\nend\n"
  },
  {
    "path": "MIT-LICENSE",
    "content": "Copyright (c) 2008-2014 Yuri Leikind\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"
  },
  {
    "path": "README.md",
    "content": "[![Version](http://img.shields.io/gem/v/wice_grid.svg)](https://rubygems.org/gems/wice_grid)\n[![CircleCI](https://circleci.com/gh/leikind/wice_grid.svg?style=svg)](https://circleci.com/gh/leikind/wice_grid)\n[![Inline docs](http://inch-ci.org/github/leikind/wice_grid.svg)](http://inch-ci.org/github/leikind/wice_grid)\n[![License](http://img.shields.io/badge/license-MIT-yellowgreen.svg)](#license)\n\n# WiceGrid\n\n- [Intro](#intro)\n- [Requirements and Rails versions](#requirements-and-rails-versions)\n- [Installation](#installation)\n- [Basics](#basics)\n  - [Rendering filter panel](#rendering-filter-panel)\n  - [Initial Ordering](#initial-ordering)\n  - [Records Per Page](#records-per-page)\n  - [Conditions](#conditions)\n  - [Queries with join tables](#queries-with-join-tables)\n  - [Joined associations referring to the same table](#joined-associations-referring-to-the-same-table)\n  - [More than one grid on a page](#more-than-one_grid-on-a-page)\n  - [Custom Ordering](#custom-ordering)\n  - [Custom Sorting](#custom-sorting)\n- [Filters](#filters)\n  - [Custom dropdown filters](#custom-dropdown-filters)\n  - [Numeric Filters](#numeric-filters)\n  - [Date and DateTime Filters](#date-and-datetime-filters)\n  - [Detached Filters](#detached-filters)\n- [Defaults](#defaults)\n- [Testing](#testing)\n- [Bug reports](#bug-reports)\n\n\n## Intro\n\nWiceGrid is a Rails grid plugin.\n\nOne of the goals of this plugin was to allow the programmer to define the contents of the cell on their\nown, just like one does when rendering a collection via a simple table (and this is what differentiates\nWiceGrid from various scaffolding solutions), but automate implementation of filters, ordering,\npaginations, CSV export, and so on. Ruby blocks provide an elegant means for this.\n\n\nWiceGrid builds the call to the ActiveRecord layer for you and creates a table view with the results\nof the call including:\n\n* Pagination\n* Sortable columns\n* Filtering by multiple columns\n* Export to CSV\n* Saved queries\n\nFilters are added automatically according to the type of the underlying DB column. Filtering by more\nthan one column at the same time is possible. More than one such grid can appear on a page, and\nmanipulations with one grid do not have any impact on others.\n\nWiceGrid does not take a collection as an input, it works directly with ActiveRecord.\n\nWiceGrid does not use XHR calls to reload itself, instead simple GET requests are used for this,\nnevertheless, all other page parameters are respected and preserved. WiceGrid works well with Turbolinks.\n\nWiceGrid views do not contain forms so you can include it in your own forms.\n\nWiceGrid is known to work with MySQL, Postgres, and Oracle.\n\nContinue reading for more information or check out our [CHANGELOG](https://github.com/leikind/wice_grid/blob/rails7/CHANGELOG.md) to find out whats been going on.\n\n\n## Requirements and Rails versions\n\n```\n# Rails 7 with importmap, HotWire, and dartsass-rails\ngem 'wice_grid', '~> 7.1'\n\n# Rails 5, 6, and 7.0 without importmap (see below)\ngem 'wice_grid', '~> 6.1'\n\n# Rails 4\ngem 'wice_grid', '3.6.2'\n```\n\nWiceGrid relies on jQuery and coffeescript and the dependencies are added to the gem specification.\n\nIf you need a JS Datepicker, WiceGrid supports jQuery Datepicker or\nBootstrap Datepicker, so you might need one of those. See the section \"Installation\"\nfor details on how to use datepickers.\n\n## Installation\n\nHere is described the case when the gems `importmap` and `dartsass-rails` are in use.\nFor the case of `sass-rails` and other JavaScript approach see the\nbranch [rails6](https://github.com/leikind/wice_grid/tree/rails6).\n\nAdd the following lines to your `Gemfile`:\n\n```ruby\ngem \"wice_grid\"\ngem 'font-awesome-sass', github: 'dima4p/font-awesome-sass'\n```\n\nThe current version of the gem `font-awesome-sass` has a\n[bug](https://github.com/FortAwesome/font-awesome-sass/issues/222).\nAs soon as it is fixed, you can use the standard version.\n\nIf the application uses Date and DateTime filters, you have to use\njQuery Datepicker from the gem `jquery-ui-rails`.\n\n```ruby\ngem 'jquery-ui-rails', github: 'dima4p/jquery-ui-rails'\n```\n\nThe regular version of the gem also have an\n[incompatibility](https://github.com/jquery-ui-rails/jquery-ui-rails/pull/153) with\n`dartsass-rails` that is fixed in the custom version. I hope it will be fixed too.\n\nAlternatively you can also use Bootstrap Datepicker.\n\n```ruby\ngem 'bootstrap'\n```\n\nNote: `font-awesome-sass` is not a dependency of WiceGrid in case you decide to style WiceGrid icons differently. But if you use it it must be the version that is compatible with `dartsass-rails`. As well as the gem `jquery-ui-rails`.\n\nThen run `bundle install`.\n\nRun the generator:\n\n```\nrails g wice_grid:install\n```\n\nThis adds the following file:\n* `config/initializers/wice_grid_config.rb`\n\nYou have to edit it if required in order to define which kind of the Datepicker\nto use changing the value for `DEFAULT_FILTER_FOR_DATE` and\n`DEFAULT_FILTER_FOR_DATETIME`.\n\nIn the file `config/importmap.rb` add the following lines:\n\n```ruby\npin \"jquery\", to: \"jquery3.min.js\", preload: true\npin \"wice_grid\", to: \"wice_grid.js\", preload: true\npin \"jquery-ui\", to: \"jquery-ui.js\", preload: true\n```\n\nYou do not need the last line if you do not use jQuery Datepicker.\n\nIf you are going to use `bootstrap` add also the lines:\n\n```ruby\npin \"bootstrap\", to: \"bootstrap.min.js\", preload: true\npin \"@popperjs/core\", to: \"popper.js\", preload: true\n```\n\nIn the file `app/assets/config/manifest.js` add the following lines:\n\n```\n//= link wice_grid.js\n//= link jquery3.min.js\n//= link jquery-ui.js\n//= link bootstrap.min.js\n//= link popper.js\n```\n\nThe last two lines are required if you use `bootstrap`. And the middle is not needed if you do not use jQuery Datepicker.\n\nIf the application uses Date and DateTime filters, you have to use one of\njQuery Datepicker, Bootstrap Datepicker or the standard Rails date helper.\n\nHere is an example of `app/javascript/application.js` if jQuery Datepicker is used:\n\n```javascript\nimport \"jquery\" // this import first\nimport \"jquery-ui\"\nimport \"wice_grid\"\n```\n\nHere is `app/javascript/application.js` if Bootstrap Datepicker is used:\n\n```javascript\nimport \"jquery\" // this import first\nimport \"bootstrap\"\nimport \"wice_grid\"\n```\n\nRequire WiceGrid and Font Awesome CSS in your `app/assets/stylesheets/application.scss`:\n\n```scss\n@import \"wice_grid\";\n@import \"font-awesome\";\n@import \"bootstrap\";\n```\n\nThis will provide very basic styles, not specifying exactly how the table should\nlook like.\n\nWiceGrid uses icons from Font Awesome.\nShould you decide to write you own styles for WiceGrid, you can just remove these imports and write your own styles.\n\nIf the application does not use Bootstrap you do not need the last line.\nBut the markup generated by WiceGrid will have correct classes and will fit nicely if you include Bootstrap.\n\n## Basics\n\nThe simplest example of a WiceGrid for one simple DB table is the following:\n\nController:\n\n```ruby\n@tasks_grid = initialize_grid(Task)\n```\n\nIt is also possible to use an  `ActiveRecord::Relation` instance as the first argument:\n\n```ruby\n@tasks_grid = initialize_grid(Task.where(active: true))\n```\n\nView:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n\n  g.column do |task|\n    task.id\n  end\n\n  g.column  do |task|\n    task.title\n  end\n\n  g.column do |task|\n    task.description\n  end\n\n  g.column do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n```\n\nCode `g.column do |task| ... end`\ndefines everything related to a column in the resulting view table including column names, sorting,\nfiltering, the content of the column cells, etc. The return value of the block is the table cell content.\n\nColumn names are defined with parameter `:name`:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n\n  g.column name: 'ID' do |task|\n    task.id\n  end\n\n  g.column name: 'Title'  do |task|\n    task.title\n  end\n\n  g.column name: 'Description' do |task|\n    task.description\n  end\n\n  g.column name: 'Archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n```\n\nTo add filtering and ordering, declare to which column in the underlying database table(s) the view\ncolumn corresponds using parameter `:attribute`:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n\n  g.column name: 'ID', attribute: 'id' do |task|\n    task.id\n  end\n\n  g.column name: 'Title', attribute: 'title'  do |task|\n    task.title\n  end\n\n  g.column  name: 'Description', attribute: 'description' do |task|\n    task.description\n  end\n\n  g.column name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n```\n\nThis will  add sorting links and filters for columns `Username` and `Active`. The plugin automatically\ncreates filters according to the type of the database column. In the above example a text field will be\ncreated for column Title (title is a string), for column `Archived` a dropdown filter will be created\nwith options 'Yes', 'No', and '--', and for the integer ID two short text fields are added which can\ncontain the numeric range (more than, less than).\n\nIt is important to remember that `:attribute` is the name of the database column, not a model attribute.\nOf course, all database columns have corresponding model attributes, but not all model attributes map to\ncolumns in the same table with the same name.\n\nRead more about available filters in the documentation for the column method.\n\nRead the section about custom dropdown filters for more advanced filters.\n\nFor columns like\n\n```ruby\ng.column name: 'Title', attribute: 'title'  do |task|\n  task.title\nend\n```\n\nwhere the block contains just a call to the same attribute declared by :attribute, the block can be\nomitted:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n\n  g.column name: 'ID', attribute: 'id'\n\n  g.column name: 'Title', attribute: 'title'\n\n  g.column name: 'Description', attribute: 'description'\n\n  g.column name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n\n  g.column  do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n```\n\nIn this case `name` will be used as the method name to send to the ActiveRecord instance.\n\nIf only ordering is needed, and no filter, we can turn off filters using `:filter` :\n\n```ruby\ng.column name: 'ID', attribute: 'id', filter: false\n```\n\nIf no ordering links are needed, use `ordering: false`:\n\n```ruby\ng.column name: 'Added', attribute: 'created_at', ordering: false\n```\n\nIt is important to understand that it is up to the developer to make sure that the value returned by a\ncolumn block (the content of a cell) corresponds to the underlying database column specified by\n`:attribute` (and `:assoc` discussed below).\n\n\n### Rendering filter panel\n\nThe filter panel can be shown and hidden clicking the icon with binoculars.\n\nThe way the filter panel is shown after the page is loaded is controlled via parameter\n`:show_filters` of the `grid` helper.\nPossible values are:\n\n* `:when_filtered` - the filter is shown when the current table is the result of filtering\n* `:always` - always show the filter\n* `:no` - never show the filter\n\nExample:\n\n```erb\n<%= grid(@tasks_grid, show_filters: :always) do |g|\n  ......\nend -%>\n```\n\nFilter related icons (filter icon, reset icon, show/hide icon) are placed in the header of the last\ncolumn if it doesn't have any filter or a column name, otherwise an additional table column is added.\nTo always place the icons in the additional column, set\n`Wice::Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS` to `false` in the configuration file.\n\n\n### Initial ordering\n\nInitializing the grid we can also define the column by which the record will be ordered <em>on the first\nrendering of the grid</em>, when the user has not set their ordering setting by clicking the column label,\nand the order direction:\n\n```ruby\n@tasks_grid = initialize_grid(Task,\n  order:           'tasks.title',\n  order_direction: 'desc'\n)\n```\n\n### Records per page\n\nThe number of rows per page is set with `:per_page`:\n\n```ruby\n@tasks_grid = initialize_grid(Task, per_page: 40)\n```\n\n### Conditions\n\nThe `initialize_grid` method supports a `:conditions` parameter which is passed on to the underlying\nActiveRecord, so it can be in any format processable by ActiveRecord:\n\n```ruby\n@tasks_grid = initialize_grid(Task,\n  conditions: [\"archived = false and estimated_time > ?\", 100]\n)\n\n@tasks_grid = initialize_grid(Task,\n  include:    :project,\n  conditions: {archived: false, project: {active: true}}\n)\n```\n\nA good example is substituting a common pattern like\n\n```ruby\n@user_groups = @portal_application.user_groups\n```\n\nwith WiceGrid code:\n\n```ruby\n@user_groups_grid = initialize_grid(\n  UserGroup,\n  conditions: ['portal_application_id = ?', @portal_application]\n)\n```\n\nAlternatively, instead of a Class object as the first parameter, you can use  ActiveRecord::Relation:\n\n```ruby\n@tasks_grid = initialize_grid(\n  Task.where(archived: false, projects: {active: true}).joins(:project)\n)\n```\n\nPlease note that though all queries inside of WiceGrid are run without the default scope, if you use an\nActiveRecord::Relation instance to initialize grid, it will already include the default scope. Thus you\nmight consider using `unscoped`:\n\n```ruby\n@tasks_grid = initialize_grid(\n  Task.unscoped.where(archived: false, projects: {active: true}).joins(:project)\n)\n```\n\n### Queries with join tables\n\nTo join other tables, use `:include`:\n\n```ruby\n@products_grid = initialize_grid(Product,\n  include:  :category,\n  order:    'products.name',\n  per_page: 20\n)\n```\n\nThe value of `:include` can be an array of association names:\n\n```ruby\ninclude: [:category, :users, :status]\n```\n\nIf you need to join tables to joined tables, use hashes:\n\n\n```ruby\ninclude: [:category, {users: :group}, :status]\n```\n\n\nNote that if we want to order initially by a column from a joined table we have to specify the table and\nthe column name with the sql dot notation, that is, `products.name`.\n\nTo show columns of joined tables in the view table, specify the corresponding association with `:assoc`:\n\n```erb\n<%= grid(@products_grid) do |g|\n  g.column name: 'Product Name', attribute: 'name' do |product|  # primary table\n    link_to(product.name, product_path(product))\n  end\n\n  g.column name: 'Category', attribute: 'name', assoc: :category do |product| # joined table\n    product.category.name\n  end\n%>\n```\n\nPlease note that the blockless definition of the column can also be used with joined tables:\n\n```\ng.column name: 'Category', attribute: 'name', assoc: :category\n\n```\n\nIf an association is mentioned in the column definition, it can be omitted from `:include` in `initialize_grid`.\nThus, the above example can be rewritten without `:category` in `:include`:\n\n\n```ruby\n@products_grid = initialize_grid(Product,\n  order:    'products.name',\n  per_page: 20\n)\n```\n\n```erb\n<%= grid(@products_grid) do |g|\n  g.column name: 'Product Name', attribute: 'name' do |product|  # primary table\n    link_to(product.name, product_path(product))\n  end\n\n  g.column name: 'Category', attribute: 'name', assoc: :category\n\n%>\n```\n\n### Joined associations referring to the same table\n\nIn case there are two joined associations both referring to the same table, ActiveRecord constructs a query\nwhere the second join provides an alias for the joined table. To enable WiceGrid to order and filter by\ncolumns belonging to different associations but originating from the same table, set `:table_alias`\nto this alias:\n\nModel:\n\n```ruby\n class Project < ActiveRecord::Base\n   belongs_to :customer, class_name: 'Company'\n   belongs_to :supplier, class_name: 'Company'\n end\n```\n\nController:\n\n```ruby\n@projects_grid = initialize_grid(Project)\n```\n\nView:\n\n```erb\n<%= grid(@projects_grid, show_filters: :always) do |g|\n\n  g.column name: 'Project Name', attribute: 'name'\n\n  g.column name: 'Customer company', assoc: :customer, attribute: 'name'\n\n  g.column name: 'Supplier company', assoc: :supplier, attribute: 'name', table_alias: 'suppliers_projects'\n\nend -%>\n```\n\n### More than one grid on a page\n\nIt is possible to use more that one grid on a page, each with its own state. To do so, you must specify the\nname of the grid in `initialize_grid` using parameter `:name`.\n\nThe name serves as the base name for HTTP parameters, DOM IDs, etc, so it is important that all grids on a\npage have different names. The default name is 'grid'.\n\nThe name can only contain alphanumeric characters.\n\n```ruby\n@projects_grid = initialize_grid(Project, name: 'g1')\n@tasks_grid    = initialize_grid(Task,    name: 'g2')\n```\n\n### Custom Ordering\n\nIt is possible to change the way results are ordered injecting a chunk of SQL code, for example, use\n`ORDER BY INET_ATON(ip_address)` instead of `ORDER BY ip_address`.\n\nTo do so, provide parameter `:custom_order` in the initialization of the grid with a `Hash` where\nkeys are fully qualified names of database columns, and values are anything that can be passed to ActiveRecord's\n`order` method (without specifying `ASC` or `DESC`.)\n\n#### String\n\nStarting in Rails 5.2, you may need to whitelist `String` values with `Arel.sql`\nto avoid a warning or error.\n\n```ruby\n@hosts_grid = initialize_grid(Host,\n  custom_order: {\n    'hosts.ip_address' => Arel.sql('INET_ATON(hosts.ip_address)')\n  })\n```\n\nIt is possible to use `?` instead of the name of the column in the `Hash` value:\n\n```ruby\n@hosts_grid = initialize_grid(Host,\n  custom_order: {\n    'hosts.ip_address' => Arel.sql('INET_ATON( ? )')\n  })\n```\n\n#### Arel::Attributes::Attribute\n\nAssuming you wish to display `hosts.ip_address` but sort by another column named `hosts.ip_address_number`:\n\n```ruby\n@hosts_grid = initialize_grid(Host,\n  custom_order: {\n    'hosts.ip_address' => Arel::Table.new(:hosts)[:ip_address_number]\n  })\n```\n\n#### Proc\n\nYou can use a `Proc` to return a `String` or `Arel::Attributes::Attribute` as above.\n\n```ruby\n@hosts_grid = initialize_grid(Host,\n  custom_order: {\n    'hosts.ip_address' => lambda{|f| Arel.sql(request[:numeric_sorting] ? \"INET_ATON( #{f} )\" : f) }\n  })\n```\n\n### Custom Sorting\n\nWhile `:custom_order` lets you define SQL that determines the results order, you may want to sort the result by arbritrary Ruby code. The `:sort_by` option on columns lets you define a `Proc` that determines the sorting on that column. This `Proc` is passed to Ruby's `Enumerable#sort_by`.\n\n```ruby\ngrid.column name: 'Status Name', attribute: 'name', sort_by: ->(status) { [status.number_of_vowels, status] }\n```\n\nYou can also use `:sort_by` to add sorting on values that are not columns in the database. In this case, you must also define an arbitrary `:attribute` option that serves as the request's sort key parameter.\n\n```ruby\ngrid.column name: 'Task Count', attribute: 'task_count', sort_by: ->(status) { status.tasks.count } do |status|\n  status.tasks.count\nend\n```\n\nNote that `sort_by` will load all records into memory to sort them (even the ones not on the current page), so it may not be appropriate for use with a large number of results.\n\n## Filters\n\nEach column filter type is supported by a `column processor`. Each `column processor` is\nresponsible for\n\n* generating HTML and supporting Javascript for the filter, input fields, dropdowns, javascript calendars, etc\n* converting HTTP parameters from those input fields into ActiveRelation instances\n\nBy default column filters depend on the type of the underlying database column.\n\nYou can override these defaults in two ways:\n\n* defining a custom filter with `:custom_filter`. Read more about it section \"Custom dropdown filters\".\n* overriding the `column processor` type with `:filter_type`.\n\nWhich Column Processor is instantiated for which data types is defined in file\n`lib/wice/columns/column_processor_index.rb`:\n\n```ruby\nmodule Wice\n  module Columns\n    COLUMN_PROCESSOR_INDEX = ActiveSupport::OrderedHash[ #:nodoc:\n      :action,                 'column_action',                # Special processor for action column, columns with checkboxes\n      :text,                   'column_string',\n      :string,                 'column_string',\n      :rails_datetime_helper,  'column_rails_datetime_helper', # standard Rails datepicker helper\n      :rails_date_helper,      'column_rails_date_helper',     # standard Rails date helper\n      :jquery_datepicker,      'column_jquery_datepicker',\n      :bootstrap_datepicker,   'column_bootstrap_datepicker',\n      :html5_datepicker,       'column_html5_datepicker',      # not ready\n      :integer,                'column_integer',\n      :range,                  'column_range',\n      :float,                  'column_float',\n      :decimal,                'column_float',\n      :custom,                 'column_custom_dropdown',       # Special processor for custom filter columns\n      :boolean,                'column_boolean'\n    ]\n  end\nend\n```\n\nA good example for using `:filter_type` to change th default is numeric columns. By default\n`'column_integer'` is instantiated for `integer` columns, and it renders one input field.\nBut it is also possible to use another Column Processor called `'column_range'` which renders two\ninput fields and searches for values in the given the range instead of searching for values which equal\nthe given search term.\n\nIt also possible to define and use your own column processors outside of the plugin, in you application.\nRead more about this in section \"Defining your own external filter processors\".\n\n\n### Custom dropdown filters\n\nIt is possible to construct custom dropdown filters. A custom dropdown filter is essentially a dropdown\nlist.\n\nDepending on the value of `column` parameter`:custom_filter` different modes are available:\n\n\n#### Array of two-element arrays or a hash\n\nAn array of two-element arrays or a hash are semantically identical ways of creating a custom filter.\n\nEvery first item of the two-element array is used for the label of the select option while the second\nelement is the value of the select option. In case of a hash the keys become the labels of the generated\ndropdown list, while the values will be values of options of the dropdown list:\n\n```ruby\ng.column name: 'Status', attribute: 'status',\n         custom_filter: {'Development' => 'development', 'Testing' => 'testing', 'Production' => 'production'}\n\ng.column name: 'Status', attribute: 'status',\n        custom_filter: [['Development', 'development'], ['Testing', 'testing'], ['Production', 'production']]\n```\n\nIt is also possible to submit a array of strings or numbers, in this case every item will be used both as\nthe value of the select option and as its label:\n\n```ruby\ng.column name: 'Status', attribute: 'status', custom_filter: ['development', 'testing', 'production']\n```\n\n#### :auto\n\n`:auto` - a powerful option which populates the dropdown list with all unique values of the column\nspecified by `:attribute` and `:assoc`, if present.\n\n```ruby\ng.column name: 'Status', attribute: 'status', custom_filter: :auto\n```\n\nIn the above example all statuses will appear in the dropdown even if they don't appear in the current\nresultset.\n\n\n#### Custom filters and associations (joined tables)\n\nIn most cases custom fields are needed for one-to-many and many-to-many associations.\n\nTo correctly build a filter condition foreign keys have to be used, not the actual values rendered in the\ncolumn.\n\nFor example, if there is a column:\n\n```ruby\ng.column name: 'Project Name', attribute: 'name', assoc: :project do |task|\n  task.project.name if task.project\nend\n```\n\nadding `:custom_filter` like this:\n\n```ruby\ng.column name: 'Project Name', attribute: 'name', assoc: :project,\n         custom_filter: Project.find(:all).map{|pr| [pr.name, pr.name]} do |task|\n  task.project.name if task.project\nend\n```\n\nis bad style and can fail, because the resulting condition will compare the name of the project,\n`projects.name` to a string, and in some databases it is possible that different records\n(projects in our example) have the same name.\n\nTo use filter with foreign keys, it is advised to change the declaration of the column from\n`projects.name`, to `tasks.project_id`, and build the dropdown with foreign keys as values:\n\n```ruby\ng.column name: 'Project Name', attribute: 'tasks.project_id',\n         custom_filter: Project.find(:all).map{|pr| [pr.id, pr.name]} do |task|\n  task.project.name if task.project\nend\n```\n\nHowever, this will break the ordering of the column - the column will be ordered by the integer foreign\nkey. To fix this, we can override the ordering using `:custom_order`:\n\n```ruby\n@tasks_grid = initialize_grid(Task,\n  include: :project,\n  custom_order: {\n    'tasks.project_id' => 'projects.name'\n  }\n)\n```\n\n#### Any other symbol (method name) or an array of symbols (method names)\n\n\nFor one symbol (different from `:auto`) the dropdown list is populated by all unique values returned\nby the method with this name sent to <em>all</em> ActiveRecord objects throughout all pages.\n\nThe conditions set up by the user are ignored, that is, the records used are all those found on all pages\nwithout any filters active.\n\nFor an array of symbols, the first method name is sent to the ActiveRecord object if it responds to this\nmethod, the second method name is sent to the returned value unless it is `nil`, and so on. In other\nwords, a single symbol mode is the same as an array of symbols where the array contains just one element.\n\n```ruby\ng.column name: 'Version', attribute: 'expected_version_id', custom_filter: [:expected_version, :to_option] do |task|\n  task.expected_version.name if task.expected_version\nend\n```\n\nThere are two important differences from `:auto`:\n\n1. The  method does not have to be a field in the result set, it is just some  value computed in the method after the database call and ActiveRecord instantiation.\n2. Filtering by any option of such a custom filter will bring a non-empty list, unlike with `:auto`.\n\n\nThis mode has one major drawback - this mode requires an additional query without `offset` and `limit`\nclauses to instantiate _all_ ActiveRecord objects, and performance-wise it brings all the advantages of\npagination to nothing. Thus, memory- and performance-wise this can be really bad for some queries and\ntables and should be used with care.\n\n\nIf the final method returns a atomic value like a string or an integer, it is used for both the value and\nthe label of the select option element:\n\n```html\n<option value=\"returned value\">returned value</option>\n```\n\nHowever, if the retuned value is a two element array, the first element is used for the option label and\nthe second - for the value.\n\nTypically, a model method like the following:\n\n```ruby\ndef to_option\n  [name, id]\nend\n```\n\ntogether with\n\n```ruby\ncustom_filter: :to_option\n```\n\nwould do the trick:\n\n```html\n<option value=\"id\">name</option>\n```\n\nAlternatively, a hash with the single key-value pair can be used, where the key will be used for the\nlabel, and the key - for the value:\n\n```ruby\ndef to_option\n  {name => id}\nend\n```\n\n#### Special treatment of values 'null' and 'not null'\n\nValues `null` and `not null` in a generated custom filter are treated specially, as  SQL `null` statement\nand not as strings. Value `null` is transformed into SQL condition `IS NULL`, and `not null` into\n`IS NOT NULL`.\n\nThus, if in a filter defined by\n\n```ruby\ncustom_filter: {'No' => 'null', 'Yes' => 'not null', '1' => 1, '2' => '2', '3' => '3'}\n```\n\nvalues '1', '2' and 'No' are selected (in a multi-select mode),  this will result in the following SQL:\n\n```sql\n( table.field IN ( '1', '2' ) OR table.field IS NULL )\n```\n\n#### Multiple selection\n\nBy default it is possible for any dropdown list to switch between single and multiple selection modes.\nTo only allow single selection use `:allow_multiple_selection`:\n\n```ruby\ng.column name: 'Expected in version', attribute: 'expected_version_id',\n       custom_filter: [:expected_version, :to_option], allow_multiple_selection: false do |task|\n  ...\nend\n```\n\n### Numeric Filters\n\nBefore version 3.2.1 the filter used for numeric columns was a range filter with two limits. Beginning\nwith version  3.2.1 the default is a direct comparison filter with one input field. The old range filter\ncan still be loaded using parameter `:filter_type` with value `:range`:\n\n```ruby\ng.column filter_type: :range do |task|\n  ...\nend\n```\n\n### Date and DateTime Filters\n\nWiceGrid provides four filters for selecting dates and time:\n\n  * ```:jquery_datepicker``` - Jquery datepicker (works for datetime, too)\n  * ```:bootstrap_datepicker``` - Bootstrap datepicker (works for datetime, too)\n  * ```:rails_date_helper``` - standard Rails date helper\n  * ```:rails_datetime_helper``` - standard Rails datetime helper\n\nSpecify a date/datetime filter just like you specify any other filter:\n\n```\n  g.column name: 'Updated', attribute: 'updated_at', filter_type: :rails_datetime_helper do |task|\n    task.updated_at.to_fs(:db)\n  end\n```\n\nDefault filters are defined in configuration constants Wice::Defaults::DEFAULT_FILTER_FOR_DATE and\nWice::Defaults::DEFAULT_FILTER_FOR_DATETIME.\n\n\n\n#### jQuery UI DatePicker `(HELPER_STYLE = :calendar)`\n\nBy default WiceGrid uses jQuery UI datepicker[http://jqueryui.com/demos/datepicker/] for Date and DateTime\nfilters. Because this is part of the standard jQuery UI codebase, it is not bundled together with the\nplugin, and it is the responsibility of the programmer to include all necessary assets including\nlocalization files if the application is multilingual.\n\njQuery UI datepicker does not have any time related controls, and when dealing with DateTime filters, the\ntime value is ignored.\n\nConstants `DATE_FORMAT` and `DATETIME_FORMAT` in the configuration file define the format of dates the\nuser will see, as well as the format of the string sent in a HTTP parameter. If you change the formats,\nmake sure that lamdbas defined in `DATETIME_PARSER` and `DATE_PARSER` return valid DateTime and Date\nobjects.\n\njQuery `datepicker` uses a different format flavor, therefore there is an additional constant\n`DATE_FORMAT_JQUERY`. While `DATE_FORMAT_JQUERY` is fed to `datepicker`, `DATE_FORMAT` is still used\nfor presenting initial date values in filters, so make sure that `DATE_FORMAT_JQUERY` and `DATE_FORMAT`\nresult in an identical date representation.\n\nConstant `DATEPICKER_YEAR_RANGE` defines the range of years in the Datepicker year dropdown. Alternatively,\nyou can always change this range dynamically with the following javascript:\n\n```js\n$( \".hasDatepicker\" ).datepicker( \"option\", \"yearRange\", \"2000:2042\" );\n```\n\n#### jQuery UI DatePicker `(HELPER_STYLE = :bootstrap)`\n\nWiceGrid also supports [Bootstrap Datepicker](https://github.com/Nerian/bootstrap-datepicker-rails).\n\n#### Rails standard input fields `(HELPER_STYLE = :standard)`\n\nAnother option is standard Rails helpers for date fields, these are separate select fields for years,\nmonths and days (also for hour and minute if it is a datetime field).\n\n### Detached Filters\n\nFilters can also be detached from the grid table and placed anywhere on page.\n\nThis is a 3-step process.\n\nFirst, define the grid with helper `define_grid` instead of `grid`. Everything should be done the same way\nas with `grid`, but every column which will have an external filter, add\n`detach_with_id: :some_filter_name`` in the column definition. The value of `:detach_with_id` is an\narbitrary string or a symbol value which will be used later to identify the filter.\n\n```erb\n<%= define_grid(@tasks_grid, show_filters: :always) do |g|\n\n  g.column name: 'Title', attribute: 'title', detach_with_id: :title_filter do |task|\n    link_to('Edit', edit_task_path(task.title))\n  end\n\n  g.column name: 'Archived', attribute: 'archived', detach_with_id: :archived_filter do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n\n  g.column name: 'Added', attribute: 'created_at', detach_with_id: :created_at_filter do |task|\n    task.created_at.to_fs(:short)\n  end\n\nend -%>\n```\n\nThen, use `grid_filter(grid, :some_filter_name)` to render filters:\n\n```erb\n<% # rendering filter with key :title_filter %>\n<%= grid_filter @tasks_grid, :title_filter  %>\n\n<% # rendering filter with key :archived_filter %>\n<%= grid_filter @tasks_grid, :archived_filter  %>\n\n<% # rendering filter with key :created_at_filter %>\n<%= grid_filter @tasks_grid, :created_at_filter  %>\n\n<% # Rendering the grid body %>\n<%= grid(@tasks_grid) %>\n```\n\nFinally, use `render_grid(@grid)` to actually output the grid table.\n\n\nUsing custom submit and reset buttons together with `hide_submit_button: true` and\n`hide_reset_button: true` allows to completely get rid of the default filter row and the default\nicons (see section 'Submit/Reset Buttons').\n\n\nIf a column was declared with `:detach_with_id`, but never output with `grid_filter`, filtering\nthe  grid in development mode will result in an warning javascript message and the missing filter will be\nignored. There is no such message in production.\n\n\n### Defining your own external filter processors\n\n\nIt possible to define and use your own column processors outside of the plugin, in you application.\n\nThe first step is to edit `Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS` in\n`wice_grid_config.rb`:\n\n```ruby\n\nWice::Defaults::ADDITIONAL_COLUMN_PROCESSORS = {\n  my_own_filter:  ['ViewColumnMyOwnFilter',   'ConditionsGeneratorMyOwnFilter'],\n  another_filter: ['ViewColumnAnotherFilter', 'ConditionsGeneratorAnotherFilter']\n}\n```\n\nThe first element in the two-item array is the name of a class responsible for rendering\nthe filter view. The second element  is the name of a class responsible for processing\nfilter parameters.\n\nFor examples of these two classes look at the existing column processors in `lib/wice/columns/`\n\nThe structure of these two classes is as follows:\n\n```ruby\nclass ViewColumnMyOwnFilter < Wice::Columns::ViewColumn\n\n  def render_filter_internal(params)\n    ...\n  end\n\n  def yield_declaration_of_column_filter\n    {\n      templates: [...],\n      ids:       [...]\n    }\n  end\nend\n\n\nclass ConditionsGeneratorMyOwnFilter < Wice::Columns::ConditionsGeneratorColumn\n\n  def generate_conditions(table_name, opts)\n    ...\n  end\n\nend\n```\n\nTo use an external column processor use `:filter_type` in a column definition:\n\n```ruby\ncolumn name: 'name', attribute: 'attribute', filter_type: :my_own_filter do |rec|\n  ...\nend\n```\n\n## Defaults\n\nDefault values like  can be  changed in `config/initializers/wice_grid_config.rb`.\n\n## Submit/Reset buttons\nInstead of using default Submit and Reset icons you can use external HTML elements to trigger\nthese actions. Add a button or any other clickable HTML element with class\n`wg-external-submit-button` or `wg-external-reset-button`, and attribute `data-grid-name`\nwhose value is the name of the grid:\n\n```html\n<button class=\"wg-external-submit-button\" data-grid-name=\"grid\">Submit</button>\n<button class=\"wg-external-reset-button\" data-grid-name=\"grid\">Reset</button>\n```\n\nTo hide the default icons use `hide_submit_button: true` and\n`hide_reset_button: true` in the `grid` helper.\n\n\n## Auto-reloading filters\n\nIt is possible to configure a grid to reload itself once a filter has been changed. It works with all\nfilter types including the JS calendar, the only exception is the standard Rails date/datetime filters.\n\nUse option `:auto_reload` in the column definiton:\n\n```erb\n\n<%= grid(@tasks_grid, show_filters: :always, hide_submit_button: true) do |g|\n\n  # String\n  g.column name: 'Title', attribute: 'title', auto_reload: true\n\n  # Boolean\n  g.column name: 'Archived', attribute: 'archived', auto_reload: true\n\n  # Custom (dropdown)\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true  do |task|\n    task.status.name if task.status\n  end\n\n  # Datetime\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true, helper_style: :calendar do |task|\n    task.created_at.to_fs(:short)\n  end\n\nend -%>\n```\n\nTo make this  behavior default change constant `AUTO_RELOAD` in the configuration file.\n\n## Styling the grid\n\n\n### Adding classes and styles\n\nThe `grid` helper accepts parameter `:html` which is a hash of HTML attributes for the table tag.\n\nAnother `grid` parameter is `header_tr_html` which is a hash of HTML attributes to\nbe added to the first `tr` tag (or two first `tr`'s if the filter row is present).\n\n`:html` is a parameter for the `column` method setting HTML attributes of `td` tags for a certain column.\n\n### Adding classes and styles dynamically\n\nWiceGrid offers ways to dynamically add classes and styles to `TR` and `TD` based on the current ActiveRecord instance.\n\n\nFor `<TD>`, let the `column` return an array where the first item is the usual\nstring output whole the second is a hash of HTML attributes to be added for the\n`<td>` tag of the current cell:\n\n```ruby\ng.column  do |portal_application|\n  css_class = portal_application.public? ? 'public' : 'private'\n  [portal_application.name, {class: css_class}]\nend\n```\n\nFor adding classes/styles to `<TR>` use special clause  `row_attributes` ,\nsimilar to `column`, only returning a hash:\n\n```erb\n<%= grid(@versions_grid) do |g|\n  g.row_attributes do |version|\n    if version.in_production?\n      {style: 'background-color: rgb(255, 255, 204);'}\n    end\n  end\n\n  g.column{|version| ... }\n  g.column{|version| ... }\nend  -%>\n```\n\nNaturally, there can be only one `row_attributes` definition for a WiceGrid instance.\n\nVarious classes do not overwrite each other, instead, they are concatenated.\n\n\n## Adding rows to the grid\n\nIt is possible to add your own handcrafted HTML after and/or before each grid row.\nThis works similar to `row_attributes`, by adding blocks `after_row`, `before_row`,  and `last_row`:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n  g.before_row do |task, number_of_columns|\n    if task.active?\n      \"<tr><td colspan=\\\"10\\\">Custom line for #{t.name}</td></tr>\"  # this would add a row\n                                                                    # before every active task row\n    else\n      nil\n    end\n  end\n\n  g.last_row do |number_of_columns|         # This row will always be added to the bottom of the grid\n    content_tag(:tr,\n      content_tag(:td,\n        'Last row',\n      colspan: 10),\n     class: 'last_row')\n  end\n\n  .......\nend %>\n```\n\nIt is up for the developer to return the correct HTML code, or return `nil` if no row is needed for this record.\nNaturally, there is only one `before_row`  definition and one `after_row` definition for a WiceGrid instance.\n\nThe second variable injected into to `before_row` and `after_row` block, and the first parameter injected\ninto the `last_row` is the number of columns in the current grid.\n\n## Rendering a grid without records\n\nIf the grid does not contain any records to show, it is possible show some alternative view instead of\nan empty grid. Bear in mind that if the user sets up the filters in such a way that the selection of\nrecords is empty, this will still render the grid and it will be possible to reset the grid clicking\n on the Reset button. Thus, this only works if the initial number of records is 0.\n\n```erb\n<%= grid(@grid) do |g|\n\n  g.blank_slate  do\n    \"There are no records\"\n  end\n\n  g.column  do |product|\n     ...\n  end\n end  -%>\n```\n\nThere are two alternative ways to do the same, submitting a string to `blank_slate`:\n\n```ruby\ng.blank_slate \"some text to be rendered\"\n```\n\nOr a partial:\n\n```ruby\ng.blank_slate partial: \"partial_name\"\n```\n\n## Action Column\n\nIt is possible to add a column with checkboxes for each record. This is useful for actions with multiple records,\nfor example, deleting selected records. Please note that `action_column` only creates the checkboxes and the\n'Select All' and 'Deselect All' buttons, and the form itself as well as processing the parameters should be\ntaken care of by the application code.\n\n```erb\n<%= grid(@tasks_grid, show_filters: :always) do |g|\n\n  ...\n\n  g.action_column\n\n  ...\n\nend -%>\n```\n\nBy default the name of the HTTP parameter follows pattern `\"#{grid_name}[#{param_name}][]\"`, thus\n`params[grid_name][param_name]` will contain an array of object IDs.\n\nYou can hide a certain action checkbox if you add the usual block to `g.action_column`, just like with the\n`g.column` definition. If the block returns `nil` or `false` no checkbox will be rendered.\n\n```erb\n<%= grid(@tasks_grid, show_filters: :always) do |g|\n\n  ...\n\n  g.action_column do |task|\n    task.finished?\n  end\n\n  ...\n\nend -%>\n```\n\nWiceGrid is form-friendly: submitting grid in a form retains the state of the form.\n\n\n\n## Integration of the grid with other forms on page\n\nImagine that the user should be able to change the behavior of the grid using some other control\non the page, and not a grid filter.\n\nFor example, on a page showing tasks, change between 'Show active tasks' to 'Show archived tasks' using a dropdown box.\nWiceGrid allows to keep the status of the grid with all the filtering and sorting using helper\n`dump_filter_parameters_as_hidden_fields` which takes a grid object and dumps\nall current sorting and filtering parameters as hidden fields. Just include\n`dump_filter_parameters_as_hidden_fields(@grid)` inside your form, and the newly rendered grid will keep ordering and filtering.\n\n```erb\n<% form_tag('', method: :get) do %>\n  <%= dump_filter_parameters_as_hidden_fields(@tasks_grid) %>\n  <%= select_tag 'archived',\n     options_for_select([['View active tasks', 0], ['View archived tasks', 1]], @archived ? 1 : 0),\n    onchange: 'this.form.submit()' %>\n<% end -%>\n```\n\n\n## Show All Records\n\nIt is possible to switch to the All Records mode clicking on link \"show all\" in the bottom right corner.\nThis functionality should be used with care. To turn this mode off for all grid instances,\nchange constant `ALLOW_SHOWING_ALL_RECORDS` in `config/initializers/wice_grid_config.rb` to\n`false`. To do so for a specific grid, use initializer parameter `:allow_showing_all_records`.\n\nConfiguration constant `START_SHOWING_WARNING_FROM` sets the threshold number of all records after\nwhich clicking on the link results in a javascript confirmation dialog.\n\n\n## CSV Export\n\nIt is possible to export the data displayed on a grid to a CSV file. The dumped data is the current resultset\nwith all the current filters and sorting applied, only without the pagination constraint (i.e. all pages).\n\nTo enable CSV export add parameters `enable_export_to_csv` and `csv_file_name` to the initialization of the grid:\n\n```ruby\n@projects_grid = initialize_grid(Project,\n  include:              [:customer, :supplier],\n  name:                 'g2',\n  enable_export_to_csv: true,\n  csv_file_name:        'projects'\n)\n```\n\n`csv_file_name` is the name of the downloaded file. This parameter is optional, if it is missing, the name of\nthe grid is used instead. The export icon will appear at the bottom right corner of the grid. If the program you are importing the generated CSV into has problem processing UTF-8, you can change the character encoding using the `csv_encoding` option. P.e. setting `csv_encoding: 'CP1252:UTF-8'` will make older versions of Excel happy. The format used is `<output encoding>:<input encoding>`.\n\nNext, each grid view helper should be placed in a partial of its own, requiring it from the master\ntemplate for the usual flow. There must be no HTML or ERB code in this partial except for the grid helper.\n\nBy convention the name of such a partial follows the following pattern:\n\n```\n  _GRID_NAME_grid.html.erb\n```\n\nIn other words, a grid named `tasks` is expected to be found in a template called\n`_tasks_grid.html.erb` (remember that the default name of grids is '`grid`'.)\n\nNext, method `export_grid_if_requested` should be added to the end of each action\ncontaining grids with enabled CSV export.\n\n`export_grid_if_requested` intercepts CSV export requests and evaluates the partial with the required grid helper.\n\nThe naming convention for grid partials can be easily overridden by supplying a hash parameter\nto `export_grid_if_requested` where each key is the name of a grid, and the value is the name of\nthe template (like it is specified for `render`, i.e. without '_' and extensions):\n\n```ruby\n  export_grid_if_requested('g1' => 'tasks_grid', 'g2' => 'projects_grid')\n```\n\nIf the request is not a CSV export request, `export_grid_if_requested` does nothing and returns\n`false`, if it is a CSV export request, the method returns `true`.\n\n\nIf the action has no explicit `render` call, it's OK to just place `export_grid_if_requested`\nas the last line of the action:\n\n```ruby\ndef index\n\n  @tasks_grid = initialize_grid(Task,\n    name:                 'g1',\n    enable_export_to_csv: true,\n    csv_file_name:        'tasks'\n  )\n\n  @projects_grid = initialize_grid(Project,\n    name:                 'g2',\n    enable_export_to_csv: true,\n    csv_file_name:        'projects'\n  )\n\n  export_grid_if_requested\nend\n```\n\nOtherwise, to avoid double rendering, use the return value of the method to conditionally call your `render` :\n\n```ruby\n\ndef index\n\n  ...........\n\n  export_grid_if_requested || render(action: 'my_template')\nend\n```\n\nIt's also possible to supply a block which will be called if no CSV export is requested:\n\n```ruby\ndef index\n\n  ...........\n\n  export_grid_if_requested do\n     render(action: 'my_template')\n  end\nend\n```\n\nIf a column has to be excluded from the CSV export,\nset `column` parameter `in_csv` to `false`:\n\n```ruby\ng.column in_csv: false do |task|\n  link_to('Edit', edit_task_path(task))\nend\n```\n\nIf a column must appear both in HTML and CSV, but with different output, duplicate the column and use\nparameters `in_csv` and `in_html` to include one of them to  html output only, the other to CSV only:\n\n```ruby\n# html version\ng.column name: 'Title', attribute: 'title', in_csv: false do |task|\n  link_to('Edit', edit_task_path(task.title))\nend\n# plain text version\ng.column name: 'Title', in_html: false do |task|\n  task.title\nend\n```\n\nThe default field separator in generated CSV is a comma, but it's possible to override it:\n\n```ruby\n@products_grid = initialize_grid(Product,\n  enable_export_to_csv:  true,\n  csv_field_separator:   ';',\n  csv_file_name:         'products'\n)\n```\n\nIf you need an external CSV export button , add class `wg-external-csv-export-button`\nto any clickable element on page and set its attribute `data-grid-name` to the name of the grid:\n\n```html\n<button class=\"wg-external-csv-export-button\" data-grid-name=\"grid\">Export To CSV</button>\n```\n\nIf you need to disable the default export icon in the grid, add `hide_csv_button: true` to the `grid` helper.\n\n\n## Access to Records From Outside The Grid\n\nThere are two ways you can access the records outside the grid - using methods of the WiceGrid\nobject and using callbacks.\n\n### Accessing Records Via The WiceGrid Object\n\nMethod `current_page_records` returns exactly the same list of objects displayed on page:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n  ...\nend -%>\n\n<p>\n  IDs of records on the current page:\n  <%= @tasks_grid.current_page_records.map(&:id).to_sentence %>\n</p>\n```\n\nMethod `all_pages_records` returns a list of objects browsable through all pages with the current filters:\n\n```erb\n<%= grid(@tasks_grid) do |g|\n  ...\nend -%>\n\n<p>\n  IDs of all records:\n  <%= @tasks_grid.all_pages_records.map(&:id).to_sentence %>\n</p>\n```\n\nMind that this helper results in an additional SQL query.\n\nBecause of the current implementation of WiceGrid these helpers work only after the declaration\nof the grid in the view.\nThis is due to the lazy nature of WiceGrid - the actual call to the database is made during\nthe execution of\nthe `grid` helper, because to build the correct query columns declarations are required.\n\n### Accessing Records Via Callbacks\n\nIt is possible to set up callbacks which are executed from within the plugin just after the call to the database.\nThe callbacks are called before rendering the grid cells, so the results of this processing can be used in the grid.\nThere are 3 ways you can set up such callbacks:\n\nVia a lambda object:\n\n```ruby\ndef index\n  @tasks_grid = initialize_grid(Task,\n    with_paginated_resultset: ->(records){\n      ...\n    }\n  )\nend\n```\n\nVia a symbol which is the name of a controller method:\n\n```ruby\ndef index\n  @tasks_grid = initialize_grid(Task,\n    with_paginated_resultset: :process_selection\n  )\nend\n\ndef process_selection(records)\n  ...\nend\n```\n\nVia a separate block:\n\n```ruby\ndef index\n  @tasks_grid = initialize_grid(Task)\n\n  @tasks_grid.with_paginated_resultset do |records|\n    ...\n  end\nend\n```\n\nThere are two callbacks:\n\n* `:with_paginated_resultset` - used to process records of the current page\n* `:with_resultset` - used to process all records browsable through all pages with the current filters\n\nWhile the `:with_paginated_resultset` callback just receives the list of records, `:with_resultset`\nreceives an ActiveRelation object which can be used to obtain the list of all records:\n\n```ruby\ndef index\n  @tasks_grid = initialize_grid(Task)\n\n  @tasks_grid.with_resultset do |active_relation|\n    all_records = active_relation.all\n    ...\n  end\nend\n```\n\nThis lazy nature exists for performance reasons.\nReading all records leads to an additional call, and there can be cases when processing all records should be triggered\nonly under certain circumstances:\n\n```ruby\ndef index\n  @tasks_grid = initialize_grid(Task)\n\n  @tasks_grid.with_resultset do |active_relation|\n    if params[:process_all_records]\n      all_records = active_relation.all\n      ...\n    end\n  end\nend\n```\n\n## Testing\n\nTo run tests:\n\n1. `git clone https://github.com/leikind/wice_grid.git`\n2. `cd wice_grid`\n3. `bundle`\n4. Install phantomjs (e.g. `brew install phantomjs` or `apt-get install phantomjs` or something else)\n5. `bundle exec appraisal rspec`\n\nTests against Rails 5.0, 5.1 & 5.2. To test against a specific version, for example Rails 5.2 run `bundle exec appraisal rails-5.2 rspec`\n\nThis repository contains a Rails application for testing purposes. To fire up this application manually, run `cd spec/support/test_app/bin; RAILS_ENV=test rails s`.\n\n## Bug reports\n\nIf you discover a problem with Wicegrid, we would love to know about it. Please use the [GitHub issue tracker](https://github.com/leikind/wice_grid/issues)\n"
  },
  {
    "path": "Rakefile",
    "content": "require 'rubygems'\nrequire 'bundler'\nrequire 'bundler/gem_tasks'\n\nbegin\n  Bundler.setup(:default, :development)\nrescue Bundler::BundlerError => e\n  $stderr.puts e.message\n  $stderr.puts 'Run `bundle install` to install missing gems'\n  exit e.status_code\nend\n\nrequire 'rake'\nrequire 'rspec/core'\nrequire 'rspec/core/rake_task'\n\nRSpec::Core::RakeTask.new(:spec)\n\ndesc 'Run RSpec with code coverage'\ntask :coverage do\n  ENV['COVERAGE'] = 'true'\n  Rake::Task['spec'].execute\nend\n\n# Experimenting with documentation system we will keep both Yardoc and Rdoc for some time, plus Inch\n\nrequire 'yard'\nrequire 'yard/rake/yardoc_task'\ndesc 'Generate YARDOC documentation for the plugin'\nYARD::Rake::YardocTask.new(:yardoc) do |t|\n  OTHER_PATHS = %w()\n  t.files   = ['lib/**/*.rb', OTHER_PATHS]\n  t.options = %w(--main=README.md --file TODO.md,CHANGELOG.md,SAVED_QUERIES_HOWTO.md,MIT-LICENSE)\n  t.stats_options = ['--list-undoc']\nend\n\ngem 'rdoc'\nrequire 'rdoc/task'\nRake::RDocTask.new(:rdoc) do |rdoc|\n  rdoc.rdoc_dir = 'rdoc'\n  rdoc.title    = 'WiceGrid'\n  rdoc.options << '--line-numbers' << '--inline-source'\n  rdoc.rdoc_files.include('README.md')\n  rdoc.rdoc_files.include('SAVED_QUERIES_HOWTO.md')\n  rdoc.rdoc_files.include('CHANGELOG.md')\n  rdoc.rdoc_files.include('lib/**/*.rb')\nend\n\ntask default: [:spec, :yardoc]\n"
  },
  {
    "path": "SAVED_QUERIES_HOWTO.md",
    "content": "## Saving Queries How-To\n\nWiceGrid allows to save the state of filters as a custom query and later restore it from the list of saved queries.\n\n### Step 1: Create the database table to store queries\n\nTo get started create the database table to store queries. Run the following generator:\n```\nrails g wice_grid:add_migration_for_serialized_queries\n```\nThis add a migration file with the definition of the table. Run the migrate task:\n```\n  bundle 'rake db:migrate'\n```\n### Step 2: Create the controller to handle AJAX queries.\n\nCreation and deletion of queries is implemented as AJAX calls, and a controller is needed to handle these calls. Create an empty controller\nwith any name and add  method +save_wice_grid_queries+ to it:\n```\n  class QueriesController < ApplicationController\n    save_wice_grid_queries\n  end\n```\nThis is it. The controller now has the required action methods.\n\n### Step 3: Add routes\n\nIf the name of the query controller is QueriesController, add the following to `routes.rb`:\n```\n  Wice::define_routes(self, 'queries')\n```\n### Step 4: Add the saved query panel to the view.\n\nTo show the list of saved queries and the form to create new queries in a view, add the following helper to the view:\n```\n  <%= saved_queries_panel(@grid_object) %>\n```\nVoila!\n\nJust like WiceGrid itself, the query panel contains no forms and is thus form-friendly.\n\n*Important*: Saved queries of all grids in the application are stored in one table and differentiated by the name of the grid, thus, for all forms\nwith saved queries it is important to define different names! (use parameter `:name` in +initialize_grid+)\n\nIt is also possible to initialize a grid with an initial saved query providing the id of the query record or the ActiveRecord\nitself to parameter `saved_query`:\n```\n  @products_grid = initialize_grid(Product,\n    name:        'prod_grid',\n    saved_query: SavedQuery.find_by_id_and_grid_name(12, 'prod_grid') )\n```\n\n## Adding Application Specific Logic to Saving/Restoring Queries\n\nWiceGrid allows to add application specific logic to saving and restoring queries by substituting the default ActiveRecord model provided by WiceGrid with a custom model.\n\nCopy `lib/wice_grid_serialized_query.rb` from the gem to `app/models/`, rename the file and the class to your liking.\n\nAfter renaming the model to SavedQuery it looks like this:\n```\n  class SavedQuery < ActiveRecord::Base  #:nodoc:\n    serialize :query\n\n    validates_uniqueness_of :name, scope: :grid_name, on: :create,\n      message: 'A query with this name already exists'\n\n    validates_presence_of :name, message: 'Please submit the name of the custom query'\n\n    def self.list(name, controller)\n      conditions = {grid_name: name}\n      self.find(:all, conditions: conditions)\n    end\n  end\n```\n\nIt is required that the model provides class method +list+ which accepts two parameters: the name of the WiceGrid instance and the controller\nobject, and returns a list of queries. The controller object is needed to provide the application context. For instance, if it is needed to\nstore queries for each user, we could add +user_id+ to the table and modify the code so it looks like the following:\n```\n  class SavedQuery < ActiveRecord::Base\n    serialize :query\n\n    validates_uniqueness_of :name, scope: :grid_name, on: :create,\n      message: 'A query with this name already exists'\n\n    validates_presence_of :name, message: 'Please submit the name of the custom query'\n\n    belongs_to :identity # !\n\n    def self.list(name, controller)\n      conditions = {grid_name: name}\n      if controller.current_user # !\n        conditions[:user_id] = controller.current_user.id # provided that method current_user is defined in ApplicationController and returns the currrent user.\n      end\n      self.find(:all, conditions: conditions)\n    end\n  end\n```\n\nThe following step is to make sure that a new query is saved with the correct +user_id+. To do so, change the helper\n`saved_queries_panel(@grid_object)` to the following:\n\n```\n   <%= saved_queries_panel(@identities_grid, extra_parameters: {user_id: @current_user.id}) %>\n```\nFor every key in has :extra_parameters there must exist a field in the model - this hash will be used as a parameter to\n`attributes=` method of the query object.\n\nFinally, let WiceGrid know which model to use for saving queries by changing constant  +QUERY_STORE_MODEL+\nin `lib/wice_grid_config.rb` to the name of the custom model (as a string), in the above example this would look like the following:\n```\n      QUERY_STORE_MODEL = 'SavedQuery'\n```\n"
  },
  {
    "path": "app/views/kaminari/wice_grid/_gap.html.erb",
    "content": "<li class=\"disabled\"><a href=\"#\">...</a></li>\n"
  },
  {
    "path": "app/views/kaminari/wice_grid/_next_page.html.erb",
    "content": "<li><%= link_to_unless current_page.last?, ::Wice::NlMessage['next_label'], url, rel: 'next', remote: remote %></li>\n"
  },
  {
    "path": "app/views/kaminari/wice_grid/_page.html.erb",
    "content": "<li <%if page.current?%>class=\"active\"<%end%>><%= link_to page, url, {remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil} %></li>\n"
  },
  {
    "path": "app/views/kaminari/wice_grid/_paginator.html.erb",
    "content": "<%= paginator.render do %>\n  <div class=\"pagination\">\n    <ul class=\"grid pagination\">\n      <% unless current_page.first? %>\n        <%= prev_page_tag %>\n      <% end %>\n      <% each_page do |page| %>\n        <% if page.left_outer? || page.right_outer? || page.inside_window? %>\n          <%= page_tag page %>\n        <% elsif !page.was_truncated? %>\n          <%= gap_tag %>\n        <% end %>\n      <% end %>\n      <% unless current_page.last? %>\n        <%= next_page_tag %>\n      <% end %>\n    </ul>\n  </div>\n<% end %>\n"
  },
  {
    "path": "app/views/kaminari/wice_grid/_prev_page.html.erb",
    "content": "<li><%= link_to_unless current_page.first?, ::Wice::NlMessage['previous_label'], url, rel: 'prev', remote: remote %></li>\n"
  },
  {
    "path": "config/locales/cz.yml",
    "content": "cz:\n  wice_grid:\n    show_filter_tooltip: Zobrazit filtr\n    hide_filter_tooltip: Skrýt filtr\n    csv_export_tooltip: Exportovat do CSV\n    filter_tooltip: Filtr\n    reset_filter_tooltip: Zrušit filtr\n    boolean_filter_true_label: \"áno\"\n    boolean_filter_false_label: \"ne\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Dátum od\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Dátum do\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Inverzní výběr\n    # link to switch to show all records\n    show_all_records_label: Zobrazit všechno\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Zobrazí všechny záznamy v databáze\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Určitě chceš zobrazit všechny záznamy v databáze?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: zpět na stránkové zobrazení\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Přepnout do stránkového zobrazení\n    # Title of the date string.\n    date_string_tooltip: Kliknutím zmažeš\n    saved_query_panel_title: Uložené filtry\n    save_query_button_label: Uložit aktuálni stav filtrů\n    saved_query_deletion_confirmation: Seš si jistej?\n    saved_query_deletion_link_title: Smazat uloženej filtr\n    saved_query_link_title: Použít uloženej filtr\n    validates_uniqueness_error: Filtr už existuje.\n    validates_presence_error: Prosím zadej název filtru.\n    query_deleted_message: Uložený filtr byl smazán.\n    query_saved_message: Filtr byl uložen.\n    select_all: Vyber všechno\n    deselect_all: Zrušit výběr\n    expand: Rozšířit\n    collapse: Kolaps\n"
  },
  {
    "path": "config/locales/de.yml",
    "content": "de:\n  wice_grid:\n    show_filter_tooltip: Filter einblenden\n    hide_filter_tooltip: Filter ausblenden\n    csv_export_tooltip: CSV Export\n    filter_tooltip: Filter\n    reset_filter_tooltip: Reset\n    boolean_filter_true_label: \"Ja\"\n    boolean_filter_false_label: \"Nein\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Von\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Bis\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Ausschließen\n    # link to switch to show all records\n    show_all_records_label: Alle anzeigen\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Alle anzeigen\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Wollen Sie wirkliche alle Einträge anzeigen?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Zurück zur seitenbasierten Ansicht\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Zurück zur seitenbasierten Ansicht\n    # Title of the date string.\n    date_string_tooltip: Löschen\n    saved_query_panel_title: Gespeicherte Abfragen\n    save_query_button_label: Filter speichern\n    saved_query_deletion_confirmation: Sind Sie sicher?\n    saved_query_deletion_link_title: Abfrage löschen\n    saved_query_link_title: Abfrage laden\n    validates_uniqueness_error: Eine Abfrage mit dieser Bezeichnung existiert bereits!\n    validates_presence_error: Bitte vergeben Sie einen Namen!\n    query_deleted_message: Abfrage gelöscht.\n    query_saved_message: Abfrage gespeichert.\n    select_all: Alle auswählen\n    deselect_all: Auswahl aufheben\n    expand: Ausklappen\n    collapse: Einklappen\n"
  },
  {
    "path": "config/locales/en.yml",
    "content": "en:\n  wice_grid:\n    show_filter_tooltip: Show filter\n    hide_filter_tooltip: Hide filter\n    csv_export_tooltip: Export to CSV\n    filter_tooltip: Filter\n    reset_filter_tooltip: Reset\n    boolean_filter_true_label: \"yes\"\n    boolean_filter_false_label: \"no\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: From\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: To\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Exclude\n    # link to switch to show all records\n    show_all_records_label: show all\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Show all records\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Are you sure you want to display all records?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: back to paginated view\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Switch back to the view with pages\n    # Title of the date string.\n    date_string_tooltip: Click to delete\n    saved_query_panel_title: Saved Queries\n    save_query_button_label: Save the state of filters\n    saved_query_deletion_confirmation: Are you sure?\n    saved_query_deletion_link_title: Delete query\n    saved_query_link_title: Load query\n    validates_uniqueness_error: A query with this name already exists\n    validates_presence_error: Please submit the name of the custom query\n    query_deleted_message: Saved query deleted.\n    query_saved_message: Query saved.\n    select_all: Select all\n    deselect_all: Remove selection\n    expand: Expand\n    collapse: Collapse\n"
  },
  {
    "path": "config/locales/es.yml",
    "content": "es:\n  wice_grid:\n    show_filter_tooltip: Mostrar filtro\n    hide_filter_tooltip: Ocultar filtro\n    csv_export_tooltip: Exportar a CSV\n    filter_tooltip: Filtro\n    reset_filter_tooltip: Reset\n    boolean_filter_true_label: \"Si\"\n    boolean_filter_false_label: \"No\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Desde\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Hasta\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Excluir\n    # link to switch to show all records\n    show_all_records_label: mostrar todos\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Mostrar todos los registros\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: ¿Estás seguro que quieres mostrar todos los registros?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: volver a la vista paginada\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Cambiar atrás a la vista con páginas\n    # Title of the date string.\n    date_string_tooltip: Click en borrar\n    saved_query_panel_title: Consultas salvadas\n    save_query_button_label: Salvar el estado de los filtros\n    saved_query_deletion_confirmation: ¿Estás seguro?\n    saved_query_deletion_link_title: Borrar consulta\n    saved_query_link_title: Cargar consulta\n    validates_uniqueness_error: Una consulta con este nombre ya existe\n    validates_presence_error: Por favor tramita el nombre la consulta modificada\n    query_deleted_message: Salvada la consulta borrado.\n    query_saved_message: Consulta salvada.\n    select_all: Selecciona todo\n    deselect_all: Borra la selección\n    expand: Expandir\n    collapse: Contraer\n"
  },
  {
    "path": "config/locales/fr.yml",
    "content": "fr:\n  wice_grid:\n    show_filter_tooltip: Afficher le filtre\n    hide_filter_tooltip: Cacher le filtrer\n    csv_export_tooltip: Exporter en CSV\n    filter_tooltip: Filtrer\n    reset_filter_tooltip: Effacer\n    boolean_filter_true_label: oui\n    boolean_filter_false_label: non\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: De\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: à\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Exclure\n    # link to switch to show all records\n    show_all_records_label: Voir tous\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Voir tous les enregistrements\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Etes-vous certain de vouloir afficher tous les enregistrements?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Retour à la vue paginée\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Retour à la vue par pages\n    # Title of the date string.\n    date_string_tooltip: Cliquez pour effacer\n    saved_query_panel_title: Requêtes sauvées\n    save_query_button_label: Sauver l'état des filtres\n    saved_query_deletion_confirmation: Etes vous sûr?\n    saved_query_deletion_link_title: Effacer la requête\n    saved_query_link_title: Charger la requête\n    validates_uniqueness_error: Un requête existante porte déjà ce nom\n    validates_presence_error: Veuillez indiquer le nom de la requête que vous souhaitez sauver\n    query_deleted_message: La requête a été effacée.\n    query_saved_message: La requête a été sauvée.\n    select_all: Sélectionner tout\n    deselect_all: Désélectionner tout\n    expand: Étendre\n    collapse: Écrouler\n"
  },
  {
    "path": "config/locales/is.yml",
    "content": "is:\n  wice_grid:\n    show_filter_tooltip: Sýna síumöguleika\n    hide_filter_tooltip: Fela síumoguleika\n    csv_export_tooltip: Flytja út CSV\n    filter_tooltip: Sía\n    reset_filter_tooltip: Hreinsa\n    boolean_filter_true_label: Já\n    boolean_filter_false_label: Nei\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Frá\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Til\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Undanskilja\n    # link to switch to show all records\n    show_all_records_label: Sýna allt\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Sýna öll gögn\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Ertu viss um að þú viljir láta sýna öll gögn?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Aftur til síðuhorfs\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Aftur til síðuhorfs\n    # Title of the date string.\n    date_string_tooltip: Smella á til að eyða\n    saved_query_panel_title: Vistaðar leitarskipanir\n    save_query_button_label: Vista síuval\n    saved_query_deletion_confirmation: Ertu viss?\n    saved_query_deletion_link_title: Eyða leitarskipun\n    saved_query_link_title: Hlaða leitarskipun\n    validates_uniqueness_error: Leitarskipun með þessu nafni er þegar til\n    validates_presence_error: Vinsamlegast gefið heiti fyrir leitarskipun\n    query_deleted_message: Vistaðri leitarskipun hefur verið eytt\n    query_saved_message: leitaskipun hefur verið vistuð\n    select_all: Velja allt\n    deselect_all: Fjarlægðu val\n    expand: Stækka\n    collapse: Hrun\n"
  },
  {
    "path": "config/locales/it.yml",
    "content": "it:\n  wice_grid:\n    show_filter_tooltip: Mostra filtri\n    hide_filter_tooltip: Nascondi filtri\n    csv_export_tooltip: Esporta in CSV\n    filter_tooltip: Filtri\n    reset_filter_tooltip: Cancella\n    boolean_filter_true_label: \"si\"\n    boolean_filter_false_label: \"no\"\n    previous_label: «\n    next_label: »\n    date_selector_tooltip_from: Da\n    date_selector_tooltip_to: A\n    negation_checkbox_title: Escludi\n    show_all_records_label: Tutti i risultati\n    show_all_records_tooltip: Mostra tutti i risultati\n    all_queries_warning: Sei sicuro di voler mostrare tutti i risultati?\n    switch_back_to_paginated_mode_label: torna alla vista paginata\n    switch_back_to_paginated_mode_tooltip: Per tornare alla paginazione\n    date_string_tooltip: Clicca per cancellare\n    saved_query_panel_title: Ricerche salvate\n    save_query_button_label: Salva il valore dei filtri\n    saved_query_deletion_confirmation: Sei sicuro?\n    saved_query_deletion_link_title: Cancella la ricerca\n    saved_query_link_title: Carica ricerca\n    validates_uniqueness_error: Una ricerca con questo nome già esiste\n    validates_presence_error: Per favore inserisci il nome per questa ricerca personalizzata\n    query_deleted_message: Ricerca cancellata\n    query_saved_message: Ricerca salvata\n    select_all: Seleziona tutti\n    deselect_all: Deseleziona tutti\n    expand: Espandi\n    collapse: Chiudi\n"
  },
  {
    "path": "config/locales/ja.yml",
    "content": "ja:\n  wice_grid:\n    show_filter_tooltip: フィルタ表示\n    hide_filter_tooltip: フィルタ非表示\n    csv_export_tooltip: CSVエクスポート\n    filter_tooltip: フィルタ\n    reset_filter_tooltip: リセット\n    boolean_filter_true_label: \"yes\"\n    boolean_filter_false_label: \"no\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: From\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: To\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: 除外する\n    # link to switch to show all records\n    show_all_records_label: すべて表示\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: 前レコード表示\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: 全てのレコードを表示しますか？\n    # link to paginated view\n    switch_back_to_paginated_mode_label: 戻る\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: 戻る\n    # Title of the date string.\n    date_string_tooltip: 削除\n    saved_query_panel_title: クエリ保存\n    save_query_button_label: フィルタ保存\n    saved_query_deletion_confirmation: 本当によろしいですか？\n    saved_query_deletion_link_title: クエリ削除\n    saved_query_link_title: クエリのロード\n    validates_uniqueness_error: 同じ名前がすでに存在します\n    validates_presence_error: クエリ名を記入して下さい\n    query_deleted_message: クエリの削除が完了しました\n    query_saved_message: クエリを保存しました\n    select_all: 全てを選択\n    deselect_all: 選択を解除\n    expand: 開く\n    collapse: 閉じる\n"
  },
  {
    "path": "config/locales/nl.yml",
    "content": "nl:\n  wice_grid:\n    show_filter_tooltip: Filter tonen\n    hide_filter_tooltip: Filter verbergen\n    csv_export_tooltip: Als CSV exporteren\n    filter_tooltip: Filter\n    reset_filter_tooltip: Terugstellen\n    boolean_filter_true_label: ja\n    boolean_filter_false_label: neen\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Vanaf\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Tot\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Uitsluiten\n    # link to switch to show all records\n    show_all_records_label: Alle rijen tonen\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Alle rijen tonen\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Bent u zeker dat u alle rijen wilt tonen?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Terug naar pagina's\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Terug naar pagina's\n    # Title of the date string.\n    date_string_tooltip: Klik om te verwijderen\n    saved_query_panel_title: Opgeslagen query's\n    save_query_button_label: Query opslaan\n    saved_query_deletion_confirmation: Bent u zeker?\n    saved_query_deletion_link_title: Query verwijderen\n    saved_query_link_title: Query laden\n    validates_uniqueness_error: Deze query bestaat reeds\n    validates_presence_error: Gelieve de naam van de query in te vullen\n    query_deleted_message: Opgeslagen query verwijderd.\n    query_saved_message: Query opgeslagen\n    select_all: Selecteer alle rijen\n    deselect_all: Deselecteer alle rijen\n    expand: Uitklappen\n    collapse: Inklappen\n"
  },
  {
    "path": "config/locales/pt-BR.yml",
    "content": "pt-BR:\n  wice_grid:\n    show_filter_tooltip: Mostrar o filtro\n    hide_filter_tooltip: Esconder o filtro\n    csv_export_tooltip: Exportar em CSV\n    filter_tooltip: Filtrar\n    reset_filter_tooltip: Reinicializar\n    boolean_filter_true_label: sim\n    boolean_filter_false_label: não\n    previous_label: «\n    next_label: »\n    date_selector_tooltip_from: De\n    date_selector_tooltip_to: a\n    negation_checkbox_title: Excluir\n    show_all_records_label: Ver todos\n    show_all_records_tooltip: Ver todos os registos\n    all_queries_warning: Tem certeza que gostaria de visualizar todos os registos?\n    switch_back_to_paginated_mode_label: Voltar à lista paginada\n    switch_back_to_paginated_mode_tooltip: Voltar à lista por página\n    date_string_tooltip: Clique para apagar\n    saved_query_panel_title: Filtros gravados\n    save_query_button_label: Gravar o estado dos filtros\n    saved_query_deletion_confirmation: Tem certeza?\n    saved_query_deletion_link_title: Apagar o filtro\n    saved_query_link_title: Carregar o filtro\n    validates_uniqueness_error: Já existe um filtro com o mesmo nome\n    validates_presence_error: Indique o nome do filtro que deseja gravar\n    query_deleted_message: O filtro foi apagado.\n    query_saved_message: O filtro foi gravado.\n    select_all: Selecionar todos\n    deselect_all: Remover seleção\n    expand: Expandir\n    collapse: Colapso\n"
  },
  {
    "path": "config/locales/pt.yml",
    "content": "pt:\n  wice_grid:\n    show_filter_tooltip: Mostrar o filtro\n    hide_filter_tooltip: Esconder o filtro\n    csv_export_tooltip: Exportar em CSV\n    filter_tooltip: Filtrar\n    reset_filter_tooltip: Reinicializar\n    boolean_filter_true_label: sim\n    boolean_filter_false_label: não\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: De\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: a\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Excluir\n    # link to switch to show all records\n    show_all_records_label: Ver todos\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Ver todos os registos\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Tem a certeza de querer visualizar todos os registos?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Retorno à vista paginada\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Retorno à vista por página\n    # Title of the date string.\n    date_string_tooltip: Cliquar para apagar\n    saved_query_panel_title: Queries gravadas\n    save_query_button_label: Gravar o estado dos filtros\n    saved_query_deletion_confirmation: Tem a certeza?\n    saved_query_deletion_link_title: Apagar a query\n    saved_query_link_title: Caregar a query\n    validates_uniqueness_error: Já existe uma query com o mesmo nome\n    validates_presence_error: Queira indicar o nome da query que deseja gravar\n    query_deleted_message: A query foi apagada.\n    query_saved_message: A query foi gravada.\n    select_all: Selecionar todos\n    deselect_all: Remover seleção\n    expand: Expandir\n    collapse: Colapso\n"
  },
  {
    "path": "config/locales/ru.yml",
    "content": "ru:\n  wice_grid:\n    show_filter_tooltip: Показать фильтр\n    hide_filter_tooltip: Спрятать фильтр\n    csv_export_tooltip: Экспорт в CSV\n    filter_tooltip: Фильтровать\n    reset_filter_tooltip: Сброс\n    boolean_filter_true_label: да\n    boolean_filter_false_label: нет\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: С\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: До\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Исключая строки\n    # link to switch to show all records\n    show_all_records_label: показать все\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Показать все записи\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Вы уверены в том, что хотите отобразить все записи?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Назад к постраничному выводу\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Назад к постраничному выводу\n    # Title of the date string.\n    date_string_tooltip: Кликните, чтобы удалить дату\n    saved_query_panel_title: Сохранённые фильтры\n    save_query_button_label: Сохранить фильтр\n    saved_query_deletion_confirmation: Вы уверены?\n    saved_query_deletion_link_title: Удалить сохранённый фильтр\n    saved_query_link_title: Загрузить сохранённый фильтр\n    validates_uniqueness_error: Сохранённый фильтр с таким именем уже существует\n    validates_presence_error: Пожалуйста введите имя сохраняемого фильтра\n    query_deleted_message: Сохранённый фильтр удалён.\n    query_saved_message: Сохранённый фильтр сохранён.\n    select_all: Отметить все\n    deselect_all: Убрать выделение\n    expand: Развернуть\n    collapse: Свернуть\n"
  },
  {
    "path": "config/locales/sk.yml",
    "content": "sk:\n  wice_grid:\n    show_filter_tooltip: Zobraziť filter\n    hide_filter_tooltip: Skryť filter\n    csv_export_tooltip: Exportovať do CSV\n    filter_tooltip: Filter\n    reset_filter_tooltip: Zrušiť filtre\n    boolean_filter_true_label: \"áno\"\n    boolean_filter_false_label: \"nie\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Dátum od\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Dátum do\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Inverzný výber\n    # link to switch to show all records\n    show_all_records_label: Zobraziť všetko\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Zobrazí všetky záznamy v databáze\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Určite chceš zobraziť všetky záznamy v databáze?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: späť na stránkové zobrazenie\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Prepnúť do stránkového zobrazenia\n    # Title of the date string.\n    date_string_tooltip: Kliknutím zmažeš\n    saved_query_panel_title: Uložené filtre/výsledky\n    save_query_button_label: Uložiť stav filtrov\n    saved_query_deletion_confirmation: Si si istý?\n    saved_query_deletion_link_title: Vymazať uložený filter\n    saved_query_link_title: Nahrať uložený filter\n    validates_uniqueness_error: Filter s uvedeným názvom už existuje.\n    validates_presence_error: Prosím zadaj názov uloženého filtra.\n    query_deleted_message: Uložený filter bol vymazaný.\n    query_saved_message: Filter bol uložený.\n    select_all: Vyber všetko\n    deselect_all: Zrušiť výber\n    expand: Zväčšiť\n    collapse: Kolaps\n"
  },
  {
    "path": "config/locales/uk.yml",
    "content": "uk:\n  wice_grid:\n    show_filter_tooltip: \"Показати фільтр\"\n    hide_filter_tooltip: \"Сховати фільтр\"\n    csv_export_tooltip: \"Експорт в CSV\"\n    filter_tooltip: \"Фільтрувати\"\n    reset_filter_tooltip: \"Скинути фільтр\"\n    boolean_filter_true_label: \"так\"\n    boolean_filter_false_label: \"ні\"\n    previous_label: \"«\"\n    next_label: \"»\"\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: \"Від\"\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: \"До\"\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: \"За винятком\"\n    # link to switch to show all records\n    show_all_records_label: \"показати всі\"\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: \"Показати всі записи\"\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: \"Ви впевнені в тому, що хочете відобразити всі записи?\"\n    # link to paginated view\n    switch_back_to_paginated_mode_label: \"Назад до посторінкового виводу\"\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: \"Назад до посторінкового виводу\"\n    # Title of the date string.\n    date_string_tooltip: \"Натисніть, щоб видалити дату\"\n    saved_query_panel_title: \"Збережені фільтри\"\n    save_query_button_label: \"Зберегти фільтр\"\n    saved_query_deletion_confirmation: \"Ви впевнені?\"\n    saved_query_deletion_link_title: \"Видалити збережуваний фільтр\"\n    saved_query_link_title: \"Завантажити збережуваний фільтр\"\n    validates_uniqueness_error: \"Збережуваний фільтр з такою назвою вже існує\"\n    validates_presence_error: \"Будь ласка, введіть назву Збережуваного фільтра\"\n    query_deleted_message: \"Збережуваний фільтр видалено.\"\n    query_saved_message: \"Збережуваний фільтр збережено.\"\n    select_all: \"Виділити все\"\n    deselect_all: \"Забрати виділення\"\n    expand: Розгорнути\n    collapse: Згорнути\n"
  },
  {
    "path": "config/locales/zh.yml",
    "content": "zh:\n  wice_grid:\n    show_filter_tooltip: 显示过滤\n    hide_filter_tooltip: 隐藏过滤\n    csv_export_tooltip: 输出CSV档\n    filter_tooltip: 过滤\n    reset_filter_tooltip: 清除过滤\n    boolean_filter_true_label: \"是\"\n    boolean_filter_false_label: \"否\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: 从\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: 至\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: 排除\n    # link to switch to show all records\n    show_all_records_label: 显示全部\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: 显示全部记录\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: 确定要显示全部记录？\n    # link to paginated view\n    switch_back_to_paginated_mode_label: 回到分页显示\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: 切换到分页显示\n    # Title of the date string.\n    date_string_tooltip: 按下以清除\n    saved_query_panel_title: 查询存储\n    save_query_button_label: 储存查询状态\n    saved_query_deletion_confirmation: 确定删除？\n    saved_query_deletion_link_title: 删除查询\n    saved_query_link_title: 读取查询\n    validates_uniqueness_error: 已存在相同名称的查询\n    validates_presence_error: 请为此查询命名\n    query_deleted_message: 查询已删除\n    query_saved_message: 查询已储存\n    select_all: 全选\n    deselect_all: 全清\n    expand: 擴大\n    collapse: 坍方\n"
  },
  {
    "path": "gemfiles/rails_5.0.gemfile",
    "content": "# This file was generated by Appraisal\n\nsource \"https://rubygems.org\"\n\ngem \"rails\", \"~> 5.0.0\"\n\ngemspec path: \"../\"\n"
  },
  {
    "path": "gemfiles/rails_5.1.gemfile",
    "content": "# This file was generated by Appraisal\n\nsource \"https://rubygems.org\"\n\ngem \"rails\", \"~> 5.1.0\"\n\ngemspec path: \"../\"\n"
  },
  {
    "path": "gemfiles/rails_5.2.gemfile",
    "content": "# This file was generated by Appraisal\n\nsource \"https://rubygems.org\"\n\ngem \"rails\", \"~> 5.2.0\"\n\ngemspec path: \"../\"\n"
  },
  {
    "path": "lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb",
    "content": "module WiceGrid #:nodoc:\n  module Generators #:nodoc:\n    class AddMigrationForSerializedQueriesGenerator < Rails::Generators::Base  #:nodoc:\n      include Rails::Generators::Migration\n\n      desc 'Add a migration which creates a table for serialized queries'\n\n      source_root File.expand_path('../templates', __FILE__)\n\n      def self.next_migration_number(_path)\n        Time.now.utc.strftime('%Y%m%d%H%M%S')\n      end\n\n      def create_model_file\n        migration_template 'create_wice_grid_serialized_queries.rb', 'db/migrate/create_wice_grid_serialized_queries.rb'\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/generators/wice_grid/install_generator.rb",
    "content": "module WiceGrid #:nodoc:\n  module Generators #:nodoc:\n    class InstallGenerator < Rails::Generators::Base #:nodoc:\n      desc 'Copy WiceGrid wice_grid_config.rb to config/initializers'\n\n      source_root File.expand_path('../templates', __FILE__)\n\n      def copy_stuff #:nodoc:\n        template 'wice_grid_config.rb', 'config/initializers/wice_grid_config.rb'\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb",
    "content": "class CreateWiceGridSerializedQueries < ::ActiveRecord::Migration #:nodoc:\n  def change #:nodoc:\n    create_table :wice_grid_serialized_queries do |t|\n      t.column :name,      :string\n      t.column :grid_name, :string\n      t.column :query,     :text\n\n      t.timestamps\n    end\n    add_index :wice_grid_serialized_queries, :grid_name\n    add_index :wice_grid_serialized_queries, [:grid_name, :id]\n  end\nend\n"
  },
  {
    "path": "lib/generators/wice_grid/templates/wice_grid_config.rb",
    "content": "if defined?(Wice::Defaults)\n\n  # Default number of rows to show per page.\n  Wice::Defaults::PER_PAGE = 20\n\n  # Default order direction\n  Wice::Defaults::ORDER_DIRECTION = 'asc'\n\n  # Default name for a grid. A grid name is the basis for a lot of\n  # names including parameter names, DOM IDs, etc\n  # The shorter the name is the shorter the request URI will be.\n  Wice::Defaults::GRID_NAME = 'grid'\n\n  # If REUSE_LAST_COLUMN_FOR_FILTER_ICONS is true and the last column doesn't have any filter and column name, it will be used\n  # for filter related icons (filter icon, reset icon, show/hide icon), otherwise an additional table column is added.\n  Wice::Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS = true\n\n  # The label of the first option of a custom dropdown list meaning 'All items'\n  Wice::Defaults::CUSTOM_FILTER_ALL_LABEL = '--'\n\n  # A list of classes for the table tag of the grid\n  Wice::Defaults::DEFAULT_TABLE_CLASSES = ['table', 'table-bordered', 'table-striped']\n\n  # Allow switching between a single and multiple selection modes in custom filters (dropdown boxes)\n  Wice::Defaults::ALLOW_MULTIPLE_SELECTION = true\n\n  # Show the upper pagination panel by default or not\n  Wice::Defaults::SHOW_UPPER_PAGINATION_PANEL = false\n\n  # Disabling CSV export by default\n  Wice::Defaults::ENABLE_EXPORT_TO_CSV = false\n\n  # Default CSV field separator\n  Wice::Defaults::CSV_FIELD_SEPARATOR = ','\n\n  # Default CSV encoding (p.e. 'CP1252:UTF-8' to make Microsoft Excel(tm) happy)\n  Wice::Defaults::CSV_ENCODING = nil\n\n  # The strategy when to show the filter.\n  # * <tt>:when_filtered</tt> - when the table is the result of filtering\n  # * <tt>:always</tt>        - show the filter always\n  # * <tt>:no</tt>            - never show the filter\n  Wice::Defaults::SHOW_FILTER = :always\n\n  # A boolean value specifying if a change in a filter triggers reloading of the grid.\n  Wice::Defaults::AUTO_RELOAD = false\n\n  # SQL operator used for matching strings in string filters.\n  Wice::Defaults::STRING_MATCHING_OPERATOR = 'LIKE'\n  # STRING_MATCHING_OPERATOR = 'ILIKE' # Use this for Postgresql case-insensitive matching.\n\n  # Defining one string matching operator globally for the whole application turns is not enough\n  # when you connect to two databases one of which is MySQL and the other is Postgresql.\n  # If the key for an adapter is missing it will fall back to Wice::Defaults::STRING_MATCHING_OPERATOR.\n  #\n  # 'CI_LIKE' is a special value. Setting a value in STRING_MATCHING_OPERATORS to CI_LIKE will result in the following SQL:\n  #\n  #    UPPER(table.field) LIKE  UPPER(?)\"\n  Wice::Defaults::STRING_MATCHING_OPERATORS = {\n    'ActiveRecord::ConnectionAdapters::MysqlAdapter'      => 'LIKE',\n    'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter' => 'ILIKE'\n  }\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                              Advanced Filters                             #\n\n  # Switch of the negation checkbox in all text filters\n  Wice::Defaults::NEGATION_IN_STRING_FILTERS = false\n\n  # Each WiceGrid filter column is defined in two classes, one used for rendering the filter, the other\n  # for generating query conditions. All these columns are in lib/wice/columns/*.rb .\n  # File lib/wice/columns/column_processor_index.rb lists all predefined processors.\n  # In most cases a processor is chosen automatically based on the DB column type,\n  # for example, integer columns\n  # can have two of processors, the default one with one input field, and a processor called \"range\",\n  # with 2 input fields. In this case it is possible to specify a processor in the column definition:\n  #\n  #     g.column filter_type: :range\n  #\n  # It is also possible to define you own processors:\n  #\n  #     Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS = {\n  #       some_key_identifying_new_column_type: ['AViewColumnProcessorClass', 'ConditionsGeneratorClass'],\n  #       another_key_identifying_new_column_type:  ['AnotherViewColumnProcessorClass', 'AnotherConditionsGeneratorClass']\n  #     }\n  #\n  # Column processor keys/names should not coincide with the existing keys/names (see lib/wice/columns/column_processor_index.rb)\n  # the value is a 2-element array with 2 strings, the first should be a name of view processor class inherited from\n  # Wice::Columns::ViewColumn, the second should be a name of conditions generator class inherited from\n  # Wice::Columns::ConditionsGeneratorColumn .\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                              Showing All Records                          #\n\n  # Enable or disable showing all records (non-paginated table)\n  Wice::Defaults::ALLOW_SHOWING_ALL_RECORDS = true\n\n  # If number of all queries is more than this value, the user will be given a warning message\n  Wice::Defaults::START_SHOWING_WARNING_FROM = 100\n\n  # Hide the \"show all\" link if the number of all records is more than...\n  # Force-resets back to pagination starting from this value.\n  # Set to nil to always show it\n  Wice::Defaults::SHOW_ALL_ALLOWED_UP_TO = nil\n\n  #\n  # set to nil to skip the check\n  Wice::Defaults::SWITCH_BACK_TO_PAGINATION_FROM = nil\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                               Saving Queries                              #\n\n  # ActiveRecord model to store queries. Read the documentation for details\n  # QUERY_STORE_MODEL = 'WiceGridSerializedQuery'\n  Wice::Defaults::QUERY_STORE_MODEL = 'WiceGridSerializedQuery'\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #            Here go settings related to the date/datetime filters          #\n\n  # Default column filters\n  # Possible values:\n  # * <tt>:jquery_datepicker</tt> - Jquery datepicker (works for datetime, too)\n  # * <tt>:bootstrap_datepicker</tt> - Bootstrap datepicker (works for datetime, too)\n  # * <tt>:rails_date_helper</tt> - standard Rails date helper\n  # * <tt>:rails_datetime_helper</tt> - standard Rails datetime helper\n\n  Wice::Defaults::DEFAULT_FILTER_FOR_DATE     = :jquery_datepicker\n  Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME = :jquery_datepicker\n\n  # Format of the datetime displayed.\n  # If you change the format, make sure to check if +DATETIME_PARSER+ can still parse this string.\n  Wice::Defaults::DATETIME_FORMAT = '%Y-%m-%d %H:%M'\n\n  # Format of the date displayed.\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT = '%Y-%m-%d'\n\n  # Format of the date displayed in jQuery's Datepicker\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT_JQUERY =  'yy-mm-dd'\n\n  # Format of the date displayed in Bootstrap's Datepicker\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT_BOOTSTRAP =  'yyyy-mm-dd'\n\n  # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the\n  # format defined by +DATETIME_FORMAT+ and must generate a DateTime object.\n  # In many cases <tt>Time.zone.parse</tt> is enough, for instance,  <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code\n  # and modify it if needed.\n  Wice::Defaults::DATETIME_PARSER = lambda do|datetime_string|\n    if datetime_string.blank?\n      nil\n    elsif Time.zone\n      Time.zone.parse(datetime_string)\n    else\n      Time.parse(datetime_string)\n    end\n  end\n\n  # The range of years to display in jQuery Datepicker.\n  # It can always be changed dynamically with the following javascript:\n  #  $( \".hasDatepicker\" ).datepicker( \"option\", \"yearRange\", \"2000:2042\" );\n  Wice::Defaults::DATEPICKER_YEAR_RANGE = (from = Date.current.year - 10).to_s + ':' + (from + 15).to_s\n\n  # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the\n  # format defined by +DATETIME+ and must generate a Date object.\n  # In many cases <tt>Date.parse</tt> is enough, for instance,  <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code\n  # and modify it if needed.\n  Wice::Defaults::DATE_PARSER = lambda do|date_string|\n    if date_string.blank?\n      nil\n    else\n      begin\n        Date.parse(date_string)\n      rescue ArgumentError\n        nil\n      end\n    end\n  end\n\n  # The name of the page method (should correspond to Kaminari.config.page_method_name)\n  Wice::Defaults::PAGE_METHOD_NAME = :page\n\n  # The name of the theme to use for the pagination with Kaminari\n  Wice::Defaults::PAGINATION_THEME = :wice_grid\n\n  # By default ActiveRecord calls are always executed inside Model.unscoped{}.\n  # Setting <tt>USE_DEFAULT_SCOPE</tt> to true will use the default scope for all queries.\n  Wice::Defaults::USE_DEFAULT_SCOPE = false\n\nend\n"
  },
  {
    "path": "lib/wice/active_record_column_wrapper.rb",
    "content": "module Wice\n  # to be mixed in into ActiveRecord::ConnectionAdapters::Column\n  module WiceGridExtentionToActiveRecordColumn #:nodoc:\n    # reference to the ActiveRecord model class\n    attr_accessor :model\n  end\n\n  class ActiveRecordColumnWrapper #:nodoc:\n    def initialize(column, all_filter_params, main_table, table_alias, custom_filter_active, filter_type) #:nodoc:\n      @column = column\n\n      # nil | Symbol\n      @filter_type          = filter_type\n\n      # Hash { String => String | Array[String]}\n      @all_filter_params    = all_filter_params\n\n      # nil | Boolean\n      @main_table           = main_table\n\n      # nil | String\n      @table_alias          = table_alias\n\n      # nil | Array[String] | Array[Array[...]] | Array[Symbol]\n      @custom_filter_active = custom_filter_active\n    end\n\n    def wg_initialize_request_parameters  #:nodoc:\n      @request_params = nil\n      return if @all_filter_params.nil?\n\n      # if the parameter does not specify the table name we only allow columns in the default table to use these parameters\n      if @main_table && @request_params = @all_filter_params[@column.name]\n        current_parameter_name = @column.name\n      elsif @request_params = @all_filter_params[alias_or_table_name(@table_alias) + '.' + @column.name]\n        current_parameter_name = alias_or_table_name(@table_alias) + '.' + @column.name\n      end\n\n      # Preprocess incoming parameters for datetime, if what's coming in is\n      # a datetime (with custom_filter it can be anything else, and not\n      # the datetime hash {fr: ..., to: ...})\n      if @request_params\n\n        if (@column.type == :datetime || @column.type == :timestamp) && @request_params.is_a?(Hash)\n          [:fr, :to].each do |sym|\n            if @request_params[sym]\n              if @request_params[sym].is_a?(String)\n                @request_params[sym] = Wice::ConfigurationProvider.value_for(:DATETIME_PARSER).call(@request_params[sym])\n              elsif @request_params[sym].is_a?(Hash)\n                @request_params[sym] = Wice::GridTools.params_2_datetime(@request_params[sym])\n              end\n            end\n          end\n\n        end\n\n        # Preprocess incoming parameters for date, if what's coming in is\n        # a date (with custom_filter it can be anything else, and not\n        # the date hash {fr: ..., to: ...})\n        if @column.type == :date && @request_params.is_a?(Hash)\n\n          [:fr, :to].each do |sym|\n            if @request_params[sym]\n              if @request_params[sym].is_a?(String)\n                @request_params[sym] = Wice::ConfigurationProvider.value_for(:DATE_PARSER).call(@request_params[sym])\n              elsif @request_params[sym].is_a?(Hash)\n                @request_params[sym] = ::Wice::GridTools.params_2_date(@request_params[sym])\n              end\n            end\n          end\n\n        end\n      end\n\n      [wg_generate_conditions, current_parameter_name]\n    end\n\n    def wg_generate_conditions  #:nodoc:\n      return nil if @request_params.nil?\n\n      if @custom_filter_active\n        custom_processor_klass = ::Wice::Columns.get_conditions_generator_column_processor(:custom)\n        custom_processor = custom_processor_klass.new(self)\n        return custom_processor.generate_conditions(@table_alias, @request_params)\n      end\n\n      column_type = @filter_type || @column.type.to_s.intern\n\n      filter_type = case column_type\n      when :date\n        ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATE)\n      when :datetime\n        ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATETIME)\n      when :timestamp\n        ConfigurationProvider.value_for(:DEFAULT_FILTER_FOR_DATETIME)\n      else\n        column_type\n      end\n\n      processor_class = ::Wice::Columns.get_conditions_generator_column_processor(filter_type)\n\n      if processor_class\n        return processor_class.new(self, column_type).generate_conditions(@table_alias, @request_params)\n      else\n        Wice.log(\"No processor for database type #{column_type}!!!\")\n        nil\n      end\n    end\n\n    def name #:nodoc:\n      @column.name\n    end\n\n    def model #:nodoc:\n      @column.model\n    end\n\n    def array?\n      if @column.sql_type_metadata.respond_to? :array\n        @column.sql_type_metadata.array\n      else\n        @column.sql_type_metadata.sql_type.index('[]')\n      end\n    rescue\n      false\n    end\n\n    def alias_or_table_name(table_alias) #:nodoc:\n      table_alias || @column.model.table_name\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_action.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnAction < ViewColumn #:nodoc:\n      def initialize(grid_obj, html, param_name, select_all_buttons, object_property, html_check_box, view, block = nil)  #:nodoc:\n        @view                 = view\n        @html_check_box       = html_check_box\n        @select_all_buttons   = select_all_buttons\n        self.grid             = grid_obj\n        self.html             = html\n        Wice::WgHash.add_or_append_class_value!(self.html, 'sel')\n        grid_name             = self.grid.name\n        @param_name           = param_name\n        @cell_rendering_block = lambda do |object, params|\n          if block && !block.call(object)\n            ''\n          else\n            selected = params[grid_name] && params[grid_name][param_name] && params[grid_name][param_name].index(object.send(object_property).to_s)\n            check_box_tag(\"#{grid_name}[#{param_name}][]\", object.send(object_property), selected, id: nil)\n          end\n        end\n      end\n\n      def in_html  #:nodoc:\n        true\n      end\n\n      def capable_of_hosting_filter_related_icons?  #:nodoc:\n        false\n      end\n\n      def name  #:nodoc:\n        return '' unless @select_all_buttons\n\n        if @html_check_box\n          check_box_tag :select_all, 1, false, class: 'wg-select-all'\n        else\n          content_tag(:div,\n                      content_tag(:i, '', class: 'fa-regular fa-square-check'),\n                      class: 'clickable select-all',\n                      title: NlMessage['select_all']) + ' ' +\n            content_tag(:div,\n                        content_tag(:i, '', class: 'fa-regular fa-square'),\n                        class: 'clickable deselect-all',\n                        title: NlMessage['deselect_all'])\n        end\n      end\n    end\n\n    ConditionsGeneratorColumnAction = ConditionsGeneratorColumn #:nodoc:\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_boolean.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnBoolean < ViewColumnCustomDropdown #:nodoc:\n      include ActionView::Helpers::FormOptionsHelper\n\n      # Text for the true value\n      attr_accessor :boolean_filter_true_label\n\n      # Text for the false value\n      attr_accessor :boolean_filter_false_label\n\n      def render_filter_internal(params) #:nodoc:\n        @custom_filter = {\n          @filter_all_label => nil,\n          @boolean_filter_true_label  => 't',\n          @boolean_filter_false_label => 'f'\n        }\n\n        @turn_off_select_toggling = true\n        super(params)\n      end\n    end\n\n    class ConditionsGeneratorColumnBoolean < ConditionsGeneratorColumn  #:nodoc:\n      def  generate_conditions(table_alias, opts)   #:nodoc:\n        unless opts.is_a?(Array) && opts.size == 1\n          Wice.log \"invalid parameters for the grid boolean filter - must be an one item array: #{opts.inspect}\"\n          return false\n        end\n        opts = opts[0]\n        if opts == 'f'\n          [\" (#{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ? or #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is null) \", false]\n        elsif opts == 't'\n          [\" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?\", true]\n                end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_bootstrap_datepicker.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnBootstrapDatepicker < ViewColumn #:nodoc:\n\n      include Wice::BsCalendarHelpers\n      include Wice::Columns::CommonDateDatetimeMixin\n      include Wice::Columns::CommonJsDateDatetimeMixin\n\n      def do_render(params) #:nodoc:\n        calendar_data_from = prepare_data_for_bscalendar(\n          initial_date: params[:fr],\n          name:       @name1,\n          fire_event: auto_reload,\n          grid_name:  self.grid.name\n        )\n\n        calendar_data_to = prepare_data_for_bscalendar(\n          initial_date: params[:to],\n          name:       @name2,\n          fire_event: auto_reload,\n          grid_name:  self.grid.name\n        )\n\n        calendar_data_from.the_other_datepicker_id_to   = calendar_data_to.dom_id\n        calendar_data_to.the_other_datepicker_id_from   = calendar_data_from.dom_id\n\n        html1 = date_calendar_bs calendar_data_from\n\n        html2 = date_calendar_bs calendar_data_to\n\n        %(<div class=\"date-filter wg-bootstrap-datepicker\">#{html1}#{html2}</div>)\n      end\n\n\n      def has_auto_reloading_calendar? #:nodoc:\n        auto_reload\n      end\n\n    end\n\n    class ConditionsGeneratorColumnBootstrapDatepicker < ConditionsGeneratorColumn  #:nodoc:\n\n      include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_custom_dropdown.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnCustomDropdown < ViewColumn #:nodoc:\n      include ActionView::Helpers::FormOptionsHelper\n\n      # text in the filter dropdown for an empty <option><option>\n      attr_accessor :filter_all_label\n\n      # contains an array of option label + option value pairs for the select, or a Proc object which returns this array\n      attr_accessor :custom_filter\n\n      def render_filter_internal(params) #:nodoc:\n        @query, @query_without_equals_sign, @parameter_name, @dom_id = form_parameter_name_id_and_query('')\n        @query_without_equals_sign += '%5B%5D='\n\n        @custom_filter = @custom_filter.call if @custom_filter.is_a? Proc\n\n        if @custom_filter.is_a? Array\n          @custom_filter = [[@filter_all_label, nil]] + @custom_filter.map do|label, value|\n            [label.to_s, value.to_s]\n          end\n        end\n\n        select_options = { name: @parameter_name + '[]', id: @dom_id, class: 'custom-dropdown form-control' }\n\n        if @turn_off_select_toggling\n          select_toggle = ''\n        else\n          if self.allow_multiple_selection\n            select_options[:multiple] = params.is_a?(Array) && params.size > 1\n\n            expand_icon_style, collapse_icon_style = nil, 'display: none'\n            expand_icon_style, collapse_icon_style = collapse_icon_style, expand_icon_style if select_options[:multiple]\n\n            select_toggle = content_tag(\n              :span,\n              content_tag(:i, '', class: 'fa fa-plus'),\n              title: NlMessage['expand'],\n              class: 'expand-multi-select-icon clickable',\n              style: expand_icon_style\n            ) +\n            content_tag(\n              :span,\n              content_tag(:i, '', class: 'fa fa-minus'),\n              title: NlMessage['collapse'],\n              class: 'collapse-multi-select-icon clickable',\n              style: collapse_icon_style\n            )\n          else\n            select_options[:multiple] = false\n            select_toggle = ''\n          end\n        end\n\n        if auto_reload\n          select_options[:class] += ' auto-reload'\n        end\n\n        params_for_select = (params.is_a?(Hash) && params.empty?) ? [nil] : params\n\n        '<div class=\"custom-dropdown-container\">'.html_safe +\n          content_tag(:select,\n                      options_for_select(@custom_filter, params_for_select),\n                      select_options) + select_toggle.html_safe + '</div>'.html_safe\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        {\n          templates: [@query_without_equals_sign],\n          ids:       [@dom_id]\n        }\n      end\n\n      def has_auto_reloading_select? #:nodoc:\n        auto_reload\n      end\n    end\n\n    class ConditionsGeneratorColumnCustomDropdown < ConditionsGeneratorColumn #:nodoc:\n      def generate_conditions(table_alias, opts)   #:nodoc:\n        if opts.empty? || (opts.is_a?(Array) && opts.size == 1 && opts[0].blank?)\n          return false\n        end\n        opts = (opts.is_a?(Array) && opts.size == 1) ? opts[0] : opts\n\n        column_name =\n            \"#{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name}\"\n        if opts.is_a?(Array)\n          opts_with_special_values, normal_opts = opts.partition { |v| ::Wice::GridTools.special_value(v) }\n\n          conditions_ar = if normal_opts.size > 0\n            if @column_wrapper.array?\n              [([\"? = ANY(#{column_name})\"] * normal_opts.size).join(' OR ')] + normal_opts\n            else\n              [\" #{column_name} IN ( \" + (['?'] * normal_opts.size).join(', ') + ' )'] + normal_opts\n            end\n          else\n            []\n          end\n\n          if opts_with_special_values.size > 0\n            special_conditions = opts_with_special_values.collect { |v| \" #{column_name} is \" + v }.join(' or ')\n            if conditions_ar.size > 0\n              conditions_ar[0] = \" (#{conditions_ar[0]} or #{special_conditions} ) \"\n            else\n              conditions_ar = \" ( #{special_conditions} ) \"\n            end\n          end\n          conditions_ar\n        else\n          if ::Wice::GridTools.special_value(opts)\n            \" #{column_name} is \" + opts\n          else\n            if @column_wrapper.array?\n              [\" ? = ANY(#{column_name})\", opts]\n            else\n              [\" #{column_name} = ?\", opts]\n            end\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_float.rb",
    "content": "module Wice #:nodoc:\n  module Columns #:nodoc:\n    class ViewColumnFloat < ViewColumnInteger #:nodoc:\n    end\n\n    ConditionsGeneratorColumnFloat = ConditionsGeneratorColumnInteger #:nodoc:\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_html5_datepicker.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnHtml5Datepicker < ViewColumn #:nodoc:\n\n      include Wice::Columns::CommonDateDatetimeMixin\n      include Wice::Columns::CommonJsDateDatetimeMixin\n\n      def do_render(params) #:nodoc:\n        css_class = 'form-control input-sm native-datepicker ' + (auto_reload ? 'auto-reload' : '')\n        date_format = Wice::ConfigurationProvider.value_for(:DATE_FORMAT)\n        '<div class=\"date-filter wg-html5-datepicker\">' +\n          date_field_tag(@name1, params[:fr].try(:strftime, date_format), class: css_class, id: @dom_id) + '<br/>' +\n          date_field_tag(@name2, params[:to].try(:strftime, date_format), class: css_class, id: @dom_id2) +\n          '</div>'\n      end\n\n      def has_auto_reloading_calendar? #:nodoc:\n        # To be implemented\n        false\n      end\n\n    end\n\n    class ConditionsGeneratorColumnHtml5Datepicker < ConditionsGeneratorColumn  #:nodoc:\n\n      include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_integer.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnInteger < ViewColumn #:nodoc:\n      def render_filter_internal(params) #:nodoc:\n        @contains_a_text_input = true\n\n        @query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(eq: '')\n\n        opts = { size: 3, id: @dom_id, class: 'range-start' }\n\n        opts[:class] += ' form-control input-sm'\n\n        if auto_reload\n          opts[:class] += ' auto-reload'\n        end\n\n        text_field_tag(parameter_name,  params[:eq], opts)\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        {\n          templates: [@query],\n          ids:       [@dom_id]\n        }\n      end\n\n      def has_auto_reloading_input? #:nodoc:\n        auto_reload\n      end\n    end\n\n    class ConditionsGeneratorColumnInteger < ConditionsGeneratorColumn  #:nodoc:\n      # Note: also used in ColumnRange, hence class method\n      def self.get_value(val) #:nodoc:\n        # Try to determine localized separator using I18n and replace it with default one\n        separator = I18n.t!('number.format.separator') rescue nil\n        val = val.sub(separator, '.') if val.respond_to?(:sub) && separator\n\n        Integer(val) rescue nil\n      end\n\n      def get_op_and_value(val) #:nodoc:\n        num = nil\n        op  = nil\n\n        # remove spaces\n        val = val.gsub(' ', '')\n\n        start_of_num = val =~ /[0-9.-]/ # first digit, dot or negative sign\n        if start_of_num\n          op = val[0...start_of_num]\n          op = '=' if op == ''\n          num = ConditionsGeneratorColumnInteger.get_value(val[start_of_num..-1])\n\n          op = nil unless ['<', '>', '<=', '>=', '='].include?(op)\n        end\n        [op, num]\n      end\n\n      def generate_conditions(table_alias, opts)   #:nodoc:\n        unless opts.is_a? Hash\n          Wice.log 'invalid parameters for the grid integer filter - must be a hash'\n          return false\n        end\n        conditions = [[]]\n        if opts[:eq]\n          op, num = get_op_and_value(opts[:eq])\n          if op && num\n            conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} \" + op + ' ? '\n            conditions << num\n          else\n            opts.delete(:eq)\n          end\n        end\n\n        if conditions.size == 1\n          return false\n        end\n\n        conditions[0] = conditions[0].join(' and ')\n\n        conditions\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_jquery_datepicker.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnJqueryDatepicker < ViewColumn #:nodoc:\n\n      include Wice::JsCalendarHelpers\n      include Wice::Columns::CommonDateDatetimeMixin\n      include Wice::Columns::CommonJsDateDatetimeMixin\n\n      def do_render(params) #:nodoc:\n        calendar_data_from = prepare_data_for_calendar(\n          initial_date: params[:fr],\n          title:      NlMessage['date_selector_tooltip_from'],\n          name:       @name1,\n          fire_event: auto_reload,\n          grid_name:  self.grid.name\n        )\n\n        calendar_data_to = prepare_data_for_calendar(\n          initial_date: params[:to],\n          title:      NlMessage['date_selector_tooltip_to'],\n          name:       @name2,\n          fire_event: auto_reload,\n          grid_name:  self.grid.name\n        )\n\n        calendar_data_from.the_other_datepicker_id_to   = calendar_data_to.dom_id\n        calendar_data_to.the_other_datepicker_id_from   = calendar_data_from.dom_id\n\n        html1 = date_calendar_jquery calendar_data_from\n\n        html2 = date_calendar_jquery calendar_data_to\n\n        %(<div class=\"date-filter wg-jquery-datepicker\">#{html1}<br/>#{html2}</div>)\n      end\n\n      def has_auto_reloading_calendar? #:nodoc:\n        auto_reload\n      end\n\n    end\n\n    class ConditionsGeneratorColumnJqueryDatepicker < ConditionsGeneratorColumn  #:nodoc:\n\n      include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_processor_index.rb",
    "content": "module Wice #:nodoc:\n  module Columns #:nodoc:\n    require 'active_support'\n\n    COLUMN_PROCESSOR_INDEX = ActiveSupport::OrderedHash[ #:nodoc:\n      :action,                 'column_action',               # Special processor for action column, columns with checkboxes\n      :text,                   'column_string',\n      :string,                 'column_string',\n      :rails_datetime_helper,  'column_rails_datetime_helper',       # standard Rails datepicker helper\n      :rails_date_helper,      'column_rails_date_helper',           # standard Rails date helper\n      :jquery_datepicker,      'column_jquery_datepicker',\n      :bootstrap_datepicker,   'column_bootstrap_datepicker',\n      :html5_datepicker,       'column_html5_datepicker',     # not ready\n      :integer,                'column_integer',\n      :range,                  'column_range',\n      :float,                  'column_float',\n      :decimal,                'column_float',\n      :custom,                 'column_custom_dropdown',      # Special processor for custom filter columns\n      :boolean,                'column_boolean'\n    ]\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_rails_date_helper.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnRailsDateHelper < ViewColumn #:nodoc:\n\n      include ActionView::Helpers::DateHelper\n      include Wice::Columns::CommonDateDatetimeMixin\n      include Wice::Columns::CommonStandardDateDatetimeMixin\n\n      def chunk_names #:nodoc:\n        %w(year month day)\n      end\n\n      def do_render(params) #:nodoc:\n        '<div class=\"date-filter\">' +\n          select_date(params[:fr], include_blank: true, prefix: @name1, id: @dom_id) + '<br/>' +\n          select_date(params[:to], include_blank: true, prefix: @name2, id: @dom_id2) +\n          '</div>'\n      end\n\n      # name_and_id_from_options in Rails Date helper does not substitute '.' with '_'\n      # like all other simpler form helpers do. Thus, overriding it here.\n      def name_and_id_from_options(options, type)  #:nodoc:\n        options[:name] = (options[:prefix] || DEFAULT_PREFIX) + (options[:discard_type] ? '' : \"[#{type}]\")\n        options[:id] = options[:name].gsub(/([\\[\\(])|(\\]\\[)/, '_').gsub(/[\\]\\)]/, '').gsub(/\\./, '_').gsub(/_+/, '_')\n      end\n\n\n      def has_auto_reloading_calendar? #:nodoc:\n        false\n      end\n\n    end\n\n    class ConditionsGeneratorColumnRailsDateHelper < ConditionsGeneratorColumn  #:nodoc:\n\n      include Wice::Columns::CommonRailsDateDatetimeConditionsGeneratorMixin\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_rails_datetime_helper.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnRailsDatetimeHelper < ViewColumn #:nodoc:\n\n      include ActionView::Helpers::DateHelper\n      include Wice::Columns::CommonDateDatetimeMixin\n      include Wice::Columns::CommonStandardDateDatetimeMixin\n\n      def chunk_names #:nodoc:\n        %w(year month day hour minute)\n      end\n\n      def do_render(params) #:nodoc:\n        datetime_options = filter_control_options ? filter_control_options.slice(:start_year, :end_year, :max_year_allowed) : {}\n        '<div class=\"date-filter\">' +\n          select_datetime(params[:fr], datetime_options.merge(include_blank: true, prefix: @name1)) + '<br/>' +\n          select_datetime(params[:to], datetime_options.merge(include_blank: true, prefix: @name2)) +\n          '</div>'\n      end\n\n      # name_and_id_from_options in Rails Date helper does not substitute '.' with '_'\n      # like all other simpler form helpers do. Thus, overriding it here.\n      def name_and_id_from_options(options, type)  #:nodoc:\n        options[:name] = (options[:prefix] || DEFAULT_PREFIX) + (options[:discard_type] ? '' : \"[#{type}]\")\n        options[:id] = options[:name].gsub(/([\\[\\(])|(\\]\\[)/, '_').gsub(/[\\]\\)]/, '').gsub(/\\./, '_').gsub(/_+/, '_')\n      end\n\n      def has_auto_reloading_calendar? #:nodoc:\n        false\n      end\n\n    end\n\n    class ConditionsGeneratorColumnRailsDatetimeHelper < ConditionsGeneratorColumn  #:nodoc:\n\n      include Wice::Columns::CommonRailsDateDatetimeConditionsGeneratorMixin\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_range.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnRange < ViewColumn #:nodoc:\n      def render_filter_internal(params) #:nodoc:\n        @contains_a_text_input = true\n\n        @query,  _, parameter_name,  @dom_id  = form_parameter_name_id_and_query(fr: '')\n        @query2, _, parameter_name2, @dom_id2 = form_parameter_name_id_and_query(to: '')\n\n        opts1 = { size: 2, id: @dom_id,  class: 'form-control input-sm range-start' }\n        opts2 = { size: 2, id: @dom_id2, class: 'form-control input-sm range-end' }\n\n        if auto_reload\n          opts1[:class] += ' auto-reload'\n          opts2[:class] += ' auto-reload'\n        end\n\n        content_tag(\n          :div,\n          text_field_tag(parameter_name,  params[:fr], opts1) + text_field_tag(parameter_name2, params[:to], opts2),\n          class: 'form-inline')\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        {\n          templates: [@query, @query2],\n          ids:       [@dom_id, @dom_id2]\n        }\n      end\n\n      def has_auto_reloading_input? #:nodoc:\n        auto_reload\n      end\n    end\n\n    class ConditionsGeneratorColumnRange < ConditionsGeneratorColumn  #:nodoc:\n      def generate_conditions(table_alias, opts)   #:nodoc:\n        unless opts.is_a? Hash\n          Wice.log 'invalid parameters for the grid integer filter - must be a hash'\n          return false\n        end\n        conditions = [[]]\n        if opts[:fr]\n          fr_num = ConditionsGeneratorColumnInteger.get_value(opts[:fr])\n          if fr_num\n            conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} >= ? \"\n            conditions << fr_num\n          else\n            opts.delete(:fr)\n          end\n        end\n\n        if opts[:to]\n          to_num = ConditionsGeneratorColumnInteger.get_value(opts[:to])\n          if to_num\n            conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} <= ? \"\n            conditions << to_num\n          else\n            opts.delete(:to)\n          end\n        end\n\n        if conditions.size == 1\n          return false\n        end\n\n        conditions[0] = conditions[0].join(' and ')\n\n        conditions\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/column_string.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    class ViewColumnString < ViewColumn #:nodoc:\n\n      # whether the filter contains a negation checkbox\n      attr_accessor :negation\n\n      # whether the filter contains a negation checkbox and autoreloading is necessary\n      attr_accessor :auto_reloading_input_with_negation_checkbox\n\n      def render_filter_internal(params) #:nodoc:\n        @contains_a_text_input = true\n        css_class = 'form-control input-sm ' + (auto_reload ? 'auto-reload' : '')\n\n        if negation\n          self.auto_reloading_input_with_negation_checkbox = true if auto_reload\n\n          @query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(v: '')\n          @query2, _, parameter_name2, @dom_id2 = form_parameter_name_id_and_query(n: '')\n\n          '<div class=\"text-filter-container\">' +\n            text_field_tag(parameter_name, params[:v], size: 8, id: @dom_id, class: css_class) +\n            if defined?(Wice::Defaults::NEGATION_CHECKBOX_LABEL) && !Wice::ConfigurationProvider.value_for(:NEGATION_CHECKBOX_LABEL).blank?\n              Wice::ConfigurationProvider.value_for(:NEGATION_CHECKBOX_LABEL)\n            else\n              ''\n            end +\n            check_box_tag(parameter_name2, '1', (params[:n] == '1'),\n                          id: @dom_id2,\n                          title: NlMessage['negation_checkbox_title'],\n                          class: \"negation-checkbox #{css_class}\") +\n            '</div>'\n        else\n          @query, _, parameter_name, @dom_id = form_parameter_name_id_and_query('')\n          text_field_tag(parameter_name, (params.blank? ? '' : params), size: 8, id: @dom_id, class: css_class)\n        end\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        if negation\n          {\n            templates: [@query, @query2],\n            ids:       [@dom_id, @dom_id2]\n          }\n        else\n          {\n            templates: [@query],\n            ids:       [@dom_id]\n          }\n        end\n      end\n\n      def has_auto_reloading_input? #:nodoc:\n        auto_reload\n      end\n\n      def auto_reloading_input_with_negation_checkbox? #:nodoc:\n        self.auto_reloading_input_with_negation_checkbox\n      end\n    end\n\n    class ConditionsGeneratorColumnString < ConditionsGeneratorColumn  #:nodoc:\n      def generate_conditions(table_alias, opts)   #:nodoc:\n        if opts.is_a? String\n          string_fragment = opts\n          negation = ''\n        elsif (opts.is_a? Hash) && opts.key?(:v)\n          string_fragment = opts[:v]\n          negation = opts[:n] == '1' ? 'NOT' : ''\n        else\n          Wice.log \"invalid parameters for the grid string filter - must be a string: #{opts.inspect} or a Hash with keys :v and :n\"\n          return false\n        end\n        if string_fragment.empty?\n          return false\n        end\n\n        string_matching_operator = ::Wice.get_string_matching_operators(@column_wrapper.model)\n\n        comparator = if string_matching_operator == 'CI_LIKE'\n          \" #{negation}  UPPER(#{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name}) LIKE  UPPER(?)\"\n        else\n          \" #{negation}  #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} #{string_matching_operator} ?\"\n        end\n\n        [ comparator, '%' + string_fragment + '%' ]\n\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/common_date_datetime_mixin.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    module CommonDateDatetimeMixin #:nodoc:\n\n      def render_filter_internal(params) #:nodoc:\n        prepare\n        do_render(params)\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        {\n          templates: @queris_ids.collect { |tuple|  tuple[0] },\n          ids:       @queris_ids.collect { |tuple|  tuple[1] }\n        }\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    module CommonJsDateDatetimeConditionsGeneratorMixin #:nodoc:\n\n      def generate_conditions(table_alias, opts)   #:nodoc:\n\n        datetime = @column_type == :datetime || @column_type == :timestamp\n\n        conditions = [[]]\n        if opts[:fr]\n          conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} >= ? \"\n          date = opts[:fr].to_date\n          if datetime\n            date = date.to_datetime\n          end\n          conditions << date\n        end\n\n        if opts[:to]\n          op = '<='\n          date = opts[:to].to_date\n          if datetime\n            date = (date + 1).to_datetime\n            op = '<'\n          end\n          conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} #{op} ? \"\n          conditions << date\n        end\n\n        return false if conditions.size == 1\n\n        conditions[0] = conditions[0].join(' and ')\n        conditions\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/common_js_date_datetime_mixin.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    module CommonJsDateDatetimeMixin #:nodoc:\n\n      def prepare #:nodoc:\n        query, _, @name1, @dom_id = form_parameter_name_id_and_query(fr: '')\n        query2, _, @name2, @dom_id2 = form_parameter_name_id_and_query(to: '')\n\n        @queris_ids = [[query, @dom_id], [query2, @dom_id2]]\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/common_rails_date_datetime_conditions_generator_mixin.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    module CommonRailsDateDatetimeConditionsGeneratorMixin #:nodoc:\n\n      def generate_conditions(table_alias, opts)   #:nodoc:\n        conditions = [[]]\n        if opts[:fr]\n          conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} >= ? \"\n          conditions << opts[:fr].to_date\n        end\n\n        if opts[:to]\n          conditions[0] << \" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} <= ? \"\n          conditions << (opts[:to].to_date + 1)\n        end\n\n        return false if conditions.size == 1\n\n        conditions[0] = conditions[0].join(' and ')\n        conditions\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns/common_standard_helper_date_datetime_mixin.rb",
    "content": "module Wice\n  module Columns #:nodoc:\n    module CommonStandardDateDatetimeMixin #:nodoc:\n\n      def prepare #:nodoc:\n        x = lambda do|sym|\n          chunk_names.map do|datetime_chunk_name|\n            triple = form_parameter_name_id_and_query(sym => { datetime_chunk_name => '' })\n            [triple[0], triple[3]]\n          end\n        end\n\n        @queris_ids = x.call(:fr) + x.call(:to)\n\n        _, _, @name1, _ = form_parameter_name_id_and_query(fr: '')\n        _, _, @name2, _ = form_parameter_name_id_and_query(to: '')\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/columns.rb",
    "content": "module Wice #:nodoc:\n  module Columns #:nodoc:\n    mattr_reader :handled_type_view, :handled_type_conditions_generator\n\n    class << self #:nodoc:\n      def load_column_processors #:nodoc:\n        require_columns\n\n        @@handled_type_view                 = build_table_of_processors 'view'\n        @@handled_type_conditions_generator = build_table_of_processors 'conditions_generator'\n\n        if Wice::Defaults.const_defined?(:ADDITIONAL_COLUMN_PROCESSORS)\n\n          common_error_prefix = 'Error loading Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS. '\n\n          Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS.each do |key, value|\n            unless key.is_a?(Symbol)\n              raise common_error_prefix + 'A key of Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS should be a Symbol!'\n            end\n\n            if @@handled_type_view.key?(key)\n              raise common_error_prefix +\n                \"Column with key \\\"#{key}\\\" already exists in WiceGrid, overwriting existing columns is forbidden, please choose another key!\"\n            end\n\n            if !value.is_a?(Array) || value.size != 2\n              ail common_error_prefix +\n                'A value of Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS should be a a 2-element array!'\n            end\n\n            view_processor, conditions_generator = value.map(&:to_s).map do |klass|\n              begin\n                eval(klass)\n              rescue NameError\n                raise common_error_prefix + \"Class #{klass} is not defined!\"\n              end\n            end\n\n            unless view_processor.ancestors.include?(::Wice::Columns::ViewColumn)\n              raise common_error_prefix +\n                \"#{view_processor} should be inherited from Wice::Columns::ViewColumn!\"\n            end\n\n            unless conditions_generator.ancestors.include?(::Wice::Columns::ConditionsGeneratorColumn)\n              raise common_error_prefix +\n                \"#{conditions_generator} should be inherited from Wice::Columns::ConditionsGeneratorColumn!\"\n            end\n\n            @@handled_type_view[key] = view_processor\n            @@handled_type_conditions_generator[key] = conditions_generator\n          end\n        end\n      end\n\n      def get_view_column_processor(column_type) #:nodoc:\n        @@handled_type_view[column_type] || ViewColumn\n      end\n\n      def get_conditions_generator_column_processor(column_type) #:nodoc:\n        column_type = column_type.intern if column_type.is_a? String\n        @@handled_type_conditions_generator[column_type] || raise(\"Could not find conditions generator processor for column_type #{column_type}\")\n      end\n\n      private\n\n      def build_table_of_processors(prefix)\n        {}.tap do |processor_table|\n          loaded_processors = {}\n\n          Wice::Columns::COLUMN_PROCESSOR_INDEX.each do |column_type, column_source_file|\n            unless loaded_processors[column_source_file]\n              processor_class_name = \"#{prefix}_#{column_source_file}\".classify\n\n              unless Wice::Columns.const_defined?(processor_class_name.intern)\n                raise \"#{column_source_file}.rb is expected to define #{processor_class_name}!\"\n              end\n              processor_class = eval(\"Wice::Columns::#{processor_class_name}\")\n\n              loaded_processors[column_source_file] = processor_class\n            end\n\n            processor_table[column_type] = loaded_processors[column_source_file]\n          end\n        end\n      end\n\n      def require_columns\n        Wice::Columns::COLUMN_PROCESSOR_INDEX.values.uniq do |column_source_file|\n          require \"wice/columns/#{column_source_file}.rb\"\n        end\n      end\n    end\n\n    class ViewColumn  #:nodoc:\n      include ActionView::Helpers::FormTagHelper\n      include ActionView::Helpers::TagHelper\n      include ActionView::Helpers::JavaScriptHelper\n      include ActionView::Helpers::AssetTagHelper\n\n      # fields defined from the options parameter\n      FIELDS = [:attribute, :name, :html, :filter, :model, :allow_multiple_selection,\n                :in_html, :in_csv, :table_alias, :custom_order, :detach_with_id, :ordering, :auto_reload,\n                :filter_control_options, :sort_by]\n\n      attr_accessor(*FIELDS)\n\n      # a Proc object which would return contents of one cell\n      attr_accessor :cell_rendering_block\n\n      # reference to the WiceGrid instance\n      attr_accessor :grid\n\n      # name of the table\n      attr_accessor :table_name\n\n      # name of the main table (first argument to initialize_grid)\n      attr_accessor :main_table\n\n      # attr_accessor :model\n\n      # specification for a custom filter: an array of option label + option value pairs for the select, or a Proc object which returns this array.\n      # Or nil if it is not a custom filter\n      attr_accessor :custom_filter\n\n      # A boolean flag: whether a column has a text input or not\n      attr_reader :contains_a_text_input\n\n      # options for rendering filter controls. Supported options are specific to the type.\n      attr_accessor :filter_control_options\n\n      def initialize(block, options, grid_obj, tname, mtable, cfilter, view)  #:nodoc:\n        self.cell_rendering_block = block\n        self.grid           = grid_obj\n        self.table_name     = tname\n        self.main_table     = mtable\n        self.custom_filter  = cfilter\n        @view = view\n\n        FIELDS.each do |field|\n          self.send(field.to_s + '=', options[field])\n        end\n      end\n\n      def add_css_class(klass_value) #:nodoc:\n        self.html ||= {}\n        if html[:class].nil?\n          html[:class] = klass_value\n        else\n          html[:class] += ' ' unless html[:class].empty?\n          html[:class] << klass_value\n        end\n      end\n\n      def css_class #:nodoc:\n        if html && html[:class]\n          html[:class]\n        else\n          ''\n        end\n      end\n\n      def yield_declaration_of_column_filter #:nodoc:\n        nil\n      end\n\n      def detachness #:nodoc:\n        (!detach_with_id.blank?).to_s\n      end\n\n      def yield_declaration #:nodoc:\n        declaration = yield_declaration_of_column_filter\n        if declaration\n          {\n            filterName:  self.name,\n            detached:    detachness,\n            declaration: declaration\n          }\n        end\n      end\n\n      def config  #:nodoc:\n        @view.config\n      end\n\n      def controller  #:nodoc:\n        @view.controller\n      end\n\n      def render_filter #:nodoc:\n        params = @grid.filter_params(self)\n        render_filter_internal(params)\n      end\n\n      def render_filter_internal(_params) #:nodoc:\n        '<!-- implement me! -->'\n      end\n\n      def form_parameter_name_id_and_query(v) #:nodoc:\n        query = form_parameter_template(v)\n        query_without_equals_sign = query.sub(/=$/, '')\n        parameter_name = CGI.unescape(query_without_equals_sign)\n        dom_id = id_out_of_name(parameter_name)\n        [query, query_without_equals_sign, parameter_name, dom_id.tr('.', '_')]\n      end\n\n      # Returns a reference to the column in the form: \"table_name.column_name\", unless it is a column in the main\n      # table, in which case it will return just \"column_name\",\n      def attribute_name_fully_qualified_for_all_but_main_table_columns\n        return attribute if main_table\n        return fully_qualified_attribute_name\n      end\n\n      # Returns a reference to the column in the form: \"table_name.column_name\".\n      def fully_qualified_attribute_name\n        table_alias_or_table_name ? (table_alias_or_table_name + '.' + attribute) : nil\n      end\n\n      def filter_shown? #:nodoc:\n        self.attribute && self.filter\n      end\n\n      def filter_shown_in_main_table? #:nodoc:\n        filter_shown? && !self.detach_with_id\n      end\n\n      def table_alias_or_table_name  #:nodoc:\n        table_alias || table_name\n      end\n\n      def capable_of_hosting_filter_related_icons?  #:nodoc:\n        self.attribute.blank? && self.name.blank? && !self.filter_shown?\n      end\n\n      def has_auto_reloading_input?  #:nodoc:\n        false\n      end\n\n      def auto_reloading_input_with_negation_checkbox?  #:nodoc:\n        false\n      end\n\n      def has_auto_reloading_select?  #:nodoc:\n        false\n      end\n\n      def has_auto_reloading_calendar?  #:nodoc:\n        false\n      end\n\n      protected\n\n      def form_parameter_template(v) #:nodoc:\n        { @grid.name => { f: { self.attribute_name_fully_qualified_for_all_but_main_table_columns => v } } }.to_query\n      end\n\n      def form_parameter_name(v) #:nodoc:\n        form_parameter_template_hash(v).to_query\n      end\n\n      def name_out_of_template(s) #:nodoc:\n        CGI.unescape(s).sub(/=$/, '')\n      end\n\n      def id_out_of_name(s) #:nodoc:\n        s.gsub(/[\\[\\]]+/, '_').sub(/_+$/, '')\n      end\n    end\n\n    class ConditionsGeneratorColumn   #:nodoc:\n      def initialize(column_wrapper, column_type = nil)   #:nodoc:\n        # Wice::ActiveRecordColumnWrapper\n        @column_wrapper = column_wrapper\n        @column_type = column_type\n      end\n\n      def generate_conditions(_table_alias, _opts) #:nodoc:\n        raise('implement me')\n      end\n\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/grid_output_buffer.rb",
    "content": "module Wice\n  class GridOutputBuffer < String #:nodoc:\n\n    # defines behavior for rendering nonexistent filters.\n    # If return_empty_strings_for_nonexistent_filters is true, a call to render a non existent filter will raise an exception\n    # If return_empty_strings_for_nonexistent_filters is false (CSV mode), no exception will be raised.\n    attr_accessor :return_empty_strings_for_nonexistent_filters\n\n    # initializes a grid output buffer\n    def initialize(*attrs)\n      super(*attrs)\n      @filters = HashWithIndifferentAccess.new\n    end\n\n    def inspect\n      \"#<Wice::GridOutputBuffer #{@filters.map{|key, filter| \"#{key}: #{filter.inspect}\"}.join ', '}>\"\n    end\n\n    # returns HTML code the grid\n    def to_s\n      super.html_safe\n    end\n\n    # stores HTML code for a detached filter\n    def add_filter(detach_with_id, filter_code)\n      raise WiceGridException.new(\"Detached ID #{detach_with_id} is already used!\") if @filters.key? detach_with_id\n      @filters[detach_with_id] = filter_code\n    end\n\n    # returns HTML code for a detached filter\n    def filter_for(detach_with_id)\n      unless @filters.key? detach_with_id\n        if @return_empty_strings_for_nonexistent_filters\n          return ''\n        else\n          raise WiceGridException.new(\"No filter with Detached ID '#{detach_with_id}'!\")\n        end\n      end\n\n      unless @filters[detach_with_id]\n        raise WiceGridException.new(\"Filter with Detached ID '#{detach_with_id}' has already been requested once! There cannot be two instances of the same filter on one page\")\n      end\n\n      res = @filters[detach_with_id]\n      @filters[detach_with_id] = false\n      res\n    end\n\n    # returns HTML code for a detached filter\n    alias_method :[], :filter_for\n  end\nend\n"
  },
  {
    "path": "lib/wice/grid_renderer.rb",
    "content": "module Wice\n\n  # Instance of `GridRenderer` is injected into the top level block of the `grid` helper.\n  # `g.column`, `g.action_column` are all examples of methods of `GridRenderer`\n  class GridRenderer\n    include ActionView::Helpers::TagHelper\n    include ActionView::Helpers::CaptureHelper\n    include ActionView::Helpers::TextHelper\n    include ActionView::Helpers::AssetTagHelper\n    include ActionView::Helpers::JavaScriptHelper\n\n    # a Proc object for the after_row block\n    attr_reader :after_row_handler\n\n    # a Proc object for the before_row block\n    attr_reader :before_row_handler\n\n    # a Proc object for the replace_row block\n    attr_reader :replace_row_handler\n\n    # Configuration or a Proc object for the blank_slate block\n    attr_reader :blank_slate_handler\n\n    # a Proc object which returns contents of the last row\n    attr_reader :last_row_handler\n\n    # reference to the WiceGrid instance\n    attr_reader :grid\n\n    # Contents of <caption></caption>\n    attr_reader :kaption\n\n    # HTTP parameter for the order field\n    ORDER_PARAMETER_NAME           = 'order'\n\n    # HTTP parameter for the order direction (asc/desc)\n    ORDER_DIRECTION_PARAMETER_NAME = 'order_direction'\n\n    def initialize(grid, view)  #:nodoc:\n      @grid                  = grid\n      @grid.renderer         = self\n      @columns               = []\n      @columns_table         = {}\n      @action_column_present = false\n      @view                  = view\n    end\n\n    def config  #:nodoc:\n      @view.config\n    end\n\n    def controller  #:nodoc:\n      @view.controller\n    end\n\n    def add_column(vc)  #:nodoc:\n      @columns_table[vc.fully_qualified_attribute_name] = vc if vc.attribute\n      @columns << vc\n    end\n\n    def [](k)  #:nodoc:\n      @columns_table[k]\n    end\n\n    def number_of_columns(filter = nil)  #:nodoc:\n      filter_columns(filter).size\n    end\n\n    def each_column_label(filter = nil)  #:nodoc:\n      filter_columns(filter).each { |col| yield col.name }\n    end\n\n    def column_labels(filter = nil)  #:nodoc:\n      filter_columns(filter).collect(&:name)\n    end\n\n    def each_column(filter = nil)  #:nodoc:\n      filter_columns(filter).each { |col| yield col }\n    end\n\n    def each_column_aware_of_one_last_one(filter = nil)  #:nodoc:\n      cols = filter_columns(filter)\n      cols[0..-2].each { |col| yield col, false }\n      yield cols.last, true\n    end\n\n    def last_column_for_html  #:nodoc:\n      filter_columns(:in_html).last\n    end\n\n    def select_for(filter)  #:nodoc:\n      filter_columns(filter).select { |col| yield col }\n    end\n\n    def find_one_for(filter)  #:nodoc:\n      filter_columns(filter).find { |col| yield col }\n    end\n\n    def each_column_with_attribute  #:nodoc:\n      @columns.select(&:attribute).each { |col| yield col }\n    end\n\n    alias_method :each, :each_column\n    include Enumerable\n\n    def csv_export_icon #:nodoc:\n      content_tag(\n        :div,\n        content_tag(:i, '', class: 'fa fa-file-csv'),\n        title: NlMessage['csv_export_tooltip'],\n        class: 'clickable export-to-csv-button'\n      )\n    end\n\n    def pagination_panel(number_of_columns, hide_csv_button)  #:nodoc:\n      panel = yield\n\n      render_csv_button = @grid.export_to_csv_enabled && !hide_csv_button\n\n      if panel.nil?\n        if render_csv_button\n          \"<tr><td colspan=\\\"#{number_of_columns}\\\"></td><td class=\\\"csv_export\\\">#{csv_export_icon}</td></tr>\"\n        else\n          ''\n        end\n      else\n        if render_csv_button\n          \"<tr><td colspan=\\\"#{number_of_columns}\\\">#{panel}</td><td class=\\\"csv_export\\\">#{csv_export_icon}</td></tr>\"\n        else\n          \"<tr><td colspan=\\\"#{number_of_columns + 1}\\\">#{panel}</td></tr>\"\n        end\n      end\n    end\n\n    # Takes one argument and adds the  <caption></caption> tag to the table with the\n    # argument value as the contents of <caption>.\n    def caption(kaption)\n      @kaption = kaption\n    end\n\n    # Adds a column with checkboxes for each record. Useful for actions with multiple records, for example, deleting\n    # selected records. Please note that +action_column+ only creates the checkboxes and the 'Select All' and\n    # 'Deselect All' buttons, and the form itelf as well as processing the parameters should be taken care of\n    # by the application code.\n    #\n    # * <tt>:param_name</tt> - The name of the HTTP parameter.\n    #   The complete HTTP parameter is <tt>\"#{grid_name}[#{param_name}][]\"</tt>.\n    #   The default param_name is 'selected'.\n    # * <tt>:html</tt> - a hash of HTML attributes to be included into the <tt>td</tt> tag.\n    # * <tt>:select_all_buttons</tt> - show/hide buttons 'Select All' and 'Deselect All' in the column header.\n    #   The default is +true+.\n    # * <tt>:object_property</tt> - a method used to obtain the value for the HTTP parameter. The default is +id+.\n    # * <tt>:html_check_box</tt> - can be used to switch from a real check box to two images. The default is +true+.\n    #\n    # You can hide a certain action checkbox if you add the usual block to +g.action_column+, just like with the\n    # +g.column+ definition. If the block returns +nil+ or +false+ no checkbox will be rendered.\n\n    def action_column(opts = {}, &block)\n      if @action_column_present\n        raise Wice::WiceGridException.new('There can be only one action column in a WiceGrid')\n      end\n\n      options = {\n        param_name:         :selected,\n        html:               {},\n        select_all_buttons: true,\n        object_property:    :id,\n        html_check_box:     true\n      }\n\n      opts.assert_valid_keys(options.keys)\n      options.merge!(opts)\n      @action_column_present = true\n      column_processor_klass = Columns.get_view_column_processor(:action)\n\n      @columns << column_processor_klass.new(\n        @grid,\n        options[:html],\n        options[:param_name],\n        options[:select_all_buttons],\n        options[:object_property],\n        options[:html_check_box],\n        @view,\n        block\n      )\n    end\n\n    # Defines everything related to a column in a grid - column name, filtering, rendering cells, etc.\n    #\n    # +column+ is only used inside the block of the +grid+ method. See documentation for the +grid+ method for more details.\n    #\n    # The only parameter is a hash of options. None of them is optional. If no options are supplied, the result will be a\n    # column with no name, no filtering and no sorting.\n    #\n    # * <tt>:name</tt> - Name of the column.\n    # * <tt>:html</tt> - a hash of HTML attributes to be included into the <tt>td</tt> tag.\n    # * <tt>:class</tt> - a shortcut for <tt>html: {class: 'css_class'}</tt>\n    # * <tt>:attribute</tt> - name of a database column (which normally correspond to a model attribute with the\n    #   same name). By default the field is assumed to belong to the default table (see documentation for the\n    #   +initialize_grid+ method). Parameter <tt>:assoc</tt> (association) allows to specify another joined table. Presence of\n    #   this parameter\n    #   * adds sorting capabilities by this field\n    #   * automatically creates a filter based on the type of the field unless parameter <tt>:filter</tt> is set to false.\n    #     The following filters exist for the following types:\n    #     * <tt>string</tt> - a text field\n    #     * <tt>integer</tt> and <tt>float</tt>  - two text fields to specify the range. Both limits or only one\n    #       can be specified\n    #     * <tt>boolean</tt> - a dropdown list with 'yes', 'no', or '-'. These labels can be changed in\n    #       <tt>lib/wice_grid_config.rb</tt>.\n    #     * <tt>date</tt> - two sets of standard date dropdown lists so specify the time range.\n    #     * <tt>datetime</tt> - two sets of standard datetime dropdown lists so specify the time range. This filter\n    #       is far from being user-friendly due to the number of dropdown lists.\n    # * <tt>:filter</tt> - Disables filters when set to false.\n    #   This is needed if sorting is required while  filters are not.\n    # * <tt>:filter_type</tt> - Using a column filter different from the default filter chosen automatically based on the\n    #   data type or the <tt>:custom_filter</tt> argument. See <tt>lib/columns/column_processor_index.rb</tt> for the\n    #   list of available filters.\n    # * <tt>:filter_control_options</tt> - Additional options to pass to the filter class to change the filter control\n    #   behaviour. Supported options are dependent on the filter used.\n    #   This is needed if sorting is required while  filters are not.\n    # * <tt>:ordering</tt> - Enable/disable ordering links in the column titles. The default is +true+\n    #   (i.e. if <tt>:attribute</tt> is defined, ordering is enabled)\n    # * <tt>:assoc</tt> - Name of the model association. <tt>:attribute</tt> belongs to the table joined via this association.\n    # * <tt>:table_alias</tt> - In case there are two joined assocations both referring to the same table, ActiveRecord\n    #   constructs a query where the second join provides an alias for the joined table. Setting <tt>:table_alias</tt>\n    #   to this alias will enable WiceGrid to order and filter by columns belonging to different associatiations  but\n    #   originating from the same table without confusion. See README for an example.\n    # * <tt>:custom_filter</tt> - Allows to construct a custom dropdown filter. Depending on the value of\n    #   <tt>:custom_filter</tt> different modes are available:\n    #   * array of strings and/or numbers - this is a direct  definition of possible values of the dropdown.\n    #     Every item will be used both as the value of the select option and as its label.\n    #   * Array of two-element arrays - Every first item of the two-element array is used for the label of the select option\n    #     while the second element is the value of the select option\n    #   * Hash - The keys of the hash become the labels of the generated dropdown list,\n    #     while the values will be values of options of the dropdown list:\n    #   * <tt>:auto</tt> - a powerful option which populates the dropdown list with all unique values of the field specified by\n    #     <tt>:attribute</tt> and <tt>:model</tt>.\n    #     <tt>:attribute</tt> throughout all pages. In other words, this runs an SQL query without +offset+ and +limit+\n    #     clauses and  with <tt>distinct(table.field)</tt> instead of <tt>distinct(*)</tt>\n    #   * any other symbol name (method name) - The dropdown list is populated by all unique value returned by the\n    #     method with this name sent to <em>all</em> ActiveRecord objects throughout all pages. The main difference\n    #     from <tt>:auto</tt> is that this method does not have to be a field in the result set, it is just some\n    #     value computed in the method after the database call and ActiveRecord instantiation.\n    #\n    #     But here lies the major drawback - this mode requires additional query without +offset+ and +limit+\n    #     clauses to instantiate _all_ ActiveRecord objects, and performance-wise it brings all the advantages\n    #     of pagination to nothing. Thus, memory- and performance-wise this can be really bad for some queries\n    #     and tables and should be used with care.\n    #\n    #     If the method returns a atomic value like a string or an integer, it is used for both the value and the\n    #     label of the select option element. However, if the retuned value is a two element array, the first element\n    #     is used for the option label and the second - for the value.\n    #     Read more in README, section 'Custom dropdown filters'\n    #   * An array of symbols (method names) - similar to the mode with a single symbol name. The first method name\n    #     is sent to the ActiveRecord object if it responds to this method, the second method name is sent to the\n    #     returned value unless it is +nil+, and so on. In other words, a single symbol mode is a\n    #     case of an array of symbols where the array contains just one element. Thus the warning about the single method name\n    #     mode applies here as well.\n    #\n    #     If the last method returns a atomic value like a string or an integer, it is used for both the value and the\n    #     label of the select option element.\n    #     However, if the retuned value is a two element array, the first element is used for the option label and the\n    #     second - for the value.\n    #     Read more in README, section 'Custom dropdown filters'\n    # * <tt>:sort_by</tt> - allows arbitrary sorting of the results. This option takes a Proc which returns a value to\n    #   sort by. When this option is used and sorting on this column is activated, the entire resultset is loaded and\n    #   the Proc is passed to Enumerable#sort_by. This can also be used with calculated columns, but an arbitrary\n    #   <tt>:attribute</tt> option must be included to provide a request parameter key. Because this option will load\n    #   the entire resultset, it should only be used with small resultsets. The <tt>:custom_order</tt> option on grid\n    #   initialization should be preferred if possible, as it will perform the sorting in SQL.\n    # * <tt>:boolean_filter_true_label</tt> - overrides the label for <tt>true</tt> in the boolean filter (<tt>wice_grid.boolean_filter_true_label</tt> in <tt>wice_grid.yml</tt>).\n    # * <tt>:boolean_filter_false_label</tt> - overrides the label for <tt>false</tt> in the boolean filter (<tt>wice_grid.boolean_filter_false_label</tt> in <tt>wice_grid.yml</tt>).\n    # * <tt>:allow_multiple_selection</tt> - enables or disables switching between single and multiple selection modes for\n    #   custom dropdown boxes. +true+ by default (see +ALLOW_MULTIPLE_SELECTION+ in the configuration file).\n    # * <tt>:filter_all_label</tt> - overrides the default value for <tt>BOOLEAN_FILTER_FALSE_LABEL</tt> ('<tt>--</tt>')\n    #   in the config. Has effect in a column with a boolean filter _or_ a custom filter.\n    # * <tt>:detach_with_id</tt> - allows to detach the filter and render it after or before the grid with the\n    #   +grid_filter+ helper. The value is an arbitrary unique identifier\n    #   of the filter. Read section 'Detached Filters' in README for details.\n    #   Has effect in a column with a boolean filter _or_ a custom filter.\n    # * <tt>:in_csv</tt> - When CSV export is enabled, all columns are included into the export. Setting <tt>:in_csv</tt>\n    #   to false will prohibit the column from inclusion into the export.\n    # * <tt>:in_html</tt> - When CSV export is enabled and it is needed to use a column for CSV export only and ignore it\n    #   in HTML, set this parameter to false.\n    # * <tt>:negation</tt> - turn on/off the negation checkbox in string filters\n    # * <tt>:auto_reload</tt> - a boolean value specifying if a change in a filter triggers reloading of the grid. Works with all\n    #   filter types including the JS calendar, the only exception is the standard Rails date/datetime filters.\n    #   The default is false. (see +AUTO_RELOAD+ in the configuration file).\n    #\n    # The block parameter is an ActiveRecord instance. This block is called for every ActiveRecord shown, and the return\n    # value of the block is a string which becomes the contents of one table cell, or an array of two elements where\n    # the first element is the cell contents and the second is a hash of HTML attributes to be added for the <tt><td></tt>\n    # tag of the current cell.\n    #\n    # In case of an array output, please note that if you need to define HTML attributes for all <tt><td></tt>'s in a\n    # column, use +html+. Also note that if the method returns a hash with a <tt>:class</tt> or <tt>'class'</tt>\n    # element, it will not overwrite the class defined in +html+, or classes added by the grid itself\n    # (+active-filter+ and +sorted+), instead they will be all concatenated:\n    # <tt><td class=\"sorted user_class_for_columns user_class_for_this_specific_cell\"></tt>\n    #\n    # It is up to the developer to make sure that what in rendered in column cells\n    # corresponds to sorting and filtering specified by parameters <tt>:attribute</tt> and <tt>:model</tt>.\n\n    def column(opts = {}, &block)\n      options = {\n        allow_multiple_selection: ConfigurationProvider.value_for(:ALLOW_MULTIPLE_SELECTION),\n        assoc:                      nil,\n        attribute:                  nil,\n        auto_reload:                ConfigurationProvider.value_for(:AUTO_RELOAD),\n        boolean_filter_false_label: NlMessage['boolean_filter_false_label'],\n        boolean_filter_true_label:  NlMessage['boolean_filter_true_label'],\n        class:                      nil,\n        custom_filter:              nil,\n        detach_with_id:             nil,\n        filter:                     true,\n        filter_all_label: ConfigurationProvider.value_for(:CUSTOM_FILTER_ALL_LABEL),\n        filter_control_options: {},\n        filter_type:            nil,\n        html:                   {},\n        in_csv:                 true,\n        in_html:                true,\n        model:                  nil, # will throw an exception with instructions\n        name:                   '',\n        negation: ConfigurationProvider.value_for(:NEGATION_IN_STRING_FILTERS),\n        ordering:               true,\n        table_alias:            nil,\n        sort_by:                nil,\n      }\n\n      opts.assert_valid_keys(options.keys)\n      options.merge!(opts)\n\n      assocs = nil\n\n      if options[:model]\n        raise WiceGridArgumentError.new('Instead of specifying a model of a joined table please use assoc: :name_of_association')\n      end\n\n      unless options[:assoc].nil?\n\n        unless options[:assoc].is_a?(Symbol) ||\n              (options[:assoc].is_a?(Array) && ! options[:assoc].empty? && options[:assoc].all?{ |assoc| assoc.is_a?(Symbol)})\n\n          raise WiceGridArgumentError.new('Option :assoc can only be a symbol or an array of symbols')\n        end\n\n        assocs = options[:assoc].is_a?(Symbol) ? [options[:assoc]] : options[:assoc]\n\n        options[:model] = get_model_from_associations(@grid.klass, assocs)\n      end\n\n      if options[:attribute].nil? && options[:model]\n        raise WiceGridArgumentError.new('Option :assoc is only used together with :attribute')\n      end\n\n      if options[:attribute] && options[:attribute].index('.')\n        raise WiceGridArgumentError.new(\"Invalid attribute name #{options[:attribute]}. An attribute name must not contain a table name!\")\n      end\n\n\n      if options[:class]\n        options[:html] ||= {}\n        Wice::WgHash.add_or_append_class_value!(options[:html], options[:class])\n        options.delete(:class)\n      end\n\n      if block.nil?\n        if !options[:attribute].blank?\n          if assocs.nil?\n            block = ->(obj) { obj.send(options[:attribute]) }\n          else\n            messages = assocs + [ options[:attribute] ]\n            block = ->(obj) { obj.deep_send(*messages) }\n          end\n        else\n          raise WiceGridArgumentError.new(\n            'Missing column block without attribute defined. You can only omit the block if attribute is present.')\n        end\n      end\n\n      klass = Columns::ViewColumn\n      if options[:attribute] &&\n        col_type_and_table_name = @grid.declare_column(\n          column_name:          options[:attribute],\n          model:                options[:model],\n          custom_filter_active: options[:custom_filter],\n          table_alias:          options[:table_alias],\n          filter_type:          options[:filter_type],\n          assocs:               assocs,\n          sort_by:              options[:sort_by],\n        )\n\n        # [ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::Column, String, Boolean]\n        db_column, table_name, main_table = col_type_and_table_name\n        col_type = db_column.type\n\n        if options[:custom_filter]\n\n          custom_filter = if options[:custom_filter] == :auto\n            -> { @grid.distinct_values_for_column(db_column) } # Thank God Ruby has higher order functions!!!\n\n          elsif options[:custom_filter].class == Symbol\n            -> { @grid.distinct_values_for_column_in_resultset([options[:custom_filter]]) }\n\n          elsif options[:custom_filter].class == Hash\n            options[:custom_filter].keys\n\n            options[:custom_filter].to_a\n\n          elsif options[:custom_filter].class == Array\n            if options[:custom_filter].empty?\n              []\n            elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], Symbol)\n              -> { @grid.distinct_values_for_column_in_resultset(options[:custom_filter]) }\n\n            elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], String) || WgEnumerable.all_items_are_of_class(options[:custom_filter], Numeric)\n              options[:custom_filter].map { |i| [i, i] }\n\n            elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], Array)\n              options[:custom_filter]\n            else\n              raise WiceGridArgumentError.new(\n                ':custom_filter can equal :auto, an array of string and/or numbers (direct values for the dropdown), ' \\\n                'a homogeneous array of symbols (a sequence of methods to send to AR objects in the result set to ' \\\n                'retrieve unique values for the dropdown), a Symbol (a shortcut for a one member array of symbols), ' \\\n                'a hash where keys are labels and values are values for the dropdown option, or an array of two-item arrays, ' \\\n                'each of which contains the label (first element) and the value (second element) for a dropdown option'\n                )\n            end\n          end\n\n          klass = Columns.get_view_column_processor(:custom)\n        elsif options[:filter_type]\n          klass = Columns.get_view_column_processor(options[:filter_type])\n        else\n\n          col_type = case col_type\n          when :date\n            Wice::Defaults::DEFAULT_FILTER_FOR_DATE\n          when :datetime\n            Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME\n          when :timestamp\n            Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME\n          else\n            col_type\n          end\n\n          klass = Columns.get_view_column_processor(col_type)\n        end # custom_filter\n\n      end # attribute\n\n      vc = klass.new(block, options, @grid, table_name, main_table, custom_filter, @view)\n\n      vc.negation = options[:negation] if vc.respond_to? :negation=\n\n      vc.filter_all_label = options[:filter_all_label] if vc.is_a?(Columns.get_view_column_processor(:custom))\n      if vc.is_a?(Columns.get_view_column_processor(:boolean))\n        vc.boolean_filter_true_label = options[:boolean_filter_true_label]\n        vc.boolean_filter_false_label = options[:boolean_filter_false_label]\n      end\n      add_column(vc)\n    end\n\n    def get_model_from_associations(model, assocs) # :nodoc:\n      if assocs.empty?\n        model\n      else\n        head = assocs[0]\n        tail = assocs[1..-1]\n\n        if reflection = model.reflect_on_association(head)\n          next_model = reflection.klass\n          get_model_from_associations(next_model, tail)\n        else\n          raise WiceGridArgumentError.new(\"Association #{head} not found in #{model}\")\n        end\n      end\n    end\n\n    # Optional method inside the +grid+ block, to which every ActiveRecord instance is injected, just like +column+.\n    # Unlike +column+, it returns a hash which will be used as HTML attributes for the row with the given ActiveRecord instance.\n    #\n    # Note that if the method returns a hash with a <tt>:class</tt> or <tt>'class'</tt> element, it will not overwrite\n    # classes +even+ and +odd+, instead they will be concatenated: <tt><tr class=\"even highlighted_row_class_name\"></tt>\n    def row_attributes(&block)\n      @row_attributes_handler = block\n    end\n\n    # Can be used to add HTML code (another row, for example) right after each grid row.\n    # Nothing is added if the block return +false+ or +nil+.\n    def after_row(&block)\n      @after_row_handler = block\n    end\n\n    # Can be used to add HTML code (another row, for example) right before each grid row.\n    # Nothing is added if the block return +false+ or +nil+.\n    def before_row(&block)\n      @before_row_handler = block\n    end\n\n    # Can be used to replace the HTML code (for example to make a multi-column spanning row) of a row.\n    # Nothing is replaced if the block return +false+ or +nil+.\n    def replace_row(&block)\n      @replace_row_handler = block\n    end\n\n    # Can be used to add HTML code (calculation results, for example) after all rows.\n    # Nothing is added if the block return +false+ or +nil+.\n    def last_row(&block)\n      @last_row_handler = block\n    end\n\n    # The output of the block submitted to +blank_slate+ is rendered instead of the whole grid if no filters are active\n    # and there are no records to render.\n    # In addition to the block style two other variants are accepted:\n    # *   <tt>g.blank_slate \"some text to be rendered\"</tt>\n    # *   <tt>g.blank_slate partial: \"partial_name\"</tt>\n    def blank_slate(opts = nil, &block)\n      if (opts.is_a?(Hash) && opts.key?(:partial) && block.nil?) || (opts.is_a?(String) && block.nil?)\n        @blank_slate_handler = opts\n      elsif opts.nil? && block\n        @blank_slate_handler = block\n      else\n        raise WiceGridArgumentError.new(\"blank_slate accepts only a string, a block, or template: 'path_to_template' \")\n      end\n    end\n\n    def get_row_attributes(ar_object) #:nodoc:\n      if @row_attributes_handler\n        row_attributes = @row_attributes_handler.call(ar_object)\n        row_attributes = {} if row_attributes.blank?\n        unless row_attributes.is_a?(Hash)\n          raise WiceGridArgumentError.new(\"row_attributes block must return a hash containing HTML attributes. The returned value is #{row_attributes.inspect}\")\n        end\n        row_attributes\n      else\n        {}\n      end\n    end\n\n    def no_filter_needed?   #:nodoc:\n      !@columns.inject(false) { |a, b| a || b.filter_shown? }\n    end\n\n    def no_filter_needed_in_main_table?   #:nodoc:\n      !@columns.inject(false) { |a, b| a || b.filter_shown_in_main_table? }\n    end\n\n    def base_link_for_filter(controller, extra_parameters = {})   #:nodoc:\n      new_params = Wice::WgHash.deep_clone controller.params.to_unsafe_h\n      new_params.merge!(extra_parameters)\n\n      if new_params[@grid.name]\n        new_params[@grid.name].delete(:page) # we reset paging here\n        new_params[@grid.name].delete(:f)    # no filter for the base url\n        new_params[@grid.name].delete(:foc)  # nullify the focus\n        new_params[@grid.name].delete(:q)    # and no request for the saved query\n      end\n\n      new_params[:only_path] = false\n      base_link_with_pp_info = omit_empty_query controller.url_for(new_params)\n\n      if new_params[@grid.name]\n        new_params[@grid.name].delete(:pp)    # and reset back to pagination if show all mode is on\n      end\n      [base_link_with_pp_info, omit_empty_query(controller.url_for(new_params))]\n    end\n\n    def link_for_export(controller, format, extra_parameters = {})   #:nodoc:\n      new_params = Wice::WgHash.deep_clone controller.params.to_unsafe_h\n      new_params.merge!(extra_parameters)\n\n      new_params[@grid.name] = {} unless new_params[@grid.name]\n      new_params[@grid.name][:export] = format\n\n      new_params[:only_path] = false\n      controller.url_for(new_params)\n    end\n\n    def column_link(column, direction, params, extra_parameters = {})   #:nodoc:\n      column_attribute_name = if column.attribute.index('.') || column.main_table || column.table_alias_or_table_name.nil?\n        column.attribute\n      else\n        column.table_alias_or_table_name + '.' + column.attribute\n      end\n\n      query_params = { @grid.name => {\n        ORDER_PARAMETER_NAME           => column_attribute_name,\n        ORDER_DIRECTION_PARAMETER_NAME => direction\n      } }\n\n      cleaned_params = Wice::WgHash.deep_clone params.to_unsafe_h\n      cleaned_params.merge!(extra_parameters)\n\n      cleaned_params.delete(:controller)\n      cleaned_params.delete(:action)\n\n      query_params = Wice::WgHash.rec_merge(cleaned_params, query_params)\n\n      if Rails.version.to_i >= 5\n        '?' + query_params.to_h.to_query\n      else\n        '?' + query_params.to_query\n      end\n    end\n\n    protected\n\n    def filter_columns(method_name = nil) #:nodoc:\n      method_name ? @columns.select(&method_name) : @columns\n    end\n\n    def omit_empty_query(url) #:nodoc:\n      # /foo?                --> /foo\n      # /foo?grid=           --> /foo\n      # /foo?grid=&page=1    --> /foo?page=1\n      # /foo?grid=some_value --> /foo?grid=some_value\n\n      empty_hash_rx = Regexp.new \"([&?])#{Regexp.escape @grid.name}=([&?]|$)\" # c.f., issue #140\n      url.gsub(empty_hash_rx, '\\1').gsub(/\\?+$/, '')\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/helpers/bs_calendar_helpers.rb",
    "content": "module Wice #:nodoc:\n  module BsCalendarHelpers #:nodoc:\n\n    # A struct containing all data for rendering a calendar\n    class CalendarData #:nodoc:\n\n      # :nodoc:\n      attr_accessor :name,\n                    :date_string,\n                    :dom_id,\n                    :datepicker_placeholder_id,\n                    :date_div_id,\n                    :fire_event,\n                    :close_calendar_event_name,\n                    :the_other_datepicker_id_to,\n                    :the_other_datepicker_id_from\n    end\n\n    def date_calendar_bs(calendar_data)  #:nodoc:\n      placeholder =\n        if calendar_data.the_other_datepicker_id_to\n          I18n.t(\"wice_grid.date_selector_tooltip_from\")\n        else\n          I18n.t(\"wice_grid.date_selector_tooltip_to\")\n        end\n\n      text_field_tag_options = {\n          :id                   => calendar_data.dom_id,\n          'data-provide'        => 'datepicker',\n          'data-date-language'  => I18n.locale,\n          'data-date-autoclose' => true,\n          'data-date-format'    => Wice::ConfigurationProvider.value_for(:DATE_FORMAT_BOOTSTRAP),\n          'placeholder'         => placeholder\n      }\n\n      text_field_tag_options['class'] = 'form-control input-sm'\n\n      if Rails.env.development?\n        text_field_tag_options['class'] += ' check-for-bsdatepicker'\n      end\n\n      if calendar_data.fire_event\n        text_field_tag_options['data-close-calendar-event-name'] = calendar_data.close_calendar_event_name\n      end\n\n      if calendar_data.the_other_datepicker_id_to\n        text_field_tag_options['data-the-other-bsdatepicker-id-to'] = calendar_data.the_other_datepicker_id_to\n      end\n\n      if calendar_data.the_other_datepicker_id_from\n        text_field_tag_options['data-the-other-bsdatepicker-id-from'] = calendar_data.the_other_datepicker_id_from\n      end\n\n      date_picker = text_field_tag(calendar_data.name, calendar_data.date_string, text_field_tag_options)\n\n      \"<div id=\\\"#{calendar_data.datepicker_placeholder_id}\\\">#{date_picker}</div>\"\n    end\n\n    def prepare_data_for_bscalendar(options)  #:nodoc:\n      date_format = Wice::ConfigurationProvider.value_for(:DATE_FORMAT)\n\n      CalendarData.new.tap do |calendar_data|\n        calendar_data.name                      = options[:name]\n        calendar_data.date_string               = options[:initial_date].nil? ? '' : options[:initial_date].strftime(date_format)\n        calendar_data.dom_id                    = options[:name].gsub(/([\\[\\(])|(\\]\\[)/, '_').gsub(/[\\]\\)]/, '').gsub(/\\./, '_').gsub(/_+/, '_')\n        calendar_data.datepicker_placeholder_id = calendar_data.dom_id + '_date_placeholder'\n        calendar_data.date_div_id               = calendar_data.dom_id + '_date_view'\n        calendar_data.close_calendar_event_name = \"wg:calendarChanged_#{options[:grid_name]}\"\n        calendar_data.fire_event                = options[:fire_event]\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/helpers/js_calendar_helpers.rb",
    "content": "module Wice #:nodoc:\n  module JsCalendarHelpers #:nodoc:\n\n    # A struct containing all data for rendering a calendar\n    class CalendarData\n\n      # :nodoc:\n      attr_accessor :name,\n                    :date_string,\n                    :dom_id,\n                    :datepicker_placeholder_id,\n                    :date_span_id,\n                    :close_calendar_event_name,\n                    :title,\n                    :fire_event,\n                    :the_other_datepicker_id_to,\n                    :the_other_datepicker_id_from\n    end\n\n    def date_calendar_jquery(calendar_data)  #:nodoc:\n      hidden_field_tag_options = {\n        :id                 => calendar_data.dom_id,\n        'data-locale'       => I18n.locale,\n        'data-date-format'  => Wice::ConfigurationProvider.value_for(:DATE_FORMAT_JQUERY),\n        'data-button-text'  => calendar_data.title\n      }\n\n      if calendar_data.fire_event\n        hidden_field_tag_options['data-close-calendar-event-name'] = calendar_data.close_calendar_event_name\n      end\n\n      if Rails.env.development?\n        hidden_field_tag_options['class'] = 'check-for-datepicker'\n      end\n\n      if calendar_data.the_other_datepicker_id_to\n        hidden_field_tag_options['data-the-other-datepicker-id-to'] = calendar_data.the_other_datepicker_id_to\n      end\n\n      if calendar_data.the_other_datepicker_id_from\n        hidden_field_tag_options['data-the-other-datepicker-id-from'] = calendar_data.the_other_datepicker_id_from\n      end\n\n      if year_range = ConfigurationProvider.value_for(:DATEPICKER_YEAR_RANGE)\n        hidden_field_tag_options['data-date-year-range'] = year_range\n      end\n\n      date_picker = hidden_field_tag(calendar_data.name, calendar_data.date_string, hidden_field_tag_options) + ' ' +\n\n      link_to(\n        calendar_data.date_string,\n        '#',\n        :id           => calendar_data.date_span_id,\n        :class        => 'date-label',\n        :title        => ::Wice::NlMessage['date_string_tooltip'],\n        'data-dom-id' => calendar_data.dom_id\n      )\n\n      content_tag(\n        :span,\n        date_picker,\n        id: calendar_data.datepicker_placeholder_id,\n        class: 'jq-datepicker-container'\n      )\n    end\n\n    def prepare_data_for_calendar(options)  #:nodoc:\n      date_format = Wice::ConfigurationProvider.value_for(:DATE_FORMAT)\n\n      CalendarData.new.tap do |calendar_data|\n        calendar_data.name                      = options[:name]\n        calendar_data.date_string               = options[:initial_date].nil? ? '' : options[:initial_date].strftime(date_format)\n        calendar_data.dom_id                    = options[:name].gsub(/([\\[\\(])|(\\]\\[)/, '_').gsub(/[\\]\\)]/, '').gsub(/\\./, '_').gsub(/_+/, '_')\n        calendar_data.datepicker_placeholder_id = calendar_data.dom_id + '_date_placeholder'\n        calendar_data.date_span_id              = calendar_data.dom_id + '_date_view'\n        calendar_data.close_calendar_event_name = \"wg:calendarChanged_#{options[:grid_name]}\"\n        calendar_data.title                     = options[:title]\n        calendar_data.fire_event                = options[:fire_event]\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/helpers/wice_grid_misc_view_helpers.rb",
    "content": "module Wice\n\n  # Various grid related helpers\n  module GridViewHelper\n    # This method dumps all HTTP parameters related to filtering and ordering of a certain grid as hidden form fields.\n    # This might be required if you want to keep the state of a grid while reloading the page using other forms.\n    #\n    # The only parameter is a grid object returned by +initialize_grid+ in the controller.\n    def dump_filter_parameters_as_hidden_fields(grid)\n      unless grid.is_a? WiceGrid\n        raise WiceGridArgumentError.new('dump_filter_parameters_as_hidden_fields: the parameter must be a WiceGrid instance.')\n      end\n\n      grid.get_state_as_parameter_value_pairs(true).collect do|param_name, value|\n        hidden_field_tag(param_name, value, id: \"hidden-#{param_name.gsub(/[\\[\\]]/, '-')}\")\n      end.join(\"\\n\").html_safe\n    end\n\n    # This method dumps all HTTP parameters related to filtering of a certain grid in the form of a hash.\n    # This might be required if you want to keep the state of a grid while reloading the page using Rails routing helpers.\n    # Attention: this does not return parameters for ordering the grid, use +filter_and_order_state_as_hash+ if you\n    # need it.\n    #\n    # The only parameter is a grid object returned by +initialize_grid+ in the controller.\n    def filter_state_as_hash(grid)\n      { grid.name => { 'f' => grid.status[:f] } }\n    end\n\n    # This method dumps all HTTP parameters related to filtering and ordering of a certain grid in the form of a hash.\n    # This might be required if you want to keep the state of a grid while reloading the page using Rails routing helpers.\n    #\n    # The only parameter is a grid object returned by +initialize_grid+ in the controller.\n    def filter_and_order_state_as_hash(grid)\n      {\n        grid.name => {\n          'f'               => grid.status[:f],\n          'order'           => grid.status[:order],\n          'order_direction' => grid.status[:order_direction]\n        }\n      }\n    end\n\n    # display the state of the grid\n    def dump_state(grid)  #:nodoc:\n      debug(grid.get_state_as_parameter_value_pairs)\n    end\n\n    # secret but stupid weapon - takes an ActiveRecord and using reflection tries to build all the column clauses by itself.\n    # WiceGrid is not a scaffolding solution, I hate scaffolding and how certain idiots associate scaffolding with Rails,\n    # so I do not document this method to avoid contributing to this misunderstanding.\n    def scaffolded_grid(grid_obj, opts = {}) #:nodoc:\n      unless grid_obj.is_a? WiceGrid\n        raise WiceGridArgumentError.new('scaffolded_grid: the parameter must be a WiceGrid instance.')\n      end\n\n      # debug grid.klass.column_names\n      columns = grid_obj.klass.column_names\n      if opts[:reject_attributes].is_a? Proc\n        columns = columns.reject { |c| opts[:reject_attributes].call(c) }\n        opts.delete(:reject_attributes)\n      else\n        columns = columns.reject { |c| c =~ opts[:reject_attributes] }\n        opts.delete(:reject_attributes)\n      end\n      grid(grid_obj, opts) do |g|\n        columns.each do |column_name|\n          g.column name: column_name.humanize, attribute: column_name  do |ar|\n            ar.send(column_name)\n          end\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb",
    "content": "module Wice\n  module GridViewHelper\n    # View helper to render the list of saved queries and the form to create a new query.\n    # Parameters:\n    # * <tt>:extra_parameters</tt> -  a hash of additional parameters to use when creating a new query object.\n    # * <tt>:confirm</tt> -  A boolean value which turns on or off the JS confirm dialogs when deleting saved queries.\n    # Read section \"Adding Application Specific Logic to Saving/Restoring Queries\" in README for more details.\n    def saved_queries_panel(grid, opts = {})\n      unless grid.is_a? WiceGrid\n        raise WiceGridArgumentError.new('saved_queries_panel: the parameter must be a WiceGrid instance.')\n      end\n\n      options = { extra_parameters: {}, confirm: 1 }\n      opts.assert_valid_keys(options.keys)\n      options.merge!(opts)\n\n      grid_name = grid.name\n      input_field_name = \"#{grid_name}_saved_query_name\"\n      base_path_to_query_controller = create_serialized_query_url(grid_name: grid_name, confirm: options[:confirm])\n\n      parameters = grid.get_state_as_parameter_value_pairs\n\n      options[:extra_parameters].each do |k, v|\n        parameters << [CGI.unescape({ extra: { k => '' } }.to_query.sub(/=$/, '')), v.to_s]\n      end\n      parameters << ['authenticity_token', form_authenticity_token]\n      notification_messages_id = \"#{grid_name}_notification_messages\"\n      (%( <div class=\"wice-grid-query-panel well\"><h3>#{NlMessage['saved_query_panel_title']}</h3>) +\n        saved_queries_list(grid_name, grid.saved_query, options[:extra_parameters], options[:confirm]) +\n        %(<div id=\"#{notification_messages_id}\" ></div>) +\n        if block_given?\n          view, ids = yield\n          view\n        else\n          ''\n        end +\n\n        '<div class=\"form-horizontal\"><div class=\"wg-saved-query-input-controls input-append\">' + text_field_tag(input_field_name,  '',  onkeydown: '', class: 'wice-grid-save-query-field form-control ') +\n        button_tag(\n          NlMessage['save_query_button_label'],\n          class: 'wice-grid-save-query-button btn btn-primary',\n          'data-grid-name'                     => grid_name,\n          'data-base-path-to-query-controller' => base_path_to_query_controller,\n          'data-parameters'                    => parameters.to_json,\n          'data-ids'                           => ids.to_json\n        ) +\n        '</div></div></div>'\n        ).html_safe\n    end\n\n    def saved_queries_list(grid_name, saved_query = nil, extra_parameters = {}, confirm = 1)  #:nodoc:\n      link_title            = NlMessage['saved_query_link_title']\n      deletion_confirmation = confirm ? NlMessage['saved_query_deletion_confirmation'] : nil\n      deletion_link_title   = NlMessage['saved_query_deletion_link_title']\n\n      query_store_model = ::Wice.get_query_store_model\n      currently_loaded_query_id = saved_query ? saved_query.id : nil\n      # with = extra_parameters.nil? ? nil : \"'\"  + {extra: extra_parameters}.to_query + \"'\"\n\n      %(<ul id=\"#{grid_name}_query_list\" class=\"query-list\"> ) +\n        query_store_model.list(grid_name, controller).collect do |sq|\n          link_opts = {\n            class: 'wice-grid-query-load-link',\n            title: \"#{link_title} #{sq.name}\",\n            'data-query-id' => sq.id,\n            'data-grid-name' => grid_name\n          }\n          link_opts[:class] += ' current' if saved_query == sq\n          '<li>' + link_to(\n            content_tag(:i, '', class: 'fa-regular fa-trash-can delete-icon'),\n            delete_serialized_query_path(\n              grid_name: grid_name,\n              id:      sq.id,\n              current: currently_loaded_query_id,\n              extra:   extra_parameters,\n              confirm: confirm\n            ),\n            class: 'wice-grid-delete-query',\n            'data-wg-confirm' => deletion_confirmation,\n            'data-grid-name'  => grid_name,\n            title: \"#{deletion_link_title} #{sq.name}\"\n          ) + ' &nbsp; ' +\n            link_to(h(sq.name), '#', link_opts) +\n            if sq.respond_to? :description\n              desc = sq.description\n              desc.blank? ? '' : \" <i>#{desc}</i>\"\n            else\n              ''\n            end +\n            '</li>'\n        end.join('') + '</ul>'\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/helpers/wice_grid_view_helpers.rb",
    "content": "module Wice\n  module GridViewHelper\n    # View helper for rendering the grid.\n    #\n    # The first parameter is a grid object returned by +initialize_grid+ in the controller.\n    #\n    # The second parameter is a hash of options:\n    # * <tt>:html</tt> - a hash of HTML attributes to be included into the <tt>table</tt> tag.\n    # * <tt>:class</tt> - a shortcut for <tt>html: {class: 'css_class'}</tt>\n    # * <tt>:header_tr_html</tt> - a hash of HTML attributes to be included into the first <tt>tr</tt> tag\n    #   (or two first <tt>tr</tt>'s if the filter row is present).\n    # * <tt>:show_filters</tt> - defines when the filter is shown. Possible values are:\n    #   * <tt>:when_filtered</tt> - the filter is shown when the current table is the result of filtering\n    #   * <tt>:always</tt> or <tt>true</tt>  - show the filter always\n    #   * <tt>:no</tt> or <tt>false</tt>     - never show the filter\n    # * <tt>:upper_pagination_panel</tt> - a boolean value which defines whether there is an additional pagination\n    #   panel on top of the table. By default it is false.\n    # * <tt>:extra_request_parameters</tt> - a hash which will be added as additional HTTP request parameters to all\n    #   links generated by the grid, be it sorting links, filters, or the 'Reset Filter' icon.\n    #   Please note that WiceGrid respects and retains all request parameters already present in the URL which\n    #   formed the page, so there is no need to enumerate them in <tt>:extra_request_parameters</tt>. A typical\n    #   usage of <tt>:extra_request_parameters</tt> is a page with javascript tabs - changing the active tab\n    #   does not reload the page, but if one such tab contains a WiceGrid, it could be required that if the user\n    #   orders or filters the grid, the result page should have the tab with the grid activated. For this we\n    #   need to send an additional parameter specifying from which tab the request was generated.\n    # * <tt>:sorting_dependant_row_cycling</tt> - When set to true (by default it is false) the row styles +odd+\n    #   and +even+ will be changed only when the content of the cell belonging to the sorted column changes.\n    #   In other words, rows with identical values in the ordered column will have the same style (color).\n    # * <tt>:allow_showing_all_records</tt> - allow or prohibit the \"All Records\" mode.\n    # * <tt>:hide_reset_button</tt> - Do not show the default Filter Reset button.\n    #   Useful when using a custom reset button.\n    #   By default it is false.\n    # * <tt>:hide_submit_button</tt> - Do not show the default Filter Submit button.\n    #   Useful when using a custom submit button\n    #   By default it is false.\n    # * <tt>:hide_csv_button</tt> - a boolean value which defines whether the default Export To CSV button\n    #   should be rendered. Useful when using a custom Export To CSV button.\n    #   By default it is false.\n    #   Please read README for more insights.\n    #\n    # The block contains definitions of grid columns using the +column+ method sent to the object yielded into\n    # the block. In other words, the value returned by each of the blocks defines the content of a cell, the\n    # first block is called for cells of the first column for each row (each ActiveRecord instance), the\n    # second block is called for cells of the second column, and so on. See the example:\n    #\n    #   <%= grid(@accounts_grid, html: {class: 'grid_style', id: 'accounts_grid'}, header_tr_html: {class: 'grid_headers'}) do |g|\n    #\n    #     g.column name: 'Username', attribute: 'username' do |account|\n    #       account.username\n    #     end\n    #\n    #     g.column name: 'application_account.field.identity_id'._, attribute: 'firstname', model: Person do |account|\n    #       link_to(account.identity.name, identity_path(account.identity))\n    #     end\n    #\n    #     g.column do |account|\n    #       link_to('Edit', edit_account_path(account))\n    #     end\n    #\n    #   end -%>\n    #\n    #\n    # Defaults for parameters <tt>:show_filters</tt> and <tt>:upper_pagination_panel</tt>\n    # can be changed in <tt>lib/wice_grid_config.rb</tt> using constants <tt>Wice::Defaults::SHOW_FILTER</tt> and\n    # <tt>WiceGrid::Defaults::SHOW_UPPER_PAGINATION_PANEL</tt>, this is convenient if you want to set a project wide setting\n    # without having to repeat it for every grid instance.\n    #\n    # Pease read documentation about the +column+ method to achieve the enlightenment.\n\n    def grid(grid, opts = {}, &block)\n      raise WiceGridArgumentError.new('Missing block for the grid helper.' \\\n        ' For detached filters use first define_grid with the same API as grid, ' \\\n        'then grid_filter to add filters, and then render_grid to actually show the grid') if block.nil?\n      define_grid(grid, opts, &block)\n      render_grid(grid)\n    end\n\n    # Has the same parameters as <tt>grid</tt> but does not output the grid. After <tt>define_grid</tt>\n    # <tt>render_grid</tt> can be used to output the grid HTML code.\n    # Usually used with detached filters: first <tt>define_grid</tt>, then <tt>grid_filter</tt>s, and then\n    # <tt>render_grid</tt>\n    def define_grid(grid, opts = {}, &block)\n      # strip the method from HTML stuff\n      unless grid.class == WiceGrid\n        raise WiceGridArgumentError.new('The first argument for the grid helper must be an instance of the WiceGrid class')\n      end\n\n      options = {\n        allow_showing_all_records:     Defaults::ALLOW_SHOWING_ALL_RECORDS,\n        class:                         nil,\n        extra_request_parameters:      {},\n        header_tr_html:                {},\n        hide_reset_button:             false,\n        hide_submit_button:            false,\n        hide_csv_button:               false,\n        show_filters:                  Defaults::SHOW_FILTER,\n        sorting_dependant_row_cycling: false,\n        html:                          {},\n        upper_pagination_panel:        Defaults::SHOW_UPPER_PAGINATION_PANEL,\n        pagination_theme: ConfigurationProvider.value_for(:PAGINATION_THEME)\n      }\n\n      opts.assert_valid_keys(options.keys)\n\n      options.merge!(opts)\n\n      options[:show_filters] = :no     if options[:show_filters] == false\n      options[:show_filters] = :always if options[:show_filters] == true\n\n      rendering = GridRenderer.new(grid, self)\n\n      block.call(rendering) # calling block containing column() calls\n\n      reuse_last_column_for_filter_buttons =\n        Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS && rendering.last_column_for_html.capable_of_hosting_filter_related_icons?\n\n      if grid.output_csv?\n        grid_csv(grid, rendering)\n      else\n        # If blank_slate is defined we don't show any grid at all\n        if rendering.blank_slate_handler && grid.resultset.size == 0 && !grid.filtering_on?\n          generate_blank_slate(grid, rendering)\n        else\n          grid_html(grid, options, rendering, reuse_last_column_for_filter_buttons)\n        end\n      end\n\n      grid.view_helper_finished = true\n\n      grid.csv_tempfile ? grid.csv_tempfile.path : nil\n    end\n\n    # Used after <tt>define_grid</tt> to actually output the grid HTML code.\n    # Usually used with detached filters: first <tt>define_grid</tt>, then <tt>grid_filter</tt>s, and then\n    # <tt>render_grid</tt>\n    def render_grid(grid)\n      if grid.output_buffer\n        grid.output_buffer\n      elsif grid.csv_tempfile\n        grid.csv_tempfile.path\n      else\n        raise WiceGridException.new(\"Attempt to use 'render_grid' without 'define_grid' before.\")\n      end\n    end\n\n    def generate_blank_slate(grid, rendering) #:nodoc:\n      grid.output_buffer = GridOutputBuffer.new\n\n      grid.output_buffer << if rendering.blank_slate_handler.is_a?(Proc)\n        call_block(rendering.blank_slate_handler, nil)\n      elsif rendering.blank_slate_handler.is_a?(Hash)\n        render(rendering.blank_slate_handler)\n      else\n        rendering.blank_slate_handler\n      end\n\n      # rubocop:disable Style/SymbolProc\n      if rendering.find_one_for(:in_html) { |column| column.detach_with_id }\n        grid.output_buffer.return_empty_strings_for_nonexistent_filters = true\n      end\n      # rubocop:enable Style/SymbolProc\n    end\n\n    def call_block(block, ar, extra_argument = nil)  #:nodoc:\n      extra_argument ? block.call(ar, extra_argument) : block.call(ar)\n    end\n\n    def get_row_content(rendering, ar, sorting_dependant_row_cycling) #:nodoc:\n      cell_value_of_the_ordered_column = nil\n      row_content = ''\n      rendering.each_column(:in_html) do |column|\n        cell_block = column.cell_rendering_block\n\n        opts = column.html\n\n        opts = opts ? opts.clone : {}\n\n        column_block_output = if column.class == Columns.get_view_column_processor(:action)\n          cell_block.call(ar, params)\n        else\n          call_block(cell_block, ar)\n        end\n\n        if column_block_output.is_a?(Array)\n\n          unless column_block_output.size == 2\n            raise WiceGridArgumentError.new('When WiceGrid column block returns an array it is expected to contain 2 elements only - ' \\\n              'the first is the contents of the table cell and the second is a hash containing HTML attributes for the <td> tag.')\n          end\n\n          column_block_output, additional_opts = column_block_output\n\n          unless additional_opts.is_a?(Hash)\n            raise WiceGridArgumentError.new('When WiceGrid column block returns an array its second element is expected to be a ' \\\n                                            \"hash containing HTML attributes for the <td> tag. The returned value is #{additional_opts.inspect}. Read documentation.\")\n          end\n\n          additional_css_class = nil\n          if additional_opts.key?(:class)\n            additional_css_class = additional_opts[:class]\n            additional_opts.delete(:class)\n          elsif additional_opts.key?('class')\n            additional_css_class = additional_opts['class']\n            additional_opts.delete('class')\n          end\n          opts.merge!(additional_opts)\n          Wice::WgHash.add_or_append_class_value!(opts, additional_css_class) unless additional_css_class.blank?\n        end\n\n        if sorting_dependant_row_cycling && column.attribute && grid.ordered_by?(column)\n          cell_value_of_the_ordered_column = column_block_output\n        end\n        row_content += content_tag(:td, column_block_output, opts)\n      end\n      [row_content, cell_value_of_the_ordered_column]\n    end\n\n    # the longest method? :(\n    def grid_html(grid, options, rendering, reuse_last_column_for_filter_buttons) #:nodoc:\n      table_html_attrs, header_tr_html = options[:html], options[:header_tr_html]\n\n      Wice::WgHash.add_or_append_class_value!(table_html_attrs, 'wice-grid', true)\n\n      if Array === Defaults::DEFAULT_TABLE_CLASSES\n        Defaults::DEFAULT_TABLE_CLASSES.each do |default_class|\n          Wice::WgHash.add_or_append_class_value!(table_html_attrs, default_class, true)\n        end\n      end\n\n      if options[:class]\n        Wice::WgHash.add_or_append_class_value!(table_html_attrs, options[:class])\n        options.delete(:class)\n      end\n\n      cycle_class = nil\n      sorting_dependant_row_cycling = options[:sorting_dependant_row_cycling]\n\n      grid.output_buffer = GridOutputBuffer.new\n\n      # Ruby 1.9.x\n      grid.output_buffer.force_encoding('UTF-8') if grid.output_buffer.respond_to?(:force_encoding)\n\n      grid.output_buffer << %(<div class=\"wice-grid-container table-responsive\" data-grid-name=\"#{grid.name}\" id=\"#{grid.name}\"><div id=\"#{grid.name}_title\">)\n      grid.output_buffer << content_tag(:h3, grid.saved_query.name) if grid.saved_query\n      grid.output_buffer << \"</div><table #{public_tag_options(table_html_attrs, true)}>\"\n      grid.output_buffer << \"<caption>#{rendering.kaption}</caption>\" if rendering.kaption\n      grid.output_buffer << '<thead>'\n\n      no_filters_at_all = (options[:show_filters] == :no || rendering.no_filter_needed?)\n\n      if no_filters_at_all\n        no_rightmost_column = no_filter_row = no_filters_at_all\n      else\n        no_rightmost_column = no_filter_row = (options[:show_filters] == :no || rendering.no_filter_needed_in_main_table?) ? true : false\n      end\n\n      no_rightmost_column = true if reuse_last_column_for_filter_buttons\n\n      number_of_columns = rendering.number_of_columns(:in_html)\n      number_of_columns -= 1 if no_rightmost_column\n\n      number_of_columns_for_extra_rows = number_of_columns + 1\n\n      pagination_panel_content_html = nil\n      if options[:upper_pagination_panel]\n        grid.output_buffer << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do\n          pagination_panel_content_html =\n            pagination_panel_content(grid, options[:extra_request_parameters], options[:allow_showing_all_records], options[:pagination_theme])\n          pagination_panel_content_html\n        end\n      end\n\n      title_row_attrs = header_tr_html.clone\n      Wice::WgHash.add_or_append_class_value!(title_row_attrs, 'wice-grid-title-row', true)\n\n      grid.output_buffer << %(<tr #{public_tag_options(title_row_attrs, true)}>)\n\n      filter_row_id = grid.name + '_filter_row'\n\n      # first row of column labels with sorting links\n\n      filter_shown = if options[:show_filters] == :when_filtered\n        grid.filtering_on?\n      elsif options[:show_filters] == :always\n        true\n      end\n\n      rendering.each_column_aware_of_one_last_one(:in_html) do |column, last|\n        column_name = column.name\n\n        opts = column.html\n\n        opts = opts ? opts.clone : {}\n\n        Wice::WgHash.add_or_append_class_value!(opts, column.css_class)\n\n        if column.attribute && (column.ordering || column.sort_by)\n\n          column.add_css_class('active-filter') if grid.filtered_by?(column)\n\n          direction = 'asc'\n          link_style = nil\n          arrow_class = nil\n\n          if grid.ordered_by?(column)\n            column.add_css_class('sorted')\n            Wice::WgHash.add_or_append_class_value!(opts, 'sorted')\n            link_style = grid.order_direction\n\n            case grid.order_direction\n            when 'asc'\n              direction = 'desc'\n              arrow_class = 'down'\n            when 'desc'\n              direction = 'asc'\n              arrow_class = 'up'\n            end\n          end\n\n          col_link = link_to(\n            (column_name +\n              if arrow_class\n                ' ' + content_tag(:i, '', class: \"fa fa-arrow-#{arrow_class}\")\n              else\n                ''\n              end).html_safe,\n\n            rendering.column_link(\n              column,\n              direction,\n              params,\n              options[:extra_request_parameters]\n            ),\n            class: link_style)\n\n          grid.output_buffer << content_tag(:th, col_link, opts)\n\n        else\n          if reuse_last_column_for_filter_buttons && last\n            grid.output_buffer << content_tag(:th,\n                                              hide_show_icon(filter_row_id, grid, filter_shown, no_filter_row, options[:show_filters], rendering), opts\n            )\n          else\n            grid.output_buffer << content_tag(:th, column_name, opts)\n          end\n        end\n      end\n\n      grid.output_buffer << content_tag(:th,\n                                        hide_show_icon(filter_row_id, grid, filter_shown, no_filter_row, options[:show_filters], rendering)\n      ) unless no_rightmost_column\n\n      grid.output_buffer << '</tr>'\n      # rendering first row end\n\n      unless no_filters_at_all # there are filters, we don't know where, in the table or detached\n        if no_filter_row # they are all detached\n          rendering.each_column(:in_html) do |column|\n            if column.filter_shown?\n              filter_html_code = column.render_filter.html_safe\n              grid.output_buffer.add_filter(column.detach_with_id, filter_html_code)\n            end\n          end\n\n        else # some filters are present in the table\n\n          filter_row_attrs = header_tr_html.clone\n          Wice::WgHash.add_or_append_class_value!(filter_row_attrs, 'wg-filter-row', true)\n          filter_row_attrs['id'] = filter_row_id\n\n          grid.output_buffer << %(<tr #{public_tag_options(filter_row_attrs, true)} )\n          grid.output_buffer << 'style=\"display:none\"' unless filter_shown\n          grid.output_buffer << '>'\n\n          rendering.each_column_aware_of_one_last_one(:in_html) do |column, last|\n            opts = column.html ? column.html.clone : {}\n            Wice::WgHash.add_or_append_class_value!(opts, column.css_class)\n\n            if column.filter_shown?\n\n              filter_html_code = column.render_filter.html_safe\n              if column.detach_with_id\n                grid.output_buffer << content_tag(:th, '', opts)\n                grid.output_buffer.add_filter(column.detach_with_id, filter_html_code)\n              else\n                grid.output_buffer << content_tag(:th, filter_html_code, opts)\n              end\n            else\n              if reuse_last_column_for_filter_buttons && last\n                grid.output_buffer << content_tag(:th,\n                                                  reset_submit_buttons(options, grid, rendering),\n                                                  Wice::WgHash.add_or_append_class_value!(opts, 'filter_icons')\n                )\n              else\n                grid.output_buffer << content_tag(:th, '', opts)\n              end\n            end\n          end\n          unless no_rightmost_column\n            grid.output_buffer << content_tag(:th, reset_submit_buttons(options, grid, rendering), class: 'filter_icons')\n          end\n          grid.output_buffer << '</tr>'\n        end\n      end\n\n      grid.output_buffer << '</thead><tfoot>'\n      grid.output_buffer << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do\n        if pagination_panel_content_html\n          pagination_panel_content_html\n        else\n          pagination_panel_content_html =\n            pagination_panel_content(grid, options[:extra_request_parameters], options[:allow_showing_all_records], options[:pagination_theme])\n          pagination_panel_content_html\n        end\n      end\n\n      grid.output_buffer << '</tfoot><tbody>'\n\n      # rendering  rows\n      cell_value_of_the_ordered_column = nil\n      previous_cell_value_of_the_ordered_column = nil\n\n      grid.each do |ar| # rows\n        before_row_output = if rendering.before_row_handler\n          call_block(rendering.before_row_handler, ar, number_of_columns_for_extra_rows)\n        end\n\n        after_row_output = if rendering.after_row_handler\n          call_block(rendering.after_row_handler, ar, number_of_columns_for_extra_rows)\n        end\n\n        replace_row_output = if rendering.replace_row_handler\n          call_block(rendering.replace_row_handler, ar, number_of_columns_for_extra_rows)\n        end\n\n        row_content = if replace_row_output\n          no_rightmost_column = true\n          replace_row_output\n        else\n          row_content, tmp_cell_value_of_the_ordered_column = get_row_content(rendering, ar, sorting_dependant_row_cycling)\n          cell_value_of_the_ordered_column = tmp_cell_value_of_the_ordered_column if tmp_cell_value_of_the_ordered_column\n          row_content\n        end\n\n        row_attributes = rendering.get_row_attributes(ar)\n\n        if sorting_dependant_row_cycling\n          cycle_class = cycle('odd', 'even', name: grid.name) if cell_value_of_the_ordered_column != previous_cell_value_of_the_ordered_column\n          previous_cell_value_of_the_ordered_column = cell_value_of_the_ordered_column\n        else\n          cycle_class = cycle('odd', 'even', name: grid.name)\n        end\n\n        Wice::WgHash.add_or_append_class_value!(row_attributes, cycle_class)\n\n        grid.output_buffer << before_row_output if before_row_output\n        grid.output_buffer << \"<tr #{public_tag_options(row_attributes)}>#{row_content}\"\n        grid.output_buffer << content_tag(:td, '') unless no_rightmost_column\n        grid.output_buffer << '</tr>'\n        grid.output_buffer << after_row_output if after_row_output\n      end\n\n      last_row_output = if rendering.last_row_handler\n        call_block(rendering.last_row_handler, number_of_columns_for_extra_rows)\n      end\n\n      grid.output_buffer << last_row_output if last_row_output\n\n      grid.output_buffer << '</tbody></table>'\n\n      base_link_for_filter, base_link_for_show_all_records = rendering.base_link_for_filter(controller, options[:extra_request_parameters])\n\n      link_for_export = rendering.link_for_export(controller, 'csv', options[:extra_request_parameters])\n\n      parameter_name_for_query_loading = { grid.name => { q: '' } }.to_query\n      parameter_name_for_focus = { grid.name => { foc: '' } }.to_query\n\n      processor_initializer_arguments = [\n        base_link_for_filter,\n        base_link_for_show_all_records,\n        link_for_export,\n        parameter_name_for_query_loading,\n        parameter_name_for_focus,\n        Rails.env\n      ]\n\n      filter_declarations = if no_filters_at_all\n        []\n      else\n        rendering.select_for(:in_html) do |vc|\n          vc.attribute && vc.filter\n        end.collect(&:yield_declaration)\n      end\n\n      wg_data = {\n        'data-processor-initializer-arguments' => processor_initializer_arguments.to_json,\n        'data-filter-declarations'             => filter_declarations.to_json,\n        :class                                 => 'wg-data'\n      }\n\n      wg_data['data-foc'] = grid.status['foc'] if grid.status['foc']\n\n      grid.output_buffer << content_tag(:div, '', wg_data)\n\n      grid.output_buffer << '</div>'\n\n      if Rails.env.development?\n        grid.output_buffer << javascript_tag(%/ document.ready = function(){ \\n/ +\n          %$ if (typeof(WiceGridProcessor) == \"undefined\"){\\n$ +\n          %$   alert(\"wice_grid.js not loaded, WiceGrid cannot proceed!\\\\n\" +\\n$ +\n          %(     \"Make sure that you have loaded wice_grid.js.\\\\n\" + ) +\n          %(     \"Add line //= require wice_grid.js \" + ) +\n          %$     \"to app/javascript/application.js\")\\n$ +\n          %( } ) +\n          %$ } $)\n      end\n\n      grid.output_buffer\n    end\n\n    def hide_show_icon(_filter_row_id, _grid, filter_shown, no_filter_row, show_filters, _rendering)  #:nodoc:\n      no_filter_opening_closing_icon = (show_filters == :always) || no_filter_row\n\n      styles = ['display: block;', 'display: none;']\n      styles.reverse! unless filter_shown\n\n      if no_filter_opening_closing_icon\n        ''\n      else\n\n        content_tag(:div, content_tag(:i, '', class: 'fa-regular fa-eye-slash'),\n                    title: NlMessage['hide_filter_tooltip'],\n                    style: styles[0],\n                    class: 'clickable  wg-hide-filter'\n        ) +\n\n          content_tag(:div, content_tag(:i, '', class: 'fa-regular fa-eye'),\n                      title: NlMessage['show_filter_tooltip'],\n                      style: styles[1],\n                      class: 'clickable  wg-show-filter'\n          )\n\n      end\n    end\n\n    def reset_submit_buttons(options, grid, _rendering)  #:nodoc:\n      if options[:hide_submit_button]\n        ''\n      else\n        content_tag(:div, content_tag(:i, '', class: 'fa fa-filter'),\n                    title: NlMessage['filter_tooltip'],\n                    id:    grid.name + '_submit_grid_icon',\n                    class: 'submit clickable'\n        )\n      end.html_safe + ' ' +\n        if options[:hide_reset_button]\n          ''\n        else\n\n          content_tag(:div, content_tag(:i, '', class: 'fa fa-table'),\n                      title: NlMessage['reset_filter_tooltip'],\n                      id:    grid.name + '_reset_grid_icon',\n                      class: 'reset clickable'\n          )\n        end.html_safe\n    end\n\n    # Renders a detached filter. The parameters are:\n    # * +grid+ the WiceGrid object\n    # * +filter_key+ an identifier of the filter specified in the column declaration by parameter +:detach_with_id+\n    def grid_filter(grid, filter_key)\n      unless grid.is_a? WiceGrid\n        raise WiceGridArgumentError.new('grid_filter: the parameter must be a WiceGrid instance.')\n      end\n      if grid.output_buffer.nil?\n        raise WiceGridArgumentError.new(\"grid_filter: You have attempted to run 'grid_filter' before 'grid'. Read about detached filters in the documentation.\")\n      end\n      if grid.output_buffer == true\n        raise WiceGridArgumentError.new('grid_filter: You have defined no detached filters, or you try use detached filters with' \\\n          ':show_filters => :no (set :show_filters to :always in this case). Read about detached filters in the documentation.')\n      end\n\n      content_tag :span,\n                  grid.output_buffer.filter_for(filter_key),\n                  class: \"wg-detached-filter #{grid.name}_detached_filter\",\n                  'data-grid-name' => grid.name\n    end\n\n    def grid_csv(grid, rendering) #:nodoc:\n      spreadsheet = ::Wice::Spreadsheet.new(grid.name, grid.csv_field_separator, grid.csv_encoding)\n\n      # columns\n      spreadsheet << rendering.column_labels(:in_csv)\n\n      # rendering  rows\n      grid.each do |ar| # rows\n        row = []\n\n        rendering.each_column(:in_csv) do |column|\n          cell_block = column.cell_rendering_block\n\n          column_block_output = call_block(cell_block, ar)\n\n          if column_block_output.is_a?(Array)\n            column_block_output, _additional_opts = column_block_output\n          end\n\n          row << column_block_output\n        end\n        spreadsheet << row\n      end\n      grid.csv_tempfile = spreadsheet.tempfile\n    end\n\n    def pagination_panel_content(grid, extra_request_parameters, allow_showing_all_records, pagination_theme) #:nodoc:\n      extra_request_parameters = extra_request_parameters.clone\n      if grid.saved_query\n        extra_request_parameters[\"#{grid.name}[q]\"] = grid.saved_query.id\n      end\n\n      html = pagination_info(grid, allow_showing_all_records)\n\n      paginate(grid.resultset,\n               theme:        pagination_theme,\n               param_name:   \"#{grid.name}[page]\",\n               params:       extra_request_parameters,\n               inner_window: 4,\n               outer_window: 2\n      ) +\n        (' <div class=\"pagination_status\">' + html + '</div>').html_safe\n    end\n\n    def show_all_link(collection_total_entries, parameters, _grid_name) #:nodoc:\n      message = NlMessage['all_queries_warning']\n      confirmation = collection_total_entries > Defaults::START_SHOWING_WARNING_FROM ? message : nil\n\n      html = content_tag(:a, NlMessage['show_all_records_label'],\n                         href: '#',\n                         title: NlMessage['show_all_records_tooltip'],\n                         class: 'wg-show-all-link',\n                         'data-grid-state'     => parameters.to_json,\n                         'data-confim-message' => confirmation\n      )\n\n      [html, '']\n    end\n\n    def back_to_pagination_link(parameters, grid_name) #:nodoc:\n      pagination_override_parameter_name = \"#{grid_name}[pp]\"\n      parameters = parameters.reject { |k, _v| k == pagination_override_parameter_name }\n\n      content_tag(:a, NlMessage['switch_back_to_paginated_mode_label'],\n                  href: '#',\n                  title: NlMessage['switch_back_to_paginated_mode_tooltip'],\n                  class: 'wg-back-to-pagination-link',\n                  'data-grid-state' => parameters.to_json\n      )\n    end\n\n    def pagination_info(grid, allow_showing_all_records)  #:nodoc:\n      collection = grid.resultset\n\n      if grid.all_record_mode?\n\n        collection_total_entries = collection.length\n\n        first = 1\n        last = collection.size\n\n        total_pages = 1\n\n        class << collection\n          def current_page\n            1\n          end\n\n          def total_pages\n            1\n          end\n        end\n\n      else\n        collection_total_entries = collection.total_count\n\n        first = collection.offset_value + 1\n        last  = collection.last_page? ? collection.total_count : collection.offset_value + collection.limit_value\n\n        total_pages = collection.total_pages\n      end\n\n      parameters = grid.get_state_as_parameter_value_pairs\n\n      if total_pages < 2 && collection.length == 0\n        '0'\n      else\n        parameters << [\"#{grid.name}[pp]\", collection_total_entries]\n\n        show_all_records_link = allow_showing_all_records && collection_total_entries > collection.length\n\n        if show_all_records_link && limit = Wice::ConfigurationProvider.value_for(:SHOW_ALL_ALLOWED_UP_TO, strict: false)\n          show_all_records_link = limit > collection_total_entries\n        end\n\n        \"#{first}-#{last} / #{collection_total_entries} \" +\n          if show_all_records_link\n            res, _js = show_all_link(collection_total_entries, parameters, grid.name)\n            res\n          else\n            ''\n          end\n      end +\n        if grid.all_record_mode?\n          back_to_pagination_link(parameters, grid.name)\n        else\n          ''\n        end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/kaminari_monkey_patching.rb",
    "content": "# Ugly monkey-patching Kaminari (https://github.com/amatsuda/kaminari/pull/267)\nmodule Kaminari #:nodoc:\n  module Helpers #:nodoc:\n    class Tag #:nodoc:\n      def page_url_for(page) #:nodoc:\n        current_page_params_as_query_string = @param_name.to_s + '=' + (page <= 1 ? nil : page).to_s\n        current_page_params_as_hash = Rack::Utils.parse_nested_query(current_page_params_as_query_string)\n        @template.url_for Wice::WgHash.rec_merge(@params, current_page_params_as_hash).symbolize_keys\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/table_column_matrix.rb",
    "content": "module Wice\n\n  # a matrix for all declared columns\n  class TableColumnMatrix < Hash #:nodoc:\n\n    # returns the main ActiveRecord model class\n    attr_reader :default_model_class\n    # a structure to hold generates Arels for all column filters\n    attr_reader :generated_conditions\n\n    # init a matrix of all columns\n    def initialize  #:nodoc:\n      super\n      @generated_conditions = []\n      @by_table_names = HashWithIndifferentAccess.new\n    end\n\n    # add an Arel for a column\n    def add_condition(column, conditions)\n      @generated_conditions << [column, conditions] unless conditions.blank?\n    end\n\n    # returns a list of all Arels\n    def conditions\n      @generated_conditions.collect { |_, cond| cond }\n    end\n\n    # sets the main ActiveRecord model class\n    def default_model_class=(model)  #:nodoc:\n      init_columns_of_table(model) unless key?(model)\n      @default_model_class = model\n    end\n\n    # returns Arels for one model\n    alias_method :get, :[]\n    def [](model)  #:nodoc:\n      init_columns_of_table(model) unless key?(model)\n      get(model)\n    end\n\n    def get_column_by_model_class_and_column_name(model_class, column_name)  #:nodoc:\n      self[model_class][column_name]\n    end\n\n    def get_column_in_default_model_class_by_column_name(column_name)  #:nodoc:\n      if @default_model_class.nil?\n        raise WiceGridException.new(\"Cannot search for this column(#{column_name}) in a default model(#{@default_model_class}) as the default model is not set\")\n      end\n\n      self[@default_model_class][column_name]\n    end\n\n    def init_columns_of_table(model) #:nodoc:\n      self[model] =\n          HashWithIndifferentAccess.new(model.columns.map(&:dup).index_by(&:name))\n      @by_table_names[model.table_name] = self[model]\n      self[model].each_value { |c| c.model = model }\n    end\n    alias_method :<<, :init_columns_of_table\n  end\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_controller.rb",
    "content": "module Wice\n  module Controller #:nodoc:\n    def self.included(base) #:nodoc:\n      base.extend(ClassMethods)\n    end\n\n    module ClassMethods #:nodoc:\n      # Used to add query processing action methods into a controller.\n      # Read section \"Saving Queries How-To\" in README for more details.\n      def save_wice_grid_queries\n        include Wice::SerializedQueriesControllerMixin\n      end\n    end\n\n    protected\n\n    attr_accessor :wice_grid_instances #:nodoc:\n\n    # Creates a grid object to be used in the view. This is the <i>main</i> model, and the underlying table is the default table -\n    # if in other parameters a column name is mentioned without the name of the table, this table is implied.\n    # Just like in an ordinary ActiveRecord <tt>find</tt> you can use <tt>:joins</tt>, <tt>:include</tt>, and <tt>:conditions</tt>.\n    #\n    # The first parameter is an ActiveRecord class name or an  ActiveRecord::Relation instance. The generated ActiveRecord call will use it as the\n    # receiver of the <tt>paginate</tt> method: <tt>klass.paginate(...)</tt>\n    #\n    # The second parameters is a hash of parameters:\n    # * <tt>:joins</tt> - ActiveRecord <tt>:joins</tt> option.\n    # * <tt>:include</tt> - ActiveRecord <tt>:include</tt> option.\n    #   The value of `:include` can be an array of association names `include: [:category, :users, :status]`,\n    #   If you need to join tables to joined tables, use hashes: `include: [:category, {users: :group}, :status]`\n    # * <tt>:conditions</tt> - ActiveRecord <tt>:conditions</tt> option.\n    # * <tt>:per_page</tt> - Number of rows per one page. The default is 10.\n    # * <tt>:page</tt> - The page to show when rendering the grid for the first time. The default is one, naturally.\n    # * <tt>:order</tt> - Name of the column to sort by. Can be of a short form (just the name of the column) if this\n    #   is a column of the main table (the table of the main ActiveRecord model, the first parameter of <tt>initialize_grid</tt>),\n    #   or a fully qualified name with the name of the table.\n    # * <tt>:order_direction</tt> - <tt>:asc</tt> for ascending or <tt>:desc</tt> for descending. The default is <tt>:asc</tt>.\n    # * <tt>:name</tt> - name of the grid. Only needed if there is a second grid on a page. The name serves as the base name for\n    #   HTTP parametes, DOM IDs, etc. The shorter the name, the shorter the GET request is. The name can only contain alphanumeruc characters.\n    # * <tt>:enable_export_to_csv</tt> - <Enable export of the table to CSV. Read the How-To to learn what else is needed to enable CSV export.\n    # * <tt>:csv_file_name</tt> - Name of the exported CSV file. If the parameter is missing, the name of the grid will be used instead.\n    # * <tt>:csv_field_separator</tt> - field separator for CSV files. The default is defined in +CSV_FIELD_SEPARATOR+ in the config file.\n    # * <tt>:custom_order</tt> - used for overriding the ORDER BY clause with custom sql code (for example, using an SQL\n    #   function). A Hash with keys of the fully qualified names of database columns and with values that specify the\n    #   ordering to be used, without specifying the direction (no ASC or DESC). The values of this Hash can any String\n    #   of SQL that can be passed to the ActiveRecord order clause, an instance of Arel::Attributes::Attribute, or a\n    #   Proc that receives the fully qualified column name and returns a String or Arel::Attributes::Attribute. See\n    #   section 'Custom Ordering' in the README.\n    # * <tt>:saved_query</tt> - id of the saved query or the query object itself to load initially.\n    #   Read section \"Saving Queries How-To\" in README for more details.\n    # * <tt>:after</tt> - defined a name of a controller method which would be called by the grid after all user input has been processed,\n    #   with a single parameter which is a Proc object. Once called, the object returns a list of all records of the current selection\n    #   throughout all pages. See section \"Integration With The Application\" in the README.\n    # * <tt>:select</tt> - ActiveRecord <tt>:select</tt> option. Please do not forget that <tt>:select</tt> is ignored\n    #   when <tt>:include</tt> is present. It is unlikely you would need <tt>:select</tt> with WiceGrid, but if you do,\n    #   use it with care :)\n    # * <tt>:group</tt> - ActiveRecord <tt>:group</tt> option. Use it if you are sure you know what you are doing :)\n    # * <tt>:with_paginated_resultset</tt> - a callback executed from within the plugin to process records of the current page.\n    #   Can be a lambda object or a controller method name (symbol). The argument to the callback is the array of the records.\n    # * <tt>:with_resultset</tt> - a callback executed from within the plugin to process all records browsable through\n    #   all pages with the current filters. Can be a lambda object or a controller method name (symbol). The argument to\n    #   the callback is a lambda object which returns the list of records when called. See the README for the explanation.\n    #\n    # Defaults for parameters <tt>:per_page</tt>, <tt>:order_direction</tt>, and <tt>:name</tt>\n    # can be changed in <tt>lib/wice_grid_config.rb</tt>, this is convenient if you want to set a project wide setting\n    # without having to repeat it for every grid instance.\n\n    def initialize_grid(klass, opts = {})\n      wg = WiceGrid.new(klass, self, opts)\n      self.wice_grid_instances = [] if self.wice_grid_instances.nil?\n      self.wice_grid_instances << wg\n      wg\n    end\n\n    # +export_grid_if_requested+ is a controller method which should be called at the end of each action containing grids with enabled\n    # CSV export.\n    #\n    # CSV export will only work if each WiceGrid helper is placed in a partial of its own (requiring it from the master template\n    # of course for the usual flow).\n    # +export_grid_if_requested+ intercepts CSV export requests and evaluates the corresponding partial with the required  grid helper.\n    # By default for each grid +export_grid_if_requested+ will look for a partial\n    # whose name follows the following pattern:\n    #\n    #     _GRID_NAME_grid.html.erb\n    #\n    # For example, a grid named +orders+ is supposed to be found in a template called <tt>_orders_grid.html.erb</tt>,\n    # Remember that the default name of grids is +grid+.\n    #\n    # This convention can be easily overridden by supplying a hash parameter to +export_grid_if_requested+ where each key is the name of\n    # a grid, and the value is the name of the template (like it is specified for +render+, i.e. without '_' and extensions):\n    #\n    #   export_grid_if_requested('grid' => 'orders', 'grid2' => 'invoices')\n    #\n    # If the request is not a CSV export request, the method does nothing and returns +false+, if it is a CSV export request,\n    # the method returns +true+.\n    #\n    # If the action has no explicit +render+ call, it's OK to just place +export_grid_if_requested+ as the last line of the action. Otherwise,\n    # to avoid double rendering, use the return value of the method to conditionally call your +render+ :\n    #\n    #    export_grid_if_requested || render(action: 'index')\n    #\n    # It's also possible to supply a block which will be called if no CSV export is requested:\n    #\n    #    export_grid_if_requested do\n    #     render(action: 'index')\n    #    end\n\n    def export_grid_if_requested(opts = {})\n      grid = self.wice_grid_instances.detect(&:output_csv?)\n\n      if grid\n        template_name = opts[grid.name] || opts[grid.name.intern]\n        template_name ||= grid.name + '_grid'\n        temp_filename = render_to_string(partial: template_name)\n        temp_filename = temp_filename.strip\n        filename = (grid.csv_file_name || grid.name) + '.csv'\n        grid.csv_tempfile.close\n        send_file temp_filename, filename: filename, type: \"text/csv; charset=#{get_output_encoding grid.csv_encoding}\"\n        grid.csv_tempfile = nil\n        true\n      else\n        yield if block_given?\n        false\n      end\n    end\n\n    # +wice_grid_custom_filter_params+ generates HTTP parameters understood by WiceGrid custom filters.\n    # Combined with Rails route helpers it allows to generate links leading to\n    # grids with pre-selected custom filters.\n    #\n    # Parameters:\n    # * <tt>:grid_name</tt> - The name of the grid. Just like parameter <tt>:name</tt> of\n    #   <tt>initialize_grid</tt>, the parameter is optional, and when absent, the name\n    #   <tt>'grid'</tt> is assumed\n    # * <tt>:attribute</tt> and <tt>:model</tt> - should be the same as <tt>:attribute</tt> and\n    #   <tt>:model</tt> of the column declaration with the target custom filter.\n    # * <tt>:value</tt> - the value of the column filter.\n    def wice_grid_custom_filter_params(opts = {})\n      options = {\n        grid_name: 'grid',\n        attribute: nil,\n        model:     nil,\n        value:     nil\n      }\n      options.merge!(opts)\n\n      [:attribute, :value].each do |key|\n        raise ::Wice::WiceGridArgumentError.new(\"wice_grid_custom_filter_params: :#{key} is a mandatory argument\") unless options[key]\n      end\n\n      attr_name = if options[:model]\n        unless options[:model].nil?\n          options[:model] = options[:model].constantize if options[:model].is_a? String\n          raise Wice::WiceGridArgumentError.new('Option :model can be either a class or a string instance') unless options[:model].is_a? Class\n        end\n        options[:model].table_name + '.' + options[:attribute]\n      else\n        options[:attribute]\n      end\n\n      { \"#{options[:grid_name]}[f][#{attr_name}][]\" => options[:value] }\n    end\n\n    private\n\n    def get_output_encoding(csv_encoding)\n      if csv_encoding.blank?\n        'utf-8'\n      else\n        csv_encoding.split(':').first\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_core_ext.rb",
    "content": "module Wice\n  module WgHash #:nodoc:\n    class << self #:nodoc:\n      # if there's a hash of hashes, the original structure and the\n      # returned structure should not contain any shared deep hashes\n      def deep_clone(hash)  #:nodoc:\n        cloned = hash.clone\n        cloned.keys.each do |k|\n          if cloned[k].is_a?(Hash)\n            cloned[k] = Wice::WgHash.deep_clone cloned[k]\n          end\n        end\n        cloned\n      end\n\n      # Used to modify options submitted to view helpers. If there is no :klass option,\n      # it will be added, if there is, the css class name will be appended to the existing\n      # class name(s)\n      def add_or_append_class_value!(hash, klass_value, prepend = false) #:nodoc:\n        if hash.key?('class')\n          hash[:class] = hash['class']\n          hash.delete('class')\n        end\n\n        hash[:class] = if hash.key?(:class)\n          if prepend\n            \"#{klass_value} #{hash[:class]}\"\n          else\n            \"#{hash[:class]} #{klass_value}\"\n          end\n        else\n          klass_value\n        end\n\n        hash\n      end\n\n      # Used mostly for submitting options to view helpers, that is, like this:\n      #   content_tag(:th, col_link, Wice::WgHash.make_hash(:class, css_class))\n      # In some it is important that if the value is empty, no option\n      # is submitted at all. Thus, there's a check for an empty value\n      def make_hash(key, value) #:nodoc:\n        value.blank? ? {} : { key => value }\n      end\n\n      # A deep merge of two hashes.\n      # That is, if both hashes have the same key and the values are hashes, these two hashes should also be merged.\n      # Used for merging two sets of params.\n      def rec_merge(hash, other)  #:nodoc:\n        res = hash.clone\n        other.each do |key, other_value|\n          value = res[key]\n          if value.is_a?(Hash) && other_value.is_a?(Hash)\n            res[key] = rec_merge value, other_value\n          else\n            res[key] = other_value\n          end\n        end\n        res\n      end\n\n      # Used to transform a traditional params hash\n      # into an array of two element arrays where element zero is a parameter name as it appears in HTTP requests,\n      # and the first element is the value:\n      # { a: { b: 3, c: 4, d: { e: 5 }} }.parameter_names_and_values #=>  [[\"a[d][e]\", 5], [\"a[b]\", 3], [\"a[c]\", 4]]\n      # The parameter is an optional array of parameter names to prepend:\n      # { a: { b: 3, c: 4, d: { e: 5 }} }.parameter_names_and_values(['foo', 'baz']) #=>\n      #                         [[\"foo[baz][a][d][e]\", 5], [\"foo[baz][a][b]\", 3], [\"foo[baz][a][c]\", 4]]\n      def parameter_names_and_values(hash, initial = []) #:nodoc:\n        res = []\n        recursively_gather_finite_non_hash_values_with_key_path(hash, res, [])\n        res.collect do |parameter_struct|\n          parameter_struct[0] = initial + parameter_struct[0]\n          [Wice::WgArray.to_parameter_name(parameter_struct[0]), parameter_struct[1]]\n        end\n      end\n\n      protected\n\n      def recursively_gather_finite_non_hash_values_with_key_path(hash, res, stack = []) #:nodoc:\n        hash.each do |key, value|\n          if value.is_a?(Hash)\n            recursively_gather_finite_non_hash_values_with_key_path(value, res, stack + [key])\n          else\n            res << [stack + [key], value]\n          end\n        end\n      end\n    end\n  end\n\n  module WgEnumerable #:nodoc:\n    # Used to check the validity of :custom_filter parameter of column\n    def self.all_items_are_of_class(enumerable, klass)  #:nodoc:\n      return false if enumerable.empty?\n      enumerable.inject(true) { |memo, o| (o.is_a? klass) && memo }\n    end\n  end\n\n  module WgArray #:nodoc:\n    # Only used by Hash#parameter_names_and_values\n    # Transforms ['foo', 'bar', 'baz'] to 'foo[bar][baz]'\n    def self.to_parameter_name(array) #:nodoc:\n      array[0].to_s + (array[1..-1] || []).collect { |k| '[' + k.to_s + ']' }.join('')\n    end\n  end\nend\n\n# tag_options is a Rails views private method that takes a hash op options for\n# an HTM hash and produces a string ready to be added to the tag.\n# Here we are changing its visibility in order to be able to use it.\nmodule ActionView #:nodoc:\n  module Helpers #:nodoc:\n    module TagHelper #:nodoc:\n      def public_tag_options(options, escape = true) #:nodoc:\n        if respond_to?(:tag_options, true)\n          tag_options(options, escape)\n        else\n          tag_builder.tag_options(options, escape)\n        end\n      end\n    end\n  end\nend\n\nmodule WGObjectExtensions #:nodoc:\n  # takes a list of messages, sends message 1 to self, then message 2 is sent to the result of the first message, ans so on\n  # returns nil as soon as the current receiver does not respond to such a message\n  def deep_send(*messages)  #:nodoc:\n    obj = self\n    messages.each do |message|\n      if obj.respond_to? message\n        obj = obj.send(message)\n      else\n        return nil\n      end\n      # return obj if obj.nil?\n    end\n    obj\n  end\nend\n\nclass Object #:nodoc:\n  include WGObjectExtensions\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_misc.rb",
    "content": "module Wice\n  class << self\n\n    # a flag storing whether the saved query class is a valid storage for saved queries\n    @@model_validated = false\n\n    def assoc_list_to_hash(assocs) #:nodoc:\n      head = assocs[0]\n      tail = assocs[1..-1]\n\n      if tail.blank?\n        head\n      elsif tail.size == 1\n        {head => tail[0]}\n      else\n        {head => assoc_list_to_hash(tail)}\n      end\n    end\n\n    def build_includes(existing_includes, new_assocs) #:nodoc:\n      new_includes = if new_assocs.blank?\n        existing_includes\n      else\n        existing_includes = if existing_includes.is_a?(Symbol)\n          [existing_includes]\n        elsif existing_includes.nil?\n          []\n        else\n          existing_includes\n        end\n\n        assocs_as_hash = assoc_list_to_hash(new_assocs)\n        build_includes_int(existing_includes, assocs_as_hash)\n      end\n\n      if new_includes.is_a?(Array) && new_includes.size == 1\n        new_includes[0]\n      else\n        new_includes\n      end\n    end\n\n    def build_includes_int(includes, assocs) #:nodoc:\n      if includes.is_a?(Array)\n        build_includes_includes_is_array(includes, assocs)\n      elsif includes.is_a?(Hash)\n        build_includes_includes_is_hash(includes, assocs)\n      end\n    end\n\n    # TODO: refactor\n    def build_includes_includes_is_hash(includes, assocs) #:nodoc:\n\n      includes_key   = includes.keys[0]\n      includes_value = includes.values[0]\n\n      if assocs.is_a?(Hash)\n        assocs_key   = assocs.keys[0]\n        assocs_value = assocs.values[0]\n\n        if includes_value.is_a?(Symbol) && includes_value == assocs_key\n          {includes_key => assocs}\n        elsif includes_value.is_a?(Hash)\n          if includes_value.keys[0] == assocs_key\n            if includes_value.values[0] == assocs_value\n              {includes_key => assocs}\n            else\n              {includes_key => [includes_value.values[0], assocs_value]}\n            end\n          end\n        end\n      elsif includes_value == assocs\n        {includes_key => assocs}\n      else\n        includes\n      end\n    end\n\n    def build_includes_includes_is_array(includes, assocs) #:nodoc:\n\n      hash_keys = Hash[\n        *(\n          includes\n          .each_with_index\n          .to_a\n          .select{ |e, _idx| e.is_a?(Hash)}\n          .map{ |hash, idx| [ hash.keys[0], idx ] }\n          .flatten\n        )\n      ]\n\n      key_to_search, finished = if assocs.is_a?(Hash)\n        [assocs.keys[0], false]\n      else\n        [assocs, true]\n      end\n\n      if idx = includes.index(key_to_search)\n        if finished #  [:a, :b, :c]  vs  :a\n          includes\n        else        #  [:a, :b, :c]  vs  {:a => x}\n          includes[idx] = assocs\n          includes\n        end\n\n      elsif hash_keys.key?(key_to_search)\n        if finished # [{a: :x}, :b, :c, :d, :e] vs :a\n          includes\n        else\n          hash_idx = hash_keys[key_to_search]\n          assocs_value = assocs[key_to_search]\n          includes[hash_idx] = build_includes_int(includes[hash_idx], assocs_value)\n          includes\n        end\n\n      else  # [:a, :b, :c]  vs  :x\n            # [:a, :b, :c]  vs  {:x => y}\n        includes + [assocs]\n      end\n\n    end\n\n    # checks whether the class is a valid storage for saved queries\n    def validate_query_model(query_store_model)  #:nodoc:\n      unless query_store_model.respond_to?(:list)\n        raise ::Wice::WiceGridArgumentError.new(\"Model for saving queries #{query_store_model.class.name} is invalid - there is no class method #list defined\")\n      end\n      arit = query_store_model.method(:list).arity\n      unless arit == 2\n        raise ::Wice::WiceGridArgumentError.new(\"Method list in the model for saving queries #{query_store_model.class.name} has wrong arity - it should be 2 instead of #{arit}\")\n      end\n      @@model_validated = true\n    end\n\n    # Retrieves and constantizes (if needed ) the Query Store model\n    def get_query_store_model #:nodoc:\n      query_store_model = Wice::ConfigurationProvider.value_for(:QUERY_STORE_MODEL)\n      query_store_model = query_store_model.constantize if query_store_model.is_a? String\n      raise ::Wice::WiceGridArgumentError.new('Defaults::QUERY_STORE_MODEL must be an ActiveRecord class or a string which can be constantized to an ActiveRecord class') unless query_store_model.is_a? Class\n      validate_query_model(query_store_model) unless @@model_validated\n      query_store_model\n    end\n\n    def get_string_matching_operators(model)   #:nodoc:\n      if defined?(Wice::Defaults::STRING_MATCHING_OPERATORS) && (ops = Wice::ConfigurationProvider.value_for(:STRING_MATCHING_OPERATORS)) &&\n          ops.is_a?(Hash) && (str_matching_operator = ops[model.connection.class.to_s])\n        str_matching_operator\n      else\n        Wice::ConfigurationProvider.value_for(:STRING_MATCHING_OPERATOR)\n      end\n    end\n\n    def deprecated_call(old_name, new_name, opts) #:nodoc:\n      if opts[old_name] && !opts[new_name]\n        opts[new_name] = opts[old_name]\n        opts.delete(old_name)\n        STDERR.puts \"WiceGrid: Parameter :#{old_name} is deprecated, use :#{new_name} instead!\"\n      end\n    end\n\n    def log(message) #:nodoc:\n      ActiveRecord::Base.logger.info('WiceGrid: ' + message) if ActiveRecord::Base.logger\n    end\n  end\n\n  module NlMessage #:nodoc:\n    class << self\n      def [](key) #:nodoc:\n        I18n.t(key, scope: 'wice_grid')\n      end\n    end\n  end\n\n  module ConfigurationProvider #:nodoc:\n    class << self\n      def value_for(key, strict: true) #:nodoc:\n        if Wice::Defaults.const_defined?(key)\n          Wice::Defaults.const_get(key)\n        else\n          if strict\n            raise WiceGridMissingConfigurationConstantException.new(\"Could not find constant #{key} in the configuration file!\" \\\n                ' It is possible that the version of WiceGrid you are using is newer than the installed configuration file in config/initializers. ' \\\n                \"Constant Wice::Defaults::#{key} is missing  and you need to add it manually to wice_grid_config.rb or run the generator task=:\\n\" \\\n                '   rails g wice_grid:install')\n          end # else nil\n        end\n      end\n    end\n  end\n\n  module Defaults  #:nodoc:\n  end\n\n  module ExceptionsMixin  #:nodoc:\n    def initialize(str)  #:nodoc:\n      super('WiceGrid: ' + str)\n    end\n  end\n  class WiceGridArgumentError < ArgumentError #:nodoc:\n    include ExceptionsMixin\n  end\n  class WiceGridException < Exception #:nodoc:\n    include ExceptionsMixin\n  end\n  class WiceGridMissingConfigurationConstantException < Exception #:nodoc:\n    include ExceptionsMixin\n  end\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_serialized_queries_controller.rb",
    "content": "module Wice\n  class <<self\n    # Used in routes.rb to define routes to the query processing controller.\n    # Parameters:\n    # * map - the context of the routes execution (instance of <tt>ActionDispatch::Routing::Mapper</tt>).\n    #   Normally use +self+ for the first argument: <tt>Wice::define_routes(self, 'queries')</tt>\n    # * controller - name of the query processing controller, i.e.  <tt>'queries'</tt> if the controller is +QueriesController+ .\n    # Read section \"Saving Queries How-To\" in README for more details.\n    def define_routes(map, controller)\n      controller = controller.to_s\n\n      map.post '/wice_grid_serialized_queries/:grid_name',\n               to: \"#{controller}#create_saved_query\",\n               as: 'create_serialized_query'\n\n      map.post '/wice_grid_serialized_queries/:grid_name/:id',\n               to: \"#{controller}#delete_saved_query\",\n               as: 'delete_serialized_query'\n    end\n  end\n\n  module SerializedQueriesControllerMixin   #:nodoc:\n    def delete_saved_query  #:nodoc:\n      init\n      if sq = @query_store_model.find_by_id_and_grid_name(params[:id], @grid_name)\n        if sq.destroy\n          if params[:current]\n            @current = @query_store_model.find_by_id_and_grid_name(params[:current], @grid_name)\n          end\n          @notification_messages = NlMessage['query_deleted_message']\n        else\n          @error_messages = sq.errors.full_raw_messages.join(' ')\n        end\n      end\n\n      render_asyns_result\n    end\n\n    def create_saved_query  #:nodoc:\n      init\n      query_params = if params[@grid_name]\n        params[@grid_name]\n      else\n        {}\n      end\n      query_params.delete(:page)\n\n      @saved_query = @query_store_model.new\n\n      @saved_query.grid_name = @grid_name\n      @saved_query.name      = params[:query_name]\n      @saved_query.query     = query_params\n\n      @saved_query.attributes = extra unless extra.nil?\n\n      if @saved_query.save\n        @grid_title_id = \"#{@grid_name}_title\"\n        @notification_messages = NlMessage['query_saved_message']\n      else\n        @error_messages = @saved_query.errors.map { |_, msg| msg }.join(' ')\n      end\n\n      render_asyns_result\n    end\n\n    def extra #:nodoc:\n      params[:extra].permit! unless params[:extra].nil?\n    end\n\n    protected\n\n    def render_asyns_result #:nodoc:\n      render json: {\n        'error_messages'        => @error_messages,\n        'notification_messages' => @notification_messages,\n        'query_list'            => render_to_string(inline: '<%=saved_queries_list(@grid_name, @saved_query, controller.extra, @confirm).html_safe%>')\n      }\n    end\n\n    def init  #:nodoc:\n      @query_store_model = ::Wice.get_query_store_model\n      @confirm = params[:confirm] == '1' || params[:confirm] == 'true'\n      @grid_name = params[:grid_name]\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_serialized_query.rb",
    "content": "class WiceGridSerializedQuery < ActiveRecord::Base  #:nodoc:\n  serialize :query\n\n  validates_uniqueness_of :name, scope: :grid_name, on: :create, message: 'A query with this name already exists'\n\n  validates_presence_of :name, message: 'Please submit the name of the custom query'\n\n  # returns a list of all serialized queries\n  def self.list(name, _controller)\n    conditions = { grid_name: name }\n    self.where(conditions).to_a\n  end\nend\n"
  },
  {
    "path": "lib/wice/wice_grid_spreadsheet.rb",
    "content": "require 'csv'\n\nmodule Wice\n  class Spreadsheet  #:nodoc:\n\n    #:nodoc:\n    attr_reader :tempfile\n\n    def initialize(name, field_separator, encoding = nil)  #:nodoc:\n      @tempfile = Tempfile.new(name)\n      @tempfile.set_encoding(encoding) unless encoding.blank?\n      @csv = CSV.new(@tempfile, col_sep: field_separator)\n    end\n\n    def << (row)  #:nodoc:\n      @csv << row\n    end\n  end\nend\n"
  },
  {
    "path": "lib/wice_grid.rb",
    "content": "require 'wice/wice_grid_misc.rb'\nrequire 'wice/wice_grid_core_ext.rb'\nrequire 'wice/grid_renderer.rb'\nrequire 'wice/table_column_matrix.rb'\nrequire 'wice/active_record_column_wrapper.rb'\nrequire 'wice/helpers/wice_grid_view_helpers.rb'\nrequire 'wice/helpers/wice_grid_misc_view_helpers.rb'\nrequire 'wice/helpers/wice_grid_serialized_queries_view_helpers.rb'\nrequire 'wice/helpers/wice_grid_view_helpers.rb'\nrequire 'wice/helpers/bs_calendar_helpers.rb'\nrequire 'wice/helpers/js_calendar_helpers.rb'\nrequire 'wice/grid_output_buffer.rb'\nrequire 'wice/wice_grid_controller.rb'\nrequire 'wice/wice_grid_spreadsheet.rb'\nrequire 'wice/wice_grid_serialized_queries_controller.rb'\nrequire 'wice/columns/column_processor_index.rb'\nrequire 'wice/columns.rb'\nrequire 'wice/columns/common_date_datetime_mixin.rb'\nrequire 'wice/columns/common_standard_helper_date_datetime_mixin.rb'\nrequire 'wice/columns/common_js_date_datetime_mixin.rb'\nrequire 'wice/columns/common_js_date_datetime_conditions_generator_mixin.rb'\nrequire 'wice/columns/common_rails_date_datetime_conditions_generator_mixin.rb'\nrequire 'kaminari.rb'\n\n\nActionController::Base.send(:helper_method, :wice_grid_custom_filter_params)\n\nmodule Wice\n\n  def self.on_action_view_load #:nodoc:\n    ::ActionView::Base.class_eval { include Wice::GridViewHelper }\n    [ActionView::Helpers::AssetTagHelper,\n     ActionView::Helpers::TagHelper,\n     ActionView::Helpers::JavaScriptHelper,\n     ActionView::Helpers::FormTagHelper].each do |m|\n      JsCalendarHelpers.send(:include, m)\n    end\n\n    Columns.load_column_processors\n    require 'wice/wice_grid_serialized_query.rb'\n\n    # It is here only because of this: https://github.com/amatsuda/kaminari/pull/267\n    require 'wice/kaminari_monkey_patching.rb'\n\n  end\n\n  class WiceGridEngine < ::Rails::Engine #:nodoc:\n    initializer 'wice_grid_railtie.configure_rails_initialization' do |_app|\n      ActiveSupport.on_load :action_controller do\n        ActionController::Base.send(:include, Wice::Controller)\n      end\n\n      ActiveSupport.on_load :active_record do\n        ActiveRecord::ConnectionAdapters::Column.send(:include, ::Wice::WiceGridExtentionToActiveRecordColumn)\n      end\n\n      ActiveSupport.on_load :action_view do\n        ::Wice.on_action_view_load\n      end\n    end\n\n    initializer 'wice_grid_railtie.configure_rails_assets_precompilation' do |app|\n      app.config.assets.precompile << 'icons/grid/*'\n    end\n  end\n\n\n  # Main class responsible for keeping the state of the grid, building an ActiveRelation, and running queries\n  class WiceGrid\n    attr_reader :klass, :name, :resultset, :custom_order, :query_store_model #:nodoc:\n    attr_reader :ar_options, :status, :export_to_csv_enabled, :csv_file_name, :csv_field_separator, :csv_encoding, :saved_query #:nodoc:\n    attr_writer :renderer #:nodoc:\n    attr_accessor :output_buffer, :view_helper_finished, :csv_tempfile #:nodoc:\n\n    # core workflow methods START\n\n    def initialize(klass_or_relation, controller, opts = {})  #:nodoc:\n      @controller = controller\n\n      @relation = klass_or_relation\n      @klass = if @relation.is_a?(Class) && @relation.ancestors.index(ActiveRecord::Base)\n        klass_or_relation\n      else\n        klass_or_relation.klass\n      end\n\n      unless @klass.is_a?(Class) && @klass.ancestors.index(ActiveRecord::Base)\n        raise WiceGridArgumentError.new('ActiveRecord model class (second argument) must be a Class derived from ActiveRecord::Base')\n      end\n\n      # validate :with_resultset & :with_paginated_resultset\n      [:with_resultset, :with_paginated_resultset].each do |callback_symbol|\n        unless [NilClass, Symbol, Proc].index(opts[callback_symbol].class)\n          raise WiceGridArgumentError.new(\":#{callback_symbol} must be either a Proc or Symbol object\")\n        end\n      end\n\n      opts[:order_direction] = opts[:order_direction].downcase if opts[:order_direction].is_a?(String)\n\n      # validate :order_direction\n      if opts[:order_direction] && ! (opts[:order_direction] == 'asc' || opts[:order_direction] == :asc || opts[:order_direction] == 'desc' ||\n                                      opts[:order_direction] == :desc)\n        raise WiceGridArgumentError.new(\":order_direction must be either 'asc' or 'desc'.\")\n      end\n\n      begin\n        # options that are understood\n        @options = {\n          conditions:                 nil,\n          csv_file_name:              nil,\n          csv_field_separator: ConfigurationProvider.value_for(:CSV_FIELD_SEPARATOR),\n          csv_encoding:               ConfigurationProvider.value_for(:CSV_ENCODING),\n          custom_order:               {},\n          enable_export_to_csv: ConfigurationProvider.value_for(:ENABLE_EXPORT_TO_CSV),\n          group:                      nil,\n          include:                    nil,\n          joins:                      nil,\n          name:                       ConfigurationProvider.value_for(:GRID_NAME),\n          order:                      nil,\n          order_direction:            ConfigurationProvider.value_for(:ORDER_DIRECTION),\n          page:                       1,\n          page_method_name:           ConfigurationProvider.value_for(:PAGE_METHOD_NAME),\n          per_page:                   ConfigurationProvider.value_for(:PER_PAGE),\n          saved_query:                nil,\n          with_paginated_resultset:   nil,\n          with_resultset:             nil,\n          use_default_scope:          ConfigurationProvider.value_for(:USE_DEFAULT_SCOPE)\n        }\n      rescue NameError\n        raise NameError.new('A constant is missing in wice_grid_config.rb: ' + $ERROR_INFO.message +\n          '. This can happen when you upgrade the WiceGrid to a newer version with a new configuration constant. ' \\\n          'Add the constant manually or re-run `bundle exec rails g wice_grid:install`.')\n      end\n      # validate parameters\n      opts.assert_valid_keys(@options.keys)\n\n      @options.merge!(opts)\n      @export_to_csv_enabled = @options[:enable_export_to_csv]\n      @csv_file_name = @options[:csv_file_name]\n      @csv_field_separator = @options[:csv_field_separator]\n      @csv_encoding = @options[:csv_encoding]\n\n      case @name = @options[:name]\n      when String\n      when Symbol\n        @name = @name.to_s\n      else\n        raise WiceGridArgumentError.new('name of the grid should be a string or a symbol')\n      end\n      raise WiceGridArgumentError.new('name of the grid can only contain alphanumeruc characters') unless @name =~ /^[a-zA-Z\\d_]*$/\n\n      @table_column_matrix = TableColumnMatrix.new\n      @table_column_matrix.default_model_class = @klass\n\n      @ar_options = {}\n      @status = HashWithIndifferentAccess.new\n\n      if @options[:order]\n        @options[:order]           = @options[:order].to_s\n        @options[:order_direction] = @options[:order_direction].to_s\n\n        @status[:order_direction]  = @options[:order_direction]\n        @status[:order]            = @options[:order]\n\n      end\n      @status[:per_page]      = @options[:per_page]\n      @status[:page]          = @options[:page]\n      @status[:conditions]    = @options[:conditions]\n      @status[:f]             = @options[:f]\n\n      fix_facebook_bug\n      process_loading_query\n      process_params\n\n      @ar_options_formed = false\n    end\n\n    # A block executed from within the plugin to process records of the current page.\n    # The argument to the callback is the array of the records. See the README for more details.\n    def with_paginated_resultset(&callback)\n      @options[:with_paginated_resultset] = callback\n    end\n\n    # A block executed from within the plugin to process all records browsable through\n    # all pages with the current filters. The argument to\n    # the callback is a lambda object which returns the list of records when called. See the README for the explanation.\n    def with_resultset(&callback)\n      @options[:with_resultset] = callback\n    end\n\n    def fix_facebook_bug\n      if params[name] and filter = params[name][:f]\n        params[name][:f] = filter.to_unsafe_h\n            .each_with_object({}) do |(key, value), hash|\n          if value.is_a?(Hash) and value.keys.all? {|key| key.to_s.match? /^[0-9]+$/}\n            hash[key] = value.values\n          else\n            hash[key] = value\n          end\n        end\n      end\n    end\n\n    def process_loading_query #:nodoc:\n      @saved_query = nil\n      if params[name] && params[name][:q]\n        @saved_query = load_query(params[name][:q])\n        params[name].delete(:q)\n      elsif @options[:saved_query]\n        if @options[:saved_query].is_a? ActiveRecord::Base\n          @saved_query = @options[:saved_query]\n        else\n          @saved_query = load_query(@options[:saved_query])\n        end\n      else\n        return\n      end\n\n      unless @saved_query.nil?\n        params[name] = HashWithIndifferentAccess.new if params[name].blank?\n        [:f, :order, :order_direction].each do |key|\n          if @saved_query.query[key].blank?\n            params[name].delete(key)\n          else\n            params[name][key] = @saved_query.query[key]\n          end\n        end\n      end\n    end\n\n    def process_params  #:nodoc:\n      if this_grid_params\n        @status.merge!(this_grid_params)\n        @status.delete(:export) unless self.export_to_csv_enabled\n      end\n    end\n\n    # declare_column(String, ActiveRecord, CustomFilterSpec, nil | string, nil | Boolean)\n    def declare_column(\n                 column_name: nil,\n                 model: nil,\n                 custom_filter_active: nil,\n                 table_alias: nil,\n                 filter_type: nil,\n                 assocs: [],\n                 sort_by: nil)  #:nodoc:\n\n\n      @options[:include] = Wice.build_includes(@options[:include], assocs)\n\n      if model # this is an included table\n        column = @table_column_matrix.get_column_by_model_class_and_column_name(model, column_name)\n        raise WiceGridArgumentError.new(\"Column '#{column_name}' is not found in table '#{model.table_name}'!\") if column.nil?\n        main_table = false\n        table_name = model.table_name\n      else\n        column = @table_column_matrix.get_column_in_default_model_class_by_column_name(column_name)\n        # Allow the column to not exist if we're doing a custom sort (calculated field)\n        if column.nil? && !sort_by\n          raise WiceGridArgumentError.new(\"Column '#{column_name}' is not found in table '#{@klass.table_name}'! \" \\\n            \"If '#{column_name}' belongs to another table you should declare it in :include or :join when initialising \" \\\n            'the grid, and specify :model in column declaration.')\n        end\n        main_table = true\n        table_name = @table_column_matrix.default_model_class.table_name\n      end\n\n      if column\n        conditions_generator = ActiveRecordColumnWrapper.new(\n          column, @status[:f], main_table,\n          table_alias, custom_filter_active, filter_type\n        )\n        conditions, current_parameter_name =\n            conditions_generator.wg_initialize_request_parameters\n\n        if @status[:f] && conditions.blank?\n          @status[:f].delete(current_parameter_name)\n        end\n\n        @table_column_matrix.add_condition(column, conditions)\n\n        # [ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::Column, String, Boolean]\n        [column, table_name, main_table]\n      end\n    end\n\n    def form_ar_options(opts = {})  #:nodoc:\n      return if @ar_options_formed\n      @ar_options_formed = true unless opts[:forget_generated_options]\n\n      # validate @status[:order_direction]\n      @status[:order_direction] = case @status[:order_direction]\n      when /desc/i\n        'desc'\n      when /asc/i\n        'asc'\n      else\n        ''\n      end\n\n      # conditions\n      # do not delete for a while\n      # https://github.com/leikind/wice_grid/issues/144\n      # if @table_column_matrix.generated_conditions.size == 0\n      #   @status.delete(:f)\n      # end\n\n      initial_conditions_active_relation = @klass.where(@status[:conditions])\n\n      @ar_options[:conditions] =\n        @table_column_matrix.conditions.reduce(initial_conditions_active_relation) do |active_relation_accu, cond|\n          conditions_active_relation = @klass.where(cond)\n          active_relation_accu.merge(conditions_active_relation)\n        end\n\n      # conditions processed\n\n      if (!opts[:skip_ordering]) && ! @status[:order].blank?\n        custom_order = get_custom_order_reference\n        if custom_order\n          @ar_options[:order] = custom_order\n        else\n          @ar_options[:order] = arel_column_reference(@status[:order])\n        end\n        if @ar_options[:order].is_a?(Arel::Attributes::Attribute) || @ar_options[:order].is_a?(Arel::Nodes::SqlLiteral)\n          if @status[:order_direction] == 'desc'\n            @ar_options[:order] = @ar_options[:order].desc\n          else\n            @ar_options[:order] = @ar_options[:order].asc\n          end\n        else\n          @ar_options[:order] += \" #{@status[:order_direction]}\"\n        end\n      end\n\n      @ar_options[:joins]   = @options[:joins]\n      @ar_options[:include] = @options[:include]\n      @ar_options[:group]   = @options[:group]\n\n      if self.output_html?\n        @ar_options[:per_page]      = @status[:per_page]\n        @ar_options[:page]          = @status[:page]\n\n        if (show_all_limit = Wice::ConfigurationProvider.value_for(:SHOW_ALL_ALLOWED_UP_TO, strict: false)) && all_record_mode?\n          if do_count > show_all_limit # force-reset SHOW-ALL to pagination\n            @status[:pp] = nil\n          end\n        end\n\n      end\n    end\n\n    def add_references(relation) #:nodoc:\n      if @ar_options[:include] && relation.respond_to?(:references)\n        # refs = [@ar_options[:include]] unless @ar_options[:include].is_a?(Array)\n        relation = relation.references(* @ar_options[:include])\n      end\n      relation\n    end\n\n    # Apply the sort_by option to the results.\n    def apply_sort_by(relation)\n      active_sort_by = nil\n      @renderer.find_one_for(->(c) {c.attribute == @status[:order]}) {|r| active_sort_by = r.sort_by}\n      return relation if !active_sort_by\n      relation = relation.sort_by(&active_sort_by)\n      relation = relation.reverse if @status[:order_direction] == 'desc'\n      return relation\n    end\n\n    # TO DO: what to do with other @ar_options values?\n    def read  #:nodoc:\n      form_ar_options\n      use_default_or_unscoped do\n        relation = @relation\n                       .includes(@ar_options[:include])\n                       .joins(@ar_options[:joins])\n                       .group(@ar_options[:group])\n                       .merge(@ar_options[:conditions])\n        relation = add_references relation\n        relation = apply_sort_by relation\n\n        # If relation is an Array, it got the sort from apply_sort_by.\n        if @ar_options[:order].is_a? String\n          @ar_options[:order] = Arel.sql @ar_options[:order]\n        end\n        relation = relation.order(@ar_options[:order]) if !relation.is_a?(Array)\n\n        if !output_csv? && !all_record_mode?\n          if relation.is_a?(Array)\n            relation = Kaminari.paginate_array(relation, limit: @ar_options[:per_page], offset: @ar_options[:per_page].to_i * (@ar_options[:page].to_i - 1))\n          else\n            relation = relation\n                           .send(@options[:page_method_name], @ar_options[:page])\n                           .per(@ar_options[:per_page])\n          end\n        end\n\n        if all_record_mode? && relation.is_a?(Array)\n          # This still needs to be a Kaminari object as the paginator will read limit_value.\n          relation = Kaminari.paginate_array(relation, limit: relation.count)\n        end\n\n        @resultset = relation\n      end\n\n      invoke_resultset_callbacks\n    end\n\n    # core workflow methods END\n\n    # Getters\n\n    def filter_params(view_column)  #:nodoc:\n      column_name = view_column.attribute_name_fully_qualified_for_all_but_main_table_columns\n      if @status[:f] && @status[:f][column_name]\n        @status[:f][column_name]\n      else\n        {}\n      end\n    end\n\n    def resultset  #:nodoc:\n      self.read unless @resultset # database querying is late!\n      @resultset\n    end\n\n    def each   #:nodoc:\n      self.read unless @resultset # database querying is late!\n      @resultset.each do |r|\n        yield r\n      end\n    end\n\n    # Returns true if the current results are ordered by the passed column.\n    def ordered_by?(column)\n      return nil if @status[:order].blank?\n      if column.main_table && ! @status[:order].index('.') || column.table_alias_or_table_name.nil?\n        @status[:order] == column.attribute\n      else\n        @status[:order] == column.table_alias_or_table_name + '.' + column.attribute\n      end\n    end\n\n    def ordered_by  #:nodoc:\n      @status[:order]\n    end\n\n    def order_direction  #:nodoc:\n      @status[:order_direction]\n    end\n\n    def filtering_on?  #:nodoc:\n      !@status[:f].blank?\n    end\n\n    def filtered_by  #:nodoc:\n      @status[:f].nil? ? [] : @status[:f].keys\n    end\n\n    def filtered_by?(view_column)  #:nodoc:\n      @status[:f].nil? ? false : @status[:f].key?(view_column.attribute_name_fully_qualified_for_all_but_main_table_columns)\n    end\n\n    def get_state_as_parameter_value_pairs(including_saved_query_request = false) #:nodoc:\n      res = []\n      unless status[:f].blank?\n        Wice::WgHash.parameter_names_and_values(status[:f], [name, 'f']).collect do |param_name, value|\n          if value.is_a?(Array)\n            param_name_ar = param_name + '[]'\n            value.each do |v|\n              res << [param_name_ar, v]\n            end\n          else\n            res << [param_name, value]\n          end\n        end\n      end\n\n      if including_saved_query_request && @saved_query\n        res << [\"#{name}[q]\", @saved_query.id]\n      end\n\n      [:order, :order_direction].select do|parameter|\n        status[parameter]\n      end.collect do |parameter|\n        res << [\"#{name}[#{parameter}]\", status[parameter]]\n      end\n\n      res\n    end\n\n    def count  #:nodoc:\n      form_ar_options(skip_ordering: true, forget_generated_options: true)\n      do_count\n    end\n\n    def do_count #:nodoc:\n      @relation\n        .all\n        .joins(@ar_options[:joins])\n        .includes(@ar_options[:include])\n        .group(@ar_options[:group])\n        .where(@options[:conditions])\n        .count\n    end\n\n    alias_method :size, :count\n\n    def empty?  #:nodoc:\n      self.count == 0\n    end\n\n    # with this variant we get even those values which do not appear in the resultset\n    def distinct_values_for_column(column)  #:nodoc:\n      column.model.select(\"distinct #{column.name}\").order(\"#{column.name} asc\").collect do|ar|\n        ar[column.name]\n      end.reject(&:blank?).map { |i| [i, i] }\n    end\n\n    def distinct_values_for_column_in_resultset(messages)  #:nodoc:\n      uniq_vals = Set.new\n\n      resultset_without_paging_without_user_filters.each do |ar|\n        v = ar.deep_send(*messages)\n        uniq_vals << v unless v.nil?\n      end\n      uniq_vals.to_a.map do|i|\n        if i.is_a?(Array) && i.size == 2\n          i\n        elsif i.is_a?(Hash) && i.size == 1\n          i.to_a.flatten\n        else\n          [i, i]\n        end\n      end.sort { |a, b| a[0] <=> b[0] }\n    end\n\n    def output_csv? #:nodoc:\n      @status[:export] == 'csv'\n    end\n\n    def output_html? #:nodoc:\n      @status[:export].blank?\n    end\n\n    def all_record_mode? #:nodoc:\n      @status[:pp]\n    end\n\n    def dump_status #:nodoc:\n      \"   params: #{params[name].inspect}\\n\" + \"   status: #{@status.inspect}\\n\" \\\n        \"   ar_options #{@ar_options.inspect}\\n\"\n    end\n\n    # Returns the list of objects browsable through all pages with the current filters.\n    # Should only be called after the +grid+ helper.\n    def all_pages_records\n      raise WiceGridException.new('all_pages_records can only be called only after the grid view helper') unless self.view_helper_finished\n      resultset_without_paging_with_user_filters\n    end\n\n    # Returns the list of objects displayed on current page. Should only be called after the +grid+ helper.\n    def current_page_records\n      raise WiceGridException.new('current_page_records can only be called only after the grid view helper') unless self.view_helper_finished\n      @resultset\n    end\n\n    protected\n\n    def invoke_resultset_callback(callback, argument) #:nodoc:\n      case callback\n      when Proc\n        callback.call(argument)\n      when Symbol\n        @controller.send(callback, argument)\n      end\n    end\n\n    def invoke_resultset_callbacks #:nodoc:\n      invoke_resultset_callback(@options[:with_paginated_resultset], @resultset)\n      invoke_resultset_callback(@options[:with_resultset], self.active_relation_for_resultset_without_paging_with_user_filters)\n    end\n\n    # If a custom order has been configured, gets the column/function to be ordered by. If no custom order, returns nil.\n    def get_custom_order_reference\n      # TODO Do we need to distinguish between no custom order and a custom order that defines no ordering? Both return nil.\n\n      fully_qualified_column_name = complete_column_name(@status[:order])\n      custom_order = if @options[:custom_order].key?(fully_qualified_column_name)\n        @options[:custom_order][fully_qualified_column_name]\n      else\n        if view_column = @renderer[fully_qualified_column_name]\n          view_column.custom_order\n        end\n      end\n\n      return custom_order if custom_order.nil? || custom_order.is_a?(Arel::Attributes::Attribute)\n      return custom_order.gsub(/\\?/, fully_qualified_column_name) if custom_order.is_a?(String)\n      return custom_order.call(fully_qualified_column_name) if custom_order.is_a?(Proc)\n      raise WiceGridArgumentError.new(\"invalid custom order #{custom_order.inspect}\")\n    end\n\n    # Returns an Arel::Attributes::Attribute for the passed column reference.\n    def arel_column_reference(col_name)  #:nodoc:\n      if col_name.index('.') # already has a table name\n        table_name, col_name = col_name.split('.', 2)\n        Arel::Table.new(table_name)[col_name]\n      else # add the default table\n        @klass.arel_table[col_name]\n      end\n    end\n\n    # Returns tablename.columnname for the passed column reference.\n    def complete_column_name(col_name)\n      return col_name if col_name.index('.') # already has a table name\n      return \"#{@klass.table_name}.#{col_name}\"\n    end\n\n    def params  #:nodoc:\n      @controller.params\n    end\n\n    def this_grid_params  #:nodoc:\n      params[name].try(:to_unsafe_h) || params[name]\n    end\n\n    def resultset_without_paging_without_user_filters  #:nodoc:\n      form_ar_options\n\n      use_default_or_unscoped do\n        relation = @relation.joins(@ar_options[:joins])\n                   .includes(@ar_options[:include])\n                   .group(@ar_options[:group])\n                   .where(@options[:conditions])\n\n        relation = add_references relation\n\n        relation\n      end\n    end\n\n    # not used right now\n    # def count_resultset_without_paging_without_user_filters  #:nodoc:\n    #   form_ar_options\n    #   @klass.unscoped do\n    #     @relation.count(\n    #       joins:      @ar_options[:joins],\n    #       include:    @ar_options[:include],\n    #       group:      @ar_options[:group],\n    #       conditions: @options[:conditions]\n    #     )\n    #   end\n    # end\n\n    def resultset_without_paging_with_user_filters  #:nodoc:\n      active_relation_for_resultset_without_paging_with_user_filters.to_a\n    end\n\n    def active_relation_for_resultset_without_paging_with_user_filters  #:nodoc:\n      form_ar_options\n      relation = nil\n\n      use_default_or_unscoped do\n        if @ar_options[:order].is_a? String\n          @ar_options[:order] = Arel.sql @ar_options[:order]\n        end\n        relation = @relation\n                   .joins(@ar_options[:joins])\n                   .includes(@ar_options[:include])\n                   .order(@ar_options[:order])\n                   .merge(@ar_options[:conditions])\n\n        relation = add_references relation\n      end\n      relation\n    end\n\n    def load_query(query_id) #:nodoc:\n      @query_store_model ||= Wice.get_query_store_model\n      query = @query_store_model.find_by_id_and_grid_name(query_id, self.name)\n      Wice.log(\"Query with id #{query_id} for grid '#{self.name}' not found!!!\") if query.nil?\n      query\n    end\n\n    def use_default_or_unscoped #:nodoc:\n      if @options[:use_default_scope]\n        yield\n      else\n        @klass.unscoped { yield }\n      end\n    end\n\n  end\n\n  # routines called from WiceGridExtentionToActiveRecordColumn (ActiveRecord::ConnectionAdapters::Column) or ConditionsGeneratorColumn classes\n  module GridTools   #:nodoc:\n    class << self\n      def special_value(str)   #:nodoc:\n        str =~ /^\\s*(not\\s+)?null\\s*$/i\n      end\n\n      # create a Time instance out of parameters\n      def params_2_datetime(par)   #:nodoc:\n        return nil if par.blank?\n        params = [par[:year], par[:month], par[:day], par[:hour], par[:minute]].collect { |v| v.blank? ? nil : v.to_i }\n        begin\n          Time.local(*params)\n        rescue ArgumentError, TypeError\n          nil\n        end\n      end\n\n      # create a Date instance out of parameters\n      def params_2_date(par)   #:nodoc:\n        return nil if par.blank?\n        params = [par[:year], par[:month], par[:day]].collect { |v| v.blank? ? nil : v.to_i }\n        begin\n          Date.civil(*params)\n        rescue ArgumentError, TypeError\n          nil\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"wice-grid\",\n  \"version\": \"4.1.0\",\n  \"description\": \"WiceGrid is a Rails grid plugin\",\n  \"main\": \"vendor/assets/javascripts/wice_grid.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"/home/dima/devel/github/wice_grid\"\n  },\n  \"author\": \"Dmitry Kulikov\",\n  \"license\": \"MIT\",\n  \"directories\": {\n    \"lib\": \"lib\"\n  },\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  }\n}\n"
  },
  {
    "path": "spec/acceptance_helper.rb",
    "content": "# encoding: utf-8\nrequire 'capybara/rspec'\n\n# This file is copied to spec/ when you run 'rails generate rspec:install'\nENV['RAILS_ENV'] ||= 'test'\nrequire File.expand_path('../support/test_app/config/environment', __FILE__)\nrequire 'rspec/rails'\nrequire 'faker'\n\nif ENV['BROWSER']\n  Capybara.default_driver = :selenium\nelse\n  require 'capybara/poltergeist'\n  Capybara.javascript_driver = :poltergeist\n\n  require 'capybara-screenshot/rspec'\n  Capybara::Screenshot.prune_strategy = :keep_last_run\nend\nCapybara.server = :webrick\n\n# Requires supporting ruby files with custom matchers and macros, etc,\n# in spec/support/ and its subdirectories.\nDir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }\n\nALL_TESTS = false\n\nRSpec.configure do |config|\n  # config.mock_with :mocha\n  # config.mock_with :flexmock\n  # config.mock_with :rr\n\n  config.fixture_paths ||= []\n  config.fixture_paths << \"spec/fixtures\"\n\n  config.use_transactional_fixtures = true\n\n  # If true, the base class of anonymous controllers will be inferred\n  # automatically. This will be the default behavior in future versions of\n  # rspec-rails.\n  config.infer_base_class_for_anonymous_controllers = false\n\n  config.global_fixtures = :all\n\n  config.include Capybara::DSL\nend\n\n# Disable SQL logging\nActiveRecord::Base.logger = nil\n\nrequire 'features/shared.rb'\nrequire 'features/shared_detached_filters.rb'\n"
  },
  {
    "path": "spec/features/action_column_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /action_column WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/action_column'\n  end\n\n  it 'allows to select all rows by clicking the checkbox in the header' do\n    510.upto(520).each do |i|\n      find(:css, %(input[type=\"checkbox\"][value=\"#{i}\"])).click\n    end\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('Selected tasks: 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, and 520')\n  end\n\n  it 'allows to select rows with the select all button and deselect them with the deselect button' do\n    find(:css, '.clickable.select-all').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('Selected tasks: 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, and 526')\n\n    find(:css, '.clickable.deselect-all').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_no_content('Selected tasks: 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, and 526')\n  end\n\n  it 'allows to filter by ID inside a form, two limits' do\n    fill_in('g_f_id_fr', with: 507)\n    fill_in('g_f_id_to', with: 509)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('509')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n  end\n\n  it 'allows to filter by Archived inside a form' do\n    select 'yes', from: 'g_f_archived'\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'g_f_archived'\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n  end\n\n  it 'allows to filter by Added inside a form' do\n    set_datepicker(self, 'g_f_created_at_fr_date_placeholder', 2021, 5, 1)\n\n    set_datepicker(self, 'g_f_created_at_to_date_placeholder', 2021, 9, 1)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-29 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      # page.should have_content('2021-08-14 22:11:12')\n      expect(page).to have_content('2021-09-22 22:11:12')\n    end\n  end\n\n  it 'allows to filter by Due Date' do\n    set_datepicker(self, 'g_f_due_date_fr_date_placeholder', 2022, 0, 1)\n\n    set_datepicker(self, 'g_f_due_date_to_date_placeholder', 2023, 0, 1)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-35 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-02')\n    end\n\n    set_datepicker(self, 'g_f_due_date_fr_date_placeholder', 2022, 6, 28)\n\n    set_datepicker(self, 'g_f_due_date_to_date_placeholder', 2022, 6, 31)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    find(:css, '#g_f_due_date_fr_date_view').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-10 / 10')\n    end\n\n    find(:css, '#g_f_due_date_to_date_view').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to negate the semantics of the text  filter inside a form' do\n    fill_in('g_f_title_v', with: 'sed')\n    select 'no', from: 'g_f_archived'\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('sed impedit iste')\n\n    find(:css, '#g_f_title_n').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_no_content('sed impedit iste')\n  end\n\n  it 'allows to reload the title filter' do\n    fill_in('g_f_title_v', with: 'ed')\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n    expect(page).to have_content('sed impedit iste')\n  end\nend\n"
  },
  {
    "path": "spec/features/adding_rows_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /adding_rows WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/adding_rows'\n  end\n\n  it 'allows to filter the rows with the help of a custom filter renered as <select>' do\n    select 'Urgent', from: 'grid_f_priority_id'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    ['inventore architecto aut', 'veniam tempora', 'doloremque', 'qui animi', 'dolor et corporis'].each do |title|\n      expect(page).to have_content(title)\n      expect(page).to have_content(\"Panic! \\\"#{title}\\\"\")\n    end\n\n    expect(page).to have_content(\"Don't panic\")\n  end\nend\n"
  },
  {
    "path": "spec/features/all_records_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /all_records WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/all_records'\n  end\n\n  it 'does not allow to show all records' do\n    within 'div.wice-grid-container table.wice-grid tbody' do\n      expect(page).to have_no_content('show all')\n    end\n  end\n\n  it 'shows the the range of the records on the current page together with the total number of records' do\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/auto_reloads2_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /auto_reloads2 with detached filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/auto_reloads2'\n  end\n\n  it 'allows to filter immediately by changing Assigned custom filter' do\n    select 'Assigned', from: 'grid_f_status_id'\n\n    within '#grid .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n  end\n\n  it 'allows to filter immediately by changing Project custom filter' do\n    select 'Divine Firmware', from: 'grid_f_project_id'\n\n    within '#grid .pagination_status' do\n      expect(page).to have_content('1-15 / 15')\n    end\n  end\n\n  it 'allows to filter immediately by changing \"Added\" custom filter' do\n    set_datepicker(self, 'grid_f_created_at_fr_date_placeholder', 2021, 5, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    set_datepicker(self, 'grid_f_created_at_to_date_placeholder', 2021, 9, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-29 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-22 22:11:12')\n    end\n\n    find(:css, '.wg-external-reset-button').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing \"Archived\" custom filter' do\n    select 'yes', from: 'grid_f_archived'\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'grid_f_archived'\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    find(:css, '.wg-external-reset-button').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the fields for ID two limits' do\n    fill_in('grid_f_id_fr', with: 507)\n    fill_in('grid_f_id_to', with: 509)\n\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('509')\n    end\n\n    expect(page).to have_content('507')\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    expect(page).to have_content('507')\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    find(:css, '.wg-external-reset-button').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the field for ID one limit' do\n    fill_in('grid_f_id_fr', with: 550)\n\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('550')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('556')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('550')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    550.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    find(:css, '.wg-external-reset-button').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the field for Due Date' do\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 0, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2023-01-26')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2023, 0, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-02')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 6, 28)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2022, 6, 31)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    find(:css, '#grid_f_due_date_fr_date_view').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-10 / 10')\n    end\n\n    find(:css, '#grid_f_due_date_to_date_view').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to negate filter by clickin the checkbox for \"Title\" filter' do\n    expect(page).to have_content('sequi')\n    expect(page).to have_content('sed impedit iste')\n\n    fill_in('grid_f_title_v', with: 'sed')\n    select 'no', from: 'grid_f_archived'\n\n    expect(page).to have_no_content('sequi')\n    expect(page).to have_content('sed impedit iste')\n\n    find(:css, '#grid_f_title_n').click\n\n    expect(page).to have_content('sequi')\n    expect(page).to have_no_content('sed impedit iste')\n  end\n\n  it 'allows to reload the title filter' do\n    fill_in('grid_f_title_v', with: 'ed')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    find(:css, '.wg-external-reset-button').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/auto_reloads3_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /auto_reloads3 with two tables and detached filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/auto_reloads3'\n  end\n\n  it 'allows to filter grid1 and grid 2 by changing Assigned custom filter independently' do\n    select 'yes', :from => 'grid_f_archived'\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    select 'no', :from => 'grid2_f_archived'\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n  end\n\n  it 'allows to filter grid1 and grid 2 by changing Status custom filter independently' do\n    select 'Assigned', :from => 'grid_f_status_id'\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    select 'Cancelled', :from => 'grid2_f_status_id'\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-8 / 8')\n    end\n\n  end\n\n  it 'allows to filter grid1 and grid 2 by changing Title custom filter independently' do\n    fill_in('grid_f_title_v', :with => 'sed')\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    fill_in('grid2_f_title_v', :with => 'a')\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 31')\n    end\n\n  end\n\n  it 'allows to filter grid1 and grid 2 by changing Date custom filter independently' do\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 0, 1)\n    within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2023-01-26')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2023, 0, 1)\n    within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    set_datepicker(self, 'grid2_f_due_date_fr_date_placeholder', 2022, 0, 1)\n    within 'div#grid2.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2023-01-26')\n    end\n\n    set_datepicker(self, 'grid2_f_due_date_to_date_placeholder', 2023, 0, 1)\n    within 'div#grid2.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    find(:css, '.grid1 .wg-external-reset-button').click\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    find(:css, '.grid2 .wg-external-reset-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/auto_reloads_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /auto_reloads WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/auto_reloads'\n  end\n\n  it 'allows to filter immediately by changing Assigned custom filter' do\n    select 'Assigned', from: 'grid_f_status_id'\n\n    within '#grid .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n  end\n\n  it 'allows to filter immediately by changing \"Project Name\" custom filter' do\n    select 'Divine Firmware', from: 'grid_f_project_id'\n\n    within '#grid .pagination_status' do\n      expect(page).to have_content('1-15 / 15')\n    end\n  end\n\n  it 'allows to filter immediately by changing \"Added\" custom filter' do\n    set_datepicker(self, 'grid_f_created_at_fr_date_placeholder', 2021, 5, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    set_datepicker(self, 'grid_f_created_at_to_date_placeholder', 2021, 9, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-29 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    # WTF\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-22 22:11:12')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing \"Archived\" custom filter' do\n    select 'yes', from: 'grid_f_archived'\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'grid_f_archived'\n    # find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the fields for ID two limits' do\n    fill_in('grid_f_id_fr', with: 507)\n    fill_in('grid_f_id_to', with: 509)\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    # ID !!!!\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('509')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    # ID !!!!\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    expect(page).to have_content('507')\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the field for ID one limit' do\n    fill_in('grid_f_id_fr', with: 550)\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('550')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('556')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('550')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    550.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter immediately by changing the field for Due Date' do\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 0, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2023-01-26')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2023, 0, 1)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-02')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 6, 28)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2022, 6, 31)\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    find(:css, '#grid_f_due_date_fr_date_view').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-10 / 10')\n    end\n\n    find(:css, '#grid_f_due_date_to_date_view').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to negate filter by clickin the checkbox for \"Title\" filter' do\n    fill_in('grid_f_title_v', with: 'sed')\n\n    expect(page).to have_content('sed impedit iste')\n    expect(page).to have_no_content('sequi')\n\n    select 'no', from: 'grid_f_archived'\n\n    # Does not change the visible rows, just highlights the archived column\n    expect(page).to have_selector('.wice-grid tbody tr td:nth-child(3).active-filter')\n\n    expect(page).to have_content('sed impedit iste')\n    expect(page).to have_no_content('sequi')\n\n    find(:css, '#grid_f_title_n').click\n\n    expect(page).to have_no_content('sed impedit iste')\n    expect(page).to have_content('sequi')\n  end\n\n  it 'allows to sort by columns' do\n    fill_in('grid_f_title_v', with: 'ed')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/basics1_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics1 the most simple WiceGrid',  js: true do\n  before :each do\n    visit '/basics1'\n  end\n\n  include_examples 'basic task table specs'\n  include_examples 'show all and back'\nend\n"
  },
  {
    "path": "spec/features/basics2_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics2 with the parameter :name WiceGrid',  js: true do\n  before :each do\n    visit '/basics2'\n  end\n\n  include_examples 'names of columns'\nend\n"
  },
  {
    "path": "spec/features/basics3_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics3 with :attrubute parameter WiceGrid',  js: true do\n  before :each do\n    visit '/basics3'\n  end\n\n  include_examples 'sorting ID'\n  include_examples 'sorting Title'\n  include_examples 'sorting Description'\n  include_examples 'sorting Archived'\n  include_examples 'sorting Due Date'\n\n  include_examples 'sorting ID in all records mode'\n  include_examples 'sorting Title in all records mode'\n  include_examples 'sorting Description in all records mode'\n  include_examples 'sorting Archived in all records mode'\n  include_examples 'sorting Due Date in all records mode'\n\n  include_examples 'Archived filtering'\n  include_examples 'Title filtering'\n\n  include_examples 'Due Date datepicker filtering'\n\n  include_examples 'Description filtering'\n  include_examples 'ID filtering'\n  include_examples 'Description and Title filtering'\nend\n"
  },
  {
    "path": "spec/features/basics4_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics4 with filter: false WiceGrid',  js: true do\n  before :each do\n    visit '/basics4'\n  end\n\n  it 'does not render filters' do\n    expect(page).to have_no_selector('#grid_f_id_fr')\n    expect(page).to have_no_selector('#grid_f_id_to')\n    expect(page).to have_no_selector('#grid_f_description')\n    expect(page).to have_no_selector('#grid_f_created_at_fr_year')\n    expect(page).to have_no_selector('#grid_f_created_at_fr_month')\n\n    expect(page).to have_no_selector('#grid_f_created_at_to_year')\n    expect(page).to have_no_selector('#grid_f_created_at_to_month')\n  end\nend\n"
  },
  {
    "path": "spec/features/basics5_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics5 with allow_ordering: false WiceGrid',  js: true do\n  before :each do\n    visit '/basics5'\n  end\n\n  it 'does not allow to order columns' do\n    expect { click_link 'Description' }.to raise_error(Capybara::ElementNotFound)\n    expect { click_link 'Archived' }.to raise_error(Capybara::ElementNotFound)\n  end\nend\n"
  },
  {
    "path": "spec/features/basics6_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /basics6 with the parameters :order and :order_direction in initialize_grid WiceGrid',  js: true do\n  before :each do\n    visit '/basics6'\n  end\n\n  it 'initailly sorded the rows sorted by Title' do\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Title')\n    end\n  end\n\n  it 'the table does not have records with Archived==no' do\n    click_on 'show all'\n\n    within 'div.wice-grid-container table.wice-grid tbody' do\n      expect(page).to have_no_content('Yes')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/blockless_column_definition_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /blockless_column_definition it is possible to render without block and WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/blockless_column_definition'\n  end\n\n  include_examples 'sorting ID'\n  include_examples 'sorting Title'\n  include_examples 'sorting Description'\n  include_examples 'sorting Archived'\n  include_examples 'sorting Due Date'\n\n  include_examples 'sorting ID in all records mode'\n  include_examples 'sorting Title in all records mode'\n  include_examples 'sorting Description in all records mode'\n  include_examples 'sorting Archived in all records mode'\n  include_examples 'sorting Due Date in all records mode'\n\n  include_examples 'Archived filtering'\n  include_examples 'Title filtering'\n  include_examples 'Due Date datepicker filtering'\n  include_examples 'Description filtering'\n  include_examples 'ID filtering'\n  include_examples 'Description and Title filtering'\nend\n"
  },
  {
    "path": "spec/features/buttons_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /buttons with external buttons for Submit and Reset filters WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/buttons'\n  end\n\n  it 'allows to filter by Archived' do\n    select 'yes', from: 'grid_f_archived'\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'grid_f_archived'\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter by Ttile' do\n    fill_in('grid_f_title', with: 'ed')\n\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n    expect(page).to have_content('sed impedit iste')\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter by Description' do\n    fill_in('grid_f_description', with: 've')\n\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n\n    expect(page).to have_content('Vero sit voluptate sed tempora et provident sequi nihil.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n    expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter by multiple columns' do\n    fill_in('grid_f_description', with: 'v')\n    fill_in('grid_f_title', with: 's')\n    select 'no', from: 'grid_f_archived'\n\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/csv_and_detached_filters_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /csv_and_detached_filters with external buttons and the button \"Export to CSV\" WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/csv_and_detached_filters'\n  end\n\n  include_examples 'detached_filters'\nend\n"
  },
  {
    "path": "spec/features/csv_export_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /csv_export with enabled CSV export WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/csv_export'\n  end\n\n  it 'allows to export csv' do\n    skip \"This test should be run with BROWSER=y in environment\" unless ENV['BROWSER']\n    button = find(:css, 'button.wg-external-csv-export-button')\n    button.click\n    expect(DownloadHelpers::download_content)\n        .to start_with('ID;Title;Priority;Status;Project Name;')\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_filter_params_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_filter_params with helper :wice_grid_custom_filter_params WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/custom_filter_params'\n  end\n\n  it 'renders a grid with the project custom filter activated to Ultimate Website' do\n    click_on 'Ultimate Website'\n    within '.pagination_status' do\n      expect(page).to have_content('1-18 / 18')\n    end\n  end\n\n  it 'renders a grid with the project custom filter activated to Super Game' do\n    click_on 'Super Game'\n    within '.pagination_status' do\n      expect(page).to have_content('1-17 / 17')\n    end\n  end\n\n  it 'renders a grid with the project custom filter activated to Divine Firmware' do\n    click_on 'Divine Firmware'\n    within '.pagination_status' do\n      expect(page).to have_content('1-15 / 15')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_filters1_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_filters1 with one table and custom filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/custom_filters1'\n  end\n\n  it 'shows all options' do\n    expect(page).to have_select('g1_f_status', options: %w(-- Development Testing Production))\n    expect(page).to have_select('g2_f_status', options: %w(-- Development Testing Production))\n    expect(page).to have_select('g3_f_status', options: %w(-- development testing production))\n    expect(page).to have_select('g4_f_status', options: %w(-- development testing production))\n  end\n\n  it 'allows to expand/collapse' do\n    find(:css, '#g1 .expand-multi-select-icon').click\n    find(:css, '#g1 .collapse-multi-select-icon').click\n    find(:css, '#g1 .expand-multi-select-icon').click\n\n    find(:css, '#g2 .expand-multi-select-icon').click\n    find(:css, '#g2 .collapse-multi-select-icon').click\n    find(:css, '#g2 .expand-multi-select-icon').click\n\n    find(:css, '#g3 .expand-multi-select-icon').click\n    find(:css, '#g3 .collapse-multi-select-icon').click\n    find(:css, '#g3 .expand-multi-select-icon').click\n\n    find(:css, '#g4 .expand-multi-select-icon').click\n    find(:css, '#g4 .collapse-multi-select-icon').click\n    find(:css, '#g4 .expand-multi-select-icon').click\n  end\n\n  it 'allows to filter by custom filter' do\n    select 'Development', from: 'g1_f_status'\n    find(:css, '#g1_submit_grid_icon').click\n    expect(page).to have_selector('#g1 .pagination_status', text: '1-3 / 3')\n\n    select 'Development', from: 'g2_f_status'\n    find(:css, '#g2_submit_grid_icon').click\n    expect(page).to have_selector('#g1 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g2 .pagination_status', text: '1-3 / 3')\n\n    select 'development', from: 'g3_f_status'\n    find(:css, '#g3_submit_grid_icon').click\n    expect(page).to have_selector('#g1 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g2 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g3 .pagination_status', text: '1-3 / 3')\n\n    select 'development', from: 'g4_f_status'\n    find(:css, '#g4_submit_grid_icon').click\n    expect(page).to have_selector('#g1 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g2 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g3 .pagination_status', text: '1-3 / 3')\n    expect(page).to have_selector('#g4 .pagination_status', text: '1-3 / 3')\n  end\n\n  it 'allows to filter by custom filter with multiselect' do\n    find(:css, '#g1 .expand-multi-select-icon').click\n\n    select('Testing', from: 'g1_f_status')\n    select('Production', from: 'g1_f_status')\n\n    find(:css, '#g1_submit_grid_icon').click\n\n    within '#g1 .pagination_status' do\n      expect(page).to have_content('1-5 / 8')\n    end\n\n    ###\n    find(:css, '#g2 .expand-multi-select-icon').click\n\n    select('Testing', from: 'g2_f_status')\n    select('Production', from: 'g2_f_status')\n\n    find(:css, '#g2_submit_grid_icon').click\n\n    within '#g2 .pagination_status' do\n      expect(page).to have_content('1-5 / 8')\n    end\n\n    ###\n    find(:css, '#g3 .expand-multi-select-icon').click\n\n    select('testing', from: 'g3_f_status')\n    select('production', from: 'g3_f_status')\n\n    find(:css, '#g3_submit_grid_icon').click\n\n    within '#g3 .pagination_status' do\n      expect(page).to have_content('1-5 / 8')\n    end\n\n    ###\n    find(:css, '#g4 .expand-multi-select-icon').click\n\n    select('testing', from: 'g4_f_status')\n    select('production', from: 'g4_f_status')\n\n    find(:css, '#g4_submit_grid_icon').click\n\n    within '#g4 .pagination_status' do\n      expect(page).to have_content('1-5 / 8')\n    end\n\n    ##\n\n    find(:css, '#g1 .collapse-multi-select-icon').click\n    select 'Testing', from: 'g1_f_status'\n    find(:css, '#g1_submit_grid_icon').click\n    within '#g1 .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    find(:css, '#g2 .collapse-multi-select-icon').click\n    select 'Testing', from: 'g2_f_status'\n    find(:css, '#g2_submit_grid_icon').click\n    within '#g2 .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    find(:css, '#g3 .collapse-multi-select-icon').click\n    select 'testing', from: 'g3_f_status'\n    find(:css, '#g3_submit_grid_icon').click\n    within '#g3 .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    find(:css, '#g4 .collapse-multi-select-icon').click\n    select 'testing', from: 'g4_f_status'\n    find(:css, '#g4_submit_grid_icon').click\n    within '#g4 .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_filters2_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_filters2 with joined tables and custom filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/custom_filters2'\n  end\n\n  it 'shows all options' do\n    expect(page).to have_select('grid_f_priorities_name', options: %w(-- Anecdotic High Low Normal Urgent))\n    expect(page).to have_select('grid_f_status_id', options: %w(-- Assigned Cancelled Closed Duplicate New Postponed Resolved Started Verified))\n    expect(page).to have_select('grid_f_project_id', options: ['--', 'Divine Firmware', 'Super Game', 'Ultimate Website'])\n  end\n\n  it 'allows to filter by custom filters' do\n    first(:css, '.expand-multi-select-icon').click\n\n    select('Normal', from: 'grid_f_priorities_name')\n    select('Urgent', from: 'grid_f_priorities_name')\n\n    select 'Duplicate', from: 'grid_f_status_id'\n\n    select 'Ultimate Website', from: 'grid_f_project_id'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_filters3_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_filters3 with method chains and custom filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/custom_filters3'\n  end\n\n  it 'shows all options' do\n    expect(page).to have_select('grid_f_expected_version_id', options: %w(-- 1.0 2.0 1.2))\n    expect(page).to have_select('grid_f_versions_name', options: %w(-- 1.0 1.1 1.2 2.0 3.0 6.0 7.1 8.0 88.1 99.0))\n  end\n\n  it 'allows to filter by custom fields' do\n    first(:css, '.expand-multi-select-icon').click\n\n    select('1.0', from: 'grid_f_versions_name')\n    select('1.1', from: 'grid_f_versions_name')\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-5 / 5')\n    end\n\n    select '1.0', from: 'grid_f_expected_version_id'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_filters4_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_filters4 with allow_multiple_selection: false WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/custom_filters4'\n  end\n\n  it 'does not allow to expand custom filters' do\n    expect(page).to have_no_selector('.expand-multi-select-icon')\n    expect(page).to have_no_selector('.collapse-multi-select-icon')\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_ordering_on_calculated_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_ordering_on_calculated with sort_by: as a Proc WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/custom_ordering_on_calculated'\n  end\n\n  it 'allows to sort by the result of the Proc' do\n    within 'div#grid.wice-grid-container table.wice-grid' do\n      expect(page).to have_selector('tbody tr:first-child', text: 'New')\n\n      within 'thead' do\n        click_on 'Task Count'\n        expect(page).to have_selector('i.fa-arrow-down')\n      end\n\n      expect(page).to have_selector('tbody tr:first-child', text: 'New')\n      expect(page).to have_selector('tbody tr:first-child td.sorted', text: '3')\n\n      within 'thead' do\n        click_on 'Task Count'\n        expect(page).to have_selector('i.fa-arrow-up')\n      end\n\n      expect(page).to have_selector('tbody tr:first-child', text: 'Duplicate')\n      expect(page).to have_selector('tbody tr:first-child td.sorted', text: '10')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_ordering_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_ordering with custom_ordering in controler with Strings WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/custom_ordering'\n  end\n\n  context 'when \"statuses.name\" => \"length( ? )\"' do\n    it 'sorts by the length of the word' do\n      within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('New')\n      end\n\n      within 'div#grid.wice-grid-container table.wice-grid thead' do\n        click_on 'Status Name'\n      end\n\n      within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('Duplicate')\n      end\n    end\n  end\n\n  context 'when \"statuses.name\" => \"statuses.position\"' do\n    it 'sorts by the position of the status' do\n      within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('New')\n      end\n\n      within 'div#g2.wice-grid-container table.wice-grid thead' do\n        click_on 'Status Name'\n      end\n\n      within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('Verified')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_ordering_with_arel_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_ordering_with_arel with custom_ordering in controler with Arel WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/custom_ordering_with_arel'\n  end\n\n  context 'when \"statuses.name\" => Arel.sql(\"length( ? )\")' do\n    it 'sorts by the length of the word' do\n      within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('New')\n      end\n\n      within 'div#grid.wice-grid-container table.wice-grid thead' do\n        click_on 'Status Name'\n      end\n\n      within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('Duplicate')\n      end\n    end\n  end\n\n  context 'when \"statuses.name\" => Status.arel_table[:position]' do\n    it 'sorts by the position of the status' do\n      within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('New')\n      end\n\n      within 'div#g2.wice-grid-container table.wice-grid thead' do\n        click_on 'Status Name'\n      end\n\n      within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n        expect(page).to have_content('Verified')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_ordering_with_proc_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_ordering_with_proc with custom_ordering in controler with Procs WiceGrid', type: :request, js: true do\n  context 'when \"statuses.name\" => ->(column_name) { params[:sort_by_length] ? \"length(#{column_name})\" : column_name }' do\n    context 'with no special param' do\n      before :each do\n        visit '/custom_ordering_with_proc'\n      end\n\n      it 'sorts alphabetically' do\n        within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n          expect(page).to have_content('Assigned')\n        end\n\n        within 'div#grid.wice-grid-container table.wice-grid thead' do\n          click_on 'Status Name'\n        end\n\n        within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n          expect(page).to have_content('Verified')\n        end\n      end\n    end\n\n    context 'with the :sort_by_length param' do\n      before :each do\n        visit '/custom_ordering_with_proc?sort_by_length=1'\n      end\n\n      it 'sorts by length of the #name' do\n        within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n          expect(page).to have_content('New')\n        end\n\n        within 'div#grid.wice-grid-container table.wice-grid thead' do\n          click_on 'Status Name'\n        end\n\n        within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n          expect(page).to have_content('Duplicate')\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/custom_ordering_with_ruby_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /custom_ordering_with_ruby with custom_ordering in view with Ruby code WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/custom_ordering_with_ruby'\n  end\n\n  context 'when in the columnt sort_by: ->(status) { [status.number_of_vowels, status] }' do\n    it 'should be sorted by the number of vowels' do\n      within 'div#grid.wice-grid-container table.wice-grid' do\n        within 'tbody tr:first-child' do\n          expect(page).to have_content('New')\n        end\n\n        within 'thead' do\n          click_on 'Status Name'\n          expect(page).to have_selector('i.fa-arrow-down')\n        end\n\n        expect(page).to have_selector('tbody tr:first-child td.sorted', text: 'New')\n\n        within 'thead' do\n          click_on 'Status Name'\n          expect(page).to have_selector('i.fa-arrow-up')\n        end\n\n        expect(page).to have_selector('tbody tr:first-child td.sorted', text: 'Verified')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/dates_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /dates with filter_type: :rails_datetime_helper WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/dates'\n  end\n\n  include_examples 'sorting Title'\n  include_examples 'sorting Archived'\n  include_examples 'sorting Due Date'\n\n  include_examples 'sorting Title in all records mode'\n  include_examples 'sorting Archived in all records mode'\n  include_examples 'sorting Due Date in all records mode'\n\n  include_examples 'Archived filtering'\n  include_examples 'Title filtering'\n\n  include_examples 'Due Date datepicker filtering'\n\n  include_examples 'Added datepicker filtering'\n  include_examples 'Created At standard filtering'\n\n  it 'filters by multiple fields' do\n    select '2021', from: 'grid_f_updated_at_fr_year'\n    select 'January', from: 'grid_f_updated_at_fr_month'\n    select '8', from: 'grid_f_updated_at_fr_day'\n    select '00', from: 'grid_f_updated_at_fr_hour'\n    select '00', from: 'grid_f_updated_at_fr_minute'\n\n    select '2021', from: 'grid_f_updated_at_to_year'\n    select 'December', from: 'grid_f_updated_at_to_month'\n    select '10', from: 'grid_f_updated_at_to_day'\n    select '00', from: 'grid_f_updated_at_to_hour'\n    select '00', from: 'grid_f_updated_at_to_minute'\n\n    set_datepicker(self, 'grid_f_created_at_fr_date_placeholder', 2021, 8, 1)\n\n    set_datepicker(self, 'grid_f_created_at_to_date_placeholder', 2021, 8, 30)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    fill_in('grid_f_title', with: 'at')\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/detached_filters_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /detached_filters with detached filters WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/detached_filters'\n  end\n\n  include_examples 'detached_filters'\nend\n"
  },
  {
    "path": "spec/features/detached_filters_two_grids_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /detached_filters_two_grids with detached filters and 2 grids WiceGrid', type: :feature, js: true do\n  before :each do\n    visit '/detached_filters_two_grids'\n  end\n\n  it 'the filters are independent of each other' do\n    select 'yes', from: 'grid_f_archived'\n\n    find(:css, '.external-buttons-grid1 .wg-external-submit-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    select 'no', from: 'grid2_f_archived'\n    find(:css, '.external-buttons-grid2 .wg-external-submit-button').click\n\n    # stays the same\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 11, 1)\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2022, 11, 31)\n    find(:css, '.external-buttons-grid1 .wg-external-submit-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    set_datepicker(self, 'grid2_f_due_date_fr_date_placeholder', 2023, 0, 1)\n    set_datepicker(self, 'grid2_f_due_date_to_date_placeholder', 2023, 11, 31)\n    find(:css, '.external-buttons-grid2 .wg-external-submit-button').click\n\n    # stays the same\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-15 / 15')\n    end\n\n    find(:css, '.external-buttons-grid1 .wg-external-reset-button').click\n\n    expect(page).to have_select('grid_f_archived', selected: '--')\n    expect(page).to have_selector('#grid_f_due_date_fr_date_placeholder:not([value])')\n    expect(page).to have_selector('#grid_f_due_date_to_date_placeholder:not([value])')\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-15 / 15')\n    end\n\n    find(:css, '.external-buttons-grid2 .wg-external-reset-button').click\n\n    expect(page).to have_select('grid2_f_archived', selected: '--')\n    expect(page).to have_selector('#grid2_f_due_date_fr_date_placeholder:not([value])')\n    expect(page).to have_selector('#grid2_f_due_date_to_date_placeholder:not([value])')\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    fill_in('grid_f_title', with: 'ed')\n\n    find(:css, '.external-buttons-grid1 .wg-external-submit-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    fill_in('grid2_f_title', with: 'qui')\n\n    find(:css, '.external-buttons-grid2 .wg-external-submit-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-5 / 5')\n    end\n\n    within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    within 'div#grid2.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sequi')\n    end\n\n    fill_in('grid2_f_description', with: 'in')\n\n    find(:css, '.external-buttons-grid2 .wg-external-submit-button').click\n\n    within 'div#grid.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div#grid2.wice-grid-container .pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div#grid.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    within first(:css, 'div#grid2.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter') do\n      expect(page).to have_content('sequi')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/disable_all_filters_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /disable_all_filters with show_filters: :no as a grid parameter WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/disable_all_filters'\n  end\n\n  it 'does not render filters' do\n    expect(page).to have_no_selector('#grid_f_id_fr')\n    expect(page).to have_no_selector('#grid_f_id_to')\n    expect(page).to have_no_selector('#grid_f_description')\n    expect(page).to have_no_selector('#grid_f_created_at_fr_year')\n    expect(page).to have_no_selector('#grid_f_created_at_fr_month')\n\n    expect(page).to have_no_selector('#grid_f_created_at_to_year')\n    expect(page).to have_no_selector('#grid_f_created_at_to_month')\n\n    expect(page).to have_no_selector('#grid_f_title')\n    expect(page).to have_no_selector('#grid_f_archived')\n  end\nend\n"
  },
  {
    "path": "spec/features/hiding_checkboxes_in_action_column_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /hiding_checkboxes_in_action_column with g.action_column html_check_box: false and a block that return status.name != \"Assigned\" WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/hiding_checkboxes_in_action_column'\n  end\n\n  it 'does not render checkboxes for tasks with the Assigned status' do\n    select 'Assigned', from: 'g_f_status_id'\n    find(:css, '#g_submit_grid_icon').click\n\n    expect(page).to have_content('1-4 / 4')\n    expect(page).to have_no_selector('tbody input[type=checkbox]')\n  end\n\n  it 'allows to select rows' do\n    510.upto(520).each do |i|\n      find(:css, %(input[type=\"checkbox\"][value=\"#{i}\"])).click unless i == 519\n    end\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('Selected tasks: 510, 511, 512, 513, 514, 515, 516, 517, 518, and 520')\n  end\n\n  it 'allows to select rows with the select all button and deselect them with the deselect button' do\n    find(:css, %(.clickable.select-all)).click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('Selected tasks: 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 520, 521, 522, 523, 524, 525, and 526')\n\n    find(:css, %(.clickable.deselect-all)).click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_no_content('Selected tasks: 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 520, 521, 522, 523, 524, 525, and 526')\n  end\n\n  it 'allows to keep the state of filter inside a form' do\n  end\n\n  it 'allows to filter by ID inside a form, two limits' do\n    fill_in('g_f_id_fr', with: 507)\n    fill_in('g_f_id_to', with: 509)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('509')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n  end\n\n  it 'allows to filter by Archived inside a form' do\n    select 'yes', from: 'g_f_archived'\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'g_f_archived'\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n  end\n\n  it 'allows to filter by Added inside a form' do\n    set_datepicker(self, 'g_f_created_at_fr_date_placeholder', 2021, 5, 1)\n\n    set_datepicker(self, 'g_f_created_at_to_date_placeholder', 2021, 9, 1)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-29 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-22 22:11:12')\n    end\n  end\n\n  it 'allows to filter by Due Date' do\n    set_datepicker(self, 'g_f_due_date_fr_date_placeholder', 2022, 0, 1)\n\n    set_datepicker(self, 'g_f_due_date_to_date_placeholder', 2023, 0, 1)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-02')\n    end\n\n    set_datepicker(self, 'g_f_due_date_fr_date_placeholder', 2022, 6, 28)\n\n    set_datepicker(self, 'g_f_due_date_to_date_placeholder', 2022, 6, 31)\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    find(:css, '#g_f_due_date_fr_date_view').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-10 / 10')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    find(:css, '#g_f_due_date_to_date_view').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to negate the semantics of the text filter inside a form' do\n    fill_in('g_f_title_v', with: 'sed')\n    select 'no', from: 'g_f_archived'\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_content('sed impedit iste')\n\n    find(:css, '#g_f_title_n').click\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    expect(page).to have_no_content('sed impedit iste')\n  end\n\n  it 'allows to reload the title filter' do\n    fill_in('g_f_title_v', with: 'ed')\n\n    first(:css, 'button.btn', text: 'Process tasks').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n    expect(page).to have_content('sed impedit iste')\n  end\nend\n"
  },
  {
    "path": "spec/features/integration_with_application_view_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /integration_with_application_view with the methods #current_page_records & #all_pages_records WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/integration_with_application_view'\n  end\n\n  it 'returns records displayed on the page and throughout all pages' do\n    all_records_current_page_text = '10 records on the current page: 507, 519, 537, 540, 511, 515, 523, 524, 527, and 531'\n    all_records_all_pages_text = '50 records throughout all pages: 507, 519, 537, 540, 511, 515, 523, 524, 527, 531, 542, 551, 518, 520, 532, 535, 539, 512, 514, 516, 521, 522, 543, 544, 546, 550, 552, 510, 541, 553, 508, 513, 528, 529, 548, 556, 525, 534, 547, 555, 509, 517, 526, 536, 538, 545, 549, 530, 533, and 554'\n\n    expect(page).to have_content(all_records_current_page_text)\n    expect(page).to have_content(all_records_all_pages_text)\n\n    fill_in('g_f_title', with: 'ed')\n\n    expect(page).to have_content('2 records throughout all pages: 507 and 534')\n    expect(page).to have_content('2 records on the current page: 507 and 534')\n\n    find(:css, '#g_reset_grid_icon').click\n\n    expect(page).to have_field('g_f_title', with: '')\n    expect(page).to have_content(all_records_current_page_text)\n    expect(page).to have_content(all_records_all_pages_text)\n\n    select 'Cancelled',  from: 'g_f_status_id'\n\n    expect(page).to have_content('8 records on the current page: 511, 515, 523, 524, 527, 531, 542, and 551')\n    expect(page).to have_content('8 records throughout all pages: 511, 515, 523, 524, 527, 531, 542, and 551')\n\n    find(:css, '#g_reset_grid_icon').click\n\n    expect(page).to have_select('g_f_status_id', selected: '--')\n    expect(page).to have_content(all_records_current_page_text)\n    expect(page).to have_content(all_records_all_pages_text)\n\n    select 'no',  from: 'g_f_archived'\n\n    expect(page).to have_content('10 records on the current page: 507, 519, 537, 540, 511, 515, 523, 527, 531, and 542')\n    expect(page).to have_content('46 records throughout all pages: 507, 519, 537, 540, 511, 515, 523, 527, 531, 542, 551, 518, 520, 532, 535, 539, 512, 514, 516, 521, 522, 543, 544, 546, 552, 510, 541, 553, 508, 528, 529, 548, 556, 525, 534, 547, 555, 509, 517, 526, 536, 538, 545, 549, 530, and 554')\n  end\nend\n"
  },
  {
    "path": "spec/features/integration_with_forms_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ncontext 'On the page /integration_with_forms with another form on the page that uses the helper dump_filter_parameters_as_hidden_fields' do\n  describe '(on /integration_with_form) WiceGrid', type: :request, js: true do\n    before :each do\n      visit '/integration_with_forms'\n    end\n\n    it 'reloads the page when the value in the form is changed' do\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 46')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-4 / 4')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 46')\n      end\n    end\n\n    it 'keeps the state of an integer filter while reloading another form' do\n      fill_in('g_f_id_fr', with: 507)\n      fill_in('g_f_id_to', with: 509)\n\n      find(:css, '#g_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-3 / 3')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('0')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-3 / 3')\n      end\n    end\n\n    it 'keeps the state of a string filter while reloading another form' do\n      fill_in('g_f_title_v', with: 'ed')\n\n      find(:css, '#g_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('0')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n    end\n\n    it 'keeps the state of a string filter with negation while reloading another form' do\n      fill_in('g_f_title_v', with: 'ed')\n      find(:css, '#g_f_title_n').click\n\n      find(:css, '#g_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 44')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-4 / 4')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 44')\n      end\n    end\n\n    it 'keeps the state of a custom filter with negation while reloading another form' do\n      select 'Cancelled',  from: 'g_f_status_id'\n      select 'Super Game', from: 'g_f_project_id'\n\n      find(:css, '#g_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-4 / 4')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('0')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-4 / 4')\n      end\n    end\n\n    it 'keeps the state of a date filter  while reloading another form' do\n      set_datepicker(self, 'g_f_due_date_fr_date_placeholder', 2023, 0, 1)\n\n      set_datepicker(self, 'g_f_due_date_to_date_placeholder', 2025, 0, 1)\n\n      find(:css, '#g_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-15 / 15')\n      end\n\n      select 'View archived tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('0')\n      end\n\n      select 'View active tasks', from: 'archived'\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-15 / 15')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/joining_tables_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /joining_tables with :include in :initialize_grid to include associated tables WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/joining_tables'\n  end\n\n  it 'has filters for joined tables' do\n    expect(page).to have_field('grid[f][priorities.name]')\n    expect(page).to have_field('grid[f][statuses.name]')\n    expect(page).to have_field('grid[f][projects.name]')\n    expect(page).to have_field('grid[f][users.name]')\n  end\n\n  it 'allows to filter based on joined tables' do\n     fill_in('grid_f_priorities_name', with: 'Normal')\n     fill_in('grid_f_statuses_name', with: 'Postponed')\n     fill_in('grid_f_projects_name', with: 'Super')\n     fill_in('grid_f_users_name', with: 'Koobus')\n\n     find(:css, '#grid_submit_grid_icon').click\n\n     within '.pagination_status' do\n       expect(page).to have_content('1-1 / 1')\n     end\n\n     within first(:css, 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter') do\n       expect(page).to have_content('Normal')\n     end\n\n     within first(:css, 'div.wice-grid-container table.wice-grid tbody tr:first-child td') do\n       expect(page).to have_content('508')\n     end\n\n     within 'div.wice-grid-container table.wice-grid tbody' do\n       expect(page).to have_content('sequi')\n     end\n  end\nend\n"
  },
  {
    "path": "spec/features/localization_request_spec.rb",
    "content": "# encoding: UTF-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /localization with the proper use of I18n WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/localization'\n  end\n\n  it 'allows to switch to different languages' do\n    click_on('en')\n    expect(page).to have_content('show all')\n\n    click_on('nl')\n    expect(page).to have_content('Alle rijen tonen')\n\n    click_on('fr')\n    expect(page).to have_content('Voir tous')\n\n    click_on('is')\n    expect(page).to have_content('Sýna all')\n\n    click_on('en')\n  end\nend\n"
  },
  {
    "path": "spec/features/many_grids_on_page_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /many_grids_on_page with multiple girds on the page WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/many_grids_on_page'\n  end\n\n  it 'allows to sort independantly' do\n    within 'div#g1.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within 'div#g2.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div#g2.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Accusamus voluptas sunt deleniti iusto dolorem repudiandae.')\n    end\n  end\n\n  it 'allows to paginate independantly' do\n    within '#g1 ul.pagination' do\n      click_link '2'\n    end\n\n    expect(page).to have_selector('#g1 ul.pagination li.active', text: '2')\n\n    within '#g2 ul.pagination' do\n      click_link '3'\n    end\n\n    expect(page).to have_selector('#g2 ul.pagination li.active', text: '3')\n  end\n\n  it 'allows to show all records independantly for the two grids' do\n    within '#g1' do\n      click_on 'show all'\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid' do\n      expect(page).to have_selector('a.wg-back-to-pagination-link')\n    end\n\n    within '#g1 .pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within '#g2 .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it 'allows to filter independantly' do\n    fill_in('g1_f_description', with: 've')\n\n    find(:css, '#g1_submit_grid_icon').click\n\n    within '#g1 .pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n\n    fill_in('g2_f_description', with: 'voluptas')\n\n    find(:css, '#g2_submit_grid_icon').click\n\n    within '#g2 .pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    within 'div#g2.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Accusamus voluptas sunt deleniti iusto dolorem repudiandae.')\n    end\n\n    within '#g1 .pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div#g1.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/negation_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /negation with negation: true WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/negation'\n  end\n\n  it 'allows to negate the semantics of the filter for the field' do\n    fill_in('grid_f_title_v', with: 'sed')\n    select 'no', from: 'grid_f_archived'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    expect(page).to have_content('sed impedit iste')\n    expect(page).to have_no_content('ut ipsum excepturi')\n\n    find(:css, '#grid_f_title_n').click\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    expect(page).to have_no_content('sed impedit iste')\n    expect(page).to have_content('ut ipsum excepturi')\n  end\nend\n"
  },
  {
    "path": "spec/features/no_records_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ncontext 'On the page /no_records when there is no records to show' do\n  describe 'with the grid helper :blank_slate WiceGrid', type: :request, js: true do\n    before :each do\n      visit '/no_records'\n    end\n\n    it 'allows to show the message \"No Records\" in a block for example 1' do\n      within '.example1' do\n        expect(page).to have_content('No records found')\n      end\n    end\n\n    it 'allows to show the message \"No Records\" in a block for example 2' do\n      within '.example2' do\n        expect(page).to have_content('No records found')\n      end\n    end\n\n    it 'allows to show the message \"No Records\" in a block for example 3' do\n      within '.example3' do\n        expect(page).to have_content('No records found')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/numeric_filters_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /numeric_filters with filter_type: :range WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/numeric_filters'\n  end\n\n  include_examples 'ID filtering, range'\n  include_examples 'ID two limits filtering'\nend\n"
  },
  {
    "path": "spec/features/resultset_processings2_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /resultset_processings2 with the helper :with_resultset that defines a callback on a resultset as an ActiveRelation', type: :request, js: true do\n  describe 'WiceGrid' do\n    before :each do\n      visit '/resultset_processings2'\n    end\n\n    it 'shows records displayed on all pages' do\n      find(:css, '#process').click\n      expect(page).to have_content('50 records on all pages: 507, 519, 537, 540, 511, 515, 523, 524, 527, 531, 542, 551, 518, 520, 532, 535, 539, 512, 514, 516, 521, 522, 543, 544, 546, 550, 552, 510, 541, 553, 508, 513, 528, 529, 548, 556, 525, 534, 547, 555, 509, 517, 526, 536, 538, 545, 549, 530, 533, and 554')\n    end\n\n    it 'shows records displayed on all pages with a text filter selection' do\n      fill_in('g_f_title', with: 'ed')\n      expect(page).to have_content('1-2 / 2')\n      find(:css, '#process').click\n      expect(page).to have_content('2 records on all pages: 507 and 534')\n    end\n\n    it 'shows records displayed on all pages with a custom filter selection' do\n      select 'Cancelled',  from: 'g_f_status_id'\n      expect(page).to have_content('1-5 / 8')\n      find(:css, '#process').click\n      expect(page).to have_content('8 records on all pages: 511, 515, 523, 524, 527, 531, 542, and 551')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/resultset_processings_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /resultset_processings with the helper :with_paginated_resultset that defines a callback on a resultset as an Array', type: :request, js: true do\n  before :each do\n    visit '/resultset_processings'\n  end\n\n  describe 'the callback' do\n    it 'returns the records displayed on the page' do\n      expect(page).to have_content('10 records on the current page: 507, 519, 537, 540, 511, 515, 523, 524, 527, and 531')\n    end\n  end\n\n  describe 'WiceGrid' do\n    it 'shows records displayed on all pages with a text filter selection' do\n      fill_in('g_f_title', with: 'ed')\n      expect(page).to have_content('1-2 / 2')\n      expect(page).to have_content('2 records on the current page: 507 and 534')\n    end\n\n    it 'shows records displayed on all pages with a filter selection' do\n      select 'no',  from: 'g_f_archived'\n      expect(page).to have_content('1-10 / 46')\n      expect(page).to have_content('10 records on the current page: 507, 519, 537, 540, 511, 515, 523, 527, 531, and 542')\n    end\n\n    it 'shows records displayed on all pages with a custom filter selection' do\n      select 'Cancelled',  from: 'g_f_status_id'\n      expect(page).to have_content('1-8 / 8')\n      expect(page).to have_content('8 records on the current page: 511, 515, 523, 524, 527, 531, 542, and 551')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/saved_queries_request_spec.rb",
    "content": "# encoding: utf-8\nrequire 'acceptance_helper'\n\ndescribe 'On the page /saved_queries when saved queries are configured WiceGrid', type: :request, js: true do\n  before :each do\n    visit '/saved_queries'\n  end\n\n  def delete_all_saved_queries(context)\n    while delete_link = context.find(:css, '.wice-grid-delete-query')\n      delete_link.click\n      expect(page).to have_selector('#grid_notification_messages', text: 'Saved query deleted.')\n    end\n  rescue Capybara::ElementNotFound\n    true\n  end\n\n  it 'allows to filter by Added' do\n    check_saved_query = lambda do\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 29')\n      end\n\n      within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n        expect(page).to have_content('2021-08-13 22:11:12')\n      end\n    end\n\n    delete_all_saved_queries self\n\n    set_datepicker(self, 'grid_f_created_at_fr_date_placeholder', 2021, 5, 1)\n\n    set_datepicker(self, 'grid_f_created_at_to_date_placeholder', 2021, 9, 1)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-08-13 22:11:12')\n    end\n\n    check_saved_query.call\n\n    fill_in('grid_saved_query_name', with: 'test query 1')\n    click_on 'Save the state of filters'\n\n    expect(page).to have_content('Query saved.')\n    expect(page).to have_content('test query 1')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    expect(page).to have_content('test query 1')\n\n    find(:css, '.wice-grid-query-load-link[title=\"Load query test query 1\"]').click\n\n    check_saved_query.call\n\n    within '.wice-grid-container' do\n      expect(page).to have_content('test query 1')\n    end\n\n    delete_all_saved_queries self\n    expect(page).to have_content('Saved query deleted.')\n  end\n\n  it 'allows to filter by Archived and Project Name' do\n    check_saved_query = lambda do\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      within first(:css, 'td.active-filter') do\n        expect(page).to have_content('Ultimate Website')\n      end\n    end\n\n    delete_all_saved_queries self\n\n    select 'yes', from: 'grid_f_archived'\n    select 'Ultimate Website', from: 'grid_f_project_id'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    check_saved_query.call\n\n    fill_in('grid_saved_query_name', with: 'test query 2')\n    click_on 'Save the state of filters'\n\n    expect(page).to have_content('Query saved.')\n    expect(page).to have_content('test query 2')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n\n    expect(page).to have_content('test query 2')\n\n    find(:css, '.wice-grid-query-load-link[title=\"Load query test query 2\"]').click\n\n    check_saved_query.call\n\n    within '.wice-grid-container' do\n      expect(page).to have_content('test query 2')\n    end\n\n    delete_all_saved_queries self\n    expect(page).to have_content('Saved query deleted.')\n  end\nend\n"
  },
  {
    "path": "spec/features/shared.rb",
    "content": "# encoding: utf-8\nshared_examples 'basic task table specs' do\n  it 'is present on the page' do\n    expect(page).to have_selector('div.wice-grid-container table.wice-grid')\n  end\n\n  it 'has \"show all\" link' do\n    within 'div.wice-grid-container table.wice-grid' do\n      expect(page).to have_selector('a.wg-show-all-link')\n    end\n  end\n\n  it 'allows to navigate through the pages' do\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 50')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '3'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('3')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('41-50 / 50')\n    end\n  end\n\n  it 'shows the pagination status with page 1 as the current page' do\n    within 'div.wice-grid-container table.wice-grid' do\n      expect(page).to have_selector('div.pagination')\n\n      within 'div.pagination' do\n        expect(page).to have_selector('li.active')\n        within 'li.active' do\n          expect(page).to have_content('1')\n        end\n\n        expect(page).to have_content('2')\n        expect(page).to have_content('3')\n        expect(page).to have_no_content('4')\n      end\n    end\n  end\nend\n\nshared_examples 'show all and back' do\n  it 'shows all records when the button \"show all\" is clicked' do\n    click_on 'show all'\n\n    within 'div.wice-grid-container table.wice-grid' do\n      expect(page).to have_selector('a.wg-back-to-pagination-link')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    click_on 'back to paginated view'\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'names of columns' do\n  it 'shows the names of columns' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      expect(page).to have_content('ID')\n      expect(page).to have_content('Title')\n      expect(page).to have_content('Description')\n      expect(page).to have_content('Archived')\n      expect(page).to have_content('Added')\n    end\n  end\nend\n\nshared_examples 'sorting ID' do\n  it 'allows to sort column ID' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('ID')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('556')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('ID')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('ID')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('527')\n    end\n  end\nend\n\nshared_examples 'sorting Title' do\n  it 'allows to sort column Title' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('voluptatum non')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('quia dignissimos maiores')\n    end\n  end\nend\n\nshared_examples 'sorting Description' do\n  it 'allows to sort column Description' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Accusamus voluptas sunt deleniti iusto dolorem repudiandae.')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Voluptate occaecati quisquam in et qui nostrum eos minus.')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Iure tenetur cum aut optio et quia similique debitis.')\n    end\n  end\nend\n\nshared_examples 'sorting Archived' do\n  it 'allows to sort column Archived' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Archived'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Archived')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('No')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Archived'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Archived')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Yes')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Archived')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('No')\n    end\n  end\nend\n\nshared_examples 'sorting Due Date' do\n  it 'allows to sort column Due Date' do\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Due Date'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Due Date')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('2022-06-12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Due Date'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Due Date')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('2023-03-30')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.wice-grid li.active' do\n      expect(page).to have_content('2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Due Date')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('2022-12-13')\n    end\n  end\nend\n\nshared_examples 'sorting ID in all records mode' do\n  it 'allows to sort column ID' do\n    click_on 'show all'\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('ID')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('556')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('ID')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('507')\n    end\n  end\nend\n\nshared_examples 'sorting Title in all records mode' do\n  it 'allows to sort column Title' do\n    click_on 'show all'\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('ab')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Title')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('voluptatum non')\n    end\n  end\nend\n\nshared_examples 'sorting Description in all records mode' do\n  it 'allows to sort column Description' do\n    click_on 'show all'\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Accusamus voluptas sunt deleniti iusto dolorem repudiandae.')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Description')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Voluptate occaecati quisquam in et qui nostrum eos minus.')\n    end\n  end\nend\n\nshared_examples 'sorting Archived in all records mode' do\n  it 'allows to sort column Archived' do\n    click_on 'show all'\n\n    within '.pagination_status' do\n      expect(page).to have_content('back to paginated view')\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Archived'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Archived')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('No')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Archived'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Archived')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('Yes')\n    end\n  end\nend\n\nshared_examples 'sorting Due Date in all records mode' do\n  it 'allows to sort column Due Date' do\n    click_on 'show all'\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-50 / 50')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Due Date'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.asc' do\n      expect(page).to have_content('Due Date')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('2022-06-12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Due Date'\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead th.sorted a.desc' do\n      expect(page).to have_content('Due Date')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('2023-03-30')\n    end\n  end\nend\n\nMONTH_NAMES = %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)\n\n\ndef set_datepicker(context, picker, year, month, day)\n  context.find(:css, \"##{picker} .ui-datepicker-trigger\").click\n\n  year_select = context.find(:css, '.ui-datepicker-year')\n\n  year_select.select(year.to_s)\n\n  month_select = context.find(:css, '.ui-datepicker-month')\n  month_select.select(MONTH_NAMES[month])\n\n  context.within '.ui-datepicker-calendar' do\n    context.click_on(day.to_s)\n  end\nend\n\nshared_examples 'Due Date datepicker filtering' do\n  it 'allows to filter by Due Date' do\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 0, 1)\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2023, 0, 1)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-10-02')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 35')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2022-07-02')\n    end\n\n    set_datepicker(self, 'grid_f_due_date_fr_date_placeholder', 2022, 6, 28)\n\n    set_datepicker(self, 'grid_f_due_date_to_date_placeholder', 2022, 6, 31)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    find(:css, '#grid_f_due_date_fr_date_view').click\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-10 / 10')\n    end\n\n    find(:css, '#grid_f_due_date_to_date_view').click\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Added datepicker filtering' do\n  it 'allows to filter by Added' do\n    set_datepicker(self, 'grid_f_created_at_fr_date_placeholder', 2021, 5, 1)\n\n    set_datepicker(self, 'grid_f_created_at_to_date_placeholder', 2021, 9, 1)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-13 22:11:12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-29 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 29')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-09-22 22:11:12')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\n# !!!\nshared_examples 'Due Date standard filtering' do\n  it 'allows to filter by Due Date (standard filter)' do\n    select '2021', from: 'grid_f_created_at_fr_year'\n    select 'February', from: 'grid_f_created_at_fr_month'\n    select '8', from: 'grid_f_created_at_fr_day'\n    select '00', from: 'grid_f_created_at_fr_hour'\n    select '00', from: 'grid_f_created_at_fr_minute'\n\n    select '2021', from: 'grid_f_created_at_to_year'\n    select 'September', from: 'grid_f_created_at_to_month'\n    select '10', from: 'grid_f_created_at_to_day'\n    select '00', from: 'grid_f_created_at_to_hour'\n    select '00', from: 'grid_f_created_at_to_minute'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-16 / 16')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('13 Aug 22:11')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-16 / 16')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Created At standard filtering' do\n  it 'allows to filter by created_at' do\n    select '2021', from: 'grid_f_updated_at_fr_year'\n    select 'January', from: 'grid_f_updated_at_fr_month'\n    select '8', from: 'grid_f_updated_at_fr_day'\n    select '00', from: 'grid_f_updated_at_fr_hour'\n    select '00', from: 'grid_f_updated_at_fr_minute'\n\n    select '2021', from: 'grid_f_updated_at_to_year'\n    select 'December', from: 'grid_f_updated_at_to_month'\n    select '10', from: 'grid_f_updated_at_to_day'\n    select '00', from: 'grid_f_updated_at_to_hour'\n    select '00', from: 'grid_f_updated_at_to_minute'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-14 / 14')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-11-26 22:11:12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('2021-12-07 22:11:12')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-14 / 14')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Description filtering' do\n  it 'allows to filter by Description' do\n    fill_in('grid_f_description', with: 've')\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n\n    expect(page).to have_content('Vero sit voluptate sed tempora et provident sequi nihil.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-12 / 12')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n    expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'ID filtering' do\n  it 'allows to filter by ID, one limit' do\n    fill_in('grid_f_id_eq', with: 550)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-1 / 1')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('550')\n    end\n  end\nend\n\nshared_examples 'ID filtering, range' do\n  it 'allows to filter by ID, one limit' do\n    fill_in('grid_f_id_fr', with: 550)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('550')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('550')\n    end\n\n    551.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('556')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-7 / 7')\n    end\n\n    550.upto(556) do |i|\n      expect(page).to have_content(i)\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'ID two limits filtering' do\n  it 'allows to filter by ID, two limits' do\n    fill_in('grid_f_id_fr', with: 507)\n    fill_in('grid_f_id_to', with: 509)\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted.active-filter' do\n      expect(page).to have_content('507')\n    end\n\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.sorted' do\n      expect(page).to have_content('509')\n    end\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-3 / 3')\n    end\n\n    expect(page).to have_content('507')\n    expect(page).to have_content('508')\n    expect(page).to have_content('509')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Description and Title filtering' do\n  it 'allows to filter by multiple columns' do\n    fill_in('grid_f_description', with: 'v')\n    fill_in('grid_f_title', with: 's')\n    select 'no', from: 'grid_f_archived'\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Archived filtering' do\n  it 'allows to filter by Archived' do\n    select 'yes', from: 'grid_f_archived'\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', from: 'grid_f_archived'\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within(first(:css, 'td.active-filter')) do\n      expect(page).to have_content('No')\n    end\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n\nshared_examples 'Title filtering' do\n  it 'allows to filter by Title' do\n    fill_in('grid_f_title', with: 'ed')\n\n    find(:css, '#grid_submit_grid_icon').click\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n    expect(page).to have_content('sed impedit iste')\n\n    find(:css, '#grid_reset_grid_icon').click\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/shared_detached_filters.rb",
    "content": "# encoding: utf-8\nshared_examples \"detached_filters\" do\n  it \"allows to filter by Archived\" do\n    select 'yes', :from => 'grid_f_archived'\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-4 / 4')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('Yes')\n    end\n\n    select 'no', :from => 'grid_f_archived'\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    within 'ul.grid.pagination' do\n      click_link '2'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('21-40 / 46')\n    end\n\n    within first(:css, 'td.active-filter') do\n      expect(page).to have_content('No')\n    end\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it \"allows to filter by Title\" do\n    fill_in('grid_f_title', :with => 'ed')\n\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Title'\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('corporis expedita vel')\n    end\n\n    expect(page).to have_content('sed impedit iste')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-2 / 2')\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('sed impedit iste')\n    end\n\n    expect(page).to have_content('corporis expedita vel')\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\n\n  it \"allows to filter by Description\" do\n    fill_in('grid_f_description', :with => 've')\n\n    click_button('Submit')\n\n    expect(page).to have_selector('.pagination_status', text: '1-12 / 12')\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n\n    expect(page).to have_content('Vero sit voluptate sed tempora et provident sequi nihil.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    expect(page).to have_selector('.pagination_status', text: '1-12 / 12')\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'ID'\n    end\n\n    expect(page).to have_selector('.pagination_status', text: '1-12 / 12')\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    end\n\n    expect(page).to have_content('Adipisci voluptate sed esse velit.')\n    expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n\n    click_button('Reset')\n    expect(page).to have_selector('.pagination_status', text: '1-20 / 50')\n  end\n\n  it \"allows to filter by multiple columns\" do\n    fill_in('grid_f_description', :with => 'v')\n    fill_in('grid_f_title', :with => 's')\n    select 'no', :from => 'grid_f_archived'\n\n    click_button('Submit')\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    expect(page).to have_no_content('Eos qui est quis.')\n\n    within 'div.wice-grid-container table.wice-grid thead' do\n      click_on 'Description'\n    end\n\n    within 'div.wice-grid-container table.wice-grid tbody tr:first-child' do\n      expect(page).to have_content('Accusamus voluptas sunt deleniti iusto dolorem repudiandae.')\n    end\n\n    within '.pagination_status' do\n      expect(page).to have_content('1-11 / 11')\n    end\n\n    expect(page).to have_content('Inventore iure eos labore ipsum.')\n    expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n    expect(page).to have_no_content('Eos qui est quis.')\n\n    click_button('Reset')\n    within '.pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/styling_spec.rb",
    "content": "require 'acceptance_helper'\n\ndescribe \"On the page /styling with the :html helper in the grid WiceGrid\", :type => :request, :js => true do\n\n  before :each do\n    visit '/styling'\n  end\n\n  it \"allows to have custom css classes\" do\n    expect(page).to have_selector('.wice-grid-container table.wice-grid.my-grid')\n\n    expect(page).to have_selector('.wice-grid-container thead tr.wice-grid-title-row.my-header')\n  end\n\nend\n"
  },
  {
    "path": "spec/features/two_associations_spec.rb",
    "content": "require 'acceptance_helper'\n\ncontext 'On the page /two_associations when two associations referring to the same model are joined' do\n  describe \"with the help of :table_alias WiceGrid\", :type => :request, :js => true do\n    before :each do\n      visit '/two_associations'\n    end\n\n    it \"allows to filter the two associations independantly\" do\n      fill_in('grid_f_companies_name', :with => 'MNU')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      fill_in('grid_f_suppliers_projects_name', :with => 'Coders')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-1 / 1')\n      end\n\n      fill_in('grid_f_companies_name', :with => '')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      fill_in('grid_f_companies_name', :with => 'foo')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('0')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/upper_pagination_panel_request_spec.rb",
    "content": "require 'acceptance_helper'\n\ndescribe \"On the page /upper_pagination_panel with the upper_pagination_panel parameter for the grid WiceGrid\", :type => :request do\n  before :each do\n    visit '/upper_pagination_panel'\n  end\n\n  if ALL_TESTS\n    include_examples \"basic task table specs\"\n    include_examples \"names of columns\"\n  end\n\n  it \"shows the upper pagination panel\" do\n    skip \"This test should be run with BROWSER=y in environment\" unless ENV['BROWSER']\n    expect(page).to have_selector('table.wice-grid thead tr td .pagination li.active')\n\n    within 'table.wice-grid thead tr td .pagination_status' do\n      expect(page).to have_content('1-20 / 50')\n    end\n  end\nend\n"
  },
  {
    "path": "spec/features/when_filtered_spec.rb",
    "content": "require 'acceptance_helper'\n\ndescribe \"On the page /when_filtered whith the parameter show_filters: :when_filtered in grid WiceGrid\",  :js => true do\n  before :each do\n    visit '/when_filtered'\n  end\n\n  it \"hides the filter panel by default\" do\n    expect{\n      fill_in('grid_f_description', :with => 've')\n    }.to raise_error(Capybara::ElementNotFound)\n  end\n\n  context 'when the icon \"Show filter is clicked\"' do\n    before do\n      find(:css, '.wg-show-filter').click\n    end\n\n    it \"allows to filter by Description\" do\n      fill_in('grid_f_description', :with => 've')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-12 / 12')\n      end\n\n      within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n        expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n      end\n\n      expect(page).to have_content('Vero sit voluptate sed tempora et provident sequi nihil.')\n\n      within 'div.wice-grid-container table.wice-grid thead' do\n        click_on 'Description'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-12 / 12')\n      end\n\n      within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n        expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n      end\n\n      expect(page).to have_content('Adipisci voluptate sed esse velit.')\n\n      within 'div.wice-grid-container table.wice-grid thead' do\n        click_on 'ID'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-12 / 12')\n      end\n\n      expect(page).to have_content('Adipisci voluptate sed esse velit.')\n      expect(page).to have_content('Ad sunt vel maxime labore temporibus incidunt quidem.')\n\n      find(:css, '#grid_reset_grid_icon').click\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 50')\n      end\n    end\n\n    it \"allows to filter by multiple columns\" do\n      fill_in('grid_f_description', :with => 'v')\n      fill_in('grid_f_title', :with => 's')\n      select 'no', :from => 'grid_f_archived'\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-11 / 11')\n      end\n\n      expect(page).to have_content('Inventore iure eos labore ipsum.')\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n      within 'div.wice-grid-container table.wice-grid thead' do\n        click_on 'Description'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-11 / 11')\n      end\n\n      expect(page).to have_content('Inventore iure eos labore ipsum.')\n      expect(page).to have_content('Velit atque sapiente aspernatur sint fuga.')\n\n      find(:css, '#grid_reset_grid_icon').click\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 50')\n      end\n    end\n\n    it \"allows to filter by Archived\" do\n      select 'yes', :from => 'grid_f_archived'\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-4 / 4')\n      end\n\n      within first(:css, 'td.active-filter') do\n        expect(page).to have_content('Yes')\n      end\n\n      select 'no', :from => 'grid_f_archived'\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 46')\n      end\n\n      within first(:css, 'td.active-filter') do\n        expect(page).to have_content('No')\n      end\n\n      within 'ul.grid.pagination' do\n        click_link '2'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('21-40 / 46')\n      end\n\n      within first(:css, 'td.active-filter') do\n        expect(page).to have_content('No')\n      end\n\n      find(:css, '#grid_reset_grid_icon').click\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 50')\n      end\n    end\n\n    it \"allows to filter by Title\" do\n      fill_in('grid_f_title', :with => 'ed')\n\n      find(:css, '#grid_submit_grid_icon').click\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n        expect(page).to have_content('sed impedit iste')\n      end\n\n      expect(page).to have_content('corporis expedita vel')\n\n      within 'div.wice-grid-container table.wice-grid thead' do\n        click_on 'Title'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      within 'div.wice-grid-container table.wice-grid tbody tr:first-child td.active-filter' do\n        expect(page).to have_content('corporis expedita vel')\n      end\n\n      expect(page).to have_content('sed impedit iste')\n\n      within 'div.wice-grid-container table.wice-grid thead' do\n        click_on 'ID'\n      end\n\n      within '.pagination_status' do\n        expect(page).to have_content('1-2 / 2')\n      end\n\n      expect(page).to have_content('corporis expedita vel')\n      expect(page).to have_content('sed impedit iste')\n\n      find(:css, '#grid_reset_grid_icon').click\n      within '.pagination_status' do\n        expect(page).to have_content('1-20 / 50')\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/fixtures/.gitkeep",
    "content": ""
  },
  {
    "path": "spec/fixtures/companies.yml",
    "content": "---\ncompany_00005:\n  id: 5\n  name: MNU\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\ncompany_00006:\n  id: 6\n  name: SkyNet\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\ncompany_00007:\n  id: 7\n  name: Coders Unlimited\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\ncompany_00008:\n  id: 8\n  name: Shift-Command-4 Limited\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/priorities.yml",
    "content": "---\npriority_00006:\n  id: 6\n  name: Urgent\n  position: 0\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\npriority_00007:\n  id: 7\n  name: High\n  position: 1\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\npriority_00008:\n  id: 8\n  name: Normal\n  position: 2\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\npriority_00009:\n  id: 9\n  name: Low\n  position: 3\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\npriority_00010:\n  id: 10\n  name: Anecdotic\n  position: 4\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/project_roles.yml",
    "content": "---\nproject_role_00005:\n  id: 5\n  name: Manager\n  can_close_tasks: true\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nproject_role_00006:\n  id: 6\n  name: Customer\n  can_close_tasks: true\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nproject_role_00007:\n  id: 7\n  name: Developer\n  can_close_tasks: false\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nproject_role_00008:\n  id: 8\n  name: QualityAssurance\n  can_close_tasks: false\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/projects.yml",
    "content": "---\nproject_00004:\n  id: 4\n  name: Ultimate Website\n  customer_id: 5\n  supplier_id: 7\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nproject_00005:\n  id: 5\n  name: Super Game\n  customer_id: 5\n  supplier_id: 8\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nproject_00006:\n  id: 6\n  name: Divine Firmware\n  customer_id: 6\n  supplier_id: 7\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/statuses.yml",
    "content": "---\nstatus_00010:\n  id: 10\n  name: New\n  position: 0\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00011:\n  id: 11\n  name: Assigned\n  position: 1\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00012:\n  id: 12\n  name: Started\n  position: 2\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00013:\n  id: 13\n  name: Resolved\n  position: 3\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00014:\n  id: 14\n  name: Duplicate\n  position: 4\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00015:\n  id: 15\n  name: Cancelled\n  position: 5\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00016:\n  id: 16\n  name: Postponed\n  position: 6\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00017:\n  id: 17\n  name: Closed\n  position: 7\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nstatus_00018:\n  id: 18\n  name: Verified\n  position: 8\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/tasks.yml",
    "content": "---\ntask_00507:\n  id: 507\n  title: sed impedit iste\n  description: Velit atque sapiente aspernatur sint fuga.\n  created_by_id: 13\n  project_id: 4\n  due_date: 2023-01-26\n  priority_id: \n  status_id: 11\n  relevant_version_id: 15\n  expected_version_id: 14\n  estimated_time: 2.0\n  archived: false\n  created_at: 2021-09-13 22:11:12.000000000 Z\n  updated_at: 2022-01-14 22:11:12.000000000 Z\ntask_00508:\n  id: 508\n  title: sequi\n  description: In recusandae quibusdam consequatur odio dicta sit.\n  created_by_id: 21\n  project_id: 5\n  due_date: 2022-07-29\n  priority_id: 8\n  status_id: 16\n  relevant_version_id: 17\n  expected_version_id: 18\n  estimated_time: 10.0\n  archived: false\n  created_at: 2021-11-09 22:11:12.000000000 Z\n  updated_at: 2021-11-26 22:11:12.000000000 Z\ntask_00509:\n  id: 509\n  title: ab\n  description: Repudiandae voluptatibus sed perferendis quia sit voluptates ea delectus.\n  created_by_id: 14\n  project_id: 5\n  due_date: 2023-03-18\n  priority_id: 10\n  status_id: 12\n  relevant_version_id: \n  expected_version_id: 18\n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-08-13 22:11:12.000000000 Z\n  updated_at: 2021-12-07 22:11:12.000000000 Z\ntask_00510:\n  id: 510\n  title: sint voluptatem\n  description: Eos qui est quis.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2022-07-02\n  priority_id: 7\n  status_id: 10\n  relevant_version_id: 22\n  expected_version_id: 21\n  estimated_time: 19.0\n  archived: false\n  created_at: 2021-09-25 22:11:12.000000000 Z\n  updated_at: 2022-02-19 22:11:12.000000000 Z\ntask_00511:\n  id: 511\n  title: est maiores delectus\n  description: In occaecati at facilis ut consectetur dolorum officia.\n  created_by_id: 21\n  project_id: 5\n  due_date: 2022-11-07\n  priority_id: 8\n  status_id: 15\n  relevant_version_id: 18\n  expected_version_id: \n  estimated_time: 18.0\n  archived: false\n  created_at: 2021-10-25 22:11:12.000000000 Z\n  updated_at: 2021-11-25 22:11:12.000000000 Z\ntask_00512:\n  id: 512\n  title: dolore ad\n  description: Asperiores odio repellendus ut voluptate.\n  created_by_id: 18\n  project_id: 5\n  due_date: 2023-01-24\n  priority_id: 6\n  status_id: 14\n  relevant_version_id: \n  expected_version_id: 19\n  estimated_time: 4.0\n  archived: false\n  created_at: 2021-10-30 22:11:12.000000000 Z\n  updated_at: 2022-02-11 22:11:12.000000000 Z\ntask_00513:\n  id: 513\n  title: nihil\n  description: Ut ex ipsam a.\n  created_by_id: 14\n  project_id: 5\n  due_date: 2022-12-24\n  priority_id: 8\n  status_id: 16\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 13.0\n  archived: true\n  created_at: 2021-08-18 22:11:12.000000000 Z\n  updated_at: 2022-01-05 22:11:12.000000000 Z\ntask_00514:\n  id: 514\n  title: quia dignissimos maiores\n  description: Mollitia aliquam ratione perferendis reprehenderit dolor quod.\n  created_by_id: 17\n  project_id: 6\n  due_date: 2022-12-14\n  priority_id: 6\n  status_id: 14\n  relevant_version_id: 20\n  expected_version_id: \n  estimated_time: 6.0\n  archived: false\n  created_at: 2021-08-11 22:11:12.000000000 Z\n  updated_at: 2021-12-19 22:11:12.000000000 Z\ntask_00515:\n  id: 515\n  title: voluptatum non\n  description: Vero sit voluptate sed tempora et provident sequi nihil.\n  created_by_id: 22\n  project_id: 5\n  due_date: 2022-11-05\n  priority_id: 7\n  status_id: 15\n  relevant_version_id: \n  expected_version_id: 19\n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-09-29 22:11:12.000000000 Z\n  updated_at: 2022-02-02 22:11:12.000000000 Z\ntask_00516:\n  id: 516\n  title: dolorem\n  description: Et vel ipsa illo aut error voluptatem autem qui.\n  created_by_id: 22\n  project_id: 5\n  due_date: 2023-01-14\n  priority_id: 7\n  status_id: 14\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 20.0\n  archived: false\n  created_at: 2021-11-08 22:11:12.000000000 Z\n  updated_at: 2021-11-29 22:11:12.000000000 Z\ntask_00517:\n  id: 517\n  title: repellat voluptates\n  description: Commodi et et nisi ipsam corporis.\n  created_by_id: 16\n  project_id: 6\n  due_date: 2022-06-30\n  priority_id: 10\n  status_id: 12\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 10.0\n  archived: false\n  created_at: 2021-09-06 22:11:12.000000000 Z\n  updated_at: 2021-12-18 22:11:12.000000000 Z\ntask_00518:\n  id: 518\n  title: sunt et ipsa\n  description: Id sunt et pariatur quis quaerat veritatis distinctio voluptate.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2023-01-27\n  priority_id: 7\n  status_id: 17\n  relevant_version_id: \n  expected_version_id: 21\n  estimated_time: 17.0\n  archived: false\n  created_at: 2021-08-30 22:11:12.000000000 Z\n  updated_at: 2022-01-30 22:11:12.000000000 Z\ntask_00519:\n  id: 519\n  title: consequatur minus et\n  description: Corporis facilis eos magni repellendus.\n  created_by_id: 17\n  project_id: 4\n  due_date: 2022-11-22\n  priority_id: 9\n  status_id: 11\n  relevant_version_id: 12\n  expected_version_id: 12\n  estimated_time: 12.0\n  archived: false\n  created_at: 2021-09-22 22:11:12.000000000 Z\n  updated_at: 2022-01-15 22:11:12.000000000 Z\ntask_00520:\n  id: 520\n  title: odit\n  description: Id sint quidem esse blanditiis.\n  created_by_id: 14\n  project_id: 6\n  due_date: 2022-11-18\n  priority_id: \n  status_id: 17\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-09-28 22:11:12.000000000 Z\n  updated_at: 2021-11-21 22:11:12.000000000 Z\ntask_00521:\n  id: 521\n  title: tempora\n  description: Assumenda illo quia molestiae nihil quis nulla.\n  created_by_id: 18\n  project_id: 5\n  due_date: 2022-12-25\n  priority_id: 9\n  status_id: 14\n  relevant_version_id: \n  expected_version_id: 18\n  estimated_time: 13.0\n  archived: false\n  created_at: 2021-09-03 22:11:12.000000000 Z\n  updated_at: 2021-12-28 22:11:12.000000000 Z\ntask_00522:\n  id: 522\n  title: rerum\n  description: Aut et eos nostrum et recusandae ab.\n  created_by_id: 18\n  project_id: 4\n  due_date: 2023-01-07\n  priority_id: 6\n  status_id: 14\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 17.0\n  archived: false\n  created_at: 2021-09-25 22:11:12.000000000 Z\n  updated_at: 2022-01-26 22:11:12.000000000 Z\ntask_00523:\n  id: 523\n  title: dolores delectus\n  description: Iure tenetur cum aut optio et quia similique debitis.\n  created_by_id: 19\n  project_id: 4\n  due_date: 2022-10-11\n  priority_id: \n  status_id: 15\n  relevant_version_id: \n  expected_version_id: 14\n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-11-16 22:11:12.000000000 Z\n  updated_at: 2021-11-20 22:11:12.000000000 Z\ntask_00524:\n  id: 524\n  title: quod dolor inventore\n  description: Atque omnis fugiat totam dolorum.\n  created_by_id: 13\n  project_id: 4\n  due_date: 2022-12-29\n  priority_id: 9\n  status_id: 15\n  relevant_version_id: 16\n  expected_version_id: 15\n  estimated_time: 8.0\n  archived: true\n  created_at: 2021-10-07 22:11:12.000000000 Z\n  updated_at: 2022-01-25 22:11:12.000000000 Z\ntask_00525:\n  id: 525\n  title: at et\n  description: Aut unde porro veritatis debitis sint.\n  created_by_id: 18\n  project_id: 4\n  due_date: 2022-11-05\n  priority_id: \n  status_id: 13\n  relevant_version_id: 12\n  expected_version_id: 14\n  estimated_time: 17.0\n  archived: false\n  created_at: 2021-09-16 22:11:12.000000000 Z\n  updated_at: 2021-12-08 22:11:12.000000000 Z\ntask_00526:\n  id: 526\n  title: quibusdam temporibus et\n  description: Amet laudantium aut labore ut consequatur sunt.\n  created_by_id: 15\n  project_id: 4\n  due_date: 2022-08-14\n  priority_id: \n  status_id: 12\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 14.0\n  archived: false\n  created_at: 2021-11-05 22:11:12.000000000 Z\n  updated_at: 2022-01-22 22:11:12.000000000 Z\ntask_00527:\n  id: 527\n  title: voluptates corporis velit\n  description: Ratione ea amet quam enim illo.\n  created_by_id: 14\n  project_id: 5\n  due_date: 2023-03-24\n  priority_id: \n  status_id: 15\n  relevant_version_id: \n  expected_version_id: 18\n  estimated_time: 3.0\n  archived: false\n  created_at: 2021-10-11 22:11:12.000000000 Z\n  updated_at: 2022-01-06 22:11:12.000000000 Z\ntask_00528:\n  id: 528\n  title: omnis perferendis et\n  description: Aut nobis quod dolore.\n  created_by_id: 16\n  project_id: 6\n  due_date: 2022-07-02\n  priority_id: 9\n  status_id: 16\n  relevant_version_id: \n  expected_version_id: 21\n  estimated_time: 19.0\n  archived: false\n  created_at: 2021-10-04 22:11:12.000000000 Z\n  updated_at: 2021-11-22 22:11:12.000000000 Z\ntask_00529:\n  id: 529\n  title: dolor et corporis\n  description: Voluptate occaecati quisquam in et qui nostrum eos minus.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2022-08-19\n  priority_id: 6\n  status_id: 16\n  relevant_version_id: 22\n  expected_version_id: \n  estimated_time: 16.0\n  archived: false\n  created_at: 2021-09-27 22:11:12.000000000 Z\n  updated_at: 2022-01-26 22:11:12.000000000 Z\ntask_00530:\n  id: 530\n  title: sint adipisci\n  description: Consequatur omnis similique quidem quia a.\n  created_by_id: 22\n  project_id: 5\n  due_date: 2023-01-16\n  priority_id: 10\n  status_id: 18\n  relevant_version_id: \n  expected_version_id: 19\n  estimated_time: 16.0\n  archived: false\n  created_at: 2021-09-09 22:11:12.000000000 Z\n  updated_at: 2021-11-26 22:11:12.000000000 Z\ntask_00531:\n  id: 531\n  title: veniam tempora\n  description: Rerum magni similique eum architecto ea aspernatur.\n  created_by_id: 18\n  project_id: 5\n  due_date: 2022-10-13\n  priority_id: 6\n  status_id: 15\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 12.0\n  archived: false\n  created_at: 2021-08-18 22:11:12.000000000 Z\n  updated_at: 2022-01-30 22:11:12.000000000 Z\ntask_00532:\n  id: 532\n  title: ducimus\n  description: Tempore nesciunt ullam consequatur est magnam deserunt voluptatem nam.\n  created_by_id: 21\n  project_id: 5\n  due_date: 2022-06-12\n  priority_id: \n  status_id: 17\n  relevant_version_id: 18\n  expected_version_id: \n  estimated_time: 4.0\n  archived: false\n  created_at: 2021-11-05 22:11:12.000000000 Z\n  updated_at: 2022-01-04 22:11:12.000000000 Z\ntask_00533:\n  id: 533\n  title: fugit unde eligendi\n  description: Et nobis occaecati impedit fugit.\n  created_by_id: 13\n  project_id: 4\n  due_date: 2022-12-10\n  priority_id: \n  status_id: 18\n  relevant_version_id: 14\n  expected_version_id: 12\n  estimated_time: 1.0\n  archived: true\n  created_at: 2021-11-09 22:11:12.000000000 Z\n  updated_at: 2022-01-30 22:11:12.000000000 Z\ntask_00534:\n  id: 534\n  title: corporis expedita vel\n  description: Dolore quibusdam et eos earum expedita veniam excepturi.\n  created_by_id: 13\n  project_id: 4\n  due_date: 2022-11-19\n  priority_id: \n  status_id: 13\n  relevant_version_id: \n  expected_version_id: 12\n  estimated_time: 10.0\n  archived: false\n  created_at: 2021-11-13 22:11:12.000000000 Z\n  updated_at: 2022-01-23 22:11:12.000000000 Z\ntask_00535:\n  id: 535\n  title: temporibus et\n  description: Quia quasi maiores suscipit fugit ipsam.\n  created_by_id: 22\n  project_id: 5\n  due_date: 2022-07-15\n  priority_id: 9\n  status_id: 17\n  relevant_version_id: 17\n  expected_version_id: \n  estimated_time: 20.0\n  archived: false\n  created_at: 2021-09-23 22:11:12.000000000 Z\n  updated_at: 2022-02-16 22:11:12.000000000 Z\ntask_00536:\n  id: 536\n  title: et\n  description: Est et mollitia sed et possimus.\n  created_by_id: 23\n  project_id: 4\n  due_date: 2023-03-29\n  priority_id: 8\n  status_id: 12\n  relevant_version_id: \n  expected_version_id: 15\n  estimated_time: 10.0\n  archived: false\n  created_at: 2021-11-15 22:11:12.000000000 Z\n  updated_at: 2021-12-31 22:11:12.000000000 Z\ntask_00537:\n  id: 537\n  title: ut ipsum excepturi\n  description: Cumque repellat dignissimos voluptatem aspernatur perspiciatis quis.\n  created_by_id: 22\n  project_id: 4\n  due_date: 2022-11-09\n  priority_id: \n  status_id: 11\n  relevant_version_id: 12\n  expected_version_id: \n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-10-02 22:11:12.000000000 Z\n  updated_at: 2021-12-17 22:11:12.000000000 Z\ntask_00538:\n  id: 538\n  title: commodi neque aut\n  description: Vel magnam minus aut modi voluptatem consequuntur molestias.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2022-07-11\n  priority_id: 10\n  status_id: 12\n  relevant_version_id: \n  expected_version_id: 22\n  estimated_time: 20.0\n  archived: false\n  created_at: 2021-09-10 22:11:12.000000000 Z\n  updated_at: 2022-02-11 22:11:12.000000000 Z\ntask_00539:\n  id: 539\n  title: mollitia veritatis\n  description: Cum dolorum iusto quia.\n  created_by_id: 16\n  project_id: 4\n  due_date: 2023-01-29\n  priority_id: 10\n  status_id: 17\n  relevant_version_id: 16\n  expected_version_id: 14\n  estimated_time: 6.0\n  archived: false\n  created_at: 2021-08-11 22:11:12.000000000 Z\n  updated_at: 2021-12-24 22:11:12.000000000 Z\ntask_00540:\n  id: 540\n  title: inventore architecto aut\n  description: Possimus quia dolores tenetur voluptatem ipsa ipsum est.\n  created_by_id: 13\n  project_id: 4\n  due_date: 2022-12-13\n  priority_id: 6\n  status_id: 11\n  relevant_version_id: 14\n  expected_version_id: \n  estimated_time: 14.0\n  archived: false\n  created_at: 2021-08-22 22:11:12.000000000 Z\n  updated_at: 2021-11-30 22:11:12.000000000 Z\ntask_00541:\n  id: 541\n  title: fuga dolorem placeat\n  description: Molestiae voluptates accusamus quo aut rerum et eum.\n  created_by_id: 24\n  project_id: 5\n  due_date: 2023-03-30\n  priority_id: \n  status_id: 10\n  relevant_version_id: 17\n  expected_version_id: 19\n  estimated_time: 7.0\n  archived: false\n  created_at: 2021-08-14 22:11:12.000000000 Z\n  updated_at: 2022-01-30 22:11:12.000000000 Z\ntask_00542:\n  id: 542\n  title: accusantium\n  description: Odio ut ipsam aut dolorem in quod dicta hic.\n  created_by_id: 16\n  project_id: 4\n  due_date: 2022-12-31\n  priority_id: 10\n  status_id: 15\n  relevant_version_id: 12\n  expected_version_id: 12\n  estimated_time: 16.0\n  archived: false\n  created_at: 2021-09-06 22:11:12.000000000 Z\n  updated_at: 2021-12-01 22:11:12.000000000 Z\ntask_00543:\n  id: 543\n  title: velit quasi aperiam\n  description: In libero assumenda qui.\n  created_by_id: 16\n  project_id: 6\n  due_date: 2022-09-13\n  priority_id: \n  status_id: 14\n  relevant_version_id: 21\n  expected_version_id: \n  estimated_time: 6.0\n  archived: false\n  created_at: 2021-10-08 22:11:12.000000000 Z\n  updated_at: 2021-11-20 22:11:12.000000000 Z\ntask_00544:\n  id: 544\n  title: maiores nesciunt\n  description: Ullam doloremque nisi rerum non non itaque esse adipisci.\n  created_by_id: 16\n  project_id: 6\n  due_date: 2022-06-14\n  priority_id: 9\n  status_id: 14\n  relevant_version_id: 22\n  expected_version_id: 21\n  estimated_time: 12.0\n  archived: false\n  created_at: 2021-08-29 22:11:12.000000000 Z\n  updated_at: 2021-12-21 22:11:12.000000000 Z\ntask_00545:\n  id: 545\n  title: velit sit\n  description: Officia quam odit voluptatem delectus debitis velit quibusdam eum.\n  created_by_id: 23\n  project_id: 4\n  due_date: 2022-08-18\n  priority_id: 8\n  status_id: 12\n  relevant_version_id: 12\n  expected_version_id: \n  estimated_time: 12.0\n  archived: false\n  created_at: 2021-08-27 22:11:12.000000000 Z\n  updated_at: 2022-01-07 22:11:12.000000000 Z\ntask_00546:\n  id: 546\n  title: qui animi\n  description: Quaerat aperiam in distinctio.\n  created_by_id: 18\n  project_id: 4\n  due_date: 2023-03-16\n  priority_id: 6\n  status_id: 14\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 3.0\n  archived: false\n  created_at: 2021-11-09 22:11:12.000000000 Z\n  updated_at: 2022-01-10 22:11:12.000000000 Z\ntask_00547:\n  id: 547\n  title: dolores\n  description: Ad sunt vel maxime labore temporibus incidunt quidem.\n  created_by_id: 21\n  project_id: 5\n  due_date: 2023-02-23\n  priority_id: 8\n  status_id: 13\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 1.0\n  archived: false\n  created_at: 2021-11-13 22:11:12.000000000 Z\n  updated_at: 2022-01-26 22:11:12.000000000 Z\ntask_00548:\n  id: 548\n  title: adipisci ullam\n  description: Vel quas dolores nobis.\n  created_by_id: 16\n  project_id: 6\n  due_date: 2022-11-22\n  priority_id: \n  status_id: 16\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 7.0\n  archived: false\n  created_at: 2021-11-16 22:11:12.000000000 Z\n  updated_at: 2021-12-24 22:11:12.000000000 Z\ntask_00549:\n  id: 549\n  title: alias\n  description: Dicta sit necessitatibus ut dolorem.\n  created_by_id: 14\n  project_id: 5\n  due_date: 2022-07-27\n  priority_id: 7\n  status_id: 12\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 16.0\n  archived: false\n  created_at: 2021-10-08 22:11:12.000000000 Z\n  updated_at: 2021-12-24 22:11:12.000000000 Z\ntask_00550:\n  id: 550\n  title: velit aliquam\n  description: Ut quidem neque qui.\n  created_by_id: 14\n  project_id: 5\n  due_date: 2022-08-29\n  priority_id: \n  status_id: 14\n  relevant_version_id: 18\n  expected_version_id: 19\n  estimated_time: 11.0\n  archived: true\n  created_at: 2021-10-09 22:11:12.000000000 Z\n  updated_at: 2021-12-30 22:11:12.000000000 Z\ntask_00551:\n  id: 551\n  title: doloremque\n  description: Adipisci illo alias eos reprehenderit.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2022-06-30\n  priority_id: 6\n  status_id: 15\n  relevant_version_id: \n  expected_version_id: 20\n  estimated_time: 1.0\n  archived: false\n  created_at: 2021-09-25 22:11:12.000000000 Z\n  updated_at: 2022-01-15 22:11:12.000000000 Z\ntask_00552:\n  id: 552\n  title: est\n  description: Totam aut ex quia repudiandae dolor.\n  created_by_id: 17\n  project_id: 6\n  due_date: 2022-08-05\n  priority_id: \n  status_id: 14\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 10.0\n  archived: false\n  created_at: 2021-10-19 22:11:12.000000000 Z\n  updated_at: 2021-11-30 22:11:12.000000000 Z\ntask_00553:\n  id: 553\n  title: voluptas id\n  description: Accusamus voluptas sunt deleniti iusto dolorem repudiandae.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2022-09-26\n  priority_id: \n  status_id: 10\n  relevant_version_id: 22\n  expected_version_id: \n  estimated_time: 7.0\n  archived: false\n  created_at: 2021-08-28 22:11:12.000000000 Z\n  updated_at: 2022-01-06 22:11:12.000000000 Z\ntask_00554:\n  id: 554\n  title: necessitatibus in\n  description: Inventore iure eos labore ipsum.\n  created_by_id: 22\n  project_id: 4\n  due_date: 2022-10-02\n  priority_id: 8\n  status_id: 18\n  relevant_version_id: \n  expected_version_id: \n  estimated_time: 20.0\n  archived: false\n  created_at: 2021-08-18 22:11:12.000000000 Z\n  updated_at: 2021-12-07 22:11:12.000000000 Z\ntask_00555:\n  id: 555\n  title: numquam nisi vero\n  description: Dolorum consequatur non molestias.\n  created_by_id: 17\n  project_id: 4\n  due_date: 2023-02-09\n  priority_id: \n  status_id: 13\n  relevant_version_id: 15\n  expected_version_id: 14\n  estimated_time: 3.0\n  archived: false\n  created_at: 2021-08-27 22:11:12.000000000 Z\n  updated_at: 2022-02-10 22:11:12.000000000 Z\ntask_00556:\n  id: 556\n  title: quia exercitationem\n  description: Adipisci voluptate sed esse velit.\n  created_by_id: 20\n  project_id: 6\n  due_date: 2023-02-02\n  priority_id: 10\n  status_id: 16\n  relevant_version_id: \n  expected_version_id: 20\n  estimated_time: 8.0\n  archived: false\n  created_at: 2021-09-29 22:11:12.000000000 Z\n  updated_at: 2022-01-23 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/tasks_users.yml",
    "content": "---\njoin_00000:\n  task_id: 1\n  user_id: 10\njoin_00001:\n  task_id: 2\n  user_id: 5\njoin_00002:\n  task_id: 2\n  user_id: 4\njoin_00003:\n  task_id: 3\n  user_id: 1\njoin_00004:\n  task_id: 7\n  user_id: 6\njoin_00005:\n  task_id: 7\n  user_id: 7\njoin_00006:\n  task_id: 9\n  user_id: 6\njoin_00007:\n  task_id: 9\n  user_id: 7\njoin_00008:\n  task_id: 10\n  user_id: 1\njoin_00009:\n  task_id: 11\n  user_id: 7\njoin_00010:\n  task_id: 13\n  user_id: 10\njoin_00011:\n  task_id: 14\n  user_id: 5\njoin_00012:\n  task_id: 15\n  user_id: 6\njoin_00013:\n  task_id: 17\n  user_id: 6\njoin_00014:\n  task_id: 17\n  user_id: 10\njoin_00015:\n  task_id: 18\n  user_id: 1\njoin_00016:\n  task_id: 19\n  user_id: 9\njoin_00017:\n  task_id: 20\n  user_id: 8\njoin_00018:\n  task_id: 20\n  user_id: 1\njoin_00019:\n  task_id: 22\n  user_id: 6\njoin_00020:\n  task_id: 22\n  user_id: 12\njoin_00021:\n  task_id: 23\n  user_id: 8\njoin_00022:\n  task_id: 23\n  user_id: 11\njoin_00023:\n  task_id: 23\n  user_id: 4\njoin_00024:\n  task_id: 25\n  user_id: 10\njoin_00025:\n  task_id: 26\n  user_id: 10\njoin_00026:\n  task_id: 26\n  user_id: 4\njoin_00027:\n  task_id: 28\n  user_id: 5\njoin_00028:\n  task_id: 30\n  user_id: 7\njoin_00029:\n  task_id: 30\n  user_id: 12\njoin_00030:\n  task_id: 30\n  user_id: 10\njoin_00031:\n  task_id: 33\n  user_id: 9\njoin_00032:\n  task_id: 34\n  user_id: 5\njoin_00033:\n  task_id: 35\n  user_id: 5\njoin_00034:\n  task_id: 35\n  user_id: 1\njoin_00035:\n  task_id: 35\n  user_id: 6\njoin_00036:\n  task_id: 37\n  user_id: 8\njoin_00037:\n  task_id: 40\n  user_id: 5\njoin_00038:\n  task_id: 43\n  user_id: 11\njoin_00039:\n  task_id: 43\n  user_id: 2\njoin_00040:\n  task_id: 44\n  user_id: 6\njoin_00041:\n  task_id: 44\n  user_id: 8\njoin_00042:\n  task_id: 45\n  user_id: 10\njoin_00043:\n  task_id: 45\n  user_id: 1\njoin_00044:\n  task_id: 46\n  user_id: 12\njoin_00045:\n  task_id: 46\n  user_id: 3\njoin_00046:\n  task_id: 46\n  user_id: 7\njoin_00047:\n  task_id: 48\n  user_id: 6\njoin_00048:\n  task_id: 49\n  user_id: 6\njoin_00049:\n  task_id: 49\n  user_id: 7\njoin_00050:\n  task_id: 49\n  user_id: 3\njoin_00051:\n  task_id: 51\n  user_id: 5\njoin_00052:\n  task_id: 51\n  user_id: 2\njoin_00053:\n  task_id: 52\n  user_id: 10\njoin_00054:\n  task_id: 55\n  user_id: 10\njoin_00055:\n  task_id: 57\n  user_id: 8\njoin_00056:\n  task_id: 60\n  user_id: 8\njoin_00057:\n  task_id: 61\n  user_id: 9\njoin_00058:\n  task_id: 61\n  user_id: 8\njoin_00059:\n  task_id: 61\n  user_id: 3\njoin_00060:\n  task_id: 62\n  user_id: 1\njoin_00061:\n  task_id: 63\n  user_id: 8\njoin_00062:\n  task_id: 64\n  user_id: 8\njoin_00063:\n  task_id: 64\n  user_id: 5\njoin_00064:\n  task_id: 65\n  user_id: 7\njoin_00065:\n  task_id: 65\n  user_id: 6\njoin_00066:\n  task_id: 69\n  user_id: 12\njoin_00067:\n  task_id: 69\n  user_id: 10\njoin_00068:\n  task_id: 70\n  user_id: 3\njoin_00069:\n  task_id: 70\n  user_id: 9\njoin_00070:\n  task_id: 70\n  user_id: 6\njoin_00071:\n  task_id: 73\n  user_id: 8\njoin_00072:\n  task_id: 75\n  user_id: 3\njoin_00073:\n  task_id: 78\n  user_id: 1\njoin_00074:\n  task_id: 78\n  user_id: 8\njoin_00075:\n  task_id: 79\n  user_id: 8\njoin_00076:\n  task_id: 79\n  user_id: 11\njoin_00077:\n  task_id: 81\n  user_id: 5\njoin_00078:\n  task_id: 82\n  user_id: 8\njoin_00079:\n  task_id: 82\n  user_id: 1\njoin_00080:\n  task_id: 83\n  user_id: 3\njoin_00081:\n  task_id: 83\n  user_id: 6\njoin_00082:\n  task_id: 84\n  user_id: 2\njoin_00083:\n  task_id: 85\n  user_id: 2\njoin_00084:\n  task_id: 88\n  user_id: 7\njoin_00085:\n  task_id: 88\n  user_id: 3\njoin_00086:\n  task_id: 90\n  user_id: 12\njoin_00087:\n  task_id: 90\n  user_id: 6\njoin_00088:\n  task_id: 92\n  user_id: 8\njoin_00089:\n  task_id: 92\n  user_id: 11\njoin_00090:\n  task_id: 92\n  user_id: 2\njoin_00091:\n  task_id: 93\n  user_id: 2\njoin_00092:\n  task_id: 94\n  user_id: 12\njoin_00093:\n  task_id: 94\n  user_id: 10\njoin_00094:\n  task_id: 95\n  user_id: 6\njoin_00095:\n  task_id: 95\n  user_id: 3\njoin_00096:\n  task_id: 95\n  user_id: 10\njoin_00097:\n  task_id: 96\n  user_id: 6\njoin_00098:\n  task_id: 98\n  user_id: 5\njoin_00099:\n  task_id: 98\n  user_id: 8\njoin_00100:\n  task_id: 99\n  user_id: 3\njoin_00101:\n  task_id: 99\n  user_id: 10\njoin_00102:\n  task_id: 99\n  user_id: 6\njoin_00103:\n  task_id: 101\n  user_id: 12\njoin_00104:\n  task_id: 101\n  user_id: 10\njoin_00105:\n  task_id: 101\n  user_id: 6\njoin_00106:\n  task_id: 102\n  user_id: 11\njoin_00107:\n  task_id: 102\n  user_id: 5\njoin_00108:\n  task_id: 104\n  user_id: 8\njoin_00109:\n  task_id: 104\n  user_id: 6\njoin_00110:\n  task_id: 105\n  user_id: 8\njoin_00111:\n  task_id: 105\n  user_id: 4\njoin_00112:\n  task_id: 105\n  user_id: 5\njoin_00113:\n  task_id: 106\n  user_id: 5\njoin_00114:\n  task_id: 106\n  user_id: 8\njoin_00115:\n  task_id: 107\n  user_id: 6\njoin_00116:\n  task_id: 107\n  user_id: 8\njoin_00117:\n  task_id: 108\n  user_id: 7\njoin_00118:\n  task_id: 108\n  user_id: 10\njoin_00119:\n  task_id: 110\n  user_id: 7\njoin_00120:\n  task_id: 110\n  user_id: 6\njoin_00121:\n  task_id: 112\n  user_id: 6\njoin_00122:\n  task_id: 112\n  user_id: 10\njoin_00123:\n  task_id: 113\n  user_id: 5\njoin_00124:\n  task_id: 113\n  user_id: 10\njoin_00125:\n  task_id: 113\n  user_id: 11\njoin_00126:\n  task_id: 115\n  user_id: 8\njoin_00127:\n  task_id: 115\n  user_id: 9\njoin_00128:\n  task_id: 116\n  user_id: 4\njoin_00129:\n  task_id: 117\n  user_id: 6\njoin_00130:\n  task_id: 117\n  user_id: 7\njoin_00131:\n  task_id: 117\n  user_id: 3\njoin_00132:\n  task_id: 119\n  user_id: 6\njoin_00133:\n  task_id: 119\n  user_id: 10\njoin_00134:\n  task_id: 119\n  user_id: 3\njoin_00135:\n  task_id: 120\n  user_id: 12\njoin_00136:\n  task_id: 120\n  user_id: 6\njoin_00137:\n  task_id: 120\n  user_id: 10\njoin_00138:\n  task_id: 121\n  user_id: 8\njoin_00139:\n  task_id: 121\n  user_id: 5\njoin_00140:\n  task_id: 122\n  user_id: 10\njoin_00141:\n  task_id: 122\n  user_id: 6\njoin_00142:\n  task_id: 123\n  user_id: 7\njoin_00143:\n  task_id: 124\n  user_id: 4\njoin_00144:\n  task_id: 124\n  user_id: 11\njoin_00145:\n  task_id: 124\n  user_id: 5\njoin_00146:\n  task_id: 125\n  user_id: 11\njoin_00147:\n  task_id: 125\n  user_id: 10\njoin_00148:\n  task_id: 128\n  user_id: 11\njoin_00149:\n  task_id: 128\n  user_id: 8\njoin_00150:\n  task_id: 129\n  user_id: 7\njoin_00151:\n  task_id: 132\n  user_id: 8\njoin_00152:\n  task_id: 133\n  user_id: 7\njoin_00153:\n  task_id: 133\n  user_id: 12\njoin_00154:\n  task_id: 134\n  user_id: 11\njoin_00155:\n  task_id: 134\n  user_id: 4\njoin_00156:\n  task_id: 136\n  user_id: 12\njoin_00157:\n  task_id: 138\n  user_id: 6\njoin_00158:\n  task_id: 138\n  user_id: 9\njoin_00159:\n  task_id: 139\n  user_id: 4\njoin_00160:\n  task_id: 141\n  user_id: 8\njoin_00161:\n  task_id: 142\n  user_id: 8\njoin_00162:\n  task_id: 142\n  user_id: 5\njoin_00163:\n  task_id: 143\n  user_id: 8\njoin_00164:\n  task_id: 143\n  user_id: 4\njoin_00165:\n  task_id: 144\n  user_id: 2\njoin_00166:\n  task_id: 145\n  user_id: 8\njoin_00167:\n  task_id: 145\n  user_id: 1\njoin_00168:\n  task_id: 146\n  user_id: 5\njoin_00169:\n  task_id: 147\n  user_id: 1\njoin_00170:\n  task_id: 147\n  user_id: 9\njoin_00171:\n  task_id: 148\n  user_id: 2\njoin_00172:\n  task_id: 148\n  user_id: 11\njoin_00173:\n  task_id: 149\n  user_id: 3\njoin_00174:\n  task_id: 149\n  user_id: 10\njoin_00175:\n  task_id: 149\n  user_id: 12\njoin_00176:\n  task_id: 150\n  user_id: 6\njoin_00177:\n  task_id: 150\n  user_id: 10\njoin_00178:\n  task_id: 151\n  user_id: 10\njoin_00179:\n  task_id: 152\n  user_id: 8\njoin_00180:\n  task_id: 152\n  user_id: 11\njoin_00181:\n  task_id: 153\n  user_id: 7\njoin_00182:\n  task_id: 154\n  user_id: 6\njoin_00183:\n  task_id: 155\n  user_id: 6\njoin_00184:\n  task_id: 155\n  user_id: 10\njoin_00185:\n  task_id: 155\n  user_id: 3\njoin_00186:\n  task_id: 156\n  user_id: 11\njoin_00187:\n  task_id: 156\n  user_id: 4\njoin_00188:\n  task_id: 157\n  user_id: 6\njoin_00189:\n  task_id: 157\n  user_id: 1\njoin_00190:\n  task_id: 158\n  user_id: 6\njoin_00191:\n  task_id: 159\n  user_id: 9\njoin_00192:\n  task_id: 159\n  user_id: 8\njoin_00193:\n  task_id: 160\n  user_id: 6\njoin_00194:\n  task_id: 161\n  user_id: 5\njoin_00195:\n  task_id: 161\n  user_id: 6\njoin_00196:\n  task_id: 164\n  user_id: 8\njoin_00197:\n  task_id: 164\n  user_id: 5\njoin_00198:\n  task_id: 165\n  user_id: 8\njoin_00199:\n  task_id: 165\n  user_id: 1\njoin_00200:\n  task_id: 165\n  user_id: 5\njoin_00201:\n  task_id: 166\n  user_id: 11\njoin_00202:\n  task_id: 166\n  user_id: 8\njoin_00203:\n  task_id: 167\n  user_id: 10\njoin_00204:\n  task_id: 167\n  user_id: 8\njoin_00205:\n  task_id: 167\n  user_id: 9\njoin_00206:\n  task_id: 168\n  user_id: 7\njoin_00207:\n  task_id: 168\n  user_id: 6\njoin_00208:\n  task_id: 168\n  user_id: 12\njoin_00209:\n  task_id: 169\n  user_id: 12\njoin_00210:\n  task_id: 169\n  user_id: 6\njoin_00211:\n  task_id: 170\n  user_id: 3\njoin_00212:\n  task_id: 170\n  user_id: 6\njoin_00213:\n  task_id: 171\n  user_id: 11\njoin_00214:\n  task_id: 171\n  user_id: 8\njoin_00215:\n  task_id: 171\n  user_id: 2\njoin_00216:\n  task_id: 172\n  user_id: 11\njoin_00217:\n  task_id: 172\n  user_id: 8\njoin_00218:\n  task_id: 173\n  user_id: 10\njoin_00219:\n  task_id: 173\n  user_id: 7\njoin_00220:\n  task_id: 174\n  user_id: 1\njoin_00221:\n  task_id: 175\n  user_id: 9\njoin_00222:\n  task_id: 176\n  user_id: 8\njoin_00223:\n  task_id: 176\n  user_id: 3\njoin_00224:\n  task_id: 176\n  user_id: 5\njoin_00225:\n  task_id: 178\n  user_id: 6\njoin_00226:\n  task_id: 182\n  user_id: 8\njoin_00227:\n  task_id: 182\n  user_id: 9\njoin_00228:\n  task_id: 183\n  user_id: 6\njoin_00229:\n  task_id: 183\n  user_id: 7\njoin_00230:\n  task_id: 183\n  user_id: 10\njoin_00231:\n  task_id: 184\n  user_id: 8\njoin_00232:\n  task_id: 184\n  user_id: 4\njoin_00233:\n  task_id: 185\n  user_id: 10\njoin_00234:\n  task_id: 185\n  user_id: 5\njoin_00235:\n  task_id: 185\n  user_id: 4\njoin_00236:\n  task_id: 186\n  user_id: 10\njoin_00237:\n  task_id: 188\n  user_id: 6\njoin_00238:\n  task_id: 190\n  user_id: 1\njoin_00239:\n  task_id: 190\n  user_id: 10\njoin_00240:\n  task_id: 190\n  user_id: 5\njoin_00241:\n  task_id: 191\n  user_id: 3\njoin_00242:\n  task_id: 191\n  user_id: 9\njoin_00243:\n  task_id: 192\n  user_id: 1\njoin_00244:\n  task_id: 194\n  user_id: 6\njoin_00245:\n  task_id: 196\n  user_id: 12\njoin_00246:\n  task_id: 197\n  user_id: 3\njoin_00247:\n  task_id: 198\n  user_id: 1\njoin_00248:\n  task_id: 198\n  user_id: 3\njoin_00249:\n  task_id: 199\n  user_id: 10\njoin_00250:\n  task_id: 200\n  user_id: 11\njoin_00251:\n  task_id: 201\n  user_id: 3\njoin_00252:\n  task_id: 201\n  user_id: 7\njoin_00253:\n  task_id: 201\n  user_id: 6\njoin_00254:\n  task_id: 203\n  user_id: 4\njoin_00255:\n  task_id: 203\n  user_id: 8\njoin_00256:\n  task_id: 205\n  user_id: 11\njoin_00257:\n  task_id: 206\n  user_id: 12\njoin_00258:\n  task_id: 206\n  user_id: 7\njoin_00259:\n  task_id: 206\n  user_id: 6\njoin_00260:\n  task_id: 207\n  user_id: 6\njoin_00261:\n  task_id: 207\n  user_id: 10\njoin_00262:\n  task_id: 209\n  user_id: 12\njoin_00263:\n  task_id: 209\n  user_id: 3\njoin_00264:\n  task_id: 210\n  user_id: 9\njoin_00265:\n  task_id: 211\n  user_id: 6\njoin_00266:\n  task_id: 211\n  user_id: 8\njoin_00267:\n  task_id: 212\n  user_id: 7\njoin_00268:\n  task_id: 212\n  user_id: 10\njoin_00269:\n  task_id: 212\n  user_id: 3\njoin_00270:\n  task_id: 213\n  user_id: 8\njoin_00271:\n  task_id: 213\n  user_id: 11\njoin_00272:\n  task_id: 215\n  user_id: 7\njoin_00273:\n  task_id: 216\n  user_id: 8\njoin_00274:\n  task_id: 216\n  user_id: 10\njoin_00275:\n  task_id: 216\n  user_id: 11\njoin_00276:\n  task_id: 217\n  user_id: 9\njoin_00277:\n  task_id: 217\n  user_id: 1\njoin_00278:\n  task_id: 217\n  user_id: 6\njoin_00279:\n  task_id: 218\n  user_id: 3\njoin_00280:\n  task_id: 218\n  user_id: 6\njoin_00281:\n  task_id: 220\n  user_id: 3\njoin_00282:\n  task_id: 220\n  user_id: 8\njoin_00283:\n  task_id: 221\n  user_id: 1\njoin_00284:\n  task_id: 222\n  user_id: 6\njoin_00285:\n  task_id: 222\n  user_id: 10\njoin_00286:\n  task_id: 223\n  user_id: 7\njoin_00287:\n  task_id: 225\n  user_id: 10\njoin_00288:\n  task_id: 226\n  user_id: 10\njoin_00289:\n  task_id: 227\n  user_id: 7\njoin_00290:\n  task_id: 227\n  user_id: 3\njoin_00291:\n  task_id: 228\n  user_id: 8\njoin_00292:\n  task_id: 231\n  user_id: 7\njoin_00293:\n  task_id: 233\n  user_id: 11\njoin_00294:\n  task_id: 235\n  user_id: 11\njoin_00295:\n  task_id: 235\n  user_id: 4\njoin_00296:\n  task_id: 235\n  user_id: 10\njoin_00297:\n  task_id: 236\n  user_id: 5\njoin_00298:\n  task_id: 236\n  user_id: 6\njoin_00299:\n  task_id: 237\n  user_id: 9\njoin_00300:\n  task_id: 237\n  user_id: 8\njoin_00301:\n  task_id: 238\n  user_id: 7\njoin_00302:\n  task_id: 239\n  user_id: 12\njoin_00303:\n  task_id: 239\n  user_id: 10\njoin_00304:\n  task_id: 241\n  user_id: 8\njoin_00305:\n  task_id: 242\n  user_id: 11\njoin_00306:\n  task_id: 242\n  user_id: 8\njoin_00307:\n  task_id: 244\n  user_id: 7\njoin_00308:\n  task_id: 245\n  user_id: 5\njoin_00309:\n  task_id: 245\n  user_id: 10\njoin_00310:\n  task_id: 246\n  user_id: 3\njoin_00311:\n  task_id: 248\n  user_id: 6\njoin_00312:\n  task_id: 249\n  user_id: 6\njoin_00313:\n  task_id: 249\n  user_id: 10\njoin_00314:\n  task_id: 250\n  user_id: 12\njoin_00315:\n  task_id: 252\n  user_id: 7\njoin_00316:\n  task_id: 254\n  user_id: 10\njoin_00317:\n  task_id: 254\n  user_id: 2\njoin_00318:\n  task_id: 254\n  user_id: 4\njoin_00319:\n  task_id: 255\n  user_id: 6\njoin_00320:\n  task_id: 256\n  user_id: 6\njoin_00321:\n  task_id: 257\n  user_id: 6\njoin_00322:\n  task_id: 258\n  user_id: 7\njoin_00323:\n  task_id: 258\n  user_id: 6\njoin_00324:\n  task_id: 260\n  user_id: 6\njoin_00325:\n  task_id: 261\n  user_id: 10\njoin_00326:\n  task_id: 261\n  user_id: 4\njoin_00327:\n  task_id: 262\n  user_id: 3\njoin_00328:\n  task_id: 262\n  user_id: 5\njoin_00329:\n  task_id: 262\n  user_id: 8\njoin_00330:\n  task_id: 263\n  user_id: 4\njoin_00331:\n  task_id: 264\n  user_id: 10\njoin_00332:\n  task_id: 264\n  user_id: 5\njoin_00333:\n  task_id: 264\n  user_id: 4\njoin_00334:\n  task_id: 265\n  user_id: 5\njoin_00335:\n  task_id: 266\n  user_id: 10\njoin_00336:\n  task_id: 269\n  user_id: 3\njoin_00337:\n  task_id: 270\n  user_id: 10\njoin_00338:\n  task_id: 270\n  user_id: 5\njoin_00339:\n  task_id: 272\n  user_id: 3\njoin_00340:\n  task_id: 273\n  user_id: 1\njoin_00341:\n  task_id: 273\n  user_id: 6\njoin_00342:\n  task_id: 274\n  user_id: 4\njoin_00343:\n  task_id: 274\n  user_id: 8\njoin_00344:\n  task_id: 277\n  user_id: 10\njoin_00345:\n  task_id: 278\n  user_id: 1\njoin_00346:\n  task_id: 278\n  user_id: 6\njoin_00347:\n  task_id: 279\n  user_id: 1\njoin_00348:\n  task_id: 280\n  user_id: 2\njoin_00349:\n  task_id: 280\n  user_id: 4\njoin_00350:\n  task_id: 281\n  user_id: 6\njoin_00351:\n  task_id: 281\n  user_id: 7\njoin_00352:\n  task_id: 282\n  user_id: 6\njoin_00353:\n  task_id: 282\n  user_id: 9\njoin_00354:\n  task_id: 282\n  user_id: 1\njoin_00355:\n  task_id: 285\n  user_id: 1\njoin_00356:\n  task_id: 287\n  user_id: 3\njoin_00357:\n  task_id: 287\n  user_id: 7\njoin_00358:\n  task_id: 289\n  user_id: 3\njoin_00359:\n  task_id: 290\n  user_id: 10\njoin_00360:\n  task_id: 291\n  user_id: 2\njoin_00361:\n  task_id: 291\n  user_id: 8\njoin_00362:\n  task_id: 291\n  user_id: 10\njoin_00363:\n  task_id: 294\n  user_id: 9\njoin_00364:\n  task_id: 294\n  user_id: 1\njoin_00365:\n  task_id: 296\n  user_id: 1\njoin_00366:\n  task_id: 296\n  user_id: 6\njoin_00367:\n  task_id: 298\n  user_id: 8\njoin_00368:\n  task_id: 298\n  user_id: 11\njoin_00369:\n  task_id: 298\n  user_id: 2\njoin_00370:\n  task_id: 301\n  user_id: 8\njoin_00371:\n  task_id: 302\n  user_id: 6\njoin_00372:\n  task_id: 303\n  user_id: 6\njoin_00373:\n  task_id: 304\n  user_id: 8\njoin_00374:\n  task_id: 304\n  user_id: 11\njoin_00375:\n  task_id: 305\n  user_id: 8\njoin_00376:\n  task_id: 306\n  user_id: 1\njoin_00377:\n  task_id: 306\n  user_id: 9\njoin_00378:\n  task_id: 307\n  user_id: 5\njoin_00379:\n  task_id: 307\n  user_id: 6\njoin_00380:\n  task_id: 307\n  user_id: 1\njoin_00381:\n  task_id: 308\n  user_id: 6\njoin_00382:\n  task_id: 309\n  user_id: 11\njoin_00383:\n  task_id: 309\n  user_id: 10\njoin_00384:\n  task_id: 310\n  user_id: 3\njoin_00385:\n  task_id: 310\n  user_id: 7\njoin_00386:\n  task_id: 311\n  user_id: 7\njoin_00387:\n  task_id: 311\n  user_id: 10\njoin_00388:\n  task_id: 314\n  user_id: 5\njoin_00389:\n  task_id: 315\n  user_id: 7\njoin_00390:\n  task_id: 317\n  user_id: 10\njoin_00391:\n  task_id: 317\n  user_id: 3\njoin_00392:\n  task_id: 318\n  user_id: 10\njoin_00393:\n  task_id: 319\n  user_id: 8\njoin_00394:\n  task_id: 321\n  user_id: 6\njoin_00395:\n  task_id: 321\n  user_id: 3\njoin_00396:\n  task_id: 321\n  user_id: 10\njoin_00397:\n  task_id: 322\n  user_id: 5\njoin_00398:\n  task_id: 322\n  user_id: 11\njoin_00399:\n  task_id: 323\n  user_id: 8\njoin_00400:\n  task_id: 324\n  user_id: 6\njoin_00401:\n  task_id: 324\n  user_id: 3\njoin_00402:\n  task_id: 326\n  user_id: 3\njoin_00403:\n  task_id: 326\n  user_id: 6\njoin_00404:\n  task_id: 327\n  user_id: 11\njoin_00405:\n  task_id: 327\n  user_id: 5\njoin_00406:\n  task_id: 327\n  user_id: 8\njoin_00407:\n  task_id: 328\n  user_id: 5\njoin_00408:\n  task_id: 328\n  user_id: 10\njoin_00409:\n  task_id: 328\n  user_id: 8\njoin_00410:\n  task_id: 330\n  user_id: 2\njoin_00411:\n  task_id: 331\n  user_id: 3\njoin_00412:\n  task_id: 334\n  user_id: 8\njoin_00413:\n  task_id: 334\n  user_id: 11\njoin_00414:\n  task_id: 334\n  user_id: 4\njoin_00415:\n  task_id: 336\n  user_id: 8\njoin_00416:\n  task_id: 337\n  user_id: 7\njoin_00417:\n  task_id: 340\n  user_id: 8\njoin_00418:\n  task_id: 340\n  user_id: 11\njoin_00419:\n  task_id: 341\n  user_id: 4\njoin_00420:\n  task_id: 341\n  user_id: 8\njoin_00421:\n  task_id: 343\n  user_id: 5\njoin_00422:\n  task_id: 344\n  user_id: 3\njoin_00423:\n  task_id: 344\n  user_id: 10\njoin_00424:\n  task_id: 346\n  user_id: 8\njoin_00425:\n  task_id: 346\n  user_id: 1\njoin_00426:\n  task_id: 346\n  user_id: 6\njoin_00427:\n  task_id: 347\n  user_id: 7\njoin_00428:\n  task_id: 347\n  user_id: 12\njoin_00429:\n  task_id: 347\n  user_id: 3\njoin_00430:\n  task_id: 348\n  user_id: 8\njoin_00431:\n  task_id: 349\n  user_id: 1\njoin_00432:\n  task_id: 349\n  user_id: 3\njoin_00433:\n  task_id: 349\n  user_id: 6\njoin_00434:\n  task_id: 353\n  user_id: 11\njoin_00435:\n  task_id: 353\n  user_id: 2\njoin_00436:\n  task_id: 354\n  user_id: 10\njoin_00437:\n  task_id: 356\n  user_id: 5\njoin_00438:\n  task_id: 356\n  user_id: 2\njoin_00439:\n  task_id: 356\n  user_id: 8\njoin_00440:\n  task_id: 357\n  user_id: 7\njoin_00441:\n  task_id: 358\n  user_id: 6\njoin_00442:\n  task_id: 358\n  user_id: 1\njoin_00443:\n  task_id: 359\n  user_id: 1\njoin_00444:\n  task_id: 360\n  user_id: 10\njoin_00445:\n  task_id: 361\n  user_id: 3\njoin_00446:\n  task_id: 364\n  user_id: 5\njoin_00447:\n  task_id: 367\n  user_id: 7\njoin_00448:\n  task_id: 367\n  user_id: 6\njoin_00449:\n  task_id: 367\n  user_id: 3\njoin_00450:\n  task_id: 370\n  user_id: 9\njoin_00451:\n  task_id: 370\n  user_id: 5\njoin_00452:\n  task_id: 371\n  user_id: 7\njoin_00453:\n  task_id: 371\n  user_id: 6\njoin_00454:\n  task_id: 372\n  user_id: 1\njoin_00455:\n  task_id: 373\n  user_id: 3\njoin_00456:\n  task_id: 374\n  user_id: 11\njoin_00457:\n  task_id: 375\n  user_id: 1\njoin_00458:\n  task_id: 375\n  user_id: 6\njoin_00459:\n  task_id: 376\n  user_id: 11\njoin_00460:\n  task_id: 376\n  user_id: 10\njoin_00461:\n  task_id: 377\n  user_id: 1\njoin_00462:\n  task_id: 378\n  user_id: 3\njoin_00463:\n  task_id: 378\n  user_id: 7\njoin_00464:\n  task_id: 379\n  user_id: 6\njoin_00465:\n  task_id: 380\n  user_id: 7\njoin_00466:\n  task_id: 380\n  user_id: 12\njoin_00467:\n  task_id: 381\n  user_id: 10\njoin_00468:\n  task_id: 381\n  user_id: 9\njoin_00469:\n  task_id: 381\n  user_id: 6\njoin_00470:\n  task_id: 382\n  user_id: 9\njoin_00471:\n  task_id: 382\n  user_id: 8\njoin_00472:\n  task_id: 383\n  user_id: 7\njoin_00473:\n  task_id: 384\n  user_id: 7\njoin_00474:\n  task_id: 385\n  user_id: 9\njoin_00475:\n  task_id: 387\n  user_id: 1\njoin_00476:\n  task_id: 387\n  user_id: 8\njoin_00477:\n  task_id: 387\n  user_id: 6\njoin_00478:\n  task_id: 391\n  user_id: 2\njoin_00479:\n  task_id: 392\n  user_id: 6\njoin_00480:\n  task_id: 393\n  user_id: 11\njoin_00481:\n  task_id: 393\n  user_id: 4\njoin_00482:\n  task_id: 395\n  user_id: 12\njoin_00483:\n  task_id: 395\n  user_id: 10\njoin_00484:\n  task_id: 396\n  user_id: 10\njoin_00485:\n  task_id: 398\n  user_id: 3\njoin_00486:\n  task_id: 399\n  user_id: 6\njoin_00487:\n  task_id: 399\n  user_id: 10\njoin_00488:\n  task_id: 400\n  user_id: 8\njoin_00489:\n  task_id: 400\n  user_id: 5\njoin_00490:\n  task_id: 401\n  user_id: 3\njoin_00491:\n  task_id: 401\n  user_id: 6\njoin_00492:\n  task_id: 402\n  user_id: 2\njoin_00493:\n  task_id: 402\n  user_id: 5\njoin_00494:\n  task_id: 402\n  user_id: 4\njoin_00495:\n  task_id: 403\n  user_id: 9\njoin_00496:\n  task_id: 403\n  user_id: 1\njoin_00497:\n  task_id: 403\n  user_id: 8\njoin_00498:\n  task_id: 404\n  user_id: 9\njoin_00499:\n  task_id: 405\n  user_id: 11\njoin_00500:\n  task_id: 405\n  user_id: 8\njoin_00501:\n  task_id: 406\n  user_id: 6\njoin_00502:\n  task_id: 406\n  user_id: 5\njoin_00503:\n  task_id: 406\n  user_id: 9\njoin_00504:\n  task_id: 407\n  user_id: 3\njoin_00505:\n  task_id: 407\n  user_id: 7\njoin_00506:\n  task_id: 408\n  user_id: 7\njoin_00507:\n  task_id: 408\n  user_id: 3\njoin_00508:\n  task_id: 409\n  user_id: 4\njoin_00509:\n  task_id: 410\n  user_id: 8\njoin_00510:\n  task_id: 410\n  user_id: 3\njoin_00511:\n  task_id: 411\n  user_id: 6\njoin_00512:\n  task_id: 411\n  user_id: 12\njoin_00513:\n  task_id: 412\n  user_id: 7\njoin_00514:\n  task_id: 412\n  user_id: 3\njoin_00515:\n  task_id: 414\n  user_id: 9\njoin_00516:\n  task_id: 414\n  user_id: 1\njoin_00517:\n  task_id: 414\n  user_id: 5\njoin_00518:\n  task_id: 415\n  user_id: 8\njoin_00519:\n  task_id: 415\n  user_id: 10\njoin_00520:\n  task_id: 417\n  user_id: 9\njoin_00521:\n  task_id: 418\n  user_id: 5\njoin_00522:\n  task_id: 418\n  user_id: 4\njoin_00523:\n  task_id: 418\n  user_id: 11\njoin_00524:\n  task_id: 420\n  user_id: 10\njoin_00525:\n  task_id: 420\n  user_id: 7\njoin_00526:\n  task_id: 421\n  user_id: 10\njoin_00527:\n  task_id: 421\n  user_id: 8\njoin_00528:\n  task_id: 422\n  user_id: 5\njoin_00529:\n  task_id: 422\n  user_id: 8\njoin_00530:\n  task_id: 422\n  user_id: 2\njoin_00531:\n  task_id: 423\n  user_id: 12\njoin_00532:\n  task_id: 425\n  user_id: 8\njoin_00533:\n  task_id: 426\n  user_id: 11\njoin_00534:\n  task_id: 427\n  user_id: 3\njoin_00535:\n  task_id: 427\n  user_id: 6\njoin_00536:\n  task_id: 430\n  user_id: 11\njoin_00537:\n  task_id: 430\n  user_id: 10\njoin_00538:\n  task_id: 431\n  user_id: 8\njoin_00539:\n  task_id: 434\n  user_id: 4\njoin_00540:\n  task_id: 435\n  user_id: 3\njoin_00541:\n  task_id: 438\n  user_id: 10\njoin_00542:\n  task_id: 440\n  user_id: 3\njoin_00543:\n  task_id: 440\n  user_id: 7\njoin_00544:\n  task_id: 442\n  user_id: 7\njoin_00545:\n  task_id: 442\n  user_id: 3\njoin_00546:\n  task_id: 443\n  user_id: 7\njoin_00547:\n  task_id: 444\n  user_id: 8\njoin_00548:\n  task_id: 444\n  user_id: 2\njoin_00549:\n  task_id: 448\n  user_id: 3\njoin_00550:\n  task_id: 448\n  user_id: 7\njoin_00551:\n  task_id: 449\n  user_id: 1\njoin_00552:\n  task_id: 449\n  user_id: 6\njoin_00553:\n  task_id: 450\n  user_id: 10\njoin_00554:\n  task_id: 450\n  user_id: 7\njoin_00555:\n  task_id: 451\n  user_id: 7\njoin_00556:\n  task_id: 452\n  user_id: 5\njoin_00557:\n  task_id: 454\n  user_id: 8\njoin_00558:\n  task_id: 456\n  user_id: 10\njoin_00559:\n  task_id: 458\n  user_id: 3\njoin_00560:\n  task_id: 459\n  user_id: 5\njoin_00561:\n  task_id: 461\n  user_id: 10\njoin_00562:\n  task_id: 461\n  user_id: 11\njoin_00563:\n  task_id: 462\n  user_id: 11\njoin_00564:\n  task_id: 463\n  user_id: 8\njoin_00565:\n  task_id: 463\n  user_id: 5\njoin_00566:\n  task_id: 465\n  user_id: 12\njoin_00567:\n  task_id: 465\n  user_id: 10\njoin_00568:\n  task_id: 465\n  user_id: 7\njoin_00569:\n  task_id: 466\n  user_id: 6\njoin_00570:\n  task_id: 466\n  user_id: 8\njoin_00571:\n  task_id: 466\n  user_id: 1\njoin_00572:\n  task_id: 467\n  user_id: 7\njoin_00573:\n  task_id: 468\n  user_id: 8\njoin_00574:\n  task_id: 468\n  user_id: 5\njoin_00575:\n  task_id: 469\n  user_id: 8\njoin_00576:\n  task_id: 469\n  user_id: 10\njoin_00577:\n  task_id: 469\n  user_id: 6\njoin_00578:\n  task_id: 470\n  user_id: 10\njoin_00579:\n  task_id: 470\n  user_id: 1\njoin_00580:\n  task_id: 470\n  user_id: 3\njoin_00581:\n  task_id: 471\n  user_id: 8\njoin_00582:\n  task_id: 471\n  user_id: 11\njoin_00583:\n  task_id: 472\n  user_id: 5\njoin_00584:\n  task_id: 472\n  user_id: 1\njoin_00585:\n  task_id: 473\n  user_id: 8\njoin_00586:\n  task_id: 473\n  user_id: 2\njoin_00587:\n  task_id: 473\n  user_id: 4\njoin_00588:\n  task_id: 475\n  user_id: 10\njoin_00589:\n  task_id: 475\n  user_id: 6\njoin_00590:\n  task_id: 476\n  user_id: 10\njoin_00591:\n  task_id: 476\n  user_id: 1\njoin_00592:\n  task_id: 476\n  user_id: 3\njoin_00593:\n  task_id: 479\n  user_id: 9\njoin_00594:\n  task_id: 479\n  user_id: 10\njoin_00595:\n  task_id: 480\n  user_id: 2\njoin_00596:\n  task_id: 480\n  user_id: 11\njoin_00597:\n  task_id: 481\n  user_id: 8\njoin_00598:\n  task_id: 481\n  user_id: 3\njoin_00599:\n  task_id: 483\n  user_id: 1\njoin_00600:\n  task_id: 483\n  user_id: 3\njoin_00601:\n  task_id: 484\n  user_id: 10\njoin_00602:\n  task_id: 486\n  user_id: 6\njoin_00603:\n  task_id: 487\n  user_id: 6\njoin_00604:\n  task_id: 488\n  user_id: 12\njoin_00605:\n  task_id: 488\n  user_id: 10\njoin_00606:\n  task_id: 490\n  user_id: 8\njoin_00607:\n  task_id: 491\n  user_id: 12\njoin_00608:\n  task_id: 491\n  user_id: 3\njoin_00609:\n  task_id: 491\n  user_id: 10\njoin_00610:\n  task_id: 492\n  user_id: 10\njoin_00611:\n  task_id: 492\n  user_id: 8\njoin_00612:\n  task_id: 493\n  user_id: 8\njoin_00613:\n  task_id: 493\n  user_id: 10\njoin_00614:\n  task_id: 494\n  user_id: 8\njoin_00615:\n  task_id: 494\n  user_id: 11\njoin_00616:\n  task_id: 497\n  user_id: 10\njoin_00617:\n  task_id: 498\n  user_id: 11\njoin_00618:\n  task_id: 498\n  user_id: 4\njoin_00619:\n  task_id: 500\n  user_id: 5\njoin_00620:\n  task_id: 500\n  user_id: 4\njoin_00621:\n  task_id: 501\n  user_id: 3\njoin_00622:\n  task_id: 501\n  user_id: 7\njoin_00623:\n  task_id: 502\n  user_id: 6\njoin_00624:\n  task_id: 503\n  user_id: 6\njoin_00625:\n  task_id: 505\n  user_id: 5\njoin_00626:\n  task_id: 505\n  user_id: 2\njoin_00627:\n  task_id: 506\n  user_id: 7\njoin_00628:\n  task_id: 508\n  user_id: 22\njoin_00629:\n  task_id: 510\n  user_id: 16\njoin_00630:\n  task_id: 510\n  user_id: 14\njoin_00631:\n  task_id: 511\n  user_id: 22\njoin_00632:\n  task_id: 512\n  user_id: 18\njoin_00633:\n  task_id: 512\n  user_id: 21\njoin_00634:\n  task_id: 513\n  user_id: 22\njoin_00635:\n  task_id: 513\n  user_id: 14\njoin_00636:\n  task_id: 514\n  user_id: 14\njoin_00637:\n  task_id: 515\n  user_id: 18\njoin_00638:\n  task_id: 517\n  user_id: 16\njoin_00639:\n  task_id: 518\n  user_id: 20\njoin_00640:\n  task_id: 519\n  user_id: 16\njoin_00641:\n  task_id: 520\n  user_id: 14\njoin_00642:\n  task_id: 520\n  user_id: 16\njoin_00643:\n  task_id: 522\n  user_id: 23\njoin_00644:\n  task_id: 522\n  user_id: 18\njoin_00645:\n  task_id: 522\n  user_id: 13\njoin_00646:\n  task_id: 523\n  user_id: 13\njoin_00647:\n  task_id: 524\n  user_id: 19\njoin_00648:\n  task_id: 525\n  user_id: 22\njoin_00649:\n  task_id: 526\n  user_id: 15\njoin_00650:\n  task_id: 526\n  user_id: 19\njoin_00651:\n  task_id: 527\n  user_id: 18\njoin_00652:\n  task_id: 527\n  user_id: 22\njoin_00653:\n  task_id: 528\n  user_id: 20\njoin_00654:\n  task_id: 528\n  user_id: 14\njoin_00655:\n  task_id: 528\n  user_id: 17\njoin_00656:\n  task_id: 529\n  user_id: 16\njoin_00657:\n  task_id: 529\n  user_id: 17\njoin_00658:\n  task_id: 531\n  user_id: 14\njoin_00659:\n  task_id: 532\n  user_id: 14\njoin_00660:\n  task_id: 532\n  user_id: 22\njoin_00661:\n  task_id: 532\n  user_id: 21\njoin_00662:\n  task_id: 534\n  user_id: 13\njoin_00663:\n  task_id: 534\n  user_id: 22\njoin_00664:\n  task_id: 534\n  user_id: 15\njoin_00665:\n  task_id: 535\n  user_id: 21\njoin_00666:\n  task_id: 535\n  user_id: 22\njoin_00667:\n  task_id: 536\n  user_id: 15\njoin_00668:\n  task_id: 536\n  user_id: 13\njoin_00669:\n  task_id: 536\n  user_id: 17\njoin_00670:\n  task_id: 537\n  user_id: 15\njoin_00671:\n  task_id: 537\n  user_id: 16\njoin_00672:\n  task_id: 538\n  user_id: 14\njoin_00673:\n  task_id: 538\n  user_id: 17\njoin_00674:\n  task_id: 538\n  user_id: 16\njoin_00675:\n  task_id: 539\n  user_id: 16\njoin_00676:\n  task_id: 539\n  user_id: 23\njoin_00677:\n  task_id: 539\n  user_id: 13\njoin_00678:\n  task_id: 540\n  user_id: 17\njoin_00679:\n  task_id: 541\n  user_id: 22\njoin_00680:\n  task_id: 541\n  user_id: 14\njoin_00681:\n  task_id: 541\n  user_id: 18\njoin_00682:\n  task_id: 542\n  user_id: 17\njoin_00683:\n  task_id: 542\n  user_id: 18\njoin_00684:\n  task_id: 543\n  user_id: 17\njoin_00685:\n  task_id: 545\n  user_id: 17\njoin_00686:\n  task_id: 546\n  user_id: 17\njoin_00687:\n  task_id: 546\n  user_id: 13\njoin_00688:\n  task_id: 548\n  user_id: 20\njoin_00689:\n  task_id: 549\n  user_id: 21\njoin_00690:\n  task_id: 549\n  user_id: 24\njoin_00691:\n  task_id: 551\n  user_id: 20\njoin_00692:\n  task_id: 554\n  user_id: 22\njoin_00693:\n  task_id: 554\n  user_id: 19\njoin_00694:\n  task_id: 555\n  user_id: 18\njoin_00695:\n  task_id: 555\n  user_id: 23\n"
  },
  {
    "path": "spec/fixtures/users.yml",
    "content": "---\nuser_00013:\n  id: 13\n  name: Wikus van de Merwe\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00014:\n  id: 14\n  name: Grey Bradnam\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00015:\n  id: 15\n  name: Christopher Johnson\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00016:\n  id: 16\n  name: Piet Smit\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00017:\n  id: 17\n  name: Fundiswa Mhlanga\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00018:\n  id: 18\n  name: Tania van de Merwe\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00019:\n  id: 19\n  name: Obesandjo\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00020:\n  id: 20\n  name: Dirk Michaels\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00021:\n  id: 21\n  name: Ross Pienaar\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00022:\n  id: 22\n  name: Koobus Venter\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00023:\n  id: 23\n  name: Dirk Michaels\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nuser_00024:\n  id: 24\n  name: Sarah Livingstone\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/fixtures/versions.yml",
    "content": "---\nversion_00012:\n  id: 12\n  name: '1.0'\n  project_id: 4\n  status: development\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00013:\n  id: 13\n  name: '1.1'\n  project_id: 4\n  status: development\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00014:\n  id: 14\n  name: '1.2'\n  project_id: 4\n  status: production\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00015:\n  id: 15\n  name: '2.0'\n  project_id: 4\n  status: testing\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00016:\n  id: 16\n  name: '3.0'\n  project_id: 4\n  status: production\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00017:\n  id: 17\n  name: '1.0'\n  project_id: 5\n  status: development\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00018:\n  id: 18\n  name: '88.1'\n  project_id: 5\n  status: production\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00019:\n  id: 19\n  name: '99.0'\n  project_id: 5\n  status: production\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00020:\n  id: 20\n  name: '6.0'\n  project_id: 6\n  status: testing\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00021:\n  id: 21\n  name: '7.1'\n  project_id: 6\n  status: production\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\nversion_00022:\n  id: 22\n  name: '8.0'\n  project_id: 6\n  status: testing\n  created_at: 2022-02-26 22:11:12.000000000 Z\n  updated_at: 2022-02-26 22:11:12.000000000 Z\n"
  },
  {
    "path": "spec/models/company_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Company do\n  it { is_expected.to have_many(:supplier_projects)}\n  it { is_expected.to have_many(:customer_projects)}\nend\n"
  },
  {
    "path": "spec/models/priority_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Priority do\n  it { is_expected.to have_many(:tasks)}\nend\n"
  },
  {
    "path": "spec/models/project_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Project do\n  it {is_expected.to have_many(:tasks)}\n  it { is_expected.to have_many(:tasks)}\n  it { is_expected.to have_many(:user_project_participations)}\n  it { is_expected.to have_many(:users)}\n  it { is_expected.to have_many(:versions)}\n  it { is_expected.to belong_to(:customer)}\n  it { is_expected.to belong_to(:supplier)}\nend\n"
  },
  {
    "path": "spec/models/status_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Status do\n  it {is_expected.to have_many(:tasks) }\nend\n\n"
  },
  {
    "path": "spec/models/task_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Task do\n  it { is_expected.to belong_to(:created_by)}\n  it { is_expected.to belong_to(:project)}\n  it { is_expected.to belong_to(:priority)}\n  it { is_expected.to belong_to(:status)}\n  it { is_expected.to belong_to(:relevant_version)}\n  it { is_expected.to belong_to(:expected_version)}\n\n  it { is_expected.to have_and_belong_to_many(:assigned_users)}\nend\n"
  },
  {
    "path": "spec/models/user_project_participation_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe UserProjectParticipation do\n  it { is_expected.to belong_to(:user)}\n  it { is_expected.to belong_to(:project)}\n  it { is_expected.to belong_to(:project_role)}\nend\n"
  },
  {
    "path": "spec/models/user_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe User do\n  it { is_expected.to have_many(:created_tasks)}\n  it { is_expected.to have_and_belong_to_many(:assigned_tasks)}\n  it { is_expected.to have_many(:user_project_participations)}\n  it { is_expected.to have_many(:projects)}\nend\n"
  },
  {
    "path": "spec/models/version_spec.rb",
    "content": "require 'rails_helper'\n\ndescribe Version do\n  it { is_expected.to belong_to(:project)}\nend\n"
  },
  {
    "path": "spec/rails_helper.rb",
    "content": "require 'rails/all'\nrequire 'spec_helper'\nrequire 'shoulda/matchers'\nrequire 'support/test_app/config/environment'\nrequire 'support/download_helper'\nrequire 'rspec/rails'\nrequire 'selenium-webdriver' if ENV['BROWSER']\n\nActiveRecord::Migration.maintain_test_schema!\n\n# set up db\n# be sure to update the schema if required by doing\n# - cd spec/support/rails_app\n# - rake db:migrate\nActiveRecord::Schema.verbose = false\nload 'support/test_app/db/schema.rb' # db agnostic\n\nRSpec.configure do |config|\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://rspec.info/features/6-0/rspec-rails\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  config.include Shoulda::Matchers::ActiveModel, type: :model\n  config.include Shoulda::Matchers::ActiveRecord, type: :model\nend\n\nCapybara.register_driver :selenium do |app|\n  profile = Selenium::WebDriver::Firefox::Profile.new\n  profile['browser.download.dir'] = DownloadHelpers::PATH.to_s\n  profile['browser.download.folderList'] = 2\n\n  # Suppress \"open with\" dialog\n  profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv'\n  profile['browser.startup.homepage'] = 'about:blank' # workaround bug in Selenium 4 alpha4-7\n  profile['accessibility.tabfocus'] = 7 # make tab move over links too\n\n  options = Selenium::WebDriver::Firefox::Options.new\n  options.profile = profile\n\n  version = Capybara::Selenium::Driver.load_selenium\n  options_key = Capybara::Selenium::Driver::CAPS_VERSION.satisfied_by?(version) ? :capabilities : :options\n  driver_options = { browser: :firefox, timeout: 31 }.tap do |opts|\n    opts[options_key] = options\n    # Get a trace level log from geckodriver\n    # :driver_opts => { args: ['-vv'] }\n  end\n\n  Capybara::Selenium::Driver.new(app, **driver_options)\nend\n"
  },
  {
    "path": "spec/schema.rb",
    "content": "ActiveRecord::Schema.define(version: 20150713103513) do\n  create_table 'dummies', force: :cascade do |t|\n    t.string 'name'\n\n    t.datetime 'created_at'\n    t.datetime 'updated_at'\n  end\nend\n"
  },
  {
    "path": "spec/spec_helper.rb",
    "content": "# This file was generated by the `rspec --init` 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 'rspec'\nrequire 'simplecov'\nrequire 'byebug'\n\nSimpleCov.start do\n  formatter = SimpleCov::Formatter::MultiFormatter.new([\n    SimpleCov::Formatter::HTMLFormatter\n  ])\n\n  add_filter \"/spec/\"\n\n  minimum_coverage 87.53\nend\n\nbegin\n  require 'support/active_record'\n  require 'action_controller'\n  require 'action_view'\n  require 'csv'\n\n  ActiveRecord::Base.logger = Logger.new(STDOUT)\nrescue LoadError\n  puts 'LoadError'\nend\n\n$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))\nrequire 'wice_grid'\n\nActiveRecord::ConnectionAdapters::Column.send(:include, ::Wice::WiceGridExtentionToActiveRecordColumn)\n\n::Wice.on_action_view_load\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  config.before(:each) do\n      DownloadHelpers::clear_downloads\n  end\nend\n"
  },
  {
    "path": "spec/support/active_record.rb",
    "content": "require 'active_record'\n\nActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'\n\nload 'spec/schema.rb'\n\nclass Dummy < ActiveRecord::Base\nend\n\nDummy.create(name: 'test')\n"
  },
  {
    "path": "spec/support/download_helper.rb",
    "content": "module DownloadHelpers\n  TIMEOUT = 1\n  PATH    = Rails.root.join(\"tmp/downloads\")\n\n  extend self\n\n  def downloads\n    Dir[PATH.join(\"*\")]\n  end\n\n  def download\n    downloads.first\n  end\n\n  def download_content\n    wait_for_download\n    File.read(download)\n  end\n\n  def wait_for_download\n    Timeout.timeout(TIMEOUT) do\n      sleep 0.1 until downloaded?\n    end\n  end\n\n  def downloaded?\n    !downloading? && downloads.any?\n  end\n\n  def downloading?\n    downloads.grep(/\\.part$/).any?\n  end\n\n  def clear_downloads\n    FileUtils.rm_f(downloads)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/Rakefile",
    "content": "require_relative 'config/application'\n\nExamples::TestApp.load_tasks\n"
  },
  {
    "path": "spec/support/test_app/app/assets/builds/.keep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/app/assets/builds/application.css",
    "content": "@charset \"UTF-8\";\n/*\n * This is a manifest file that'll be compiled into application.css, which will include all the files\n * listed below.\n *\n * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,\n * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.\n *\n * You're free to add application-wide styles to this file and they'll appear at the top of the\n * compiled file, but it's generally better to create a new file per style scope.\n *\n *= require_self\n *= require_tree .\n *= require jquery-ui/humanity\n*/\n/*!\n * Bootstrap  v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-black: #000;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-primary-text-emphasis: #052c65;\n  --bs-secondary-text-emphasis: #2b2f32;\n  --bs-success-text-emphasis: #0a3622;\n  --bs-info-text-emphasis: #055160;\n  --bs-warning-text-emphasis: #664d03;\n  --bs-danger-text-emphasis: #58151c;\n  --bs-light-text-emphasis: #495057;\n  --bs-dark-text-emphasis: #495057;\n  --bs-primary-bg-subtle: #cfe2ff;\n  --bs-secondary-bg-subtle: #e2e3e5;\n  --bs-success-bg-subtle: #d1e7dd;\n  --bs-info-bg-subtle: #cff4fc;\n  --bs-warning-bg-subtle: #fff3cd;\n  --bs-danger-bg-subtle: #f8d7da;\n  --bs-light-bg-subtle: #fcfcfd;\n  --bs-dark-bg-subtle: #ced4da;\n  --bs-primary-border-subtle: #9ec5fe;\n  --bs-secondary-border-subtle: #c4c8cb;\n  --bs-success-border-subtle: #a3cfbb;\n  --bs-info-border-subtle: #9eeaf9;\n  --bs-warning-border-subtle: #ffe69c;\n  --bs-danger-border-subtle: #f1aeb5;\n  --bs-light-border-subtle: #e9ecef;\n  --bs-dark-border-subtle: #adb5bd;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg: #fff;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-emphasis-color: #000;\n  --bs-emphasis-color-rgb: 0, 0, 0;\n  --bs-secondary-color: rgba(33, 37, 41, 0.75);\n  --bs-secondary-color-rgb: 33, 37, 41;\n  --bs-secondary-bg: #e9ecef;\n  --bs-secondary-bg-rgb: 233, 236, 239;\n  --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n  --bs-tertiary-color-rgb: 33, 37, 41;\n  --bs-tertiary-bg: #f8f9fa;\n  --bs-tertiary-bg-rgb: 248, 249, 250;\n  --bs-heading-color: inherit;\n  --bs-link-color: #0d6efd;\n  --bs-link-color-rgb: 13, 110, 253;\n  --bs-link-decoration: underline;\n  --bs-link-hover-color: #0a58ca;\n  --bs-link-hover-color-rgb: 10, 88, 202;\n  --bs-code-color: #d63384;\n  --bs-highlight-color: #212529;\n  --bs-highlight-bg: #fff3cd;\n  --bs-border-width: 1px;\n  --bs-border-style: solid;\n  --bs-border-color: #dee2e6;\n  --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n  --bs-border-radius: 0.375rem;\n  --bs-border-radius-sm: 0.25rem;\n  --bs-border-radius-lg: 0.5rem;\n  --bs-border-radius-xl: 1rem;\n  --bs-border-radius-xxl: 2rem;\n  --bs-border-radius-2xl: var(--bs-border-radius-xxl);\n  --bs-border-radius-pill: 50rem;\n  --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n  --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);\n  --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n  --bs-focus-ring-width: 0.25rem;\n  --bs-focus-ring-opacity: 0.25;\n  --bs-focus-ring-color: rgba(13, 110, 253, 0.25);\n  --bs-form-valid-color: #198754;\n  --bs-form-valid-border-color: #198754;\n  --bs-form-invalid-color: #dc3545;\n  --bs-form-invalid-border-color: #dc3545;\n}\n\n[data-bs-theme=dark] {\n  color-scheme: dark;\n  --bs-body-color: #dee2e6;\n  --bs-body-color-rgb: 222, 226, 230;\n  --bs-body-bg: #212529;\n  --bs-body-bg-rgb: 33, 37, 41;\n  --bs-emphasis-color: #fff;\n  --bs-emphasis-color-rgb: 255, 255, 255;\n  --bs-secondary-color: rgba(222, 226, 230, 0.75);\n  --bs-secondary-color-rgb: 222, 226, 230;\n  --bs-secondary-bg: #343a40;\n  --bs-secondary-bg-rgb: 52, 58, 64;\n  --bs-tertiary-color: rgba(222, 226, 230, 0.5);\n  --bs-tertiary-color-rgb: 222, 226, 230;\n  --bs-tertiary-bg: #2b3035;\n  --bs-tertiary-bg-rgb: 43, 48, 53;\n  --bs-primary-text-emphasis: #6ea8fe;\n  --bs-secondary-text-emphasis: #a7acb1;\n  --bs-success-text-emphasis: #75b798;\n  --bs-info-text-emphasis: #6edff6;\n  --bs-warning-text-emphasis: #ffda6a;\n  --bs-danger-text-emphasis: #ea868f;\n  --bs-light-text-emphasis: #f8f9fa;\n  --bs-dark-text-emphasis: #dee2e6;\n  --bs-primary-bg-subtle: #031633;\n  --bs-secondary-bg-subtle: #161719;\n  --bs-success-bg-subtle: #051b11;\n  --bs-info-bg-subtle: #032830;\n  --bs-warning-bg-subtle: #332701;\n  --bs-danger-bg-subtle: #2c0b0e;\n  --bs-light-bg-subtle: #343a40;\n  --bs-dark-bg-subtle: #1a1d20;\n  --bs-primary-border-subtle: #084298;\n  --bs-secondary-border-subtle: #41464b;\n  --bs-success-border-subtle: #0f5132;\n  --bs-info-border-subtle: #087990;\n  --bs-warning-border-subtle: #997404;\n  --bs-danger-border-subtle: #842029;\n  --bs-light-border-subtle: #495057;\n  --bs-dark-border-subtle: #343a40;\n  --bs-heading-color: inherit;\n  --bs-link-color: #6ea8fe;\n  --bs-link-hover-color: #8bb9fe;\n  --bs-link-color-rgb: 110, 168, 254;\n  --bs-link-hover-color-rgb: 139, 185, 254;\n  --bs-code-color: #e685b5;\n  --bs-highlight-color: #dee2e6;\n  --bs-highlight-bg: #664d03;\n  --bs-border-color: #495057;\n  --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n  --bs-form-valid-color: #75b798;\n  --bs-form-valid-border-color: #75b798;\n  --bs-form-invalid-color: #ea868f;\n  --bs-form-invalid-border-color: #ea868f;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  border: 0;\n  border-top: var(--bs-border-width) solid;\n  opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: var(--bs-heading-color);\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title] {\n  text-decoration: underline dotted;\n  cursor: help;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.1875em;\n  color: var(--bs-highlight-color);\n  background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n  text-decoration: underline;\n}\na:hover {\n  --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: var(--bs-code-color);\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.1875rem 0.375rem;\n  font-size: 0.875em;\n  color: var(--bs-body-bg);\n  background-color: var(--bs-body-color);\n  border-radius: 0.25rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-secondary-color);\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n  display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  -webkit-appearance: textfield;\n  outline-offset: -2px;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: var(--bs-body-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n:root {\n  --bs-breakpoint-xs: 0;\n  --bs-breakpoint-sm: 576px;\n  --bs-breakpoint-md: 768px;\n  --bs-breakpoint-lg: 992px;\n  --bs-breakpoint-xl: 1200px;\n  --bs-breakpoint-xxl: 1400px;\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-color-type: initial;\n  --bs-table-bg-type: initial;\n  --bs-table-color-state: initial;\n  --bs-table-bg-state: initial;\n  --bs-table-color: var(--bs-emphasis-color);\n  --bs-table-bg: var(--bs-body-bg);\n  --bs-table-border-color: var(--bs-border-color);\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: var(--bs-emphasis-color);\n  --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);\n  --bs-table-active-color: var(--bs-emphasis-color);\n  --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);\n  --bs-table-hover-color: var(--bs-emphasis-color);\n  --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  vertical-align: top;\n  border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));\n  background-color: var(--bs-table-bg);\n  border-bottom-width: var(--bs-border-width);\n  box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table-group-divider {\n  border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n  --bs-table-color-type: var(--bs-table-striped-color);\n  --bs-table-bg-type: var(--bs-table-striped-bg);\n}\n\n.table-active {\n  --bs-table-color-state: var(--bs-table-active-color);\n  --bs-table-bg-state: var(--bs-table-active-bg);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-color-state: var(--bs-table-hover-color);\n  --bs-table-bg-state: var(--bs-table-hover-bg);\n}\n\n.table-primary {\n  --bs-table-color: #000;\n  --bs-table-bg: #cfe2ff;\n  --bs-table-border-color: #a6b5cc;\n  --bs-table-striped-bg: #c5d7f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bacbe6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfd1ec;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n  --bs-table-color: #000;\n  --bs-table-bg: #e2e3e5;\n  --bs-table-border-color: #b5b6b7;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n  --bs-table-color: #000;\n  --bs-table-bg: #d1e7dd;\n  --bs-table-border-color: #a7b9b1;\n  --bs-table-striped-bg: #c7dbd2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd0c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1d6cc;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n  --bs-table-color: #000;\n  --bs-table-bg: #cff4fc;\n  --bs-table-border-color: #a6c3ca;\n  --bs-table-striped-bg: #c5e8ef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #badce3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfe2e9;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n  --bs-table-color: #000;\n  --bs-table-bg: #fff3cd;\n  --bs-table-border-color: #ccc2a4;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8d7da;\n  --bs-table-border-color: #c6acae;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n  --bs-table-color: #000;\n  --bs-table-bg: #f8f9fa;\n  --bs-table-border-color: #c6c7c8;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n  --bs-table-color: #fff;\n  --bs-table-bg: #212529;\n  --bs-table-border-color: #4d5154;\n  --bs-table-striped-bg: #2c3034;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #373b3e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #323539;\n  --bs-table-hover-color: #fff;\n  color: var(--bs-table-color);\n  border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + var(--bs-border-width));\n  padding-bottom: calc(0.375rem + var(--bs-border-width));\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + var(--bs-border-width));\n  padding-bottom: calc(0.5rem + var(--bs-border-width));\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + var(--bs-border-width));\n  padding-bottom: calc(0.25rem + var(--bs-border-width));\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-secondary-color);\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-clip: padding-box;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: var(--bs-body-color);\n  background-color: var(--bs-body-bg);\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  min-width: 85px;\n  height: 1.5em;\n  margin: 0;\n}\n.form-control::-webkit-datetime-edit {\n  display: block;\n  padding: 0;\n}\n.form-control::placeholder {\n  color: var(--bs-secondary-color);\n  opacity: 1;\n}\n.form-control:disabled {\n  background-color: var(--bs-secondary-bg);\n  opacity: 1;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  margin-inline-end: 0.75rem;\n  color: var(--bs-body-color);\n  background-color: var(--bs-tertiary-bg);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: var(--bs-border-width);\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  background-color: transparent;\n  border: solid transparent;\n  border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n  outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n  width: 3rem;\n  height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color::-webkit-color-swatch {\n  border: 0 !important;\n  border-radius: var(--bs-border-radius);\n}\n.form-control-color.form-control-sm {\n  height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n  height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  appearance: none;\n  background-color: var(--bs-body-bg);\n  background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: var(--bs-secondary-bg);\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n[data-bs-theme=dark] .form-select {\n  --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-reverse {\n  padding-right: 1.5em;\n  padding-left: 0;\n  text-align: right;\n}\n.form-check-reverse .form-check-input {\n  float: right;\n  margin-right: -1.5em;\n  margin-left: 0;\n}\n\n.form-check-input {\n  --bs-form-check-bg: var(--bs-body-bg);\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  appearance: none;\n  background-color: var(--bs-form-check-bg);\n  background-image: var(--bs-form-check-bg-image);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n  --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  cursor: default;\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: var(--bs-form-switch-bg);\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n  padding-right: 2.5em;\n  padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n  margin-right: -2.5em;\n  margin-left: 0;\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n  --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  appearance: none;\n  background-color: transparent;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  appearance: none;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: var(--bs-secondary-bg);\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n  height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  min-height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  overflow: hidden;\n  text-align: start;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  pointer-events: none;\n  border: var(--bs-border-width) solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label::after,\n.form-floating > .form-control:not(:placeholder-shown) ~ label::after,\n.form-floating > .form-control-plaintext ~ label::after,\n.form-floating > .form-select ~ label::after {\n  position: absolute;\n  inset: 1rem 0.375rem;\n  z-index: -1;\n  height: 1.5em;\n  content: \"\";\n  background-color: var(--bs-body-bg);\n  border-radius: var(--bs-border-radius);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  color: rgba(var(--bs-body-color-rgb), 0.65);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n  border-width: var(--bs-border-width) 0;\n}\n.form-floating > :disabled ~ label,\n.form-floating > .form-control:disabled ~ label {\n  color: #6c757d;\n}\n.form-floating > :disabled ~ label::after,\n.form-floating > .form-control:disabled ~ label::after {\n  background-color: var(--bs-secondary-bg);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n  z-index: 5;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 5;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: var(--bs-body-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-tertiary-bg);\n  border: var(--bs-border-width) solid var(--bs-border-color);\n  border-radius: var(--bs-border-radius);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: var(--bs-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: var(--bs-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: calc(var(--bs-border-width) * -1);\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-valid-color);\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-success);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  padding-right: 4.125rem;\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: var(--bs-form-valid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: var(--bs-form-valid-border-color);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: var(--bs-form-valid-color);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: var(--bs-form-valid-color);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: var(--bs-form-invalid-color);\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: var(--bs-danger);\n  border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  padding-right: 4.125rem;\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: var(--bs-form-invalid-border-color);\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n  width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: var(--bs-form-invalid-border-color);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: var(--bs-form-invalid-color);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: var(--bs-form-invalid-color);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n  z-index: 4;\n}\n\n.btn {\n  --bs-btn-padding-x: 0.75rem;\n  --bs-btn-padding-y: 0.375rem;\n  --bs-btn-font-family: ;\n  --bs-btn-font-size: 1rem;\n  --bs-btn-font-weight: 400;\n  --bs-btn-line-height: 1.5;\n  --bs-btn-color: var(--bs-body-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-width: var(--bs-border-width);\n  --bs-btn-border-color: transparent;\n  --bs-btn-border-radius: var(--bs-border-radius);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  --bs-btn-disabled-opacity: 0.65;\n  --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n  display: inline-block;\n  padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n  font-family: var(--bs-btn-font-family);\n  font-size: var(--bs-btn-font-size);\n  font-weight: var(--bs-btn-font-weight);\n  line-height: var(--bs-btn-line-height);\n  color: var(--bs-btn-color);\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n  border-radius: var(--bs-btn-border-radius);\n  background-color: var(--bs-btn-bg);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n  color: var(--bs-btn-color);\n  background-color: var(--bs-btn-bg);\n  border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n  color: var(--bs-btn-hover-color);\n  background-color: var(--bs-btn-hover-bg);\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n  border-color: var(--bs-btn-hover-border-color);\n  outline: 0;\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n  color: var(--bs-btn-active-color);\n  background-color: var(--bs-btn-active-bg);\n  border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked:focus-visible + .btn {\n  box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  color: var(--bs-btn-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-btn-disabled-bg);\n  border-color: var(--bs-btn-disabled-border-color);\n  opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0b5ed7;\n  --bs-btn-hover-border-color: #0a58ca;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0a58ca;\n  --bs-btn-active-border-color: #0a53be;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #0d6efd;\n  --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #5c636a;\n  --bs-btn-hover-border-color: #565e64;\n  --bs-btn-focus-shadow-rgb: 130, 138, 145;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #565e64;\n  --bs-btn-active-border-color: #51585e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #6c757d;\n  --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #157347;\n  --bs-btn-hover-border-color: #146c43;\n  --bs-btn-focus-shadow-rgb: 60, 153, 110;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #146c43;\n  --bs-btn-active-border-color: #13653f;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #198754;\n  --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #31d2f2;\n  --bs-btn-hover-border-color: #25cff2;\n  --bs-btn-focus-shadow-rgb: 11, 172, 204;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #3dd5f3;\n  --bs-btn-active-border-color: #25cff2;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #0dcaf0;\n  --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffca2c;\n  --bs-btn-hover-border-color: #ffc720;\n  --bs-btn-focus-shadow-rgb: 217, 164, 6;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffcd39;\n  --bs-btn-active-border-color: #ffc720;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #ffc107;\n  --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #bb2d3b;\n  --bs-btn-hover-border-color: #b02a37;\n  --bs-btn-focus-shadow-rgb: 225, 83, 97;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #b02a37;\n  --bs-btn-active-border-color: #a52834;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #dc3545;\n  --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n  --bs-btn-color: #000;\n  --bs-btn-bg: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #d3d4d5;\n  --bs-btn-hover-border-color: #c6c7c8;\n  --bs-btn-focus-shadow-rgb: 211, 212, 213;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #c6c7c8;\n  --bs-btn-active-border-color: #babbbc;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #000;\n  --bs-btn-disabled-bg: #f8f9fa;\n  --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n  --bs-btn-color: #fff;\n  --bs-btn-bg: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #424649;\n  --bs-btn-hover-border-color: #373b3e;\n  --bs-btn-focus-shadow-rgb: 66, 70, 73;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #4d5154;\n  --bs-btn-active-border-color: #373b3e;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #fff;\n  --bs-btn-disabled-bg: #212529;\n  --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n  --bs-btn-color: #0d6efd;\n  --bs-btn-border-color: #0d6efd;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #0d6efd;\n  --bs-btn-hover-border-color: #0d6efd;\n  --bs-btn-focus-shadow-rgb: 13, 110, 253;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #0d6efd;\n  --bs-btn-active-border-color: #0d6efd;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0d6efd;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0d6efd;\n  --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n  --bs-btn-color: #6c757d;\n  --bs-btn-border-color: #6c757d;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #6c757d;\n  --bs-btn-hover-border-color: #6c757d;\n  --bs-btn-focus-shadow-rgb: 108, 117, 125;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #6c757d;\n  --bs-btn-active-border-color: #6c757d;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #6c757d;\n  --bs-gradient: none;\n}\n\n.btn-outline-success {\n  --bs-btn-color: #198754;\n  --bs-btn-border-color: #198754;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #198754;\n  --bs-btn-hover-border-color: #198754;\n  --bs-btn-focus-shadow-rgb: 25, 135, 84;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #198754;\n  --bs-btn-active-border-color: #198754;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #198754;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #198754;\n  --bs-gradient: none;\n}\n\n.btn-outline-info {\n  --bs-btn-color: #0dcaf0;\n  --bs-btn-border-color: #0dcaf0;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #0dcaf0;\n  --bs-btn-hover-border-color: #0dcaf0;\n  --bs-btn-focus-shadow-rgb: 13, 202, 240;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #0dcaf0;\n  --bs-btn-active-border-color: #0dcaf0;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #0dcaf0;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #0dcaf0;\n  --bs-gradient: none;\n}\n\n.btn-outline-warning {\n  --bs-btn-color: #ffc107;\n  --bs-btn-border-color: #ffc107;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #ffc107;\n  --bs-btn-hover-border-color: #ffc107;\n  --bs-btn-focus-shadow-rgb: 255, 193, 7;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #ffc107;\n  --bs-btn-active-border-color: #ffc107;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #ffc107;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #ffc107;\n  --bs-gradient: none;\n}\n\n.btn-outline-danger {\n  --bs-btn-color: #dc3545;\n  --bs-btn-border-color: #dc3545;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #dc3545;\n  --bs-btn-hover-border-color: #dc3545;\n  --bs-btn-focus-shadow-rgb: 220, 53, 69;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #dc3545;\n  --bs-btn-active-border-color: #dc3545;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #dc3545;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #dc3545;\n  --bs-gradient: none;\n}\n\n.btn-outline-light {\n  --bs-btn-color: #f8f9fa;\n  --bs-btn-border-color: #f8f9fa;\n  --bs-btn-hover-color: #000;\n  --bs-btn-hover-bg: #f8f9fa;\n  --bs-btn-hover-border-color: #f8f9fa;\n  --bs-btn-focus-shadow-rgb: 248, 249, 250;\n  --bs-btn-active-color: #000;\n  --bs-btn-active-bg: #f8f9fa;\n  --bs-btn-active-border-color: #f8f9fa;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #f8f9fa;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #f8f9fa;\n  --bs-gradient: none;\n}\n\n.btn-outline-dark {\n  --bs-btn-color: #212529;\n  --bs-btn-border-color: #212529;\n  --bs-btn-hover-color: #fff;\n  --bs-btn-hover-bg: #212529;\n  --bs-btn-hover-border-color: #212529;\n  --bs-btn-focus-shadow-rgb: 33, 37, 41;\n  --bs-btn-active-color: #fff;\n  --bs-btn-active-bg: #212529;\n  --bs-btn-active-border-color: #212529;\n  --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  --bs-btn-disabled-color: #212529;\n  --bs-btn-disabled-bg: transparent;\n  --bs-btn-disabled-border-color: #212529;\n  --bs-gradient: none;\n}\n\n.btn-link {\n  --bs-btn-font-weight: 400;\n  --bs-btn-color: var(--bs-link-color);\n  --bs-btn-bg: transparent;\n  --bs-btn-border-color: transparent;\n  --bs-btn-hover-color: var(--bs-link-hover-color);\n  --bs-btn-hover-border-color: transparent;\n  --bs-btn-active-color: var(--bs-link-hover-color);\n  --bs-btn-active-border-color: transparent;\n  --bs-btn-disabled-color: #6c757d;\n  --bs-btn-disabled-border-color: transparent;\n  --bs-btn-box-shadow: 0 0 0 #000;\n  --bs-btn-focus-shadow-rgb: 49, 132, 253;\n  text-decoration: underline;\n}\n.btn-link:focus-visible {\n  color: var(--bs-btn-color);\n}\n.btn-link:hover {\n  color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  --bs-btn-padding-y: 0.5rem;\n  --bs-btn-padding-x: 1rem;\n  --bs-btn-font-size: 1.25rem;\n  --bs-btn-border-radius: var(--bs-border-radius-lg);\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  --bs-btn-padding-y: 0.25rem;\n  --bs-btn-padding-x: 0.5rem;\n  --bs-btn-font-size: 0.875rem;\n  --bs-btn-border-radius: var(--bs-border-radius-sm);\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  --bs-dropdown-zindex: 1000;\n  --bs-dropdown-min-width: 10rem;\n  --bs-dropdown-padding-x: 0;\n  --bs-dropdown-padding-y: 0.5rem;\n  --bs-dropdown-spacer: 0.125rem;\n  --bs-dropdown-font-size: 1rem;\n  --bs-dropdown-color: var(--bs-body-color);\n  --bs-dropdown-bg: var(--bs-body-bg);\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-border-radius: var(--bs-border-radius);\n  --bs-dropdown-border-width: var(--bs-border-width);\n  --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-divider-margin-y: 0.5rem;\n  --bs-dropdown-box-shadow: var(--bs-box-shadow);\n  --bs-dropdown-link-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-color: var(--bs-body-color);\n  --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);\n  --bs-dropdown-item-padding-x: 1rem;\n  --bs-dropdown-item-padding-y: 0.25rem;\n  --bs-dropdown-header-color: #6c757d;\n  --bs-dropdown-header-padding-x: 1rem;\n  --bs-dropdown-header-padding-y: 0.5rem;\n  position: absolute;\n  z-index: var(--bs-dropdown-zindex);\n  display: none;\n  min-width: var(--bs-dropdown-min-width);\n  padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n  margin: 0;\n  font-size: var(--bs-dropdown-font-size);\n  color: var(--bs-dropdown-color);\n  text-align: left;\n  list-style: none;\n  background-color: var(--bs-dropdown-bg);\n  background-clip: padding-box;\n  border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n  border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: var(--bs-dropdown-divider-margin-y) 0;\n  overflow: hidden;\n  border-top: 1px solid var(--bs-dropdown-divider-bg);\n  opacity: 1;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  clear: both;\n  font-weight: 400;\n  color: var(--bs-dropdown-link-color);\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n  border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: var(--bs-dropdown-link-hover-color);\n  background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: var(--bs-dropdown-link-active-color);\n  text-decoration: none;\n  background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: var(--bs-dropdown-link-disabled-color);\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: var(--bs-dropdown-header-color);\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n  color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n  --bs-dropdown-color: #dee2e6;\n  --bs-dropdown-bg: #343a40;\n  --bs-dropdown-border-color: var(--bs-border-color-translucent);\n  --bs-dropdown-box-shadow: ;\n  --bs-dropdown-link-color: #dee2e6;\n  --bs-dropdown-link-hover-color: #fff;\n  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n  --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n  --bs-dropdown-link-active-color: #fff;\n  --bs-dropdown-link-active-bg: #0d6efd;\n  --bs-dropdown-link-disabled-color: #adb5bd;\n  --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group {\n  border-radius: var(--bs-border-radius);\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  --bs-nav-link-padding-x: 1rem;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-link-color);\n  --bs-nav-link-hover-color: var(--bs-link-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n  font-size: var(--bs-nav-link-font-size);\n  font-weight: var(--bs-nav-link-font-weight);\n  color: var(--bs-nav-link-color);\n  text-decoration: none;\n  background: none;\n  border: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: var(--bs-nav-link-hover-color);\n}\n.nav-link:focus-visible {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.nav-link.disabled, .nav-link:disabled {\n  color: var(--bs-nav-link-disabled-color);\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  --bs-nav-tabs-border-width: var(--bs-border-width);\n  --bs-nav-tabs-border-color: var(--bs-border-color);\n  --bs-nav-tabs-border-radius: var(--bs-border-radius);\n  --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n  --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n  --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n  --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n  border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n  margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n  border: var(--bs-nav-tabs-border-width) solid transparent;\n  border-top-left-radius: var(--bs-nav-tabs-border-radius);\n  border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  isolation: isolate;\n  border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: var(--bs-nav-tabs-link-active-color);\n  background-color: var(--bs-nav-tabs-link-active-bg);\n  border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n  margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills {\n  --bs-nav-pills-border-radius: var(--bs-border-radius);\n  --bs-nav-pills-link-active-color: #fff;\n  --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n  border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: var(--bs-nav-pills-link-active-color);\n  background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-underline {\n  --bs-nav-underline-gap: 1rem;\n  --bs-nav-underline-border-width: 0.125rem;\n  --bs-nav-underline-link-active-color: var(--bs-emphasis-color);\n  gap: var(--bs-nav-underline-gap);\n}\n.nav-underline .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n  border-bottom: var(--bs-nav-underline-border-width) solid transparent;\n}\n.nav-underline .nav-link:hover, .nav-underline .nav-link:focus {\n  border-bottom-color: currentcolor;\n}\n.nav-underline .nav-link.active,\n.nav-underline .show > .nav-link {\n  font-weight: 700;\n  color: var(--bs-nav-underline-link-active-color);\n  border-bottom-color: currentcolor;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  --bs-navbar-padding-x: 0;\n  --bs-navbar-padding-y: 0.5rem;\n  --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n  --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n  --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n  --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-padding-y: 0.3125rem;\n  --bs-navbar-brand-margin-end: 1rem;\n  --bs-navbar-brand-font-size: 1.25rem;\n  --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n  --bs-navbar-nav-link-padding-x: 0.5rem;\n  --bs-navbar-toggler-padding-y: 0.25rem;\n  --bs-navbar-toggler-padding-x: 0.75rem;\n  --bs-navbar-toggler-font-size: 1.25rem;\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n  --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n  --bs-navbar-toggler-border-radius: var(--bs-border-radius);\n  --bs-navbar-toggler-focus-width: 0.25rem;\n  --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: var(--bs-navbar-brand-padding-y);\n  padding-bottom: var(--bs-navbar-brand-padding-y);\n  margin-right: var(--bs-navbar-brand-margin-end);\n  font-size: var(--bs-navbar-brand-font-size);\n  color: var(--bs-navbar-brand-color);\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n  color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n  --bs-nav-link-padding-x: 0;\n  --bs-nav-link-padding-y: 0.5rem;\n  --bs-nav-link-font-weight: ;\n  --bs-nav-link-color: var(--bs-navbar-color);\n  --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n  --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link.active, .navbar-nav .nav-link.show {\n  color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n  color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n  font-size: var(--bs-navbar-toggler-font-size);\n  line-height: 1;\n  color: var(--bs-navbar-color);\n  background-color: transparent;\n  border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n  border-radius: var(--bs-navbar-toggler-border-radius);\n  transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-image: var(--bs-navbar-toggler-icon-bg);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: var(--bs-navbar-nav-link-padding-x);\n    padding-left: var(--bs-navbar-nav-link-padding-x);\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: static;\n    z-index: auto;\n    flex-grow: 1;\n    width: auto !important;\n    height: auto !important;\n    visibility: visible !important;\n    background-color: transparent !important;\n    border: 0 !important;\n    transform: none !important;\n    transition: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: var(--bs-navbar-nav-link-padding-x);\n  padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: static;\n  z-index: auto;\n  flex-grow: 1;\n  width: auto !important;\n  height: auto !important;\n  visibility: visible !important;\n  background-color: transparent !important;\n  border: 0 !important;\n  transform: none !important;\n  transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-dark,\n.navbar[data-bs-theme=dark] {\n  --bs-navbar-color: rgba(255, 255, 255, 0.55);\n  --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n  --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n  --bs-navbar-active-color: #fff;\n  --bs-navbar-brand-color: #fff;\n  --bs-navbar-brand-hover-color: #fff;\n  --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar-toggler-icon {\n  --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n  --bs-card-spacer-y: 1rem;\n  --bs-card-spacer-x: 1rem;\n  --bs-card-title-spacer-y: 0.5rem;\n  --bs-card-title-color: ;\n  --bs-card-subtitle-color: ;\n  --bs-card-border-width: var(--bs-border-width);\n  --bs-card-border-color: var(--bs-border-color-translucent);\n  --bs-card-border-radius: var(--bs-border-radius);\n  --bs-card-box-shadow: ;\n  --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-card-cap-padding-y: 0.5rem;\n  --bs-card-cap-padding-x: 1rem;\n  --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n  --bs-card-cap-color: ;\n  --bs-card-height: ;\n  --bs-card-color: ;\n  --bs-card-bg: var(--bs-body-bg);\n  --bs-card-img-overlay-padding: 1rem;\n  --bs-card-group-margin: 0.75rem;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  height: var(--bs-card-height);\n  color: var(--bs-body-color);\n  word-wrap: break-word;\n  background-color: var(--bs-card-bg);\n  background-clip: border-box;\n  border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n  border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n  color: var(--bs-card-color);\n}\n\n.card-title {\n  margin-bottom: var(--bs-card-title-spacer-y);\n  color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n  margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n  margin-bottom: 0;\n  color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  margin-bottom: 0;\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n  border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n  padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n  color: var(--bs-card-cap-color);\n  background-color: var(--bs-card-cap-bg);\n  border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n  border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n  border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n  background-color: var(--bs-card-bg);\n  border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n  margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n  margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: var(--bs-card-img-overlay-padding);\n  border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: var(--bs-card-inner-border-radius);\n  border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: var(--bs-card-inner-border-radius);\n  border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n  margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion {\n  --bs-accordion-color: var(--bs-body-color);\n  --bs-accordion-bg: var(--bs-body-bg);\n  --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n  --bs-accordion-border-color: var(--bs-border-color);\n  --bs-accordion-border-width: var(--bs-border-width);\n  --bs-accordion-border-radius: var(--bs-border-radius);\n  --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n  --bs-accordion-btn-padding-x: 1.25rem;\n  --bs-accordion-btn-padding-y: 1rem;\n  --bs-accordion-btn-color: var(--bs-body-color);\n  --bs-accordion-btn-bg: var(--bs-accordion-bg);\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-icon-width: 1.25rem;\n  --bs-accordion-btn-icon-transform: rotate(-180deg);\n  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-accordion-body-padding-x: 1.25rem;\n  --bs-accordion-body-padding-y: 1rem;\n  --bs-accordion-active-color: var(--bs-primary-text-emphasis);\n  --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n  font-size: 1rem;\n  color: var(--bs-accordion-btn-color);\n  text-align: left;\n  background-color: var(--bs-accordion-btn-bg);\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: var(--bs-accordion-active-color);\n  background-color: var(--bs-accordion-active-bg);\n  box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: var(--bs-accordion-btn-active-icon);\n  transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: var(--bs-accordion-btn-icon-width);\n  height: var(--bs-accordion-btn-icon-width);\n  margin-left: auto;\n  content: \"\";\n  background-image: var(--bs-accordion-btn-icon);\n  background-repeat: no-repeat;\n  background-size: var(--bs-accordion-btn-icon-width);\n  transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  outline: 0;\n  box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  color: var(--bs-accordion-color);\n  background-color: var(--bs-accordion-bg);\n  border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: var(--bs-accordion-border-radius);\n  border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type > .accordion-header .accordion-button {\n  border-top-left-radius: var(--bs-accordion-inner-border-radius);\n  border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {\n  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type > .accordion-collapse {\n  border-bottom-right-radius: var(--bs-accordion-border-radius);\n  border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush > .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush > .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush > .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {\n  border-radius: 0;\n}\n.accordion-flush > .accordion-item > .accordion-collapse {\n  border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n  --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n  --bs-breadcrumb-padding-x: 0;\n  --bs-breadcrumb-padding-y: 0;\n  --bs-breadcrumb-margin-bottom: 1rem;\n  --bs-breadcrumb-bg: ;\n  --bs-breadcrumb-border-radius: ;\n  --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n  --bs-breadcrumb-item-padding-x: 0.5rem;\n  --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n  margin-bottom: var(--bs-breadcrumb-margin-bottom);\n  font-size: var(--bs-breadcrumb-font-size);\n  list-style: none;\n  background-color: var(--bs-breadcrumb-bg);\n  border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: var(--bs-breadcrumb-item-padding-x);\n  color: var(--bs-breadcrumb-divider-color);\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n  color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n  --bs-pagination-padding-x: 0.75rem;\n  --bs-pagination-padding-y: 0.375rem;\n  --bs-pagination-font-size: 1rem;\n  --bs-pagination-color: var(--bs-link-color);\n  --bs-pagination-bg: var(--bs-body-bg);\n  --bs-pagination-border-width: var(--bs-border-width);\n  --bs-pagination-border-color: var(--bs-border-color);\n  --bs-pagination-border-radius: var(--bs-border-radius);\n  --bs-pagination-hover-color: var(--bs-link-hover-color);\n  --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n  --bs-pagination-hover-border-color: var(--bs-border-color);\n  --bs-pagination-focus-color: var(--bs-link-hover-color);\n  --bs-pagination-focus-bg: var(--bs-secondary-bg);\n  --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-pagination-active-color: #fff;\n  --bs-pagination-active-bg: #0d6efd;\n  --bs-pagination-active-border-color: #0d6efd;\n  --bs-pagination-disabled-color: var(--bs-secondary-color);\n  --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n  --bs-pagination-disabled-border-color: var(--bs-border-color);\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n  font-size: var(--bs-pagination-font-size);\n  color: var(--bs-pagination-color);\n  text-decoration: none;\n  background-color: var(--bs-pagination-bg);\n  border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: var(--bs-pagination-hover-color);\n  background-color: var(--bs-pagination-hover-bg);\n  border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n  z-index: 3;\n  color: var(--bs-pagination-focus-color);\n  background-color: var(--bs-pagination-focus-bg);\n  outline: 0;\n  box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n  z-index: 3;\n  color: var(--bs-pagination-active-color);\n  background-color: var(--bs-pagination-active-bg);\n  border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n  color: var(--bs-pagination-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-pagination-disabled-bg);\n  border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n  border-top-left-radius: var(--bs-pagination-border-radius);\n  border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n  border-top-right-radius: var(--bs-pagination-border-radius);\n  border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n  --bs-pagination-padding-x: 1.5rem;\n  --bs-pagination-padding-y: 0.75rem;\n  --bs-pagination-font-size: 1.25rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-lg);\n}\n\n.pagination-sm {\n  --bs-pagination-padding-x: 0.5rem;\n  --bs-pagination-padding-y: 0.25rem;\n  --bs-pagination-font-size: 0.875rem;\n  --bs-pagination-border-radius: var(--bs-border-radius-sm);\n}\n\n.badge {\n  --bs-badge-padding-x: 0.65em;\n  --bs-badge-padding-y: 0.35em;\n  --bs-badge-font-size: 0.75em;\n  --bs-badge-font-weight: 700;\n  --bs-badge-color: #fff;\n  --bs-badge-border-radius: var(--bs-border-radius);\n  display: inline-block;\n  padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n  font-size: var(--bs-badge-font-size);\n  font-weight: var(--bs-badge-font-weight);\n  line-height: 1;\n  color: var(--bs-badge-color);\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  --bs-alert-bg: transparent;\n  --bs-alert-padding-x: 1rem;\n  --bs-alert-padding-y: 1rem;\n  --bs-alert-margin-bottom: 1rem;\n  --bs-alert-color: inherit;\n  --bs-alert-border-color: transparent;\n  --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n  --bs-alert-border-radius: var(--bs-border-radius);\n  --bs-alert-link-color: inherit;\n  position: relative;\n  padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n  margin-bottom: var(--bs-alert-margin-bottom);\n  color: var(--bs-alert-color);\n  background-color: var(--bs-alert-bg);\n  border: var(--bs-alert-border);\n  border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n  color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  --bs-alert-color: var(--bs-primary-text-emphasis);\n  --bs-alert-bg: var(--bs-primary-bg-subtle);\n  --bs-alert-border-color: var(--bs-primary-border-subtle);\n  --bs-alert-link-color: var(--bs-primary-text-emphasis);\n}\n\n.alert-secondary {\n  --bs-alert-color: var(--bs-secondary-text-emphasis);\n  --bs-alert-bg: var(--bs-secondary-bg-subtle);\n  --bs-alert-border-color: var(--bs-secondary-border-subtle);\n  --bs-alert-link-color: var(--bs-secondary-text-emphasis);\n}\n\n.alert-success {\n  --bs-alert-color: var(--bs-success-text-emphasis);\n  --bs-alert-bg: var(--bs-success-bg-subtle);\n  --bs-alert-border-color: var(--bs-success-border-subtle);\n  --bs-alert-link-color: var(--bs-success-text-emphasis);\n}\n\n.alert-info {\n  --bs-alert-color: var(--bs-info-text-emphasis);\n  --bs-alert-bg: var(--bs-info-bg-subtle);\n  --bs-alert-border-color: var(--bs-info-border-subtle);\n  --bs-alert-link-color: var(--bs-info-text-emphasis);\n}\n\n.alert-warning {\n  --bs-alert-color: var(--bs-warning-text-emphasis);\n  --bs-alert-bg: var(--bs-warning-bg-subtle);\n  --bs-alert-border-color: var(--bs-warning-border-subtle);\n  --bs-alert-link-color: var(--bs-warning-text-emphasis);\n}\n\n.alert-danger {\n  --bs-alert-color: var(--bs-danger-text-emphasis);\n  --bs-alert-bg: var(--bs-danger-bg-subtle);\n  --bs-alert-border-color: var(--bs-danger-border-subtle);\n  --bs-alert-link-color: var(--bs-danger-text-emphasis);\n}\n\n.alert-light {\n  --bs-alert-color: var(--bs-light-text-emphasis);\n  --bs-alert-bg: var(--bs-light-bg-subtle);\n  --bs-alert-border-color: var(--bs-light-border-subtle);\n  --bs-alert-link-color: var(--bs-light-text-emphasis);\n}\n\n.alert-dark {\n  --bs-alert-color: var(--bs-dark-text-emphasis);\n  --bs-alert-bg: var(--bs-dark-bg-subtle);\n  --bs-alert-border-color: var(--bs-dark-border-subtle);\n  --bs-alert-link-color: var(--bs-dark-text-emphasis);\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress,\n.progress-stacked {\n  --bs-progress-height: 1rem;\n  --bs-progress-font-size: 0.75rem;\n  --bs-progress-bg: var(--bs-secondary-bg);\n  --bs-progress-border-radius: var(--bs-border-radius);\n  --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n  --bs-progress-bar-color: #fff;\n  --bs-progress-bar-bg: #0d6efd;\n  --bs-progress-bar-transition: width 0.6s ease;\n  display: flex;\n  height: var(--bs-progress-height);\n  overflow: hidden;\n  font-size: var(--bs-progress-font-size);\n  background-color: var(--bs-progress-bg);\n  border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: var(--bs-progress-bar-color);\n  text-align: center;\n  white-space: nowrap;\n  background-color: var(--bs-progress-bar-bg);\n  transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\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: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n  overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n  width: 100%;\n}\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    animation: none;\n  }\n}\n\n.list-group {\n  --bs-list-group-color: var(--bs-body-color);\n  --bs-list-group-bg: var(--bs-body-bg);\n  --bs-list-group-border-color: var(--bs-border-color);\n  --bs-list-group-border-width: var(--bs-border-width);\n  --bs-list-group-border-radius: var(--bs-border-radius);\n  --bs-list-group-item-padding-x: 1rem;\n  --bs-list-group-item-padding-y: 0.5rem;\n  --bs-list-group-action-color: var(--bs-secondary-color);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n  --bs-list-group-action-active-color: var(--bs-body-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n  --bs-list-group-disabled-color: var(--bs-secondary-color);\n  --bs-list-group-disabled-bg: var(--bs-body-bg);\n  --bs-list-group-active-color: #fff;\n  --bs-list-group-active-bg: #0d6efd;\n  --bs-list-group-active-border-color: #0d6efd;\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: var(--bs-list-group-action-color);\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: var(--bs-list-group-action-hover-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n  color: var(--bs-list-group-action-active-color);\n  background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n  color: var(--bs-list-group-color);\n  text-decoration: none;\n  background-color: var(--bs-list-group-bg);\n  border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: var(--bs-list-group-disabled-color);\n  pointer-events: none;\n  background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n  z-index: 2;\n  color: var(--bs-list-group-active-color);\n  background-color: var(--bs-list-group-active-bg);\n  border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: calc(-1 * var(--bs-list-group-border-width));\n  border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n  border-bottom-left-radius: var(--bs-list-group-border-radius);\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n  border-top-right-radius: var(--bs-list-group-border-radius);\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: var(--bs-list-group-border-width);\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: calc(-1 * var(--bs-list-group-border-width));\n  border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n    border-bottom-left-radius: var(--bs-list-group-border-radius);\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n    border-top-right-radius: var(--bs-list-group-border-radius);\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: var(--bs-list-group-border-width);\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: calc(-1 * var(--bs-list-group-border-width));\n    border-left-width: var(--bs-list-group-border-width);\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  --bs-list-group-color: var(--bs-primary-text-emphasis);\n  --bs-list-group-bg: var(--bs-primary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-primary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-primary-border-subtle);\n  --bs-list-group-active-color: var(--bs-primary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-primary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-primary-text-emphasis);\n}\n\n.list-group-item-secondary {\n  --bs-list-group-color: var(--bs-secondary-text-emphasis);\n  --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n  --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);\n  --bs-list-group-active-color: var(--bs-secondary-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-secondary-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis);\n}\n\n.list-group-item-success {\n  --bs-list-group-color: var(--bs-success-text-emphasis);\n  --bs-list-group-bg: var(--bs-success-bg-subtle);\n  --bs-list-group-border-color: var(--bs-success-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-success-border-subtle);\n  --bs-list-group-active-color: var(--bs-success-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-success-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-success-text-emphasis);\n}\n\n.list-group-item-info {\n  --bs-list-group-color: var(--bs-info-text-emphasis);\n  --bs-list-group-bg: var(--bs-info-bg-subtle);\n  --bs-list-group-border-color: var(--bs-info-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-info-border-subtle);\n  --bs-list-group-active-color: var(--bs-info-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-info-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-info-text-emphasis);\n}\n\n.list-group-item-warning {\n  --bs-list-group-color: var(--bs-warning-text-emphasis);\n  --bs-list-group-bg: var(--bs-warning-bg-subtle);\n  --bs-list-group-border-color: var(--bs-warning-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-warning-border-subtle);\n  --bs-list-group-active-color: var(--bs-warning-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-warning-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-warning-text-emphasis);\n}\n\n.list-group-item-danger {\n  --bs-list-group-color: var(--bs-danger-text-emphasis);\n  --bs-list-group-bg: var(--bs-danger-bg-subtle);\n  --bs-list-group-border-color: var(--bs-danger-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-danger-border-subtle);\n  --bs-list-group-active-color: var(--bs-danger-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-danger-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-danger-text-emphasis);\n}\n\n.list-group-item-light {\n  --bs-list-group-color: var(--bs-light-text-emphasis);\n  --bs-list-group-bg: var(--bs-light-bg-subtle);\n  --bs-list-group-border-color: var(--bs-light-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-light-border-subtle);\n  --bs-list-group-active-color: var(--bs-light-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-light-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-light-text-emphasis);\n}\n\n.list-group-item-dark {\n  --bs-list-group-color: var(--bs-dark-text-emphasis);\n  --bs-list-group-bg: var(--bs-dark-bg-subtle);\n  --bs-list-group-border-color: var(--bs-dark-border-subtle);\n  --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n  --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-action-active-color: var(--bs-emphasis-color);\n  --bs-list-group-action-active-bg: var(--bs-dark-border-subtle);\n  --bs-list-group-active-color: var(--bs-dark-bg-subtle);\n  --bs-list-group-active-bg: var(--bs-dark-text-emphasis);\n  --bs-list-group-active-border-color: var(--bs-dark-text-emphasis);\n}\n\n.btn-close {\n  --bs-btn-close-color: #000;\n  --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n  --bs-btn-close-opacity: 0.5;\n  --bs-btn-close-hover-opacity: 0.75;\n  --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  --bs-btn-close-focus-opacity: 1;\n  --bs-btn-close-disabled-opacity: 0.25;\n  --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: var(--bs-btn-close-color);\n  background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.375rem;\n  opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n  color: var(--bs-btn-close-color);\n  text-decoration: none;\n  opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: var(--bs-btn-close-focus-shadow);\n  opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  user-select: none;\n  opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n  filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n  --bs-toast-zindex: 1090;\n  --bs-toast-padding-x: 0.75rem;\n  --bs-toast-padding-y: 0.5rem;\n  --bs-toast-spacing: 1.5rem;\n  --bs-toast-max-width: 350px;\n  --bs-toast-font-size: 0.875rem;\n  --bs-toast-color: ;\n  --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-border-width: var(--bs-border-width);\n  --bs-toast-border-color: var(--bs-border-color-translucent);\n  --bs-toast-border-radius: var(--bs-border-radius);\n  --bs-toast-box-shadow: var(--bs-box-shadow);\n  --bs-toast-header-color: var(--bs-secondary-color);\n  --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n  --bs-toast-header-border-color: var(--bs-border-color-translucent);\n  width: var(--bs-toast-max-width);\n  max-width: 100%;\n  font-size: var(--bs-toast-font-size);\n  color: var(--bs-toast-color);\n  pointer-events: auto;\n  background-color: var(--bs-toast-bg);\n  background-clip: padding-box;\n  border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n  box-shadow: var(--bs-toast-box-shadow);\n  border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  --bs-toast-zindex: 1090;\n  position: absolute;\n  z-index: var(--bs-toast-zindex);\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n  color: var(--bs-toast-header-color);\n  background-color: var(--bs-toast-header-bg);\n  background-clip: padding-box;\n  border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n  border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n  border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n  margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n  margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n  padding: var(--bs-toast-padding-x);\n  word-wrap: break-word;\n}\n\n.modal {\n  --bs-modal-zindex: 1055;\n  --bs-modal-width: 500px;\n  --bs-modal-padding: 1rem;\n  --bs-modal-margin: 0.5rem;\n  --bs-modal-color: ;\n  --bs-modal-bg: var(--bs-body-bg);\n  --bs-modal-border-color: var(--bs-border-color-translucent);\n  --bs-modal-border-width: var(--bs-border-width);\n  --bs-modal-border-radius: var(--bs-border-radius-lg);\n  --bs-modal-box-shadow: var(--bs-box-shadow-sm);\n  --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n  --bs-modal-header-padding-x: 1rem;\n  --bs-modal-header-padding-y: 1rem;\n  --bs-modal-header-padding: 1rem 1rem;\n  --bs-modal-header-border-color: var(--bs-border-color);\n  --bs-modal-header-border-width: var(--bs-border-width);\n  --bs-modal-title-line-height: 1.5;\n  --bs-modal-footer-gap: 0.5rem;\n  --bs-modal-footer-bg: ;\n  --bs-modal-footer-border-color: var(--bs-border-color);\n  --bs-modal-footer-border-width: var(--bs-border-width);\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-modal-zindex);\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: var(--bs-modal-margin);\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  color: var(--bs-modal-color);\n  pointer-events: auto;\n  background-color: var(--bs-modal-bg);\n  background-clip: padding-box;\n  border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n  border-radius: var(--bs-modal-border-radius);\n  outline: 0;\n}\n\n.modal-backdrop {\n  --bs-backdrop-zindex: 1050;\n  --bs-backdrop-bg: #000;\n  --bs-backdrop-opacity: 0.5;\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--bs-backdrop-zindex);\n  width: 100vw;\n  height: 100vh;\n  background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  padding: var(--bs-modal-header-padding);\n  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n  border-top-left-radius: var(--bs-modal-inner-border-radius);\n  border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n  padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n  margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n  display: flex;\n  flex-shrink: 0;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end;\n  padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n  background-color: var(--bs-modal-footer-bg);\n  border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n  border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n  border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n  margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n  .modal {\n    --bs-modal-margin: 1.75rem;\n    --bs-modal-box-shadow: var(--bs-box-shadow);\n  }\n  .modal-dialog {\n    max-width: var(--bs-modal-width);\n    margin-right: auto;\n    margin-left: auto;\n  }\n  .modal-sm {\n    --bs-modal-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    --bs-modal-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    --bs-modal-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header,\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header,\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header,\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header,\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header,\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n.tooltip {\n  --bs-tooltip-zindex: 1080;\n  --bs-tooltip-max-width: 200px;\n  --bs-tooltip-padding-x: 0.5rem;\n  --bs-tooltip-padding-y: 0.25rem;\n  --bs-tooltip-margin: ;\n  --bs-tooltip-font-size: 0.875rem;\n  --bs-tooltip-color: var(--bs-body-bg);\n  --bs-tooltip-bg: var(--bs-emphasis-color);\n  --bs-tooltip-border-radius: var(--bs-border-radius);\n  --bs-tooltip-opacity: 0.9;\n  --bs-tooltip-arrow-width: 0.8rem;\n  --bs-tooltip-arrow-height: 0.4rem;\n  z-index: var(--bs-tooltip-zindex);\n  display: block;\n  margin: var(--bs-tooltip-margin);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-tooltip-font-size);\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n  display: block;\n  width: var(--bs-tooltip-arrow-width);\n  height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n  border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: calc(-1 * var(--bs-tooltip-arrow-height));\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: calc(-1 * var(--bs-tooltip-arrow-height));\n  width: var(--bs-tooltip-arrow-height);\n  height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n  border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n  max-width: var(--bs-tooltip-max-width);\n  padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n  color: var(--bs-tooltip-color);\n  text-align: center;\n  background-color: var(--bs-tooltip-bg);\n  border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n  --bs-popover-zindex: 1070;\n  --bs-popover-max-width: 276px;\n  --bs-popover-font-size: 0.875rem;\n  --bs-popover-bg: var(--bs-body-bg);\n  --bs-popover-border-width: var(--bs-border-width);\n  --bs-popover-border-color: var(--bs-border-color-translucent);\n  --bs-popover-border-radius: var(--bs-border-radius-lg);\n  --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n  --bs-popover-box-shadow: var(--bs-box-shadow);\n  --bs-popover-header-padding-x: 1rem;\n  --bs-popover-header-padding-y: 0.5rem;\n  --bs-popover-header-font-size: 1rem;\n  --bs-popover-header-color: inherit;\n  --bs-popover-header-bg: var(--bs-secondary-bg);\n  --bs-popover-body-padding-x: 1rem;\n  --bs-popover-body-padding-y: 1rem;\n  --bs-popover-body-color: var(--bs-body-color);\n  --bs-popover-arrow-width: 1rem;\n  --bs-popover-arrow-height: 0.5rem;\n  --bs-popover-arrow-border: var(--bs-popover-border-color);\n  z-index: var(--bs-popover-zindex);\n  display: block;\n  max-width: var(--bs-popover-max-width);\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  white-space: normal;\n  word-spacing: normal;\n  line-break: auto;\n  font-size: var(--bs-popover-font-size);\n  word-wrap: break-word;\n  background-color: var(--bs-popover-bg);\n  background-clip: padding-box;\n  border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n  border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: var(--bs-popover-border-width);\n  border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: var(--bs-popover-border-width);\n  border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: var(--bs-popover-border-width);\n  border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: var(--bs-popover-arrow-width);\n  margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n  content: \"\";\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n  width: var(--bs-popover-arrow-height);\n  height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: var(--bs-popover-border-width);\n  border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n  margin-bottom: 0;\n  font-size: var(--bs-popover-header-font-size);\n  color: var(--bs-popover-header-color);\n  background-color: var(--bs-popover-header-bg);\n  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n  border-top-left-radius: var(--bs-popover-inner-border-radius);\n  border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n  color: var(--bs-popover-body-color);\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\") /*rtl:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\")*/;\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon,\n[data-bs-theme=dark].carousel .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption {\n  color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n  display: inline-block;\n  width: var(--bs-spinner-width);\n  height: var(--bs-spinner-height);\n  vertical-align: var(--bs-spinner-vertical-align);\n  border-radius: 50%;\n  animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-border-width: 0.25em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-border;\n  border: var(--bs-spinner-border-width) solid currentcolor;\n  border-right-color: transparent;\n}\n\n.spinner-border-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n  --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  --bs-spinner-width: 2rem;\n  --bs-spinner-height: 2rem;\n  --bs-spinner-vertical-align: -0.125em;\n  --bs-spinner-animation-speed: 0.75s;\n  --bs-spinner-animation-name: spinner-grow;\n  background-color: currentcolor;\n  opacity: 0;\n}\n\n.spinner-grow-sm {\n  --bs-spinner-width: 1rem;\n  --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    --bs-spinner-animation-speed: 1.5s;\n  }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n  --bs-offcanvas-zindex: 1045;\n  --bs-offcanvas-width: 400px;\n  --bs-offcanvas-height: 30vh;\n  --bs-offcanvas-padding-x: 1rem;\n  --bs-offcanvas-padding-y: 1rem;\n  --bs-offcanvas-color: var(--bs-body-color);\n  --bs-offcanvas-bg: var(--bs-body-bg);\n  --bs-offcanvas-border-width: var(--bs-border-width);\n  --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n  --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm);\n  --bs-offcanvas-transition: transform 0.3s ease-in-out;\n  --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n  .offcanvas-sm {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-sm {\n    transition: none;\n  }\n}\n@media (max-width: 575.98px) {\n  .offcanvas-sm.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-sm.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-sm.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-sm.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 576px) {\n  .offcanvas-sm {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-sm .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .offcanvas-md {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-md {\n    transition: none;\n  }\n}\n@media (max-width: 767.98px) {\n  .offcanvas-md.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-md.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-md.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-md.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 768px) {\n  .offcanvas-md {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-md .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .offcanvas-lg {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-lg {\n    transition: none;\n  }\n}\n@media (max-width: 991.98px) {\n  .offcanvas-lg.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-lg.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-lg.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-lg.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 992px) {\n  .offcanvas-lg {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-lg .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .offcanvas-xl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xl {\n    transition: none;\n  }\n}\n@media (max-width: 1199.98px) {\n  .offcanvas-xl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .offcanvas-xl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl {\n    position: fixed;\n    bottom: 0;\n    z-index: var(--bs-offcanvas-zindex);\n    display: flex;\n    flex-direction: column;\n    max-width: 100%;\n    color: var(--bs-offcanvas-color);\n    visibility: hidden;\n    background-color: var(--bs-offcanvas-bg);\n    background-clip: padding-box;\n    outline: 0;\n    transition: var(--bs-offcanvas-transition);\n  }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n  .offcanvas-xxl {\n    transition: none;\n  }\n}\n@media (max-width: 1399.98px) {\n  .offcanvas-xxl.offcanvas-start {\n    top: 0;\n    left: 0;\n    width: var(--bs-offcanvas-width);\n    border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(-100%);\n  }\n  .offcanvas-xxl.offcanvas-end {\n    top: 0;\n    right: 0;\n    width: var(--bs-offcanvas-width);\n    border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateX(100%);\n  }\n  .offcanvas-xxl.offcanvas-top {\n    top: 0;\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(-100%);\n  }\n  .offcanvas-xxl.offcanvas-bottom {\n    right: 0;\n    left: 0;\n    height: var(--bs-offcanvas-height);\n    max-height: 100%;\n    border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n    transform: translateY(100%);\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n    transform: none;\n  }\n  .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n    visibility: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .offcanvas-xxl {\n    --bs-offcanvas-height: auto;\n    --bs-offcanvas-border-width: 0;\n    background-color: transparent !important;\n  }\n  .offcanvas-xxl .offcanvas-header {\n    display: none;\n  }\n  .offcanvas-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n    background-color: transparent !important;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: var(--bs-offcanvas-zindex);\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  color: var(--bs-offcanvas-color);\n  visibility: hidden;\n  background-color: var(--bs-offcanvas-bg);\n  background-clip: padding-box;\n  outline: 0;\n  transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n.offcanvas.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: var(--bs-offcanvas-width);\n  border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: var(--bs-offcanvas-width);\n  border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: var(--bs-offcanvas-height);\n  max-height: 100%;\n  border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n  transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n  transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n  visibility: visible;\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n  margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n  overflow-y: auto;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentcolor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.text-bg-primary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n  color: #000 !important;\n  background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n  color: #fff !important;\n  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n  color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-primary:hover, .link-primary:focus {\n  color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-secondary {\n  color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-success {\n  color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-success:hover, .link-success:focus {\n  color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-info {\n  color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-info:hover, .link-info:focus {\n  color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-warning {\n  color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-warning:hover, .link-warning:focus {\n  color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-danger {\n  color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-danger:hover, .link-danger:focus {\n  color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-light {\n  color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-light:hover, .link-light:focus {\n  color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-dark {\n  color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-dark:hover, .link-dark:focus {\n  color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-body-emphasis {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n.link-body-emphasis:hover, .link-body-emphasis:focus {\n  color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;\n  text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important;\n}\n\n.focus-ring:focus {\n  outline: 0;\n  box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color);\n}\n\n.icon-link {\n  display: inline-flex;\n  gap: 0.375rem;\n  align-items: center;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));\n  text-underline-offset: 0.25em;\n  backface-visibility: hidden;\n}\n.icon-link > .bi {\n  flex-shrink: 0;\n  width: 1em;\n  height: 1em;\n  fill: currentcolor;\n  transition: 0.2s ease-in-out transform;\n}\n@media (prefers-reduced-motion: reduce) {\n  .icon-link > .bi {\n    transition: none;\n  }\n}\n\n.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi {\n  transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0));\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n.sticky-bottom {\n  position: sticky;\n  bottom: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-sm-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-md-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-lg-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xl-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n  .sticky-xxl-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n.visually-hidden:not(caption),\n.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) {\n  position: absolute !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: var(--bs-border-width);\n  min-height: 1em;\n  background-color: currentcolor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.object-fit-contain {\n  object-fit: contain !important;\n}\n\n.object-fit-cover {\n  object-fit: cover !important;\n}\n\n.object-fit-fill {\n  object-fit: fill !important;\n}\n\n.object-fit-scale {\n  object-fit: scale-down !important;\n}\n\n.object-fit-none {\n  object-fit: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.overflow-x-auto {\n  overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n  overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n  overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n  overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n  overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n  overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n  overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n  overflow-y: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-inline-grid {\n  display: inline-grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: var(--bs-box-shadow) !important;\n}\n\n.shadow-sm {\n  box-shadow: var(--bs-box-shadow-sm) !important;\n}\n\n.shadow-lg {\n  box-shadow: var(--bs-box-shadow-lg) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.focus-ring-primary {\n  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-secondary {\n  --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-success {\n  --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-info {\n  --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-warning {\n  --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-danger {\n  --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-light {\n  --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity));\n}\n\n.focus-ring-dark {\n  --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity));\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-black {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n  --bs-border-opacity: 1;\n  border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n  border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n  border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n  border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n  border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n  border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n  border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n  border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n  border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.border-opacity-10 {\n  --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n  --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n  --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n  --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n  --bs-border-opacity: 1;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.row-gap-0 {\n  row-gap: 0 !important;\n}\n\n.row-gap-1 {\n  row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n  row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n  row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n  row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n  row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n  column-gap: 0 !important;\n}\n\n.column-gap-1 {\n  column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n  column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n  column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n  column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n  column-gap: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-medium {\n  font-weight: 500 !important;\n}\n\n.fw-semibold {\n  font-weight: 600 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n  --bs-text-opacity: 1;\n  color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n  --bs-text-opacity: 1;\n  color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n  --bs-text-opacity: 1;\n  color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n  color: var(--bs-primary-text-emphasis) !important;\n}\n\n.text-secondary-emphasis {\n  color: var(--bs-secondary-text-emphasis) !important;\n}\n\n.text-success-emphasis {\n  color: var(--bs-success-text-emphasis) !important;\n}\n\n.text-info-emphasis {\n  color: var(--bs-info-text-emphasis) !important;\n}\n\n.text-warning-emphasis {\n  color: var(--bs-warning-text-emphasis) !important;\n}\n\n.text-danger-emphasis {\n  color: var(--bs-danger-text-emphasis) !important;\n}\n\n.text-light-emphasis {\n  color: var(--bs-light-text-emphasis) !important;\n}\n\n.text-dark-emphasis {\n  color: var(--bs-dark-text-emphasis) !important;\n}\n\n.link-opacity-10 {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-10-hover:hover {\n  --bs-link-opacity: 0.1;\n}\n\n.link-opacity-25 {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-25-hover:hover {\n  --bs-link-opacity: 0.25;\n}\n\n.link-opacity-50 {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-50-hover:hover {\n  --bs-link-opacity: 0.5;\n}\n\n.link-opacity-75 {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-75-hover:hover {\n  --bs-link-opacity: 0.75;\n}\n\n.link-opacity-100 {\n  --bs-link-opacity: 1;\n}\n\n.link-opacity-100-hover:hover {\n  --bs-link-opacity: 1;\n}\n\n.link-offset-1 {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-1-hover:hover {\n  text-underline-offset: 0.125em !important;\n}\n\n.link-offset-2 {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-2-hover:hover {\n  text-underline-offset: 0.25em !important;\n}\n\n.link-offset-3 {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-offset-3-hover:hover {\n  text-underline-offset: 0.375em !important;\n}\n\n.link-underline-primary {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-secondary {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-success {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-info {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-warning {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-danger {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-light {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline-dark {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important;\n}\n\n.link-underline {\n  --bs-link-underline-opacity: 1;\n  text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important;\n}\n\n.link-underline-opacity-0 {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-0-hover:hover {\n  --bs-link-underline-opacity: 0;\n}\n\n.link-underline-opacity-10 {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-10-hover:hover {\n  --bs-link-underline-opacity: 0.1;\n}\n\n.link-underline-opacity-25 {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-25-hover:hover {\n  --bs-link-underline-opacity: 0.25;\n}\n\n.link-underline-opacity-50 {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-50-hover:hover {\n  --bs-link-underline-opacity: 0.5;\n}\n\n.link-underline-opacity-75 {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-75-hover:hover {\n  --bs-link-underline-opacity: 0.75;\n}\n\n.link-underline-opacity-100 {\n  --bs-link-underline-opacity: 1;\n}\n\n.link-underline-opacity-100-hover:hover {\n  --bs-link-underline-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-body-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n  background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n  background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n  background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n  background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n  background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n  background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n  background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n  background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  user-select: all !important;\n}\n\n.user-select-auto {\n  user-select: auto !important;\n}\n\n.user-select-none {\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n  border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n  border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n  border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n  border-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n  border-top-left-radius: var(--bs-border-radius) !important;\n  border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-top-circle {\n  border-top-left-radius: 50% !important;\n  border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n  border-top-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n  border-top-right-radius: var(--bs-border-radius) !important;\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n  border-top-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n  border-top-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n  border-top-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-end-circle {\n  border-top-right-radius: 50% !important;\n  border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n  border-top-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n  border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n  border-bottom-right-radius: var(--bs-border-radius) !important;\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n  border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n  border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n  border-bottom-right-radius: var(--bs-border-radius-xxl) !important;\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-bottom-circle {\n  border-bottom-right-radius: 50% !important;\n  border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n  border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n  border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n  border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n  border-bottom-left-radius: var(--bs-border-radius) !important;\n  border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n  border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n  border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n  border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n  border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n  border-bottom-left-radius: var(--bs-border-radius-xxl) !important;\n  border-top-left-radius: var(--bs-border-radius-xxl) !important;\n}\n\n.rounded-start-circle {\n  border-bottom-left-radius: 50% !important;\n  border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n  border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n  border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n.z-n1 {\n  z-index: -1 !important;\n}\n\n.z-0 {\n  z-index: 0 !important;\n}\n\n.z-1 {\n  z-index: 1 !important;\n}\n\n.z-2 {\n  z-index: 2 !important;\n}\n\n.z-3 {\n  z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .object-fit-sm-contain {\n    object-fit: contain !important;\n  }\n  .object-fit-sm-cover {\n    object-fit: cover !important;\n  }\n  .object-fit-sm-fill {\n    object-fit: fill !important;\n  }\n  .object-fit-sm-scale {\n    object-fit: scale-down !important;\n  }\n  .object-fit-sm-none {\n    object-fit: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-sm-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-sm-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-sm-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-sm-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-sm-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-sm-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-sm-0 {\n    column-gap: 0 !important;\n  }\n  .column-gap-sm-1 {\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-sm-2 {\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-sm-3 {\n    column-gap: 1rem !important;\n  }\n  .column-gap-sm-4 {\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-sm-5 {\n    column-gap: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .object-fit-md-contain {\n    object-fit: contain !important;\n  }\n  .object-fit-md-cover {\n    object-fit: cover !important;\n  }\n  .object-fit-md-fill {\n    object-fit: fill !important;\n  }\n  .object-fit-md-scale {\n    object-fit: scale-down !important;\n  }\n  .object-fit-md-none {\n    object-fit: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-md-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-md-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-md-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-md-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-md-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-md-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-md-0 {\n    column-gap: 0 !important;\n  }\n  .column-gap-md-1 {\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-md-2 {\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-md-3 {\n    column-gap: 1rem !important;\n  }\n  .column-gap-md-4 {\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-md-5 {\n    column-gap: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .object-fit-lg-contain {\n    object-fit: contain !important;\n  }\n  .object-fit-lg-cover {\n    object-fit: cover !important;\n  }\n  .object-fit-lg-fill {\n    object-fit: fill !important;\n  }\n  .object-fit-lg-scale {\n    object-fit: scale-down !important;\n  }\n  .object-fit-lg-none {\n    object-fit: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-lg-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-lg-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-lg-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-lg-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-lg-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-lg-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-lg-0 {\n    column-gap: 0 !important;\n  }\n  .column-gap-lg-1 {\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-lg-2 {\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-lg-3 {\n    column-gap: 1rem !important;\n  }\n  .column-gap-lg-4 {\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-lg-5 {\n    column-gap: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .object-fit-xl-contain {\n    object-fit: contain !important;\n  }\n  .object-fit-xl-cover {\n    object-fit: cover !important;\n  }\n  .object-fit-xl-fill {\n    object-fit: fill !important;\n  }\n  .object-fit-xl-scale {\n    object-fit: scale-down !important;\n  }\n  .object-fit-xl-none {\n    object-fit: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xl-0 {\n    column-gap: 0 !important;\n  }\n  .column-gap-xl-1 {\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xl-2 {\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xl-3 {\n    column-gap: 1rem !important;\n  }\n  .column-gap-xl-4 {\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xl-5 {\n    column-gap: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .object-fit-xxl-contain {\n    object-fit: contain !important;\n  }\n  .object-fit-xxl-cover {\n    object-fit: cover !important;\n  }\n  .object-fit-xxl-fill {\n    object-fit: fill !important;\n  }\n  .object-fit-xxl-scale {\n    object-fit: scale-down !important;\n  }\n  .object-fit-xxl-none {\n    object-fit: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .row-gap-xxl-0 {\n    row-gap: 0 !important;\n  }\n  .row-gap-xxl-1 {\n    row-gap: 0.25rem !important;\n  }\n  .row-gap-xxl-2 {\n    row-gap: 0.5rem !important;\n  }\n  .row-gap-xxl-3 {\n    row-gap: 1rem !important;\n  }\n  .row-gap-xxl-4 {\n    row-gap: 1.5rem !important;\n  }\n  .row-gap-xxl-5 {\n    row-gap: 3rem !important;\n  }\n  .column-gap-xxl-0 {\n    column-gap: 0 !important;\n  }\n  .column-gap-xxl-1 {\n    column-gap: 0.25rem !important;\n  }\n  .column-gap-xxl-2 {\n    column-gap: 0.5rem !important;\n  }\n  .column-gap-xxl-3 {\n    column-gap: 1rem !important;\n  }\n  .column-gap-xxl-4 {\n    column-gap: 1.5rem !important;\n  }\n  .column-gap-xxl-5 {\n    column-gap: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-inline-grid {\n    display: inline-grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n/*!\n * WiceGrid CSS\n *\n * @import \"font-awesome\"\n */\n/*!\n * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n.fa {\n  font-family: var(--fa-style-family, \"Font Awesome 6 Free\");\n  font-weight: var(--fa-style, 900);\n}\n\n.fa,\n.fa-classic,\n.fa-sharp,\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: var(--fa-display, inline-block);\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto;\n}\n\n.fas,\n.fa-classic,\n.fa-solid,\n.far,\n.fa-regular {\n  font-family: \"Font Awesome 6 Free\";\n}\n\n.fab,\n.fa-brands {\n  font-family: \"Font Awesome 6 Brands\";\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.0833333337em;\n  vertical-align: 0.125em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.0714285718em;\n  vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em;\n}\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.0416666682em;\n  vertical-align: -0.125em;\n}\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit;\n}\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n  animation-name: fa-beat;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n  animation-name: fa-bounce;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n  animation-name: fa-fade;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n  animation-name: fa-beat-fade;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n  animation-name: fa-flip;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n  animation-name: fa-shake;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n  animation-name: fa-spin;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 2s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n  animation-name: fa-spin;\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n  .fa-bounce,\n  .fa-fade,\n  .fa-beat-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    animation-delay: -1ms;\n    animation-duration: 1ms;\n    animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s;\n  }\n}\n@keyframes fa-beat {\n  0%, 90% {\n    transform: scale(1);\n  }\n  45% {\n    transform: scale(var(--fa-beat-scale, 1.25));\n  }\n}\n@keyframes fa-bounce {\n  0% {\n    transform: scale(1, 1) translateY(0);\n  }\n  10% {\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n  }\n  30% {\n    transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n  }\n  50% {\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n  }\n  57% {\n    transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n  }\n  64% {\n    transform: scale(1, 1) translateY(0);\n  }\n  100% {\n    transform: scale(1, 1) translateY(0);\n  }\n}\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4);\n  }\n}\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    transform: scale(var(--fa-beat-fade-scale, 1.125));\n  }\n}\n@keyframes fa-flip {\n  50% {\n    transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n  }\n}\n@keyframes fa-shake {\n  0% {\n    transform: rotate(-15deg);\n  }\n  4% {\n    transform: rotate(15deg);\n  }\n  8%, 24% {\n    transform: rotate(-18deg);\n  }\n  12%, 28% {\n    transform: rotate(18deg);\n  }\n  16% {\n    transform: rotate(-22deg);\n  }\n  20% {\n    transform: rotate(22deg);\n  }\n  32% {\n    transform: rotate(-12deg);\n  }\n  36% {\n    transform: rotate(12deg);\n  }\n  40%, 100% {\n    transform: rotate(0deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n  transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: var(--fa-stack-z-index, auto);\n}\n\n.fa-stack-1x {\n  line-height: inherit;\n}\n\n.fa-stack-2x {\n  font-size: 2em;\n}\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff);\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-0::before {\n  content: \"\\30 \";\n}\n\n.fa-1::before {\n  content: \"\\31 \";\n}\n\n.fa-2::before {\n  content: \"\\32 \";\n}\n\n.fa-3::before {\n  content: \"\\33 \";\n}\n\n.fa-4::before {\n  content: \"\\34 \";\n}\n\n.fa-5::before {\n  content: \"\\35 \";\n}\n\n.fa-6::before {\n  content: \"\\36 \";\n}\n\n.fa-7::before {\n  content: \"\\37 \";\n}\n\n.fa-8::before {\n  content: \"\\38 \";\n}\n\n.fa-9::before {\n  content: \"\\39 \";\n}\n\n.fa-fill-drip::before {\n  content: \"\\f576\";\n}\n\n.fa-arrows-to-circle::before {\n  content: \"\\e4bd\";\n}\n\n.fa-circle-chevron-right::before {\n  content: \"\\f138\";\n}\n\n.fa-chevron-circle-right::before {\n  content: \"\\f138\";\n}\n\n.fa-at::before {\n  content: \"\\@\";\n}\n\n.fa-trash-can::before {\n  content: \"\\f2ed\";\n}\n\n.fa-trash-alt::before {\n  content: \"\\f2ed\";\n}\n\n.fa-text-height::before {\n  content: \"\\f034\";\n}\n\n.fa-user-xmark::before {\n  content: \"\\f235\";\n}\n\n.fa-user-times::before {\n  content: \"\\f235\";\n}\n\n.fa-stethoscope::before {\n  content: \"\\f0f1\";\n}\n\n.fa-message::before {\n  content: \"\\f27a\";\n}\n\n.fa-comment-alt::before {\n  content: \"\\f27a\";\n}\n\n.fa-info::before {\n  content: \"\\f129\";\n}\n\n.fa-down-left-and-up-right-to-center::before {\n  content: \"\\f422\";\n}\n\n.fa-compress-alt::before {\n  content: \"\\f422\";\n}\n\n.fa-explosion::before {\n  content: \"\\e4e9\";\n}\n\n.fa-file-lines::before {\n  content: \"\\f15c\";\n}\n\n.fa-file-alt::before {\n  content: \"\\f15c\";\n}\n\n.fa-file-text::before {\n  content: \"\\f15c\";\n}\n\n.fa-wave-square::before {\n  content: \"\\f83e\";\n}\n\n.fa-ring::before {\n  content: \"\\f70b\";\n}\n\n.fa-building-un::before {\n  content: \"\\e4d9\";\n}\n\n.fa-dice-three::before {\n  content: \"\\f527\";\n}\n\n.fa-calendar-days::before {\n  content: \"\\f073\";\n}\n\n.fa-calendar-alt::before {\n  content: \"\\f073\";\n}\n\n.fa-anchor-circle-check::before {\n  content: \"\\e4aa\";\n}\n\n.fa-building-circle-arrow-right::before {\n  content: \"\\e4d1\";\n}\n\n.fa-volleyball::before {\n  content: \"\\f45f\";\n}\n\n.fa-volleyball-ball::before {\n  content: \"\\f45f\";\n}\n\n.fa-arrows-up-to-line::before {\n  content: \"\\e4c2\";\n}\n\n.fa-sort-down::before {\n  content: \"\\f0dd\";\n}\n\n.fa-sort-desc::before {\n  content: \"\\f0dd\";\n}\n\n.fa-circle-minus::before {\n  content: \"\\f056\";\n}\n\n.fa-minus-circle::before {\n  content: \"\\f056\";\n}\n\n.fa-door-open::before {\n  content: \"\\f52b\";\n}\n\n.fa-right-from-bracket::before {\n  content: \"\\f2f5\";\n}\n\n.fa-sign-out-alt::before {\n  content: \"\\f2f5\";\n}\n\n.fa-atom::before {\n  content: \"\\f5d2\";\n}\n\n.fa-soap::before {\n  content: \"\\e06e\";\n}\n\n.fa-icons::before {\n  content: \"\\f86d\";\n}\n\n.fa-heart-music-camera-bolt::before {\n  content: \"\\f86d\";\n}\n\n.fa-microphone-lines-slash::before {\n  content: \"\\f539\";\n}\n\n.fa-microphone-alt-slash::before {\n  content: \"\\f539\";\n}\n\n.fa-bridge-circle-check::before {\n  content: \"\\e4c9\";\n}\n\n.fa-pump-medical::before {\n  content: \"\\e06a\";\n}\n\n.fa-fingerprint::before {\n  content: \"\\f577\";\n}\n\n.fa-hand-point-right::before {\n  content: \"\\f0a4\";\n}\n\n.fa-magnifying-glass-location::before {\n  content: \"\\f689\";\n}\n\n.fa-search-location::before {\n  content: \"\\f689\";\n}\n\n.fa-forward-step::before {\n  content: \"\\f051\";\n}\n\n.fa-step-forward::before {\n  content: \"\\f051\";\n}\n\n.fa-face-smile-beam::before {\n  content: \"\\f5b8\";\n}\n\n.fa-smile-beam::before {\n  content: \"\\f5b8\";\n}\n\n.fa-flag-checkered::before {\n  content: \"\\f11e\";\n}\n\n.fa-football::before {\n  content: \"\\f44e\";\n}\n\n.fa-football-ball::before {\n  content: \"\\f44e\";\n}\n\n.fa-school-circle-exclamation::before {\n  content: \"\\e56c\";\n}\n\n.fa-crop::before {\n  content: \"\\f125\";\n}\n\n.fa-angles-down::before {\n  content: \"\\f103\";\n}\n\n.fa-angle-double-down::before {\n  content: \"\\f103\";\n}\n\n.fa-users-rectangle::before {\n  content: \"\\e594\";\n}\n\n.fa-people-roof::before {\n  content: \"\\e537\";\n}\n\n.fa-people-line::before {\n  content: \"\\e534\";\n}\n\n.fa-beer-mug-empty::before {\n  content: \"\\f0fc\";\n}\n\n.fa-beer::before {\n  content: \"\\f0fc\";\n}\n\n.fa-diagram-predecessor::before {\n  content: \"\\e477\";\n}\n\n.fa-arrow-up-long::before {\n  content: \"\\f176\";\n}\n\n.fa-long-arrow-up::before {\n  content: \"\\f176\";\n}\n\n.fa-fire-flame-simple::before {\n  content: \"\\f46a\";\n}\n\n.fa-burn::before {\n  content: \"\\f46a\";\n}\n\n.fa-person::before {\n  content: \"\\f183\";\n}\n\n.fa-male::before {\n  content: \"\\f183\";\n}\n\n.fa-laptop::before {\n  content: \"\\f109\";\n}\n\n.fa-file-csv::before {\n  content: \"\\f6dd\";\n}\n\n.fa-menorah::before {\n  content: \"\\f676\";\n}\n\n.fa-truck-plane::before {\n  content: \"\\e58f\";\n}\n\n.fa-record-vinyl::before {\n  content: \"\\f8d9\";\n}\n\n.fa-face-grin-stars::before {\n  content: \"\\f587\";\n}\n\n.fa-grin-stars::before {\n  content: \"\\f587\";\n}\n\n.fa-bong::before {\n  content: \"\\f55c\";\n}\n\n.fa-spaghetti-monster-flying::before {\n  content: \"\\f67b\";\n}\n\n.fa-pastafarianism::before {\n  content: \"\\f67b\";\n}\n\n.fa-arrow-down-up-across-line::before {\n  content: \"\\e4af\";\n}\n\n.fa-spoon::before {\n  content: \"\\f2e5\";\n}\n\n.fa-utensil-spoon::before {\n  content: \"\\f2e5\";\n}\n\n.fa-jar-wheat::before {\n  content: \"\\e517\";\n}\n\n.fa-envelopes-bulk::before {\n  content: \"\\f674\";\n}\n\n.fa-mail-bulk::before {\n  content: \"\\f674\";\n}\n\n.fa-file-circle-exclamation::before {\n  content: \"\\e4eb\";\n}\n\n.fa-circle-h::before {\n  content: \"\\f47e\";\n}\n\n.fa-hospital-symbol::before {\n  content: \"\\f47e\";\n}\n\n.fa-pager::before {\n  content: \"\\f815\";\n}\n\n.fa-address-book::before {\n  content: \"\\f2b9\";\n}\n\n.fa-contact-book::before {\n  content: \"\\f2b9\";\n}\n\n.fa-strikethrough::before {\n  content: \"\\f0cc\";\n}\n\n.fa-k::before {\n  content: \"K\";\n}\n\n.fa-landmark-flag::before {\n  content: \"\\e51c\";\n}\n\n.fa-pencil::before {\n  content: \"\\f303\";\n}\n\n.fa-pencil-alt::before {\n  content: \"\\f303\";\n}\n\n.fa-backward::before {\n  content: \"\\f04a\";\n}\n\n.fa-caret-right::before {\n  content: \"\\f0da\";\n}\n\n.fa-comments::before {\n  content: \"\\f086\";\n}\n\n.fa-paste::before {\n  content: \"\\f0ea\";\n}\n\n.fa-file-clipboard::before {\n  content: \"\\f0ea\";\n}\n\n.fa-code-pull-request::before {\n  content: \"\\e13c\";\n}\n\n.fa-clipboard-list::before {\n  content: \"\\f46d\";\n}\n\n.fa-truck-ramp-box::before {\n  content: \"\\f4de\";\n}\n\n.fa-truck-loading::before {\n  content: \"\\f4de\";\n}\n\n.fa-user-check::before {\n  content: \"\\f4fc\";\n}\n\n.fa-vial-virus::before {\n  content: \"\\e597\";\n}\n\n.fa-sheet-plastic::before {\n  content: \"\\e571\";\n}\n\n.fa-blog::before {\n  content: \"\\f781\";\n}\n\n.fa-user-ninja::before {\n  content: \"\\f504\";\n}\n\n.fa-person-arrow-up-from-line::before {\n  content: \"\\e539\";\n}\n\n.fa-scroll-torah::before {\n  content: \"\\f6a0\";\n}\n\n.fa-torah::before {\n  content: \"\\f6a0\";\n}\n\n.fa-broom-ball::before {\n  content: \"\\f458\";\n}\n\n.fa-quidditch::before {\n  content: \"\\f458\";\n}\n\n.fa-quidditch-broom-ball::before {\n  content: \"\\f458\";\n}\n\n.fa-toggle-off::before {\n  content: \"\\f204\";\n}\n\n.fa-box-archive::before {\n  content: \"\\f187\";\n}\n\n.fa-archive::before {\n  content: \"\\f187\";\n}\n\n.fa-person-drowning::before {\n  content: \"\\e545\";\n}\n\n.fa-arrow-down-9-1::before {\n  content: \"\\f886\";\n}\n\n.fa-sort-numeric-desc::before {\n  content: \"\\f886\";\n}\n\n.fa-sort-numeric-down-alt::before {\n  content: \"\\f886\";\n}\n\n.fa-face-grin-tongue-squint::before {\n  content: \"\\f58a\";\n}\n\n.fa-grin-tongue-squint::before {\n  content: \"\\f58a\";\n}\n\n.fa-spray-can::before {\n  content: \"\\f5bd\";\n}\n\n.fa-truck-monster::before {\n  content: \"\\f63b\";\n}\n\n.fa-w::before {\n  content: \"W\";\n}\n\n.fa-earth-africa::before {\n  content: \"\\f57c\";\n}\n\n.fa-globe-africa::before {\n  content: \"\\f57c\";\n}\n\n.fa-rainbow::before {\n  content: \"\\f75b\";\n}\n\n.fa-circle-notch::before {\n  content: \"\\f1ce\";\n}\n\n.fa-tablet-screen-button::before {\n  content: \"\\f3fa\";\n}\n\n.fa-tablet-alt::before {\n  content: \"\\f3fa\";\n}\n\n.fa-paw::before {\n  content: \"\\f1b0\";\n}\n\n.fa-cloud::before {\n  content: \"\\f0c2\";\n}\n\n.fa-trowel-bricks::before {\n  content: \"\\e58a\";\n}\n\n.fa-face-flushed::before {\n  content: \"\\f579\";\n}\n\n.fa-flushed::before {\n  content: \"\\f579\";\n}\n\n.fa-hospital-user::before {\n  content: \"\\f80d\";\n}\n\n.fa-tent-arrow-left-right::before {\n  content: \"\\e57f\";\n}\n\n.fa-gavel::before {\n  content: \"\\f0e3\";\n}\n\n.fa-legal::before {\n  content: \"\\f0e3\";\n}\n\n.fa-binoculars::before {\n  content: \"\\f1e5\";\n}\n\n.fa-microphone-slash::before {\n  content: \"\\f131\";\n}\n\n.fa-box-tissue::before {\n  content: \"\\e05b\";\n}\n\n.fa-motorcycle::before {\n  content: \"\\f21c\";\n}\n\n.fa-bell-concierge::before {\n  content: \"\\f562\";\n}\n\n.fa-concierge-bell::before {\n  content: \"\\f562\";\n}\n\n.fa-pen-ruler::before {\n  content: \"\\f5ae\";\n}\n\n.fa-pencil-ruler::before {\n  content: \"\\f5ae\";\n}\n\n.fa-people-arrows::before {\n  content: \"\\e068\";\n}\n\n.fa-people-arrows-left-right::before {\n  content: \"\\e068\";\n}\n\n.fa-mars-and-venus-burst::before {\n  content: \"\\e523\";\n}\n\n.fa-square-caret-right::before {\n  content: \"\\f152\";\n}\n\n.fa-caret-square-right::before {\n  content: \"\\f152\";\n}\n\n.fa-scissors::before {\n  content: \"\\f0c4\";\n}\n\n.fa-cut::before {\n  content: \"\\f0c4\";\n}\n\n.fa-sun-plant-wilt::before {\n  content: \"\\e57a\";\n}\n\n.fa-toilets-portable::before {\n  content: \"\\e584\";\n}\n\n.fa-hockey-puck::before {\n  content: \"\\f453\";\n}\n\n.fa-table::before {\n  content: \"\\f0ce\";\n}\n\n.fa-magnifying-glass-arrow-right::before {\n  content: \"\\e521\";\n}\n\n.fa-tachograph-digital::before {\n  content: \"\\f566\";\n}\n\n.fa-digital-tachograph::before {\n  content: \"\\f566\";\n}\n\n.fa-users-slash::before {\n  content: \"\\e073\";\n}\n\n.fa-clover::before {\n  content: \"\\e139\";\n}\n\n.fa-reply::before {\n  content: \"\\f3e5\";\n}\n\n.fa-mail-reply::before {\n  content: \"\\f3e5\";\n}\n\n.fa-star-and-crescent::before {\n  content: \"\\f699\";\n}\n\n.fa-house-fire::before {\n  content: \"\\e50c\";\n}\n\n.fa-square-minus::before {\n  content: \"\\f146\";\n}\n\n.fa-minus-square::before {\n  content: \"\\f146\";\n}\n\n.fa-helicopter::before {\n  content: \"\\f533\";\n}\n\n.fa-compass::before {\n  content: \"\\f14e\";\n}\n\n.fa-square-caret-down::before {\n  content: \"\\f150\";\n}\n\n.fa-caret-square-down::before {\n  content: \"\\f150\";\n}\n\n.fa-file-circle-question::before {\n  content: \"\\e4ef\";\n}\n\n.fa-laptop-code::before {\n  content: \"\\f5fc\";\n}\n\n.fa-swatchbook::before {\n  content: \"\\f5c3\";\n}\n\n.fa-prescription-bottle::before {\n  content: \"\\f485\";\n}\n\n.fa-bars::before {\n  content: \"\\f0c9\";\n}\n\n.fa-navicon::before {\n  content: \"\\f0c9\";\n}\n\n.fa-people-group::before {\n  content: \"\\e533\";\n}\n\n.fa-hourglass-end::before {\n  content: \"\\f253\";\n}\n\n.fa-hourglass-3::before {\n  content: \"\\f253\";\n}\n\n.fa-heart-crack::before {\n  content: \"\\f7a9\";\n}\n\n.fa-heart-broken::before {\n  content: \"\\f7a9\";\n}\n\n.fa-square-up-right::before {\n  content: \"\\f360\";\n}\n\n.fa-external-link-square-alt::before {\n  content: \"\\f360\";\n}\n\n.fa-face-kiss-beam::before {\n  content: \"\\f597\";\n}\n\n.fa-kiss-beam::before {\n  content: \"\\f597\";\n}\n\n.fa-film::before {\n  content: \"\\f008\";\n}\n\n.fa-ruler-horizontal::before {\n  content: \"\\f547\";\n}\n\n.fa-people-robbery::before {\n  content: \"\\e536\";\n}\n\n.fa-lightbulb::before {\n  content: \"\\f0eb\";\n}\n\n.fa-caret-left::before {\n  content: \"\\f0d9\";\n}\n\n.fa-circle-exclamation::before {\n  content: \"\\f06a\";\n}\n\n.fa-exclamation-circle::before {\n  content: \"\\f06a\";\n}\n\n.fa-school-circle-xmark::before {\n  content: \"\\e56d\";\n}\n\n.fa-arrow-right-from-bracket::before {\n  content: \"\\f08b\";\n}\n\n.fa-sign-out::before {\n  content: \"\\f08b\";\n}\n\n.fa-circle-chevron-down::before {\n  content: \"\\f13a\";\n}\n\n.fa-chevron-circle-down::before {\n  content: \"\\f13a\";\n}\n\n.fa-unlock-keyhole::before {\n  content: \"\\f13e\";\n}\n\n.fa-unlock-alt::before {\n  content: \"\\f13e\";\n}\n\n.fa-cloud-showers-heavy::before {\n  content: \"\\f740\";\n}\n\n.fa-headphones-simple::before {\n  content: \"\\f58f\";\n}\n\n.fa-headphones-alt::before {\n  content: \"\\f58f\";\n}\n\n.fa-sitemap::before {\n  content: \"\\f0e8\";\n}\n\n.fa-circle-dollar-to-slot::before {\n  content: \"\\f4b9\";\n}\n\n.fa-donate::before {\n  content: \"\\f4b9\";\n}\n\n.fa-memory::before {\n  content: \"\\f538\";\n}\n\n.fa-road-spikes::before {\n  content: \"\\e568\";\n}\n\n.fa-fire-burner::before {\n  content: \"\\e4f1\";\n}\n\n.fa-flag::before {\n  content: \"\\f024\";\n}\n\n.fa-hanukiah::before {\n  content: \"\\f6e6\";\n}\n\n.fa-feather::before {\n  content: \"\\f52d\";\n}\n\n.fa-volume-low::before {\n  content: \"\\f027\";\n}\n\n.fa-volume-down::before {\n  content: \"\\f027\";\n}\n\n.fa-comment-slash::before {\n  content: \"\\f4b3\";\n}\n\n.fa-cloud-sun-rain::before {\n  content: \"\\f743\";\n}\n\n.fa-compress::before {\n  content: \"\\f066\";\n}\n\n.fa-wheat-awn::before {\n  content: \"\\e2cd\";\n}\n\n.fa-wheat-alt::before {\n  content: \"\\e2cd\";\n}\n\n.fa-ankh::before {\n  content: \"\\f644\";\n}\n\n.fa-hands-holding-child::before {\n  content: \"\\e4fa\";\n}\n\n.fa-asterisk::before {\n  content: \"\\*\";\n}\n\n.fa-square-check::before {\n  content: \"\\f14a\";\n}\n\n.fa-check-square::before {\n  content: \"\\f14a\";\n}\n\n.fa-peseta-sign::before {\n  content: \"\\e221\";\n}\n\n.fa-heading::before {\n  content: \"\\f1dc\";\n}\n\n.fa-header::before {\n  content: \"\\f1dc\";\n}\n\n.fa-ghost::before {\n  content: \"\\f6e2\";\n}\n\n.fa-list::before {\n  content: \"\\f03a\";\n}\n\n.fa-list-squares::before {\n  content: \"\\f03a\";\n}\n\n.fa-square-phone-flip::before {\n  content: \"\\f87b\";\n}\n\n.fa-phone-square-alt::before {\n  content: \"\\f87b\";\n}\n\n.fa-cart-plus::before {\n  content: \"\\f217\";\n}\n\n.fa-gamepad::before {\n  content: \"\\f11b\";\n}\n\n.fa-circle-dot::before {\n  content: \"\\f192\";\n}\n\n.fa-dot-circle::before {\n  content: \"\\f192\";\n}\n\n.fa-face-dizzy::before {\n  content: \"\\f567\";\n}\n\n.fa-dizzy::before {\n  content: \"\\f567\";\n}\n\n.fa-egg::before {\n  content: \"\\f7fb\";\n}\n\n.fa-house-medical-circle-xmark::before {\n  content: \"\\e513\";\n}\n\n.fa-campground::before {\n  content: \"\\f6bb\";\n}\n\n.fa-folder-plus::before {\n  content: \"\\f65e\";\n}\n\n.fa-futbol::before {\n  content: \"\\f1e3\";\n}\n\n.fa-futbol-ball::before {\n  content: \"\\f1e3\";\n}\n\n.fa-soccer-ball::before {\n  content: \"\\f1e3\";\n}\n\n.fa-paintbrush::before {\n  content: \"\\f1fc\";\n}\n\n.fa-paint-brush::before {\n  content: \"\\f1fc\";\n}\n\n.fa-lock::before {\n  content: \"\\f023\";\n}\n\n.fa-gas-pump::before {\n  content: \"\\f52f\";\n}\n\n.fa-hot-tub-person::before {\n  content: \"\\f593\";\n}\n\n.fa-hot-tub::before {\n  content: \"\\f593\";\n}\n\n.fa-map-location::before {\n  content: \"\\f59f\";\n}\n\n.fa-map-marked::before {\n  content: \"\\f59f\";\n}\n\n.fa-house-flood-water::before {\n  content: \"\\e50e\";\n}\n\n.fa-tree::before {\n  content: \"\\f1bb\";\n}\n\n.fa-bridge-lock::before {\n  content: \"\\e4cc\";\n}\n\n.fa-sack-dollar::before {\n  content: \"\\f81d\";\n}\n\n.fa-pen-to-square::before {\n  content: \"\\f044\";\n}\n\n.fa-edit::before {\n  content: \"\\f044\";\n}\n\n.fa-car-side::before {\n  content: \"\\f5e4\";\n}\n\n.fa-share-nodes::before {\n  content: \"\\f1e0\";\n}\n\n.fa-share-alt::before {\n  content: \"\\f1e0\";\n}\n\n.fa-heart-circle-minus::before {\n  content: \"\\e4ff\";\n}\n\n.fa-hourglass-half::before {\n  content: \"\\f252\";\n}\n\n.fa-hourglass-2::before {\n  content: \"\\f252\";\n}\n\n.fa-microscope::before {\n  content: \"\\f610\";\n}\n\n.fa-sink::before {\n  content: \"\\e06d\";\n}\n\n.fa-bag-shopping::before {\n  content: \"\\f290\";\n}\n\n.fa-shopping-bag::before {\n  content: \"\\f290\";\n}\n\n.fa-arrow-down-z-a::before {\n  content: \"\\f881\";\n}\n\n.fa-sort-alpha-desc::before {\n  content: \"\\f881\";\n}\n\n.fa-sort-alpha-down-alt::before {\n  content: \"\\f881\";\n}\n\n.fa-mitten::before {\n  content: \"\\f7b5\";\n}\n\n.fa-person-rays::before {\n  content: \"\\e54d\";\n}\n\n.fa-users::before {\n  content: \"\\f0c0\";\n}\n\n.fa-eye-slash::before {\n  content: \"\\f070\";\n}\n\n.fa-flask-vial::before {\n  content: \"\\e4f3\";\n}\n\n.fa-hand::before {\n  content: \"\\f256\";\n}\n\n.fa-hand-paper::before {\n  content: \"\\f256\";\n}\n\n.fa-om::before {\n  content: \"\\f679\";\n}\n\n.fa-worm::before {\n  content: \"\\e599\";\n}\n\n.fa-house-circle-xmark::before {\n  content: \"\\e50b\";\n}\n\n.fa-plug::before {\n  content: \"\\f1e6\";\n}\n\n.fa-chevron-up::before {\n  content: \"\\f077\";\n}\n\n.fa-hand-spock::before {\n  content: \"\\f259\";\n}\n\n.fa-stopwatch::before {\n  content: \"\\f2f2\";\n}\n\n.fa-face-kiss::before {\n  content: \"\\f596\";\n}\n\n.fa-kiss::before {\n  content: \"\\f596\";\n}\n\n.fa-bridge-circle-xmark::before {\n  content: \"\\e4cb\";\n}\n\n.fa-face-grin-tongue::before {\n  content: \"\\f589\";\n}\n\n.fa-grin-tongue::before {\n  content: \"\\f589\";\n}\n\n.fa-chess-bishop::before {\n  content: \"\\f43a\";\n}\n\n.fa-face-grin-wink::before {\n  content: \"\\f58c\";\n}\n\n.fa-grin-wink::before {\n  content: \"\\f58c\";\n}\n\n.fa-ear-deaf::before {\n  content: \"\\f2a4\";\n}\n\n.fa-deaf::before {\n  content: \"\\f2a4\";\n}\n\n.fa-deafness::before {\n  content: \"\\f2a4\";\n}\n\n.fa-hard-of-hearing::before {\n  content: \"\\f2a4\";\n}\n\n.fa-road-circle-check::before {\n  content: \"\\e564\";\n}\n\n.fa-dice-five::before {\n  content: \"\\f523\";\n}\n\n.fa-square-rss::before {\n  content: \"\\f143\";\n}\n\n.fa-rss-square::before {\n  content: \"\\f143\";\n}\n\n.fa-land-mine-on::before {\n  content: \"\\e51b\";\n}\n\n.fa-i-cursor::before {\n  content: \"\\f246\";\n}\n\n.fa-stamp::before {\n  content: \"\\f5bf\";\n}\n\n.fa-stairs::before {\n  content: \"\\e289\";\n}\n\n.fa-i::before {\n  content: \"I\";\n}\n\n.fa-hryvnia-sign::before {\n  content: \"\\f6f2\";\n}\n\n.fa-hryvnia::before {\n  content: \"\\f6f2\";\n}\n\n.fa-pills::before {\n  content: \"\\f484\";\n}\n\n.fa-face-grin-wide::before {\n  content: \"\\f581\";\n}\n\n.fa-grin-alt::before {\n  content: \"\\f581\";\n}\n\n.fa-tooth::before {\n  content: \"\\f5c9\";\n}\n\n.fa-v::before {\n  content: \"V\";\n}\n\n.fa-bangladeshi-taka-sign::before {\n  content: \"\\e2e6\";\n}\n\n.fa-bicycle::before {\n  content: \"\\f206\";\n}\n\n.fa-staff-snake::before {\n  content: \"\\e579\";\n}\n\n.fa-rod-asclepius::before {\n  content: \"\\e579\";\n}\n\n.fa-rod-snake::before {\n  content: \"\\e579\";\n}\n\n.fa-staff-aesculapius::before {\n  content: \"\\e579\";\n}\n\n.fa-head-side-cough-slash::before {\n  content: \"\\e062\";\n}\n\n.fa-truck-medical::before {\n  content: \"\\f0f9\";\n}\n\n.fa-ambulance::before {\n  content: \"\\f0f9\";\n}\n\n.fa-wheat-awn-circle-exclamation::before {\n  content: \"\\e598\";\n}\n\n.fa-snowman::before {\n  content: \"\\f7d0\";\n}\n\n.fa-mortar-pestle::before {\n  content: \"\\f5a7\";\n}\n\n.fa-road-barrier::before {\n  content: \"\\e562\";\n}\n\n.fa-school::before {\n  content: \"\\f549\";\n}\n\n.fa-igloo::before {\n  content: \"\\f7ae\";\n}\n\n.fa-joint::before {\n  content: \"\\f595\";\n}\n\n.fa-angle-right::before {\n  content: \"\\f105\";\n}\n\n.fa-horse::before {\n  content: \"\\f6f0\";\n}\n\n.fa-q::before {\n  content: \"Q\";\n}\n\n.fa-g::before {\n  content: \"G\";\n}\n\n.fa-notes-medical::before {\n  content: \"\\f481\";\n}\n\n.fa-temperature-half::before {\n  content: \"\\f2c9\";\n}\n\n.fa-temperature-2::before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-2::before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-half::before {\n  content: \"\\f2c9\";\n}\n\n.fa-dong-sign::before {\n  content: \"\\e169\";\n}\n\n.fa-capsules::before {\n  content: \"\\f46b\";\n}\n\n.fa-poo-storm::before {\n  content: \"\\f75a\";\n}\n\n.fa-poo-bolt::before {\n  content: \"\\f75a\";\n}\n\n.fa-face-frown-open::before {\n  content: \"\\f57a\";\n}\n\n.fa-frown-open::before {\n  content: \"\\f57a\";\n}\n\n.fa-hand-point-up::before {\n  content: \"\\f0a6\";\n}\n\n.fa-money-bill::before {\n  content: \"\\f0d6\";\n}\n\n.fa-bookmark::before {\n  content: \"\\f02e\";\n}\n\n.fa-align-justify::before {\n  content: \"\\f039\";\n}\n\n.fa-umbrella-beach::before {\n  content: \"\\f5ca\";\n}\n\n.fa-helmet-un::before {\n  content: \"\\e503\";\n}\n\n.fa-bullseye::before {\n  content: \"\\f140\";\n}\n\n.fa-bacon::before {\n  content: \"\\f7e5\";\n}\n\n.fa-hand-point-down::before {\n  content: \"\\f0a7\";\n}\n\n.fa-arrow-up-from-bracket::before {\n  content: \"\\e09a\";\n}\n\n.fa-folder::before {\n  content: \"\\f07b\";\n}\n\n.fa-folder-blank::before {\n  content: \"\\f07b\";\n}\n\n.fa-file-waveform::before {\n  content: \"\\f478\";\n}\n\n.fa-file-medical-alt::before {\n  content: \"\\f478\";\n}\n\n.fa-radiation::before {\n  content: \"\\f7b9\";\n}\n\n.fa-chart-simple::before {\n  content: \"\\e473\";\n}\n\n.fa-mars-stroke::before {\n  content: \"\\f229\";\n}\n\n.fa-vial::before {\n  content: \"\\f492\";\n}\n\n.fa-gauge::before {\n  content: \"\\f624\";\n}\n\n.fa-dashboard::before {\n  content: \"\\f624\";\n}\n\n.fa-gauge-med::before {\n  content: \"\\f624\";\n}\n\n.fa-tachometer-alt-average::before {\n  content: \"\\f624\";\n}\n\n.fa-wand-magic-sparkles::before {\n  content: \"\\e2ca\";\n}\n\n.fa-magic-wand-sparkles::before {\n  content: \"\\e2ca\";\n}\n\n.fa-e::before {\n  content: \"E\";\n}\n\n.fa-pen-clip::before {\n  content: \"\\f305\";\n}\n\n.fa-pen-alt::before {\n  content: \"\\f305\";\n}\n\n.fa-bridge-circle-exclamation::before {\n  content: \"\\e4ca\";\n}\n\n.fa-user::before {\n  content: \"\\f007\";\n}\n\n.fa-school-circle-check::before {\n  content: \"\\e56b\";\n}\n\n.fa-dumpster::before {\n  content: \"\\f793\";\n}\n\n.fa-van-shuttle::before {\n  content: \"\\f5b6\";\n}\n\n.fa-shuttle-van::before {\n  content: \"\\f5b6\";\n}\n\n.fa-building-user::before {\n  content: \"\\e4da\";\n}\n\n.fa-square-caret-left::before {\n  content: \"\\f191\";\n}\n\n.fa-caret-square-left::before {\n  content: \"\\f191\";\n}\n\n.fa-highlighter::before {\n  content: \"\\f591\";\n}\n\n.fa-key::before {\n  content: \"\\f084\";\n}\n\n.fa-bullhorn::before {\n  content: \"\\f0a1\";\n}\n\n.fa-globe::before {\n  content: \"\\f0ac\";\n}\n\n.fa-synagogue::before {\n  content: \"\\f69b\";\n}\n\n.fa-person-half-dress::before {\n  content: \"\\e548\";\n}\n\n.fa-road-bridge::before {\n  content: \"\\e563\";\n}\n\n.fa-location-arrow::before {\n  content: \"\\f124\";\n}\n\n.fa-c::before {\n  content: \"C\";\n}\n\n.fa-tablet-button::before {\n  content: \"\\f10a\";\n}\n\n.fa-building-lock::before {\n  content: \"\\e4d6\";\n}\n\n.fa-pizza-slice::before {\n  content: \"\\f818\";\n}\n\n.fa-money-bill-wave::before {\n  content: \"\\f53a\";\n}\n\n.fa-chart-area::before {\n  content: \"\\f1fe\";\n}\n\n.fa-area-chart::before {\n  content: \"\\f1fe\";\n}\n\n.fa-house-flag::before {\n  content: \"\\e50d\";\n}\n\n.fa-person-circle-minus::before {\n  content: \"\\e540\";\n}\n\n.fa-ban::before {\n  content: \"\\f05e\";\n}\n\n.fa-cancel::before {\n  content: \"\\f05e\";\n}\n\n.fa-camera-rotate::before {\n  content: \"\\e0d8\";\n}\n\n.fa-spray-can-sparkles::before {\n  content: \"\\f5d0\";\n}\n\n.fa-air-freshener::before {\n  content: \"\\f5d0\";\n}\n\n.fa-star::before {\n  content: \"\\f005\";\n}\n\n.fa-repeat::before {\n  content: \"\\f363\";\n}\n\n.fa-cross::before {\n  content: \"\\f654\";\n}\n\n.fa-box::before {\n  content: \"\\f466\";\n}\n\n.fa-venus-mars::before {\n  content: \"\\f228\";\n}\n\n.fa-arrow-pointer::before {\n  content: \"\\f245\";\n}\n\n.fa-mouse-pointer::before {\n  content: \"\\f245\";\n}\n\n.fa-maximize::before {\n  content: \"\\f31e\";\n}\n\n.fa-expand-arrows-alt::before {\n  content: \"\\f31e\";\n}\n\n.fa-charging-station::before {\n  content: \"\\f5e7\";\n}\n\n.fa-shapes::before {\n  content: \"\\f61f\";\n}\n\n.fa-triangle-circle-square::before {\n  content: \"\\f61f\";\n}\n\n.fa-shuffle::before {\n  content: \"\\f074\";\n}\n\n.fa-random::before {\n  content: \"\\f074\";\n}\n\n.fa-person-running::before {\n  content: \"\\f70c\";\n}\n\n.fa-running::before {\n  content: \"\\f70c\";\n}\n\n.fa-mobile-retro::before {\n  content: \"\\e527\";\n}\n\n.fa-grip-lines-vertical::before {\n  content: \"\\f7a5\";\n}\n\n.fa-spider::before {\n  content: \"\\f717\";\n}\n\n.fa-hands-bound::before {\n  content: \"\\e4f9\";\n}\n\n.fa-file-invoice-dollar::before {\n  content: \"\\f571\";\n}\n\n.fa-plane-circle-exclamation::before {\n  content: \"\\e556\";\n}\n\n.fa-x-ray::before {\n  content: \"\\f497\";\n}\n\n.fa-spell-check::before {\n  content: \"\\f891\";\n}\n\n.fa-slash::before {\n  content: \"\\f715\";\n}\n\n.fa-computer-mouse::before {\n  content: \"\\f8cc\";\n}\n\n.fa-mouse::before {\n  content: \"\\f8cc\";\n}\n\n.fa-arrow-right-to-bracket::before {\n  content: \"\\f090\";\n}\n\n.fa-sign-in::before {\n  content: \"\\f090\";\n}\n\n.fa-shop-slash::before {\n  content: \"\\e070\";\n}\n\n.fa-store-alt-slash::before {\n  content: \"\\e070\";\n}\n\n.fa-server::before {\n  content: \"\\f233\";\n}\n\n.fa-virus-covid-slash::before {\n  content: \"\\e4a9\";\n}\n\n.fa-shop-lock::before {\n  content: \"\\e4a5\";\n}\n\n.fa-hourglass-start::before {\n  content: \"\\f251\";\n}\n\n.fa-hourglass-1::before {\n  content: \"\\f251\";\n}\n\n.fa-blender-phone::before {\n  content: \"\\f6b6\";\n}\n\n.fa-building-wheat::before {\n  content: \"\\e4db\";\n}\n\n.fa-person-breastfeeding::before {\n  content: \"\\e53a\";\n}\n\n.fa-right-to-bracket::before {\n  content: \"\\f2f6\";\n}\n\n.fa-sign-in-alt::before {\n  content: \"\\f2f6\";\n}\n\n.fa-venus::before {\n  content: \"\\f221\";\n}\n\n.fa-passport::before {\n  content: \"\\f5ab\";\n}\n\n.fa-heart-pulse::before {\n  content: \"\\f21e\";\n}\n\n.fa-heartbeat::before {\n  content: \"\\f21e\";\n}\n\n.fa-people-carry-box::before {\n  content: \"\\f4ce\";\n}\n\n.fa-people-carry::before {\n  content: \"\\f4ce\";\n}\n\n.fa-temperature-high::before {\n  content: \"\\f769\";\n}\n\n.fa-microchip::before {\n  content: \"\\f2db\";\n}\n\n.fa-crown::before {\n  content: \"\\f521\";\n}\n\n.fa-weight-hanging::before {\n  content: \"\\f5cd\";\n}\n\n.fa-xmarks-lines::before {\n  content: \"\\e59a\";\n}\n\n.fa-file-prescription::before {\n  content: \"\\f572\";\n}\n\n.fa-weight-scale::before {\n  content: \"\\f496\";\n}\n\n.fa-weight::before {\n  content: \"\\f496\";\n}\n\n.fa-user-group::before {\n  content: \"\\f500\";\n}\n\n.fa-user-friends::before {\n  content: \"\\f500\";\n}\n\n.fa-arrow-up-a-z::before {\n  content: \"\\f15e\";\n}\n\n.fa-sort-alpha-up::before {\n  content: \"\\f15e\";\n}\n\n.fa-chess-knight::before {\n  content: \"\\f441\";\n}\n\n.fa-face-laugh-squint::before {\n  content: \"\\f59b\";\n}\n\n.fa-laugh-squint::before {\n  content: \"\\f59b\";\n}\n\n.fa-wheelchair::before {\n  content: \"\\f193\";\n}\n\n.fa-circle-arrow-up::before {\n  content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-up::before {\n  content: \"\\f0aa\";\n}\n\n.fa-toggle-on::before {\n  content: \"\\f205\";\n}\n\n.fa-person-walking::before {\n  content: \"\\f554\";\n}\n\n.fa-walking::before {\n  content: \"\\f554\";\n}\n\n.fa-l::before {\n  content: \"L\";\n}\n\n.fa-fire::before {\n  content: \"\\f06d\";\n}\n\n.fa-bed-pulse::before {\n  content: \"\\f487\";\n}\n\n.fa-procedures::before {\n  content: \"\\f487\";\n}\n\n.fa-shuttle-space::before {\n  content: \"\\f197\";\n}\n\n.fa-space-shuttle::before {\n  content: \"\\f197\";\n}\n\n.fa-face-laugh::before {\n  content: \"\\f599\";\n}\n\n.fa-laugh::before {\n  content: \"\\f599\";\n}\n\n.fa-folder-open::before {\n  content: \"\\f07c\";\n}\n\n.fa-heart-circle-plus::before {\n  content: \"\\e500\";\n}\n\n.fa-code-fork::before {\n  content: \"\\e13b\";\n}\n\n.fa-city::before {\n  content: \"\\f64f\";\n}\n\n.fa-microphone-lines::before {\n  content: \"\\f3c9\";\n}\n\n.fa-microphone-alt::before {\n  content: \"\\f3c9\";\n}\n\n.fa-pepper-hot::before {\n  content: \"\\f816\";\n}\n\n.fa-unlock::before {\n  content: \"\\f09c\";\n}\n\n.fa-colon-sign::before {\n  content: \"\\e140\";\n}\n\n.fa-headset::before {\n  content: \"\\f590\";\n}\n\n.fa-store-slash::before {\n  content: \"\\e071\";\n}\n\n.fa-road-circle-xmark::before {\n  content: \"\\e566\";\n}\n\n.fa-user-minus::before {\n  content: \"\\f503\";\n}\n\n.fa-mars-stroke-up::before {\n  content: \"\\f22a\";\n}\n\n.fa-mars-stroke-v::before {\n  content: \"\\f22a\";\n}\n\n.fa-champagne-glasses::before {\n  content: \"\\f79f\";\n}\n\n.fa-glass-cheers::before {\n  content: \"\\f79f\";\n}\n\n.fa-clipboard::before {\n  content: \"\\f328\";\n}\n\n.fa-house-circle-exclamation::before {\n  content: \"\\e50a\";\n}\n\n.fa-file-arrow-up::before {\n  content: \"\\f574\";\n}\n\n.fa-file-upload::before {\n  content: \"\\f574\";\n}\n\n.fa-wifi::before {\n  content: \"\\f1eb\";\n}\n\n.fa-wifi-3::before {\n  content: \"\\f1eb\";\n}\n\n.fa-wifi-strong::before {\n  content: \"\\f1eb\";\n}\n\n.fa-bath::before {\n  content: \"\\f2cd\";\n}\n\n.fa-bathtub::before {\n  content: \"\\f2cd\";\n}\n\n.fa-underline::before {\n  content: \"\\f0cd\";\n}\n\n.fa-user-pen::before {\n  content: \"\\f4ff\";\n}\n\n.fa-user-edit::before {\n  content: \"\\f4ff\";\n}\n\n.fa-signature::before {\n  content: \"\\f5b7\";\n}\n\n.fa-stroopwafel::before {\n  content: \"\\f551\";\n}\n\n.fa-bold::before {\n  content: \"\\f032\";\n}\n\n.fa-anchor-lock::before {\n  content: \"\\e4ad\";\n}\n\n.fa-building-ngo::before {\n  content: \"\\e4d7\";\n}\n\n.fa-manat-sign::before {\n  content: \"\\e1d5\";\n}\n\n.fa-not-equal::before {\n  content: \"\\f53e\";\n}\n\n.fa-border-top-left::before {\n  content: \"\\f853\";\n}\n\n.fa-border-style::before {\n  content: \"\\f853\";\n}\n\n.fa-map-location-dot::before {\n  content: \"\\f5a0\";\n}\n\n.fa-map-marked-alt::before {\n  content: \"\\f5a0\";\n}\n\n.fa-jedi::before {\n  content: \"\\f669\";\n}\n\n.fa-square-poll-vertical::before {\n  content: \"\\f681\";\n}\n\n.fa-poll::before {\n  content: \"\\f681\";\n}\n\n.fa-mug-hot::before {\n  content: \"\\f7b6\";\n}\n\n.fa-car-battery::before {\n  content: \"\\f5df\";\n}\n\n.fa-battery-car::before {\n  content: \"\\f5df\";\n}\n\n.fa-gift::before {\n  content: \"\\f06b\";\n}\n\n.fa-dice-two::before {\n  content: \"\\f528\";\n}\n\n.fa-chess-queen::before {\n  content: \"\\f445\";\n}\n\n.fa-glasses::before {\n  content: \"\\f530\";\n}\n\n.fa-chess-board::before {\n  content: \"\\f43c\";\n}\n\n.fa-building-circle-check::before {\n  content: \"\\e4d2\";\n}\n\n.fa-person-chalkboard::before {\n  content: \"\\e53d\";\n}\n\n.fa-mars-stroke-right::before {\n  content: \"\\f22b\";\n}\n\n.fa-mars-stroke-h::before {\n  content: \"\\f22b\";\n}\n\n.fa-hand-back-fist::before {\n  content: \"\\f255\";\n}\n\n.fa-hand-rock::before {\n  content: \"\\f255\";\n}\n\n.fa-square-caret-up::before {\n  content: \"\\f151\";\n}\n\n.fa-caret-square-up::before {\n  content: \"\\f151\";\n}\n\n.fa-cloud-showers-water::before {\n  content: \"\\e4e4\";\n}\n\n.fa-chart-bar::before {\n  content: \"\\f080\";\n}\n\n.fa-bar-chart::before {\n  content: \"\\f080\";\n}\n\n.fa-hands-bubbles::before {\n  content: \"\\e05e\";\n}\n\n.fa-hands-wash::before {\n  content: \"\\e05e\";\n}\n\n.fa-less-than-equal::before {\n  content: \"\\f537\";\n}\n\n.fa-train::before {\n  content: \"\\f238\";\n}\n\n.fa-eye-low-vision::before {\n  content: \"\\f2a8\";\n}\n\n.fa-low-vision::before {\n  content: \"\\f2a8\";\n}\n\n.fa-crow::before {\n  content: \"\\f520\";\n}\n\n.fa-sailboat::before {\n  content: \"\\e445\";\n}\n\n.fa-window-restore::before {\n  content: \"\\f2d2\";\n}\n\n.fa-square-plus::before {\n  content: \"\\f0fe\";\n}\n\n.fa-plus-square::before {\n  content: \"\\f0fe\";\n}\n\n.fa-torii-gate::before {\n  content: \"\\f6a1\";\n}\n\n.fa-frog::before {\n  content: \"\\f52e\";\n}\n\n.fa-bucket::before {\n  content: \"\\e4cf\";\n}\n\n.fa-image::before {\n  content: \"\\f03e\";\n}\n\n.fa-microphone::before {\n  content: \"\\f130\";\n}\n\n.fa-cow::before {\n  content: \"\\f6c8\";\n}\n\n.fa-caret-up::before {\n  content: \"\\f0d8\";\n}\n\n.fa-screwdriver::before {\n  content: \"\\f54a\";\n}\n\n.fa-folder-closed::before {\n  content: \"\\e185\";\n}\n\n.fa-house-tsunami::before {\n  content: \"\\e515\";\n}\n\n.fa-square-nfi::before {\n  content: \"\\e576\";\n}\n\n.fa-arrow-up-from-ground-water::before {\n  content: \"\\e4b5\";\n}\n\n.fa-martini-glass::before {\n  content: \"\\f57b\";\n}\n\n.fa-glass-martini-alt::before {\n  content: \"\\f57b\";\n}\n\n.fa-rotate-left::before {\n  content: \"\\f2ea\";\n}\n\n.fa-rotate-back::before {\n  content: \"\\f2ea\";\n}\n\n.fa-rotate-backward::before {\n  content: \"\\f2ea\";\n}\n\n.fa-undo-alt::before {\n  content: \"\\f2ea\";\n}\n\n.fa-table-columns::before {\n  content: \"\\f0db\";\n}\n\n.fa-columns::before {\n  content: \"\\f0db\";\n}\n\n.fa-lemon::before {\n  content: \"\\f094\";\n}\n\n.fa-head-side-mask::before {\n  content: \"\\e063\";\n}\n\n.fa-handshake::before {\n  content: \"\\f2b5\";\n}\n\n.fa-gem::before {\n  content: \"\\f3a5\";\n}\n\n.fa-dolly::before {\n  content: \"\\f472\";\n}\n\n.fa-dolly-box::before {\n  content: \"\\f472\";\n}\n\n.fa-smoking::before {\n  content: \"\\f48d\";\n}\n\n.fa-minimize::before {\n  content: \"\\f78c\";\n}\n\n.fa-compress-arrows-alt::before {\n  content: \"\\f78c\";\n}\n\n.fa-monument::before {\n  content: \"\\f5a6\";\n}\n\n.fa-snowplow::before {\n  content: \"\\f7d2\";\n}\n\n.fa-angles-right::before {\n  content: \"\\f101\";\n}\n\n.fa-angle-double-right::before {\n  content: \"\\f101\";\n}\n\n.fa-cannabis::before {\n  content: \"\\f55f\";\n}\n\n.fa-circle-play::before {\n  content: \"\\f144\";\n}\n\n.fa-play-circle::before {\n  content: \"\\f144\";\n}\n\n.fa-tablets::before {\n  content: \"\\f490\";\n}\n\n.fa-ethernet::before {\n  content: \"\\f796\";\n}\n\n.fa-euro-sign::before {\n  content: \"\\f153\";\n}\n\n.fa-eur::before {\n  content: \"\\f153\";\n}\n\n.fa-euro::before {\n  content: \"\\f153\";\n}\n\n.fa-chair::before {\n  content: \"\\f6c0\";\n}\n\n.fa-circle-check::before {\n  content: \"\\f058\";\n}\n\n.fa-check-circle::before {\n  content: \"\\f058\";\n}\n\n.fa-circle-stop::before {\n  content: \"\\f28d\";\n}\n\n.fa-stop-circle::before {\n  content: \"\\f28d\";\n}\n\n.fa-compass-drafting::before {\n  content: \"\\f568\";\n}\n\n.fa-drafting-compass::before {\n  content: \"\\f568\";\n}\n\n.fa-plate-wheat::before {\n  content: \"\\e55a\";\n}\n\n.fa-icicles::before {\n  content: \"\\f7ad\";\n}\n\n.fa-person-shelter::before {\n  content: \"\\e54f\";\n}\n\n.fa-neuter::before {\n  content: \"\\f22c\";\n}\n\n.fa-id-badge::before {\n  content: \"\\f2c1\";\n}\n\n.fa-marker::before {\n  content: \"\\f5a1\";\n}\n\n.fa-face-laugh-beam::before {\n  content: \"\\f59a\";\n}\n\n.fa-laugh-beam::before {\n  content: \"\\f59a\";\n}\n\n.fa-helicopter-symbol::before {\n  content: \"\\e502\";\n}\n\n.fa-universal-access::before {\n  content: \"\\f29a\";\n}\n\n.fa-circle-chevron-up::before {\n  content: \"\\f139\";\n}\n\n.fa-chevron-circle-up::before {\n  content: \"\\f139\";\n}\n\n.fa-lari-sign::before {\n  content: \"\\e1c8\";\n}\n\n.fa-volcano::before {\n  content: \"\\f770\";\n}\n\n.fa-person-walking-dashed-line-arrow-right::before {\n  content: \"\\e553\";\n}\n\n.fa-sterling-sign::before {\n  content: \"\\f154\";\n}\n\n.fa-gbp::before {\n  content: \"\\f154\";\n}\n\n.fa-pound-sign::before {\n  content: \"\\f154\";\n}\n\n.fa-viruses::before {\n  content: \"\\e076\";\n}\n\n.fa-square-person-confined::before {\n  content: \"\\e577\";\n}\n\n.fa-user-tie::before {\n  content: \"\\f508\";\n}\n\n.fa-arrow-down-long::before {\n  content: \"\\f175\";\n}\n\n.fa-long-arrow-down::before {\n  content: \"\\f175\";\n}\n\n.fa-tent-arrow-down-to-line::before {\n  content: \"\\e57e\";\n}\n\n.fa-certificate::before {\n  content: \"\\f0a3\";\n}\n\n.fa-reply-all::before {\n  content: \"\\f122\";\n}\n\n.fa-mail-reply-all::before {\n  content: \"\\f122\";\n}\n\n.fa-suitcase::before {\n  content: \"\\f0f2\";\n}\n\n.fa-person-skating::before {\n  content: \"\\f7c5\";\n}\n\n.fa-skating::before {\n  content: \"\\f7c5\";\n}\n\n.fa-filter-circle-dollar::before {\n  content: \"\\f662\";\n}\n\n.fa-funnel-dollar::before {\n  content: \"\\f662\";\n}\n\n.fa-camera-retro::before {\n  content: \"\\f083\";\n}\n\n.fa-circle-arrow-down::before {\n  content: \"\\f0ab\";\n}\n\n.fa-arrow-circle-down::before {\n  content: \"\\f0ab\";\n}\n\n.fa-file-import::before {\n  content: \"\\f56f\";\n}\n\n.fa-arrow-right-to-file::before {\n  content: \"\\f56f\";\n}\n\n.fa-square-arrow-up-right::before {\n  content: \"\\f14c\";\n}\n\n.fa-external-link-square::before {\n  content: \"\\f14c\";\n}\n\n.fa-box-open::before {\n  content: \"\\f49e\";\n}\n\n.fa-scroll::before {\n  content: \"\\f70e\";\n}\n\n.fa-spa::before {\n  content: \"\\f5bb\";\n}\n\n.fa-location-pin-lock::before {\n  content: \"\\e51f\";\n}\n\n.fa-pause::before {\n  content: \"\\f04c\";\n}\n\n.fa-hill-avalanche::before {\n  content: \"\\e507\";\n}\n\n.fa-temperature-empty::before {\n  content: \"\\f2cb\";\n}\n\n.fa-temperature-0::before {\n  content: \"\\f2cb\";\n}\n\n.fa-thermometer-0::before {\n  content: \"\\f2cb\";\n}\n\n.fa-thermometer-empty::before {\n  content: \"\\f2cb\";\n}\n\n.fa-bomb::before {\n  content: \"\\f1e2\";\n}\n\n.fa-registered::before {\n  content: \"\\f25d\";\n}\n\n.fa-address-card::before {\n  content: \"\\f2bb\";\n}\n\n.fa-contact-card::before {\n  content: \"\\f2bb\";\n}\n\n.fa-vcard::before {\n  content: \"\\f2bb\";\n}\n\n.fa-scale-unbalanced-flip::before {\n  content: \"\\f516\";\n}\n\n.fa-balance-scale-right::before {\n  content: \"\\f516\";\n}\n\n.fa-subscript::before {\n  content: \"\\f12c\";\n}\n\n.fa-diamond-turn-right::before {\n  content: \"\\f5eb\";\n}\n\n.fa-directions::before {\n  content: \"\\f5eb\";\n}\n\n.fa-burst::before {\n  content: \"\\e4dc\";\n}\n\n.fa-house-laptop::before {\n  content: \"\\e066\";\n}\n\n.fa-laptop-house::before {\n  content: \"\\e066\";\n}\n\n.fa-face-tired::before {\n  content: \"\\f5c8\";\n}\n\n.fa-tired::before {\n  content: \"\\f5c8\";\n}\n\n.fa-money-bills::before {\n  content: \"\\e1f3\";\n}\n\n.fa-smog::before {\n  content: \"\\f75f\";\n}\n\n.fa-crutch::before {\n  content: \"\\f7f7\";\n}\n\n.fa-cloud-arrow-up::before {\n  content: \"\\f0ee\";\n}\n\n.fa-cloud-upload::before {\n  content: \"\\f0ee\";\n}\n\n.fa-cloud-upload-alt::before {\n  content: \"\\f0ee\";\n}\n\n.fa-palette::before {\n  content: \"\\f53f\";\n}\n\n.fa-arrows-turn-right::before {\n  content: \"\\e4c0\";\n}\n\n.fa-vest::before {\n  content: \"\\e085\";\n}\n\n.fa-ferry::before {\n  content: \"\\e4ea\";\n}\n\n.fa-arrows-down-to-people::before {\n  content: \"\\e4b9\";\n}\n\n.fa-seedling::before {\n  content: \"\\f4d8\";\n}\n\n.fa-sprout::before {\n  content: \"\\f4d8\";\n}\n\n.fa-left-right::before {\n  content: \"\\f337\";\n}\n\n.fa-arrows-alt-h::before {\n  content: \"\\f337\";\n}\n\n.fa-boxes-packing::before {\n  content: \"\\e4c7\";\n}\n\n.fa-circle-arrow-left::before {\n  content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-left::before {\n  content: \"\\f0a8\";\n}\n\n.fa-group-arrows-rotate::before {\n  content: \"\\e4f6\";\n}\n\n.fa-bowl-food::before {\n  content: \"\\e4c6\";\n}\n\n.fa-candy-cane::before {\n  content: \"\\f786\";\n}\n\n.fa-arrow-down-wide-short::before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-asc::before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-down::before {\n  content: \"\\f160\";\n}\n\n.fa-cloud-bolt::before {\n  content: \"\\f76c\";\n}\n\n.fa-thunderstorm::before {\n  content: \"\\f76c\";\n}\n\n.fa-text-slash::before {\n  content: \"\\f87d\";\n}\n\n.fa-remove-format::before {\n  content: \"\\f87d\";\n}\n\n.fa-face-smile-wink::before {\n  content: \"\\f4da\";\n}\n\n.fa-smile-wink::before {\n  content: \"\\f4da\";\n}\n\n.fa-file-word::before {\n  content: \"\\f1c2\";\n}\n\n.fa-file-powerpoint::before {\n  content: \"\\f1c4\";\n}\n\n.fa-arrows-left-right::before {\n  content: \"\\f07e\";\n}\n\n.fa-arrows-h::before {\n  content: \"\\f07e\";\n}\n\n.fa-house-lock::before {\n  content: \"\\e510\";\n}\n\n.fa-cloud-arrow-down::before {\n  content: \"\\f0ed\";\n}\n\n.fa-cloud-download::before {\n  content: \"\\f0ed\";\n}\n\n.fa-cloud-download-alt::before {\n  content: \"\\f0ed\";\n}\n\n.fa-children::before {\n  content: \"\\e4e1\";\n}\n\n.fa-chalkboard::before {\n  content: \"\\f51b\";\n}\n\n.fa-blackboard::before {\n  content: \"\\f51b\";\n}\n\n.fa-user-large-slash::before {\n  content: \"\\f4fa\";\n}\n\n.fa-user-alt-slash::before {\n  content: \"\\f4fa\";\n}\n\n.fa-envelope-open::before {\n  content: \"\\f2b6\";\n}\n\n.fa-handshake-simple-slash::before {\n  content: \"\\e05f\";\n}\n\n.fa-handshake-alt-slash::before {\n  content: \"\\e05f\";\n}\n\n.fa-mattress-pillow::before {\n  content: \"\\e525\";\n}\n\n.fa-guarani-sign::before {\n  content: \"\\e19a\";\n}\n\n.fa-arrows-rotate::before {\n  content: \"\\f021\";\n}\n\n.fa-refresh::before {\n  content: \"\\f021\";\n}\n\n.fa-sync::before {\n  content: \"\\f021\";\n}\n\n.fa-fire-extinguisher::before {\n  content: \"\\f134\";\n}\n\n.fa-cruzeiro-sign::before {\n  content: \"\\e152\";\n}\n\n.fa-greater-than-equal::before {\n  content: \"\\f532\";\n}\n\n.fa-shield-halved::before {\n  content: \"\\f3ed\";\n}\n\n.fa-shield-alt::before {\n  content: \"\\f3ed\";\n}\n\n.fa-book-atlas::before {\n  content: \"\\f558\";\n}\n\n.fa-atlas::before {\n  content: \"\\f558\";\n}\n\n.fa-virus::before {\n  content: \"\\e074\";\n}\n\n.fa-envelope-circle-check::before {\n  content: \"\\e4e8\";\n}\n\n.fa-layer-group::before {\n  content: \"\\f5fd\";\n}\n\n.fa-arrows-to-dot::before {\n  content: \"\\e4be\";\n}\n\n.fa-archway::before {\n  content: \"\\f557\";\n}\n\n.fa-heart-circle-check::before {\n  content: \"\\e4fd\";\n}\n\n.fa-house-chimney-crack::before {\n  content: \"\\f6f1\";\n}\n\n.fa-house-damage::before {\n  content: \"\\f6f1\";\n}\n\n.fa-file-zipper::before {\n  content: \"\\f1c6\";\n}\n\n.fa-file-archive::before {\n  content: \"\\f1c6\";\n}\n\n.fa-square::before {\n  content: \"\\f0c8\";\n}\n\n.fa-martini-glass-empty::before {\n  content: \"\\f000\";\n}\n\n.fa-glass-martini::before {\n  content: \"\\f000\";\n}\n\n.fa-couch::before {\n  content: \"\\f4b8\";\n}\n\n.fa-cedi-sign::before {\n  content: \"\\e0df\";\n}\n\n.fa-italic::before {\n  content: \"\\f033\";\n}\n\n.fa-table-cells-column-lock::before {\n  content: \"\\e678\";\n}\n\n.fa-church::before {\n  content: \"\\f51d\";\n}\n\n.fa-comments-dollar::before {\n  content: \"\\f653\";\n}\n\n.fa-democrat::before {\n  content: \"\\f747\";\n}\n\n.fa-z::before {\n  content: \"Z\";\n}\n\n.fa-person-skiing::before {\n  content: \"\\f7c9\";\n}\n\n.fa-skiing::before {\n  content: \"\\f7c9\";\n}\n\n.fa-road-lock::before {\n  content: \"\\e567\";\n}\n\n.fa-a::before {\n  content: \"A\";\n}\n\n.fa-temperature-arrow-down::before {\n  content: \"\\e03f\";\n}\n\n.fa-temperature-down::before {\n  content: \"\\e03f\";\n}\n\n.fa-feather-pointed::before {\n  content: \"\\f56b\";\n}\n\n.fa-feather-alt::before {\n  content: \"\\f56b\";\n}\n\n.fa-p::before {\n  content: \"P\";\n}\n\n.fa-snowflake::before {\n  content: \"\\f2dc\";\n}\n\n.fa-newspaper::before {\n  content: \"\\f1ea\";\n}\n\n.fa-rectangle-ad::before {\n  content: \"\\f641\";\n}\n\n.fa-ad::before {\n  content: \"\\f641\";\n}\n\n.fa-circle-arrow-right::before {\n  content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-right::before {\n  content: \"\\f0a9\";\n}\n\n.fa-filter-circle-xmark::before {\n  content: \"\\e17b\";\n}\n\n.fa-locust::before {\n  content: \"\\e520\";\n}\n\n.fa-sort::before {\n  content: \"\\f0dc\";\n}\n\n.fa-unsorted::before {\n  content: \"\\f0dc\";\n}\n\n.fa-list-ol::before {\n  content: \"\\f0cb\";\n}\n\n.fa-list-1-2::before {\n  content: \"\\f0cb\";\n}\n\n.fa-list-numeric::before {\n  content: \"\\f0cb\";\n}\n\n.fa-person-dress-burst::before {\n  content: \"\\e544\";\n}\n\n.fa-money-check-dollar::before {\n  content: \"\\f53d\";\n}\n\n.fa-money-check-alt::before {\n  content: \"\\f53d\";\n}\n\n.fa-vector-square::before {\n  content: \"\\f5cb\";\n}\n\n.fa-bread-slice::before {\n  content: \"\\f7ec\";\n}\n\n.fa-language::before {\n  content: \"\\f1ab\";\n}\n\n.fa-face-kiss-wink-heart::before {\n  content: \"\\f598\";\n}\n\n.fa-kiss-wink-heart::before {\n  content: \"\\f598\";\n}\n\n.fa-filter::before {\n  content: \"\\f0b0\";\n}\n\n.fa-question::before {\n  content: \"\\?\";\n}\n\n.fa-file-signature::before {\n  content: \"\\f573\";\n}\n\n.fa-up-down-left-right::before {\n  content: \"\\f0b2\";\n}\n\n.fa-arrows-alt::before {\n  content: \"\\f0b2\";\n}\n\n.fa-house-chimney-user::before {\n  content: \"\\e065\";\n}\n\n.fa-hand-holding-heart::before {\n  content: \"\\f4be\";\n}\n\n.fa-puzzle-piece::before {\n  content: \"\\f12e\";\n}\n\n.fa-money-check::before {\n  content: \"\\f53c\";\n}\n\n.fa-star-half-stroke::before {\n  content: \"\\f5c0\";\n}\n\n.fa-star-half-alt::before {\n  content: \"\\f5c0\";\n}\n\n.fa-code::before {\n  content: \"\\f121\";\n}\n\n.fa-whiskey-glass::before {\n  content: \"\\f7a0\";\n}\n\n.fa-glass-whiskey::before {\n  content: \"\\f7a0\";\n}\n\n.fa-building-circle-exclamation::before {\n  content: \"\\e4d3\";\n}\n\n.fa-magnifying-glass-chart::before {\n  content: \"\\e522\";\n}\n\n.fa-arrow-up-right-from-square::before {\n  content: \"\\f08e\";\n}\n\n.fa-external-link::before {\n  content: \"\\f08e\";\n}\n\n.fa-cubes-stacked::before {\n  content: \"\\e4e6\";\n}\n\n.fa-won-sign::before {\n  content: \"\\f159\";\n}\n\n.fa-krw::before {\n  content: \"\\f159\";\n}\n\n.fa-won::before {\n  content: \"\\f159\";\n}\n\n.fa-virus-covid::before {\n  content: \"\\e4a8\";\n}\n\n.fa-austral-sign::before {\n  content: \"\\e0a9\";\n}\n\n.fa-f::before {\n  content: \"F\";\n}\n\n.fa-leaf::before {\n  content: \"\\f06c\";\n}\n\n.fa-road::before {\n  content: \"\\f018\";\n}\n\n.fa-taxi::before {\n  content: \"\\f1ba\";\n}\n\n.fa-cab::before {\n  content: \"\\f1ba\";\n}\n\n.fa-person-circle-plus::before {\n  content: \"\\e541\";\n}\n\n.fa-chart-pie::before {\n  content: \"\\f200\";\n}\n\n.fa-pie-chart::before {\n  content: \"\\f200\";\n}\n\n.fa-bolt-lightning::before {\n  content: \"\\e0b7\";\n}\n\n.fa-sack-xmark::before {\n  content: \"\\e56a\";\n}\n\n.fa-file-excel::before {\n  content: \"\\f1c3\";\n}\n\n.fa-file-contract::before {\n  content: \"\\f56c\";\n}\n\n.fa-fish-fins::before {\n  content: \"\\e4f2\";\n}\n\n.fa-building-flag::before {\n  content: \"\\e4d5\";\n}\n\n.fa-face-grin-beam::before {\n  content: \"\\f582\";\n}\n\n.fa-grin-beam::before {\n  content: \"\\f582\";\n}\n\n.fa-object-ungroup::before {\n  content: \"\\f248\";\n}\n\n.fa-poop::before {\n  content: \"\\f619\";\n}\n\n.fa-location-pin::before {\n  content: \"\\f041\";\n}\n\n.fa-map-marker::before {\n  content: \"\\f041\";\n}\n\n.fa-kaaba::before {\n  content: \"\\f66b\";\n}\n\n.fa-toilet-paper::before {\n  content: \"\\f71e\";\n}\n\n.fa-helmet-safety::before {\n  content: \"\\f807\";\n}\n\n.fa-hard-hat::before {\n  content: \"\\f807\";\n}\n\n.fa-hat-hard::before {\n  content: \"\\f807\";\n}\n\n.fa-eject::before {\n  content: \"\\f052\";\n}\n\n.fa-circle-right::before {\n  content: \"\\f35a\";\n}\n\n.fa-arrow-alt-circle-right::before {\n  content: \"\\f35a\";\n}\n\n.fa-plane-circle-check::before {\n  content: \"\\e555\";\n}\n\n.fa-face-rolling-eyes::before {\n  content: \"\\f5a5\";\n}\n\n.fa-meh-rolling-eyes::before {\n  content: \"\\f5a5\";\n}\n\n.fa-object-group::before {\n  content: \"\\f247\";\n}\n\n.fa-chart-line::before {\n  content: \"\\f201\";\n}\n\n.fa-line-chart::before {\n  content: \"\\f201\";\n}\n\n.fa-mask-ventilator::before {\n  content: \"\\e524\";\n}\n\n.fa-arrow-right::before {\n  content: \"\\f061\";\n}\n\n.fa-signs-post::before {\n  content: \"\\f277\";\n}\n\n.fa-map-signs::before {\n  content: \"\\f277\";\n}\n\n.fa-cash-register::before {\n  content: \"\\f788\";\n}\n\n.fa-person-circle-question::before {\n  content: \"\\e542\";\n}\n\n.fa-h::before {\n  content: \"H\";\n}\n\n.fa-tarp::before {\n  content: \"\\e57b\";\n}\n\n.fa-screwdriver-wrench::before {\n  content: \"\\f7d9\";\n}\n\n.fa-tools::before {\n  content: \"\\f7d9\";\n}\n\n.fa-arrows-to-eye::before {\n  content: \"\\e4bf\";\n}\n\n.fa-plug-circle-bolt::before {\n  content: \"\\e55b\";\n}\n\n.fa-heart::before {\n  content: \"\\f004\";\n}\n\n.fa-mars-and-venus::before {\n  content: \"\\f224\";\n}\n\n.fa-house-user::before {\n  content: \"\\e1b0\";\n}\n\n.fa-home-user::before {\n  content: \"\\e1b0\";\n}\n\n.fa-dumpster-fire::before {\n  content: \"\\f794\";\n}\n\n.fa-house-crack::before {\n  content: \"\\e3b1\";\n}\n\n.fa-martini-glass-citrus::before {\n  content: \"\\f561\";\n}\n\n.fa-cocktail::before {\n  content: \"\\f561\";\n}\n\n.fa-face-surprise::before {\n  content: \"\\f5c2\";\n}\n\n.fa-surprise::before {\n  content: \"\\f5c2\";\n}\n\n.fa-bottle-water::before {\n  content: \"\\e4c5\";\n}\n\n.fa-circle-pause::before {\n  content: \"\\f28b\";\n}\n\n.fa-pause-circle::before {\n  content: \"\\f28b\";\n}\n\n.fa-toilet-paper-slash::before {\n  content: \"\\e072\";\n}\n\n.fa-apple-whole::before {\n  content: \"\\f5d1\";\n}\n\n.fa-apple-alt::before {\n  content: \"\\f5d1\";\n}\n\n.fa-kitchen-set::before {\n  content: \"\\e51a\";\n}\n\n.fa-r::before {\n  content: \"R\";\n}\n\n.fa-temperature-quarter::before {\n  content: \"\\f2ca\";\n}\n\n.fa-temperature-1::before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-1::before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-quarter::before {\n  content: \"\\f2ca\";\n}\n\n.fa-cube::before {\n  content: \"\\f1b2\";\n}\n\n.fa-bitcoin-sign::before {\n  content: \"\\e0b4\";\n}\n\n.fa-shield-dog::before {\n  content: \"\\e573\";\n}\n\n.fa-solar-panel::before {\n  content: \"\\f5ba\";\n}\n\n.fa-lock-open::before {\n  content: \"\\f3c1\";\n}\n\n.fa-elevator::before {\n  content: \"\\e16d\";\n}\n\n.fa-money-bill-transfer::before {\n  content: \"\\e528\";\n}\n\n.fa-money-bill-trend-up::before {\n  content: \"\\e529\";\n}\n\n.fa-house-flood-water-circle-arrow-right::before {\n  content: \"\\e50f\";\n}\n\n.fa-square-poll-horizontal::before {\n  content: \"\\f682\";\n}\n\n.fa-poll-h::before {\n  content: \"\\f682\";\n}\n\n.fa-circle::before {\n  content: \"\\f111\";\n}\n\n.fa-backward-fast::before {\n  content: \"\\f049\";\n}\n\n.fa-fast-backward::before {\n  content: \"\\f049\";\n}\n\n.fa-recycle::before {\n  content: \"\\f1b8\";\n}\n\n.fa-user-astronaut::before {\n  content: \"\\f4fb\";\n}\n\n.fa-plane-slash::before {\n  content: \"\\e069\";\n}\n\n.fa-trademark::before {\n  content: \"\\f25c\";\n}\n\n.fa-basketball::before {\n  content: \"\\f434\";\n}\n\n.fa-basketball-ball::before {\n  content: \"\\f434\";\n}\n\n.fa-satellite-dish::before {\n  content: \"\\f7c0\";\n}\n\n.fa-circle-up::before {\n  content: \"\\f35b\";\n}\n\n.fa-arrow-alt-circle-up::before {\n  content: \"\\f35b\";\n}\n\n.fa-mobile-screen-button::before {\n  content: \"\\f3cd\";\n}\n\n.fa-mobile-alt::before {\n  content: \"\\f3cd\";\n}\n\n.fa-volume-high::before {\n  content: \"\\f028\";\n}\n\n.fa-volume-up::before {\n  content: \"\\f028\";\n}\n\n.fa-users-rays::before {\n  content: \"\\e593\";\n}\n\n.fa-wallet::before {\n  content: \"\\f555\";\n}\n\n.fa-clipboard-check::before {\n  content: \"\\f46c\";\n}\n\n.fa-file-audio::before {\n  content: \"\\f1c7\";\n}\n\n.fa-burger::before {\n  content: \"\\f805\";\n}\n\n.fa-hamburger::before {\n  content: \"\\f805\";\n}\n\n.fa-wrench::before {\n  content: \"\\f0ad\";\n}\n\n.fa-bugs::before {\n  content: \"\\e4d0\";\n}\n\n.fa-rupee-sign::before {\n  content: \"\\f156\";\n}\n\n.fa-rupee::before {\n  content: \"\\f156\";\n}\n\n.fa-file-image::before {\n  content: \"\\f1c5\";\n}\n\n.fa-circle-question::before {\n  content: \"\\f059\";\n}\n\n.fa-question-circle::before {\n  content: \"\\f059\";\n}\n\n.fa-plane-departure::before {\n  content: \"\\f5b0\";\n}\n\n.fa-handshake-slash::before {\n  content: \"\\e060\";\n}\n\n.fa-book-bookmark::before {\n  content: \"\\e0bb\";\n}\n\n.fa-code-branch::before {\n  content: \"\\f126\";\n}\n\n.fa-hat-cowboy::before {\n  content: \"\\f8c0\";\n}\n\n.fa-bridge::before {\n  content: \"\\e4c8\";\n}\n\n.fa-phone-flip::before {\n  content: \"\\f879\";\n}\n\n.fa-phone-alt::before {\n  content: \"\\f879\";\n}\n\n.fa-truck-front::before {\n  content: \"\\e2b7\";\n}\n\n.fa-cat::before {\n  content: \"\\f6be\";\n}\n\n.fa-anchor-circle-exclamation::before {\n  content: \"\\e4ab\";\n}\n\n.fa-truck-field::before {\n  content: \"\\e58d\";\n}\n\n.fa-route::before {\n  content: \"\\f4d7\";\n}\n\n.fa-clipboard-question::before {\n  content: \"\\e4e3\";\n}\n\n.fa-panorama::before {\n  content: \"\\e209\";\n}\n\n.fa-comment-medical::before {\n  content: \"\\f7f5\";\n}\n\n.fa-teeth-open::before {\n  content: \"\\f62f\";\n}\n\n.fa-file-circle-minus::before {\n  content: \"\\e4ed\";\n}\n\n.fa-tags::before {\n  content: \"\\f02c\";\n}\n\n.fa-wine-glass::before {\n  content: \"\\f4e3\";\n}\n\n.fa-forward-fast::before {\n  content: \"\\f050\";\n}\n\n.fa-fast-forward::before {\n  content: \"\\f050\";\n}\n\n.fa-face-meh-blank::before {\n  content: \"\\f5a4\";\n}\n\n.fa-meh-blank::before {\n  content: \"\\f5a4\";\n}\n\n.fa-square-parking::before {\n  content: \"\\f540\";\n}\n\n.fa-parking::before {\n  content: \"\\f540\";\n}\n\n.fa-house-signal::before {\n  content: \"\\e012\";\n}\n\n.fa-bars-progress::before {\n  content: \"\\f828\";\n}\n\n.fa-tasks-alt::before {\n  content: \"\\f828\";\n}\n\n.fa-faucet-drip::before {\n  content: \"\\e006\";\n}\n\n.fa-cart-flatbed::before {\n  content: \"\\f474\";\n}\n\n.fa-dolly-flatbed::before {\n  content: \"\\f474\";\n}\n\n.fa-ban-smoking::before {\n  content: \"\\f54d\";\n}\n\n.fa-smoking-ban::before {\n  content: \"\\f54d\";\n}\n\n.fa-terminal::before {\n  content: \"\\f120\";\n}\n\n.fa-mobile-button::before {\n  content: \"\\f10b\";\n}\n\n.fa-house-medical-flag::before {\n  content: \"\\e514\";\n}\n\n.fa-basket-shopping::before {\n  content: \"\\f291\";\n}\n\n.fa-shopping-basket::before {\n  content: \"\\f291\";\n}\n\n.fa-tape::before {\n  content: \"\\f4db\";\n}\n\n.fa-bus-simple::before {\n  content: \"\\f55e\";\n}\n\n.fa-bus-alt::before {\n  content: \"\\f55e\";\n}\n\n.fa-eye::before {\n  content: \"\\f06e\";\n}\n\n.fa-face-sad-cry::before {\n  content: \"\\f5b3\";\n}\n\n.fa-sad-cry::before {\n  content: \"\\f5b3\";\n}\n\n.fa-audio-description::before {\n  content: \"\\f29e\";\n}\n\n.fa-person-military-to-person::before {\n  content: \"\\e54c\";\n}\n\n.fa-file-shield::before {\n  content: \"\\e4f0\";\n}\n\n.fa-user-slash::before {\n  content: \"\\f506\";\n}\n\n.fa-pen::before {\n  content: \"\\f304\";\n}\n\n.fa-tower-observation::before {\n  content: \"\\e586\";\n}\n\n.fa-file-code::before {\n  content: \"\\f1c9\";\n}\n\n.fa-signal::before {\n  content: \"\\f012\";\n}\n\n.fa-signal-5::before {\n  content: \"\\f012\";\n}\n\n.fa-signal-perfect::before {\n  content: \"\\f012\";\n}\n\n.fa-bus::before {\n  content: \"\\f207\";\n}\n\n.fa-heart-circle-xmark::before {\n  content: \"\\e501\";\n}\n\n.fa-house-chimney::before {\n  content: \"\\e3af\";\n}\n\n.fa-home-lg::before {\n  content: \"\\e3af\";\n}\n\n.fa-window-maximize::before {\n  content: \"\\f2d0\";\n}\n\n.fa-face-frown::before {\n  content: \"\\f119\";\n}\n\n.fa-frown::before {\n  content: \"\\f119\";\n}\n\n.fa-prescription::before {\n  content: \"\\f5b1\";\n}\n\n.fa-shop::before {\n  content: \"\\f54f\";\n}\n\n.fa-store-alt::before {\n  content: \"\\f54f\";\n}\n\n.fa-floppy-disk::before {\n  content: \"\\f0c7\";\n}\n\n.fa-save::before {\n  content: \"\\f0c7\";\n}\n\n.fa-vihara::before {\n  content: \"\\f6a7\";\n}\n\n.fa-scale-unbalanced::before {\n  content: \"\\f515\";\n}\n\n.fa-balance-scale-left::before {\n  content: \"\\f515\";\n}\n\n.fa-sort-up::before {\n  content: \"\\f0de\";\n}\n\n.fa-sort-asc::before {\n  content: \"\\f0de\";\n}\n\n.fa-comment-dots::before {\n  content: \"\\f4ad\";\n}\n\n.fa-commenting::before {\n  content: \"\\f4ad\";\n}\n\n.fa-plant-wilt::before {\n  content: \"\\e5aa\";\n}\n\n.fa-diamond::before {\n  content: \"\\f219\";\n}\n\n.fa-face-grin-squint::before {\n  content: \"\\f585\";\n}\n\n.fa-grin-squint::before {\n  content: \"\\f585\";\n}\n\n.fa-hand-holding-dollar::before {\n  content: \"\\f4c0\";\n}\n\n.fa-hand-holding-usd::before {\n  content: \"\\f4c0\";\n}\n\n.fa-bacterium::before {\n  content: \"\\e05a\";\n}\n\n.fa-hand-pointer::before {\n  content: \"\\f25a\";\n}\n\n.fa-drum-steelpan::before {\n  content: \"\\f56a\";\n}\n\n.fa-hand-scissors::before {\n  content: \"\\f257\";\n}\n\n.fa-hands-praying::before {\n  content: \"\\f684\";\n}\n\n.fa-praying-hands::before {\n  content: \"\\f684\";\n}\n\n.fa-arrow-rotate-right::before {\n  content: \"\\f01e\";\n}\n\n.fa-arrow-right-rotate::before {\n  content: \"\\f01e\";\n}\n\n.fa-arrow-rotate-forward::before {\n  content: \"\\f01e\";\n}\n\n.fa-redo::before {\n  content: \"\\f01e\";\n}\n\n.fa-biohazard::before {\n  content: \"\\f780\";\n}\n\n.fa-location-crosshairs::before {\n  content: \"\\f601\";\n}\n\n.fa-location::before {\n  content: \"\\f601\";\n}\n\n.fa-mars-double::before {\n  content: \"\\f227\";\n}\n\n.fa-child-dress::before {\n  content: \"\\e59c\";\n}\n\n.fa-users-between-lines::before {\n  content: \"\\e591\";\n}\n\n.fa-lungs-virus::before {\n  content: \"\\e067\";\n}\n\n.fa-face-grin-tears::before {\n  content: \"\\f588\";\n}\n\n.fa-grin-tears::before {\n  content: \"\\f588\";\n}\n\n.fa-phone::before {\n  content: \"\\f095\";\n}\n\n.fa-calendar-xmark::before {\n  content: \"\\f273\";\n}\n\n.fa-calendar-times::before {\n  content: \"\\f273\";\n}\n\n.fa-child-reaching::before {\n  content: \"\\e59d\";\n}\n\n.fa-head-side-virus::before {\n  content: \"\\e064\";\n}\n\n.fa-user-gear::before {\n  content: \"\\f4fe\";\n}\n\n.fa-user-cog::before {\n  content: \"\\f4fe\";\n}\n\n.fa-arrow-up-1-9::before {\n  content: \"\\f163\";\n}\n\n.fa-sort-numeric-up::before {\n  content: \"\\f163\";\n}\n\n.fa-door-closed::before {\n  content: \"\\f52a\";\n}\n\n.fa-shield-virus::before {\n  content: \"\\e06c\";\n}\n\n.fa-dice-six::before {\n  content: \"\\f526\";\n}\n\n.fa-mosquito-net::before {\n  content: \"\\e52c\";\n}\n\n.fa-bridge-water::before {\n  content: \"\\e4ce\";\n}\n\n.fa-person-booth::before {\n  content: \"\\f756\";\n}\n\n.fa-text-width::before {\n  content: \"\\f035\";\n}\n\n.fa-hat-wizard::before {\n  content: \"\\f6e8\";\n}\n\n.fa-pen-fancy::before {\n  content: \"\\f5ac\";\n}\n\n.fa-person-digging::before {\n  content: \"\\f85e\";\n}\n\n.fa-digging::before {\n  content: \"\\f85e\";\n}\n\n.fa-trash::before {\n  content: \"\\f1f8\";\n}\n\n.fa-gauge-simple::before {\n  content: \"\\f629\";\n}\n\n.fa-gauge-simple-med::before {\n  content: \"\\f629\";\n}\n\n.fa-tachometer-average::before {\n  content: \"\\f629\";\n}\n\n.fa-book-medical::before {\n  content: \"\\f7e6\";\n}\n\n.fa-poo::before {\n  content: \"\\f2fe\";\n}\n\n.fa-quote-right::before {\n  content: \"\\f10e\";\n}\n\n.fa-quote-right-alt::before {\n  content: \"\\f10e\";\n}\n\n.fa-shirt::before {\n  content: \"\\f553\";\n}\n\n.fa-t-shirt::before {\n  content: \"\\f553\";\n}\n\n.fa-tshirt::before {\n  content: \"\\f553\";\n}\n\n.fa-cubes::before {\n  content: \"\\f1b3\";\n}\n\n.fa-divide::before {\n  content: \"\\f529\";\n}\n\n.fa-tenge-sign::before {\n  content: \"\\f7d7\";\n}\n\n.fa-tenge::before {\n  content: \"\\f7d7\";\n}\n\n.fa-headphones::before {\n  content: \"\\f025\";\n}\n\n.fa-hands-holding::before {\n  content: \"\\f4c2\";\n}\n\n.fa-hands-clapping::before {\n  content: \"\\e1a8\";\n}\n\n.fa-republican::before {\n  content: \"\\f75e\";\n}\n\n.fa-arrow-left::before {\n  content: \"\\f060\";\n}\n\n.fa-person-circle-xmark::before {\n  content: \"\\e543\";\n}\n\n.fa-ruler::before {\n  content: \"\\f545\";\n}\n\n.fa-align-left::before {\n  content: \"\\f036\";\n}\n\n.fa-dice-d6::before {\n  content: \"\\f6d1\";\n}\n\n.fa-restroom::before {\n  content: \"\\f7bd\";\n}\n\n.fa-j::before {\n  content: \"J\";\n}\n\n.fa-users-viewfinder::before {\n  content: \"\\e595\";\n}\n\n.fa-file-video::before {\n  content: \"\\f1c8\";\n}\n\n.fa-up-right-from-square::before {\n  content: \"\\f35d\";\n}\n\n.fa-external-link-alt::before {\n  content: \"\\f35d\";\n}\n\n.fa-table-cells::before {\n  content: \"\\f00a\";\n}\n\n.fa-th::before {\n  content: \"\\f00a\";\n}\n\n.fa-file-pdf::before {\n  content: \"\\f1c1\";\n}\n\n.fa-book-bible::before {\n  content: \"\\f647\";\n}\n\n.fa-bible::before {\n  content: \"\\f647\";\n}\n\n.fa-o::before {\n  content: \"O\";\n}\n\n.fa-suitcase-medical::before {\n  content: \"\\f0fa\";\n}\n\n.fa-medkit::before {\n  content: \"\\f0fa\";\n}\n\n.fa-user-secret::before {\n  content: \"\\f21b\";\n}\n\n.fa-otter::before {\n  content: \"\\f700\";\n}\n\n.fa-person-dress::before {\n  content: \"\\f182\";\n}\n\n.fa-female::before {\n  content: \"\\f182\";\n}\n\n.fa-comment-dollar::before {\n  content: \"\\f651\";\n}\n\n.fa-business-time::before {\n  content: \"\\f64a\";\n}\n\n.fa-briefcase-clock::before {\n  content: \"\\f64a\";\n}\n\n.fa-table-cells-large::before {\n  content: \"\\f009\";\n}\n\n.fa-th-large::before {\n  content: \"\\f009\";\n}\n\n.fa-book-tanakh::before {\n  content: \"\\f827\";\n}\n\n.fa-tanakh::before {\n  content: \"\\f827\";\n}\n\n.fa-phone-volume::before {\n  content: \"\\f2a0\";\n}\n\n.fa-volume-control-phone::before {\n  content: \"\\f2a0\";\n}\n\n.fa-hat-cowboy-side::before {\n  content: \"\\f8c1\";\n}\n\n.fa-clipboard-user::before {\n  content: \"\\f7f3\";\n}\n\n.fa-child::before {\n  content: \"\\f1ae\";\n}\n\n.fa-lira-sign::before {\n  content: \"\\f195\";\n}\n\n.fa-satellite::before {\n  content: \"\\f7bf\";\n}\n\n.fa-plane-lock::before {\n  content: \"\\e558\";\n}\n\n.fa-tag::before {\n  content: \"\\f02b\";\n}\n\n.fa-comment::before {\n  content: \"\\f075\";\n}\n\n.fa-cake-candles::before {\n  content: \"\\f1fd\";\n}\n\n.fa-birthday-cake::before {\n  content: \"\\f1fd\";\n}\n\n.fa-cake::before {\n  content: \"\\f1fd\";\n}\n\n.fa-envelope::before {\n  content: \"\\f0e0\";\n}\n\n.fa-angles-up::before {\n  content: \"\\f102\";\n}\n\n.fa-angle-double-up::before {\n  content: \"\\f102\";\n}\n\n.fa-paperclip::before {\n  content: \"\\f0c6\";\n}\n\n.fa-arrow-right-to-city::before {\n  content: \"\\e4b3\";\n}\n\n.fa-ribbon::before {\n  content: \"\\f4d6\";\n}\n\n.fa-lungs::before {\n  content: \"\\f604\";\n}\n\n.fa-arrow-up-9-1::before {\n  content: \"\\f887\";\n}\n\n.fa-sort-numeric-up-alt::before {\n  content: \"\\f887\";\n}\n\n.fa-litecoin-sign::before {\n  content: \"\\e1d3\";\n}\n\n.fa-border-none::before {\n  content: \"\\f850\";\n}\n\n.fa-circle-nodes::before {\n  content: \"\\e4e2\";\n}\n\n.fa-parachute-box::before {\n  content: \"\\f4cd\";\n}\n\n.fa-indent::before {\n  content: \"\\f03c\";\n}\n\n.fa-truck-field-un::before {\n  content: \"\\e58e\";\n}\n\n.fa-hourglass::before {\n  content: \"\\f254\";\n}\n\n.fa-hourglass-empty::before {\n  content: \"\\f254\";\n}\n\n.fa-mountain::before {\n  content: \"\\f6fc\";\n}\n\n.fa-user-doctor::before {\n  content: \"\\f0f0\";\n}\n\n.fa-user-md::before {\n  content: \"\\f0f0\";\n}\n\n.fa-circle-info::before {\n  content: \"\\f05a\";\n}\n\n.fa-info-circle::before {\n  content: \"\\f05a\";\n}\n\n.fa-cloud-meatball::before {\n  content: \"\\f73b\";\n}\n\n.fa-camera::before {\n  content: \"\\f030\";\n}\n\n.fa-camera-alt::before {\n  content: \"\\f030\";\n}\n\n.fa-square-virus::before {\n  content: \"\\e578\";\n}\n\n.fa-meteor::before {\n  content: \"\\f753\";\n}\n\n.fa-car-on::before {\n  content: \"\\e4dd\";\n}\n\n.fa-sleigh::before {\n  content: \"\\f7cc\";\n}\n\n.fa-arrow-down-1-9::before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-asc::before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-down::before {\n  content: \"\\f162\";\n}\n\n.fa-hand-holding-droplet::before {\n  content: \"\\f4c1\";\n}\n\n.fa-hand-holding-water::before {\n  content: \"\\f4c1\";\n}\n\n.fa-water::before {\n  content: \"\\f773\";\n}\n\n.fa-calendar-check::before {\n  content: \"\\f274\";\n}\n\n.fa-braille::before {\n  content: \"\\f2a1\";\n}\n\n.fa-prescription-bottle-medical::before {\n  content: \"\\f486\";\n}\n\n.fa-prescription-bottle-alt::before {\n  content: \"\\f486\";\n}\n\n.fa-landmark::before {\n  content: \"\\f66f\";\n}\n\n.fa-truck::before {\n  content: \"\\f0d1\";\n}\n\n.fa-crosshairs::before {\n  content: \"\\f05b\";\n}\n\n.fa-person-cane::before {\n  content: \"\\e53c\";\n}\n\n.fa-tent::before {\n  content: \"\\e57d\";\n}\n\n.fa-vest-patches::before {\n  content: \"\\e086\";\n}\n\n.fa-check-double::before {\n  content: \"\\f560\";\n}\n\n.fa-arrow-down-a-z::before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-asc::before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-down::before {\n  content: \"\\f15d\";\n}\n\n.fa-money-bill-wheat::before {\n  content: \"\\e52a\";\n}\n\n.fa-cookie::before {\n  content: \"\\f563\";\n}\n\n.fa-arrow-rotate-left::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-left-rotate::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-back::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-backward::before {\n  content: \"\\f0e2\";\n}\n\n.fa-undo::before {\n  content: \"\\f0e2\";\n}\n\n.fa-hard-drive::before {\n  content: \"\\f0a0\";\n}\n\n.fa-hdd::before {\n  content: \"\\f0a0\";\n}\n\n.fa-face-grin-squint-tears::before {\n  content: \"\\f586\";\n}\n\n.fa-grin-squint-tears::before {\n  content: \"\\f586\";\n}\n\n.fa-dumbbell::before {\n  content: \"\\f44b\";\n}\n\n.fa-rectangle-list::before {\n  content: \"\\f022\";\n}\n\n.fa-list-alt::before {\n  content: \"\\f022\";\n}\n\n.fa-tarp-droplet::before {\n  content: \"\\e57c\";\n}\n\n.fa-house-medical-circle-check::before {\n  content: \"\\e511\";\n}\n\n.fa-person-skiing-nordic::before {\n  content: \"\\f7ca\";\n}\n\n.fa-skiing-nordic::before {\n  content: \"\\f7ca\";\n}\n\n.fa-calendar-plus::before {\n  content: \"\\f271\";\n}\n\n.fa-plane-arrival::before {\n  content: \"\\f5af\";\n}\n\n.fa-circle-left::before {\n  content: \"\\f359\";\n}\n\n.fa-arrow-alt-circle-left::before {\n  content: \"\\f359\";\n}\n\n.fa-train-subway::before {\n  content: \"\\f239\";\n}\n\n.fa-subway::before {\n  content: \"\\f239\";\n}\n\n.fa-chart-gantt::before {\n  content: \"\\e0e4\";\n}\n\n.fa-indian-rupee-sign::before {\n  content: \"\\e1bc\";\n}\n\n.fa-indian-rupee::before {\n  content: \"\\e1bc\";\n}\n\n.fa-inr::before {\n  content: \"\\e1bc\";\n}\n\n.fa-crop-simple::before {\n  content: \"\\f565\";\n}\n\n.fa-crop-alt::before {\n  content: \"\\f565\";\n}\n\n.fa-money-bill-1::before {\n  content: \"\\f3d1\";\n}\n\n.fa-money-bill-alt::before {\n  content: \"\\f3d1\";\n}\n\n.fa-left-long::before {\n  content: \"\\f30a\";\n}\n\n.fa-long-arrow-alt-left::before {\n  content: \"\\f30a\";\n}\n\n.fa-dna::before {\n  content: \"\\f471\";\n}\n\n.fa-virus-slash::before {\n  content: \"\\e075\";\n}\n\n.fa-minus::before {\n  content: \"\\f068\";\n}\n\n.fa-subtract::before {\n  content: \"\\f068\";\n}\n\n.fa-chess::before {\n  content: \"\\f439\";\n}\n\n.fa-arrow-left-long::before {\n  content: \"\\f177\";\n}\n\n.fa-long-arrow-left::before {\n  content: \"\\f177\";\n}\n\n.fa-plug-circle-check::before {\n  content: \"\\e55c\";\n}\n\n.fa-street-view::before {\n  content: \"\\f21d\";\n}\n\n.fa-franc-sign::before {\n  content: \"\\e18f\";\n}\n\n.fa-volume-off::before {\n  content: \"\\f026\";\n}\n\n.fa-hands-asl-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-american-sign-language-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-asl-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-hands-american-sign-language-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-gear::before {\n  content: \"\\f013\";\n}\n\n.fa-cog::before {\n  content: \"\\f013\";\n}\n\n.fa-droplet-slash::before {\n  content: \"\\f5c7\";\n}\n\n.fa-tint-slash::before {\n  content: \"\\f5c7\";\n}\n\n.fa-mosque::before {\n  content: \"\\f678\";\n}\n\n.fa-mosquito::before {\n  content: \"\\e52b\";\n}\n\n.fa-star-of-david::before {\n  content: \"\\f69a\";\n}\n\n.fa-person-military-rifle::before {\n  content: \"\\e54b\";\n}\n\n.fa-cart-shopping::before {\n  content: \"\\f07a\";\n}\n\n.fa-shopping-cart::before {\n  content: \"\\f07a\";\n}\n\n.fa-vials::before {\n  content: \"\\f493\";\n}\n\n.fa-plug-circle-plus::before {\n  content: \"\\e55f\";\n}\n\n.fa-place-of-worship::before {\n  content: \"\\f67f\";\n}\n\n.fa-grip-vertical::before {\n  content: \"\\f58e\";\n}\n\n.fa-arrow-turn-up::before {\n  content: \"\\f148\";\n}\n\n.fa-level-up::before {\n  content: \"\\f148\";\n}\n\n.fa-u::before {\n  content: \"U\";\n}\n\n.fa-square-root-variable::before {\n  content: \"\\f698\";\n}\n\n.fa-square-root-alt::before {\n  content: \"\\f698\";\n}\n\n.fa-clock::before {\n  content: \"\\f017\";\n}\n\n.fa-clock-four::before {\n  content: \"\\f017\";\n}\n\n.fa-backward-step::before {\n  content: \"\\f048\";\n}\n\n.fa-step-backward::before {\n  content: \"\\f048\";\n}\n\n.fa-pallet::before {\n  content: \"\\f482\";\n}\n\n.fa-faucet::before {\n  content: \"\\e005\";\n}\n\n.fa-baseball-bat-ball::before {\n  content: \"\\f432\";\n}\n\n.fa-s::before {\n  content: \"S\";\n}\n\n.fa-timeline::before {\n  content: \"\\e29c\";\n}\n\n.fa-keyboard::before {\n  content: \"\\f11c\";\n}\n\n.fa-caret-down::before {\n  content: \"\\f0d7\";\n}\n\n.fa-house-chimney-medical::before {\n  content: \"\\f7f2\";\n}\n\n.fa-clinic-medical::before {\n  content: \"\\f7f2\";\n}\n\n.fa-temperature-three-quarters::before {\n  content: \"\\f2c8\";\n}\n\n.fa-temperature-3::before {\n  content: \"\\f2c8\";\n}\n\n.fa-thermometer-3::before {\n  content: \"\\f2c8\";\n}\n\n.fa-thermometer-three-quarters::before {\n  content: \"\\f2c8\";\n}\n\n.fa-mobile-screen::before {\n  content: \"\\f3cf\";\n}\n\n.fa-mobile-android-alt::before {\n  content: \"\\f3cf\";\n}\n\n.fa-plane-up::before {\n  content: \"\\e22d\";\n}\n\n.fa-piggy-bank::before {\n  content: \"\\f4d3\";\n}\n\n.fa-battery-half::before {\n  content: \"\\f242\";\n}\n\n.fa-battery-3::before {\n  content: \"\\f242\";\n}\n\n.fa-mountain-city::before {\n  content: \"\\e52e\";\n}\n\n.fa-coins::before {\n  content: \"\\f51e\";\n}\n\n.fa-khanda::before {\n  content: \"\\f66d\";\n}\n\n.fa-sliders::before {\n  content: \"\\f1de\";\n}\n\n.fa-sliders-h::before {\n  content: \"\\f1de\";\n}\n\n.fa-folder-tree::before {\n  content: \"\\f802\";\n}\n\n.fa-network-wired::before {\n  content: \"\\f6ff\";\n}\n\n.fa-map-pin::before {\n  content: \"\\f276\";\n}\n\n.fa-hamsa::before {\n  content: \"\\f665\";\n}\n\n.fa-cent-sign::before {\n  content: \"\\e3f5\";\n}\n\n.fa-flask::before {\n  content: \"\\f0c3\";\n}\n\n.fa-person-pregnant::before {\n  content: \"\\e31e\";\n}\n\n.fa-wand-sparkles::before {\n  content: \"\\f72b\";\n}\n\n.fa-ellipsis-vertical::before {\n  content: \"\\f142\";\n}\n\n.fa-ellipsis-v::before {\n  content: \"\\f142\";\n}\n\n.fa-ticket::before {\n  content: \"\\f145\";\n}\n\n.fa-power-off::before {\n  content: \"\\f011\";\n}\n\n.fa-right-long::before {\n  content: \"\\f30b\";\n}\n\n.fa-long-arrow-alt-right::before {\n  content: \"\\f30b\";\n}\n\n.fa-flag-usa::before {\n  content: \"\\f74d\";\n}\n\n.fa-laptop-file::before {\n  content: \"\\e51d\";\n}\n\n.fa-tty::before {\n  content: \"\\f1e4\";\n}\n\n.fa-teletype::before {\n  content: \"\\f1e4\";\n}\n\n.fa-diagram-next::before {\n  content: \"\\e476\";\n}\n\n.fa-person-rifle::before {\n  content: \"\\e54e\";\n}\n\n.fa-house-medical-circle-exclamation::before {\n  content: \"\\e512\";\n}\n\n.fa-closed-captioning::before {\n  content: \"\\f20a\";\n}\n\n.fa-person-hiking::before {\n  content: \"\\f6ec\";\n}\n\n.fa-hiking::before {\n  content: \"\\f6ec\";\n}\n\n.fa-venus-double::before {\n  content: \"\\f226\";\n}\n\n.fa-images::before {\n  content: \"\\f302\";\n}\n\n.fa-calculator::before {\n  content: \"\\f1ec\";\n}\n\n.fa-people-pulling::before {\n  content: \"\\e535\";\n}\n\n.fa-n::before {\n  content: \"N\";\n}\n\n.fa-cable-car::before {\n  content: \"\\f7da\";\n}\n\n.fa-tram::before {\n  content: \"\\f7da\";\n}\n\n.fa-cloud-rain::before {\n  content: \"\\f73d\";\n}\n\n.fa-building-circle-xmark::before {\n  content: \"\\e4d4\";\n}\n\n.fa-ship::before {\n  content: \"\\f21a\";\n}\n\n.fa-arrows-down-to-line::before {\n  content: \"\\e4b8\";\n}\n\n.fa-download::before {\n  content: \"\\f019\";\n}\n\n.fa-face-grin::before {\n  content: \"\\f580\";\n}\n\n.fa-grin::before {\n  content: \"\\f580\";\n}\n\n.fa-delete-left::before {\n  content: \"\\f55a\";\n}\n\n.fa-backspace::before {\n  content: \"\\f55a\";\n}\n\n.fa-eye-dropper::before {\n  content: \"\\f1fb\";\n}\n\n.fa-eye-dropper-empty::before {\n  content: \"\\f1fb\";\n}\n\n.fa-eyedropper::before {\n  content: \"\\f1fb\";\n}\n\n.fa-file-circle-check::before {\n  content: \"\\e5a0\";\n}\n\n.fa-forward::before {\n  content: \"\\f04e\";\n}\n\n.fa-mobile::before {\n  content: \"\\f3ce\";\n}\n\n.fa-mobile-android::before {\n  content: \"\\f3ce\";\n}\n\n.fa-mobile-phone::before {\n  content: \"\\f3ce\";\n}\n\n.fa-face-meh::before {\n  content: \"\\f11a\";\n}\n\n.fa-meh::before {\n  content: \"\\f11a\";\n}\n\n.fa-align-center::before {\n  content: \"\\f037\";\n}\n\n.fa-book-skull::before {\n  content: \"\\f6b7\";\n}\n\n.fa-book-dead::before {\n  content: \"\\f6b7\";\n}\n\n.fa-id-card::before {\n  content: \"\\f2c2\";\n}\n\n.fa-drivers-license::before {\n  content: \"\\f2c2\";\n}\n\n.fa-outdent::before {\n  content: \"\\f03b\";\n}\n\n.fa-dedent::before {\n  content: \"\\f03b\";\n}\n\n.fa-heart-circle-exclamation::before {\n  content: \"\\e4fe\";\n}\n\n.fa-house::before {\n  content: \"\\f015\";\n}\n\n.fa-home::before {\n  content: \"\\f015\";\n}\n\n.fa-home-alt::before {\n  content: \"\\f015\";\n}\n\n.fa-home-lg-alt::before {\n  content: \"\\f015\";\n}\n\n.fa-calendar-week::before {\n  content: \"\\f784\";\n}\n\n.fa-laptop-medical::before {\n  content: \"\\f812\";\n}\n\n.fa-b::before {\n  content: \"B\";\n}\n\n.fa-file-medical::before {\n  content: \"\\f477\";\n}\n\n.fa-dice-one::before {\n  content: \"\\f525\";\n}\n\n.fa-kiwi-bird::before {\n  content: \"\\f535\";\n}\n\n.fa-arrow-right-arrow-left::before {\n  content: \"\\f0ec\";\n}\n\n.fa-exchange::before {\n  content: \"\\f0ec\";\n}\n\n.fa-rotate-right::before {\n  content: \"\\f2f9\";\n}\n\n.fa-redo-alt::before {\n  content: \"\\f2f9\";\n}\n\n.fa-rotate-forward::before {\n  content: \"\\f2f9\";\n}\n\n.fa-utensils::before {\n  content: \"\\f2e7\";\n}\n\n.fa-cutlery::before {\n  content: \"\\f2e7\";\n}\n\n.fa-arrow-up-wide-short::before {\n  content: \"\\f161\";\n}\n\n.fa-sort-amount-up::before {\n  content: \"\\f161\";\n}\n\n.fa-mill-sign::before {\n  content: \"\\e1ed\";\n}\n\n.fa-bowl-rice::before {\n  content: \"\\e2eb\";\n}\n\n.fa-skull::before {\n  content: \"\\f54c\";\n}\n\n.fa-tower-broadcast::before {\n  content: \"\\f519\";\n}\n\n.fa-broadcast-tower::before {\n  content: \"\\f519\";\n}\n\n.fa-truck-pickup::before {\n  content: \"\\f63c\";\n}\n\n.fa-up-long::before {\n  content: \"\\f30c\";\n}\n\n.fa-long-arrow-alt-up::before {\n  content: \"\\f30c\";\n}\n\n.fa-stop::before {\n  content: \"\\f04d\";\n}\n\n.fa-code-merge::before {\n  content: \"\\f387\";\n}\n\n.fa-upload::before {\n  content: \"\\f093\";\n}\n\n.fa-hurricane::before {\n  content: \"\\f751\";\n}\n\n.fa-mound::before {\n  content: \"\\e52d\";\n}\n\n.fa-toilet-portable::before {\n  content: \"\\e583\";\n}\n\n.fa-compact-disc::before {\n  content: \"\\f51f\";\n}\n\n.fa-file-arrow-down::before {\n  content: \"\\f56d\";\n}\n\n.fa-file-download::before {\n  content: \"\\f56d\";\n}\n\n.fa-caravan::before {\n  content: \"\\f8ff\";\n}\n\n.fa-shield-cat::before {\n  content: \"\\e572\";\n}\n\n.fa-bolt::before {\n  content: \"\\f0e7\";\n}\n\n.fa-zap::before {\n  content: \"\\f0e7\";\n}\n\n.fa-glass-water::before {\n  content: \"\\e4f4\";\n}\n\n.fa-oil-well::before {\n  content: \"\\e532\";\n}\n\n.fa-vault::before {\n  content: \"\\e2c5\";\n}\n\n.fa-mars::before {\n  content: \"\\f222\";\n}\n\n.fa-toilet::before {\n  content: \"\\f7d8\";\n}\n\n.fa-plane-circle-xmark::before {\n  content: \"\\e557\";\n}\n\n.fa-yen-sign::before {\n  content: \"\\f157\";\n}\n\n.fa-cny::before {\n  content: \"\\f157\";\n}\n\n.fa-jpy::before {\n  content: \"\\f157\";\n}\n\n.fa-rmb::before {\n  content: \"\\f157\";\n}\n\n.fa-yen::before {\n  content: \"\\f157\";\n}\n\n.fa-ruble-sign::before {\n  content: \"\\f158\";\n}\n\n.fa-rouble::before {\n  content: \"\\f158\";\n}\n\n.fa-rub::before {\n  content: \"\\f158\";\n}\n\n.fa-ruble::before {\n  content: \"\\f158\";\n}\n\n.fa-sun::before {\n  content: \"\\f185\";\n}\n\n.fa-guitar::before {\n  content: \"\\f7a6\";\n}\n\n.fa-face-laugh-wink::before {\n  content: \"\\f59c\";\n}\n\n.fa-laugh-wink::before {\n  content: \"\\f59c\";\n}\n\n.fa-horse-head::before {\n  content: \"\\f7ab\";\n}\n\n.fa-bore-hole::before {\n  content: \"\\e4c3\";\n}\n\n.fa-industry::before {\n  content: \"\\f275\";\n}\n\n.fa-circle-down::before {\n  content: \"\\f358\";\n}\n\n.fa-arrow-alt-circle-down::before {\n  content: \"\\f358\";\n}\n\n.fa-arrows-turn-to-dots::before {\n  content: \"\\e4c1\";\n}\n\n.fa-florin-sign::before {\n  content: \"\\e184\";\n}\n\n.fa-arrow-down-short-wide::before {\n  content: \"\\f884\";\n}\n\n.fa-sort-amount-desc::before {\n  content: \"\\f884\";\n}\n\n.fa-sort-amount-down-alt::before {\n  content: \"\\f884\";\n}\n\n.fa-less-than::before {\n  content: \"\\<\";\n}\n\n.fa-angle-down::before {\n  content: \"\\f107\";\n}\n\n.fa-car-tunnel::before {\n  content: \"\\e4de\";\n}\n\n.fa-head-side-cough::before {\n  content: \"\\e061\";\n}\n\n.fa-grip-lines::before {\n  content: \"\\f7a4\";\n}\n\n.fa-thumbs-down::before {\n  content: \"\\f165\";\n}\n\n.fa-user-lock::before {\n  content: \"\\f502\";\n}\n\n.fa-arrow-right-long::before {\n  content: \"\\f178\";\n}\n\n.fa-long-arrow-right::before {\n  content: \"\\f178\";\n}\n\n.fa-anchor-circle-xmark::before {\n  content: \"\\e4ac\";\n}\n\n.fa-ellipsis::before {\n  content: \"\\f141\";\n}\n\n.fa-ellipsis-h::before {\n  content: \"\\f141\";\n}\n\n.fa-chess-pawn::before {\n  content: \"\\f443\";\n}\n\n.fa-kit-medical::before {\n  content: \"\\f479\";\n}\n\n.fa-first-aid::before {\n  content: \"\\f479\";\n}\n\n.fa-person-through-window::before {\n  content: \"\\e5a9\";\n}\n\n.fa-toolbox::before {\n  content: \"\\f552\";\n}\n\n.fa-hands-holding-circle::before {\n  content: \"\\e4fb\";\n}\n\n.fa-bug::before {\n  content: \"\\f188\";\n}\n\n.fa-credit-card::before {\n  content: \"\\f09d\";\n}\n\n.fa-credit-card-alt::before {\n  content: \"\\f09d\";\n}\n\n.fa-car::before {\n  content: \"\\f1b9\";\n}\n\n.fa-automobile::before {\n  content: \"\\f1b9\";\n}\n\n.fa-hand-holding-hand::before {\n  content: \"\\e4f7\";\n}\n\n.fa-book-open-reader::before {\n  content: \"\\f5da\";\n}\n\n.fa-book-reader::before {\n  content: \"\\f5da\";\n}\n\n.fa-mountain-sun::before {\n  content: \"\\e52f\";\n}\n\n.fa-arrows-left-right-to-line::before {\n  content: \"\\e4ba\";\n}\n\n.fa-dice-d20::before {\n  content: \"\\f6cf\";\n}\n\n.fa-truck-droplet::before {\n  content: \"\\e58c\";\n}\n\n.fa-file-circle-xmark::before {\n  content: \"\\e5a1\";\n}\n\n.fa-temperature-arrow-up::before {\n  content: \"\\e040\";\n}\n\n.fa-temperature-up::before {\n  content: \"\\e040\";\n}\n\n.fa-medal::before {\n  content: \"\\f5a2\";\n}\n\n.fa-bed::before {\n  content: \"\\f236\";\n}\n\n.fa-square-h::before {\n  content: \"\\f0fd\";\n}\n\n.fa-h-square::before {\n  content: \"\\f0fd\";\n}\n\n.fa-podcast::before {\n  content: \"\\f2ce\";\n}\n\n.fa-temperature-full::before {\n  content: \"\\f2c7\";\n}\n\n.fa-temperature-4::before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-4::before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-full::before {\n  content: \"\\f2c7\";\n}\n\n.fa-bell::before {\n  content: \"\\f0f3\";\n}\n\n.fa-superscript::before {\n  content: \"\\f12b\";\n}\n\n.fa-plug-circle-xmark::before {\n  content: \"\\e560\";\n}\n\n.fa-star-of-life::before {\n  content: \"\\f621\";\n}\n\n.fa-phone-slash::before {\n  content: \"\\f3dd\";\n}\n\n.fa-paint-roller::before {\n  content: \"\\f5aa\";\n}\n\n.fa-handshake-angle::before {\n  content: \"\\f4c4\";\n}\n\n.fa-hands-helping::before {\n  content: \"\\f4c4\";\n}\n\n.fa-location-dot::before {\n  content: \"\\f3c5\";\n}\n\n.fa-map-marker-alt::before {\n  content: \"\\f3c5\";\n}\n\n.fa-file::before {\n  content: \"\\f15b\";\n}\n\n.fa-greater-than::before {\n  content: \"\\>\";\n}\n\n.fa-person-swimming::before {\n  content: \"\\f5c4\";\n}\n\n.fa-swimmer::before {\n  content: \"\\f5c4\";\n}\n\n.fa-arrow-down::before {\n  content: \"\\f063\";\n}\n\n.fa-droplet::before {\n  content: \"\\f043\";\n}\n\n.fa-tint::before {\n  content: \"\\f043\";\n}\n\n.fa-eraser::before {\n  content: \"\\f12d\";\n}\n\n.fa-earth-americas::before {\n  content: \"\\f57d\";\n}\n\n.fa-earth::before {\n  content: \"\\f57d\";\n}\n\n.fa-earth-america::before {\n  content: \"\\f57d\";\n}\n\n.fa-globe-americas::before {\n  content: \"\\f57d\";\n}\n\n.fa-person-burst::before {\n  content: \"\\e53b\";\n}\n\n.fa-dove::before {\n  content: \"\\f4ba\";\n}\n\n.fa-battery-empty::before {\n  content: \"\\f244\";\n}\n\n.fa-battery-0::before {\n  content: \"\\f244\";\n}\n\n.fa-socks::before {\n  content: \"\\f696\";\n}\n\n.fa-inbox::before {\n  content: \"\\f01c\";\n}\n\n.fa-section::before {\n  content: \"\\e447\";\n}\n\n.fa-gauge-high::before {\n  content: \"\\f625\";\n}\n\n.fa-tachometer-alt::before {\n  content: \"\\f625\";\n}\n\n.fa-tachometer-alt-fast::before {\n  content: \"\\f625\";\n}\n\n.fa-envelope-open-text::before {\n  content: \"\\f658\";\n}\n\n.fa-hospital::before {\n  content: \"\\f0f8\";\n}\n\n.fa-hospital-alt::before {\n  content: \"\\f0f8\";\n}\n\n.fa-hospital-wide::before {\n  content: \"\\f0f8\";\n}\n\n.fa-wine-bottle::before {\n  content: \"\\f72f\";\n}\n\n.fa-chess-rook::before {\n  content: \"\\f447\";\n}\n\n.fa-bars-staggered::before {\n  content: \"\\f550\";\n}\n\n.fa-reorder::before {\n  content: \"\\f550\";\n}\n\n.fa-stream::before {\n  content: \"\\f550\";\n}\n\n.fa-dharmachakra::before {\n  content: \"\\f655\";\n}\n\n.fa-hotdog::before {\n  content: \"\\f80f\";\n}\n\n.fa-person-walking-with-cane::before {\n  content: \"\\f29d\";\n}\n\n.fa-blind::before {\n  content: \"\\f29d\";\n}\n\n.fa-drum::before {\n  content: \"\\f569\";\n}\n\n.fa-ice-cream::before {\n  content: \"\\f810\";\n}\n\n.fa-heart-circle-bolt::before {\n  content: \"\\e4fc\";\n}\n\n.fa-fax::before {\n  content: \"\\f1ac\";\n}\n\n.fa-paragraph::before {\n  content: \"\\f1dd\";\n}\n\n.fa-check-to-slot::before {\n  content: \"\\f772\";\n}\n\n.fa-vote-yea::before {\n  content: \"\\f772\";\n}\n\n.fa-star-half::before {\n  content: \"\\f089\";\n}\n\n.fa-boxes-stacked::before {\n  content: \"\\f468\";\n}\n\n.fa-boxes::before {\n  content: \"\\f468\";\n}\n\n.fa-boxes-alt::before {\n  content: \"\\f468\";\n}\n\n.fa-link::before {\n  content: \"\\f0c1\";\n}\n\n.fa-chain::before {\n  content: \"\\f0c1\";\n}\n\n.fa-ear-listen::before {\n  content: \"\\f2a2\";\n}\n\n.fa-assistive-listening-systems::before {\n  content: \"\\f2a2\";\n}\n\n.fa-tree-city::before {\n  content: \"\\e587\";\n}\n\n.fa-play::before {\n  content: \"\\f04b\";\n}\n\n.fa-font::before {\n  content: \"\\f031\";\n}\n\n.fa-table-cells-row-lock::before {\n  content: \"\\e67a\";\n}\n\n.fa-rupiah-sign::before {\n  content: \"\\e23d\";\n}\n\n.fa-magnifying-glass::before {\n  content: \"\\f002\";\n}\n\n.fa-search::before {\n  content: \"\\f002\";\n}\n\n.fa-table-tennis-paddle-ball::before {\n  content: \"\\f45d\";\n}\n\n.fa-ping-pong-paddle-ball::before {\n  content: \"\\f45d\";\n}\n\n.fa-table-tennis::before {\n  content: \"\\f45d\";\n}\n\n.fa-person-dots-from-line::before {\n  content: \"\\f470\";\n}\n\n.fa-diagnoses::before {\n  content: \"\\f470\";\n}\n\n.fa-trash-can-arrow-up::before {\n  content: \"\\f82a\";\n}\n\n.fa-trash-restore-alt::before {\n  content: \"\\f82a\";\n}\n\n.fa-naira-sign::before {\n  content: \"\\e1f6\";\n}\n\n.fa-cart-arrow-down::before {\n  content: \"\\f218\";\n}\n\n.fa-walkie-talkie::before {\n  content: \"\\f8ef\";\n}\n\n.fa-file-pen::before {\n  content: \"\\f31c\";\n}\n\n.fa-file-edit::before {\n  content: \"\\f31c\";\n}\n\n.fa-receipt::before {\n  content: \"\\f543\";\n}\n\n.fa-square-pen::before {\n  content: \"\\f14b\";\n}\n\n.fa-pen-square::before {\n  content: \"\\f14b\";\n}\n\n.fa-pencil-square::before {\n  content: \"\\f14b\";\n}\n\n.fa-suitcase-rolling::before {\n  content: \"\\f5c1\";\n}\n\n.fa-person-circle-exclamation::before {\n  content: \"\\e53f\";\n}\n\n.fa-chevron-down::before {\n  content: \"\\f078\";\n}\n\n.fa-battery-full::before {\n  content: \"\\f240\";\n}\n\n.fa-battery::before {\n  content: \"\\f240\";\n}\n\n.fa-battery-5::before {\n  content: \"\\f240\";\n}\n\n.fa-skull-crossbones::before {\n  content: \"\\f714\";\n}\n\n.fa-code-compare::before {\n  content: \"\\e13a\";\n}\n\n.fa-list-ul::before {\n  content: \"\\f0ca\";\n}\n\n.fa-list-dots::before {\n  content: \"\\f0ca\";\n}\n\n.fa-school-lock::before {\n  content: \"\\e56f\";\n}\n\n.fa-tower-cell::before {\n  content: \"\\e585\";\n}\n\n.fa-down-long::before {\n  content: \"\\f309\";\n}\n\n.fa-long-arrow-alt-down::before {\n  content: \"\\f309\";\n}\n\n.fa-ranking-star::before {\n  content: \"\\e561\";\n}\n\n.fa-chess-king::before {\n  content: \"\\f43f\";\n}\n\n.fa-person-harassing::before {\n  content: \"\\e549\";\n}\n\n.fa-brazilian-real-sign::before {\n  content: \"\\e46c\";\n}\n\n.fa-landmark-dome::before {\n  content: \"\\f752\";\n}\n\n.fa-landmark-alt::before {\n  content: \"\\f752\";\n}\n\n.fa-arrow-up::before {\n  content: \"\\f062\";\n}\n\n.fa-tv::before {\n  content: \"\\f26c\";\n}\n\n.fa-television::before {\n  content: \"\\f26c\";\n}\n\n.fa-tv-alt::before {\n  content: \"\\f26c\";\n}\n\n.fa-shrimp::before {\n  content: \"\\e448\";\n}\n\n.fa-list-check::before {\n  content: \"\\f0ae\";\n}\n\n.fa-tasks::before {\n  content: \"\\f0ae\";\n}\n\n.fa-jug-detergent::before {\n  content: \"\\e519\";\n}\n\n.fa-circle-user::before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-circle::before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-shield::before {\n  content: \"\\f505\";\n}\n\n.fa-wind::before {\n  content: \"\\f72e\";\n}\n\n.fa-car-burst::before {\n  content: \"\\f5e1\";\n}\n\n.fa-car-crash::before {\n  content: \"\\f5e1\";\n}\n\n.fa-y::before {\n  content: \"Y\";\n}\n\n.fa-person-snowboarding::before {\n  content: \"\\f7ce\";\n}\n\n.fa-snowboarding::before {\n  content: \"\\f7ce\";\n}\n\n.fa-truck-fast::before {\n  content: \"\\f48b\";\n}\n\n.fa-shipping-fast::before {\n  content: \"\\f48b\";\n}\n\n.fa-fish::before {\n  content: \"\\f578\";\n}\n\n.fa-user-graduate::before {\n  content: \"\\f501\";\n}\n\n.fa-circle-half-stroke::before {\n  content: \"\\f042\";\n}\n\n.fa-adjust::before {\n  content: \"\\f042\";\n}\n\n.fa-clapperboard::before {\n  content: \"\\e131\";\n}\n\n.fa-circle-radiation::before {\n  content: \"\\f7ba\";\n}\n\n.fa-radiation-alt::before {\n  content: \"\\f7ba\";\n}\n\n.fa-baseball::before {\n  content: \"\\f433\";\n}\n\n.fa-baseball-ball::before {\n  content: \"\\f433\";\n}\n\n.fa-jet-fighter-up::before {\n  content: \"\\e518\";\n}\n\n.fa-diagram-project::before {\n  content: \"\\f542\";\n}\n\n.fa-project-diagram::before {\n  content: \"\\f542\";\n}\n\n.fa-copy::before {\n  content: \"\\f0c5\";\n}\n\n.fa-volume-xmark::before {\n  content: \"\\f6a9\";\n}\n\n.fa-volume-mute::before {\n  content: \"\\f6a9\";\n}\n\n.fa-volume-times::before {\n  content: \"\\f6a9\";\n}\n\n.fa-hand-sparkles::before {\n  content: \"\\e05d\";\n}\n\n.fa-grip::before {\n  content: \"\\f58d\";\n}\n\n.fa-grip-horizontal::before {\n  content: \"\\f58d\";\n}\n\n.fa-share-from-square::before {\n  content: \"\\f14d\";\n}\n\n.fa-share-square::before {\n  content: \"\\f14d\";\n}\n\n.fa-child-combatant::before {\n  content: \"\\e4e0\";\n}\n\n.fa-child-rifle::before {\n  content: \"\\e4e0\";\n}\n\n.fa-gun::before {\n  content: \"\\e19b\";\n}\n\n.fa-square-phone::before {\n  content: \"\\f098\";\n}\n\n.fa-phone-square::before {\n  content: \"\\f098\";\n}\n\n.fa-plus::before {\n  content: \"\\+\";\n}\n\n.fa-add::before {\n  content: \"\\+\";\n}\n\n.fa-expand::before {\n  content: \"\\f065\";\n}\n\n.fa-computer::before {\n  content: \"\\e4e5\";\n}\n\n.fa-xmark::before {\n  content: \"\\f00d\";\n}\n\n.fa-close::before {\n  content: \"\\f00d\";\n}\n\n.fa-multiply::before {\n  content: \"\\f00d\";\n}\n\n.fa-remove::before {\n  content: \"\\f00d\";\n}\n\n.fa-times::before {\n  content: \"\\f00d\";\n}\n\n.fa-arrows-up-down-left-right::before {\n  content: \"\\f047\";\n}\n\n.fa-arrows::before {\n  content: \"\\f047\";\n}\n\n.fa-chalkboard-user::before {\n  content: \"\\f51c\";\n}\n\n.fa-chalkboard-teacher::before {\n  content: \"\\f51c\";\n}\n\n.fa-peso-sign::before {\n  content: \"\\e222\";\n}\n\n.fa-building-shield::before {\n  content: \"\\e4d8\";\n}\n\n.fa-baby::before {\n  content: \"\\f77c\";\n}\n\n.fa-users-line::before {\n  content: \"\\e592\";\n}\n\n.fa-quote-left::before {\n  content: \"\\f10d\";\n}\n\n.fa-quote-left-alt::before {\n  content: \"\\f10d\";\n}\n\n.fa-tractor::before {\n  content: \"\\f722\";\n}\n\n.fa-trash-arrow-up::before {\n  content: \"\\f829\";\n}\n\n.fa-trash-restore::before {\n  content: \"\\f829\";\n}\n\n.fa-arrow-down-up-lock::before {\n  content: \"\\e4b0\";\n}\n\n.fa-lines-leaning::before {\n  content: \"\\e51e\";\n}\n\n.fa-ruler-combined::before {\n  content: \"\\f546\";\n}\n\n.fa-copyright::before {\n  content: \"\\f1f9\";\n}\n\n.fa-equals::before {\n  content: \"\\=\";\n}\n\n.fa-blender::before {\n  content: \"\\f517\";\n}\n\n.fa-teeth::before {\n  content: \"\\f62e\";\n}\n\n.fa-shekel-sign::before {\n  content: \"\\f20b\";\n}\n\n.fa-ils::before {\n  content: \"\\f20b\";\n}\n\n.fa-shekel::before {\n  content: \"\\f20b\";\n}\n\n.fa-sheqel::before {\n  content: \"\\f20b\";\n}\n\n.fa-sheqel-sign::before {\n  content: \"\\f20b\";\n}\n\n.fa-map::before {\n  content: \"\\f279\";\n}\n\n.fa-rocket::before {\n  content: \"\\f135\";\n}\n\n.fa-photo-film::before {\n  content: \"\\f87c\";\n}\n\n.fa-photo-video::before {\n  content: \"\\f87c\";\n}\n\n.fa-folder-minus::before {\n  content: \"\\f65d\";\n}\n\n.fa-store::before {\n  content: \"\\f54e\";\n}\n\n.fa-arrow-trend-up::before {\n  content: \"\\e098\";\n}\n\n.fa-plug-circle-minus::before {\n  content: \"\\e55e\";\n}\n\n.fa-sign-hanging::before {\n  content: \"\\f4d9\";\n}\n\n.fa-sign::before {\n  content: \"\\f4d9\";\n}\n\n.fa-bezier-curve::before {\n  content: \"\\f55b\";\n}\n\n.fa-bell-slash::before {\n  content: \"\\f1f6\";\n}\n\n.fa-tablet::before {\n  content: \"\\f3fb\";\n}\n\n.fa-tablet-android::before {\n  content: \"\\f3fb\";\n}\n\n.fa-school-flag::before {\n  content: \"\\e56e\";\n}\n\n.fa-fill::before {\n  content: \"\\f575\";\n}\n\n.fa-angle-up::before {\n  content: \"\\f106\";\n}\n\n.fa-drumstick-bite::before {\n  content: \"\\f6d7\";\n}\n\n.fa-holly-berry::before {\n  content: \"\\f7aa\";\n}\n\n.fa-chevron-left::before {\n  content: \"\\f053\";\n}\n\n.fa-bacteria::before {\n  content: \"\\e059\";\n}\n\n.fa-hand-lizard::before {\n  content: \"\\f258\";\n}\n\n.fa-notdef::before {\n  content: \"\\e1fe\";\n}\n\n.fa-disease::before {\n  content: \"\\f7fa\";\n}\n\n.fa-briefcase-medical::before {\n  content: \"\\f469\";\n}\n\n.fa-genderless::before {\n  content: \"\\f22d\";\n}\n\n.fa-chevron-right::before {\n  content: \"\\f054\";\n}\n\n.fa-retweet::before {\n  content: \"\\f079\";\n}\n\n.fa-car-rear::before {\n  content: \"\\f5de\";\n}\n\n.fa-car-alt::before {\n  content: \"\\f5de\";\n}\n\n.fa-pump-soap::before {\n  content: \"\\e06b\";\n}\n\n.fa-video-slash::before {\n  content: \"\\f4e2\";\n}\n\n.fa-battery-quarter::before {\n  content: \"\\f243\";\n}\n\n.fa-battery-2::before {\n  content: \"\\f243\";\n}\n\n.fa-radio::before {\n  content: \"\\f8d7\";\n}\n\n.fa-baby-carriage::before {\n  content: \"\\f77d\";\n}\n\n.fa-carriage-baby::before {\n  content: \"\\f77d\";\n}\n\n.fa-traffic-light::before {\n  content: \"\\f637\";\n}\n\n.fa-thermometer::before {\n  content: \"\\f491\";\n}\n\n.fa-vr-cardboard::before {\n  content: \"\\f729\";\n}\n\n.fa-hand-middle-finger::before {\n  content: \"\\f806\";\n}\n\n.fa-percent::before {\n  content: \"\\%\";\n}\n\n.fa-percentage::before {\n  content: \"\\%\";\n}\n\n.fa-truck-moving::before {\n  content: \"\\f4df\";\n}\n\n.fa-glass-water-droplet::before {\n  content: \"\\e4f5\";\n}\n\n.fa-display::before {\n  content: \"\\e163\";\n}\n\n.fa-face-smile::before {\n  content: \"\\f118\";\n}\n\n.fa-smile::before {\n  content: \"\\f118\";\n}\n\n.fa-thumbtack::before {\n  content: \"\\f08d\";\n}\n\n.fa-thumb-tack::before {\n  content: \"\\f08d\";\n}\n\n.fa-trophy::before {\n  content: \"\\f091\";\n}\n\n.fa-person-praying::before {\n  content: \"\\f683\";\n}\n\n.fa-pray::before {\n  content: \"\\f683\";\n}\n\n.fa-hammer::before {\n  content: \"\\f6e3\";\n}\n\n.fa-hand-peace::before {\n  content: \"\\f25b\";\n}\n\n.fa-rotate::before {\n  content: \"\\f2f1\";\n}\n\n.fa-sync-alt::before {\n  content: \"\\f2f1\";\n}\n\n.fa-spinner::before {\n  content: \"\\f110\";\n}\n\n.fa-robot::before {\n  content: \"\\f544\";\n}\n\n.fa-peace::before {\n  content: \"\\f67c\";\n}\n\n.fa-gears::before {\n  content: \"\\f085\";\n}\n\n.fa-cogs::before {\n  content: \"\\f085\";\n}\n\n.fa-warehouse::before {\n  content: \"\\f494\";\n}\n\n.fa-arrow-up-right-dots::before {\n  content: \"\\e4b7\";\n}\n\n.fa-splotch::before {\n  content: \"\\f5bc\";\n}\n\n.fa-face-grin-hearts::before {\n  content: \"\\f584\";\n}\n\n.fa-grin-hearts::before {\n  content: \"\\f584\";\n}\n\n.fa-dice-four::before {\n  content: \"\\f524\";\n}\n\n.fa-sim-card::before {\n  content: \"\\f7c4\";\n}\n\n.fa-transgender::before {\n  content: \"\\f225\";\n}\n\n.fa-transgender-alt::before {\n  content: \"\\f225\";\n}\n\n.fa-mercury::before {\n  content: \"\\f223\";\n}\n\n.fa-arrow-turn-down::before {\n  content: \"\\f149\";\n}\n\n.fa-level-down::before {\n  content: \"\\f149\";\n}\n\n.fa-person-falling-burst::before {\n  content: \"\\e547\";\n}\n\n.fa-award::before {\n  content: \"\\f559\";\n}\n\n.fa-ticket-simple::before {\n  content: \"\\f3ff\";\n}\n\n.fa-ticket-alt::before {\n  content: \"\\f3ff\";\n}\n\n.fa-building::before {\n  content: \"\\f1ad\";\n}\n\n.fa-angles-left::before {\n  content: \"\\f100\";\n}\n\n.fa-angle-double-left::before {\n  content: \"\\f100\";\n}\n\n.fa-qrcode::before {\n  content: \"\\f029\";\n}\n\n.fa-clock-rotate-left::before {\n  content: \"\\f1da\";\n}\n\n.fa-history::before {\n  content: \"\\f1da\";\n}\n\n.fa-face-grin-beam-sweat::before {\n  content: \"\\f583\";\n}\n\n.fa-grin-beam-sweat::before {\n  content: \"\\f583\";\n}\n\n.fa-file-export::before {\n  content: \"\\f56e\";\n}\n\n.fa-arrow-right-from-file::before {\n  content: \"\\f56e\";\n}\n\n.fa-shield::before {\n  content: \"\\f132\";\n}\n\n.fa-shield-blank::before {\n  content: \"\\f132\";\n}\n\n.fa-arrow-up-short-wide::before {\n  content: \"\\f885\";\n}\n\n.fa-sort-amount-up-alt::before {\n  content: \"\\f885\";\n}\n\n.fa-house-medical::before {\n  content: \"\\e3b2\";\n}\n\n.fa-golf-ball-tee::before {\n  content: \"\\f450\";\n}\n\n.fa-golf-ball::before {\n  content: \"\\f450\";\n}\n\n.fa-circle-chevron-left::before {\n  content: \"\\f137\";\n}\n\n.fa-chevron-circle-left::before {\n  content: \"\\f137\";\n}\n\n.fa-house-chimney-window::before {\n  content: \"\\e00d\";\n}\n\n.fa-pen-nib::before {\n  content: \"\\f5ad\";\n}\n\n.fa-tent-arrow-turn-left::before {\n  content: \"\\e580\";\n}\n\n.fa-tents::before {\n  content: \"\\e582\";\n}\n\n.fa-wand-magic::before {\n  content: \"\\f0d0\";\n}\n\n.fa-magic::before {\n  content: \"\\f0d0\";\n}\n\n.fa-dog::before {\n  content: \"\\f6d3\";\n}\n\n.fa-carrot::before {\n  content: \"\\f787\";\n}\n\n.fa-moon::before {\n  content: \"\\f186\";\n}\n\n.fa-wine-glass-empty::before {\n  content: \"\\f5ce\";\n}\n\n.fa-wine-glass-alt::before {\n  content: \"\\f5ce\";\n}\n\n.fa-cheese::before {\n  content: \"\\f7ef\";\n}\n\n.fa-yin-yang::before {\n  content: \"\\f6ad\";\n}\n\n.fa-music::before {\n  content: \"\\f001\";\n}\n\n.fa-code-commit::before {\n  content: \"\\f386\";\n}\n\n.fa-temperature-low::before {\n  content: \"\\f76b\";\n}\n\n.fa-person-biking::before {\n  content: \"\\f84a\";\n}\n\n.fa-biking::before {\n  content: \"\\f84a\";\n}\n\n.fa-broom::before {\n  content: \"\\f51a\";\n}\n\n.fa-shield-heart::before {\n  content: \"\\e574\";\n}\n\n.fa-gopuram::before {\n  content: \"\\f664\";\n}\n\n.fa-earth-oceania::before {\n  content: \"\\e47b\";\n}\n\n.fa-globe-oceania::before {\n  content: \"\\e47b\";\n}\n\n.fa-square-xmark::before {\n  content: \"\\f2d3\";\n}\n\n.fa-times-square::before {\n  content: \"\\f2d3\";\n}\n\n.fa-xmark-square::before {\n  content: \"\\f2d3\";\n}\n\n.fa-hashtag::before {\n  content: \"\\#\";\n}\n\n.fa-up-right-and-down-left-from-center::before {\n  content: \"\\f424\";\n}\n\n.fa-expand-alt::before {\n  content: \"\\f424\";\n}\n\n.fa-oil-can::before {\n  content: \"\\f613\";\n}\n\n.fa-t::before {\n  content: \"T\";\n}\n\n.fa-hippo::before {\n  content: \"\\f6ed\";\n}\n\n.fa-chart-column::before {\n  content: \"\\e0e3\";\n}\n\n.fa-infinity::before {\n  content: \"\\f534\";\n}\n\n.fa-vial-circle-check::before {\n  content: \"\\e596\";\n}\n\n.fa-person-arrow-down-to-line::before {\n  content: \"\\e538\";\n}\n\n.fa-voicemail::before {\n  content: \"\\f897\";\n}\n\n.fa-fan::before {\n  content: \"\\f863\";\n}\n\n.fa-person-walking-luggage::before {\n  content: \"\\e554\";\n}\n\n.fa-up-down::before {\n  content: \"\\f338\";\n}\n\n.fa-arrows-alt-v::before {\n  content: \"\\f338\";\n}\n\n.fa-cloud-moon-rain::before {\n  content: \"\\f73c\";\n}\n\n.fa-calendar::before {\n  content: \"\\f133\";\n}\n\n.fa-trailer::before {\n  content: \"\\e041\";\n}\n\n.fa-bahai::before {\n  content: \"\\f666\";\n}\n\n.fa-haykal::before {\n  content: \"\\f666\";\n}\n\n.fa-sd-card::before {\n  content: \"\\f7c2\";\n}\n\n.fa-dragon::before {\n  content: \"\\f6d5\";\n}\n\n.fa-shoe-prints::before {\n  content: \"\\f54b\";\n}\n\n.fa-circle-plus::before {\n  content: \"\\f055\";\n}\n\n.fa-plus-circle::before {\n  content: \"\\f055\";\n}\n\n.fa-face-grin-tongue-wink::before {\n  content: \"\\f58b\";\n}\n\n.fa-grin-tongue-wink::before {\n  content: \"\\f58b\";\n}\n\n.fa-hand-holding::before {\n  content: \"\\f4bd\";\n}\n\n.fa-plug-circle-exclamation::before {\n  content: \"\\e55d\";\n}\n\n.fa-link-slash::before {\n  content: \"\\f127\";\n}\n\n.fa-chain-broken::before {\n  content: \"\\f127\";\n}\n\n.fa-chain-slash::before {\n  content: \"\\f127\";\n}\n\n.fa-unlink::before {\n  content: \"\\f127\";\n}\n\n.fa-clone::before {\n  content: \"\\f24d\";\n}\n\n.fa-person-walking-arrow-loop-left::before {\n  content: \"\\e551\";\n}\n\n.fa-arrow-up-z-a::before {\n  content: \"\\f882\";\n}\n\n.fa-sort-alpha-up-alt::before {\n  content: \"\\f882\";\n}\n\n.fa-fire-flame-curved::before {\n  content: \"\\f7e4\";\n}\n\n.fa-fire-alt::before {\n  content: \"\\f7e4\";\n}\n\n.fa-tornado::before {\n  content: \"\\f76f\";\n}\n\n.fa-file-circle-plus::before {\n  content: \"\\e494\";\n}\n\n.fa-book-quran::before {\n  content: \"\\f687\";\n}\n\n.fa-quran::before {\n  content: \"\\f687\";\n}\n\n.fa-anchor::before {\n  content: \"\\f13d\";\n}\n\n.fa-border-all::before {\n  content: \"\\f84c\";\n}\n\n.fa-face-angry::before {\n  content: \"\\f556\";\n}\n\n.fa-angry::before {\n  content: \"\\f556\";\n}\n\n.fa-cookie-bite::before {\n  content: \"\\f564\";\n}\n\n.fa-arrow-trend-down::before {\n  content: \"\\e097\";\n}\n\n.fa-rss::before {\n  content: \"\\f09e\";\n}\n\n.fa-feed::before {\n  content: \"\\f09e\";\n}\n\n.fa-draw-polygon::before {\n  content: \"\\f5ee\";\n}\n\n.fa-scale-balanced::before {\n  content: \"\\f24e\";\n}\n\n.fa-balance-scale::before {\n  content: \"\\f24e\";\n}\n\n.fa-gauge-simple-high::before {\n  content: \"\\f62a\";\n}\n\n.fa-tachometer::before {\n  content: \"\\f62a\";\n}\n\n.fa-tachometer-fast::before {\n  content: \"\\f62a\";\n}\n\n.fa-shower::before {\n  content: \"\\f2cc\";\n}\n\n.fa-desktop::before {\n  content: \"\\f390\";\n}\n\n.fa-desktop-alt::before {\n  content: \"\\f390\";\n}\n\n.fa-m::before {\n  content: \"M\";\n}\n\n.fa-table-list::before {\n  content: \"\\f00b\";\n}\n\n.fa-th-list::before {\n  content: \"\\f00b\";\n}\n\n.fa-comment-sms::before {\n  content: \"\\f7cd\";\n}\n\n.fa-sms::before {\n  content: \"\\f7cd\";\n}\n\n.fa-book::before {\n  content: \"\\f02d\";\n}\n\n.fa-user-plus::before {\n  content: \"\\f234\";\n}\n\n.fa-check::before {\n  content: \"\\f00c\";\n}\n\n.fa-battery-three-quarters::before {\n  content: \"\\f241\";\n}\n\n.fa-battery-4::before {\n  content: \"\\f241\";\n}\n\n.fa-house-circle-check::before {\n  content: \"\\e509\";\n}\n\n.fa-angle-left::before {\n  content: \"\\f104\";\n}\n\n.fa-diagram-successor::before {\n  content: \"\\e47a\";\n}\n\n.fa-truck-arrow-right::before {\n  content: \"\\e58b\";\n}\n\n.fa-arrows-split-up-and-left::before {\n  content: \"\\e4bc\";\n}\n\n.fa-hand-fist::before {\n  content: \"\\f6de\";\n}\n\n.fa-fist-raised::before {\n  content: \"\\f6de\";\n}\n\n.fa-cloud-moon::before {\n  content: \"\\f6c3\";\n}\n\n.fa-briefcase::before {\n  content: \"\\f0b1\";\n}\n\n.fa-person-falling::before {\n  content: \"\\e546\";\n}\n\n.fa-image-portrait::before {\n  content: \"\\f3e0\";\n}\n\n.fa-portrait::before {\n  content: \"\\f3e0\";\n}\n\n.fa-user-tag::before {\n  content: \"\\f507\";\n}\n\n.fa-rug::before {\n  content: \"\\e569\";\n}\n\n.fa-earth-europe::before {\n  content: \"\\f7a2\";\n}\n\n.fa-globe-europe::before {\n  content: \"\\f7a2\";\n}\n\n.fa-cart-flatbed-suitcase::before {\n  content: \"\\f59d\";\n}\n\n.fa-luggage-cart::before {\n  content: \"\\f59d\";\n}\n\n.fa-rectangle-xmark::before {\n  content: \"\\f410\";\n}\n\n.fa-rectangle-times::before {\n  content: \"\\f410\";\n}\n\n.fa-times-rectangle::before {\n  content: \"\\f410\";\n}\n\n.fa-window-close::before {\n  content: \"\\f410\";\n}\n\n.fa-baht-sign::before {\n  content: \"\\e0ac\";\n}\n\n.fa-book-open::before {\n  content: \"\\f518\";\n}\n\n.fa-book-journal-whills::before {\n  content: \"\\f66a\";\n}\n\n.fa-journal-whills::before {\n  content: \"\\f66a\";\n}\n\n.fa-handcuffs::before {\n  content: \"\\e4f8\";\n}\n\n.fa-triangle-exclamation::before {\n  content: \"\\f071\";\n}\n\n.fa-exclamation-triangle::before {\n  content: \"\\f071\";\n}\n\n.fa-warning::before {\n  content: \"\\f071\";\n}\n\n.fa-database::before {\n  content: \"\\f1c0\";\n}\n\n.fa-share::before {\n  content: \"\\f064\";\n}\n\n.fa-mail-forward::before {\n  content: \"\\f064\";\n}\n\n.fa-bottle-droplet::before {\n  content: \"\\e4c4\";\n}\n\n.fa-mask-face::before {\n  content: \"\\e1d7\";\n}\n\n.fa-hill-rockslide::before {\n  content: \"\\e508\";\n}\n\n.fa-right-left::before {\n  content: \"\\f362\";\n}\n\n.fa-exchange-alt::before {\n  content: \"\\f362\";\n}\n\n.fa-paper-plane::before {\n  content: \"\\f1d8\";\n}\n\n.fa-road-circle-exclamation::before {\n  content: \"\\e565\";\n}\n\n.fa-dungeon::before {\n  content: \"\\f6d9\";\n}\n\n.fa-align-right::before {\n  content: \"\\f038\";\n}\n\n.fa-money-bill-1-wave::before {\n  content: \"\\f53b\";\n}\n\n.fa-money-bill-wave-alt::before {\n  content: \"\\f53b\";\n}\n\n.fa-life-ring::before {\n  content: \"\\f1cd\";\n}\n\n.fa-hands::before {\n  content: \"\\f2a7\";\n}\n\n.fa-sign-language::before {\n  content: \"\\f2a7\";\n}\n\n.fa-signing::before {\n  content: \"\\f2a7\";\n}\n\n.fa-calendar-day::before {\n  content: \"\\f783\";\n}\n\n.fa-water-ladder::before {\n  content: \"\\f5c5\";\n}\n\n.fa-ladder-water::before {\n  content: \"\\f5c5\";\n}\n\n.fa-swimming-pool::before {\n  content: \"\\f5c5\";\n}\n\n.fa-arrows-up-down::before {\n  content: \"\\f07d\";\n}\n\n.fa-arrows-v::before {\n  content: \"\\f07d\";\n}\n\n.fa-face-grimace::before {\n  content: \"\\f57f\";\n}\n\n.fa-grimace::before {\n  content: \"\\f57f\";\n}\n\n.fa-wheelchair-move::before {\n  content: \"\\e2ce\";\n}\n\n.fa-wheelchair-alt::before {\n  content: \"\\e2ce\";\n}\n\n.fa-turn-down::before {\n  content: \"\\f3be\";\n}\n\n.fa-level-down-alt::before {\n  content: \"\\f3be\";\n}\n\n.fa-person-walking-arrow-right::before {\n  content: \"\\e552\";\n}\n\n.fa-square-envelope::before {\n  content: \"\\f199\";\n}\n\n.fa-envelope-square::before {\n  content: \"\\f199\";\n}\n\n.fa-dice::before {\n  content: \"\\f522\";\n}\n\n.fa-bowling-ball::before {\n  content: \"\\f436\";\n}\n\n.fa-brain::before {\n  content: \"\\f5dc\";\n}\n\n.fa-bandage::before {\n  content: \"\\f462\";\n}\n\n.fa-band-aid::before {\n  content: \"\\f462\";\n}\n\n.fa-calendar-minus::before {\n  content: \"\\f272\";\n}\n\n.fa-circle-xmark::before {\n  content: \"\\f057\";\n}\n\n.fa-times-circle::before {\n  content: \"\\f057\";\n}\n\n.fa-xmark-circle::before {\n  content: \"\\f057\";\n}\n\n.fa-gifts::before {\n  content: \"\\f79c\";\n}\n\n.fa-hotel::before {\n  content: \"\\f594\";\n}\n\n.fa-earth-asia::before {\n  content: \"\\f57e\";\n}\n\n.fa-globe-asia::before {\n  content: \"\\f57e\";\n}\n\n.fa-id-card-clip::before {\n  content: \"\\f47f\";\n}\n\n.fa-id-card-alt::before {\n  content: \"\\f47f\";\n}\n\n.fa-magnifying-glass-plus::before {\n  content: \"\\f00e\";\n}\n\n.fa-search-plus::before {\n  content: \"\\f00e\";\n}\n\n.fa-thumbs-up::before {\n  content: \"\\f164\";\n}\n\n.fa-user-clock::before {\n  content: \"\\f4fd\";\n}\n\n.fa-hand-dots::before {\n  content: \"\\f461\";\n}\n\n.fa-allergies::before {\n  content: \"\\f461\";\n}\n\n.fa-file-invoice::before {\n  content: \"\\f570\";\n}\n\n.fa-window-minimize::before {\n  content: \"\\f2d1\";\n}\n\n.fa-mug-saucer::before {\n  content: \"\\f0f4\";\n}\n\n.fa-coffee::before {\n  content: \"\\f0f4\";\n}\n\n.fa-brush::before {\n  content: \"\\f55d\";\n}\n\n.fa-mask::before {\n  content: \"\\f6fa\";\n}\n\n.fa-magnifying-glass-minus::before {\n  content: \"\\f010\";\n}\n\n.fa-search-minus::before {\n  content: \"\\f010\";\n}\n\n.fa-ruler-vertical::before {\n  content: \"\\f548\";\n}\n\n.fa-user-large::before {\n  content: \"\\f406\";\n}\n\n.fa-user-alt::before {\n  content: \"\\f406\";\n}\n\n.fa-train-tram::before {\n  content: \"\\e5b4\";\n}\n\n.fa-user-nurse::before {\n  content: \"\\f82f\";\n}\n\n.fa-syringe::before {\n  content: \"\\f48e\";\n}\n\n.fa-cloud-sun::before {\n  content: \"\\f6c4\";\n}\n\n.fa-stopwatch-20::before {\n  content: \"\\e06f\";\n}\n\n.fa-square-full::before {\n  content: \"\\f45c\";\n}\n\n.fa-magnet::before {\n  content: \"\\f076\";\n}\n\n.fa-jar::before {\n  content: \"\\e516\";\n}\n\n.fa-note-sticky::before {\n  content: \"\\f249\";\n}\n\n.fa-sticky-note::before {\n  content: \"\\f249\";\n}\n\n.fa-bug-slash::before {\n  content: \"\\e490\";\n}\n\n.fa-arrow-up-from-water-pump::before {\n  content: \"\\e4b6\";\n}\n\n.fa-bone::before {\n  content: \"\\f5d7\";\n}\n\n.fa-user-injured::before {\n  content: \"\\f728\";\n}\n\n.fa-face-sad-tear::before {\n  content: \"\\f5b4\";\n}\n\n.fa-sad-tear::before {\n  content: \"\\f5b4\";\n}\n\n.fa-plane::before {\n  content: \"\\f072\";\n}\n\n.fa-tent-arrows-down::before {\n  content: \"\\e581\";\n}\n\n.fa-exclamation::before {\n  content: \"\\!\";\n}\n\n.fa-arrows-spin::before {\n  content: \"\\e4bb\";\n}\n\n.fa-print::before {\n  content: \"\\f02f\";\n}\n\n.fa-turkish-lira-sign::before {\n  content: \"\\e2bb\";\n}\n\n.fa-try::before {\n  content: \"\\e2bb\";\n}\n\n.fa-turkish-lira::before {\n  content: \"\\e2bb\";\n}\n\n.fa-dollar-sign::before {\n  content: \"\\$\";\n}\n\n.fa-dollar::before {\n  content: \"\\$\";\n}\n\n.fa-usd::before {\n  content: \"\\$\";\n}\n\n.fa-x::before {\n  content: \"X\";\n}\n\n.fa-magnifying-glass-dollar::before {\n  content: \"\\f688\";\n}\n\n.fa-search-dollar::before {\n  content: \"\\f688\";\n}\n\n.fa-users-gear::before {\n  content: \"\\f509\";\n}\n\n.fa-users-cog::before {\n  content: \"\\f509\";\n}\n\n.fa-person-military-pointing::before {\n  content: \"\\e54a\";\n}\n\n.fa-building-columns::before {\n  content: \"\\f19c\";\n}\n\n.fa-bank::before {\n  content: \"\\f19c\";\n}\n\n.fa-institution::before {\n  content: \"\\f19c\";\n}\n\n.fa-museum::before {\n  content: \"\\f19c\";\n}\n\n.fa-university::before {\n  content: \"\\f19c\";\n}\n\n.fa-umbrella::before {\n  content: \"\\f0e9\";\n}\n\n.fa-trowel::before {\n  content: \"\\e589\";\n}\n\n.fa-d::before {\n  content: \"D\";\n}\n\n.fa-stapler::before {\n  content: \"\\e5af\";\n}\n\n.fa-masks-theater::before {\n  content: \"\\f630\";\n}\n\n.fa-theater-masks::before {\n  content: \"\\f630\";\n}\n\n.fa-kip-sign::before {\n  content: \"\\e1c4\";\n}\n\n.fa-hand-point-left::before {\n  content: \"\\f0a5\";\n}\n\n.fa-handshake-simple::before {\n  content: \"\\f4c6\";\n}\n\n.fa-handshake-alt::before {\n  content: \"\\f4c6\";\n}\n\n.fa-jet-fighter::before {\n  content: \"\\f0fb\";\n}\n\n.fa-fighter-jet::before {\n  content: \"\\f0fb\";\n}\n\n.fa-square-share-nodes::before {\n  content: \"\\f1e1\";\n}\n\n.fa-share-alt-square::before {\n  content: \"\\f1e1\";\n}\n\n.fa-barcode::before {\n  content: \"\\f02a\";\n}\n\n.fa-plus-minus::before {\n  content: \"\\e43c\";\n}\n\n.fa-video::before {\n  content: \"\\f03d\";\n}\n\n.fa-video-camera::before {\n  content: \"\\f03d\";\n}\n\n.fa-graduation-cap::before {\n  content: \"\\f19d\";\n}\n\n.fa-mortar-board::before {\n  content: \"\\f19d\";\n}\n\n.fa-hand-holding-medical::before {\n  content: \"\\e05c\";\n}\n\n.fa-person-circle-check::before {\n  content: \"\\e53e\";\n}\n\n.fa-turn-up::before {\n  content: \"\\f3bf\";\n}\n\n.fa-level-up-alt::before {\n  content: \"\\f3bf\";\n}\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-classic: \"Font Awesome 6 Free\";\n  --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Free\";\n  font-style: normal;\n  font-weight: 900;\n  font-display: block;\n  src: url(\"font-awesome/fa-solid-900.woff2\") format(\"woff2\"), url(\"font-awesome/fa-solid-900.ttf\") format(\"truetype\");\n}\n.fas,\n.fa-solid {\n  font-weight: 900;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-classic: \"Font Awesome 6 Free\";\n  --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Free\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"font-awesome/fa-regular-400.woff2\") format(\"woff2\"), url(\"font-awesome/fa-regular-400.ttf\") format(\"truetype\");\n}\n.far,\n.fa-regular {\n  font-weight: 400;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-brands: \"Font Awesome 6 Brands\";\n  --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Brands\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"font-awesome/fa-brands-400.woff2\") format(\"woff2\"), url(\"font-awesome/fa-brands-400.ttf\") format(\"truetype\");\n}\n.fab,\n.fa-brands {\n  font-weight: 400;\n}\n\n.fa-monero:before {\n  content: \"\\f3d0\";\n}\n\n.fa-hooli:before {\n  content: \"\\f427\";\n}\n\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n\n.fa-shopware:before {\n  content: \"\\f5b5\";\n}\n\n.fa-creative-commons-nc:before {\n  content: \"\\f4e8\";\n}\n\n.fa-aws:before {\n  content: \"\\f375\";\n}\n\n.fa-redhat:before {\n  content: \"\\f7bc\";\n}\n\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n\n.fa-cloudflare:before {\n  content: \"\\e07d\";\n}\n\n.fa-ups:before {\n  content: \"\\f7e0\";\n}\n\n.fa-pixiv:before {\n  content: \"\\e640\";\n}\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n\n.fa-dyalog:before {\n  content: \"\\f399\";\n}\n\n.fa-bity:before {\n  content: \"\\f37a\";\n}\n\n.fa-stackpath:before {\n  content: \"\\f842\";\n}\n\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n\n.fa-modx:before {\n  content: \"\\f285\";\n}\n\n.fa-guilded:before {\n  content: \"\\e07e\";\n}\n\n.fa-vnv:before {\n  content: \"\\f40b\";\n}\n\n.fa-square-js:before {\n  content: \"\\f3b9\";\n}\n\n.fa-js-square:before {\n  content: \"\\f3b9\";\n}\n\n.fa-microsoft:before {\n  content: \"\\f3ca\";\n}\n\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n\n.fa-orcid:before {\n  content: \"\\f8d2\";\n}\n\n.fa-java:before {\n  content: \"\\f4e4\";\n}\n\n.fa-invision:before {\n  content: \"\\f7b0\";\n}\n\n.fa-creative-commons-pd-alt:before {\n  content: \"\\f4ed\";\n}\n\n.fa-centercode:before {\n  content: \"\\f380\";\n}\n\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n\n.fa-jxl:before {\n  content: \"\\e67b\";\n}\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\";\n}\n\n.fa-creative-commons-by:before {\n  content: \"\\f4e7\";\n}\n\n.fa-unity:before {\n  content: \"\\e049\";\n}\n\n.fa-whmcs:before {\n  content: \"\\f40d\";\n}\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\";\n}\n\n.fa-vk:before {\n  content: \"\\f189\";\n}\n\n.fa-untappd:before {\n  content: \"\\f405\";\n}\n\n.fa-mailchimp:before {\n  content: \"\\f59e\";\n}\n\n.fa-css3-alt:before {\n  content: \"\\f38b\";\n}\n\n.fa-square-reddit:before {\n  content: \"\\f1a2\";\n}\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\";\n}\n\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n\n.fa-square-font-awesome:before {\n  content: \"\\e5ad\";\n}\n\n.fa-deskpro:before {\n  content: \"\\f38f\";\n}\n\n.fa-brave:before {\n  content: \"\\e63c\";\n}\n\n.fa-sistrix:before {\n  content: \"\\f3ee\";\n}\n\n.fa-square-instagram:before {\n  content: \"\\e055\";\n}\n\n.fa-instagram-square:before {\n  content: \"\\e055\";\n}\n\n.fa-battle-net:before {\n  content: \"\\f835\";\n}\n\n.fa-the-red-yeti:before {\n  content: \"\\f69d\";\n}\n\n.fa-square-hacker-news:before {\n  content: \"\\f3af\";\n}\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\";\n}\n\n.fa-edge:before {\n  content: \"\\f282\";\n}\n\n.fa-threads:before {\n  content: \"\\e618\";\n}\n\n.fa-napster:before {\n  content: \"\\f3d2\";\n}\n\n.fa-square-snapchat:before {\n  content: \"\\f2ad\";\n}\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\";\n}\n\n.fa-artstation:before {\n  content: \"\\f77a\";\n}\n\n.fa-markdown:before {\n  content: \"\\f60f\";\n}\n\n.fa-sourcetree:before {\n  content: \"\\f7d3\";\n}\n\n.fa-google-plus:before {\n  content: \"\\f2b3\";\n}\n\n.fa-diaspora:before {\n  content: \"\\f791\";\n}\n\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n\n.fa-phoenix-squadron:before {\n  content: \"\\f511\";\n}\n\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n\n.fa-algolia:before {\n  content: \"\\f36c\";\n}\n\n.fa-red-river:before {\n  content: \"\\f3e3\";\n}\n\n.fa-creative-commons-sa:before {\n  content: \"\\f4ef\";\n}\n\n.fa-safari:before {\n  content: \"\\f267\";\n}\n\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n\n.fa-square-font-awesome-stroke:before {\n  content: \"\\f35c\";\n}\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\";\n}\n\n.fa-atlassian:before {\n  content: \"\\f77b\";\n}\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\";\n}\n\n.fa-digital-ocean:before {\n  content: \"\\f391\";\n}\n\n.fa-nimblr:before {\n  content: \"\\f5a8\";\n}\n\n.fa-chromecast:before {\n  content: \"\\f838\";\n}\n\n.fa-evernote:before {\n  content: \"\\f839\";\n}\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n\n.fa-creative-commons-sampling:before {\n  content: \"\\f4f0\";\n}\n\n.fa-adversal:before {\n  content: \"\\f36a\";\n}\n\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n\n.fa-watchman-monitoring:before {\n  content: \"\\e087\";\n}\n\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n\n.fa-git-alt:before {\n  content: \"\\f841\";\n}\n\n.fa-lyft:before {\n  content: \"\\f3c3\";\n}\n\n.fa-rev:before {\n  content: \"\\f5b2\";\n}\n\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n\n.fa-wizards-of-the-coast:before {\n  content: \"\\f730\";\n}\n\n.fa-square-viadeo:before {\n  content: \"\\f2aa\";\n}\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n\n.fa-centos:before {\n  content: \"\\f789\";\n}\n\n.fa-adn:before {\n  content: \"\\f170\";\n}\n\n.fa-cloudsmith:before {\n  content: \"\\f384\";\n}\n\n.fa-opensuse:before {\n  content: \"\\e62b\";\n}\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n\n.fa-square-dribbble:before {\n  content: \"\\f397\";\n}\n\n.fa-dribbble-square:before {\n  content: \"\\f397\";\n}\n\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n\n.fa-node:before {\n  content: \"\\f419\";\n}\n\n.fa-mix:before {\n  content: \"\\f3cb\";\n}\n\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\";\n}\n\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n\n.fa-debian:before {\n  content: \"\\e60b\";\n}\n\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n\n.fa-instalod:before {\n  content: \"\\e081\";\n}\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n\n.fa-sellcast:before {\n  content: \"\\f2da\";\n}\n\n.fa-square-twitter:before {\n  content: \"\\f081\";\n}\n\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n\n.fa-r-project:before {\n  content: \"\\f4f7\";\n}\n\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n\n.fa-freebsd:before {\n  content: \"\\f3a4\";\n}\n\n.fa-vuejs:before {\n  content: \"\\f41f\";\n}\n\n.fa-accusoft:before {\n  content: \"\\f369\";\n}\n\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\";\n}\n\n.fa-app-store:before {\n  content: \"\\f36f\";\n}\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\";\n}\n\n.fa-golang:before {\n  content: \"\\e40f\";\n}\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\";\n}\n\n.fa-square-kickstarter:before {\n  content: \"\\f3bb\";\n}\n\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n\n.fa-uncharted:before {\n  content: \"\\e084\";\n}\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\";\n}\n\n.fa-square-youtube:before {\n  content: \"\\f431\";\n}\n\n.fa-youtube-square:before {\n  content: \"\\f431\";\n}\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n\n.fa-wpressr:before {\n  content: \"\\f3e4\";\n}\n\n.fa-rendact:before {\n  content: \"\\f3e4\";\n}\n\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n\n.fa-galactic-republic:before {\n  content: \"\\f50c\";\n}\n\n.fa-nfc-directional:before {\n  content: \"\\e530\";\n}\n\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n\n.fa-joget:before {\n  content: \"\\f3b7\";\n}\n\n.fa-fedora:before {\n  content: \"\\f798\";\n}\n\n.fa-stripe-s:before {\n  content: \"\\f42a\";\n}\n\n.fa-meta:before {\n  content: \"\\e49b\";\n}\n\n.fa-laravel:before {\n  content: \"\\f3bd\";\n}\n\n.fa-hotjar:before {\n  content: \"\\f3b1\";\n}\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n\n.fa-square-letterboxd:before {\n  content: \"\\e62e\";\n}\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\";\n}\n\n.fa-creative-commons-zero:before {\n  content: \"\\f4f3\";\n}\n\n.fa-hips:before {\n  content: \"\\f452\";\n}\n\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n\n.fa-discord:before {\n  content: \"\\f392\";\n}\n\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n\n.fa-app-store-ios:before {\n  content: \"\\f370\";\n}\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n\n.fa-confluence:before {\n  content: \"\\f78d\";\n}\n\n.fa-shoelace:before {\n  content: \"\\e60c\";\n}\n\n.fa-mdb:before {\n  content: \"\\f8ca\";\n}\n\n.fa-dochub:before {\n  content: \"\\f394\";\n}\n\n.fa-accessible-icon:before {\n  content: \"\\f368\";\n}\n\n.fa-ebay:before {\n  content: \"\\f4f4\";\n}\n\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n\n.fa-unsplash:before {\n  content: \"\\e07c\";\n}\n\n.fa-yarn:before {\n  content: \"\\f7e3\";\n}\n\n.fa-square-steam:before {\n  content: \"\\f1b7\";\n}\n\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n\n.fa-square-vimeo:before {\n  content: \"\\f194\";\n}\n\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n\n.fa-asymmetrik:before {\n  content: \"\\f372\";\n}\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n\n.fa-font-awesome-flag:before {\n  content: \"\\f2b4\";\n}\n\n.fa-font-awesome-logo-full:before {\n  content: \"\\f2b4\";\n}\n\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n\n.fa-apple:before {\n  content: \"\\f179\";\n}\n\n.fa-hive:before {\n  content: \"\\e07f\";\n}\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\";\n}\n\n.fa-keybase:before {\n  content: \"\\f4f5\";\n}\n\n.fa-apple-pay:before {\n  content: \"\\f415\";\n}\n\n.fa-padlet:before {\n  content: \"\\e4a0\";\n}\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\";\n}\n\n.fa-square-github:before {\n  content: \"\\f092\";\n}\n\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\n.fa-fedex:before {\n  content: \"\\f797\";\n}\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\";\n}\n\n.fa-shopify:before {\n  content: \"\\e057\";\n}\n\n.fa-neos:before {\n  content: \"\\f612\";\n}\n\n.fa-square-threads:before {\n  content: \"\\e619\";\n}\n\n.fa-hackerrank:before {\n  content: \"\\f5f7\";\n}\n\n.fa-researchgate:before {\n  content: \"\\f4f8\";\n}\n\n.fa-swift:before {\n  content: \"\\f8e1\";\n}\n\n.fa-angular:before {\n  content: \"\\f420\";\n}\n\n.fa-speakap:before {\n  content: \"\\f3f3\";\n}\n\n.fa-angrycreative:before {\n  content: \"\\f36e\";\n}\n\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n\n.fa-envira:before {\n  content: \"\\f299\";\n}\n\n.fa-google-scholar:before {\n  content: \"\\e63b\";\n}\n\n.fa-square-gitlab:before {\n  content: \"\\e5ae\";\n}\n\n.fa-gitlab-square:before {\n  content: \"\\e5ae\";\n}\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\";\n}\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n\n.fa-goodreads:before {\n  content: \"\\f3a8\";\n}\n\n.fa-square-odnoklassniki:before {\n  content: \"\\f264\";\n}\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\n.fa-sith:before {\n  content: \"\\f512\";\n}\n\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n\n.fa-page4:before {\n  content: \"\\f3d7\";\n}\n\n.fa-hashnode:before {\n  content: \"\\e499\";\n}\n\n.fa-react:before {\n  content: \"\\f41b\";\n}\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n\n.fa-squarespace:before {\n  content: \"\\f5be\";\n}\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n\n.fa-creative-commons-share:before {\n  content: \"\\f4f2\";\n}\n\n.fa-bitcoin:before {\n  content: \"\\f379\";\n}\n\n.fa-keycdn:before {\n  content: \"\\f3ba\";\n}\n\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n\n.fa-itch-io:before {\n  content: \"\\f83a\";\n}\n\n.fa-umbraco:before {\n  content: \"\\f8e8\";\n}\n\n.fa-galactic-senate:before {\n  content: \"\\f50d\";\n}\n\n.fa-ubuntu:before {\n  content: \"\\f7df\";\n}\n\n.fa-draft2digital:before {\n  content: \"\\f396\";\n}\n\n.fa-stripe:before {\n  content: \"\\f429\";\n}\n\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n\n.fa-gg:before {\n  content: \"\\f260\";\n}\n\n.fa-dhl:before {\n  content: \"\\f790\";\n}\n\n.fa-square-pinterest:before {\n  content: \"\\f0d3\";\n}\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n\n.fa-xing:before {\n  content: \"\\f168\";\n}\n\n.fa-blackberry:before {\n  content: \"\\f37b\";\n}\n\n.fa-creative-commons-pd:before {\n  content: \"\\f4ec\";\n}\n\n.fa-playstation:before {\n  content: \"\\f3df\";\n}\n\n.fa-quinscape:before {\n  content: \"\\f459\";\n}\n\n.fa-less:before {\n  content: \"\\f41d\";\n}\n\n.fa-blogger-b:before {\n  content: \"\\f37d\";\n}\n\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n\n.fa-signal-messenger:before {\n  content: \"\\e663\";\n}\n\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n\n.fa-typo3:before {\n  content: \"\\f42b\";\n}\n\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n\n.fa-dailymotion:before {\n  content: \"\\e052\";\n}\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\";\n}\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n\n.fa-bootstrap:before {\n  content: \"\\f836\";\n}\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n\n.fa-nfc-symbol:before {\n  content: \"\\e531\";\n}\n\n.fa-mintbit:before {\n  content: \"\\e62f\";\n}\n\n.fa-ethereum:before {\n  content: \"\\f42e\";\n}\n\n.fa-speaker-deck:before {\n  content: \"\\f83c\";\n}\n\n.fa-creative-commons-nc-eu:before {\n  content: \"\\f4e9\";\n}\n\n.fa-patreon:before {\n  content: \"\\f3d9\";\n}\n\n.fa-avianex:before {\n  content: \"\\f374\";\n}\n\n.fa-ello:before {\n  content: \"\\f5f1\";\n}\n\n.fa-gofore:before {\n  content: \"\\f3a7\";\n}\n\n.fa-bimobject:before {\n  content: \"\\f378\";\n}\n\n.fa-brave-reverse:before {\n  content: \"\\e63d\";\n}\n\n.fa-facebook-f:before {\n  content: \"\\f39e\";\n}\n\n.fa-square-google-plus:before {\n  content: \"\\f0d4\";\n}\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n\n.fa-web-awesome:before {\n  content: \"\\e682\";\n}\n\n.fa-mandalorian:before {\n  content: \"\\f50f\";\n}\n\n.fa-first-order-alt:before {\n  content: \"\\f50a\";\n}\n\n.fa-osi:before {\n  content: \"\\f41a\";\n}\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n\n.fa-d-and-d-beyond:before {\n  content: \"\\f6ca\";\n}\n\n.fa-periscope:before {\n  content: \"\\f3da\";\n}\n\n.fa-fulcrum:before {\n  content: \"\\f50b\";\n}\n\n.fa-cloudscale:before {\n  content: \"\\f383\";\n}\n\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n\n.fa-mizuni:before {\n  content: \"\\f3cc\";\n}\n\n.fa-schlix:before {\n  content: \"\\f3ea\";\n}\n\n.fa-square-xing:before {\n  content: \"\\f169\";\n}\n\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n\n.fa-cloudversify:before {\n  content: \"\\f385\";\n}\n\n.fa-usps:before {\n  content: \"\\f7e1\";\n}\n\n.fa-megaport:before {\n  content: \"\\f5a3\";\n}\n\n.fa-magento:before {\n  content: \"\\f3c4\";\n}\n\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n\n.fa-fly:before {\n  content: \"\\f417\";\n}\n\n.fa-aviato:before {\n  content: \"\\f421\";\n}\n\n.fa-itunes:before {\n  content: \"\\f3b4\";\n}\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\";\n}\n\n.fa-blogger:before {\n  content: \"\\f37c\";\n}\n\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n\n.fa-viber:before {\n  content: \"\\f409\";\n}\n\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n\n.fa-letterboxd:before {\n  content: \"\\e62d\";\n}\n\n.fa-symfony:before {\n  content: \"\\f83d\";\n}\n\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\";\n}\n\n.fa-audible:before {\n  content: \"\\f373\";\n}\n\n.fa-think-peaks:before {\n  content: \"\\f731\";\n}\n\n.fa-bilibili:before {\n  content: \"\\e3d9\";\n}\n\n.fa-erlang:before {\n  content: \"\\f39d\";\n}\n\n.fa-x-twitter:before {\n  content: \"\\e61b\";\n}\n\n.fa-cotton-bureau:before {\n  content: \"\\f89e\";\n}\n\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n\n.fa-42-group:before {\n  content: \"\\e080\";\n}\n\n.fa-innosoft:before {\n  content: \"\\e080\";\n}\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n\n.fa-elementor:before {\n  content: \"\\f430\";\n}\n\n.fa-square-pied-piper:before {\n  content: \"\\e01e\";\n}\n\n.fa-pied-piper-square:before {\n  content: \"\\e01e\";\n}\n\n.fa-creative-commons-nd:before {\n  content: \"\\f4eb\";\n}\n\n.fa-palfed:before {\n  content: \"\\f3d8\";\n}\n\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n\n.fa-resolving:before {\n  content: \"\\f3e7\";\n}\n\n.fa-xbox:before {\n  content: \"\\f412\";\n}\n\n.fa-square-web-awesome-stroke:before {\n  content: \"\\e684\";\n}\n\n.fa-searchengin:before {\n  content: \"\\f3eb\";\n}\n\n.fa-tiktok:before {\n  content: \"\\e07b\";\n}\n\n.fa-square-facebook:before {\n  content: \"\\f082\";\n}\n\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n\n.fa-linkedin:before {\n  content: \"\\f08c\";\n}\n\n.fa-hubspot:before {\n  content: \"\\f3b2\";\n}\n\n.fa-deploydog:before {\n  content: \"\\f38e\";\n}\n\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n\n.fa-mixer:before {\n  content: \"\\e056\";\n}\n\n.fa-square-lastfm:before {\n  content: \"\\f203\";\n}\n\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n\n.fa-vimeo:before {\n  content: \"\\f40a\";\n}\n\n.fa-mendeley:before {\n  content: \"\\f7b3\";\n}\n\n.fa-uniregistry:before {\n  content: \"\\f404\";\n}\n\n.fa-figma:before {\n  content: \"\\f799\";\n}\n\n.fa-creative-commons-remix:before {\n  content: \"\\f4ee\";\n}\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\";\n}\n\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n\n.fa-cmplid:before {\n  content: \"\\e360\";\n}\n\n.fa-upwork:before {\n  content: \"\\e641\";\n}\n\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n\n.fa-gripfire:before {\n  content: \"\\f3ac\";\n}\n\n.fa-jedi-order:before {\n  content: \"\\f50e\";\n}\n\n.fa-uikit:before {\n  content: \"\\f403\";\n}\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\";\n}\n\n.fa-phabricator:before {\n  content: \"\\f3db\";\n}\n\n.fa-ussunnah:before {\n  content: \"\\f407\";\n}\n\n.fa-earlybirds:before {\n  content: \"\\f39a\";\n}\n\n.fa-trade-federation:before {\n  content: \"\\f513\";\n}\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\";\n}\n\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n\n.fa-square-upwork:before {\n  content: \"\\e67c\";\n}\n\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n\n.fa-google-play:before {\n  content: \"\\f3ab\";\n}\n\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n\n.fa-line:before {\n  content: \"\\f3c0\";\n}\n\n.fa-google-drive:before {\n  content: \"\\f3aa\";\n}\n\n.fa-servicestack:before {\n  content: \"\\f3ec\";\n}\n\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n\n.fa-deezer:before {\n  content: \"\\e077\";\n}\n\n.fa-raspberry-pi:before {\n  content: \"\\f7bb\";\n}\n\n.fa-jira:before {\n  content: \"\\f7b1\";\n}\n\n.fa-docker:before {\n  content: \"\\f395\";\n}\n\n.fa-screenpal:before {\n  content: \"\\e570\";\n}\n\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n\n.fa-gitter:before {\n  content: \"\\f426\";\n}\n\n.fa-d-and-d:before {\n  content: \"\\f38d\";\n}\n\n.fa-microblog:before {\n  content: \"\\e01a\";\n}\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n\n.fa-pied-piper-hat:before {\n  content: \"\\f4e5\";\n}\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\";\n}\n\n.fa-yandex:before {\n  content: \"\\f413\";\n}\n\n.fa-readme:before {\n  content: \"\\f4d5\";\n}\n\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n\n.fa-square-web-awesome:before {\n  content: \"\\e683\";\n}\n\n.fa-sass:before {\n  content: \"\\f41e\";\n}\n\n.fa-wirsindhandwerk:before {\n  content: \"\\e2d0\";\n}\n\n.fa-wsh:before {\n  content: \"\\e2d0\";\n}\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\";\n}\n\n.fa-salesforce:before {\n  content: \"\\f83b\";\n}\n\n.fa-octopus-deploy:before {\n  content: \"\\e082\";\n}\n\n.fa-medapps:before {\n  content: \"\\f3c6\";\n}\n\n.fa-ns8:before {\n  content: \"\\f3d5\";\n}\n\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n\n.fa-apper:before {\n  content: \"\\f371\";\n}\n\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n\n.fa-waze:before {\n  content: \"\\f83f\";\n}\n\n.fa-bluesky:before {\n  content: \"\\e671\";\n}\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ab\";\n}\n\n.fa-fantasy-flight-games:before {\n  content: \"\\f6dc\";\n}\n\n.fa-rust:before {\n  content: \"\\e07a\";\n}\n\n.fa-wix:before {\n  content: \"\\f5cf\";\n}\n\n.fa-square-behance:before {\n  content: \"\\f1b5\";\n}\n\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n\n.fa-supple:before {\n  content: \"\\f3f9\";\n}\n\n.fa-webflow:before {\n  content: \"\\e65c\";\n}\n\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n\n.fa-staylinked:before {\n  content: \"\\f3f5\";\n}\n\n.fa-kaggle:before {\n  content: \"\\f5fa\";\n}\n\n.fa-space-awesome:before {\n  content: \"\\e5ac\";\n}\n\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n\n.fa-cpanel:before {\n  content: \"\\f388\";\n}\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\";\n}\n\n.fa-square-git:before {\n  content: \"\\f1d2\";\n}\n\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n\n.fa-square-tumblr:before {\n  content: \"\\f174\";\n}\n\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n\n.fa-trello:before {\n  content: \"\\f181\";\n}\n\n.fa-creative-commons-nc-jp:before {\n  content: \"\\f4ea\";\n}\n\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n\n.fa-perbyte:before {\n  content: \"\\e083\";\n}\n\n.fa-grunt:before {\n  content: \"\\f3ad\";\n}\n\n.fa-weebly:before {\n  content: \"\\f5cc\";\n}\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n\n.fa-themeco:before {\n  content: \"\\f5c6\";\n}\n\n.fa-python:before {\n  content: \"\\f3e2\";\n}\n\n.fa-android:before {\n  content: \"\\f17b\";\n}\n\n.fa-bots:before {\n  content: \"\\e340\";\n}\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n\n.fa-hornbill:before {\n  content: \"\\f592\";\n}\n\n.fa-js:before {\n  content: \"\\f3b8\";\n}\n\n.fa-ideal:before {\n  content: \"\\e013\";\n}\n\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n\n.fa-dev:before {\n  content: \"\\f6cc\";\n}\n\n.fa-sketch:before {\n  content: \"\\f7c6\";\n}\n\n.fa-yandex-international:before {\n  content: \"\\f414\";\n}\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n\n.fa-uber:before {\n  content: \"\\f402\";\n}\n\n.fa-github:before {\n  content: \"\\f09b\";\n}\n\n.fa-php:before {\n  content: \"\\f457\";\n}\n\n.fa-alipay:before {\n  content: \"\\f642\";\n}\n\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n\n.fa-firefox-browser:before {\n  content: \"\\e007\";\n}\n\n.fa-replyd:before {\n  content: \"\\f3e6\";\n}\n\n.fa-suse:before {\n  content: \"\\f7d6\";\n}\n\n.fa-jenkins:before {\n  content: \"\\f3b6\";\n}\n\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n\n.fa-rockrms:before {\n  content: \"\\f3e9\";\n}\n\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n\n.fa-buffer:before {\n  content: \"\\f837\";\n}\n\n.fa-npm:before {\n  content: \"\\f3d4\";\n}\n\n.fa-yammer:before {\n  content: \"\\f840\";\n}\n\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n\n.fa-stubber:before {\n  content: \"\\e5c7\";\n}\n\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n\n.fa-telegram-plane:before {\n  content: \"\\f2c6\";\n}\n\n.fa-old-republic:before {\n  content: \"\\f510\";\n}\n\n.fa-odysee:before {\n  content: \"\\e5c6\";\n}\n\n.fa-square-whatsapp:before {\n  content: \"\\f40c\";\n}\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\";\n}\n\n.fa-node-js:before {\n  content: \"\\f3d3\";\n}\n\n.fa-edge-legacy:before {\n  content: \"\\e078\";\n}\n\n.fa-slack:before {\n  content: \"\\f198\";\n}\n\n.fa-slack-hash:before {\n  content: \"\\f198\";\n}\n\n.fa-medrt:before {\n  content: \"\\f3c8\";\n}\n\n.fa-usb:before {\n  content: \"\\f287\";\n}\n\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n\n.fa-vaadin:before {\n  content: \"\\f408\";\n}\n\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n\n.fa-square-x-twitter:before {\n  content: \"\\e61a\";\n}\n\n.fa-reacteurope:before {\n  content: \"\\f75d\";\n}\n\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n\n.fa-medium-m:before {\n  content: \"\\f23a\";\n}\n\n.fa-amilia:before {\n  content: \"\\f36d\";\n}\n\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n\n.fa-flipboard:before {\n  content: \"\\f44d\";\n}\n\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n\n.fa-critical-role:before {\n  content: \"\\f6c9\";\n}\n\n.fa-sitrox:before {\n  content: \"\\e44a\";\n}\n\n.fa-discourse:before {\n  content: \"\\f393\";\n}\n\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n\n.fa-mastodon:before {\n  content: \"\\f4f6\";\n}\n\n.fa-airbnb:before {\n  content: \"\\f834\";\n}\n\n.fa-wolf-pack-battalion:before {\n  content: \"\\f514\";\n}\n\n.fa-buy-n-large:before {\n  content: \"\\f8a6\";\n}\n\n.fa-gulp:before {\n  content: \"\\f3ae\";\n}\n\n.fa-creative-commons-sampling-plus:before {\n  content: \"\\f4f1\";\n}\n\n.fa-strava:before {\n  content: \"\\f428\";\n}\n\n.fa-ember:before {\n  content: \"\\f423\";\n}\n\n.fa-canadian-maple-leaf:before {\n  content: \"\\f785\";\n}\n\n.fa-teamspeak:before {\n  content: \"\\f4f9\";\n}\n\n.fa-pushed:before {\n  content: \"\\f3e1\";\n}\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\";\n}\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\";\n}\n\n.fa-wodu:before {\n  content: \"\\e088\";\n}\n\n.fa-google-pay:before {\n  content: \"\\e079\";\n}\n\n.fa-intercom:before {\n  content: \"\\f7af\";\n}\n\n.fa-zhihu:before {\n  content: \"\\f63f\";\n}\n\n.fa-korvue:before {\n  content: \"\\f42f\";\n}\n\n.fa-pix:before {\n  content: \"\\e43a\";\n}\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\";\n}\n\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/core\"\n */\n/*!\n * jQuery UI CSS Framework 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/category/theming/\n */\n/*\n *= require jquery-ui/theme\n */\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n  display: none;\n}\n\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n.ui-helper-reset {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  outline: 0;\n  line-height: 1.3;\n  text-decoration: none;\n  font-size: 100%;\n  list-style: none;\n}\n\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n  content: \"\";\n  display: table;\n  border-collapse: collapse;\n}\n\n.ui-helper-clearfix:after {\n  clear: both;\n}\n\n.ui-helper-zfix {\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  position: absolute;\n  opacity: 0;\n  -ms-filter: \"alpha(opacity=0)\"; /* support: IE8 */\n}\n\n.ui-front {\n  z-index: 100;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n  cursor: default !important;\n  pointer-events: none;\n}\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n  display: inline-block;\n  vertical-align: middle;\n  margin-top: -0.25em;\n  position: relative;\n  text-indent: -99999px;\n  overflow: hidden;\n  background-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n  left: 50%;\n  margin-left: -8px;\n  display: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/theme\"\n */\n/*!\n * jQuery UI CSS Framework 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit https://jqueryui.com/themeroller/\n */\n/*\n *= depend_on_asset \"jquery-ui/ui-icons_444444_256x240.png\"\n *= depend_on_asset \"jquery-ui/ui-icons_555555_256x240.png\"\n *= depend_on_asset \"jquery-ui/ui-icons_ffffff_256x240.png\"\n *= depend_on_asset \"jquery-ui/ui-icons_777620_256x240.png\"\n *= depend_on_asset \"jquery-ui/ui-icons_cc0000_256x240.png\"\n *= depend_on_asset \"jquery-ui/ui-icons_777777_256x240.png\"\n */\n/* Component containers\n----------------------------------*/\n.ui-widget {\n  font-family: Arial, Helvetica, sans-serif;\n  font-size: 1em;\n}\n\n.ui-widget .ui-widget {\n  font-size: 1em;\n}\n\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n  font-family: Arial, Helvetica, sans-serif;\n  font-size: 1em;\n}\n\n.ui-widget.ui-widget-content {\n  border: 1px solid #c5c5c5;\n}\n\n.ui-widget-content {\n  border: 1px solid #dddddd;\n  background: #ffffff;\n  color: #333333;\n}\n\n.ui-widget-content a {\n  color: #333333;\n}\n\n.ui-widget-header {\n  border: 1px solid #dddddd;\n  background: #e9e9e9;\n  color: #333333;\n  font-weight: bold;\n}\n\n.ui-widget-header a {\n  color: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n  border: 1px solid #c5c5c5;\n  background: #f6f6f6;\n  font-weight: normal;\n  color: #454545;\n}\n\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n  color: #454545;\n  text-decoration: none;\n}\n\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n  border: 1px solid #cccccc;\n  background: #ededed;\n  font-weight: normal;\n  color: #2b2b2b;\n}\n\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n  color: #2b2b2b;\n  text-decoration: none;\n}\n\n.ui-visual-focus {\n  box-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n  border: 1px solid #003eff;\n  background: #007fff;\n  font-weight: normal;\n  color: #ffffff;\n}\n\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n  border: #003eff;\n  background-color: #ffffff;\n}\n\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n  color: #ffffff;\n  text-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n  border: 1px solid #dad55e;\n  background: #fffa90;\n  color: #777620;\n}\n\n.ui-state-checked {\n  border: 1px solid #dad55e;\n  background: #fffa90;\n}\n\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n  color: #777620;\n}\n\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n  border: 1px solid #f1a899;\n  background: #fddfdf;\n  color: #5f3f3f;\n}\n\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n  color: #5f3f3f;\n}\n\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n  color: #5f3f3f;\n}\n\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n  font-weight: bold;\n}\n\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n  opacity: 0.7;\n  -ms-filter: \"alpha(opacity=70)\"; /* support: IE8 */\n  font-weight: normal;\n}\n\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n  opacity: 0.35;\n  -ms-filter: \"alpha(opacity=35)\"; /* support: IE8 */\n  background-image: none;\n}\n\n.ui-state-disabled .ui-icon {\n  -ms-filter: \"alpha(opacity=35)\"; /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n/* states and images */\n.ui-icon {\n  width: 16px;\n  height: 16px;\n}\n\n.ui-icon,\n.ui-widget-content .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_444444_256x240.png\");\n}\n\n.ui-widget-header .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_444444_256x240.png\");\n}\n\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_555555_256x240.png\");\n}\n\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_ffffff_256x240.png\");\n}\n\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_777620_256x240.png\");\n}\n\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_cc0000_256x240.png\");\n}\n\n.ui-button .ui-icon {\n  background-image: url(\"jquery-ui/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n/* Three classes needed to override `.ui-button:hover .ui-icon` */\n.ui-icon-blank.ui-icon-blank.ui-icon-blank {\n  background-image: none;\n}\n\n.ui-icon-caret-1-n {\n  background-position: 0 0;\n}\n\n.ui-icon-caret-1-ne {\n  background-position: -16px 0;\n}\n\n.ui-icon-caret-1-e {\n  background-position: -32px 0;\n}\n\n.ui-icon-caret-1-se {\n  background-position: -48px 0;\n}\n\n.ui-icon-caret-1-s {\n  background-position: -65px 0;\n}\n\n.ui-icon-caret-1-sw {\n  background-position: -80px 0;\n}\n\n.ui-icon-caret-1-w {\n  background-position: -96px 0;\n}\n\n.ui-icon-caret-1-nw {\n  background-position: -112px 0;\n}\n\n.ui-icon-caret-2-n-s {\n  background-position: -128px 0;\n}\n\n.ui-icon-caret-2-e-w {\n  background-position: -144px 0;\n}\n\n.ui-icon-triangle-1-n {\n  background-position: 0 -16px;\n}\n\n.ui-icon-triangle-1-ne {\n  background-position: -16px -16px;\n}\n\n.ui-icon-triangle-1-e {\n  background-position: -32px -16px;\n}\n\n.ui-icon-triangle-1-se {\n  background-position: -48px -16px;\n}\n\n.ui-icon-triangle-1-s {\n  background-position: -65px -16px;\n}\n\n.ui-icon-triangle-1-sw {\n  background-position: -80px -16px;\n}\n\n.ui-icon-triangle-1-w {\n  background-position: -96px -16px;\n}\n\n.ui-icon-triangle-1-nw {\n  background-position: -112px -16px;\n}\n\n.ui-icon-triangle-2-n-s {\n  background-position: -128px -16px;\n}\n\n.ui-icon-triangle-2-e-w {\n  background-position: -144px -16px;\n}\n\n.ui-icon-arrow-1-n {\n  background-position: 0 -32px;\n}\n\n.ui-icon-arrow-1-ne {\n  background-position: -16px -32px;\n}\n\n.ui-icon-arrow-1-e {\n  background-position: -32px -32px;\n}\n\n.ui-icon-arrow-1-se {\n  background-position: -48px -32px;\n}\n\n.ui-icon-arrow-1-s {\n  background-position: -65px -32px;\n}\n\n.ui-icon-arrow-1-sw {\n  background-position: -80px -32px;\n}\n\n.ui-icon-arrow-1-w {\n  background-position: -96px -32px;\n}\n\n.ui-icon-arrow-1-nw {\n  background-position: -112px -32px;\n}\n\n.ui-icon-arrow-2-n-s {\n  background-position: -128px -32px;\n}\n\n.ui-icon-arrow-2-ne-sw {\n  background-position: -144px -32px;\n}\n\n.ui-icon-arrow-2-e-w {\n  background-position: -160px -32px;\n}\n\n.ui-icon-arrow-2-se-nw {\n  background-position: -176px -32px;\n}\n\n.ui-icon-arrowstop-1-n {\n  background-position: -192px -32px;\n}\n\n.ui-icon-arrowstop-1-e {\n  background-position: -208px -32px;\n}\n\n.ui-icon-arrowstop-1-s {\n  background-position: -224px -32px;\n}\n\n.ui-icon-arrowstop-1-w {\n  background-position: -240px -32px;\n}\n\n.ui-icon-arrowthick-1-n {\n  background-position: 1px -48px;\n}\n\n.ui-icon-arrowthick-1-ne {\n  background-position: -16px -48px;\n}\n\n.ui-icon-arrowthick-1-e {\n  background-position: -32px -48px;\n}\n\n.ui-icon-arrowthick-1-se {\n  background-position: -48px -48px;\n}\n\n.ui-icon-arrowthick-1-s {\n  background-position: -64px -48px;\n}\n\n.ui-icon-arrowthick-1-sw {\n  background-position: -80px -48px;\n}\n\n.ui-icon-arrowthick-1-w {\n  background-position: -96px -48px;\n}\n\n.ui-icon-arrowthick-1-nw {\n  background-position: -112px -48px;\n}\n\n.ui-icon-arrowthick-2-n-s {\n  background-position: -128px -48px;\n}\n\n.ui-icon-arrowthick-2-ne-sw {\n  background-position: -144px -48px;\n}\n\n.ui-icon-arrowthick-2-e-w {\n  background-position: -160px -48px;\n}\n\n.ui-icon-arrowthick-2-se-nw {\n  background-position: -176px -48px;\n}\n\n.ui-icon-arrowthickstop-1-n {\n  background-position: -192px -48px;\n}\n\n.ui-icon-arrowthickstop-1-e {\n  background-position: -208px -48px;\n}\n\n.ui-icon-arrowthickstop-1-s {\n  background-position: -224px -48px;\n}\n\n.ui-icon-arrowthickstop-1-w {\n  background-position: -240px -48px;\n}\n\n.ui-icon-arrowreturnthick-1-w {\n  background-position: 0 -64px;\n}\n\n.ui-icon-arrowreturnthick-1-n {\n  background-position: -16px -64px;\n}\n\n.ui-icon-arrowreturnthick-1-e {\n  background-position: -32px -64px;\n}\n\n.ui-icon-arrowreturnthick-1-s {\n  background-position: -48px -64px;\n}\n\n.ui-icon-arrowreturn-1-w {\n  background-position: -64px -64px;\n}\n\n.ui-icon-arrowreturn-1-n {\n  background-position: -80px -64px;\n}\n\n.ui-icon-arrowreturn-1-e {\n  background-position: -96px -64px;\n}\n\n.ui-icon-arrowreturn-1-s {\n  background-position: -112px -64px;\n}\n\n.ui-icon-arrowrefresh-1-w {\n  background-position: -128px -64px;\n}\n\n.ui-icon-arrowrefresh-1-n {\n  background-position: -144px -64px;\n}\n\n.ui-icon-arrowrefresh-1-e {\n  background-position: -160px -64px;\n}\n\n.ui-icon-arrowrefresh-1-s {\n  background-position: -176px -64px;\n}\n\n.ui-icon-arrow-4 {\n  background-position: 0 -80px;\n}\n\n.ui-icon-arrow-4-diag {\n  background-position: -16px -80px;\n}\n\n.ui-icon-extlink {\n  background-position: -32px -80px;\n}\n\n.ui-icon-newwin {\n  background-position: -48px -80px;\n}\n\n.ui-icon-refresh {\n  background-position: -64px -80px;\n}\n\n.ui-icon-shuffle {\n  background-position: -80px -80px;\n}\n\n.ui-icon-transfer-e-w {\n  background-position: -96px -80px;\n}\n\n.ui-icon-transferthick-e-w {\n  background-position: -112px -80px;\n}\n\n.ui-icon-folder-collapsed {\n  background-position: 0 -96px;\n}\n\n.ui-icon-folder-open {\n  background-position: -16px -96px;\n}\n\n.ui-icon-document {\n  background-position: -32px -96px;\n}\n\n.ui-icon-document-b {\n  background-position: -48px -96px;\n}\n\n.ui-icon-note {\n  background-position: -64px -96px;\n}\n\n.ui-icon-mail-closed {\n  background-position: -80px -96px;\n}\n\n.ui-icon-mail-open {\n  background-position: -96px -96px;\n}\n\n.ui-icon-suitcase {\n  background-position: -112px -96px;\n}\n\n.ui-icon-comment {\n  background-position: -128px -96px;\n}\n\n.ui-icon-person {\n  background-position: -144px -96px;\n}\n\n.ui-icon-print {\n  background-position: -160px -96px;\n}\n\n.ui-icon-trash {\n  background-position: -176px -96px;\n}\n\n.ui-icon-locked {\n  background-position: -192px -96px;\n}\n\n.ui-icon-unlocked {\n  background-position: -208px -96px;\n}\n\n.ui-icon-bookmark {\n  background-position: -224px -96px;\n}\n\n.ui-icon-tag {\n  background-position: -240px -96px;\n}\n\n.ui-icon-home {\n  background-position: 0 -112px;\n}\n\n.ui-icon-flag {\n  background-position: -16px -112px;\n}\n\n.ui-icon-calendar {\n  background-position: -32px -112px;\n}\n\n.ui-icon-cart {\n  background-position: -48px -112px;\n}\n\n.ui-icon-pencil {\n  background-position: -64px -112px;\n}\n\n.ui-icon-clock {\n  background-position: -80px -112px;\n}\n\n.ui-icon-disk {\n  background-position: -96px -112px;\n}\n\n.ui-icon-calculator {\n  background-position: -112px -112px;\n}\n\n.ui-icon-zoomin {\n  background-position: -128px -112px;\n}\n\n.ui-icon-zoomout {\n  background-position: -144px -112px;\n}\n\n.ui-icon-search {\n  background-position: -160px -112px;\n}\n\n.ui-icon-wrench {\n  background-position: -176px -112px;\n}\n\n.ui-icon-gear {\n  background-position: -192px -112px;\n}\n\n.ui-icon-heart {\n  background-position: -208px -112px;\n}\n\n.ui-icon-star {\n  background-position: -224px -112px;\n}\n\n.ui-icon-link {\n  background-position: -240px -112px;\n}\n\n.ui-icon-cancel {\n  background-position: 0 -128px;\n}\n\n.ui-icon-plus {\n  background-position: -16px -128px;\n}\n\n.ui-icon-plusthick {\n  background-position: -32px -128px;\n}\n\n.ui-icon-minus {\n  background-position: -48px -128px;\n}\n\n.ui-icon-minusthick {\n  background-position: -64px -128px;\n}\n\n.ui-icon-close {\n  background-position: -80px -128px;\n}\n\n.ui-icon-closethick {\n  background-position: -96px -128px;\n}\n\n.ui-icon-key {\n  background-position: -112px -128px;\n}\n\n.ui-icon-lightbulb {\n  background-position: -128px -128px;\n}\n\n.ui-icon-scissors {\n  background-position: -144px -128px;\n}\n\n.ui-icon-clipboard {\n  background-position: -160px -128px;\n}\n\n.ui-icon-copy {\n  background-position: -176px -128px;\n}\n\n.ui-icon-contact {\n  background-position: -192px -128px;\n}\n\n.ui-icon-image {\n  background-position: -208px -128px;\n}\n\n.ui-icon-video {\n  background-position: -224px -128px;\n}\n\n.ui-icon-script {\n  background-position: -240px -128px;\n}\n\n.ui-icon-alert {\n  background-position: 0 -144px;\n}\n\n.ui-icon-info {\n  background-position: -16px -144px;\n}\n\n.ui-icon-notice {\n  background-position: -32px -144px;\n}\n\n.ui-icon-help {\n  background-position: -48px -144px;\n}\n\n.ui-icon-check {\n  background-position: -64px -144px;\n}\n\n.ui-icon-bullet {\n  background-position: -80px -144px;\n}\n\n.ui-icon-radio-on {\n  background-position: -96px -144px;\n}\n\n.ui-icon-radio-off {\n  background-position: -112px -144px;\n}\n\n.ui-icon-pin-w {\n  background-position: -128px -144px;\n}\n\n.ui-icon-pin-s {\n  background-position: -144px -144px;\n}\n\n.ui-icon-play {\n  background-position: 0 -160px;\n}\n\n.ui-icon-pause {\n  background-position: -16px -160px;\n}\n\n.ui-icon-seek-next {\n  background-position: -32px -160px;\n}\n\n.ui-icon-seek-prev {\n  background-position: -48px -160px;\n}\n\n.ui-icon-seek-end {\n  background-position: -64px -160px;\n}\n\n.ui-icon-seek-start {\n  background-position: -80px -160px;\n}\n\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first {\n  background-position: -80px -160px;\n}\n\n.ui-icon-stop {\n  background-position: -96px -160px;\n}\n\n.ui-icon-eject {\n  background-position: -112px -160px;\n}\n\n.ui-icon-volume-off {\n  background-position: -128px -160px;\n}\n\n.ui-icon-volume-on {\n  background-position: -144px -160px;\n}\n\n.ui-icon-power {\n  background-position: 0 -176px;\n}\n\n.ui-icon-signal-diag {\n  background-position: -16px -176px;\n}\n\n.ui-icon-signal {\n  background-position: -32px -176px;\n}\n\n.ui-icon-battery-0 {\n  background-position: -48px -176px;\n}\n\n.ui-icon-battery-1 {\n  background-position: -64px -176px;\n}\n\n.ui-icon-battery-2 {\n  background-position: -80px -176px;\n}\n\n.ui-icon-battery-3 {\n  background-position: -96px -176px;\n}\n\n.ui-icon-circle-plus {\n  background-position: 0 -192px;\n}\n\n.ui-icon-circle-minus {\n  background-position: -16px -192px;\n}\n\n.ui-icon-circle-close {\n  background-position: -32px -192px;\n}\n\n.ui-icon-circle-triangle-e {\n  background-position: -48px -192px;\n}\n\n.ui-icon-circle-triangle-s {\n  background-position: -64px -192px;\n}\n\n.ui-icon-circle-triangle-w {\n  background-position: -80px -192px;\n}\n\n.ui-icon-circle-triangle-n {\n  background-position: -96px -192px;\n}\n\n.ui-icon-circle-arrow-e {\n  background-position: -112px -192px;\n}\n\n.ui-icon-circle-arrow-s {\n  background-position: -128px -192px;\n}\n\n.ui-icon-circle-arrow-w {\n  background-position: -144px -192px;\n}\n\n.ui-icon-circle-arrow-n {\n  background-position: -160px -192px;\n}\n\n.ui-icon-circle-zoomin {\n  background-position: -176px -192px;\n}\n\n.ui-icon-circle-zoomout {\n  background-position: -192px -192px;\n}\n\n.ui-icon-circle-check {\n  background-position: -208px -192px;\n}\n\n.ui-icon-circlesmall-plus {\n  background-position: 0 -208px;\n}\n\n.ui-icon-circlesmall-minus {\n  background-position: -16px -208px;\n}\n\n.ui-icon-circlesmall-close {\n  background-position: -32px -208px;\n}\n\n.ui-icon-squaresmall-plus {\n  background-position: -48px -208px;\n}\n\n.ui-icon-squaresmall-minus {\n  background-position: -64px -208px;\n}\n\n.ui-icon-squaresmall-close {\n  background-position: -80px -208px;\n}\n\n.ui-icon-grip-dotted-vertical {\n  background-position: 0 -224px;\n}\n\n.ui-icon-grip-dotted-horizontal {\n  background-position: -16px -224px;\n}\n\n.ui-icon-grip-solid-vertical {\n  background-position: -32px -224px;\n}\n\n.ui-icon-grip-solid-horizontal {\n  background-position: -48px -224px;\n}\n\n.ui-icon-gripsmall-diagonal-se {\n  background-position: -64px -224px;\n}\n\n.ui-icon-grip-diagonal-se {\n  background-position: -80px -224px;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n  border-top-left-radius: 3px;\n}\n\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n  border-top-right-radius: 3px;\n}\n\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n  border-bottom-left-radius: 3px;\n}\n\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n  border-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n  background: #aaaaaa;\n  opacity: 0.3;\n  -ms-filter: \"alpha(opacity=30)\"; /* support: IE8 */\n}\n\n.ui-widget-shadow {\n  -webkit-box-shadow: 0 0 5px #666666;\n  box-shadow: 0 0 5px #666666;\n}\n\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/datepicker\"\n */\n/*!\n * jQuery UI Datepicker 1.13.3\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/datepicker/#theming\n */\n/*\n *= require jquery-ui/theme\n */\n.ui-datepicker {\n  width: 17em;\n  padding: 0.2em 0.2em 0;\n  display: none;\n}\n\n.ui-datepicker .ui-datepicker-header {\n  position: relative;\n  padding: 0.2em 0;\n}\n\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n  position: absolute;\n  top: 2px;\n  width: 1.8em;\n  height: 1.8em;\n}\n\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n  top: 1px;\n}\n\n.ui-datepicker .ui-datepicker-prev {\n  left: 2px;\n}\n\n.ui-datepicker .ui-datepicker-next {\n  right: 2px;\n}\n\n.ui-datepicker .ui-datepicker-prev-hover {\n  left: 1px;\n}\n\n.ui-datepicker .ui-datepicker-next-hover {\n  right: 1px;\n}\n\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n  display: block;\n  position: absolute;\n  left: 50%;\n  margin-left: -8px;\n  top: 50%;\n  margin-top: -8px;\n}\n\n.ui-datepicker .ui-datepicker-title {\n  margin: 0 2.3em;\n  line-height: 1.8em;\n  text-align: center;\n}\n\n.ui-datepicker .ui-datepicker-title select {\n  font-size: 1em;\n  margin: 1px 0;\n}\n\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n  width: 45%;\n}\n\n.ui-datepicker table {\n  width: 100%;\n  font-size: 0.9em;\n  border-collapse: collapse;\n  margin: 0 0 0.4em;\n}\n\n.ui-datepicker th {\n  padding: 0.7em 0.3em;\n  text-align: center;\n  font-weight: bold;\n  border: 0;\n}\n\n.ui-datepicker td {\n  border: 0;\n  padding: 1px;\n}\n\n.ui-datepicker td span,\n.ui-datepicker td a {\n  display: block;\n  padding: 0.2em;\n  text-align: right;\n  text-decoration: none;\n}\n\n.ui-datepicker .ui-datepicker-buttonpane {\n  background-image: none;\n  margin: 0.7em 0 0 0;\n  padding: 0 0.2em;\n  border-left: 0;\n  border-right: 0;\n  border-bottom: 0;\n}\n\n.ui-datepicker .ui-datepicker-buttonpane button {\n  float: right;\n  margin: 0.5em 0.2em 0.4em;\n  cursor: pointer;\n  padding: 0.2em 0.6em 0.3em 0.6em;\n  width: auto;\n  overflow: visible;\n}\n\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n  float: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n  width: auto;\n}\n\n.ui-datepicker-multi .ui-datepicker-group {\n  float: left;\n}\n\n.ui-datepicker-multi .ui-datepicker-group table {\n  width: 95%;\n  margin: 0 auto 0.4em;\n}\n\n.ui-datepicker-multi-2 .ui-datepicker-group {\n  width: 50%;\n}\n\n.ui-datepicker-multi-3 .ui-datepicker-group {\n  width: 33.3%;\n}\n\n.ui-datepicker-multi-4 .ui-datepicker-group {\n  width: 25%;\n}\n\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n  border-left-width: 0;\n}\n\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n  clear: left;\n}\n\n.ui-datepicker-row-break {\n  clear: both;\n  width: 100%;\n  font-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n  direction: rtl;\n}\n\n.ui-datepicker-rtl .ui-datepicker-prev {\n  right: 2px;\n  left: auto;\n}\n\n.ui-datepicker-rtl .ui-datepicker-next {\n  left: 2px;\n  right: auto;\n}\n\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n  right: 1px;\n  left: auto;\n}\n\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n  left: 1px;\n  right: auto;\n}\n\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n  clear: right;\n}\n\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n  float: left;\n}\n\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n  float: right;\n}\n\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n  border-right-width: 0;\n  border-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n  display: block;\n  text-indent: -99999px;\n  overflow: hidden;\n  background-repeat: no-repeat;\n  left: 0.5em;\n  top: 0.3em;\n}\n\n/*!\n * WiceGrid CSS\n *\n * self\n */\n.wg-detached-filter .text-filter-container input, .wice-grid .text-filter-container input {\n  width: auto;\n  margin-right: 10px;\n  display: inline;\n}\n.wg-detached-filter thead th select, .wice-grid thead th select {\n  display: inline-block;\n}\n.wg-detached-filter a.date-label, .wice-grid a.date-label {\n  text-decoration: none;\n}\n.wg-detached-filter a.date-label:hover, .wice-grid a.date-label:hover {\n  text-decoration: line-through;\n}\n.wg-detached-filter .clickable, .wice-grid .clickable {\n  cursor: pointer;\n  margin-bottom: 2px;\n  margin-right: 2px;\n}\n.wg-detached-filter .ui-datepicker-trigger, .wg-detached-filter .wg-detached-filter .ui-datepicker-trigger, .wice-grid .ui-datepicker-trigger, .wice-grid .wg-detached-filter .ui-datepicker-trigger {\n  cursor: pointer;\n}\n.wg-detached-filter .custom-dropdown-container .expand-multi-select-icon, .wg-detached-filter .custom-dropdown-container .collapse-multi-select-icon, .wice-grid .custom-dropdown-container .expand-multi-select-icon, .wice-grid .custom-dropdown-container .collapse-multi-select-icon {\n  width: 10px;\n  height: 10px;\n  display: inline-block;\n  margin-left: 5px;\n  vertical-align: top;\n}\n\n.wice-grid {\n  /* in case of twitter bootstrap :) */\n}\n.wice-grid .desc, .wice-grid .asc {\n  padding-right: 18px;\n  text-decoration: none;\n}\n.wice-grid .clickable.select-all, .wice-grid .clickable.deselect-all {\n  float: left;\n}\n.wice-grid thead th select {\n  width: auto;\n}\n.wice-grid .pagination {\n  margin: 0px;\n  float: left;\n}\n.wice-grid tr.wg-filter-row input[type=text] {\n  width: 100px;\n}\n.wice-grid .pagination_status {\n  font-weight: bold;\n  float: right;\n}\n\n.wice-grid-query-panel li {\n  list-style-type: none;\n}\n.wice-grid-query-panel ul {\n  margin-left: 0;\n}\n\ninput.wice-grid-save-query-field {\n  width: auto;\n  display: inline-block;\n  margin-right: 10px;\n}\n\n/*\n * @import \"font-awesome\"\n */\n/*!\n * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2022 Fonticons, Inc.\n */\n.fa {\n  font-family: var(--fa-style-family, \"Font Awesome 6 Free\");\n  font-weight: var(--fa-style, 900);\n}\n\n.fa,\n.fa-classic,\n.fa-sharp,\n.fas,\n.fa-solid,\n.far,\n.fa-regular,\n.fab,\n.fa-brands {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: var(--fa-display, inline-block);\n  font-style: normal;\n  font-variant: normal;\n  line-height: 1;\n  text-rendering: auto;\n}\n\n.fas,\n.fa-classic,\n.fa-solid,\n.far,\n.fa-regular {\n  font-family: \"Font Awesome 6 Free\";\n}\n\n.fab,\n.fa-brands {\n  font-family: \"Font Awesome 6 Brands\";\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-2xs {\n  font-size: 0.625em;\n  line-height: 0.1em;\n  vertical-align: 0.225em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n  line-height: 0.0833333337em;\n  vertical-align: 0.125em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n  line-height: 0.0714285718em;\n  vertical-align: 0.0535714295em;\n}\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: 0.05em;\n  vertical-align: -0.075em;\n}\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: 0.0416666682em;\n  vertical-align: -0.125em;\n}\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: 0.03125em;\n  vertical-align: -0.1875em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: var(--fa-li-margin, 2.5em);\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: calc(var(--fa-li-width, 2em) * -1);\n  position: absolute;\n  text-align: center;\n  width: var(--fa-li-width, 2em);\n  line-height: inherit;\n}\n\n.fa-border {\n  border-color: var(--fa-border-color, #eee);\n  border-radius: var(--fa-border-radius, 0.1em);\n  border-style: var(--fa-border-style, solid);\n  border-width: var(--fa-border-width, 0.08em);\n  padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\n}\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, 0.3em);\n}\n\n.fa-beat {\n  animation-name: fa-beat;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-bounce {\n  animation-name: fa-bounce;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\n}\n\n.fa-fade {\n  animation-name: fa-fade;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-beat-fade {\n  animation-name: fa-beat-fade;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\n}\n\n.fa-flip {\n  animation-name: fa-flip;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out);\n}\n\n.fa-shake {\n  animation-name: fa-shake;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin {\n  animation-name: fa-spin;\n  animation-delay: var(--fa-animation-delay, 0s);\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 2s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, linear);\n}\n\n.fa-spin-reverse {\n  --fa-animation-direction: reverse;\n}\n\n.fa-pulse,\n.fa-spin-pulse {\n  animation-name: fa-spin;\n  animation-direction: var(--fa-animation-direction, normal);\n  animation-duration: var(--fa-animation-duration, 1s);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-timing-function: var(--fa-animation-timing, steps(8));\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fa-beat,\n  .fa-bounce,\n  .fa-fade,\n  .fa-beat-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    animation-delay: -1ms;\n    animation-duration: 1ms;\n    animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s;\n  }\n}\n@keyframes fa-beat {\n  0%, 90% {\n    transform: scale(1);\n  }\n  45% {\n    transform: scale(var(--fa-beat-scale, 1.25));\n  }\n}\n@keyframes fa-bounce {\n  0% {\n    transform: scale(1, 1) translateY(0);\n  }\n  10% {\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\n  }\n  30% {\n    transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\n  }\n  50% {\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\n  }\n  57% {\n    transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\n  }\n  64% {\n    transform: scale(1, 1) translateY(0);\n  }\n  100% {\n    transform: scale(1, 1) translateY(0);\n  }\n}\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, 0.4);\n  }\n}\n@keyframes fa-beat-fade {\n  0%, 100% {\n    opacity: var(--fa-beat-fade-opacity, 0.4);\n    transform: scale(1);\n  }\n  50% {\n    opacity: 1;\n    transform: scale(var(--fa-beat-fade-scale, 1.125));\n  }\n}\n@keyframes fa-flip {\n  50% {\n    transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\n  }\n}\n@keyframes fa-shake {\n  0% {\n    transform: rotate(-15deg);\n  }\n  4% {\n    transform: rotate(15deg);\n  }\n  8%, 24% {\n    transform: rotate(-18deg);\n  }\n  12%, 28% {\n    transform: rotate(18deg);\n  }\n  16% {\n    transform: rotate(-22deg);\n  }\n  20% {\n    transform: rotate(22deg);\n  }\n  32% {\n    transform: rotate(-12deg);\n  }\n  36% {\n    transform: rotate(12deg);\n  }\n  40%, 100% {\n    transform: rotate(0deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  transform: scale(1, -1);\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  transform: scale(-1, -1);\n}\n\n.fa-rotate-by {\n  transform: rotate(var(--fa-rotate-angle, 0));\n}\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n  z-index: var(--fa-stack-z-index, auto);\n}\n\n.fa-stack-1x {\n  line-height: inherit;\n}\n\n.fa-stack-2x {\n  font-size: 2em;\n}\n\n.fa-inverse {\n  color: var(--fa-inverse, #fff);\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-0::before {\n  content: \"\\30 \";\n}\n\n.fa-1::before {\n  content: \"\\31 \";\n}\n\n.fa-2::before {\n  content: \"\\32 \";\n}\n\n.fa-3::before {\n  content: \"\\33 \";\n}\n\n.fa-4::before {\n  content: \"\\34 \";\n}\n\n.fa-5::before {\n  content: \"\\35 \";\n}\n\n.fa-6::before {\n  content: \"\\36 \";\n}\n\n.fa-7::before {\n  content: \"\\37 \";\n}\n\n.fa-8::before {\n  content: \"\\38 \";\n}\n\n.fa-9::before {\n  content: \"\\39 \";\n}\n\n.fa-fill-drip::before {\n  content: \"\\f576\";\n}\n\n.fa-arrows-to-circle::before {\n  content: \"\\e4bd\";\n}\n\n.fa-circle-chevron-right::before {\n  content: \"\\f138\";\n}\n\n.fa-chevron-circle-right::before {\n  content: \"\\f138\";\n}\n\n.fa-at::before {\n  content: \"\\@\";\n}\n\n.fa-trash-can::before {\n  content: \"\\f2ed\";\n}\n\n.fa-trash-alt::before {\n  content: \"\\f2ed\";\n}\n\n.fa-text-height::before {\n  content: \"\\f034\";\n}\n\n.fa-user-xmark::before {\n  content: \"\\f235\";\n}\n\n.fa-user-times::before {\n  content: \"\\f235\";\n}\n\n.fa-stethoscope::before {\n  content: \"\\f0f1\";\n}\n\n.fa-message::before {\n  content: \"\\f27a\";\n}\n\n.fa-comment-alt::before {\n  content: \"\\f27a\";\n}\n\n.fa-info::before {\n  content: \"\\f129\";\n}\n\n.fa-down-left-and-up-right-to-center::before {\n  content: \"\\f422\";\n}\n\n.fa-compress-alt::before {\n  content: \"\\f422\";\n}\n\n.fa-explosion::before {\n  content: \"\\e4e9\";\n}\n\n.fa-file-lines::before {\n  content: \"\\f15c\";\n}\n\n.fa-file-alt::before {\n  content: \"\\f15c\";\n}\n\n.fa-file-text::before {\n  content: \"\\f15c\";\n}\n\n.fa-wave-square::before {\n  content: \"\\f83e\";\n}\n\n.fa-ring::before {\n  content: \"\\f70b\";\n}\n\n.fa-building-un::before {\n  content: \"\\e4d9\";\n}\n\n.fa-dice-three::before {\n  content: \"\\f527\";\n}\n\n.fa-calendar-days::before {\n  content: \"\\f073\";\n}\n\n.fa-calendar-alt::before {\n  content: \"\\f073\";\n}\n\n.fa-anchor-circle-check::before {\n  content: \"\\e4aa\";\n}\n\n.fa-building-circle-arrow-right::before {\n  content: \"\\e4d1\";\n}\n\n.fa-volleyball::before {\n  content: \"\\f45f\";\n}\n\n.fa-volleyball-ball::before {\n  content: \"\\f45f\";\n}\n\n.fa-arrows-up-to-line::before {\n  content: \"\\e4c2\";\n}\n\n.fa-sort-down::before {\n  content: \"\\f0dd\";\n}\n\n.fa-sort-desc::before {\n  content: \"\\f0dd\";\n}\n\n.fa-circle-minus::before {\n  content: \"\\f056\";\n}\n\n.fa-minus-circle::before {\n  content: \"\\f056\";\n}\n\n.fa-door-open::before {\n  content: \"\\f52b\";\n}\n\n.fa-right-from-bracket::before {\n  content: \"\\f2f5\";\n}\n\n.fa-sign-out-alt::before {\n  content: \"\\f2f5\";\n}\n\n.fa-atom::before {\n  content: \"\\f5d2\";\n}\n\n.fa-soap::before {\n  content: \"\\e06e\";\n}\n\n.fa-icons::before {\n  content: \"\\f86d\";\n}\n\n.fa-heart-music-camera-bolt::before {\n  content: \"\\f86d\";\n}\n\n.fa-microphone-lines-slash::before {\n  content: \"\\f539\";\n}\n\n.fa-microphone-alt-slash::before {\n  content: \"\\f539\";\n}\n\n.fa-bridge-circle-check::before {\n  content: \"\\e4c9\";\n}\n\n.fa-pump-medical::before {\n  content: \"\\e06a\";\n}\n\n.fa-fingerprint::before {\n  content: \"\\f577\";\n}\n\n.fa-hand-point-right::before {\n  content: \"\\f0a4\";\n}\n\n.fa-magnifying-glass-location::before {\n  content: \"\\f689\";\n}\n\n.fa-search-location::before {\n  content: \"\\f689\";\n}\n\n.fa-forward-step::before {\n  content: \"\\f051\";\n}\n\n.fa-step-forward::before {\n  content: \"\\f051\";\n}\n\n.fa-face-smile-beam::before {\n  content: \"\\f5b8\";\n}\n\n.fa-smile-beam::before {\n  content: \"\\f5b8\";\n}\n\n.fa-flag-checkered::before {\n  content: \"\\f11e\";\n}\n\n.fa-football::before {\n  content: \"\\f44e\";\n}\n\n.fa-football-ball::before {\n  content: \"\\f44e\";\n}\n\n.fa-school-circle-exclamation::before {\n  content: \"\\e56c\";\n}\n\n.fa-crop::before {\n  content: \"\\f125\";\n}\n\n.fa-angles-down::before {\n  content: \"\\f103\";\n}\n\n.fa-angle-double-down::before {\n  content: \"\\f103\";\n}\n\n.fa-users-rectangle::before {\n  content: \"\\e594\";\n}\n\n.fa-people-roof::before {\n  content: \"\\e537\";\n}\n\n.fa-people-line::before {\n  content: \"\\e534\";\n}\n\n.fa-beer-mug-empty::before {\n  content: \"\\f0fc\";\n}\n\n.fa-beer::before {\n  content: \"\\f0fc\";\n}\n\n.fa-diagram-predecessor::before {\n  content: \"\\e477\";\n}\n\n.fa-arrow-up-long::before {\n  content: \"\\f176\";\n}\n\n.fa-long-arrow-up::before {\n  content: \"\\f176\";\n}\n\n.fa-fire-flame-simple::before {\n  content: \"\\f46a\";\n}\n\n.fa-burn::before {\n  content: \"\\f46a\";\n}\n\n.fa-person::before {\n  content: \"\\f183\";\n}\n\n.fa-male::before {\n  content: \"\\f183\";\n}\n\n.fa-laptop::before {\n  content: \"\\f109\";\n}\n\n.fa-file-csv::before {\n  content: \"\\f6dd\";\n}\n\n.fa-menorah::before {\n  content: \"\\f676\";\n}\n\n.fa-truck-plane::before {\n  content: \"\\e58f\";\n}\n\n.fa-record-vinyl::before {\n  content: \"\\f8d9\";\n}\n\n.fa-face-grin-stars::before {\n  content: \"\\f587\";\n}\n\n.fa-grin-stars::before {\n  content: \"\\f587\";\n}\n\n.fa-bong::before {\n  content: \"\\f55c\";\n}\n\n.fa-spaghetti-monster-flying::before {\n  content: \"\\f67b\";\n}\n\n.fa-pastafarianism::before {\n  content: \"\\f67b\";\n}\n\n.fa-arrow-down-up-across-line::before {\n  content: \"\\e4af\";\n}\n\n.fa-spoon::before {\n  content: \"\\f2e5\";\n}\n\n.fa-utensil-spoon::before {\n  content: \"\\f2e5\";\n}\n\n.fa-jar-wheat::before {\n  content: \"\\e517\";\n}\n\n.fa-envelopes-bulk::before {\n  content: \"\\f674\";\n}\n\n.fa-mail-bulk::before {\n  content: \"\\f674\";\n}\n\n.fa-file-circle-exclamation::before {\n  content: \"\\e4eb\";\n}\n\n.fa-circle-h::before {\n  content: \"\\f47e\";\n}\n\n.fa-hospital-symbol::before {\n  content: \"\\f47e\";\n}\n\n.fa-pager::before {\n  content: \"\\f815\";\n}\n\n.fa-address-book::before {\n  content: \"\\f2b9\";\n}\n\n.fa-contact-book::before {\n  content: \"\\f2b9\";\n}\n\n.fa-strikethrough::before {\n  content: \"\\f0cc\";\n}\n\n.fa-k::before {\n  content: \"K\";\n}\n\n.fa-landmark-flag::before {\n  content: \"\\e51c\";\n}\n\n.fa-pencil::before {\n  content: \"\\f303\";\n}\n\n.fa-pencil-alt::before {\n  content: \"\\f303\";\n}\n\n.fa-backward::before {\n  content: \"\\f04a\";\n}\n\n.fa-caret-right::before {\n  content: \"\\f0da\";\n}\n\n.fa-comments::before {\n  content: \"\\f086\";\n}\n\n.fa-paste::before {\n  content: \"\\f0ea\";\n}\n\n.fa-file-clipboard::before {\n  content: \"\\f0ea\";\n}\n\n.fa-code-pull-request::before {\n  content: \"\\e13c\";\n}\n\n.fa-clipboard-list::before {\n  content: \"\\f46d\";\n}\n\n.fa-truck-ramp-box::before {\n  content: \"\\f4de\";\n}\n\n.fa-truck-loading::before {\n  content: \"\\f4de\";\n}\n\n.fa-user-check::before {\n  content: \"\\f4fc\";\n}\n\n.fa-vial-virus::before {\n  content: \"\\e597\";\n}\n\n.fa-sheet-plastic::before {\n  content: \"\\e571\";\n}\n\n.fa-blog::before {\n  content: \"\\f781\";\n}\n\n.fa-user-ninja::before {\n  content: \"\\f504\";\n}\n\n.fa-person-arrow-up-from-line::before {\n  content: \"\\e539\";\n}\n\n.fa-scroll-torah::before {\n  content: \"\\f6a0\";\n}\n\n.fa-torah::before {\n  content: \"\\f6a0\";\n}\n\n.fa-broom-ball::before {\n  content: \"\\f458\";\n}\n\n.fa-quidditch::before {\n  content: \"\\f458\";\n}\n\n.fa-quidditch-broom-ball::before {\n  content: \"\\f458\";\n}\n\n.fa-toggle-off::before {\n  content: \"\\f204\";\n}\n\n.fa-box-archive::before {\n  content: \"\\f187\";\n}\n\n.fa-archive::before {\n  content: \"\\f187\";\n}\n\n.fa-person-drowning::before {\n  content: \"\\e545\";\n}\n\n.fa-arrow-down-9-1::before {\n  content: \"\\f886\";\n}\n\n.fa-sort-numeric-desc::before {\n  content: \"\\f886\";\n}\n\n.fa-sort-numeric-down-alt::before {\n  content: \"\\f886\";\n}\n\n.fa-face-grin-tongue-squint::before {\n  content: \"\\f58a\";\n}\n\n.fa-grin-tongue-squint::before {\n  content: \"\\f58a\";\n}\n\n.fa-spray-can::before {\n  content: \"\\f5bd\";\n}\n\n.fa-truck-monster::before {\n  content: \"\\f63b\";\n}\n\n.fa-w::before {\n  content: \"W\";\n}\n\n.fa-earth-africa::before {\n  content: \"\\f57c\";\n}\n\n.fa-globe-africa::before {\n  content: \"\\f57c\";\n}\n\n.fa-rainbow::before {\n  content: \"\\f75b\";\n}\n\n.fa-circle-notch::before {\n  content: \"\\f1ce\";\n}\n\n.fa-tablet-screen-button::before {\n  content: \"\\f3fa\";\n}\n\n.fa-tablet-alt::before {\n  content: \"\\f3fa\";\n}\n\n.fa-paw::before {\n  content: \"\\f1b0\";\n}\n\n.fa-cloud::before {\n  content: \"\\f0c2\";\n}\n\n.fa-trowel-bricks::before {\n  content: \"\\e58a\";\n}\n\n.fa-face-flushed::before {\n  content: \"\\f579\";\n}\n\n.fa-flushed::before {\n  content: \"\\f579\";\n}\n\n.fa-hospital-user::before {\n  content: \"\\f80d\";\n}\n\n.fa-tent-arrow-left-right::before {\n  content: \"\\e57f\";\n}\n\n.fa-gavel::before {\n  content: \"\\f0e3\";\n}\n\n.fa-legal::before {\n  content: \"\\f0e3\";\n}\n\n.fa-binoculars::before {\n  content: \"\\f1e5\";\n}\n\n.fa-microphone-slash::before {\n  content: \"\\f131\";\n}\n\n.fa-box-tissue::before {\n  content: \"\\e05b\";\n}\n\n.fa-motorcycle::before {\n  content: \"\\f21c\";\n}\n\n.fa-bell-concierge::before {\n  content: \"\\f562\";\n}\n\n.fa-concierge-bell::before {\n  content: \"\\f562\";\n}\n\n.fa-pen-ruler::before {\n  content: \"\\f5ae\";\n}\n\n.fa-pencil-ruler::before {\n  content: \"\\f5ae\";\n}\n\n.fa-people-arrows::before {\n  content: \"\\e068\";\n}\n\n.fa-people-arrows-left-right::before {\n  content: \"\\e068\";\n}\n\n.fa-mars-and-venus-burst::before {\n  content: \"\\e523\";\n}\n\n.fa-square-caret-right::before {\n  content: \"\\f152\";\n}\n\n.fa-caret-square-right::before {\n  content: \"\\f152\";\n}\n\n.fa-scissors::before {\n  content: \"\\f0c4\";\n}\n\n.fa-cut::before {\n  content: \"\\f0c4\";\n}\n\n.fa-sun-plant-wilt::before {\n  content: \"\\e57a\";\n}\n\n.fa-toilets-portable::before {\n  content: \"\\e584\";\n}\n\n.fa-hockey-puck::before {\n  content: \"\\f453\";\n}\n\n.fa-table::before {\n  content: \"\\f0ce\";\n}\n\n.fa-magnifying-glass-arrow-right::before {\n  content: \"\\e521\";\n}\n\n.fa-tachograph-digital::before {\n  content: \"\\f566\";\n}\n\n.fa-digital-tachograph::before {\n  content: \"\\f566\";\n}\n\n.fa-users-slash::before {\n  content: \"\\e073\";\n}\n\n.fa-clover::before {\n  content: \"\\e139\";\n}\n\n.fa-reply::before {\n  content: \"\\f3e5\";\n}\n\n.fa-mail-reply::before {\n  content: \"\\f3e5\";\n}\n\n.fa-star-and-crescent::before {\n  content: \"\\f699\";\n}\n\n.fa-house-fire::before {\n  content: \"\\e50c\";\n}\n\n.fa-square-minus::before {\n  content: \"\\f146\";\n}\n\n.fa-minus-square::before {\n  content: \"\\f146\";\n}\n\n.fa-helicopter::before {\n  content: \"\\f533\";\n}\n\n.fa-compass::before {\n  content: \"\\f14e\";\n}\n\n.fa-square-caret-down::before {\n  content: \"\\f150\";\n}\n\n.fa-caret-square-down::before {\n  content: \"\\f150\";\n}\n\n.fa-file-circle-question::before {\n  content: \"\\e4ef\";\n}\n\n.fa-laptop-code::before {\n  content: \"\\f5fc\";\n}\n\n.fa-swatchbook::before {\n  content: \"\\f5c3\";\n}\n\n.fa-prescription-bottle::before {\n  content: \"\\f485\";\n}\n\n.fa-bars::before {\n  content: \"\\f0c9\";\n}\n\n.fa-navicon::before {\n  content: \"\\f0c9\";\n}\n\n.fa-people-group::before {\n  content: \"\\e533\";\n}\n\n.fa-hourglass-end::before {\n  content: \"\\f253\";\n}\n\n.fa-hourglass-3::before {\n  content: \"\\f253\";\n}\n\n.fa-heart-crack::before {\n  content: \"\\f7a9\";\n}\n\n.fa-heart-broken::before {\n  content: \"\\f7a9\";\n}\n\n.fa-square-up-right::before {\n  content: \"\\f360\";\n}\n\n.fa-external-link-square-alt::before {\n  content: \"\\f360\";\n}\n\n.fa-face-kiss-beam::before {\n  content: \"\\f597\";\n}\n\n.fa-kiss-beam::before {\n  content: \"\\f597\";\n}\n\n.fa-film::before {\n  content: \"\\f008\";\n}\n\n.fa-ruler-horizontal::before {\n  content: \"\\f547\";\n}\n\n.fa-people-robbery::before {\n  content: \"\\e536\";\n}\n\n.fa-lightbulb::before {\n  content: \"\\f0eb\";\n}\n\n.fa-caret-left::before {\n  content: \"\\f0d9\";\n}\n\n.fa-circle-exclamation::before {\n  content: \"\\f06a\";\n}\n\n.fa-exclamation-circle::before {\n  content: \"\\f06a\";\n}\n\n.fa-school-circle-xmark::before {\n  content: \"\\e56d\";\n}\n\n.fa-arrow-right-from-bracket::before {\n  content: \"\\f08b\";\n}\n\n.fa-sign-out::before {\n  content: \"\\f08b\";\n}\n\n.fa-circle-chevron-down::before {\n  content: \"\\f13a\";\n}\n\n.fa-chevron-circle-down::before {\n  content: \"\\f13a\";\n}\n\n.fa-unlock-keyhole::before {\n  content: \"\\f13e\";\n}\n\n.fa-unlock-alt::before {\n  content: \"\\f13e\";\n}\n\n.fa-cloud-showers-heavy::before {\n  content: \"\\f740\";\n}\n\n.fa-headphones-simple::before {\n  content: \"\\f58f\";\n}\n\n.fa-headphones-alt::before {\n  content: \"\\f58f\";\n}\n\n.fa-sitemap::before {\n  content: \"\\f0e8\";\n}\n\n.fa-circle-dollar-to-slot::before {\n  content: \"\\f4b9\";\n}\n\n.fa-donate::before {\n  content: \"\\f4b9\";\n}\n\n.fa-memory::before {\n  content: \"\\f538\";\n}\n\n.fa-road-spikes::before {\n  content: \"\\e568\";\n}\n\n.fa-fire-burner::before {\n  content: \"\\e4f1\";\n}\n\n.fa-flag::before {\n  content: \"\\f024\";\n}\n\n.fa-hanukiah::before {\n  content: \"\\f6e6\";\n}\n\n.fa-feather::before {\n  content: \"\\f52d\";\n}\n\n.fa-volume-low::before {\n  content: \"\\f027\";\n}\n\n.fa-volume-down::before {\n  content: \"\\f027\";\n}\n\n.fa-comment-slash::before {\n  content: \"\\f4b3\";\n}\n\n.fa-cloud-sun-rain::before {\n  content: \"\\f743\";\n}\n\n.fa-compress::before {\n  content: \"\\f066\";\n}\n\n.fa-wheat-awn::before {\n  content: \"\\e2cd\";\n}\n\n.fa-wheat-alt::before {\n  content: \"\\e2cd\";\n}\n\n.fa-ankh::before {\n  content: \"\\f644\";\n}\n\n.fa-hands-holding-child::before {\n  content: \"\\e4fa\";\n}\n\n.fa-asterisk::before {\n  content: \"\\*\";\n}\n\n.fa-square-check::before {\n  content: \"\\f14a\";\n}\n\n.fa-check-square::before {\n  content: \"\\f14a\";\n}\n\n.fa-peseta-sign::before {\n  content: \"\\e221\";\n}\n\n.fa-heading::before {\n  content: \"\\f1dc\";\n}\n\n.fa-header::before {\n  content: \"\\f1dc\";\n}\n\n.fa-ghost::before {\n  content: \"\\f6e2\";\n}\n\n.fa-list::before {\n  content: \"\\f03a\";\n}\n\n.fa-list-squares::before {\n  content: \"\\f03a\";\n}\n\n.fa-square-phone-flip::before {\n  content: \"\\f87b\";\n}\n\n.fa-phone-square-alt::before {\n  content: \"\\f87b\";\n}\n\n.fa-cart-plus::before {\n  content: \"\\f217\";\n}\n\n.fa-gamepad::before {\n  content: \"\\f11b\";\n}\n\n.fa-circle-dot::before {\n  content: \"\\f192\";\n}\n\n.fa-dot-circle::before {\n  content: \"\\f192\";\n}\n\n.fa-face-dizzy::before {\n  content: \"\\f567\";\n}\n\n.fa-dizzy::before {\n  content: \"\\f567\";\n}\n\n.fa-egg::before {\n  content: \"\\f7fb\";\n}\n\n.fa-house-medical-circle-xmark::before {\n  content: \"\\e513\";\n}\n\n.fa-campground::before {\n  content: \"\\f6bb\";\n}\n\n.fa-folder-plus::before {\n  content: \"\\f65e\";\n}\n\n.fa-futbol::before {\n  content: \"\\f1e3\";\n}\n\n.fa-futbol-ball::before {\n  content: \"\\f1e3\";\n}\n\n.fa-soccer-ball::before {\n  content: \"\\f1e3\";\n}\n\n.fa-paintbrush::before {\n  content: \"\\f1fc\";\n}\n\n.fa-paint-brush::before {\n  content: \"\\f1fc\";\n}\n\n.fa-lock::before {\n  content: \"\\f023\";\n}\n\n.fa-gas-pump::before {\n  content: \"\\f52f\";\n}\n\n.fa-hot-tub-person::before {\n  content: \"\\f593\";\n}\n\n.fa-hot-tub::before {\n  content: \"\\f593\";\n}\n\n.fa-map-location::before {\n  content: \"\\f59f\";\n}\n\n.fa-map-marked::before {\n  content: \"\\f59f\";\n}\n\n.fa-house-flood-water::before {\n  content: \"\\e50e\";\n}\n\n.fa-tree::before {\n  content: \"\\f1bb\";\n}\n\n.fa-bridge-lock::before {\n  content: \"\\e4cc\";\n}\n\n.fa-sack-dollar::before {\n  content: \"\\f81d\";\n}\n\n.fa-pen-to-square::before {\n  content: \"\\f044\";\n}\n\n.fa-edit::before {\n  content: \"\\f044\";\n}\n\n.fa-car-side::before {\n  content: \"\\f5e4\";\n}\n\n.fa-share-nodes::before {\n  content: \"\\f1e0\";\n}\n\n.fa-share-alt::before {\n  content: \"\\f1e0\";\n}\n\n.fa-heart-circle-minus::before {\n  content: \"\\e4ff\";\n}\n\n.fa-hourglass-half::before {\n  content: \"\\f252\";\n}\n\n.fa-hourglass-2::before {\n  content: \"\\f252\";\n}\n\n.fa-microscope::before {\n  content: \"\\f610\";\n}\n\n.fa-sink::before {\n  content: \"\\e06d\";\n}\n\n.fa-bag-shopping::before {\n  content: \"\\f290\";\n}\n\n.fa-shopping-bag::before {\n  content: \"\\f290\";\n}\n\n.fa-arrow-down-z-a::before {\n  content: \"\\f881\";\n}\n\n.fa-sort-alpha-desc::before {\n  content: \"\\f881\";\n}\n\n.fa-sort-alpha-down-alt::before {\n  content: \"\\f881\";\n}\n\n.fa-mitten::before {\n  content: \"\\f7b5\";\n}\n\n.fa-person-rays::before {\n  content: \"\\e54d\";\n}\n\n.fa-users::before {\n  content: \"\\f0c0\";\n}\n\n.fa-eye-slash::before {\n  content: \"\\f070\";\n}\n\n.fa-flask-vial::before {\n  content: \"\\e4f3\";\n}\n\n.fa-hand::before {\n  content: \"\\f256\";\n}\n\n.fa-hand-paper::before {\n  content: \"\\f256\";\n}\n\n.fa-om::before {\n  content: \"\\f679\";\n}\n\n.fa-worm::before {\n  content: \"\\e599\";\n}\n\n.fa-house-circle-xmark::before {\n  content: \"\\e50b\";\n}\n\n.fa-plug::before {\n  content: \"\\f1e6\";\n}\n\n.fa-chevron-up::before {\n  content: \"\\f077\";\n}\n\n.fa-hand-spock::before {\n  content: \"\\f259\";\n}\n\n.fa-stopwatch::before {\n  content: \"\\f2f2\";\n}\n\n.fa-face-kiss::before {\n  content: \"\\f596\";\n}\n\n.fa-kiss::before {\n  content: \"\\f596\";\n}\n\n.fa-bridge-circle-xmark::before {\n  content: \"\\e4cb\";\n}\n\n.fa-face-grin-tongue::before {\n  content: \"\\f589\";\n}\n\n.fa-grin-tongue::before {\n  content: \"\\f589\";\n}\n\n.fa-chess-bishop::before {\n  content: \"\\f43a\";\n}\n\n.fa-face-grin-wink::before {\n  content: \"\\f58c\";\n}\n\n.fa-grin-wink::before {\n  content: \"\\f58c\";\n}\n\n.fa-ear-deaf::before {\n  content: \"\\f2a4\";\n}\n\n.fa-deaf::before {\n  content: \"\\f2a4\";\n}\n\n.fa-deafness::before {\n  content: \"\\f2a4\";\n}\n\n.fa-hard-of-hearing::before {\n  content: \"\\f2a4\";\n}\n\n.fa-road-circle-check::before {\n  content: \"\\e564\";\n}\n\n.fa-dice-five::before {\n  content: \"\\f523\";\n}\n\n.fa-square-rss::before {\n  content: \"\\f143\";\n}\n\n.fa-rss-square::before {\n  content: \"\\f143\";\n}\n\n.fa-land-mine-on::before {\n  content: \"\\e51b\";\n}\n\n.fa-i-cursor::before {\n  content: \"\\f246\";\n}\n\n.fa-stamp::before {\n  content: \"\\f5bf\";\n}\n\n.fa-stairs::before {\n  content: \"\\e289\";\n}\n\n.fa-i::before {\n  content: \"I\";\n}\n\n.fa-hryvnia-sign::before {\n  content: \"\\f6f2\";\n}\n\n.fa-hryvnia::before {\n  content: \"\\f6f2\";\n}\n\n.fa-pills::before {\n  content: \"\\f484\";\n}\n\n.fa-face-grin-wide::before {\n  content: \"\\f581\";\n}\n\n.fa-grin-alt::before {\n  content: \"\\f581\";\n}\n\n.fa-tooth::before {\n  content: \"\\f5c9\";\n}\n\n.fa-v::before {\n  content: \"V\";\n}\n\n.fa-bangladeshi-taka-sign::before {\n  content: \"\\e2e6\";\n}\n\n.fa-bicycle::before {\n  content: \"\\f206\";\n}\n\n.fa-staff-snake::before {\n  content: \"\\e579\";\n}\n\n.fa-rod-asclepius::before {\n  content: \"\\e579\";\n}\n\n.fa-rod-snake::before {\n  content: \"\\e579\";\n}\n\n.fa-staff-aesculapius::before {\n  content: \"\\e579\";\n}\n\n.fa-head-side-cough-slash::before {\n  content: \"\\e062\";\n}\n\n.fa-truck-medical::before {\n  content: \"\\f0f9\";\n}\n\n.fa-ambulance::before {\n  content: \"\\f0f9\";\n}\n\n.fa-wheat-awn-circle-exclamation::before {\n  content: \"\\e598\";\n}\n\n.fa-snowman::before {\n  content: \"\\f7d0\";\n}\n\n.fa-mortar-pestle::before {\n  content: \"\\f5a7\";\n}\n\n.fa-road-barrier::before {\n  content: \"\\e562\";\n}\n\n.fa-school::before {\n  content: \"\\f549\";\n}\n\n.fa-igloo::before {\n  content: \"\\f7ae\";\n}\n\n.fa-joint::before {\n  content: \"\\f595\";\n}\n\n.fa-angle-right::before {\n  content: \"\\f105\";\n}\n\n.fa-horse::before {\n  content: \"\\f6f0\";\n}\n\n.fa-q::before {\n  content: \"Q\";\n}\n\n.fa-g::before {\n  content: \"G\";\n}\n\n.fa-notes-medical::before {\n  content: \"\\f481\";\n}\n\n.fa-temperature-half::before {\n  content: \"\\f2c9\";\n}\n\n.fa-temperature-2::before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-2::before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-half::before {\n  content: \"\\f2c9\";\n}\n\n.fa-dong-sign::before {\n  content: \"\\e169\";\n}\n\n.fa-capsules::before {\n  content: \"\\f46b\";\n}\n\n.fa-poo-storm::before {\n  content: \"\\f75a\";\n}\n\n.fa-poo-bolt::before {\n  content: \"\\f75a\";\n}\n\n.fa-face-frown-open::before {\n  content: \"\\f57a\";\n}\n\n.fa-frown-open::before {\n  content: \"\\f57a\";\n}\n\n.fa-hand-point-up::before {\n  content: \"\\f0a6\";\n}\n\n.fa-money-bill::before {\n  content: \"\\f0d6\";\n}\n\n.fa-bookmark::before {\n  content: \"\\f02e\";\n}\n\n.fa-align-justify::before {\n  content: \"\\f039\";\n}\n\n.fa-umbrella-beach::before {\n  content: \"\\f5ca\";\n}\n\n.fa-helmet-un::before {\n  content: \"\\e503\";\n}\n\n.fa-bullseye::before {\n  content: \"\\f140\";\n}\n\n.fa-bacon::before {\n  content: \"\\f7e5\";\n}\n\n.fa-hand-point-down::before {\n  content: \"\\f0a7\";\n}\n\n.fa-arrow-up-from-bracket::before {\n  content: \"\\e09a\";\n}\n\n.fa-folder::before {\n  content: \"\\f07b\";\n}\n\n.fa-folder-blank::before {\n  content: \"\\f07b\";\n}\n\n.fa-file-waveform::before {\n  content: \"\\f478\";\n}\n\n.fa-file-medical-alt::before {\n  content: \"\\f478\";\n}\n\n.fa-radiation::before {\n  content: \"\\f7b9\";\n}\n\n.fa-chart-simple::before {\n  content: \"\\e473\";\n}\n\n.fa-mars-stroke::before {\n  content: \"\\f229\";\n}\n\n.fa-vial::before {\n  content: \"\\f492\";\n}\n\n.fa-gauge::before {\n  content: \"\\f624\";\n}\n\n.fa-dashboard::before {\n  content: \"\\f624\";\n}\n\n.fa-gauge-med::before {\n  content: \"\\f624\";\n}\n\n.fa-tachometer-alt-average::before {\n  content: \"\\f624\";\n}\n\n.fa-wand-magic-sparkles::before {\n  content: \"\\e2ca\";\n}\n\n.fa-magic-wand-sparkles::before {\n  content: \"\\e2ca\";\n}\n\n.fa-e::before {\n  content: \"E\";\n}\n\n.fa-pen-clip::before {\n  content: \"\\f305\";\n}\n\n.fa-pen-alt::before {\n  content: \"\\f305\";\n}\n\n.fa-bridge-circle-exclamation::before {\n  content: \"\\e4ca\";\n}\n\n.fa-user::before {\n  content: \"\\f007\";\n}\n\n.fa-school-circle-check::before {\n  content: \"\\e56b\";\n}\n\n.fa-dumpster::before {\n  content: \"\\f793\";\n}\n\n.fa-van-shuttle::before {\n  content: \"\\f5b6\";\n}\n\n.fa-shuttle-van::before {\n  content: \"\\f5b6\";\n}\n\n.fa-building-user::before {\n  content: \"\\e4da\";\n}\n\n.fa-square-caret-left::before {\n  content: \"\\f191\";\n}\n\n.fa-caret-square-left::before {\n  content: \"\\f191\";\n}\n\n.fa-highlighter::before {\n  content: \"\\f591\";\n}\n\n.fa-key::before {\n  content: \"\\f084\";\n}\n\n.fa-bullhorn::before {\n  content: \"\\f0a1\";\n}\n\n.fa-globe::before {\n  content: \"\\f0ac\";\n}\n\n.fa-synagogue::before {\n  content: \"\\f69b\";\n}\n\n.fa-person-half-dress::before {\n  content: \"\\e548\";\n}\n\n.fa-road-bridge::before {\n  content: \"\\e563\";\n}\n\n.fa-location-arrow::before {\n  content: \"\\f124\";\n}\n\n.fa-c::before {\n  content: \"C\";\n}\n\n.fa-tablet-button::before {\n  content: \"\\f10a\";\n}\n\n.fa-building-lock::before {\n  content: \"\\e4d6\";\n}\n\n.fa-pizza-slice::before {\n  content: \"\\f818\";\n}\n\n.fa-money-bill-wave::before {\n  content: \"\\f53a\";\n}\n\n.fa-chart-area::before {\n  content: \"\\f1fe\";\n}\n\n.fa-area-chart::before {\n  content: \"\\f1fe\";\n}\n\n.fa-house-flag::before {\n  content: \"\\e50d\";\n}\n\n.fa-person-circle-minus::before {\n  content: \"\\e540\";\n}\n\n.fa-ban::before {\n  content: \"\\f05e\";\n}\n\n.fa-cancel::before {\n  content: \"\\f05e\";\n}\n\n.fa-camera-rotate::before {\n  content: \"\\e0d8\";\n}\n\n.fa-spray-can-sparkles::before {\n  content: \"\\f5d0\";\n}\n\n.fa-air-freshener::before {\n  content: \"\\f5d0\";\n}\n\n.fa-star::before {\n  content: \"\\f005\";\n}\n\n.fa-repeat::before {\n  content: \"\\f363\";\n}\n\n.fa-cross::before {\n  content: \"\\f654\";\n}\n\n.fa-box::before {\n  content: \"\\f466\";\n}\n\n.fa-venus-mars::before {\n  content: \"\\f228\";\n}\n\n.fa-arrow-pointer::before {\n  content: \"\\f245\";\n}\n\n.fa-mouse-pointer::before {\n  content: \"\\f245\";\n}\n\n.fa-maximize::before {\n  content: \"\\f31e\";\n}\n\n.fa-expand-arrows-alt::before {\n  content: \"\\f31e\";\n}\n\n.fa-charging-station::before {\n  content: \"\\f5e7\";\n}\n\n.fa-shapes::before {\n  content: \"\\f61f\";\n}\n\n.fa-triangle-circle-square::before {\n  content: \"\\f61f\";\n}\n\n.fa-shuffle::before {\n  content: \"\\f074\";\n}\n\n.fa-random::before {\n  content: \"\\f074\";\n}\n\n.fa-person-running::before {\n  content: \"\\f70c\";\n}\n\n.fa-running::before {\n  content: \"\\f70c\";\n}\n\n.fa-mobile-retro::before {\n  content: \"\\e527\";\n}\n\n.fa-grip-lines-vertical::before {\n  content: \"\\f7a5\";\n}\n\n.fa-spider::before {\n  content: \"\\f717\";\n}\n\n.fa-hands-bound::before {\n  content: \"\\e4f9\";\n}\n\n.fa-file-invoice-dollar::before {\n  content: \"\\f571\";\n}\n\n.fa-plane-circle-exclamation::before {\n  content: \"\\e556\";\n}\n\n.fa-x-ray::before {\n  content: \"\\f497\";\n}\n\n.fa-spell-check::before {\n  content: \"\\f891\";\n}\n\n.fa-slash::before {\n  content: \"\\f715\";\n}\n\n.fa-computer-mouse::before {\n  content: \"\\f8cc\";\n}\n\n.fa-mouse::before {\n  content: \"\\f8cc\";\n}\n\n.fa-arrow-right-to-bracket::before {\n  content: \"\\f090\";\n}\n\n.fa-sign-in::before {\n  content: \"\\f090\";\n}\n\n.fa-shop-slash::before {\n  content: \"\\e070\";\n}\n\n.fa-store-alt-slash::before {\n  content: \"\\e070\";\n}\n\n.fa-server::before {\n  content: \"\\f233\";\n}\n\n.fa-virus-covid-slash::before {\n  content: \"\\e4a9\";\n}\n\n.fa-shop-lock::before {\n  content: \"\\e4a5\";\n}\n\n.fa-hourglass-start::before {\n  content: \"\\f251\";\n}\n\n.fa-hourglass-1::before {\n  content: \"\\f251\";\n}\n\n.fa-blender-phone::before {\n  content: \"\\f6b6\";\n}\n\n.fa-building-wheat::before {\n  content: \"\\e4db\";\n}\n\n.fa-person-breastfeeding::before {\n  content: \"\\e53a\";\n}\n\n.fa-right-to-bracket::before {\n  content: \"\\f2f6\";\n}\n\n.fa-sign-in-alt::before {\n  content: \"\\f2f6\";\n}\n\n.fa-venus::before {\n  content: \"\\f221\";\n}\n\n.fa-passport::before {\n  content: \"\\f5ab\";\n}\n\n.fa-heart-pulse::before {\n  content: \"\\f21e\";\n}\n\n.fa-heartbeat::before {\n  content: \"\\f21e\";\n}\n\n.fa-people-carry-box::before {\n  content: \"\\f4ce\";\n}\n\n.fa-people-carry::before {\n  content: \"\\f4ce\";\n}\n\n.fa-temperature-high::before {\n  content: \"\\f769\";\n}\n\n.fa-microchip::before {\n  content: \"\\f2db\";\n}\n\n.fa-crown::before {\n  content: \"\\f521\";\n}\n\n.fa-weight-hanging::before {\n  content: \"\\f5cd\";\n}\n\n.fa-xmarks-lines::before {\n  content: \"\\e59a\";\n}\n\n.fa-file-prescription::before {\n  content: \"\\f572\";\n}\n\n.fa-weight-scale::before {\n  content: \"\\f496\";\n}\n\n.fa-weight::before {\n  content: \"\\f496\";\n}\n\n.fa-user-group::before {\n  content: \"\\f500\";\n}\n\n.fa-user-friends::before {\n  content: \"\\f500\";\n}\n\n.fa-arrow-up-a-z::before {\n  content: \"\\f15e\";\n}\n\n.fa-sort-alpha-up::before {\n  content: \"\\f15e\";\n}\n\n.fa-chess-knight::before {\n  content: \"\\f441\";\n}\n\n.fa-face-laugh-squint::before {\n  content: \"\\f59b\";\n}\n\n.fa-laugh-squint::before {\n  content: \"\\f59b\";\n}\n\n.fa-wheelchair::before {\n  content: \"\\f193\";\n}\n\n.fa-circle-arrow-up::before {\n  content: \"\\f0aa\";\n}\n\n.fa-arrow-circle-up::before {\n  content: \"\\f0aa\";\n}\n\n.fa-toggle-on::before {\n  content: \"\\f205\";\n}\n\n.fa-person-walking::before {\n  content: \"\\f554\";\n}\n\n.fa-walking::before {\n  content: \"\\f554\";\n}\n\n.fa-l::before {\n  content: \"L\";\n}\n\n.fa-fire::before {\n  content: \"\\f06d\";\n}\n\n.fa-bed-pulse::before {\n  content: \"\\f487\";\n}\n\n.fa-procedures::before {\n  content: \"\\f487\";\n}\n\n.fa-shuttle-space::before {\n  content: \"\\f197\";\n}\n\n.fa-space-shuttle::before {\n  content: \"\\f197\";\n}\n\n.fa-face-laugh::before {\n  content: \"\\f599\";\n}\n\n.fa-laugh::before {\n  content: \"\\f599\";\n}\n\n.fa-folder-open::before {\n  content: \"\\f07c\";\n}\n\n.fa-heart-circle-plus::before {\n  content: \"\\e500\";\n}\n\n.fa-code-fork::before {\n  content: \"\\e13b\";\n}\n\n.fa-city::before {\n  content: \"\\f64f\";\n}\n\n.fa-microphone-lines::before {\n  content: \"\\f3c9\";\n}\n\n.fa-microphone-alt::before {\n  content: \"\\f3c9\";\n}\n\n.fa-pepper-hot::before {\n  content: \"\\f816\";\n}\n\n.fa-unlock::before {\n  content: \"\\f09c\";\n}\n\n.fa-colon-sign::before {\n  content: \"\\e140\";\n}\n\n.fa-headset::before {\n  content: \"\\f590\";\n}\n\n.fa-store-slash::before {\n  content: \"\\e071\";\n}\n\n.fa-road-circle-xmark::before {\n  content: \"\\e566\";\n}\n\n.fa-user-minus::before {\n  content: \"\\f503\";\n}\n\n.fa-mars-stroke-up::before {\n  content: \"\\f22a\";\n}\n\n.fa-mars-stroke-v::before {\n  content: \"\\f22a\";\n}\n\n.fa-champagne-glasses::before {\n  content: \"\\f79f\";\n}\n\n.fa-glass-cheers::before {\n  content: \"\\f79f\";\n}\n\n.fa-clipboard::before {\n  content: \"\\f328\";\n}\n\n.fa-house-circle-exclamation::before {\n  content: \"\\e50a\";\n}\n\n.fa-file-arrow-up::before {\n  content: \"\\f574\";\n}\n\n.fa-file-upload::before {\n  content: \"\\f574\";\n}\n\n.fa-wifi::before {\n  content: \"\\f1eb\";\n}\n\n.fa-wifi-3::before {\n  content: \"\\f1eb\";\n}\n\n.fa-wifi-strong::before {\n  content: \"\\f1eb\";\n}\n\n.fa-bath::before {\n  content: \"\\f2cd\";\n}\n\n.fa-bathtub::before {\n  content: \"\\f2cd\";\n}\n\n.fa-underline::before {\n  content: \"\\f0cd\";\n}\n\n.fa-user-pen::before {\n  content: \"\\f4ff\";\n}\n\n.fa-user-edit::before {\n  content: \"\\f4ff\";\n}\n\n.fa-signature::before {\n  content: \"\\f5b7\";\n}\n\n.fa-stroopwafel::before {\n  content: \"\\f551\";\n}\n\n.fa-bold::before {\n  content: \"\\f032\";\n}\n\n.fa-anchor-lock::before {\n  content: \"\\e4ad\";\n}\n\n.fa-building-ngo::before {\n  content: \"\\e4d7\";\n}\n\n.fa-manat-sign::before {\n  content: \"\\e1d5\";\n}\n\n.fa-not-equal::before {\n  content: \"\\f53e\";\n}\n\n.fa-border-top-left::before {\n  content: \"\\f853\";\n}\n\n.fa-border-style::before {\n  content: \"\\f853\";\n}\n\n.fa-map-location-dot::before {\n  content: \"\\f5a0\";\n}\n\n.fa-map-marked-alt::before {\n  content: \"\\f5a0\";\n}\n\n.fa-jedi::before {\n  content: \"\\f669\";\n}\n\n.fa-square-poll-vertical::before {\n  content: \"\\f681\";\n}\n\n.fa-poll::before {\n  content: \"\\f681\";\n}\n\n.fa-mug-hot::before {\n  content: \"\\f7b6\";\n}\n\n.fa-car-battery::before {\n  content: \"\\f5df\";\n}\n\n.fa-battery-car::before {\n  content: \"\\f5df\";\n}\n\n.fa-gift::before {\n  content: \"\\f06b\";\n}\n\n.fa-dice-two::before {\n  content: \"\\f528\";\n}\n\n.fa-chess-queen::before {\n  content: \"\\f445\";\n}\n\n.fa-glasses::before {\n  content: \"\\f530\";\n}\n\n.fa-chess-board::before {\n  content: \"\\f43c\";\n}\n\n.fa-building-circle-check::before {\n  content: \"\\e4d2\";\n}\n\n.fa-person-chalkboard::before {\n  content: \"\\e53d\";\n}\n\n.fa-mars-stroke-right::before {\n  content: \"\\f22b\";\n}\n\n.fa-mars-stroke-h::before {\n  content: \"\\f22b\";\n}\n\n.fa-hand-back-fist::before {\n  content: \"\\f255\";\n}\n\n.fa-hand-rock::before {\n  content: \"\\f255\";\n}\n\n.fa-square-caret-up::before {\n  content: \"\\f151\";\n}\n\n.fa-caret-square-up::before {\n  content: \"\\f151\";\n}\n\n.fa-cloud-showers-water::before {\n  content: \"\\e4e4\";\n}\n\n.fa-chart-bar::before {\n  content: \"\\f080\";\n}\n\n.fa-bar-chart::before {\n  content: \"\\f080\";\n}\n\n.fa-hands-bubbles::before {\n  content: \"\\e05e\";\n}\n\n.fa-hands-wash::before {\n  content: \"\\e05e\";\n}\n\n.fa-less-than-equal::before {\n  content: \"\\f537\";\n}\n\n.fa-train::before {\n  content: \"\\f238\";\n}\n\n.fa-eye-low-vision::before {\n  content: \"\\f2a8\";\n}\n\n.fa-low-vision::before {\n  content: \"\\f2a8\";\n}\n\n.fa-crow::before {\n  content: \"\\f520\";\n}\n\n.fa-sailboat::before {\n  content: \"\\e445\";\n}\n\n.fa-window-restore::before {\n  content: \"\\f2d2\";\n}\n\n.fa-square-plus::before {\n  content: \"\\f0fe\";\n}\n\n.fa-plus-square::before {\n  content: \"\\f0fe\";\n}\n\n.fa-torii-gate::before {\n  content: \"\\f6a1\";\n}\n\n.fa-frog::before {\n  content: \"\\f52e\";\n}\n\n.fa-bucket::before {\n  content: \"\\e4cf\";\n}\n\n.fa-image::before {\n  content: \"\\f03e\";\n}\n\n.fa-microphone::before {\n  content: \"\\f130\";\n}\n\n.fa-cow::before {\n  content: \"\\f6c8\";\n}\n\n.fa-caret-up::before {\n  content: \"\\f0d8\";\n}\n\n.fa-screwdriver::before {\n  content: \"\\f54a\";\n}\n\n.fa-folder-closed::before {\n  content: \"\\e185\";\n}\n\n.fa-house-tsunami::before {\n  content: \"\\e515\";\n}\n\n.fa-square-nfi::before {\n  content: \"\\e576\";\n}\n\n.fa-arrow-up-from-ground-water::before {\n  content: \"\\e4b5\";\n}\n\n.fa-martini-glass::before {\n  content: \"\\f57b\";\n}\n\n.fa-glass-martini-alt::before {\n  content: \"\\f57b\";\n}\n\n.fa-rotate-left::before {\n  content: \"\\f2ea\";\n}\n\n.fa-rotate-back::before {\n  content: \"\\f2ea\";\n}\n\n.fa-rotate-backward::before {\n  content: \"\\f2ea\";\n}\n\n.fa-undo-alt::before {\n  content: \"\\f2ea\";\n}\n\n.fa-table-columns::before {\n  content: \"\\f0db\";\n}\n\n.fa-columns::before {\n  content: \"\\f0db\";\n}\n\n.fa-lemon::before {\n  content: \"\\f094\";\n}\n\n.fa-head-side-mask::before {\n  content: \"\\e063\";\n}\n\n.fa-handshake::before {\n  content: \"\\f2b5\";\n}\n\n.fa-gem::before {\n  content: \"\\f3a5\";\n}\n\n.fa-dolly::before {\n  content: \"\\f472\";\n}\n\n.fa-dolly-box::before {\n  content: \"\\f472\";\n}\n\n.fa-smoking::before {\n  content: \"\\f48d\";\n}\n\n.fa-minimize::before {\n  content: \"\\f78c\";\n}\n\n.fa-compress-arrows-alt::before {\n  content: \"\\f78c\";\n}\n\n.fa-monument::before {\n  content: \"\\f5a6\";\n}\n\n.fa-snowplow::before {\n  content: \"\\f7d2\";\n}\n\n.fa-angles-right::before {\n  content: \"\\f101\";\n}\n\n.fa-angle-double-right::before {\n  content: \"\\f101\";\n}\n\n.fa-cannabis::before {\n  content: \"\\f55f\";\n}\n\n.fa-circle-play::before {\n  content: \"\\f144\";\n}\n\n.fa-play-circle::before {\n  content: \"\\f144\";\n}\n\n.fa-tablets::before {\n  content: \"\\f490\";\n}\n\n.fa-ethernet::before {\n  content: \"\\f796\";\n}\n\n.fa-euro-sign::before {\n  content: \"\\f153\";\n}\n\n.fa-eur::before {\n  content: \"\\f153\";\n}\n\n.fa-euro::before {\n  content: \"\\f153\";\n}\n\n.fa-chair::before {\n  content: \"\\f6c0\";\n}\n\n.fa-circle-check::before {\n  content: \"\\f058\";\n}\n\n.fa-check-circle::before {\n  content: \"\\f058\";\n}\n\n.fa-circle-stop::before {\n  content: \"\\f28d\";\n}\n\n.fa-stop-circle::before {\n  content: \"\\f28d\";\n}\n\n.fa-compass-drafting::before {\n  content: \"\\f568\";\n}\n\n.fa-drafting-compass::before {\n  content: \"\\f568\";\n}\n\n.fa-plate-wheat::before {\n  content: \"\\e55a\";\n}\n\n.fa-icicles::before {\n  content: \"\\f7ad\";\n}\n\n.fa-person-shelter::before {\n  content: \"\\e54f\";\n}\n\n.fa-neuter::before {\n  content: \"\\f22c\";\n}\n\n.fa-id-badge::before {\n  content: \"\\f2c1\";\n}\n\n.fa-marker::before {\n  content: \"\\f5a1\";\n}\n\n.fa-face-laugh-beam::before {\n  content: \"\\f59a\";\n}\n\n.fa-laugh-beam::before {\n  content: \"\\f59a\";\n}\n\n.fa-helicopter-symbol::before {\n  content: \"\\e502\";\n}\n\n.fa-universal-access::before {\n  content: \"\\f29a\";\n}\n\n.fa-circle-chevron-up::before {\n  content: \"\\f139\";\n}\n\n.fa-chevron-circle-up::before {\n  content: \"\\f139\";\n}\n\n.fa-lari-sign::before {\n  content: \"\\e1c8\";\n}\n\n.fa-volcano::before {\n  content: \"\\f770\";\n}\n\n.fa-person-walking-dashed-line-arrow-right::before {\n  content: \"\\e553\";\n}\n\n.fa-sterling-sign::before {\n  content: \"\\f154\";\n}\n\n.fa-gbp::before {\n  content: \"\\f154\";\n}\n\n.fa-pound-sign::before {\n  content: \"\\f154\";\n}\n\n.fa-viruses::before {\n  content: \"\\e076\";\n}\n\n.fa-square-person-confined::before {\n  content: \"\\e577\";\n}\n\n.fa-user-tie::before {\n  content: \"\\f508\";\n}\n\n.fa-arrow-down-long::before {\n  content: \"\\f175\";\n}\n\n.fa-long-arrow-down::before {\n  content: \"\\f175\";\n}\n\n.fa-tent-arrow-down-to-line::before {\n  content: \"\\e57e\";\n}\n\n.fa-certificate::before {\n  content: \"\\f0a3\";\n}\n\n.fa-reply-all::before {\n  content: \"\\f122\";\n}\n\n.fa-mail-reply-all::before {\n  content: \"\\f122\";\n}\n\n.fa-suitcase::before {\n  content: \"\\f0f2\";\n}\n\n.fa-person-skating::before {\n  content: \"\\f7c5\";\n}\n\n.fa-skating::before {\n  content: \"\\f7c5\";\n}\n\n.fa-filter-circle-dollar::before {\n  content: \"\\f662\";\n}\n\n.fa-funnel-dollar::before {\n  content: \"\\f662\";\n}\n\n.fa-camera-retro::before {\n  content: \"\\f083\";\n}\n\n.fa-circle-arrow-down::before {\n  content: \"\\f0ab\";\n}\n\n.fa-arrow-circle-down::before {\n  content: \"\\f0ab\";\n}\n\n.fa-file-import::before {\n  content: \"\\f56f\";\n}\n\n.fa-arrow-right-to-file::before {\n  content: \"\\f56f\";\n}\n\n.fa-square-arrow-up-right::before {\n  content: \"\\f14c\";\n}\n\n.fa-external-link-square::before {\n  content: \"\\f14c\";\n}\n\n.fa-box-open::before {\n  content: \"\\f49e\";\n}\n\n.fa-scroll::before {\n  content: \"\\f70e\";\n}\n\n.fa-spa::before {\n  content: \"\\f5bb\";\n}\n\n.fa-location-pin-lock::before {\n  content: \"\\e51f\";\n}\n\n.fa-pause::before {\n  content: \"\\f04c\";\n}\n\n.fa-hill-avalanche::before {\n  content: \"\\e507\";\n}\n\n.fa-temperature-empty::before {\n  content: \"\\f2cb\";\n}\n\n.fa-temperature-0::before {\n  content: \"\\f2cb\";\n}\n\n.fa-thermometer-0::before {\n  content: \"\\f2cb\";\n}\n\n.fa-thermometer-empty::before {\n  content: \"\\f2cb\";\n}\n\n.fa-bomb::before {\n  content: \"\\f1e2\";\n}\n\n.fa-registered::before {\n  content: \"\\f25d\";\n}\n\n.fa-address-card::before {\n  content: \"\\f2bb\";\n}\n\n.fa-contact-card::before {\n  content: \"\\f2bb\";\n}\n\n.fa-vcard::before {\n  content: \"\\f2bb\";\n}\n\n.fa-scale-unbalanced-flip::before {\n  content: \"\\f516\";\n}\n\n.fa-balance-scale-right::before {\n  content: \"\\f516\";\n}\n\n.fa-subscript::before {\n  content: \"\\f12c\";\n}\n\n.fa-diamond-turn-right::before {\n  content: \"\\f5eb\";\n}\n\n.fa-directions::before {\n  content: \"\\f5eb\";\n}\n\n.fa-burst::before {\n  content: \"\\e4dc\";\n}\n\n.fa-house-laptop::before {\n  content: \"\\e066\";\n}\n\n.fa-laptop-house::before {\n  content: \"\\e066\";\n}\n\n.fa-face-tired::before {\n  content: \"\\f5c8\";\n}\n\n.fa-tired::before {\n  content: \"\\f5c8\";\n}\n\n.fa-money-bills::before {\n  content: \"\\e1f3\";\n}\n\n.fa-smog::before {\n  content: \"\\f75f\";\n}\n\n.fa-crutch::before {\n  content: \"\\f7f7\";\n}\n\n.fa-cloud-arrow-up::before {\n  content: \"\\f0ee\";\n}\n\n.fa-cloud-upload::before {\n  content: \"\\f0ee\";\n}\n\n.fa-cloud-upload-alt::before {\n  content: \"\\f0ee\";\n}\n\n.fa-palette::before {\n  content: \"\\f53f\";\n}\n\n.fa-arrows-turn-right::before {\n  content: \"\\e4c0\";\n}\n\n.fa-vest::before {\n  content: \"\\e085\";\n}\n\n.fa-ferry::before {\n  content: \"\\e4ea\";\n}\n\n.fa-arrows-down-to-people::before {\n  content: \"\\e4b9\";\n}\n\n.fa-seedling::before {\n  content: \"\\f4d8\";\n}\n\n.fa-sprout::before {\n  content: \"\\f4d8\";\n}\n\n.fa-left-right::before {\n  content: \"\\f337\";\n}\n\n.fa-arrows-alt-h::before {\n  content: \"\\f337\";\n}\n\n.fa-boxes-packing::before {\n  content: \"\\e4c7\";\n}\n\n.fa-circle-arrow-left::before {\n  content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-left::before {\n  content: \"\\f0a8\";\n}\n\n.fa-group-arrows-rotate::before {\n  content: \"\\e4f6\";\n}\n\n.fa-bowl-food::before {\n  content: \"\\e4c6\";\n}\n\n.fa-candy-cane::before {\n  content: \"\\f786\";\n}\n\n.fa-arrow-down-wide-short::before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-asc::before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-down::before {\n  content: \"\\f160\";\n}\n\n.fa-cloud-bolt::before {\n  content: \"\\f76c\";\n}\n\n.fa-thunderstorm::before {\n  content: \"\\f76c\";\n}\n\n.fa-text-slash::before {\n  content: \"\\f87d\";\n}\n\n.fa-remove-format::before {\n  content: \"\\f87d\";\n}\n\n.fa-face-smile-wink::before {\n  content: \"\\f4da\";\n}\n\n.fa-smile-wink::before {\n  content: \"\\f4da\";\n}\n\n.fa-file-word::before {\n  content: \"\\f1c2\";\n}\n\n.fa-file-powerpoint::before {\n  content: \"\\f1c4\";\n}\n\n.fa-arrows-left-right::before {\n  content: \"\\f07e\";\n}\n\n.fa-arrows-h::before {\n  content: \"\\f07e\";\n}\n\n.fa-house-lock::before {\n  content: \"\\e510\";\n}\n\n.fa-cloud-arrow-down::before {\n  content: \"\\f0ed\";\n}\n\n.fa-cloud-download::before {\n  content: \"\\f0ed\";\n}\n\n.fa-cloud-download-alt::before {\n  content: \"\\f0ed\";\n}\n\n.fa-children::before {\n  content: \"\\e4e1\";\n}\n\n.fa-chalkboard::before {\n  content: \"\\f51b\";\n}\n\n.fa-blackboard::before {\n  content: \"\\f51b\";\n}\n\n.fa-user-large-slash::before {\n  content: \"\\f4fa\";\n}\n\n.fa-user-alt-slash::before {\n  content: \"\\f4fa\";\n}\n\n.fa-envelope-open::before {\n  content: \"\\f2b6\";\n}\n\n.fa-handshake-simple-slash::before {\n  content: \"\\e05f\";\n}\n\n.fa-handshake-alt-slash::before {\n  content: \"\\e05f\";\n}\n\n.fa-mattress-pillow::before {\n  content: \"\\e525\";\n}\n\n.fa-guarani-sign::before {\n  content: \"\\e19a\";\n}\n\n.fa-arrows-rotate::before {\n  content: \"\\f021\";\n}\n\n.fa-refresh::before {\n  content: \"\\f021\";\n}\n\n.fa-sync::before {\n  content: \"\\f021\";\n}\n\n.fa-fire-extinguisher::before {\n  content: \"\\f134\";\n}\n\n.fa-cruzeiro-sign::before {\n  content: \"\\e152\";\n}\n\n.fa-greater-than-equal::before {\n  content: \"\\f532\";\n}\n\n.fa-shield-halved::before {\n  content: \"\\f3ed\";\n}\n\n.fa-shield-alt::before {\n  content: \"\\f3ed\";\n}\n\n.fa-book-atlas::before {\n  content: \"\\f558\";\n}\n\n.fa-atlas::before {\n  content: \"\\f558\";\n}\n\n.fa-virus::before {\n  content: \"\\e074\";\n}\n\n.fa-envelope-circle-check::before {\n  content: \"\\e4e8\";\n}\n\n.fa-layer-group::before {\n  content: \"\\f5fd\";\n}\n\n.fa-arrows-to-dot::before {\n  content: \"\\e4be\";\n}\n\n.fa-archway::before {\n  content: \"\\f557\";\n}\n\n.fa-heart-circle-check::before {\n  content: \"\\e4fd\";\n}\n\n.fa-house-chimney-crack::before {\n  content: \"\\f6f1\";\n}\n\n.fa-house-damage::before {\n  content: \"\\f6f1\";\n}\n\n.fa-file-zipper::before {\n  content: \"\\f1c6\";\n}\n\n.fa-file-archive::before {\n  content: \"\\f1c6\";\n}\n\n.fa-square::before {\n  content: \"\\f0c8\";\n}\n\n.fa-martini-glass-empty::before {\n  content: \"\\f000\";\n}\n\n.fa-glass-martini::before {\n  content: \"\\f000\";\n}\n\n.fa-couch::before {\n  content: \"\\f4b8\";\n}\n\n.fa-cedi-sign::before {\n  content: \"\\e0df\";\n}\n\n.fa-italic::before {\n  content: \"\\f033\";\n}\n\n.fa-table-cells-column-lock::before {\n  content: \"\\e678\";\n}\n\n.fa-church::before {\n  content: \"\\f51d\";\n}\n\n.fa-comments-dollar::before {\n  content: \"\\f653\";\n}\n\n.fa-democrat::before {\n  content: \"\\f747\";\n}\n\n.fa-z::before {\n  content: \"Z\";\n}\n\n.fa-person-skiing::before {\n  content: \"\\f7c9\";\n}\n\n.fa-skiing::before {\n  content: \"\\f7c9\";\n}\n\n.fa-road-lock::before {\n  content: \"\\e567\";\n}\n\n.fa-a::before {\n  content: \"A\";\n}\n\n.fa-temperature-arrow-down::before {\n  content: \"\\e03f\";\n}\n\n.fa-temperature-down::before {\n  content: \"\\e03f\";\n}\n\n.fa-feather-pointed::before {\n  content: \"\\f56b\";\n}\n\n.fa-feather-alt::before {\n  content: \"\\f56b\";\n}\n\n.fa-p::before {\n  content: \"P\";\n}\n\n.fa-snowflake::before {\n  content: \"\\f2dc\";\n}\n\n.fa-newspaper::before {\n  content: \"\\f1ea\";\n}\n\n.fa-rectangle-ad::before {\n  content: \"\\f641\";\n}\n\n.fa-ad::before {\n  content: \"\\f641\";\n}\n\n.fa-circle-arrow-right::before {\n  content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-right::before {\n  content: \"\\f0a9\";\n}\n\n.fa-filter-circle-xmark::before {\n  content: \"\\e17b\";\n}\n\n.fa-locust::before {\n  content: \"\\e520\";\n}\n\n.fa-sort::before {\n  content: \"\\f0dc\";\n}\n\n.fa-unsorted::before {\n  content: \"\\f0dc\";\n}\n\n.fa-list-ol::before {\n  content: \"\\f0cb\";\n}\n\n.fa-list-1-2::before {\n  content: \"\\f0cb\";\n}\n\n.fa-list-numeric::before {\n  content: \"\\f0cb\";\n}\n\n.fa-person-dress-burst::before {\n  content: \"\\e544\";\n}\n\n.fa-money-check-dollar::before {\n  content: \"\\f53d\";\n}\n\n.fa-money-check-alt::before {\n  content: \"\\f53d\";\n}\n\n.fa-vector-square::before {\n  content: \"\\f5cb\";\n}\n\n.fa-bread-slice::before {\n  content: \"\\f7ec\";\n}\n\n.fa-language::before {\n  content: \"\\f1ab\";\n}\n\n.fa-face-kiss-wink-heart::before {\n  content: \"\\f598\";\n}\n\n.fa-kiss-wink-heart::before {\n  content: \"\\f598\";\n}\n\n.fa-filter::before {\n  content: \"\\f0b0\";\n}\n\n.fa-question::before {\n  content: \"\\?\";\n}\n\n.fa-file-signature::before {\n  content: \"\\f573\";\n}\n\n.fa-up-down-left-right::before {\n  content: \"\\f0b2\";\n}\n\n.fa-arrows-alt::before {\n  content: \"\\f0b2\";\n}\n\n.fa-house-chimney-user::before {\n  content: \"\\e065\";\n}\n\n.fa-hand-holding-heart::before {\n  content: \"\\f4be\";\n}\n\n.fa-puzzle-piece::before {\n  content: \"\\f12e\";\n}\n\n.fa-money-check::before {\n  content: \"\\f53c\";\n}\n\n.fa-star-half-stroke::before {\n  content: \"\\f5c0\";\n}\n\n.fa-star-half-alt::before {\n  content: \"\\f5c0\";\n}\n\n.fa-code::before {\n  content: \"\\f121\";\n}\n\n.fa-whiskey-glass::before {\n  content: \"\\f7a0\";\n}\n\n.fa-glass-whiskey::before {\n  content: \"\\f7a0\";\n}\n\n.fa-building-circle-exclamation::before {\n  content: \"\\e4d3\";\n}\n\n.fa-magnifying-glass-chart::before {\n  content: \"\\e522\";\n}\n\n.fa-arrow-up-right-from-square::before {\n  content: \"\\f08e\";\n}\n\n.fa-external-link::before {\n  content: \"\\f08e\";\n}\n\n.fa-cubes-stacked::before {\n  content: \"\\e4e6\";\n}\n\n.fa-won-sign::before {\n  content: \"\\f159\";\n}\n\n.fa-krw::before {\n  content: \"\\f159\";\n}\n\n.fa-won::before {\n  content: \"\\f159\";\n}\n\n.fa-virus-covid::before {\n  content: \"\\e4a8\";\n}\n\n.fa-austral-sign::before {\n  content: \"\\e0a9\";\n}\n\n.fa-f::before {\n  content: \"F\";\n}\n\n.fa-leaf::before {\n  content: \"\\f06c\";\n}\n\n.fa-road::before {\n  content: \"\\f018\";\n}\n\n.fa-taxi::before {\n  content: \"\\f1ba\";\n}\n\n.fa-cab::before {\n  content: \"\\f1ba\";\n}\n\n.fa-person-circle-plus::before {\n  content: \"\\e541\";\n}\n\n.fa-chart-pie::before {\n  content: \"\\f200\";\n}\n\n.fa-pie-chart::before {\n  content: \"\\f200\";\n}\n\n.fa-bolt-lightning::before {\n  content: \"\\e0b7\";\n}\n\n.fa-sack-xmark::before {\n  content: \"\\e56a\";\n}\n\n.fa-file-excel::before {\n  content: \"\\f1c3\";\n}\n\n.fa-file-contract::before {\n  content: \"\\f56c\";\n}\n\n.fa-fish-fins::before {\n  content: \"\\e4f2\";\n}\n\n.fa-building-flag::before {\n  content: \"\\e4d5\";\n}\n\n.fa-face-grin-beam::before {\n  content: \"\\f582\";\n}\n\n.fa-grin-beam::before {\n  content: \"\\f582\";\n}\n\n.fa-object-ungroup::before {\n  content: \"\\f248\";\n}\n\n.fa-poop::before {\n  content: \"\\f619\";\n}\n\n.fa-location-pin::before {\n  content: \"\\f041\";\n}\n\n.fa-map-marker::before {\n  content: \"\\f041\";\n}\n\n.fa-kaaba::before {\n  content: \"\\f66b\";\n}\n\n.fa-toilet-paper::before {\n  content: \"\\f71e\";\n}\n\n.fa-helmet-safety::before {\n  content: \"\\f807\";\n}\n\n.fa-hard-hat::before {\n  content: \"\\f807\";\n}\n\n.fa-hat-hard::before {\n  content: \"\\f807\";\n}\n\n.fa-eject::before {\n  content: \"\\f052\";\n}\n\n.fa-circle-right::before {\n  content: \"\\f35a\";\n}\n\n.fa-arrow-alt-circle-right::before {\n  content: \"\\f35a\";\n}\n\n.fa-plane-circle-check::before {\n  content: \"\\e555\";\n}\n\n.fa-face-rolling-eyes::before {\n  content: \"\\f5a5\";\n}\n\n.fa-meh-rolling-eyes::before {\n  content: \"\\f5a5\";\n}\n\n.fa-object-group::before {\n  content: \"\\f247\";\n}\n\n.fa-chart-line::before {\n  content: \"\\f201\";\n}\n\n.fa-line-chart::before {\n  content: \"\\f201\";\n}\n\n.fa-mask-ventilator::before {\n  content: \"\\e524\";\n}\n\n.fa-arrow-right::before {\n  content: \"\\f061\";\n}\n\n.fa-signs-post::before {\n  content: \"\\f277\";\n}\n\n.fa-map-signs::before {\n  content: \"\\f277\";\n}\n\n.fa-cash-register::before {\n  content: \"\\f788\";\n}\n\n.fa-person-circle-question::before {\n  content: \"\\e542\";\n}\n\n.fa-h::before {\n  content: \"H\";\n}\n\n.fa-tarp::before {\n  content: \"\\e57b\";\n}\n\n.fa-screwdriver-wrench::before {\n  content: \"\\f7d9\";\n}\n\n.fa-tools::before {\n  content: \"\\f7d9\";\n}\n\n.fa-arrows-to-eye::before {\n  content: \"\\e4bf\";\n}\n\n.fa-plug-circle-bolt::before {\n  content: \"\\e55b\";\n}\n\n.fa-heart::before {\n  content: \"\\f004\";\n}\n\n.fa-mars-and-venus::before {\n  content: \"\\f224\";\n}\n\n.fa-house-user::before {\n  content: \"\\e1b0\";\n}\n\n.fa-home-user::before {\n  content: \"\\e1b0\";\n}\n\n.fa-dumpster-fire::before {\n  content: \"\\f794\";\n}\n\n.fa-house-crack::before {\n  content: \"\\e3b1\";\n}\n\n.fa-martini-glass-citrus::before {\n  content: \"\\f561\";\n}\n\n.fa-cocktail::before {\n  content: \"\\f561\";\n}\n\n.fa-face-surprise::before {\n  content: \"\\f5c2\";\n}\n\n.fa-surprise::before {\n  content: \"\\f5c2\";\n}\n\n.fa-bottle-water::before {\n  content: \"\\e4c5\";\n}\n\n.fa-circle-pause::before {\n  content: \"\\f28b\";\n}\n\n.fa-pause-circle::before {\n  content: \"\\f28b\";\n}\n\n.fa-toilet-paper-slash::before {\n  content: \"\\e072\";\n}\n\n.fa-apple-whole::before {\n  content: \"\\f5d1\";\n}\n\n.fa-apple-alt::before {\n  content: \"\\f5d1\";\n}\n\n.fa-kitchen-set::before {\n  content: \"\\e51a\";\n}\n\n.fa-r::before {\n  content: \"R\";\n}\n\n.fa-temperature-quarter::before {\n  content: \"\\f2ca\";\n}\n\n.fa-temperature-1::before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-1::before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-quarter::before {\n  content: \"\\f2ca\";\n}\n\n.fa-cube::before {\n  content: \"\\f1b2\";\n}\n\n.fa-bitcoin-sign::before {\n  content: \"\\e0b4\";\n}\n\n.fa-shield-dog::before {\n  content: \"\\e573\";\n}\n\n.fa-solar-panel::before {\n  content: \"\\f5ba\";\n}\n\n.fa-lock-open::before {\n  content: \"\\f3c1\";\n}\n\n.fa-elevator::before {\n  content: \"\\e16d\";\n}\n\n.fa-money-bill-transfer::before {\n  content: \"\\e528\";\n}\n\n.fa-money-bill-trend-up::before {\n  content: \"\\e529\";\n}\n\n.fa-house-flood-water-circle-arrow-right::before {\n  content: \"\\e50f\";\n}\n\n.fa-square-poll-horizontal::before {\n  content: \"\\f682\";\n}\n\n.fa-poll-h::before {\n  content: \"\\f682\";\n}\n\n.fa-circle::before {\n  content: \"\\f111\";\n}\n\n.fa-backward-fast::before {\n  content: \"\\f049\";\n}\n\n.fa-fast-backward::before {\n  content: \"\\f049\";\n}\n\n.fa-recycle::before {\n  content: \"\\f1b8\";\n}\n\n.fa-user-astronaut::before {\n  content: \"\\f4fb\";\n}\n\n.fa-plane-slash::before {\n  content: \"\\e069\";\n}\n\n.fa-trademark::before {\n  content: \"\\f25c\";\n}\n\n.fa-basketball::before {\n  content: \"\\f434\";\n}\n\n.fa-basketball-ball::before {\n  content: \"\\f434\";\n}\n\n.fa-satellite-dish::before {\n  content: \"\\f7c0\";\n}\n\n.fa-circle-up::before {\n  content: \"\\f35b\";\n}\n\n.fa-arrow-alt-circle-up::before {\n  content: \"\\f35b\";\n}\n\n.fa-mobile-screen-button::before {\n  content: \"\\f3cd\";\n}\n\n.fa-mobile-alt::before {\n  content: \"\\f3cd\";\n}\n\n.fa-volume-high::before {\n  content: \"\\f028\";\n}\n\n.fa-volume-up::before {\n  content: \"\\f028\";\n}\n\n.fa-users-rays::before {\n  content: \"\\e593\";\n}\n\n.fa-wallet::before {\n  content: \"\\f555\";\n}\n\n.fa-clipboard-check::before {\n  content: \"\\f46c\";\n}\n\n.fa-file-audio::before {\n  content: \"\\f1c7\";\n}\n\n.fa-burger::before {\n  content: \"\\f805\";\n}\n\n.fa-hamburger::before {\n  content: \"\\f805\";\n}\n\n.fa-wrench::before {\n  content: \"\\f0ad\";\n}\n\n.fa-bugs::before {\n  content: \"\\e4d0\";\n}\n\n.fa-rupee-sign::before {\n  content: \"\\f156\";\n}\n\n.fa-rupee::before {\n  content: \"\\f156\";\n}\n\n.fa-file-image::before {\n  content: \"\\f1c5\";\n}\n\n.fa-circle-question::before {\n  content: \"\\f059\";\n}\n\n.fa-question-circle::before {\n  content: \"\\f059\";\n}\n\n.fa-plane-departure::before {\n  content: \"\\f5b0\";\n}\n\n.fa-handshake-slash::before {\n  content: \"\\e060\";\n}\n\n.fa-book-bookmark::before {\n  content: \"\\e0bb\";\n}\n\n.fa-code-branch::before {\n  content: \"\\f126\";\n}\n\n.fa-hat-cowboy::before {\n  content: \"\\f8c0\";\n}\n\n.fa-bridge::before {\n  content: \"\\e4c8\";\n}\n\n.fa-phone-flip::before {\n  content: \"\\f879\";\n}\n\n.fa-phone-alt::before {\n  content: \"\\f879\";\n}\n\n.fa-truck-front::before {\n  content: \"\\e2b7\";\n}\n\n.fa-cat::before {\n  content: \"\\f6be\";\n}\n\n.fa-anchor-circle-exclamation::before {\n  content: \"\\e4ab\";\n}\n\n.fa-truck-field::before {\n  content: \"\\e58d\";\n}\n\n.fa-route::before {\n  content: \"\\f4d7\";\n}\n\n.fa-clipboard-question::before {\n  content: \"\\e4e3\";\n}\n\n.fa-panorama::before {\n  content: \"\\e209\";\n}\n\n.fa-comment-medical::before {\n  content: \"\\f7f5\";\n}\n\n.fa-teeth-open::before {\n  content: \"\\f62f\";\n}\n\n.fa-file-circle-minus::before {\n  content: \"\\e4ed\";\n}\n\n.fa-tags::before {\n  content: \"\\f02c\";\n}\n\n.fa-wine-glass::before {\n  content: \"\\f4e3\";\n}\n\n.fa-forward-fast::before {\n  content: \"\\f050\";\n}\n\n.fa-fast-forward::before {\n  content: \"\\f050\";\n}\n\n.fa-face-meh-blank::before {\n  content: \"\\f5a4\";\n}\n\n.fa-meh-blank::before {\n  content: \"\\f5a4\";\n}\n\n.fa-square-parking::before {\n  content: \"\\f540\";\n}\n\n.fa-parking::before {\n  content: \"\\f540\";\n}\n\n.fa-house-signal::before {\n  content: \"\\e012\";\n}\n\n.fa-bars-progress::before {\n  content: \"\\f828\";\n}\n\n.fa-tasks-alt::before {\n  content: \"\\f828\";\n}\n\n.fa-faucet-drip::before {\n  content: \"\\e006\";\n}\n\n.fa-cart-flatbed::before {\n  content: \"\\f474\";\n}\n\n.fa-dolly-flatbed::before {\n  content: \"\\f474\";\n}\n\n.fa-ban-smoking::before {\n  content: \"\\f54d\";\n}\n\n.fa-smoking-ban::before {\n  content: \"\\f54d\";\n}\n\n.fa-terminal::before {\n  content: \"\\f120\";\n}\n\n.fa-mobile-button::before {\n  content: \"\\f10b\";\n}\n\n.fa-house-medical-flag::before {\n  content: \"\\e514\";\n}\n\n.fa-basket-shopping::before {\n  content: \"\\f291\";\n}\n\n.fa-shopping-basket::before {\n  content: \"\\f291\";\n}\n\n.fa-tape::before {\n  content: \"\\f4db\";\n}\n\n.fa-bus-simple::before {\n  content: \"\\f55e\";\n}\n\n.fa-bus-alt::before {\n  content: \"\\f55e\";\n}\n\n.fa-eye::before {\n  content: \"\\f06e\";\n}\n\n.fa-face-sad-cry::before {\n  content: \"\\f5b3\";\n}\n\n.fa-sad-cry::before {\n  content: \"\\f5b3\";\n}\n\n.fa-audio-description::before {\n  content: \"\\f29e\";\n}\n\n.fa-person-military-to-person::before {\n  content: \"\\e54c\";\n}\n\n.fa-file-shield::before {\n  content: \"\\e4f0\";\n}\n\n.fa-user-slash::before {\n  content: \"\\f506\";\n}\n\n.fa-pen::before {\n  content: \"\\f304\";\n}\n\n.fa-tower-observation::before {\n  content: \"\\e586\";\n}\n\n.fa-file-code::before {\n  content: \"\\f1c9\";\n}\n\n.fa-signal::before {\n  content: \"\\f012\";\n}\n\n.fa-signal-5::before {\n  content: \"\\f012\";\n}\n\n.fa-signal-perfect::before {\n  content: \"\\f012\";\n}\n\n.fa-bus::before {\n  content: \"\\f207\";\n}\n\n.fa-heart-circle-xmark::before {\n  content: \"\\e501\";\n}\n\n.fa-house-chimney::before {\n  content: \"\\e3af\";\n}\n\n.fa-home-lg::before {\n  content: \"\\e3af\";\n}\n\n.fa-window-maximize::before {\n  content: \"\\f2d0\";\n}\n\n.fa-face-frown::before {\n  content: \"\\f119\";\n}\n\n.fa-frown::before {\n  content: \"\\f119\";\n}\n\n.fa-prescription::before {\n  content: \"\\f5b1\";\n}\n\n.fa-shop::before {\n  content: \"\\f54f\";\n}\n\n.fa-store-alt::before {\n  content: \"\\f54f\";\n}\n\n.fa-floppy-disk::before {\n  content: \"\\f0c7\";\n}\n\n.fa-save::before {\n  content: \"\\f0c7\";\n}\n\n.fa-vihara::before {\n  content: \"\\f6a7\";\n}\n\n.fa-scale-unbalanced::before {\n  content: \"\\f515\";\n}\n\n.fa-balance-scale-left::before {\n  content: \"\\f515\";\n}\n\n.fa-sort-up::before {\n  content: \"\\f0de\";\n}\n\n.fa-sort-asc::before {\n  content: \"\\f0de\";\n}\n\n.fa-comment-dots::before {\n  content: \"\\f4ad\";\n}\n\n.fa-commenting::before {\n  content: \"\\f4ad\";\n}\n\n.fa-plant-wilt::before {\n  content: \"\\e5aa\";\n}\n\n.fa-diamond::before {\n  content: \"\\f219\";\n}\n\n.fa-face-grin-squint::before {\n  content: \"\\f585\";\n}\n\n.fa-grin-squint::before {\n  content: \"\\f585\";\n}\n\n.fa-hand-holding-dollar::before {\n  content: \"\\f4c0\";\n}\n\n.fa-hand-holding-usd::before {\n  content: \"\\f4c0\";\n}\n\n.fa-bacterium::before {\n  content: \"\\e05a\";\n}\n\n.fa-hand-pointer::before {\n  content: \"\\f25a\";\n}\n\n.fa-drum-steelpan::before {\n  content: \"\\f56a\";\n}\n\n.fa-hand-scissors::before {\n  content: \"\\f257\";\n}\n\n.fa-hands-praying::before {\n  content: \"\\f684\";\n}\n\n.fa-praying-hands::before {\n  content: \"\\f684\";\n}\n\n.fa-arrow-rotate-right::before {\n  content: \"\\f01e\";\n}\n\n.fa-arrow-right-rotate::before {\n  content: \"\\f01e\";\n}\n\n.fa-arrow-rotate-forward::before {\n  content: \"\\f01e\";\n}\n\n.fa-redo::before {\n  content: \"\\f01e\";\n}\n\n.fa-biohazard::before {\n  content: \"\\f780\";\n}\n\n.fa-location-crosshairs::before {\n  content: \"\\f601\";\n}\n\n.fa-location::before {\n  content: \"\\f601\";\n}\n\n.fa-mars-double::before {\n  content: \"\\f227\";\n}\n\n.fa-child-dress::before {\n  content: \"\\e59c\";\n}\n\n.fa-users-between-lines::before {\n  content: \"\\e591\";\n}\n\n.fa-lungs-virus::before {\n  content: \"\\e067\";\n}\n\n.fa-face-grin-tears::before {\n  content: \"\\f588\";\n}\n\n.fa-grin-tears::before {\n  content: \"\\f588\";\n}\n\n.fa-phone::before {\n  content: \"\\f095\";\n}\n\n.fa-calendar-xmark::before {\n  content: \"\\f273\";\n}\n\n.fa-calendar-times::before {\n  content: \"\\f273\";\n}\n\n.fa-child-reaching::before {\n  content: \"\\e59d\";\n}\n\n.fa-head-side-virus::before {\n  content: \"\\e064\";\n}\n\n.fa-user-gear::before {\n  content: \"\\f4fe\";\n}\n\n.fa-user-cog::before {\n  content: \"\\f4fe\";\n}\n\n.fa-arrow-up-1-9::before {\n  content: \"\\f163\";\n}\n\n.fa-sort-numeric-up::before {\n  content: \"\\f163\";\n}\n\n.fa-door-closed::before {\n  content: \"\\f52a\";\n}\n\n.fa-shield-virus::before {\n  content: \"\\e06c\";\n}\n\n.fa-dice-six::before {\n  content: \"\\f526\";\n}\n\n.fa-mosquito-net::before {\n  content: \"\\e52c\";\n}\n\n.fa-bridge-water::before {\n  content: \"\\e4ce\";\n}\n\n.fa-person-booth::before {\n  content: \"\\f756\";\n}\n\n.fa-text-width::before {\n  content: \"\\f035\";\n}\n\n.fa-hat-wizard::before {\n  content: \"\\f6e8\";\n}\n\n.fa-pen-fancy::before {\n  content: \"\\f5ac\";\n}\n\n.fa-person-digging::before {\n  content: \"\\f85e\";\n}\n\n.fa-digging::before {\n  content: \"\\f85e\";\n}\n\n.fa-trash::before {\n  content: \"\\f1f8\";\n}\n\n.fa-gauge-simple::before {\n  content: \"\\f629\";\n}\n\n.fa-gauge-simple-med::before {\n  content: \"\\f629\";\n}\n\n.fa-tachometer-average::before {\n  content: \"\\f629\";\n}\n\n.fa-book-medical::before {\n  content: \"\\f7e6\";\n}\n\n.fa-poo::before {\n  content: \"\\f2fe\";\n}\n\n.fa-quote-right::before {\n  content: \"\\f10e\";\n}\n\n.fa-quote-right-alt::before {\n  content: \"\\f10e\";\n}\n\n.fa-shirt::before {\n  content: \"\\f553\";\n}\n\n.fa-t-shirt::before {\n  content: \"\\f553\";\n}\n\n.fa-tshirt::before {\n  content: \"\\f553\";\n}\n\n.fa-cubes::before {\n  content: \"\\f1b3\";\n}\n\n.fa-divide::before {\n  content: \"\\f529\";\n}\n\n.fa-tenge-sign::before {\n  content: \"\\f7d7\";\n}\n\n.fa-tenge::before {\n  content: \"\\f7d7\";\n}\n\n.fa-headphones::before {\n  content: \"\\f025\";\n}\n\n.fa-hands-holding::before {\n  content: \"\\f4c2\";\n}\n\n.fa-hands-clapping::before {\n  content: \"\\e1a8\";\n}\n\n.fa-republican::before {\n  content: \"\\f75e\";\n}\n\n.fa-arrow-left::before {\n  content: \"\\f060\";\n}\n\n.fa-person-circle-xmark::before {\n  content: \"\\e543\";\n}\n\n.fa-ruler::before {\n  content: \"\\f545\";\n}\n\n.fa-align-left::before {\n  content: \"\\f036\";\n}\n\n.fa-dice-d6::before {\n  content: \"\\f6d1\";\n}\n\n.fa-restroom::before {\n  content: \"\\f7bd\";\n}\n\n.fa-j::before {\n  content: \"J\";\n}\n\n.fa-users-viewfinder::before {\n  content: \"\\e595\";\n}\n\n.fa-file-video::before {\n  content: \"\\f1c8\";\n}\n\n.fa-up-right-from-square::before {\n  content: \"\\f35d\";\n}\n\n.fa-external-link-alt::before {\n  content: \"\\f35d\";\n}\n\n.fa-table-cells::before {\n  content: \"\\f00a\";\n}\n\n.fa-th::before {\n  content: \"\\f00a\";\n}\n\n.fa-file-pdf::before {\n  content: \"\\f1c1\";\n}\n\n.fa-book-bible::before {\n  content: \"\\f647\";\n}\n\n.fa-bible::before {\n  content: \"\\f647\";\n}\n\n.fa-o::before {\n  content: \"O\";\n}\n\n.fa-suitcase-medical::before {\n  content: \"\\f0fa\";\n}\n\n.fa-medkit::before {\n  content: \"\\f0fa\";\n}\n\n.fa-user-secret::before {\n  content: \"\\f21b\";\n}\n\n.fa-otter::before {\n  content: \"\\f700\";\n}\n\n.fa-person-dress::before {\n  content: \"\\f182\";\n}\n\n.fa-female::before {\n  content: \"\\f182\";\n}\n\n.fa-comment-dollar::before {\n  content: \"\\f651\";\n}\n\n.fa-business-time::before {\n  content: \"\\f64a\";\n}\n\n.fa-briefcase-clock::before {\n  content: \"\\f64a\";\n}\n\n.fa-table-cells-large::before {\n  content: \"\\f009\";\n}\n\n.fa-th-large::before {\n  content: \"\\f009\";\n}\n\n.fa-book-tanakh::before {\n  content: \"\\f827\";\n}\n\n.fa-tanakh::before {\n  content: \"\\f827\";\n}\n\n.fa-phone-volume::before {\n  content: \"\\f2a0\";\n}\n\n.fa-volume-control-phone::before {\n  content: \"\\f2a0\";\n}\n\n.fa-hat-cowboy-side::before {\n  content: \"\\f8c1\";\n}\n\n.fa-clipboard-user::before {\n  content: \"\\f7f3\";\n}\n\n.fa-child::before {\n  content: \"\\f1ae\";\n}\n\n.fa-lira-sign::before {\n  content: \"\\f195\";\n}\n\n.fa-satellite::before {\n  content: \"\\f7bf\";\n}\n\n.fa-plane-lock::before {\n  content: \"\\e558\";\n}\n\n.fa-tag::before {\n  content: \"\\f02b\";\n}\n\n.fa-comment::before {\n  content: \"\\f075\";\n}\n\n.fa-cake-candles::before {\n  content: \"\\f1fd\";\n}\n\n.fa-birthday-cake::before {\n  content: \"\\f1fd\";\n}\n\n.fa-cake::before {\n  content: \"\\f1fd\";\n}\n\n.fa-envelope::before {\n  content: \"\\f0e0\";\n}\n\n.fa-angles-up::before {\n  content: \"\\f102\";\n}\n\n.fa-angle-double-up::before {\n  content: \"\\f102\";\n}\n\n.fa-paperclip::before {\n  content: \"\\f0c6\";\n}\n\n.fa-arrow-right-to-city::before {\n  content: \"\\e4b3\";\n}\n\n.fa-ribbon::before {\n  content: \"\\f4d6\";\n}\n\n.fa-lungs::before {\n  content: \"\\f604\";\n}\n\n.fa-arrow-up-9-1::before {\n  content: \"\\f887\";\n}\n\n.fa-sort-numeric-up-alt::before {\n  content: \"\\f887\";\n}\n\n.fa-litecoin-sign::before {\n  content: \"\\e1d3\";\n}\n\n.fa-border-none::before {\n  content: \"\\f850\";\n}\n\n.fa-circle-nodes::before {\n  content: \"\\e4e2\";\n}\n\n.fa-parachute-box::before {\n  content: \"\\f4cd\";\n}\n\n.fa-indent::before {\n  content: \"\\f03c\";\n}\n\n.fa-truck-field-un::before {\n  content: \"\\e58e\";\n}\n\n.fa-hourglass::before {\n  content: \"\\f254\";\n}\n\n.fa-hourglass-empty::before {\n  content: \"\\f254\";\n}\n\n.fa-mountain::before {\n  content: \"\\f6fc\";\n}\n\n.fa-user-doctor::before {\n  content: \"\\f0f0\";\n}\n\n.fa-user-md::before {\n  content: \"\\f0f0\";\n}\n\n.fa-circle-info::before {\n  content: \"\\f05a\";\n}\n\n.fa-info-circle::before {\n  content: \"\\f05a\";\n}\n\n.fa-cloud-meatball::before {\n  content: \"\\f73b\";\n}\n\n.fa-camera::before {\n  content: \"\\f030\";\n}\n\n.fa-camera-alt::before {\n  content: \"\\f030\";\n}\n\n.fa-square-virus::before {\n  content: \"\\e578\";\n}\n\n.fa-meteor::before {\n  content: \"\\f753\";\n}\n\n.fa-car-on::before {\n  content: \"\\e4dd\";\n}\n\n.fa-sleigh::before {\n  content: \"\\f7cc\";\n}\n\n.fa-arrow-down-1-9::before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-asc::before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-down::before {\n  content: \"\\f162\";\n}\n\n.fa-hand-holding-droplet::before {\n  content: \"\\f4c1\";\n}\n\n.fa-hand-holding-water::before {\n  content: \"\\f4c1\";\n}\n\n.fa-water::before {\n  content: \"\\f773\";\n}\n\n.fa-calendar-check::before {\n  content: \"\\f274\";\n}\n\n.fa-braille::before {\n  content: \"\\f2a1\";\n}\n\n.fa-prescription-bottle-medical::before {\n  content: \"\\f486\";\n}\n\n.fa-prescription-bottle-alt::before {\n  content: \"\\f486\";\n}\n\n.fa-landmark::before {\n  content: \"\\f66f\";\n}\n\n.fa-truck::before {\n  content: \"\\f0d1\";\n}\n\n.fa-crosshairs::before {\n  content: \"\\f05b\";\n}\n\n.fa-person-cane::before {\n  content: \"\\e53c\";\n}\n\n.fa-tent::before {\n  content: \"\\e57d\";\n}\n\n.fa-vest-patches::before {\n  content: \"\\e086\";\n}\n\n.fa-check-double::before {\n  content: \"\\f560\";\n}\n\n.fa-arrow-down-a-z::before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-asc::before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-down::before {\n  content: \"\\f15d\";\n}\n\n.fa-money-bill-wheat::before {\n  content: \"\\e52a\";\n}\n\n.fa-cookie::before {\n  content: \"\\f563\";\n}\n\n.fa-arrow-rotate-left::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-left-rotate::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-back::before {\n  content: \"\\f0e2\";\n}\n\n.fa-arrow-rotate-backward::before {\n  content: \"\\f0e2\";\n}\n\n.fa-undo::before {\n  content: \"\\f0e2\";\n}\n\n.fa-hard-drive::before {\n  content: \"\\f0a0\";\n}\n\n.fa-hdd::before {\n  content: \"\\f0a0\";\n}\n\n.fa-face-grin-squint-tears::before {\n  content: \"\\f586\";\n}\n\n.fa-grin-squint-tears::before {\n  content: \"\\f586\";\n}\n\n.fa-dumbbell::before {\n  content: \"\\f44b\";\n}\n\n.fa-rectangle-list::before {\n  content: \"\\f022\";\n}\n\n.fa-list-alt::before {\n  content: \"\\f022\";\n}\n\n.fa-tarp-droplet::before {\n  content: \"\\e57c\";\n}\n\n.fa-house-medical-circle-check::before {\n  content: \"\\e511\";\n}\n\n.fa-person-skiing-nordic::before {\n  content: \"\\f7ca\";\n}\n\n.fa-skiing-nordic::before {\n  content: \"\\f7ca\";\n}\n\n.fa-calendar-plus::before {\n  content: \"\\f271\";\n}\n\n.fa-plane-arrival::before {\n  content: \"\\f5af\";\n}\n\n.fa-circle-left::before {\n  content: \"\\f359\";\n}\n\n.fa-arrow-alt-circle-left::before {\n  content: \"\\f359\";\n}\n\n.fa-train-subway::before {\n  content: \"\\f239\";\n}\n\n.fa-subway::before {\n  content: \"\\f239\";\n}\n\n.fa-chart-gantt::before {\n  content: \"\\e0e4\";\n}\n\n.fa-indian-rupee-sign::before {\n  content: \"\\e1bc\";\n}\n\n.fa-indian-rupee::before {\n  content: \"\\e1bc\";\n}\n\n.fa-inr::before {\n  content: \"\\e1bc\";\n}\n\n.fa-crop-simple::before {\n  content: \"\\f565\";\n}\n\n.fa-crop-alt::before {\n  content: \"\\f565\";\n}\n\n.fa-money-bill-1::before {\n  content: \"\\f3d1\";\n}\n\n.fa-money-bill-alt::before {\n  content: \"\\f3d1\";\n}\n\n.fa-left-long::before {\n  content: \"\\f30a\";\n}\n\n.fa-long-arrow-alt-left::before {\n  content: \"\\f30a\";\n}\n\n.fa-dna::before {\n  content: \"\\f471\";\n}\n\n.fa-virus-slash::before {\n  content: \"\\e075\";\n}\n\n.fa-minus::before {\n  content: \"\\f068\";\n}\n\n.fa-subtract::before {\n  content: \"\\f068\";\n}\n\n.fa-chess::before {\n  content: \"\\f439\";\n}\n\n.fa-arrow-left-long::before {\n  content: \"\\f177\";\n}\n\n.fa-long-arrow-left::before {\n  content: \"\\f177\";\n}\n\n.fa-plug-circle-check::before {\n  content: \"\\e55c\";\n}\n\n.fa-street-view::before {\n  content: \"\\f21d\";\n}\n\n.fa-franc-sign::before {\n  content: \"\\e18f\";\n}\n\n.fa-volume-off::before {\n  content: \"\\f026\";\n}\n\n.fa-hands-asl-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-american-sign-language-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-asl-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-hands-american-sign-language-interpreting::before {\n  content: \"\\f2a3\";\n}\n\n.fa-gear::before {\n  content: \"\\f013\";\n}\n\n.fa-cog::before {\n  content: \"\\f013\";\n}\n\n.fa-droplet-slash::before {\n  content: \"\\f5c7\";\n}\n\n.fa-tint-slash::before {\n  content: \"\\f5c7\";\n}\n\n.fa-mosque::before {\n  content: \"\\f678\";\n}\n\n.fa-mosquito::before {\n  content: \"\\e52b\";\n}\n\n.fa-star-of-david::before {\n  content: \"\\f69a\";\n}\n\n.fa-person-military-rifle::before {\n  content: \"\\e54b\";\n}\n\n.fa-cart-shopping::before {\n  content: \"\\f07a\";\n}\n\n.fa-shopping-cart::before {\n  content: \"\\f07a\";\n}\n\n.fa-vials::before {\n  content: \"\\f493\";\n}\n\n.fa-plug-circle-plus::before {\n  content: \"\\e55f\";\n}\n\n.fa-place-of-worship::before {\n  content: \"\\f67f\";\n}\n\n.fa-grip-vertical::before {\n  content: \"\\f58e\";\n}\n\n.fa-arrow-turn-up::before {\n  content: \"\\f148\";\n}\n\n.fa-level-up::before {\n  content: \"\\f148\";\n}\n\n.fa-u::before {\n  content: \"U\";\n}\n\n.fa-square-root-variable::before {\n  content: \"\\f698\";\n}\n\n.fa-square-root-alt::before {\n  content: \"\\f698\";\n}\n\n.fa-clock::before {\n  content: \"\\f017\";\n}\n\n.fa-clock-four::before {\n  content: \"\\f017\";\n}\n\n.fa-backward-step::before {\n  content: \"\\f048\";\n}\n\n.fa-step-backward::before {\n  content: \"\\f048\";\n}\n\n.fa-pallet::before {\n  content: \"\\f482\";\n}\n\n.fa-faucet::before {\n  content: \"\\e005\";\n}\n\n.fa-baseball-bat-ball::before {\n  content: \"\\f432\";\n}\n\n.fa-s::before {\n  content: \"S\";\n}\n\n.fa-timeline::before {\n  content: \"\\e29c\";\n}\n\n.fa-keyboard::before {\n  content: \"\\f11c\";\n}\n\n.fa-caret-down::before {\n  content: \"\\f0d7\";\n}\n\n.fa-house-chimney-medical::before {\n  content: \"\\f7f2\";\n}\n\n.fa-clinic-medical::before {\n  content: \"\\f7f2\";\n}\n\n.fa-temperature-three-quarters::before {\n  content: \"\\f2c8\";\n}\n\n.fa-temperature-3::before {\n  content: \"\\f2c8\";\n}\n\n.fa-thermometer-3::before {\n  content: \"\\f2c8\";\n}\n\n.fa-thermometer-three-quarters::before {\n  content: \"\\f2c8\";\n}\n\n.fa-mobile-screen::before {\n  content: \"\\f3cf\";\n}\n\n.fa-mobile-android-alt::before {\n  content: \"\\f3cf\";\n}\n\n.fa-plane-up::before {\n  content: \"\\e22d\";\n}\n\n.fa-piggy-bank::before {\n  content: \"\\f4d3\";\n}\n\n.fa-battery-half::before {\n  content: \"\\f242\";\n}\n\n.fa-battery-3::before {\n  content: \"\\f242\";\n}\n\n.fa-mountain-city::before {\n  content: \"\\e52e\";\n}\n\n.fa-coins::before {\n  content: \"\\f51e\";\n}\n\n.fa-khanda::before {\n  content: \"\\f66d\";\n}\n\n.fa-sliders::before {\n  content: \"\\f1de\";\n}\n\n.fa-sliders-h::before {\n  content: \"\\f1de\";\n}\n\n.fa-folder-tree::before {\n  content: \"\\f802\";\n}\n\n.fa-network-wired::before {\n  content: \"\\f6ff\";\n}\n\n.fa-map-pin::before {\n  content: \"\\f276\";\n}\n\n.fa-hamsa::before {\n  content: \"\\f665\";\n}\n\n.fa-cent-sign::before {\n  content: \"\\e3f5\";\n}\n\n.fa-flask::before {\n  content: \"\\f0c3\";\n}\n\n.fa-person-pregnant::before {\n  content: \"\\e31e\";\n}\n\n.fa-wand-sparkles::before {\n  content: \"\\f72b\";\n}\n\n.fa-ellipsis-vertical::before {\n  content: \"\\f142\";\n}\n\n.fa-ellipsis-v::before {\n  content: \"\\f142\";\n}\n\n.fa-ticket::before {\n  content: \"\\f145\";\n}\n\n.fa-power-off::before {\n  content: \"\\f011\";\n}\n\n.fa-right-long::before {\n  content: \"\\f30b\";\n}\n\n.fa-long-arrow-alt-right::before {\n  content: \"\\f30b\";\n}\n\n.fa-flag-usa::before {\n  content: \"\\f74d\";\n}\n\n.fa-laptop-file::before {\n  content: \"\\e51d\";\n}\n\n.fa-tty::before {\n  content: \"\\f1e4\";\n}\n\n.fa-teletype::before {\n  content: \"\\f1e4\";\n}\n\n.fa-diagram-next::before {\n  content: \"\\e476\";\n}\n\n.fa-person-rifle::before {\n  content: \"\\e54e\";\n}\n\n.fa-house-medical-circle-exclamation::before {\n  content: \"\\e512\";\n}\n\n.fa-closed-captioning::before {\n  content: \"\\f20a\";\n}\n\n.fa-person-hiking::before {\n  content: \"\\f6ec\";\n}\n\n.fa-hiking::before {\n  content: \"\\f6ec\";\n}\n\n.fa-venus-double::before {\n  content: \"\\f226\";\n}\n\n.fa-images::before {\n  content: \"\\f302\";\n}\n\n.fa-calculator::before {\n  content: \"\\f1ec\";\n}\n\n.fa-people-pulling::before {\n  content: \"\\e535\";\n}\n\n.fa-n::before {\n  content: \"N\";\n}\n\n.fa-cable-car::before {\n  content: \"\\f7da\";\n}\n\n.fa-tram::before {\n  content: \"\\f7da\";\n}\n\n.fa-cloud-rain::before {\n  content: \"\\f73d\";\n}\n\n.fa-building-circle-xmark::before {\n  content: \"\\e4d4\";\n}\n\n.fa-ship::before {\n  content: \"\\f21a\";\n}\n\n.fa-arrows-down-to-line::before {\n  content: \"\\e4b8\";\n}\n\n.fa-download::before {\n  content: \"\\f019\";\n}\n\n.fa-face-grin::before {\n  content: \"\\f580\";\n}\n\n.fa-grin::before {\n  content: \"\\f580\";\n}\n\n.fa-delete-left::before {\n  content: \"\\f55a\";\n}\n\n.fa-backspace::before {\n  content: \"\\f55a\";\n}\n\n.fa-eye-dropper::before {\n  content: \"\\f1fb\";\n}\n\n.fa-eye-dropper-empty::before {\n  content: \"\\f1fb\";\n}\n\n.fa-eyedropper::before {\n  content: \"\\f1fb\";\n}\n\n.fa-file-circle-check::before {\n  content: \"\\e5a0\";\n}\n\n.fa-forward::before {\n  content: \"\\f04e\";\n}\n\n.fa-mobile::before {\n  content: \"\\f3ce\";\n}\n\n.fa-mobile-android::before {\n  content: \"\\f3ce\";\n}\n\n.fa-mobile-phone::before {\n  content: \"\\f3ce\";\n}\n\n.fa-face-meh::before {\n  content: \"\\f11a\";\n}\n\n.fa-meh::before {\n  content: \"\\f11a\";\n}\n\n.fa-align-center::before {\n  content: \"\\f037\";\n}\n\n.fa-book-skull::before {\n  content: \"\\f6b7\";\n}\n\n.fa-book-dead::before {\n  content: \"\\f6b7\";\n}\n\n.fa-id-card::before {\n  content: \"\\f2c2\";\n}\n\n.fa-drivers-license::before {\n  content: \"\\f2c2\";\n}\n\n.fa-outdent::before {\n  content: \"\\f03b\";\n}\n\n.fa-dedent::before {\n  content: \"\\f03b\";\n}\n\n.fa-heart-circle-exclamation::before {\n  content: \"\\e4fe\";\n}\n\n.fa-house::before {\n  content: \"\\f015\";\n}\n\n.fa-home::before {\n  content: \"\\f015\";\n}\n\n.fa-home-alt::before {\n  content: \"\\f015\";\n}\n\n.fa-home-lg-alt::before {\n  content: \"\\f015\";\n}\n\n.fa-calendar-week::before {\n  content: \"\\f784\";\n}\n\n.fa-laptop-medical::before {\n  content: \"\\f812\";\n}\n\n.fa-b::before {\n  content: \"B\";\n}\n\n.fa-file-medical::before {\n  content: \"\\f477\";\n}\n\n.fa-dice-one::before {\n  content: \"\\f525\";\n}\n\n.fa-kiwi-bird::before {\n  content: \"\\f535\";\n}\n\n.fa-arrow-right-arrow-left::before {\n  content: \"\\f0ec\";\n}\n\n.fa-exchange::before {\n  content: \"\\f0ec\";\n}\n\n.fa-rotate-right::before {\n  content: \"\\f2f9\";\n}\n\n.fa-redo-alt::before {\n  content: \"\\f2f9\";\n}\n\n.fa-rotate-forward::before {\n  content: \"\\f2f9\";\n}\n\n.fa-utensils::before {\n  content: \"\\f2e7\";\n}\n\n.fa-cutlery::before {\n  content: \"\\f2e7\";\n}\n\n.fa-arrow-up-wide-short::before {\n  content: \"\\f161\";\n}\n\n.fa-sort-amount-up::before {\n  content: \"\\f161\";\n}\n\n.fa-mill-sign::before {\n  content: \"\\e1ed\";\n}\n\n.fa-bowl-rice::before {\n  content: \"\\e2eb\";\n}\n\n.fa-skull::before {\n  content: \"\\f54c\";\n}\n\n.fa-tower-broadcast::before {\n  content: \"\\f519\";\n}\n\n.fa-broadcast-tower::before {\n  content: \"\\f519\";\n}\n\n.fa-truck-pickup::before {\n  content: \"\\f63c\";\n}\n\n.fa-up-long::before {\n  content: \"\\f30c\";\n}\n\n.fa-long-arrow-alt-up::before {\n  content: \"\\f30c\";\n}\n\n.fa-stop::before {\n  content: \"\\f04d\";\n}\n\n.fa-code-merge::before {\n  content: \"\\f387\";\n}\n\n.fa-upload::before {\n  content: \"\\f093\";\n}\n\n.fa-hurricane::before {\n  content: \"\\f751\";\n}\n\n.fa-mound::before {\n  content: \"\\e52d\";\n}\n\n.fa-toilet-portable::before {\n  content: \"\\e583\";\n}\n\n.fa-compact-disc::before {\n  content: \"\\f51f\";\n}\n\n.fa-file-arrow-down::before {\n  content: \"\\f56d\";\n}\n\n.fa-file-download::before {\n  content: \"\\f56d\";\n}\n\n.fa-caravan::before {\n  content: \"\\f8ff\";\n}\n\n.fa-shield-cat::before {\n  content: \"\\e572\";\n}\n\n.fa-bolt::before {\n  content: \"\\f0e7\";\n}\n\n.fa-zap::before {\n  content: \"\\f0e7\";\n}\n\n.fa-glass-water::before {\n  content: \"\\e4f4\";\n}\n\n.fa-oil-well::before {\n  content: \"\\e532\";\n}\n\n.fa-vault::before {\n  content: \"\\e2c5\";\n}\n\n.fa-mars::before {\n  content: \"\\f222\";\n}\n\n.fa-toilet::before {\n  content: \"\\f7d8\";\n}\n\n.fa-plane-circle-xmark::before {\n  content: \"\\e557\";\n}\n\n.fa-yen-sign::before {\n  content: \"\\f157\";\n}\n\n.fa-cny::before {\n  content: \"\\f157\";\n}\n\n.fa-jpy::before {\n  content: \"\\f157\";\n}\n\n.fa-rmb::before {\n  content: \"\\f157\";\n}\n\n.fa-yen::before {\n  content: \"\\f157\";\n}\n\n.fa-ruble-sign::before {\n  content: \"\\f158\";\n}\n\n.fa-rouble::before {\n  content: \"\\f158\";\n}\n\n.fa-rub::before {\n  content: \"\\f158\";\n}\n\n.fa-ruble::before {\n  content: \"\\f158\";\n}\n\n.fa-sun::before {\n  content: \"\\f185\";\n}\n\n.fa-guitar::before {\n  content: \"\\f7a6\";\n}\n\n.fa-face-laugh-wink::before {\n  content: \"\\f59c\";\n}\n\n.fa-laugh-wink::before {\n  content: \"\\f59c\";\n}\n\n.fa-horse-head::before {\n  content: \"\\f7ab\";\n}\n\n.fa-bore-hole::before {\n  content: \"\\e4c3\";\n}\n\n.fa-industry::before {\n  content: \"\\f275\";\n}\n\n.fa-circle-down::before {\n  content: \"\\f358\";\n}\n\n.fa-arrow-alt-circle-down::before {\n  content: \"\\f358\";\n}\n\n.fa-arrows-turn-to-dots::before {\n  content: \"\\e4c1\";\n}\n\n.fa-florin-sign::before {\n  content: \"\\e184\";\n}\n\n.fa-arrow-down-short-wide::before {\n  content: \"\\f884\";\n}\n\n.fa-sort-amount-desc::before {\n  content: \"\\f884\";\n}\n\n.fa-sort-amount-down-alt::before {\n  content: \"\\f884\";\n}\n\n.fa-less-than::before {\n  content: \"\\<\";\n}\n\n.fa-angle-down::before {\n  content: \"\\f107\";\n}\n\n.fa-car-tunnel::before {\n  content: \"\\e4de\";\n}\n\n.fa-head-side-cough::before {\n  content: \"\\e061\";\n}\n\n.fa-grip-lines::before {\n  content: \"\\f7a4\";\n}\n\n.fa-thumbs-down::before {\n  content: \"\\f165\";\n}\n\n.fa-user-lock::before {\n  content: \"\\f502\";\n}\n\n.fa-arrow-right-long::before {\n  content: \"\\f178\";\n}\n\n.fa-long-arrow-right::before {\n  content: \"\\f178\";\n}\n\n.fa-anchor-circle-xmark::before {\n  content: \"\\e4ac\";\n}\n\n.fa-ellipsis::before {\n  content: \"\\f141\";\n}\n\n.fa-ellipsis-h::before {\n  content: \"\\f141\";\n}\n\n.fa-chess-pawn::before {\n  content: \"\\f443\";\n}\n\n.fa-kit-medical::before {\n  content: \"\\f479\";\n}\n\n.fa-first-aid::before {\n  content: \"\\f479\";\n}\n\n.fa-person-through-window::before {\n  content: \"\\e5a9\";\n}\n\n.fa-toolbox::before {\n  content: \"\\f552\";\n}\n\n.fa-hands-holding-circle::before {\n  content: \"\\e4fb\";\n}\n\n.fa-bug::before {\n  content: \"\\f188\";\n}\n\n.fa-credit-card::before {\n  content: \"\\f09d\";\n}\n\n.fa-credit-card-alt::before {\n  content: \"\\f09d\";\n}\n\n.fa-car::before {\n  content: \"\\f1b9\";\n}\n\n.fa-automobile::before {\n  content: \"\\f1b9\";\n}\n\n.fa-hand-holding-hand::before {\n  content: \"\\e4f7\";\n}\n\n.fa-book-open-reader::before {\n  content: \"\\f5da\";\n}\n\n.fa-book-reader::before {\n  content: \"\\f5da\";\n}\n\n.fa-mountain-sun::before {\n  content: \"\\e52f\";\n}\n\n.fa-arrows-left-right-to-line::before {\n  content: \"\\e4ba\";\n}\n\n.fa-dice-d20::before {\n  content: \"\\f6cf\";\n}\n\n.fa-truck-droplet::before {\n  content: \"\\e58c\";\n}\n\n.fa-file-circle-xmark::before {\n  content: \"\\e5a1\";\n}\n\n.fa-temperature-arrow-up::before {\n  content: \"\\e040\";\n}\n\n.fa-temperature-up::before {\n  content: \"\\e040\";\n}\n\n.fa-medal::before {\n  content: \"\\f5a2\";\n}\n\n.fa-bed::before {\n  content: \"\\f236\";\n}\n\n.fa-square-h::before {\n  content: \"\\f0fd\";\n}\n\n.fa-h-square::before {\n  content: \"\\f0fd\";\n}\n\n.fa-podcast::before {\n  content: \"\\f2ce\";\n}\n\n.fa-temperature-full::before {\n  content: \"\\f2c7\";\n}\n\n.fa-temperature-4::before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-4::before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-full::before {\n  content: \"\\f2c7\";\n}\n\n.fa-bell::before {\n  content: \"\\f0f3\";\n}\n\n.fa-superscript::before {\n  content: \"\\f12b\";\n}\n\n.fa-plug-circle-xmark::before {\n  content: \"\\e560\";\n}\n\n.fa-star-of-life::before {\n  content: \"\\f621\";\n}\n\n.fa-phone-slash::before {\n  content: \"\\f3dd\";\n}\n\n.fa-paint-roller::before {\n  content: \"\\f5aa\";\n}\n\n.fa-handshake-angle::before {\n  content: \"\\f4c4\";\n}\n\n.fa-hands-helping::before {\n  content: \"\\f4c4\";\n}\n\n.fa-location-dot::before {\n  content: \"\\f3c5\";\n}\n\n.fa-map-marker-alt::before {\n  content: \"\\f3c5\";\n}\n\n.fa-file::before {\n  content: \"\\f15b\";\n}\n\n.fa-greater-than::before {\n  content: \"\\>\";\n}\n\n.fa-person-swimming::before {\n  content: \"\\f5c4\";\n}\n\n.fa-swimmer::before {\n  content: \"\\f5c4\";\n}\n\n.fa-arrow-down::before {\n  content: \"\\f063\";\n}\n\n.fa-droplet::before {\n  content: \"\\f043\";\n}\n\n.fa-tint::before {\n  content: \"\\f043\";\n}\n\n.fa-eraser::before {\n  content: \"\\f12d\";\n}\n\n.fa-earth-americas::before {\n  content: \"\\f57d\";\n}\n\n.fa-earth::before {\n  content: \"\\f57d\";\n}\n\n.fa-earth-america::before {\n  content: \"\\f57d\";\n}\n\n.fa-globe-americas::before {\n  content: \"\\f57d\";\n}\n\n.fa-person-burst::before {\n  content: \"\\e53b\";\n}\n\n.fa-dove::before {\n  content: \"\\f4ba\";\n}\n\n.fa-battery-empty::before {\n  content: \"\\f244\";\n}\n\n.fa-battery-0::before {\n  content: \"\\f244\";\n}\n\n.fa-socks::before {\n  content: \"\\f696\";\n}\n\n.fa-inbox::before {\n  content: \"\\f01c\";\n}\n\n.fa-section::before {\n  content: \"\\e447\";\n}\n\n.fa-gauge-high::before {\n  content: \"\\f625\";\n}\n\n.fa-tachometer-alt::before {\n  content: \"\\f625\";\n}\n\n.fa-tachometer-alt-fast::before {\n  content: \"\\f625\";\n}\n\n.fa-envelope-open-text::before {\n  content: \"\\f658\";\n}\n\n.fa-hospital::before {\n  content: \"\\f0f8\";\n}\n\n.fa-hospital-alt::before {\n  content: \"\\f0f8\";\n}\n\n.fa-hospital-wide::before {\n  content: \"\\f0f8\";\n}\n\n.fa-wine-bottle::before {\n  content: \"\\f72f\";\n}\n\n.fa-chess-rook::before {\n  content: \"\\f447\";\n}\n\n.fa-bars-staggered::before {\n  content: \"\\f550\";\n}\n\n.fa-reorder::before {\n  content: \"\\f550\";\n}\n\n.fa-stream::before {\n  content: \"\\f550\";\n}\n\n.fa-dharmachakra::before {\n  content: \"\\f655\";\n}\n\n.fa-hotdog::before {\n  content: \"\\f80f\";\n}\n\n.fa-person-walking-with-cane::before {\n  content: \"\\f29d\";\n}\n\n.fa-blind::before {\n  content: \"\\f29d\";\n}\n\n.fa-drum::before {\n  content: \"\\f569\";\n}\n\n.fa-ice-cream::before {\n  content: \"\\f810\";\n}\n\n.fa-heart-circle-bolt::before {\n  content: \"\\e4fc\";\n}\n\n.fa-fax::before {\n  content: \"\\f1ac\";\n}\n\n.fa-paragraph::before {\n  content: \"\\f1dd\";\n}\n\n.fa-check-to-slot::before {\n  content: \"\\f772\";\n}\n\n.fa-vote-yea::before {\n  content: \"\\f772\";\n}\n\n.fa-star-half::before {\n  content: \"\\f089\";\n}\n\n.fa-boxes-stacked::before {\n  content: \"\\f468\";\n}\n\n.fa-boxes::before {\n  content: \"\\f468\";\n}\n\n.fa-boxes-alt::before {\n  content: \"\\f468\";\n}\n\n.fa-link::before {\n  content: \"\\f0c1\";\n}\n\n.fa-chain::before {\n  content: \"\\f0c1\";\n}\n\n.fa-ear-listen::before {\n  content: \"\\f2a2\";\n}\n\n.fa-assistive-listening-systems::before {\n  content: \"\\f2a2\";\n}\n\n.fa-tree-city::before {\n  content: \"\\e587\";\n}\n\n.fa-play::before {\n  content: \"\\f04b\";\n}\n\n.fa-font::before {\n  content: \"\\f031\";\n}\n\n.fa-table-cells-row-lock::before {\n  content: \"\\e67a\";\n}\n\n.fa-rupiah-sign::before {\n  content: \"\\e23d\";\n}\n\n.fa-magnifying-glass::before {\n  content: \"\\f002\";\n}\n\n.fa-search::before {\n  content: \"\\f002\";\n}\n\n.fa-table-tennis-paddle-ball::before {\n  content: \"\\f45d\";\n}\n\n.fa-ping-pong-paddle-ball::before {\n  content: \"\\f45d\";\n}\n\n.fa-table-tennis::before {\n  content: \"\\f45d\";\n}\n\n.fa-person-dots-from-line::before {\n  content: \"\\f470\";\n}\n\n.fa-diagnoses::before {\n  content: \"\\f470\";\n}\n\n.fa-trash-can-arrow-up::before {\n  content: \"\\f82a\";\n}\n\n.fa-trash-restore-alt::before {\n  content: \"\\f82a\";\n}\n\n.fa-naira-sign::before {\n  content: \"\\e1f6\";\n}\n\n.fa-cart-arrow-down::before {\n  content: \"\\f218\";\n}\n\n.fa-walkie-talkie::before {\n  content: \"\\f8ef\";\n}\n\n.fa-file-pen::before {\n  content: \"\\f31c\";\n}\n\n.fa-file-edit::before {\n  content: \"\\f31c\";\n}\n\n.fa-receipt::before {\n  content: \"\\f543\";\n}\n\n.fa-square-pen::before {\n  content: \"\\f14b\";\n}\n\n.fa-pen-square::before {\n  content: \"\\f14b\";\n}\n\n.fa-pencil-square::before {\n  content: \"\\f14b\";\n}\n\n.fa-suitcase-rolling::before {\n  content: \"\\f5c1\";\n}\n\n.fa-person-circle-exclamation::before {\n  content: \"\\e53f\";\n}\n\n.fa-chevron-down::before {\n  content: \"\\f078\";\n}\n\n.fa-battery-full::before {\n  content: \"\\f240\";\n}\n\n.fa-battery::before {\n  content: \"\\f240\";\n}\n\n.fa-battery-5::before {\n  content: \"\\f240\";\n}\n\n.fa-skull-crossbones::before {\n  content: \"\\f714\";\n}\n\n.fa-code-compare::before {\n  content: \"\\e13a\";\n}\n\n.fa-list-ul::before {\n  content: \"\\f0ca\";\n}\n\n.fa-list-dots::before {\n  content: \"\\f0ca\";\n}\n\n.fa-school-lock::before {\n  content: \"\\e56f\";\n}\n\n.fa-tower-cell::before {\n  content: \"\\e585\";\n}\n\n.fa-down-long::before {\n  content: \"\\f309\";\n}\n\n.fa-long-arrow-alt-down::before {\n  content: \"\\f309\";\n}\n\n.fa-ranking-star::before {\n  content: \"\\e561\";\n}\n\n.fa-chess-king::before {\n  content: \"\\f43f\";\n}\n\n.fa-person-harassing::before {\n  content: \"\\e549\";\n}\n\n.fa-brazilian-real-sign::before {\n  content: \"\\e46c\";\n}\n\n.fa-landmark-dome::before {\n  content: \"\\f752\";\n}\n\n.fa-landmark-alt::before {\n  content: \"\\f752\";\n}\n\n.fa-arrow-up::before {\n  content: \"\\f062\";\n}\n\n.fa-tv::before {\n  content: \"\\f26c\";\n}\n\n.fa-television::before {\n  content: \"\\f26c\";\n}\n\n.fa-tv-alt::before {\n  content: \"\\f26c\";\n}\n\n.fa-shrimp::before {\n  content: \"\\e448\";\n}\n\n.fa-list-check::before {\n  content: \"\\f0ae\";\n}\n\n.fa-tasks::before {\n  content: \"\\f0ae\";\n}\n\n.fa-jug-detergent::before {\n  content: \"\\e519\";\n}\n\n.fa-circle-user::before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-circle::before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-shield::before {\n  content: \"\\f505\";\n}\n\n.fa-wind::before {\n  content: \"\\f72e\";\n}\n\n.fa-car-burst::before {\n  content: \"\\f5e1\";\n}\n\n.fa-car-crash::before {\n  content: \"\\f5e1\";\n}\n\n.fa-y::before {\n  content: \"Y\";\n}\n\n.fa-person-snowboarding::before {\n  content: \"\\f7ce\";\n}\n\n.fa-snowboarding::before {\n  content: \"\\f7ce\";\n}\n\n.fa-truck-fast::before {\n  content: \"\\f48b\";\n}\n\n.fa-shipping-fast::before {\n  content: \"\\f48b\";\n}\n\n.fa-fish::before {\n  content: \"\\f578\";\n}\n\n.fa-user-graduate::before {\n  content: \"\\f501\";\n}\n\n.fa-circle-half-stroke::before {\n  content: \"\\f042\";\n}\n\n.fa-adjust::before {\n  content: \"\\f042\";\n}\n\n.fa-clapperboard::before {\n  content: \"\\e131\";\n}\n\n.fa-circle-radiation::before {\n  content: \"\\f7ba\";\n}\n\n.fa-radiation-alt::before {\n  content: \"\\f7ba\";\n}\n\n.fa-baseball::before {\n  content: \"\\f433\";\n}\n\n.fa-baseball-ball::before {\n  content: \"\\f433\";\n}\n\n.fa-jet-fighter-up::before {\n  content: \"\\e518\";\n}\n\n.fa-diagram-project::before {\n  content: \"\\f542\";\n}\n\n.fa-project-diagram::before {\n  content: \"\\f542\";\n}\n\n.fa-copy::before {\n  content: \"\\f0c5\";\n}\n\n.fa-volume-xmark::before {\n  content: \"\\f6a9\";\n}\n\n.fa-volume-mute::before {\n  content: \"\\f6a9\";\n}\n\n.fa-volume-times::before {\n  content: \"\\f6a9\";\n}\n\n.fa-hand-sparkles::before {\n  content: \"\\e05d\";\n}\n\n.fa-grip::before {\n  content: \"\\f58d\";\n}\n\n.fa-grip-horizontal::before {\n  content: \"\\f58d\";\n}\n\n.fa-share-from-square::before {\n  content: \"\\f14d\";\n}\n\n.fa-share-square::before {\n  content: \"\\f14d\";\n}\n\n.fa-child-combatant::before {\n  content: \"\\e4e0\";\n}\n\n.fa-child-rifle::before {\n  content: \"\\e4e0\";\n}\n\n.fa-gun::before {\n  content: \"\\e19b\";\n}\n\n.fa-square-phone::before {\n  content: \"\\f098\";\n}\n\n.fa-phone-square::before {\n  content: \"\\f098\";\n}\n\n.fa-plus::before {\n  content: \"\\+\";\n}\n\n.fa-add::before {\n  content: \"\\+\";\n}\n\n.fa-expand::before {\n  content: \"\\f065\";\n}\n\n.fa-computer::before {\n  content: \"\\e4e5\";\n}\n\n.fa-xmark::before {\n  content: \"\\f00d\";\n}\n\n.fa-close::before {\n  content: \"\\f00d\";\n}\n\n.fa-multiply::before {\n  content: \"\\f00d\";\n}\n\n.fa-remove::before {\n  content: \"\\f00d\";\n}\n\n.fa-times::before {\n  content: \"\\f00d\";\n}\n\n.fa-arrows-up-down-left-right::before {\n  content: \"\\f047\";\n}\n\n.fa-arrows::before {\n  content: \"\\f047\";\n}\n\n.fa-chalkboard-user::before {\n  content: \"\\f51c\";\n}\n\n.fa-chalkboard-teacher::before {\n  content: \"\\f51c\";\n}\n\n.fa-peso-sign::before {\n  content: \"\\e222\";\n}\n\n.fa-building-shield::before {\n  content: \"\\e4d8\";\n}\n\n.fa-baby::before {\n  content: \"\\f77c\";\n}\n\n.fa-users-line::before {\n  content: \"\\e592\";\n}\n\n.fa-quote-left::before {\n  content: \"\\f10d\";\n}\n\n.fa-quote-left-alt::before {\n  content: \"\\f10d\";\n}\n\n.fa-tractor::before {\n  content: \"\\f722\";\n}\n\n.fa-trash-arrow-up::before {\n  content: \"\\f829\";\n}\n\n.fa-trash-restore::before {\n  content: \"\\f829\";\n}\n\n.fa-arrow-down-up-lock::before {\n  content: \"\\e4b0\";\n}\n\n.fa-lines-leaning::before {\n  content: \"\\e51e\";\n}\n\n.fa-ruler-combined::before {\n  content: \"\\f546\";\n}\n\n.fa-copyright::before {\n  content: \"\\f1f9\";\n}\n\n.fa-equals::before {\n  content: \"\\=\";\n}\n\n.fa-blender::before {\n  content: \"\\f517\";\n}\n\n.fa-teeth::before {\n  content: \"\\f62e\";\n}\n\n.fa-shekel-sign::before {\n  content: \"\\f20b\";\n}\n\n.fa-ils::before {\n  content: \"\\f20b\";\n}\n\n.fa-shekel::before {\n  content: \"\\f20b\";\n}\n\n.fa-sheqel::before {\n  content: \"\\f20b\";\n}\n\n.fa-sheqel-sign::before {\n  content: \"\\f20b\";\n}\n\n.fa-map::before {\n  content: \"\\f279\";\n}\n\n.fa-rocket::before {\n  content: \"\\f135\";\n}\n\n.fa-photo-film::before {\n  content: \"\\f87c\";\n}\n\n.fa-photo-video::before {\n  content: \"\\f87c\";\n}\n\n.fa-folder-minus::before {\n  content: \"\\f65d\";\n}\n\n.fa-store::before {\n  content: \"\\f54e\";\n}\n\n.fa-arrow-trend-up::before {\n  content: \"\\e098\";\n}\n\n.fa-plug-circle-minus::before {\n  content: \"\\e55e\";\n}\n\n.fa-sign-hanging::before {\n  content: \"\\f4d9\";\n}\n\n.fa-sign::before {\n  content: \"\\f4d9\";\n}\n\n.fa-bezier-curve::before {\n  content: \"\\f55b\";\n}\n\n.fa-bell-slash::before {\n  content: \"\\f1f6\";\n}\n\n.fa-tablet::before {\n  content: \"\\f3fb\";\n}\n\n.fa-tablet-android::before {\n  content: \"\\f3fb\";\n}\n\n.fa-school-flag::before {\n  content: \"\\e56e\";\n}\n\n.fa-fill::before {\n  content: \"\\f575\";\n}\n\n.fa-angle-up::before {\n  content: \"\\f106\";\n}\n\n.fa-drumstick-bite::before {\n  content: \"\\f6d7\";\n}\n\n.fa-holly-berry::before {\n  content: \"\\f7aa\";\n}\n\n.fa-chevron-left::before {\n  content: \"\\f053\";\n}\n\n.fa-bacteria::before {\n  content: \"\\e059\";\n}\n\n.fa-hand-lizard::before {\n  content: \"\\f258\";\n}\n\n.fa-notdef::before {\n  content: \"\\e1fe\";\n}\n\n.fa-disease::before {\n  content: \"\\f7fa\";\n}\n\n.fa-briefcase-medical::before {\n  content: \"\\f469\";\n}\n\n.fa-genderless::before {\n  content: \"\\f22d\";\n}\n\n.fa-chevron-right::before {\n  content: \"\\f054\";\n}\n\n.fa-retweet::before {\n  content: \"\\f079\";\n}\n\n.fa-car-rear::before {\n  content: \"\\f5de\";\n}\n\n.fa-car-alt::before {\n  content: \"\\f5de\";\n}\n\n.fa-pump-soap::before {\n  content: \"\\e06b\";\n}\n\n.fa-video-slash::before {\n  content: \"\\f4e2\";\n}\n\n.fa-battery-quarter::before {\n  content: \"\\f243\";\n}\n\n.fa-battery-2::before {\n  content: \"\\f243\";\n}\n\n.fa-radio::before {\n  content: \"\\f8d7\";\n}\n\n.fa-baby-carriage::before {\n  content: \"\\f77d\";\n}\n\n.fa-carriage-baby::before {\n  content: \"\\f77d\";\n}\n\n.fa-traffic-light::before {\n  content: \"\\f637\";\n}\n\n.fa-thermometer::before {\n  content: \"\\f491\";\n}\n\n.fa-vr-cardboard::before {\n  content: \"\\f729\";\n}\n\n.fa-hand-middle-finger::before {\n  content: \"\\f806\";\n}\n\n.fa-percent::before {\n  content: \"\\%\";\n}\n\n.fa-percentage::before {\n  content: \"\\%\";\n}\n\n.fa-truck-moving::before {\n  content: \"\\f4df\";\n}\n\n.fa-glass-water-droplet::before {\n  content: \"\\e4f5\";\n}\n\n.fa-display::before {\n  content: \"\\e163\";\n}\n\n.fa-face-smile::before {\n  content: \"\\f118\";\n}\n\n.fa-smile::before {\n  content: \"\\f118\";\n}\n\n.fa-thumbtack::before {\n  content: \"\\f08d\";\n}\n\n.fa-thumb-tack::before {\n  content: \"\\f08d\";\n}\n\n.fa-trophy::before {\n  content: \"\\f091\";\n}\n\n.fa-person-praying::before {\n  content: \"\\f683\";\n}\n\n.fa-pray::before {\n  content: \"\\f683\";\n}\n\n.fa-hammer::before {\n  content: \"\\f6e3\";\n}\n\n.fa-hand-peace::before {\n  content: \"\\f25b\";\n}\n\n.fa-rotate::before {\n  content: \"\\f2f1\";\n}\n\n.fa-sync-alt::before {\n  content: \"\\f2f1\";\n}\n\n.fa-spinner::before {\n  content: \"\\f110\";\n}\n\n.fa-robot::before {\n  content: \"\\f544\";\n}\n\n.fa-peace::before {\n  content: \"\\f67c\";\n}\n\n.fa-gears::before {\n  content: \"\\f085\";\n}\n\n.fa-cogs::before {\n  content: \"\\f085\";\n}\n\n.fa-warehouse::before {\n  content: \"\\f494\";\n}\n\n.fa-arrow-up-right-dots::before {\n  content: \"\\e4b7\";\n}\n\n.fa-splotch::before {\n  content: \"\\f5bc\";\n}\n\n.fa-face-grin-hearts::before {\n  content: \"\\f584\";\n}\n\n.fa-grin-hearts::before {\n  content: \"\\f584\";\n}\n\n.fa-dice-four::before {\n  content: \"\\f524\";\n}\n\n.fa-sim-card::before {\n  content: \"\\f7c4\";\n}\n\n.fa-transgender::before {\n  content: \"\\f225\";\n}\n\n.fa-transgender-alt::before {\n  content: \"\\f225\";\n}\n\n.fa-mercury::before {\n  content: \"\\f223\";\n}\n\n.fa-arrow-turn-down::before {\n  content: \"\\f149\";\n}\n\n.fa-level-down::before {\n  content: \"\\f149\";\n}\n\n.fa-person-falling-burst::before {\n  content: \"\\e547\";\n}\n\n.fa-award::before {\n  content: \"\\f559\";\n}\n\n.fa-ticket-simple::before {\n  content: \"\\f3ff\";\n}\n\n.fa-ticket-alt::before {\n  content: \"\\f3ff\";\n}\n\n.fa-building::before {\n  content: \"\\f1ad\";\n}\n\n.fa-angles-left::before {\n  content: \"\\f100\";\n}\n\n.fa-angle-double-left::before {\n  content: \"\\f100\";\n}\n\n.fa-qrcode::before {\n  content: \"\\f029\";\n}\n\n.fa-clock-rotate-left::before {\n  content: \"\\f1da\";\n}\n\n.fa-history::before {\n  content: \"\\f1da\";\n}\n\n.fa-face-grin-beam-sweat::before {\n  content: \"\\f583\";\n}\n\n.fa-grin-beam-sweat::before {\n  content: \"\\f583\";\n}\n\n.fa-file-export::before {\n  content: \"\\f56e\";\n}\n\n.fa-arrow-right-from-file::before {\n  content: \"\\f56e\";\n}\n\n.fa-shield::before {\n  content: \"\\f132\";\n}\n\n.fa-shield-blank::before {\n  content: \"\\f132\";\n}\n\n.fa-arrow-up-short-wide::before {\n  content: \"\\f885\";\n}\n\n.fa-sort-amount-up-alt::before {\n  content: \"\\f885\";\n}\n\n.fa-house-medical::before {\n  content: \"\\e3b2\";\n}\n\n.fa-golf-ball-tee::before {\n  content: \"\\f450\";\n}\n\n.fa-golf-ball::before {\n  content: \"\\f450\";\n}\n\n.fa-circle-chevron-left::before {\n  content: \"\\f137\";\n}\n\n.fa-chevron-circle-left::before {\n  content: \"\\f137\";\n}\n\n.fa-house-chimney-window::before {\n  content: \"\\e00d\";\n}\n\n.fa-pen-nib::before {\n  content: \"\\f5ad\";\n}\n\n.fa-tent-arrow-turn-left::before {\n  content: \"\\e580\";\n}\n\n.fa-tents::before {\n  content: \"\\e582\";\n}\n\n.fa-wand-magic::before {\n  content: \"\\f0d0\";\n}\n\n.fa-magic::before {\n  content: \"\\f0d0\";\n}\n\n.fa-dog::before {\n  content: \"\\f6d3\";\n}\n\n.fa-carrot::before {\n  content: \"\\f787\";\n}\n\n.fa-moon::before {\n  content: \"\\f186\";\n}\n\n.fa-wine-glass-empty::before {\n  content: \"\\f5ce\";\n}\n\n.fa-wine-glass-alt::before {\n  content: \"\\f5ce\";\n}\n\n.fa-cheese::before {\n  content: \"\\f7ef\";\n}\n\n.fa-yin-yang::before {\n  content: \"\\f6ad\";\n}\n\n.fa-music::before {\n  content: \"\\f001\";\n}\n\n.fa-code-commit::before {\n  content: \"\\f386\";\n}\n\n.fa-temperature-low::before {\n  content: \"\\f76b\";\n}\n\n.fa-person-biking::before {\n  content: \"\\f84a\";\n}\n\n.fa-biking::before {\n  content: \"\\f84a\";\n}\n\n.fa-broom::before {\n  content: \"\\f51a\";\n}\n\n.fa-shield-heart::before {\n  content: \"\\e574\";\n}\n\n.fa-gopuram::before {\n  content: \"\\f664\";\n}\n\n.fa-earth-oceania::before {\n  content: \"\\e47b\";\n}\n\n.fa-globe-oceania::before {\n  content: \"\\e47b\";\n}\n\n.fa-square-xmark::before {\n  content: \"\\f2d3\";\n}\n\n.fa-times-square::before {\n  content: \"\\f2d3\";\n}\n\n.fa-xmark-square::before {\n  content: \"\\f2d3\";\n}\n\n.fa-hashtag::before {\n  content: \"\\#\";\n}\n\n.fa-up-right-and-down-left-from-center::before {\n  content: \"\\f424\";\n}\n\n.fa-expand-alt::before {\n  content: \"\\f424\";\n}\n\n.fa-oil-can::before {\n  content: \"\\f613\";\n}\n\n.fa-t::before {\n  content: \"T\";\n}\n\n.fa-hippo::before {\n  content: \"\\f6ed\";\n}\n\n.fa-chart-column::before {\n  content: \"\\e0e3\";\n}\n\n.fa-infinity::before {\n  content: \"\\f534\";\n}\n\n.fa-vial-circle-check::before {\n  content: \"\\e596\";\n}\n\n.fa-person-arrow-down-to-line::before {\n  content: \"\\e538\";\n}\n\n.fa-voicemail::before {\n  content: \"\\f897\";\n}\n\n.fa-fan::before {\n  content: \"\\f863\";\n}\n\n.fa-person-walking-luggage::before {\n  content: \"\\e554\";\n}\n\n.fa-up-down::before {\n  content: \"\\f338\";\n}\n\n.fa-arrows-alt-v::before {\n  content: \"\\f338\";\n}\n\n.fa-cloud-moon-rain::before {\n  content: \"\\f73c\";\n}\n\n.fa-calendar::before {\n  content: \"\\f133\";\n}\n\n.fa-trailer::before {\n  content: \"\\e041\";\n}\n\n.fa-bahai::before {\n  content: \"\\f666\";\n}\n\n.fa-haykal::before {\n  content: \"\\f666\";\n}\n\n.fa-sd-card::before {\n  content: \"\\f7c2\";\n}\n\n.fa-dragon::before {\n  content: \"\\f6d5\";\n}\n\n.fa-shoe-prints::before {\n  content: \"\\f54b\";\n}\n\n.fa-circle-plus::before {\n  content: \"\\f055\";\n}\n\n.fa-plus-circle::before {\n  content: \"\\f055\";\n}\n\n.fa-face-grin-tongue-wink::before {\n  content: \"\\f58b\";\n}\n\n.fa-grin-tongue-wink::before {\n  content: \"\\f58b\";\n}\n\n.fa-hand-holding::before {\n  content: \"\\f4bd\";\n}\n\n.fa-plug-circle-exclamation::before {\n  content: \"\\e55d\";\n}\n\n.fa-link-slash::before {\n  content: \"\\f127\";\n}\n\n.fa-chain-broken::before {\n  content: \"\\f127\";\n}\n\n.fa-chain-slash::before {\n  content: \"\\f127\";\n}\n\n.fa-unlink::before {\n  content: \"\\f127\";\n}\n\n.fa-clone::before {\n  content: \"\\f24d\";\n}\n\n.fa-person-walking-arrow-loop-left::before {\n  content: \"\\e551\";\n}\n\n.fa-arrow-up-z-a::before {\n  content: \"\\f882\";\n}\n\n.fa-sort-alpha-up-alt::before {\n  content: \"\\f882\";\n}\n\n.fa-fire-flame-curved::before {\n  content: \"\\f7e4\";\n}\n\n.fa-fire-alt::before {\n  content: \"\\f7e4\";\n}\n\n.fa-tornado::before {\n  content: \"\\f76f\";\n}\n\n.fa-file-circle-plus::before {\n  content: \"\\e494\";\n}\n\n.fa-book-quran::before {\n  content: \"\\f687\";\n}\n\n.fa-quran::before {\n  content: \"\\f687\";\n}\n\n.fa-anchor::before {\n  content: \"\\f13d\";\n}\n\n.fa-border-all::before {\n  content: \"\\f84c\";\n}\n\n.fa-face-angry::before {\n  content: \"\\f556\";\n}\n\n.fa-angry::before {\n  content: \"\\f556\";\n}\n\n.fa-cookie-bite::before {\n  content: \"\\f564\";\n}\n\n.fa-arrow-trend-down::before {\n  content: \"\\e097\";\n}\n\n.fa-rss::before {\n  content: \"\\f09e\";\n}\n\n.fa-feed::before {\n  content: \"\\f09e\";\n}\n\n.fa-draw-polygon::before {\n  content: \"\\f5ee\";\n}\n\n.fa-scale-balanced::before {\n  content: \"\\f24e\";\n}\n\n.fa-balance-scale::before {\n  content: \"\\f24e\";\n}\n\n.fa-gauge-simple-high::before {\n  content: \"\\f62a\";\n}\n\n.fa-tachometer::before {\n  content: \"\\f62a\";\n}\n\n.fa-tachometer-fast::before {\n  content: \"\\f62a\";\n}\n\n.fa-shower::before {\n  content: \"\\f2cc\";\n}\n\n.fa-desktop::before {\n  content: \"\\f390\";\n}\n\n.fa-desktop-alt::before {\n  content: \"\\f390\";\n}\n\n.fa-m::before {\n  content: \"M\";\n}\n\n.fa-table-list::before {\n  content: \"\\f00b\";\n}\n\n.fa-th-list::before {\n  content: \"\\f00b\";\n}\n\n.fa-comment-sms::before {\n  content: \"\\f7cd\";\n}\n\n.fa-sms::before {\n  content: \"\\f7cd\";\n}\n\n.fa-book::before {\n  content: \"\\f02d\";\n}\n\n.fa-user-plus::before {\n  content: \"\\f234\";\n}\n\n.fa-check::before {\n  content: \"\\f00c\";\n}\n\n.fa-battery-three-quarters::before {\n  content: \"\\f241\";\n}\n\n.fa-battery-4::before {\n  content: \"\\f241\";\n}\n\n.fa-house-circle-check::before {\n  content: \"\\e509\";\n}\n\n.fa-angle-left::before {\n  content: \"\\f104\";\n}\n\n.fa-diagram-successor::before {\n  content: \"\\e47a\";\n}\n\n.fa-truck-arrow-right::before {\n  content: \"\\e58b\";\n}\n\n.fa-arrows-split-up-and-left::before {\n  content: \"\\e4bc\";\n}\n\n.fa-hand-fist::before {\n  content: \"\\f6de\";\n}\n\n.fa-fist-raised::before {\n  content: \"\\f6de\";\n}\n\n.fa-cloud-moon::before {\n  content: \"\\f6c3\";\n}\n\n.fa-briefcase::before {\n  content: \"\\f0b1\";\n}\n\n.fa-person-falling::before {\n  content: \"\\e546\";\n}\n\n.fa-image-portrait::before {\n  content: \"\\f3e0\";\n}\n\n.fa-portrait::before {\n  content: \"\\f3e0\";\n}\n\n.fa-user-tag::before {\n  content: \"\\f507\";\n}\n\n.fa-rug::before {\n  content: \"\\e569\";\n}\n\n.fa-earth-europe::before {\n  content: \"\\f7a2\";\n}\n\n.fa-globe-europe::before {\n  content: \"\\f7a2\";\n}\n\n.fa-cart-flatbed-suitcase::before {\n  content: \"\\f59d\";\n}\n\n.fa-luggage-cart::before {\n  content: \"\\f59d\";\n}\n\n.fa-rectangle-xmark::before {\n  content: \"\\f410\";\n}\n\n.fa-rectangle-times::before {\n  content: \"\\f410\";\n}\n\n.fa-times-rectangle::before {\n  content: \"\\f410\";\n}\n\n.fa-window-close::before {\n  content: \"\\f410\";\n}\n\n.fa-baht-sign::before {\n  content: \"\\e0ac\";\n}\n\n.fa-book-open::before {\n  content: \"\\f518\";\n}\n\n.fa-book-journal-whills::before {\n  content: \"\\f66a\";\n}\n\n.fa-journal-whills::before {\n  content: \"\\f66a\";\n}\n\n.fa-handcuffs::before {\n  content: \"\\e4f8\";\n}\n\n.fa-triangle-exclamation::before {\n  content: \"\\f071\";\n}\n\n.fa-exclamation-triangle::before {\n  content: \"\\f071\";\n}\n\n.fa-warning::before {\n  content: \"\\f071\";\n}\n\n.fa-database::before {\n  content: \"\\f1c0\";\n}\n\n.fa-share::before {\n  content: \"\\f064\";\n}\n\n.fa-mail-forward::before {\n  content: \"\\f064\";\n}\n\n.fa-bottle-droplet::before {\n  content: \"\\e4c4\";\n}\n\n.fa-mask-face::before {\n  content: \"\\e1d7\";\n}\n\n.fa-hill-rockslide::before {\n  content: \"\\e508\";\n}\n\n.fa-right-left::before {\n  content: \"\\f362\";\n}\n\n.fa-exchange-alt::before {\n  content: \"\\f362\";\n}\n\n.fa-paper-plane::before {\n  content: \"\\f1d8\";\n}\n\n.fa-road-circle-exclamation::before {\n  content: \"\\e565\";\n}\n\n.fa-dungeon::before {\n  content: \"\\f6d9\";\n}\n\n.fa-align-right::before {\n  content: \"\\f038\";\n}\n\n.fa-money-bill-1-wave::before {\n  content: \"\\f53b\";\n}\n\n.fa-money-bill-wave-alt::before {\n  content: \"\\f53b\";\n}\n\n.fa-life-ring::before {\n  content: \"\\f1cd\";\n}\n\n.fa-hands::before {\n  content: \"\\f2a7\";\n}\n\n.fa-sign-language::before {\n  content: \"\\f2a7\";\n}\n\n.fa-signing::before {\n  content: \"\\f2a7\";\n}\n\n.fa-calendar-day::before {\n  content: \"\\f783\";\n}\n\n.fa-water-ladder::before {\n  content: \"\\f5c5\";\n}\n\n.fa-ladder-water::before {\n  content: \"\\f5c5\";\n}\n\n.fa-swimming-pool::before {\n  content: \"\\f5c5\";\n}\n\n.fa-arrows-up-down::before {\n  content: \"\\f07d\";\n}\n\n.fa-arrows-v::before {\n  content: \"\\f07d\";\n}\n\n.fa-face-grimace::before {\n  content: \"\\f57f\";\n}\n\n.fa-grimace::before {\n  content: \"\\f57f\";\n}\n\n.fa-wheelchair-move::before {\n  content: \"\\e2ce\";\n}\n\n.fa-wheelchair-alt::before {\n  content: \"\\e2ce\";\n}\n\n.fa-turn-down::before {\n  content: \"\\f3be\";\n}\n\n.fa-level-down-alt::before {\n  content: \"\\f3be\";\n}\n\n.fa-person-walking-arrow-right::before {\n  content: \"\\e552\";\n}\n\n.fa-square-envelope::before {\n  content: \"\\f199\";\n}\n\n.fa-envelope-square::before {\n  content: \"\\f199\";\n}\n\n.fa-dice::before {\n  content: \"\\f522\";\n}\n\n.fa-bowling-ball::before {\n  content: \"\\f436\";\n}\n\n.fa-brain::before {\n  content: \"\\f5dc\";\n}\n\n.fa-bandage::before {\n  content: \"\\f462\";\n}\n\n.fa-band-aid::before {\n  content: \"\\f462\";\n}\n\n.fa-calendar-minus::before {\n  content: \"\\f272\";\n}\n\n.fa-circle-xmark::before {\n  content: \"\\f057\";\n}\n\n.fa-times-circle::before {\n  content: \"\\f057\";\n}\n\n.fa-xmark-circle::before {\n  content: \"\\f057\";\n}\n\n.fa-gifts::before {\n  content: \"\\f79c\";\n}\n\n.fa-hotel::before {\n  content: \"\\f594\";\n}\n\n.fa-earth-asia::before {\n  content: \"\\f57e\";\n}\n\n.fa-globe-asia::before {\n  content: \"\\f57e\";\n}\n\n.fa-id-card-clip::before {\n  content: \"\\f47f\";\n}\n\n.fa-id-card-alt::before {\n  content: \"\\f47f\";\n}\n\n.fa-magnifying-glass-plus::before {\n  content: \"\\f00e\";\n}\n\n.fa-search-plus::before {\n  content: \"\\f00e\";\n}\n\n.fa-thumbs-up::before {\n  content: \"\\f164\";\n}\n\n.fa-user-clock::before {\n  content: \"\\f4fd\";\n}\n\n.fa-hand-dots::before {\n  content: \"\\f461\";\n}\n\n.fa-allergies::before {\n  content: \"\\f461\";\n}\n\n.fa-file-invoice::before {\n  content: \"\\f570\";\n}\n\n.fa-window-minimize::before {\n  content: \"\\f2d1\";\n}\n\n.fa-mug-saucer::before {\n  content: \"\\f0f4\";\n}\n\n.fa-coffee::before {\n  content: \"\\f0f4\";\n}\n\n.fa-brush::before {\n  content: \"\\f55d\";\n}\n\n.fa-mask::before {\n  content: \"\\f6fa\";\n}\n\n.fa-magnifying-glass-minus::before {\n  content: \"\\f010\";\n}\n\n.fa-search-minus::before {\n  content: \"\\f010\";\n}\n\n.fa-ruler-vertical::before {\n  content: \"\\f548\";\n}\n\n.fa-user-large::before {\n  content: \"\\f406\";\n}\n\n.fa-user-alt::before {\n  content: \"\\f406\";\n}\n\n.fa-train-tram::before {\n  content: \"\\e5b4\";\n}\n\n.fa-user-nurse::before {\n  content: \"\\f82f\";\n}\n\n.fa-syringe::before {\n  content: \"\\f48e\";\n}\n\n.fa-cloud-sun::before {\n  content: \"\\f6c4\";\n}\n\n.fa-stopwatch-20::before {\n  content: \"\\e06f\";\n}\n\n.fa-square-full::before {\n  content: \"\\f45c\";\n}\n\n.fa-magnet::before {\n  content: \"\\f076\";\n}\n\n.fa-jar::before {\n  content: \"\\e516\";\n}\n\n.fa-note-sticky::before {\n  content: \"\\f249\";\n}\n\n.fa-sticky-note::before {\n  content: \"\\f249\";\n}\n\n.fa-bug-slash::before {\n  content: \"\\e490\";\n}\n\n.fa-arrow-up-from-water-pump::before {\n  content: \"\\e4b6\";\n}\n\n.fa-bone::before {\n  content: \"\\f5d7\";\n}\n\n.fa-user-injured::before {\n  content: \"\\f728\";\n}\n\n.fa-face-sad-tear::before {\n  content: \"\\f5b4\";\n}\n\n.fa-sad-tear::before {\n  content: \"\\f5b4\";\n}\n\n.fa-plane::before {\n  content: \"\\f072\";\n}\n\n.fa-tent-arrows-down::before {\n  content: \"\\e581\";\n}\n\n.fa-exclamation::before {\n  content: \"\\!\";\n}\n\n.fa-arrows-spin::before {\n  content: \"\\e4bb\";\n}\n\n.fa-print::before {\n  content: \"\\f02f\";\n}\n\n.fa-turkish-lira-sign::before {\n  content: \"\\e2bb\";\n}\n\n.fa-try::before {\n  content: \"\\e2bb\";\n}\n\n.fa-turkish-lira::before {\n  content: \"\\e2bb\";\n}\n\n.fa-dollar-sign::before {\n  content: \"\\$\";\n}\n\n.fa-dollar::before {\n  content: \"\\$\";\n}\n\n.fa-usd::before {\n  content: \"\\$\";\n}\n\n.fa-x::before {\n  content: \"X\";\n}\n\n.fa-magnifying-glass-dollar::before {\n  content: \"\\f688\";\n}\n\n.fa-search-dollar::before {\n  content: \"\\f688\";\n}\n\n.fa-users-gear::before {\n  content: \"\\f509\";\n}\n\n.fa-users-cog::before {\n  content: \"\\f509\";\n}\n\n.fa-person-military-pointing::before {\n  content: \"\\e54a\";\n}\n\n.fa-building-columns::before {\n  content: \"\\f19c\";\n}\n\n.fa-bank::before {\n  content: \"\\f19c\";\n}\n\n.fa-institution::before {\n  content: \"\\f19c\";\n}\n\n.fa-museum::before {\n  content: \"\\f19c\";\n}\n\n.fa-university::before {\n  content: \"\\f19c\";\n}\n\n.fa-umbrella::before {\n  content: \"\\f0e9\";\n}\n\n.fa-trowel::before {\n  content: \"\\e589\";\n}\n\n.fa-d::before {\n  content: \"D\";\n}\n\n.fa-stapler::before {\n  content: \"\\e5af\";\n}\n\n.fa-masks-theater::before {\n  content: \"\\f630\";\n}\n\n.fa-theater-masks::before {\n  content: \"\\f630\";\n}\n\n.fa-kip-sign::before {\n  content: \"\\e1c4\";\n}\n\n.fa-hand-point-left::before {\n  content: \"\\f0a5\";\n}\n\n.fa-handshake-simple::before {\n  content: \"\\f4c6\";\n}\n\n.fa-handshake-alt::before {\n  content: \"\\f4c6\";\n}\n\n.fa-jet-fighter::before {\n  content: \"\\f0fb\";\n}\n\n.fa-fighter-jet::before {\n  content: \"\\f0fb\";\n}\n\n.fa-square-share-nodes::before {\n  content: \"\\f1e1\";\n}\n\n.fa-share-alt-square::before {\n  content: \"\\f1e1\";\n}\n\n.fa-barcode::before {\n  content: \"\\f02a\";\n}\n\n.fa-plus-minus::before {\n  content: \"\\e43c\";\n}\n\n.fa-video::before {\n  content: \"\\f03d\";\n}\n\n.fa-video-camera::before {\n  content: \"\\f03d\";\n}\n\n.fa-graduation-cap::before {\n  content: \"\\f19d\";\n}\n\n.fa-mortar-board::before {\n  content: \"\\f19d\";\n}\n\n.fa-hand-holding-medical::before {\n  content: \"\\e05c\";\n}\n\n.fa-person-circle-check::before {\n  content: \"\\e53e\";\n}\n\n.fa-turn-up::before {\n  content: \"\\f3bf\";\n}\n\n.fa-level-up-alt::before {\n  content: \"\\f3bf\";\n}\n\n.sr-only,\n.fa-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.sr-only-focusable:not(:focus),\n.fa-sr-only-focusable:not(:focus) {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-classic: \"Font Awesome 6 Free\";\n  --fa-font-solid: normal 900 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Free\";\n  font-style: normal;\n  font-weight: 900;\n  font-display: block;\n  src: url(\"font-awesome/fa-solid-900.woff2\") format(\"woff2\"), url(\"font-awesome/fa-solid-900.ttf\") format(\"truetype\");\n}\n.fas,\n.fa-solid {\n  font-weight: 900;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-classic: \"Font Awesome 6 Free\";\n  --fa-font-regular: normal 400 1em/1 \"Font Awesome 6 Free\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Free\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"font-awesome/fa-regular-400.woff2\") format(\"woff2\"), url(\"font-awesome/fa-regular-400.ttf\") format(\"truetype\");\n}\n.far,\n.fa-regular {\n  font-weight: 400;\n}\n\n/*!\n * Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n:root, :host {\n  --fa-style-family-brands: \"Font Awesome 6 Brands\";\n  --fa-font-brands: normal 400 1em/1 \"Font Awesome 6 Brands\";\n}\n\n@font-face {\n  font-family: \"Font Awesome 6 Brands\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"font-awesome/fa-brands-400.woff2\") format(\"woff2\"), url(\"font-awesome/fa-brands-400.ttf\") format(\"truetype\");\n}\n.fab,\n.fa-brands {\n  font-weight: 400;\n}\n\n.fa-monero:before {\n  content: \"\\f3d0\";\n}\n\n.fa-hooli:before {\n  content: \"\\f427\";\n}\n\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n\n.fa-shopware:before {\n  content: \"\\f5b5\";\n}\n\n.fa-creative-commons-nc:before {\n  content: \"\\f4e8\";\n}\n\n.fa-aws:before {\n  content: \"\\f375\";\n}\n\n.fa-redhat:before {\n  content: \"\\f7bc\";\n}\n\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n\n.fa-cloudflare:before {\n  content: \"\\e07d\";\n}\n\n.fa-ups:before {\n  content: \"\\f7e0\";\n}\n\n.fa-pixiv:before {\n  content: \"\\e640\";\n}\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n\n.fa-dyalog:before {\n  content: \"\\f399\";\n}\n\n.fa-bity:before {\n  content: \"\\f37a\";\n}\n\n.fa-stackpath:before {\n  content: \"\\f842\";\n}\n\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n\n.fa-modx:before {\n  content: \"\\f285\";\n}\n\n.fa-guilded:before {\n  content: \"\\e07e\";\n}\n\n.fa-vnv:before {\n  content: \"\\f40b\";\n}\n\n.fa-square-js:before {\n  content: \"\\f3b9\";\n}\n\n.fa-js-square:before {\n  content: \"\\f3b9\";\n}\n\n.fa-microsoft:before {\n  content: \"\\f3ca\";\n}\n\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n\n.fa-orcid:before {\n  content: \"\\f8d2\";\n}\n\n.fa-java:before {\n  content: \"\\f4e4\";\n}\n\n.fa-invision:before {\n  content: \"\\f7b0\";\n}\n\n.fa-creative-commons-pd-alt:before {\n  content: \"\\f4ed\";\n}\n\n.fa-centercode:before {\n  content: \"\\f380\";\n}\n\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n\n.fa-jxl:before {\n  content: \"\\e67b\";\n}\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\";\n}\n\n.fa-creative-commons-by:before {\n  content: \"\\f4e7\";\n}\n\n.fa-unity:before {\n  content: \"\\e049\";\n}\n\n.fa-whmcs:before {\n  content: \"\\f40d\";\n}\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\";\n}\n\n.fa-vk:before {\n  content: \"\\f189\";\n}\n\n.fa-untappd:before {\n  content: \"\\f405\";\n}\n\n.fa-mailchimp:before {\n  content: \"\\f59e\";\n}\n\n.fa-css3-alt:before {\n  content: \"\\f38b\";\n}\n\n.fa-square-reddit:before {\n  content: \"\\f1a2\";\n}\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\";\n}\n\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n\n.fa-square-font-awesome:before {\n  content: \"\\e5ad\";\n}\n\n.fa-deskpro:before {\n  content: \"\\f38f\";\n}\n\n.fa-brave:before {\n  content: \"\\e63c\";\n}\n\n.fa-sistrix:before {\n  content: \"\\f3ee\";\n}\n\n.fa-square-instagram:before {\n  content: \"\\e055\";\n}\n\n.fa-instagram-square:before {\n  content: \"\\e055\";\n}\n\n.fa-battle-net:before {\n  content: \"\\f835\";\n}\n\n.fa-the-red-yeti:before {\n  content: \"\\f69d\";\n}\n\n.fa-square-hacker-news:before {\n  content: \"\\f3af\";\n}\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\";\n}\n\n.fa-edge:before {\n  content: \"\\f282\";\n}\n\n.fa-threads:before {\n  content: \"\\e618\";\n}\n\n.fa-napster:before {\n  content: \"\\f3d2\";\n}\n\n.fa-square-snapchat:before {\n  content: \"\\f2ad\";\n}\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\";\n}\n\n.fa-artstation:before {\n  content: \"\\f77a\";\n}\n\n.fa-markdown:before {\n  content: \"\\f60f\";\n}\n\n.fa-sourcetree:before {\n  content: \"\\f7d3\";\n}\n\n.fa-google-plus:before {\n  content: \"\\f2b3\";\n}\n\n.fa-diaspora:before {\n  content: \"\\f791\";\n}\n\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n\n.fa-phoenix-squadron:before {\n  content: \"\\f511\";\n}\n\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n\n.fa-algolia:before {\n  content: \"\\f36c\";\n}\n\n.fa-red-river:before {\n  content: \"\\f3e3\";\n}\n\n.fa-creative-commons-sa:before {\n  content: \"\\f4ef\";\n}\n\n.fa-safari:before {\n  content: \"\\f267\";\n}\n\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n\n.fa-square-font-awesome-stroke:before {\n  content: \"\\f35c\";\n}\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\";\n}\n\n.fa-atlassian:before {\n  content: \"\\f77b\";\n}\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\";\n}\n\n.fa-digital-ocean:before {\n  content: \"\\f391\";\n}\n\n.fa-nimblr:before {\n  content: \"\\f5a8\";\n}\n\n.fa-chromecast:before {\n  content: \"\\f838\";\n}\n\n.fa-evernote:before {\n  content: \"\\f839\";\n}\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n\n.fa-creative-commons-sampling:before {\n  content: \"\\f4f0\";\n}\n\n.fa-adversal:before {\n  content: \"\\f36a\";\n}\n\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n\n.fa-watchman-monitoring:before {\n  content: \"\\e087\";\n}\n\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n\n.fa-git-alt:before {\n  content: \"\\f841\";\n}\n\n.fa-lyft:before {\n  content: \"\\f3c3\";\n}\n\n.fa-rev:before {\n  content: \"\\f5b2\";\n}\n\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n\n.fa-wizards-of-the-coast:before {\n  content: \"\\f730\";\n}\n\n.fa-square-viadeo:before {\n  content: \"\\f2aa\";\n}\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n\n.fa-centos:before {\n  content: \"\\f789\";\n}\n\n.fa-adn:before {\n  content: \"\\f170\";\n}\n\n.fa-cloudsmith:before {\n  content: \"\\f384\";\n}\n\n.fa-opensuse:before {\n  content: \"\\e62b\";\n}\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n\n.fa-square-dribbble:before {\n  content: \"\\f397\";\n}\n\n.fa-dribbble-square:before {\n  content: \"\\f397\";\n}\n\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n\n.fa-node:before {\n  content: \"\\f419\";\n}\n\n.fa-mix:before {\n  content: \"\\f3cb\";\n}\n\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\";\n}\n\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n\n.fa-debian:before {\n  content: \"\\e60b\";\n}\n\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n\n.fa-instalod:before {\n  content: \"\\e081\";\n}\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n\n.fa-sellcast:before {\n  content: \"\\f2da\";\n}\n\n.fa-square-twitter:before {\n  content: \"\\f081\";\n}\n\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n\n.fa-r-project:before {\n  content: \"\\f4f7\";\n}\n\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n\n.fa-freebsd:before {\n  content: \"\\f3a4\";\n}\n\n.fa-vuejs:before {\n  content: \"\\f41f\";\n}\n\n.fa-accusoft:before {\n  content: \"\\f369\";\n}\n\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\";\n}\n\n.fa-app-store:before {\n  content: \"\\f36f\";\n}\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\";\n}\n\n.fa-golang:before {\n  content: \"\\e40f\";\n}\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\";\n}\n\n.fa-square-kickstarter:before {\n  content: \"\\f3bb\";\n}\n\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n\n.fa-uncharted:before {\n  content: \"\\e084\";\n}\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\";\n}\n\n.fa-square-youtube:before {\n  content: \"\\f431\";\n}\n\n.fa-youtube-square:before {\n  content: \"\\f431\";\n}\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n\n.fa-wpressr:before {\n  content: \"\\f3e4\";\n}\n\n.fa-rendact:before {\n  content: \"\\f3e4\";\n}\n\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n\n.fa-galactic-republic:before {\n  content: \"\\f50c\";\n}\n\n.fa-nfc-directional:before {\n  content: \"\\e530\";\n}\n\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n\n.fa-joget:before {\n  content: \"\\f3b7\";\n}\n\n.fa-fedora:before {\n  content: \"\\f798\";\n}\n\n.fa-stripe-s:before {\n  content: \"\\f42a\";\n}\n\n.fa-meta:before {\n  content: \"\\e49b\";\n}\n\n.fa-laravel:before {\n  content: \"\\f3bd\";\n}\n\n.fa-hotjar:before {\n  content: \"\\f3b1\";\n}\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n\n.fa-square-letterboxd:before {\n  content: \"\\e62e\";\n}\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\";\n}\n\n.fa-creative-commons-zero:before {\n  content: \"\\f4f3\";\n}\n\n.fa-hips:before {\n  content: \"\\f452\";\n}\n\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n\n.fa-discord:before {\n  content: \"\\f392\";\n}\n\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n\n.fa-app-store-ios:before {\n  content: \"\\f370\";\n}\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n\n.fa-confluence:before {\n  content: \"\\f78d\";\n}\n\n.fa-shoelace:before {\n  content: \"\\e60c\";\n}\n\n.fa-mdb:before {\n  content: \"\\f8ca\";\n}\n\n.fa-dochub:before {\n  content: \"\\f394\";\n}\n\n.fa-accessible-icon:before {\n  content: \"\\f368\";\n}\n\n.fa-ebay:before {\n  content: \"\\f4f4\";\n}\n\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n\n.fa-unsplash:before {\n  content: \"\\e07c\";\n}\n\n.fa-yarn:before {\n  content: \"\\f7e3\";\n}\n\n.fa-square-steam:before {\n  content: \"\\f1b7\";\n}\n\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n\n.fa-square-vimeo:before {\n  content: \"\\f194\";\n}\n\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n\n.fa-asymmetrik:before {\n  content: \"\\f372\";\n}\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n\n.fa-font-awesome-flag:before {\n  content: \"\\f2b4\";\n}\n\n.fa-font-awesome-logo-full:before {\n  content: \"\\f2b4\";\n}\n\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n\n.fa-apple:before {\n  content: \"\\f179\";\n}\n\n.fa-hive:before {\n  content: \"\\e07f\";\n}\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\";\n}\n\n.fa-keybase:before {\n  content: \"\\f4f5\";\n}\n\n.fa-apple-pay:before {\n  content: \"\\f415\";\n}\n\n.fa-padlet:before {\n  content: \"\\e4a0\";\n}\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\";\n}\n\n.fa-square-github:before {\n  content: \"\\f092\";\n}\n\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\n.fa-fedex:before {\n  content: \"\\f797\";\n}\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\";\n}\n\n.fa-shopify:before {\n  content: \"\\e057\";\n}\n\n.fa-neos:before {\n  content: \"\\f612\";\n}\n\n.fa-square-threads:before {\n  content: \"\\e619\";\n}\n\n.fa-hackerrank:before {\n  content: \"\\f5f7\";\n}\n\n.fa-researchgate:before {\n  content: \"\\f4f8\";\n}\n\n.fa-swift:before {\n  content: \"\\f8e1\";\n}\n\n.fa-angular:before {\n  content: \"\\f420\";\n}\n\n.fa-speakap:before {\n  content: \"\\f3f3\";\n}\n\n.fa-angrycreative:before {\n  content: \"\\f36e\";\n}\n\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n\n.fa-envira:before {\n  content: \"\\f299\";\n}\n\n.fa-google-scholar:before {\n  content: \"\\e63b\";\n}\n\n.fa-square-gitlab:before {\n  content: \"\\e5ae\";\n}\n\n.fa-gitlab-square:before {\n  content: \"\\e5ae\";\n}\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\";\n}\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n\n.fa-goodreads:before {\n  content: \"\\f3a8\";\n}\n\n.fa-square-odnoklassniki:before {\n  content: \"\\f264\";\n}\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\n.fa-sith:before {\n  content: \"\\f512\";\n}\n\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n\n.fa-page4:before {\n  content: \"\\f3d7\";\n}\n\n.fa-hashnode:before {\n  content: \"\\e499\";\n}\n\n.fa-react:before {\n  content: \"\\f41b\";\n}\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n\n.fa-squarespace:before {\n  content: \"\\f5be\";\n}\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n\n.fa-creative-commons-share:before {\n  content: \"\\f4f2\";\n}\n\n.fa-bitcoin:before {\n  content: \"\\f379\";\n}\n\n.fa-keycdn:before {\n  content: \"\\f3ba\";\n}\n\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n\n.fa-itch-io:before {\n  content: \"\\f83a\";\n}\n\n.fa-umbraco:before {\n  content: \"\\f8e8\";\n}\n\n.fa-galactic-senate:before {\n  content: \"\\f50d\";\n}\n\n.fa-ubuntu:before {\n  content: \"\\f7df\";\n}\n\n.fa-draft2digital:before {\n  content: \"\\f396\";\n}\n\n.fa-stripe:before {\n  content: \"\\f429\";\n}\n\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n\n.fa-gg:before {\n  content: \"\\f260\";\n}\n\n.fa-dhl:before {\n  content: \"\\f790\";\n}\n\n.fa-square-pinterest:before {\n  content: \"\\f0d3\";\n}\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n\n.fa-xing:before {\n  content: \"\\f168\";\n}\n\n.fa-blackberry:before {\n  content: \"\\f37b\";\n}\n\n.fa-creative-commons-pd:before {\n  content: \"\\f4ec\";\n}\n\n.fa-playstation:before {\n  content: \"\\f3df\";\n}\n\n.fa-quinscape:before {\n  content: \"\\f459\";\n}\n\n.fa-less:before {\n  content: \"\\f41d\";\n}\n\n.fa-blogger-b:before {\n  content: \"\\f37d\";\n}\n\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n\n.fa-signal-messenger:before {\n  content: \"\\e663\";\n}\n\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n\n.fa-typo3:before {\n  content: \"\\f42b\";\n}\n\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n\n.fa-dailymotion:before {\n  content: \"\\e052\";\n}\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\";\n}\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n\n.fa-bootstrap:before {\n  content: \"\\f836\";\n}\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n\n.fa-nfc-symbol:before {\n  content: \"\\e531\";\n}\n\n.fa-mintbit:before {\n  content: \"\\e62f\";\n}\n\n.fa-ethereum:before {\n  content: \"\\f42e\";\n}\n\n.fa-speaker-deck:before {\n  content: \"\\f83c\";\n}\n\n.fa-creative-commons-nc-eu:before {\n  content: \"\\f4e9\";\n}\n\n.fa-patreon:before {\n  content: \"\\f3d9\";\n}\n\n.fa-avianex:before {\n  content: \"\\f374\";\n}\n\n.fa-ello:before {\n  content: \"\\f5f1\";\n}\n\n.fa-gofore:before {\n  content: \"\\f3a7\";\n}\n\n.fa-bimobject:before {\n  content: \"\\f378\";\n}\n\n.fa-brave-reverse:before {\n  content: \"\\e63d\";\n}\n\n.fa-facebook-f:before {\n  content: \"\\f39e\";\n}\n\n.fa-square-google-plus:before {\n  content: \"\\f0d4\";\n}\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n\n.fa-web-awesome:before {\n  content: \"\\e682\";\n}\n\n.fa-mandalorian:before {\n  content: \"\\f50f\";\n}\n\n.fa-first-order-alt:before {\n  content: \"\\f50a\";\n}\n\n.fa-osi:before {\n  content: \"\\f41a\";\n}\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n\n.fa-d-and-d-beyond:before {\n  content: \"\\f6ca\";\n}\n\n.fa-periscope:before {\n  content: \"\\f3da\";\n}\n\n.fa-fulcrum:before {\n  content: \"\\f50b\";\n}\n\n.fa-cloudscale:before {\n  content: \"\\f383\";\n}\n\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n\n.fa-mizuni:before {\n  content: \"\\f3cc\";\n}\n\n.fa-schlix:before {\n  content: \"\\f3ea\";\n}\n\n.fa-square-xing:before {\n  content: \"\\f169\";\n}\n\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n\n.fa-cloudversify:before {\n  content: \"\\f385\";\n}\n\n.fa-usps:before {\n  content: \"\\f7e1\";\n}\n\n.fa-megaport:before {\n  content: \"\\f5a3\";\n}\n\n.fa-magento:before {\n  content: \"\\f3c4\";\n}\n\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n\n.fa-fly:before {\n  content: \"\\f417\";\n}\n\n.fa-aviato:before {\n  content: \"\\f421\";\n}\n\n.fa-itunes:before {\n  content: \"\\f3b4\";\n}\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\";\n}\n\n.fa-blogger:before {\n  content: \"\\f37c\";\n}\n\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n\n.fa-viber:before {\n  content: \"\\f409\";\n}\n\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n\n.fa-letterboxd:before {\n  content: \"\\e62d\";\n}\n\n.fa-symfony:before {\n  content: \"\\f83d\";\n}\n\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\";\n}\n\n.fa-audible:before {\n  content: \"\\f373\";\n}\n\n.fa-think-peaks:before {\n  content: \"\\f731\";\n}\n\n.fa-bilibili:before {\n  content: \"\\e3d9\";\n}\n\n.fa-erlang:before {\n  content: \"\\f39d\";\n}\n\n.fa-x-twitter:before {\n  content: \"\\e61b\";\n}\n\n.fa-cotton-bureau:before {\n  content: \"\\f89e\";\n}\n\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n\n.fa-42-group:before {\n  content: \"\\e080\";\n}\n\n.fa-innosoft:before {\n  content: \"\\e080\";\n}\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n\n.fa-elementor:before {\n  content: \"\\f430\";\n}\n\n.fa-square-pied-piper:before {\n  content: \"\\e01e\";\n}\n\n.fa-pied-piper-square:before {\n  content: \"\\e01e\";\n}\n\n.fa-creative-commons-nd:before {\n  content: \"\\f4eb\";\n}\n\n.fa-palfed:before {\n  content: \"\\f3d8\";\n}\n\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n\n.fa-resolving:before {\n  content: \"\\f3e7\";\n}\n\n.fa-xbox:before {\n  content: \"\\f412\";\n}\n\n.fa-square-web-awesome-stroke:before {\n  content: \"\\e684\";\n}\n\n.fa-searchengin:before {\n  content: \"\\f3eb\";\n}\n\n.fa-tiktok:before {\n  content: \"\\e07b\";\n}\n\n.fa-square-facebook:before {\n  content: \"\\f082\";\n}\n\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n\n.fa-linkedin:before {\n  content: \"\\f08c\";\n}\n\n.fa-hubspot:before {\n  content: \"\\f3b2\";\n}\n\n.fa-deploydog:before {\n  content: \"\\f38e\";\n}\n\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n\n.fa-mixer:before {\n  content: \"\\e056\";\n}\n\n.fa-square-lastfm:before {\n  content: \"\\f203\";\n}\n\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n\n.fa-vimeo:before {\n  content: \"\\f40a\";\n}\n\n.fa-mendeley:before {\n  content: \"\\f7b3\";\n}\n\n.fa-uniregistry:before {\n  content: \"\\f404\";\n}\n\n.fa-figma:before {\n  content: \"\\f799\";\n}\n\n.fa-creative-commons-remix:before {\n  content: \"\\f4ee\";\n}\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\";\n}\n\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n\n.fa-cmplid:before {\n  content: \"\\e360\";\n}\n\n.fa-upwork:before {\n  content: \"\\e641\";\n}\n\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n\n.fa-gripfire:before {\n  content: \"\\f3ac\";\n}\n\n.fa-jedi-order:before {\n  content: \"\\f50e\";\n}\n\n.fa-uikit:before {\n  content: \"\\f403\";\n}\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\";\n}\n\n.fa-phabricator:before {\n  content: \"\\f3db\";\n}\n\n.fa-ussunnah:before {\n  content: \"\\f407\";\n}\n\n.fa-earlybirds:before {\n  content: \"\\f39a\";\n}\n\n.fa-trade-federation:before {\n  content: \"\\f513\";\n}\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\";\n}\n\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n\n.fa-square-upwork:before {\n  content: \"\\e67c\";\n}\n\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n\n.fa-google-play:before {\n  content: \"\\f3ab\";\n}\n\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n\n.fa-line:before {\n  content: \"\\f3c0\";\n}\n\n.fa-google-drive:before {\n  content: \"\\f3aa\";\n}\n\n.fa-servicestack:before {\n  content: \"\\f3ec\";\n}\n\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n\n.fa-deezer:before {\n  content: \"\\e077\";\n}\n\n.fa-raspberry-pi:before {\n  content: \"\\f7bb\";\n}\n\n.fa-jira:before {\n  content: \"\\f7b1\";\n}\n\n.fa-docker:before {\n  content: \"\\f395\";\n}\n\n.fa-screenpal:before {\n  content: \"\\e570\";\n}\n\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n\n.fa-gitter:before {\n  content: \"\\f426\";\n}\n\n.fa-d-and-d:before {\n  content: \"\\f38d\";\n}\n\n.fa-microblog:before {\n  content: \"\\e01a\";\n}\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n\n.fa-pied-piper-hat:before {\n  content: \"\\f4e5\";\n}\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\";\n}\n\n.fa-yandex:before {\n  content: \"\\f413\";\n}\n\n.fa-readme:before {\n  content: \"\\f4d5\";\n}\n\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n\n.fa-square-web-awesome:before {\n  content: \"\\e683\";\n}\n\n.fa-sass:before {\n  content: \"\\f41e\";\n}\n\n.fa-wirsindhandwerk:before {\n  content: \"\\e2d0\";\n}\n\n.fa-wsh:before {\n  content: \"\\e2d0\";\n}\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\";\n}\n\n.fa-salesforce:before {\n  content: \"\\f83b\";\n}\n\n.fa-octopus-deploy:before {\n  content: \"\\e082\";\n}\n\n.fa-medapps:before {\n  content: \"\\f3c6\";\n}\n\n.fa-ns8:before {\n  content: \"\\f3d5\";\n}\n\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n\n.fa-apper:before {\n  content: \"\\f371\";\n}\n\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n\n.fa-waze:before {\n  content: \"\\f83f\";\n}\n\n.fa-bluesky:before {\n  content: \"\\e671\";\n}\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ab\";\n}\n\n.fa-fantasy-flight-games:before {\n  content: \"\\f6dc\";\n}\n\n.fa-rust:before {\n  content: \"\\e07a\";\n}\n\n.fa-wix:before {\n  content: \"\\f5cf\";\n}\n\n.fa-square-behance:before {\n  content: \"\\f1b5\";\n}\n\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n\n.fa-supple:before {\n  content: \"\\f3f9\";\n}\n\n.fa-webflow:before {\n  content: \"\\e65c\";\n}\n\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n\n.fa-staylinked:before {\n  content: \"\\f3f5\";\n}\n\n.fa-kaggle:before {\n  content: \"\\f5fa\";\n}\n\n.fa-space-awesome:before {\n  content: \"\\e5ac\";\n}\n\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n\n.fa-cpanel:before {\n  content: \"\\f388\";\n}\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\";\n}\n\n.fa-square-git:before {\n  content: \"\\f1d2\";\n}\n\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n\n.fa-square-tumblr:before {\n  content: \"\\f174\";\n}\n\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n\n.fa-trello:before {\n  content: \"\\f181\";\n}\n\n.fa-creative-commons-nc-jp:before {\n  content: \"\\f4ea\";\n}\n\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n\n.fa-perbyte:before {\n  content: \"\\e083\";\n}\n\n.fa-grunt:before {\n  content: \"\\f3ad\";\n}\n\n.fa-weebly:before {\n  content: \"\\f5cc\";\n}\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n\n.fa-themeco:before {\n  content: \"\\f5c6\";\n}\n\n.fa-python:before {\n  content: \"\\f3e2\";\n}\n\n.fa-android:before {\n  content: \"\\f17b\";\n}\n\n.fa-bots:before {\n  content: \"\\e340\";\n}\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n\n.fa-hornbill:before {\n  content: \"\\f592\";\n}\n\n.fa-js:before {\n  content: \"\\f3b8\";\n}\n\n.fa-ideal:before {\n  content: \"\\e013\";\n}\n\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n\n.fa-dev:before {\n  content: \"\\f6cc\";\n}\n\n.fa-sketch:before {\n  content: \"\\f7c6\";\n}\n\n.fa-yandex-international:before {\n  content: \"\\f414\";\n}\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n\n.fa-uber:before {\n  content: \"\\f402\";\n}\n\n.fa-github:before {\n  content: \"\\f09b\";\n}\n\n.fa-php:before {\n  content: \"\\f457\";\n}\n\n.fa-alipay:before {\n  content: \"\\f642\";\n}\n\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n\n.fa-firefox-browser:before {\n  content: \"\\e007\";\n}\n\n.fa-replyd:before {\n  content: \"\\f3e6\";\n}\n\n.fa-suse:before {\n  content: \"\\f7d6\";\n}\n\n.fa-jenkins:before {\n  content: \"\\f3b6\";\n}\n\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n\n.fa-rockrms:before {\n  content: \"\\f3e9\";\n}\n\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n\n.fa-buffer:before {\n  content: \"\\f837\";\n}\n\n.fa-npm:before {\n  content: \"\\f3d4\";\n}\n\n.fa-yammer:before {\n  content: \"\\f840\";\n}\n\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n\n.fa-stubber:before {\n  content: \"\\e5c7\";\n}\n\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n\n.fa-telegram-plane:before {\n  content: \"\\f2c6\";\n}\n\n.fa-old-republic:before {\n  content: \"\\f510\";\n}\n\n.fa-odysee:before {\n  content: \"\\e5c6\";\n}\n\n.fa-square-whatsapp:before {\n  content: \"\\f40c\";\n}\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\";\n}\n\n.fa-node-js:before {\n  content: \"\\f3d3\";\n}\n\n.fa-edge-legacy:before {\n  content: \"\\e078\";\n}\n\n.fa-slack:before {\n  content: \"\\f198\";\n}\n\n.fa-slack-hash:before {\n  content: \"\\f198\";\n}\n\n.fa-medrt:before {\n  content: \"\\f3c8\";\n}\n\n.fa-usb:before {\n  content: \"\\f287\";\n}\n\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n\n.fa-vaadin:before {\n  content: \"\\f408\";\n}\n\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n\n.fa-square-x-twitter:before {\n  content: \"\\e61a\";\n}\n\n.fa-reacteurope:before {\n  content: \"\\f75d\";\n}\n\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n\n.fa-medium-m:before {\n  content: \"\\f23a\";\n}\n\n.fa-amilia:before {\n  content: \"\\f36d\";\n}\n\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n\n.fa-flipboard:before {\n  content: \"\\f44d\";\n}\n\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n\n.fa-critical-role:before {\n  content: \"\\f6c9\";\n}\n\n.fa-sitrox:before {\n  content: \"\\e44a\";\n}\n\n.fa-discourse:before {\n  content: \"\\f393\";\n}\n\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n\n.fa-mastodon:before {\n  content: \"\\f4f6\";\n}\n\n.fa-airbnb:before {\n  content: \"\\f834\";\n}\n\n.fa-wolf-pack-battalion:before {\n  content: \"\\f514\";\n}\n\n.fa-buy-n-large:before {\n  content: \"\\f8a6\";\n}\n\n.fa-gulp:before {\n  content: \"\\f3ae\";\n}\n\n.fa-creative-commons-sampling-plus:before {\n  content: \"\\f4f1\";\n}\n\n.fa-strava:before {\n  content: \"\\f428\";\n}\n\n.fa-ember:before {\n  content: \"\\f423\";\n}\n\n.fa-canadian-maple-leaf:before {\n  content: \"\\f785\";\n}\n\n.fa-teamspeak:before {\n  content: \"\\f4f9\";\n}\n\n.fa-pushed:before {\n  content: \"\\f3e1\";\n}\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\";\n}\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\";\n}\n\n.fa-wodu:before {\n  content: \"\\e088\";\n}\n\n.fa-google-pay:before {\n  content: \"\\e079\";\n}\n\n.fa-intercom:before {\n  content: \"\\f7af\";\n}\n\n.fa-zhihu:before {\n  content: \"\\f63f\";\n}\n\n.fa-korvue:before {\n  content: \"\\f42f\";\n}\n\n.fa-pix:before {\n  content: \"\\e43a\";\n}\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\";\n}\n\nul.nav-pills {\n  padding-left: 0;\n}\nul.nav-pills .nav-link {\n  display: list-item;\n  list-style-type: disc;\n  margin-left: 12px;\n}\nul.nav-pills .nav-link.active a {\n  color: white;\n}\n\nbody {\n  padding-top: 20px;\n}\n\nheader {\n  padding-bottom: 20px;\n}\n\nheader h1, header .h1 {\n  font-size: 48px;\n}\n\n.well h2, .well .h2 {\n  margin-bottom: 20px;\n}\n\n.external-buttons {\n  margin-bottom: 20px;\n}\n\ninput.range-start, input.range-end {\n  width: 100px;\n}\n\nheader h1, header .h1 {\n  float: left;\n  margin-left: 20px;\n}\n\nheader .example-navigator {\n  float: right;\n  margin-right: 120px;\n}\n\nli.next {\n  margin-left: 10px;\n}\n\n.clear {\n  clear: both;\n}\n\n.wice-grid.table-striped tbody tr:nth-child(odd) td.active-filter {\n  background-color: #f9f9e9;\n}\n\n.wice-grid.table-striped tbody tr td.active-filter {\n  background-color: #f9f9e9;\n}\n\nfooter .sources {\n  float: right;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../stylesheets/application.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_banner.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_root.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/vendor/_rfs.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_color-mode.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_reboot.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_variables.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_border-radius.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_type.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_lists.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_images.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_image.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_containers.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_container.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_breakpoints.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_grid.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_grid.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_tables.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_table-variants.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_labels.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_form-text.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_form-control.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_transition.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_gradients.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_form-select.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_form-check.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_form-range.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_floating-labels.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/forms/_input-group.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_forms.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_buttons.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_buttons.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_transitions.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_dropdown.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_caret.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_button-group.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_nav.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_navbar.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_card.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_accordion.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_breadcrumb.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_pagination.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_pagination.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_badge.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_alert.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_progress.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_list-group.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_close.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_toasts.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_modal.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_backdrop.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_tooltip.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_reset-text.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_popover.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_carousel.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_clearfix.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_spinners.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_offcanvas.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/_placeholders.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_color-bg.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_colored-links.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_focus-ring.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_icon-link.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_ratio.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_position.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_stacks.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_stretched-link.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_text-truncation.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_text-truncate.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/helpers/_vr.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/mixins/_utilities.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/gems/bootstrap-5.3.3/assets/stylesheets/bootstrap/utilities/_api.scss%22,%22../../../../../../vendor/assets/stylesheets/wice_grid.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/_font-awesome.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_core.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_sizing.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_mixins.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_fixed-width.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_variables.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_list.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_bordered-pulled.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_animated.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_rotated-flipped.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_stacked.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_icons.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_screen-reader.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_solid.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_regular.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/font-awesome-sass-bed06b0e9c62/assets/stylesheets/font-awesome/_brands.scss%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/jquery-ui-rails-619d63474aee/app/assets/stylesheets/jquery-ui/core.css%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/jquery-ui-rails-619d63474aee/app/assets/stylesheets/jquery-ui/theme.css%22,%22../../../../../../../../../../../usr/local/rvm/gems/ruby-3.2.3@github/bundler/gems/jquery-ui-rails-619d63474aee/app/assets/stylesheets/jquery-ui/datepicker.css%22%5D,%22names%22:%5B%5D,%22mappings%22:%22;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACCE;AAAA;AAAA;AAAA;AAAA;ACDF;AAAA;EASI;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EACA;EAMA;EACA;EACA;EAOA;EC2OI,qBALI;EDpOR;EACA;EAKA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGA;EAEA;EACA;EACA;EAEA;EACA;EAMA;EACA;EACA;EAGA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAIA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AEhHE;EFsHA;EAGA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAGE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAIA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAGF;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;;;AGxKJ;AAAA;AAAA;EAGE;;;AAeE;EANJ;IAOM;;;;AAcN;EACE;EACA;EF6OI,WALI;EEtOR;EACA;EACA;EACA;EACA;EACA;EACA;;;AASF;EACE;EACA,OCmnB4B;EDlnB5B;EACA;EACA,SCynB4B;;;AD/mB9B;EACE;EACA,eCwjB4B;EDrjB5B,aCwjB4B;EDvjB5B,aCwjB4B;EDvjB5B;;;AAGF;EFuMQ;;AA5JJ;EE3CJ;IF8MQ;;;;AEzMR;EFkMQ;;AA5JJ;EEtCJ;IFyMQ;;;;AEpMR;EF6LQ;;AA5JJ;EEjCJ;IFoMQ;;;;AE/LR;EFwLQ;;AA5JJ;EE5BJ;IF+LQ;;;;AE1LR;EF+KM,WALI;;;AErKV;EF0KM,WALI;;;AE1JV;EACE;EACA,eCwV0B;;;AD9U5B;EACE;EACA;EACA;;;AAMF;EACE;EACA;EACA;;;AAMF;AAAA;EAEE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;;;AAGF;EACE,aC6b4B;;;ADxb9B;EACE;EACA;;;AAMF;EACE;;;AAQF;AAAA;EAEE,aCsa4B;;;AD9Z9B;EF6EM,WALI;;;AEjEV;EACE,SCqf4B;EDpf5B;EACA;;;AASF;AAAA;EAEE;EFwDI,WALI;EEjDR;EACA;;;AAGF;EAAM;;;AACN;EAAM;;;AAKN;EACE;EACA,iBCgNwC;;AD9MxC;EACE;;;AAWF;EAEE;EACA;;;AAOJ;AAAA;AAAA;AAAA;EAIE,aCgV4B;EHlUxB,WALI;;;AEDV;EACE;EACA;EACA;EACA;EFEI,WALI;;AEQR;EFHI,WALI;EEUN;EACA;;;AAIJ;EFVM,WALI;EEiBR;EACA;;AAGA;EACE;;;AAIJ;EACE;EFtBI,WALI;EE6BR,OCy5CkC;EDx5ClC,kBCy5CkC;EC9rDhC;;AFwSF;EACE;EF7BE,WALI;;;AE6CV;EACE;;;AAMF;AAAA;EAEE;;;AAQF;EACE;EACA;;;AAGF;EACE,aC4X4B;ED3X5B,gBC2X4B;ED1X5B,OC4Z4B;ED3Z5B;;;AAOF;EAEE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;;;AAQF;EACE;;;AAMF;EAEE;;;AAQF;EACE;;;AAKF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EF5HI,WALI;EEmIR;;;AAIF;AAAA;EAEE;;;AAKF;EACE;;;AAGF;EAGE;;AAGA;EACE;;;AAOJ;EACE;;;AAQF;AAAA;AAAA;AAAA;EAIE;;AAGE;AAAA;AAAA;AAAA;EACE;;;AAON;EACE;EACA;;;AAKF;EACE;;;AAUF;EACE;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA,eCmN4B;EHpatB;EEoNN;;AFhXE;EEyWJ;IFtMQ;;;AE+MN;EACE;;;AAOJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;;;AASF;EACE;EACA;;;AAQF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAKF;EACE;;;AAKF;EACE;;;AAOF;EACE;EACA;;;AAQF;EACE;;;AAQF;EACE;;;AGrkBF;ELmQM,WALI;EK5PR,aFwoB4B;;;AEnoB5B;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AKvQN;ELgQM;EK5PJ,aFynBkB;EExnBlB,aFwmB0B;;AHzgB1B;EKpGF;ILuQM;;;;AK/OR;ECvDE;EACA;;;AD2DF;EC5DE;EACA;;;AD8DF;EACE;;AAEA;EACE,cFsoB0B;;;AE5nB9B;EL8MM,WALI;EKvMR;;;AAIF;EACE,eFiUO;EH1HH,WALI;;AK/LR;EACE;;;AAIJ;EACE;EACA,eFuTO;EH1HH,WALI;EKtLR,OFtFS;;AEwFT;EACE;;;AEhGJ;ECIE;EAGA;;;ADDF;EACE,SJ+jDkC;EI9jDlC,kBJ+jDkC;EI9jDlC;EHGE;EIRF;EAGA;;;ADcF;EAEE;;;AAGF;EACE;EACA;;;AAGF;EPyPM,WALI;EOlPR,OJkjDkC;;;AMplDlC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECHA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACsDE;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;AQvbnB;EF5CE;IACE,WNkee;;;ASlfvB;EAEI;EAAA;EAAA;EAAA;EAAA;EAAA;;;AAKF;ECNA;EACA;EACA;EACA;EAEA;EACA;EACA;;ADEE;ECOF;EACA;EACA;EACA;EACA;EACA;;;AA+CI;EACE;;;AAGF;EApCJ;EACA;;;AAcA;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AA+BE;EAhDJ;EACA;;;AAqDQ;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AA+DM;EAhEN;EACA;;;AAuEQ;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAwDU;EAxDV;;;AAmEM;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AAPF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;AF1DN;EEUE;IACE;;EAGF;IApCJ;IACA;;EAcA;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EAFF;IACE;IACA;;EA+BE;IAhDJ;IACA;;EAqDQ;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EA+DM;IAhEN;IACA;;EAuEQ;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAwDU;IAxDV;;EAmEM;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;EAPF;AAAA;IAEE;;EAGF;AAAA;IAEE;;;ACrHV;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,eXkYO;EWjYP,gBXusB4B;EWtsB5B;;AAOA;EACE;EAEA;EACA;EACA,qBX+sB0B;EW9sB1B;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;;;AAOF;EACE;;;AAUA;EACE;;;AAeF;EACE;;AAGA;EACE;;;AAOJ;EACE;;AAGF;EACE;;;AAUF;EACE;EACA;;;AAMF;EACE;EACA;;;AAQJ;EACE;EACA;;;AAQA;EACE;EACA;;;AC5IF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;AAlBF;EAOE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;;ADiJA;EACE;EACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AH3FF;EGyFA;IACE;IACA;;;AEnKN;EACE,ebu2BsC;;;Aa91BxC;EACE;EACA;EACA;EhB8QI,WALI;EgBrQR,ab+lB4B;;;Aa3lB9B;EACE;EACA;EhBoQI,WALI;;;AgB3PV;EACE;EACA;EhB8PI,WALI;;;AiBtRV;EACE,Yd+1BsC;EHrkBlC,WALI;EiBjRR,Od+1BsC;;;Aep2BxC;EACE;EACA;EACA;ElBwRI,WALI;EkBhRR,afkmB4B;EejmB5B,afymB4B;EexmB5B,Of43BsC;Ee33BtC;EACA,kBfq3BsC;Eep3BtC;EACA;EdGE;EeHE,YDMJ;;ACFI;EDhBN;ICiBQ;;;ADGN;EACE;;AAEA;EACE;;AAKJ;EACE,Ofs2BoC;Eer2BpC,kBfg2BoC;Ee/1BpC,cf82BoC;Ee72BpC;EAKE,YfkhBkB;;Ae9gBtB;EAME;EAMA;EAKA;;AAKF;EACE;EACA;;AAIF;EACE,Of40BoC;Ee10BpC;;AAQF;EAEE,kBf8yBoC;Ee3yBpC;;AAIF;EACE;EACA;EACA,mBforB0B;EenrB1B,OfsyBoC;EiBp4BtC,kBjBqiCgC;Eer8B9B;EACA;EACA;EACA;EACA,yBfgsB0B;Ee/rB1B;ECzFE,YD0FF;;ACtFE;ED0EJ;ICzEM;;;ADwFN;EACE,kBf47B8B;;;Aen7BlC;EACE;EACA;EACA;EACA;EACA,afwf4B;Eevf5B,Of2xBsC;Ee1xBtC;EACA;EACA;;AAEA;EACE;;AAGF;EAEE;EACA;;;AAWJ;EACE,Yf4wBsC;Ee3wBtC;ElByII,WALI;EIvQN;;AcuIF;EACE;EACA;EACA,mBfooB0B;;;AehoB9B;EACE,YfgwBsC;Ee/vBtC;ElB4HI,WALI;EIvQN;;AcoJF;EACE;EACA;EACA,mBf2nB0B;;;AennB5B;EACE,Yf6uBoC;;Ae1uBtC;EACE,Yf0uBoC;;AevuBtC;EACE,YfuuBoC;;;AeluBxC;EACE,OfquBsC;EepuBtC,Qf8tBsC;Ee7tBtC,SfilB4B;;Ae/kB5B;EACE;;AAGF;EACE;EdvLA;;Ac2LF;EACE;Ed5LA;;AcgMF;EAAoB,Qf8sBkB;;Ae7sBtC;EAAoB,Qf8sBkB;;;AkB75BxC;EACE;EAEA;EACA;EACA;ErBqRI,WALI;EqB7QR,alB+lB4B;EkB9lB5B,alBsmB4B;EkBrmB5B,OlBy3BsC;EkBx3BtC;EACA,kBlBk3BsC;EkBj3BtC;EACA;EACA,qBlB+9BkC;EkB99BlC,iBlB+9BkC;EkB99BlC;EjBHE;EeHE,YESJ;;AFLI;EEfN;IFgBQ;;;AEMN;EACE,clBs3BoC;EkBr3BpC;EAKE,YlBi+B4B;;AkB79BhC;EAEE,elB6uB0B;EkB5uB1B;;AAGF;EAEE,kBlBu1BoC;;AkBl1BtC;EACE;EACA;;;AAIJ;EACE,alBsuB4B;EkBruB5B,gBlBquB4B;EkBpuB5B,clBquB4B;EHlgBxB,WALI;EIvQN;;;AiB8CJ;EACE,alBkuB4B;EkBjuB5B,gBlBiuB4B;EkBhuB5B,clBiuB4B;EHtgBxB,WALI;EIvQN;;;AiBwDA;EACE;;;ACxEN;EACE;EACA,YnBq6BwC;EmBp6BxC,cnBq6BwC;EmBp6BxC,enBq6BwC;;AmBn6BxC;EACE;EACA;;;AAIJ;EACE,enB25BwC;EmB15BxC;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EACE;EAEA;EACA,OnB04BwC;EmBz4BxC,QnBy4BwC;EmBx4BxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QnB24BwC;EmB14BxC;;AAGA;ElB3BE;;AkB+BF;EAEE,enBm4BsC;;AmBh4BxC;EACE,QnB03BsC;;AmBv3BxC;EACE,cnBs1BoC;EmBr1BpC;EACA,YnB8foB;;AmB3ftB;EACE,kBnB5BM;EmB6BN,cnB7BM;;AmB+BN;EAII;;AAIJ;EAII;;AAKN;EACE,kBnBjDM;EmBkDN,cnBlDM;EmBuDJ;;AAIJ;EACE;EACA;EACA,SnBk2BuC;;AmB31BvC;EACE;EACA,SnBy1BqC;;;AmB30B3C;EACE,cnBo1BgC;;AmBl1BhC;EACE;EAEA,OnB80B8B;EmB70B9B;EACA;EACA;ElBjHA;EeHE,YGsHF;;AHlHE;EG0GJ;IHzGM;;;AGmHJ;EACE;;AAGF;EACE,qBnB60B4B;EmBx0B1B;;AAKN;EACE,enBwzB8B;EmBvzB9B;;AAEA;EACE;EACA;;;AAKN;EACE;EACA,cnBsyBgC;;;AmBnyBlC;EACE;EACA;EACA;;AAIE;EACE;EACA;EACA,SnBspBwB;;;AmB/oB1B;EACE;;;ACnLN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIA;EAA0B,YpB8gCa;;AoB7gCvC;EAA0B,YpB6gCa;;AoB1gCzC;EACE;;AAGF;EACE,OpB+/BuC;EoB9/BvC,QpB8/BuC;EoB7/BvC;EACA;EH1BF,kBjBkCQ;EoBNN,QpB6/BuC;EC1gCvC;EeHE,YImBF;;AJfE;EIMJ;IJLM;;;AIgBJ;EHjCF,kBjB8hCyC;;AoBx/BzC;EACE,OpBw+B8B;EoBv+B9B,QpBw+B8B;EoBv+B9B;EACA,QpBu+B8B;EoBt+B9B,kBpBu+B8B;EoBt+B9B;EnB7BA;;AmBkCF;EACE,OpBo+BuC;EoBn+BvC,QpBm+BuC;EoBl+BvC;EHpDF,kBjBkCQ;EoBoBN,QpBm+BuC;EC1gCvC;EeHE,YI6CF;;AJzCE;EIiCJ;IJhCM;;;AI0CJ;EH3DF,kBjB8hCyC;;AoB99BzC;EACE,OpB88B8B;EoB78B9B,QpB88B8B;EoB78B9B;EACA,QpB68B8B;EoB58B9B,kBpB68B8B;EoB58B9B;EnBvDA;;AmB4DF;EACE;;AAEA;EACE,kBpBg9BqC;;AoB78BvC;EACE,kBpB48BqC;;;AqBniC3C;EACE;;AAEA;AAAA;AAAA;EAGE,QrBwiCoC;EqBviCpC,YrBuiCoC;EqBtiCpC,arBuiCoC;;AqBpiCtC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ELRE,YKSF;;ALLE;EKTJ;ILUM;;;AKON;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;AAAA;EAEE,arB4gCkC;EqB3gClC,gBrB4gCkC;;AqBzgCpC;AAAA;EACE,arBugCkC;EqBtgClC,gBrBugCkC;;AqBngCtC;EACE,arBigCoC;EqBhgCpC,gBrBigCoC;;AqB1/BpC;AAAA;AAAA;AAAA;EACE;EACA,WrB2/BkC;;AqBz/BlC;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA,QrBm/BgC;EqBl/BhC;EACA,kBrBg0BgC;ECh3BpC;;AoBuDA;EACE;EACA,WrB0+BkC;;AqBr+BpC;EACE;;AAIJ;AAAA;EAEE,OrB1EO;;AqB4EP;AAAA;EACE,kBrB0yBkC;;;AsBj4BxC;EACE;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;AAAA;AAAA;EAGE;;AAMF;EACE;EACA;;AAEA;EACE;;;AAWN;EACE;EACA;EACA;EzB8OI,WALI;EyBvOR,atByjB4B;EsBxjB5B,atBgkB4B;EsB/jB5B,OtBm1BsC;EsBl1BtC;EACA;EACA,kBtB06BsC;EsBz6BtC;ErBtCE;;;AqBgDJ;AAAA;AAAA;AAAA;EAIE;EzBwNI,WALI;EIvQN;;;AqByDJ;AAAA;AAAA;AAAA;EAIE;EzB+MI,WALI;EIvQN;;;AqBkEJ;AAAA;EAEE;;;AAaE;AAAA;AAAA;AAAA;ErBjEA;EACA;;AqByEA;AAAA;AAAA;AAAA;ErB1EA;EACA;;AqBsFF;EACE;ErB1EA;EACA;;AqB6EF;AAAA;ErB9EE;EACA;;;AsBxBF;EACE;EACA;EACA,YvBu0BoC;EHrkBlC,WALI;E0B1PN,OvBkjCqB;;;AuB/iCvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E1BqPE,WALI;E0B7ON,OvBqiCqB;EuBpiCrB,kBvBoiCqB;EC/jCrB;;;AsBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,cvBuhCmB;EuBphCjB,evB81BgC;EuB71BhC;EACA;EACA;EACA;;AAGF;EACE,cvB4gCiB;EuBvgCf,YvBugCe;;;AuB5kCrB;EA+EI,evBu0BgC;EuBt0BhC;;;AAhFJ;EAuFE,cvBq/BmB;;AuBl/BjB;EAEE;EACA,evBq5B8B;EuBp5B9B;EACA;;AAIJ;EACE,cvBw+BiB;EuBn+Bf,YvBm+Be;;;AuB5kCrB;EAkHI;;;AAlHJ;EAyHE,cvBm9BmB;;AuBj9BnB;EACE,kBvBg9BiB;;AuB78BnB;EACE,YvB48BiB;;AuBz8BnB;EACE,OvBw8BiB;;;AuBn8BrB;EACE;;;AA1IF;AAAA;AAAA;AAAA;AAAA;EAoJM;;;AAhIR;EACE;EACA;EACA,YvBu0BoC;EHrkBlC,WALI;E0B1PN,OvBkjCqB;;;AuB/iCvB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;E1BqPE,WALI;E0B7ON,OvBqiCqB;EuBpiCrB,kBvBoiCqB;EC/jCrB;;;AsBgCA;AAAA;AAAA;AAAA;EAEE;;;AA/CF;EAqDE,cvBuhCmB;EuBphCjB,evB81BgC;EuB71BhC;EACA;EACA;EACA;;AAGF;EACE,cvB4gCiB;EuBvgCf,YvBugCe;;;AuB5kCrB;EA+EI,evBu0BgC;EuBt0BhC;;;AAhFJ;EAuFE,cvBq/BmB;;AuBl/BjB;EAEE;EACA,evBq5B8B;EuBp5B9B;EACA;;AAIJ;EACE,cvBw+BiB;EuBn+Bf,YvBm+Be;;;AuB5kCrB;EAkHI;;;AAlHJ;EAyHE,cvBm9BmB;;AuBj9BnB;EACE,kBvBg9BiB;;AuB78BnB;EACE,YvB48BiB;;AuBz8BnB;EACE,OvBw8BiB;;;AuBn8BrB;EACE;;;AA1IF;AAAA;AAAA;AAAA;AAAA;EAsJM;;;ACxJV;EAEE;EACA;EACA;E3BuRI,oBALI;E2BhRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E3BsQI,WALI;E2B/PR;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EvBjBE;EgBfF,kBOkCqB;ERtBjB,YQwBJ;;ARpBI;EQhBN;IRiBQ;;;AQqBN;EACE;EAEA;EACA;;AAGF;EAEE;EACA;EACA;;AAGF;EACE;EPrDF,kBOsDuB;EACrB;EACA;EAKE;;AAIJ;EACE;EACA;EAKE;;AAIJ;EAKE;EACA;EAGA;;AAGA;EAKI;;AAKN;EAKI;;AAIJ;EAGE;EACA;EACA;EAEA;EACA;;;AAYF;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADkGA;EC/GA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD4HA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ADmGA;EChHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AD+GF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,iBxB8QwC;;AwBpQxC;EACE;;AAGF;EACE;;;AAWJ;ECjJE;EACA;E5B8NI,oBALI;E4BvNR;;;ADkJF;ECrJE;EACA;E5B8NI,oBALI;E4BvNR;;;ACnEF;EVgBM,YUfJ;;AVmBI;EUpBN;IVqBQ;;;AUlBN;EACE;;;AAMF;EACE;;;AAIJ;EACE;EACA;EVDI,YUEJ;;AVEI;EULN;IVMQ;;;AUDN;EACE;EACA;EVNE,YUOF;;AVHE;EUAJ;IVCM;;;;AWpBR;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAGF;EACE;;ACwBE;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EArCJ;EACA;EACA;EACA;;AA0DE;EACE;;;AD9CN;EAEE;EACA;EACA;EACA;EACA;E9BuQI,yBALI;E8BhQR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;E9B0OI,WALI;E8BnOR;EACA;EACA;EACA;EACA;EACA;E1BzCE;;A0B6CF;EACE;EACA;EACA;;;AAwBA;EACE;;AAEA;EACE;EACA;;;AAIJ;EACE;;AAEA;EACE;EACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AnB1CJ;EmB4BA;IACE;;EAEA;IACE;IACA;;EAIJ;IACE;;EAEA;IACE;IACA;;;AAUN;EACE;EACA;EACA;EACA;;ACpFA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EA9BJ;EACA;EACA;EACA;;AAmDE;EACE;;;ADgEJ;EACE;EACA;EACA;EACA;EACA;;AClGA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;EAvBJ;EACA;EACA;EACA;;AA4CE;EACE;;AD0EF;EACE;;;AAMJ;EACE;EACA;EACA;EACA;EACA;;ACnHA;EACE;EACA,a5B6hBwB;E4B5hBxB,gB5B2hBwB;E4B1hBxB;;AAWA;EACE;;AAGF;EACE;EACA,c5B0gBsB;E4BzgBtB,gB5BwgBsB;E4BvgBtB;EAnCN;EACA;EACA;;AAsCE;EACE;;AD2FF;EACE;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AAMF;EACE;EACA;EACA;EACA;EACA,a3Byb4B;E2Bxb5B;EACA;EACA;EACA;EACA;EACA;E1BtKE;;A0ByKF;EAEE;EV1LF,kBU4LuB;;AAGvB;EAEE;EACA;EVlMF,kBUmMuB;;AAGvB;EAEE;EACA;EACA;;;AAMJ;EACE;;;AAIF;EACE;EACA;EACA;E9BmEI,WALI;E8B5DR;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AEtPF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;;;AAKJ;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;E5BhBI;;A4BoBF;AAAA;EAEE;;AAIF;AAAA;AAAA;E5BVE;EACA;;A4BmBF;AAAA;AAAA;E5BNE;EACA;;;A4BwBJ;EACE;EACA;;AAEA;EAGE;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAoBF;EACE;EACA;EACA;;AAEA;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAIF;AAAA;E5B1FE;EACA;;A4B8FF;AAAA;E5B7GE;EACA;;;A6BxBJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EjCsQI,WALI;EiC/PR;EACA;EACA;EACA;EACA;EdfI,YcgBJ;;AdZI;EcGN;IdFQ;;;AcaN;EAEE;;AAIF;EACE;EACA,Y9BkhBoB;;A8B9gBtB;EAEE;EACA;EACA;;;AAQJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EACE;EACA;E7B7CA;EACA;;A6B+CA;EAGE;EACA;;AAIJ;AAAA;EAEE;EACA;EACA;;AAGF;EAEE;E7BjEA;EACA;;;A6B2EJ;EAEE;EACA;EACA;;AAGA;E7B5FE;;A6BgGF;AAAA;EAEE;EbjHF,kBakHuB;;;AASzB;EAEE;EACA;EACA;EAGA;;AAEA;EACE;EACA;EACA;;AAEA;EAEE;;AAIJ;AAAA;EAEE,a9B0d0B;E8Bzd1B;EACA;;;AAUF;AAAA;EAEE;EACA;;;AAKF;AAAA;EAEE;EACA;EACA;;;AAMF;AAAA;EACE;;;AAUF;EACE;;AAEF;EACE;;;AC7LJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAoBJ;EACE;EACA;EACA;ElC4NI,WALI;EkCrNR;EACA;EACA;;AAEA;EAEE;;;AAUJ;EAEE;EACA;EAEA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;;AAGE;EAEE;;AAIJ;EACE;;;AASJ;EACE,a/B8gCkC;E+B7gClC,gB/B6gCkC;E+B5gClC;;AAEA;AAAA;AAAA;EAGE;;;AAaJ;EACE;EACA;EAGA;;;AAIF;EACE;ElCyII,WALI;EkClIR;EACA;EACA;EACA;E9BxIE;EeHE,Ye6IJ;;AfzII;EeiIN;IfhIQ;;;Ae0IN;EACE;;AAGF;EACE;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AvB1HE;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AvB5LR;EuBsIA;IAEI;IACA;;EAEA;IACE;;EAEA;IACE;;EAGF;IACE;IACA;;EAIJ;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IAEE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;If9NJ,YegOI;;EAGA;IACE;;EAGF;IACE;IACA;IACA;IACA;;;AAtDR;EAEI;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;Ef9NJ,YegOI;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAiBZ;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAME;EACE;;;ACzRN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E/BjBE;;A+BqBF;EACE;EACA;;AAGF;EACE;EACA;;AAEA;EACE;E/BtBF;EACA;;A+ByBA;EACE;E/BbF;EACA;;A+BmBF;AAAA;EAEE;;;AAIJ;EAGE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAQA;EACE;;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAEA;E/B7FE;;;A+BkGJ;EACE;EACA;EACA;EACA;;AAEA;E/BxGE;;;A+BkHJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;E/B1IE;;;A+B8IJ;AAAA;AAAA;EAGE;;;AAGF;AAAA;E/B3II;EACA;;;A+B+IJ;AAAA;E/BlII;EACA;;;A+B8IF;EACE;;AxB3HA;EwBuHJ;IAQI;IACA;;EAGA;IAEE;IACA;;EAEA;IACE;IACA;;EAKA;I/B3KJ;IACA;;E+B6KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;EAIJ;I/B5KJ;IACA;;E+B8KM;AAAA;IAGE;;EAEF;AAAA;IAGE;;;;ACpOZ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EpC4PI,WALI;EoCrPR;EACA;EACA;EACA;EhCrBE;EgCuBF;EjB1BI,YiB2BJ;;AjBvBI;EiBUN;IjBTQ;;;AiBwBN;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjBjDE,YiBkDF;;AjB9CE;EiBqCJ;IjBpCM;;;AiBgDN;EACE;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EhC7DE;EACA;;AgC+DA;EhChEA;EACA;;AgCoEF;EACE;;AAIF;EhC5DE;EACA;;AgC+DE;EhChEF;EACA;;AgCoEA;EhCrEA;EACA;;;AgC0EJ;EACE;;;AASA;EACE;EACA;EhC9GA;;AgCiHA;EAAgB;;AAChB;EAAe;;AAIb;EhCtHF;;AgC6HA;EhC7HA;;;AgCqIA;EACE;EACA;;;AC1JN;EAEE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;ErC+QI,WALI;EqCxQR;EACA;EjCAE;;;AiCMF;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;;;ACrCJ;EAEE;EACA;EtC4RI,2BALI;EsCrRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EhCpBA;EACA;;;AgCuBF;EACE;EACA;EACA;EtCgQI,WALI;EsCzPR;EACA;EACA;EACA;EnBpBI,YmBqBJ;;AnBjBI;EmBQN;InBPQ;;;AmBkBN;EACE;EACA;EAEA;EACA;;AAGF;EACE;EACA;EACA;EACA,SnC2uCgC;EmC1uChC;;AAGF;EAEE;EACA;ElBtDF,kBkBuDuB;EACrB;;AAGF;EAEE;EACA;EACA;EACA;;;AAKF;EACE,anC8sCgC;;AmCzsC9B;ElC9BF;EACA;;AkCmCE;ElClDF;EACA;;;AkCkEJ;EClGE;EACA;EvC0RI,2BALI;EuCnRR;;;ADmGF;ECtGE;EACA;EvC0RI,2BALI;EuCnRR;;;ACFF;EAEE;EACA;ExCuRI,sBALI;EwChRR;EACA;EACA;EAGA;EACA;ExC+QI,WALI;EwCxQR;EACA;EACA;EACA;EACA;EACA;EpCJE;;AoCSF;EACE;;;AAKJ;EACE;EACA;;;AChCF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;ErCHE;;;AqCQJ;EAEE;;;AAIF;EACE,atC6kB4B;EsC5kB5B;;;AAQF;EACE,etCs+C8B;;AsCn+C9B;EACE;EACA;EACA;EACA;EACA;;;AAQF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AAJF;EACE;EACA;EACA;EACA;;;AC5DF;EACE;IAAK,uBvCyhD2B;;;AuCphDpC;AAAA;EAGE;E1CkRI,yBALI;E0C3QR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;E1CsQI,WALI;E0C/PR;EtCRE;;;AsCaJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EvBxBI,YuByBJ;;AvBrBI;EuBYN;IvBXQ;;;;AuBuBR;EtBAE;EsBEA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;AAGE;EAJJ;IAKM;;;;AC3DR;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EvCXE;;;AuCeJ;EACE;EACA;;AAEA;EAEE;EACA;;;AASJ;EACE;EACA;EACA;;AAGA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAQJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EvCvDE;EACA;;AuC0DF;EvC7CE;EACA;;AuCgDF;EAEE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAEA;EACE;EACA;;;AAaF;EACE;;AAGE;EvCvDJ;EAZA;;AuCwEI;EvCxEJ;EAYA;;AuCiEI;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AhCtFR;EgC8DA;IACE;;EAGE;IvCvDJ;IAZA;;EuCwEI;IvCxEJ;IAYA;;EuCiEI;IACE;;EAGF;IACE;IACA;;EAEA;IACE;IACA;;;AAcZ;EvChJI;;AuCmJF;EACE;;AAEA;EACE;;;AAaJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAVF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC5LJ;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA,OzCqpD2B;EyCppD3B,QzCopD2B;EyCnpD3B;EACA;EACA;EACA;ExCJE;EwCMF;;AAGA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EAEE;EACA;EACA;;;AAQJ;EAHE;;;AASE;EATF;;;ACjDF;EAEE;EACA;EACA;EACA;EACA;E7CyRI,sBALI;E6ClRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;E7C2QI,WALI;E6CpQR;EACA;EACA;EACA;EACA;EACA;EzCRE;;AyCWF;EACE;;AAGF;EACE;;;AAIJ;EACE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EzChCE;EACA;;AyCkCF;EACE;EACA;;;AAIJ;EACE;EACA;;;AC9DF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;;AAOF;EACE;EACA;EACA;EAEA;;AAGA;E3B5CI,Y2B6CF;EACA,W3Ck8CgC;;AgB5+C9B;E2BwCJ;I3BvCM;;;A2B2CN;EACE,W3Cg8CgC;;A2C57ClC;EACE,W3C67CgC;;;A2Cz7CpC;EACE;;AAEA;EACE;EACA;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;E1CrFE;E0CyFF;;;AAIF;EAEE;EACA;EACA;EClHA;EACA;EACA;EACA,SDkH0B;ECjH1B;EACA;EACA,kBD+G4D;;AC5G5D;EAAS;;AACT;EAAS,SD2GiF;;;AAK5F;EACE;EACA;EACA;EACA;EACA;E1CrGE;EACA;;A0CuGF;EACE;EACA;;;AAKJ;EACE;EACA;;;AAKF;EACE;EAGA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;E1CzHE;EACA;;A0C8HF;EACE;;;AnC3GA;EmCiHF;IACE;IACA;;EAIF;IACE;IACA;IACA;;EAGF;IACE;;;AnC9HA;EmCmIF;AAAA;IAEE;;;AnCrIA;EmC0IF;IACE;;;AAUA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;E1CzMJ;;A0C6ME;AAAA;E1C7MF;;A0CkNE;EACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AnC1JJ;EmCwIA;IACE;IACA;IACA;IACA;;EAEA;IACE;IACA;I1CzMJ;;E0C6ME;AAAA;I1C7MF;;E0CkNE;IACE;;;AErOR;EAEE;EACA;EACA;EACA;EACA;EhDwRI,wBALI;EgDjRR;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EClBA,a9C+lB4B;E8C7lB5B;EACA,a9CwmB4B;E8CvmB5B,a9C+mB4B;E8C9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjDgRI,WALI;EgDhQR;EACA;;AAEA;EAAS;;AAET;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;AAEA;EACE;;AAEA;EACE;EACA;EACA;;;AAIJ;AACA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;AAkBA;EACE;EACA;EACA;EACA;EACA;E5CjGE;;;A8CnBJ;EAEE;EACA;ElD4RI,wBALI;EkDrRR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ElDmRI,+BALI;EkD5QR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EDzBA,a9C+lB4B;E8C7lB5B;EACA,a9CwmB4B;E8CvmB5B,a9C+mB4B;E8C9mB5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EjDgRI,WALI;EkD1PR;EACA;EACA;EACA;E9ChBE;;A8CoBF;EACE;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAEE;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAGE;EACE;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAEE;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AAKN;AAkBA;EACE;EACA;ElD2GI,WALI;EkDpGR;EACA;EACA;E9C5JE;EACA;;A8C8JF;EACE;;;AAIJ;EACE;EACA;;;ACrLF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;ACtBA;EACE;EACA;EACA;;;ADuBJ;EACE;EACA;EACA;EACA;EACA;EACA;EhClBI,YgCmBJ;;AhCfI;EgCQN;IhCPQ;;;;AgCiBR;AAAA;AAAA;EAGE;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;EAEE;;;AASA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;EAEE;EACA;EhC5DE,YgC6DF;;AhCzDE;EgCqDJ;AAAA;IhCpDM;;;;AgCiER;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA,OhDkhDmC;EgDjhDnC;EACA,OhD1FS;EgD2FT;EACA;EACA;EACA,ShD6gDmC;EgBnmD/B,YgCuFJ;;AhCnFI;EgCkEN;AAAA;IhCjEQ;;;AgCqFN;AAAA;AAAA;EAEE,OhDpGO;EgDqGP;EACA;EACA,ShDqgDiC;;;AgDlgDrC;EACE;;;AAGF;EACE;;;AAKF;AAAA;EAEE;EACA,OhDsgDmC;EgDrgDnC,QhDqgDmC;EgDpgDnC;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,chDs9CmC;EgDr9CnC;EACA,ahDo9CmC;;AgDl9CnC;EACE;EACA;EACA,OhDo9CiC;EgDn9CjC,QhDo9CiC;EgDn9CjC;EACA,chDo9CiC;EgDn9CjC,ahDm9CiC;EgDl9CjC;EACA;EACA,kBhDlKO;EgDmKP;EACA;EAEA;EACA;EACA,ShD28CiC;EgB3mD/B,YgCiKF;;AhC7JE;EgC4IJ;IhC3IM;;;AgC+JN;EACE,ShDw8CiC;;;AgD/7CrC;EACE;EACA;EACA,QhDk8CmC;EgDj8CnC;EACA,ahD+7CmC;EgD97CnC,gBhD87CmC;EgD77CnC,OhD7LS;EgD8LT;;;AAMA;AAAA;EAEE,QhDm8CiC;;AgDh8CnC;EACE,kBhDhMO;;AgDmMT;EACE,OhDpMO;;;AgD0LT;AAAA;AAAA;EAEE,QhDm8CiC;;AgDh8CnC;EACE,kBhDhMO;;AgDmMT;EACE,OhDpMO;;;AkDdX;AAAA;EAEE;EACA;EACA;EACA;EAEA;EACA;;;AAIF;EACE;IAAK;;;AAIP;EAEE;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EAEE;EACA;EACA;;;AASF;EACE;IACE;;EAEF;IACE;IACA;;;AAKJ;EAEE;EACA;EACA;EACA;EACA;EAGA;EACA;;;AAGF;EACE;EACA;;;AAIA;EACE;AAAA;IAEE;;;AC/EN;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;A3C6DE;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;A3CnCN;E2C5CF;IAEI;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;InC5BA,YmC8BA;;;AnC1BA;EmCYJ;InCXM;;;ARuDJ;E2C5BE;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;IACA;;EAGF;IACE;IACA;IACA;IACA;IACA;IACA;;EAGF;IAEE;;EAGF;IAGE;;;A3C5BJ;E2C/BF;IAiEM;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;IACA;IAEA;;;;AA/ER;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EnC5BA,YmC8BA;;AnC1BA;EmCYJ;InCXM;;;AmC2BF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEE;;AAGF;EAGE;;;AA2BR;EPpHE;EACA;EACA;EACA,S5C0mCkC;E4CzmClC;EACA;EACA,kB5CUS;;A4CPT;EAAS;;AACT;EAAS,S5Cm+CyB;;;AmDr3CpC;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AC7IF;EACE;EACA;EACA;EACA;EACA;EACA,SpDgzCkC;;AoD9yClC;EACE;EACA;;;AAKJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKA;EACE;;;AAIJ;EACE;IACE,SpDmxCgC;;;AoD/wCpC;EACE;EACA;EACA;;;AAGF;EACE;IACE;;;AH9CF;EACE;EACA;EACA;;;AIHF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;AAFF;EACE;EACA;;;ACFF;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AATN;EACE;EACA;;AAGE;EAGE;EACA;;;AAOR;EACE;EACA;;AAGE;EAEE;EACA;;;AC1BN;EACE;EAEA;;;ACHF;EACE;EACA,KxD6c4B;EwD5c5B;EACA;EACA,uBxD2c4B;EwD1c5B;;AAEA;EACE;EACA,OxDuc0B;EwDtc1B,QxDsc0B;EwDrc1B;ExCIE,YwCHF;;AxCOE;EwCZJ;IxCaM;;;;AwCDJ;EACE;;;ACnBN;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;ACrBJ;EACE;EACA;EACA;EACA;EACA,S1DumCkC;;;A0DpmCpC;EACE;EACA;EACA;EACA;EACA,S1D+lCkC;;;A0DvlChC;EACE;EACA;EACA,S1DmlC8B;;;A0DhlChC;EACE;EACA;EACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;AQ9iChC;EkDxCA;IACE;IACA;IACA,S1DmlC8B;;E0DhlChC;IACE;IACA;IACA,S1D6kC8B;;;A2D5mCpC;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;ACRF;AAAA;ECIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EACE;;;ACdF;EACE;EACA;EACA;EACA;EACA;EACA,S9DgcsC;E8D/btC;;;ACRJ;ECAE;EACA;EACA;;;ACNF;EACE;EACA;EACA,OjEisB4B;EiEhsB5B;EACA;EACA,SjE2rB4B;;;AkE/nBtB;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AArBJ;AAcA;EAOI;EAAA;;;AAmBJ;AA1BA;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAjBJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AAIJ;EAOI;;;AAKF;EAOI;;;AAnBN;EAOI;;;AAKF;EAOI;;;AAnBN;EAOI;;;AAKF;EAOI;;;AAnBN;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AANJ;EACE;;;AAIA;EACE;;;AAIJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAPJ;EAIQ;EAGJ;;;AAjBJ;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AASF;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;EAAA;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;AAPJ;EAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;A1DVR;E0DGI;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;IAAA;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ACtDZ;ED+CQ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;ACnCZ;ED4BQ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;EAPJ;IAOI;;;AEzEZ;AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAAA;ACGA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAGF;AAAA;EAEE;;;AC/BA;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAMF;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ACfF;EACE;EACA,OCIwB;;;ACN1B;EACE;EACA;EACA;;AAEA;EAAO;;;AAGT;EACE;EACA;EACA;EACA;EACA;;;ACbF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;ACfF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAMF;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IASE;IACA;IACA;IACA;IACA;;;AAIJ;EACE;IAAU;;EACV;IAAM;;;AAGR;EACE;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;;AAGT;EACE;IAAM;;;AAGR;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IAAK;;EACL;IAAK;;EACL;IAAU;;EACV;IAAW;;EACX;IAAM;;EACN;IAAM;;EACN;IAAM;;EACN;IAAM;;EACN;IAAY;;;AAGd;EACE;IAAK;;EACL;IAAO;;;ACnJT;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AC1BF;EACE;EACA;EACA;EACA;EACA,gBLmCwB;EKlCxB,OLmCwB;;;AKhC1B;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC3BF;AAAA;AAIE;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;ACHxC;AAAA;ETqBE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKA;AAAA;EAbA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AUjCF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cR8BwB;EQ7BxB;;AAIF;AAAA;EAEE;;;ACxBF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cT8BwB;ES7BxB;;AAIF;AAAA;EAEE;;;ACxBF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cV8BwB;EU7BxB;;AAIF;AAAA;EAEE;;;AAIA;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AhBpBvC;AAAA;AAAA;AAAA;AAAA;AiBRA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAIA;AAAA;AAEA;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAED;AAAA;EAEC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;;;AAID;AAAA;AAEA;EACC;EACA;;;AAID;AAAA;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGD;EACC;EACA;EACA;;;AAGD;AAAA;AAGA;AACA;EACC;EACA;EACA;EACA;EACA;;;AjBpFD;AAAA;AAAA;AAAA;AAAA;AkBdA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA;AAAA;AAEA;EACC;EACA;;;AAED;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAED;EACC;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EASC;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOC;EACA;;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAQC;EACA;EACA;EACA;;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUC;EACA;;;AAGD;EACC;;;AAED;AAAA;AAAA;AAAA;AAAA;AAAA;EAMC;EACA;EACA;EACA;;;AAED;AAAA;EAEC;EACA;;;AAED;AAAA;AAAA;EAGC;EACA;;;AAGD;AAAA;AAEA;AAAA;AAAA;EAGC;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;AAAA;EAGC;;;AAED;AAAA;AAAA;EAGC;EACA;EACA;;;AAED;AAAA;AAAA;EAGC;;;AAED;AAAA;AAAA;EAGC;;;AAED;AAAA;AAAA;EAGC;;;AAED;AAAA;AAAA;EAGC;EACA;EACA;;;AAED;AAAA;AAAA;EAGC;EACA;EACA;;;AAED;EACC;;;AAGD;AAAA;AAGA;AACA;EACC;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAGD;AACA;AACA;EACC;;;AAED;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAuB;;;AACvB;EAAuB;;;AACvB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAAwB;;;AACxB;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAsB;;;AACtB;EAAuB;;;AACvB;EAAyB;;;AACzB;EAAuB;;;AACvB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA0B;;;AAC1B;EAA2B;;;AAC3B;EAA4B;;;AAC5B;EAA8B;;;AAC9B;EAA4B;;;AAC5B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAA8B;;;AAC9B;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAAgC;;;AAChC;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA2B;;;AAC3B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAA4B;;;AAC5B;EAAmB;;;AACnB;EAAwB;;;AACxB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAwB;;;AACxB;EAA6B;;;AAC7B;EAA4B;;;AAC5B;EAAuB;;;AACvB;EAAoB;;;AACpB;EAAsB;;;AACtB;EAAgB;;;AAChB;EAAuB;;;AACvB;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAe;;;AACf;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAoB;;;AACpB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAsB;;;AACtB;EAAkB;;;AAClB;EAAmB;;;AACnB;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAe;;;AACf;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAqB;;;AACrB;EAAgB;;;AAChB;EAAmB;;;AACnB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAkB;;;AAClB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAkB;;;AAClB;EAAoB;;;AACpB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAiB;;;AACjB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAoB;;;AACpB;EAAsB;;;AACtB;AACA;EAAsB;;;AACtB;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAsB;;;AACtB;EAAqB;;;AACrB;EAAiB;;;AACjB;EAAuB;;;AACvB;EAAkB;;;AAClB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAuB;;;AACvB;EAAwB;;;AACxB;EAAwB;;;AACxB;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAA0B;;;AAC1B;EAAyB;;;AACzB;EAA0B;;;AAC1B;EAAwB;;;AACxB;EAA4B;;;AAC5B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAA4B;;;AAC5B;EAA6B;;;AAC7B;EAA6B;;;AAC7B;EAAgC;;;AAChC;EAAkC;;;AAClC;EAA+B;;;AAC/B;EAAiC;;;AACjC;EAAiC;;;AACjC;EAA4B;;;AAG5B;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAED;AAAA;AAAA;AAAA;EAIC;;;AAGD;AACA;EACC;EACA;EACA;;;AAED;EACC;EACA;;;AlBlbD;AAAA;AAAA;AAAA;AAAA;AmBpBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AAAA;AAGA;EACC;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;EACA;EACA;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;;;AAED;EACC;EACA;;;AAED;AAAA;EAEC;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;EACA;EACA;EACA;EACA;EACA;;;AAED;EACC;;;AAGD;AACA;EACC;;;AAED;EACC;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAED;EACC;;;AAED;EACC;EACA;EACA;;;AAGD;AACA;EACC;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;EACA;;;AAED;EACC;;;AAED;EACC;;;AAED;AAAA;EAEC;;;AAED;AAAA;EAEC;EACA;;;AAGD;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;;AnB9JD;AAAA;AAAA;AAAA;AAAA;AAQI;EACE;EACA;EACA;;AAIJ;EACE;;AAGF;EAAc;;AACd;EAAoB;;AAEpB;EACE;EACA;EACA;;AAGF;EACE;;AAKA;EACE;EACA;EACA;EACA;EACA;;;AAKN;AAWE;;AATA;EACE;EACA;;AAGF;EACE;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;AAKF;EAAI;;AAEJ;EAAI;;;AAGN;EACE;EACA;EACA;;;A1E9FF;AAAA;AAAA;A2ElBA;AAAA;AAAA;AAAA;AAAA;ACGA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;;;AAGF;AAAA;EAEE;;;AC/BA;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AADF;EACE;;;AAMF;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ADNA;ECIA;EACA;EACA;;;ACfF;EACE;EACA,OCIwB;;;ACN1B;EACE;EACA;EACA;;AAEA;EAAO;;;AAGT;EACE;EACA;EACA;EACA;EACA;;;ACbF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;ACfF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAMF;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;IASE;IACA;IACA;IACA;IACA;;;AAIJ;EACE;IAAU;;EACV;IAAM;;;AAGR;EACE;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;EACP;IAAO;;;AAGT;EACE;IAAM;;;AAGR;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IAAK;;EACL;IAAK;;EACL;IAAU;;EACV;IAAW;;EACX;IAAM;;EACN;IAAM;;EACN;IAAM;;EACN;IAAM;;EACN;IAAY;;;AAGd;EACE;IAAK;;EACL;IAAO;;;ACnJT;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;AAGF;EACE;;;AC1BF;EACE;EACA;EACA;EACA;EACA,gBLmCwB;EKlCxB,OLmCwB;;;AKhC1B;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC3BF;AAAA;AAIE;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;AAAtC;EAAsC;;;ACHxC;AAAA;ETqBE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKA;AAAA;EAbA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AUjCF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cR8BwB;EQ7BxB;;AAIF;AAAA;EAEE;;;ACxBF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cT8BwB;ES7BxB;;AAIF;AAAA;EAEE;;;ACxBF;AAAA;AAAA;AAAA;AAAA;AAQA;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,cV8BwB;EU7BxB;;AAIF;AAAA;EAEE;;;AAIA;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;AAArC;EAAqC;;;A1FLvC;EACE;;AACA;EACE;EACA;EACA;;AACA;EACE;;;AAKN;EAAM;;;AACN;EAAO;;;AACP;EAAU;;;AAEV;EAAU;;;AAEV;EAAmB;;;AAEnB;EAAmC;;;AAEnC;EAAW;EAAa;;;AACxB;EAA2B;EAAc;;;AACzC;EAAS;;;AACT;EAAQ;;;AAER;EACE;;;AAGF;EACE;;;AAGF;EAAiB%22,%22file%22:%22application.css%22%7D */\n"
  },
  {
    "path": "spec/support/test_app/app/assets/config/manifest.js",
    "content": "//= link_tree ../images\n//= link_tree ../../javascript .js\n//= link_tree ../../../vendor/javascript .js\n//= link_tree ../builds\n//= link application.css\n//= link wice_grid.js\n//= link bootstrap.min.js\n//= link popper.js\n\n//= link jquery3.min.js\n//= link jquery-ui.js\n//= link jquery.ui.datepicker.locales.js\n//= link reload_on_change.js\n"
  },
  {
    "path": "spec/support/test_app/app/assets/stylesheets/adding_rows.scss",
    "content": ".last-row button, .extra-row button {margin: 10px}\n\n.urgent{font-weight: bold}\n"
  },
  {
    "path": "spec/support/test_app/app/assets/stylesheets/application.scss",
    "content": "/*\n * This is a manifest file that'll be compiled into application.css, which will include all the files\n * listed below.\n *\n * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,\n * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.\n *\n * You're free to add application-wide styles to this file and they'll appear at the top of the\n * compiled file, but it's generally better to create a new file per style scope.\n *\n *= require_self\n *= require_tree .\n *= require jquery-ui/humanity\n*/\n\n@import \"bootstrap\";\n@import \"wice_grid\";\n\n/*\n * @import \"font-awesome\"\n */\n@import \"font-awesome\";\n\nul.nav-pills {\n  padding-left: 0;\n  .nav-link {\n    display: list-item;\n    list-style-type: disc;\n    margin-left: 12px;\n    &.active a {\n      color: white\n    }\n  }\n}\n\nbody {padding-top: 20px;}\nheader{padding-bottom: 20px;}\nheader h1{font-size: 48px;}\n\n.well h2 {margin-bottom: 20px;}\n\n.external-buttons {margin-bottom: 20px;}\n\ninput.range-start, input.range-end{width: 100px;}\n\nheader h1 {float: left; margin-left: 20px;}\nheader .example-navigator {float: right; margin-right: 120px}\nli.next {margin-left: 10px;}\n.clear {clear:both;}\n\n.wice-grid.table-striped tbody tr:nth-child(odd) td.active-filter {\n  background-color: #f9f9e9;\n}\n\n.wice-grid.table-striped tbody tr td.active-filter {\n  background-color: #f9f9e9;\n}\n\nfooter .sources {float: right;}\n"
  },
  {
    "path": "spec/support/test_app/app/assets/stylesheets/csv_and_detached_filters.scss",
    "content": ".external-buttons{\n  margin-top: 10px;\n}"
  },
  {
    "path": "spec/support/test_app/app/assets/stylesheets/many_grids_on_page.scss",
    "content": ".many-grids-on-page input[type=text]{\n  width: 100px;\n}"
  },
  {
    "path": "spec/support/test_app/app/controllers/action_column_controller.rb",
    "content": "# encoding: utf-8\nclass ActionColumnController < ::ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      name:    'g',\n      order:   'id'\n    )\n    if params[:g] && params[:g][:selected]\n      @selected = params[:g][:selected]\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/adding_rows_controller.rb",
    "content": "# encoding: utf-8\nclass AddingRowsController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include:  [:priority, :status, :project, :assigned_users],\n      order:  'statuses.name',\n      custom_order:  {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/all_records_controller.rb",
    "content": "# encoding: utf-8\nclass AllRecordsController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include:  [:priority, :status, :project, :assigned_users],\n      order:  'statuses.name',\n      custom_order:  {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/application_controller.rb",
    "content": "# encoding: utf-8\nclass ApplicationController < ActionController::Base\n  protect_from_forgery\n\n  before_action :init_example_map\n  before_action :init_current_example_map\n\n  protected\n\n  def init_current_example_map\n    @controller_file_to_show = 'app/controllers/' + controller_name + '_controller.rb'\n    @controller_file = File.join(Rails.root, @controller_file_to_show)\n\n    @view_files_dir = {}\n    view_files_dir = File.join(Rails.root, 'app/views/' + controller_name)\n    Dir.glob(\"#{view_files_dir}/*\").each do |fullpath|\n      fullpath =~ /^.+(app\\/views\\/.+)$/\n      @view_files_dir[Regexp.last_match(1)] = fullpath\n    end\n  end\n\n  def init_example_map\n    @example_map = [\n      ['Basics',\n       [\n         [:basics1, 'Most simple grid'],\n         [:basics2, 'Named columns'],\n         [:upper_pagination_panel, 'Two pagination panels'],\n         [:basics3, 'Associating columns with database fields'],\n\n         [:blockless_column_definition, 'Dropping the block in #column'],\n         [:numeric_filters, 'Numeric filters'],\n         [:many_grids_on_page, 'More than 1 grid on a page'],\n         [:basics4, 'Disabling filters'],\n         [:disable_all_filters, 'Disabling all filters'],\n         [:dates, 'Date/Datetime helpers'],\n         [:when_filtered, 'Hidden filter panel'],\n         [:basics5, 'Disabling ordering'],\n         [:basics6, 'Initial conditions and ordering'],\n         [:buttons, 'External submit/reset buttons'],\n         [:detached_filters, 'External filters'],\n         [:detached_filters_two_grids, 'External filters (example with 2 grids)'],\n         [:no_records, 'A grid without records']\n\n       ]\n      ],\n\n      ['Joined tables',\n       [\n         [:joining_tables, 'Joined tables'],\n         [:two_associations, '2 associations to the same table']\n       ]\n      ],\n\n      ['Custom filters and ordering',\n       [\n         [:custom_ordering, 'Custom ordering (with String)'],\n         [:custom_ordering_with_arel, 'Custom ordering (with Arel)'],\n         [:custom_ordering_with_proc, 'Custom ordering (with Proc)'],\n         [:custom_ordering_with_ruby, 'Custom ordering (with arbitrary Ruby)'],\n         [:custom_ordering_on_calculated, 'Custom ordering (on a calculated field)'],\n         [:custom_filters1, 'Custom filters (one table)'],\n         [:custom_filters2, 'Custom filters (joined tables)'],\n         [:custom_filters3, 'Custom filters (method chains)'],\n         [:custom_filters4, 'Custom filters: turning off multiple selection'],\n         [:null_values, 'Custom filters (null values)']\n       ]\n      ],\n\n      ['Miscellaneous',\n       [\n         [:styling, 'Styling the grid'],\n         [:negation, 'Text filters with negation'],\n         [:adding_rows, 'Adding custom rows'],\n         [:all_records, 'Removing link \"All Records\"'],\n         [:csv_export, 'CSV export'],\n         [:csv_and_detached_filters, 'CSV export and external filters'],\n         [:auto_reloads, 'Auto reloading filters'],\n         [:auto_reloads2, 'Auto reloading filters (external filters)'],\n         [:auto_reloads3, 'Auto reloading filters (two grids on page)']\n       ]\n      ],\n\n      ['Integration with the application',\n       [\n         [:action_column, 'Action column'],\n         [:hiding_checkboxes_in_action_column, 'Hiding certain checkboxes in the action column'],\n         [:integration_with_forms, 'Integration with other forms'],\n         [:integration_with_application_view, 'View helpers to access records on the current page and all pages'],\n         [:resultset_processings, 'Callback to process records of the current page'],\n         [:resultset_processings2, 'Callback to process records throughout all pages on demand'],\n         [:localization, 'Localization'],\n         [:custom_filter_params, 'Generating custom filter parameters'],\n         [:saved_queries, 'Saved queries: simple example']\n       ]\n      ]\n    ]\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/auto_reloads2_controller.rb",
    "content": "# encoding: utf-8\nclass AutoReloads2Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      custom_order:  {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      },\n      order:  'id',\n      order_direction:  'asc'\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/auto_reloads3_controller.rb",
    "content": "# encoding: utf-8\nclass AutoReloads3Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n    @tasks_grid2 = initialize_grid(Task,\n     name: 'grid2',\n     custom_order: {\n       'tasks.priority_id' => 'priorities.name',\n       'tasks.status_id' => 'statuses.position',\n       'tasks.project_id' => 'projects.name'\n     }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/auto_reloads_controller.rb",
    "content": "# encoding: utf-8\nclass AutoReloadsController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      },\n      order: 'id',\n      order_direction: 'asc'\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics1_controller.rb",
    "content": "# encoding: utf-8\nclass Basics1Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics2_controller.rb",
    "content": "# encoding: utf-8\nclass Basics2Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics3_controller.rb",
    "content": "# encoding: utf-8\nclass Basics3Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task, order: 'id')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics4_controller.rb",
    "content": "# encoding: utf-8\nclass Basics4Controller < ApplicationController\n  def index\n     @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics5_controller.rb",
    "content": "# encoding: utf-8\nclass Basics5Controller < ApplicationController\n  def index\n     @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/basics6_controller.rb",
    "content": "# encoding: utf-8\nclass Basics6Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      order: 'tasks.title',\n      order_direction: 'desc',\n      conditions: { archived: false },\n      per_page: 20\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/blockless_column_definition_controller.rb",
    "content": "# encoding: utf-8\nclass BlocklessColumnDefinitionController < ApplicationController\n  def index\n     @tasks_grid = initialize_grid(Task, order: 'id')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/buttons_controller.rb",
    "content": "# encoding: utf-8\nclass ButtonsController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/csv_and_detached_filters_controller.rb",
    "content": "# encoding: utf-8\nclass CsvAndDetachedFiltersController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      name: 'grid',\n      enable_export_to_csv: true,\n      csv_field_separator: ';',\n      csv_file_name: 'tasks'\n    )\n    export_grid_if_requested('grid' => 'grid')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/csv_export_controller.rb",
    "content": "# encoding: utf-8\nclass CsvExportController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      },\n      name: 'g1',\n      enable_export_to_csv: true,\n      csv_field_separator: ';',\n      csv_file_name: 'tasks'\n    )\n    @projects_grid = initialize_grid(Project,\n      name: 'g2',\n      enable_export_to_csv: true,\n      csv_file_name: 'projects'\n    )\n\n    return export_grid_if_requested('g1' => 'tasks_grid', 'g2' => 'projects_grid') do\n      # usual render or redirect code executed if the request is not a CSV export request\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_filter_params_controller.rb",
    "content": "# encoding: utf-8\nclass CustomFilterParamsController < ApplicationController\n  def index\n    @projects_grid = initialize_grid(Project)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_filters1_controller.rb",
    "content": "# encoding: utf-8\nclass CustomFilters1Controller < ApplicationController\n  def index\n    @versions_grid1 = initialize_grid(Version, name: 'g1', per_page: 5)\n    @versions_grid2 = initialize_grid(Version, name: 'g2', per_page: 5)\n    @versions_grid3 = initialize_grid(Version, name: 'g3', per_page: 5)\n    @versions_grid4 = initialize_grid(Version, name: 'g4', per_page: 5)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_filters2_controller.rb",
    "content": "# encoding: utf-8\nclass CustomFilters2Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project],\n      order: 'statuses.name',\n      custom_order: {\n        # 'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id'   => 'statuses.position',\n        'tasks.project_id'  => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_filters3_controller.rb",
    "content": "# encoding: utf-8\nclass CustomFilters3Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:relevant_version, :expected_version, :project],\n      conditions: { projects: { id: Project.first.id } },\n      custom_order: {\n        'tasks.expected_version_id' => 'expected_versions_tasks.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_filters4_controller.rb",
    "content": "# encoding: utf-8\nclass CustomFilters4Controller < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:relevant_version, :expected_version, :project],\n      conditions: ['projects.id = ?', Project.first],\n      custom_order: {\n        'tasks.expected_version_id' => 'expected_versions_tasks.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_ordering_controller.rb",
    "content": "# encoding: utf-8\nclass CustomOrderingController < ApplicationController\n  def index\n    @status_grid1 = initialize_grid(Status,\n      order: 'statuses.name',\n      custom_order: {\n        'statuses.name' => 'length( ? )'\n      }\n    )\n    @status_grid2 = initialize_grid(Status,\n      name: 'g2',\n      order: 'statuses.name',\n      custom_order: {\n        'statuses.name' => 'statuses.position'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_ordering_on_calculated_controller.rb",
    "content": "# encoding: utf-8\nclass CustomOrderingOnCalculatedController < ApplicationController\n  def index\n    @status_grid = initialize_grid(Status)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_ordering_with_arel_controller.rb",
    "content": "# encoding: utf-8\nclass CustomOrderingWithArelController < ApplicationController\n  def index\n    @status_grid1 = initialize_grid(Status,\n      order: 'statuses.name',\n      custom_order: {\n        'statuses.name' => Arel.sql('length( ? )')\n      }\n    )\n    @status_grid2 = initialize_grid(Status,\n      name: 'g2',\n      order: 'statuses.name',\n      custom_order: {\n        'statuses.name' => Status.arel_table[:position]\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_ordering_with_proc_controller.rb",
    "content": "# encoding: utf-8\nclass CustomOrderingWithProcController < ApplicationController\n  def index\n    @status_grid = initialize_grid(Status,\n      order: 'statuses.name',\n      custom_order: {\n        'statuses.name' => ->(column_name) { params[:sort_by_length] ? \"length(#{column_name})\" : column_name }\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/custom_ordering_with_ruby_controller.rb",
    "content": "# encoding: utf-8\nclass CustomOrderingWithRubyController < ApplicationController\n  def index\n    @status_grid = initialize_grid(Status)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/dates_controller.rb",
    "content": "# encoding: utf-8\nclass DatesController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      order: 'id'\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/detached_filters_controller.rb",
    "content": "# encoding: utf-8\nclass DetachedFiltersController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/detached_filters_two_grids_controller.rb",
    "content": "# encoding: utf-8\nclass DetachedFiltersTwoGridsController < ApplicationController\n  def index\n    @grid1 = initialize_grid(Task)\n    @grid2 = initialize_grid(Task, name: 'grid2')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/disable_all_filters_controller.rb",
    "content": "# encoding: utf-8\nclass DisableAllFiltersController < ApplicationController\n  def index\n     @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/hiding_checkboxes_in_action_column_controller.rb",
    "content": "# encoding: utf-8\nclass HidingCheckboxesInActionColumnController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      name: 'g',\n      order: 'id'\n    )\n\n    if params[:g] && params[:g][:selected]\n      @selected = params[:g][:selected]\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/home_controller.rb",
    "content": "# encoding: utf-8\nclass HomeController < ApplicationController\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/integration_with_application_view_controller.rb",
    "content": "# encoding: utf-8\nclass IntegrationWithApplicationViewController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      name: 'g',\n      per_page: 10,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/integration_with_forms_controller.rb",
    "content": "# encoding: utf-8\nclass IntegrationWithFormsController < ApplicationController\n  def index\n    @archived = params[:archived] == '1' ? true : false\n\n    @tasks_grid = initialize_grid(Task,\n      conditions: { archived: @archived },\n      name: 'g'\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/joining_tables_controller.rb",
    "content": "# encoding: utf-8\nclass JoiningTablesController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      # You can omit includes if they are all mentioned in :assoc in the view\n      # includes: [:priority, :status, {project: :customer}],\n      conditions: { archived: false },\n      order: 'id'\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/localization_controller.rb",
    "content": "# encoding: utf-8\nclass LocalizationController < ApplicationController\n  before_action :init_locale\n\n  def init_locale\n    if params[:lang]\n      session[:lang] = params[:lang]\n    end\n    session[:lang] = :nl unless session[:lang]\n    I18n.locale = session[:lang]\n  end\n\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/many_grids_on_page_controller.rb",
    "content": "# encoding: utf-8\nclass ManyGridsOnPageController < ApplicationController\n  def index\n    @tasks_grid1 = initialize_grid(Task, name: 'g1')\n    @tasks_grid2 = initialize_grid(Task, name: 'g2')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/negation_controller.rb",
    "content": "# encoding: utf-8\nclass NegationController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project],\n      order: 'statuses.name',\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id'   => 'statuses.position',\n        'tasks.project_id'  => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/no_records_controller.rb",
    "content": "# encoding: utf-8\nclass NoRecordsController < ApplicationController\n  def index\n    @tasks_grid  = initialize_grid(Task,  conditions: ['title = ?', 'a title that does not exist'])\n    @tasks_grid2 = initialize_grid(Task,  conditions: ['title = ?', 'a title that does not exist'])\n    @tasks_grid3 = initialize_grid(Task,  conditions: ['title = ?', 'a title that does not exist'])\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/null_values_controller.rb",
    "content": "# encoding: utf-8\nclass NullValuesController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/numeric_filters_controller.rb",
    "content": "# encoding: utf-8\nclass NumericFiltersController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/queries_controller.rb",
    "content": "# encoding: utf-8\nclass QueriesController < ApplicationController\n  save_wice_grid_queries\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/resultset_processings2_controller.rb",
    "content": "# encoding: utf-8\nclass ResultsetProcessings2Controller < ApplicationController\n  attr_reader :selected_tasks\n\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      name: 'g',\n      per_page: 5,\n      with_resultset: :process_records,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n\n    @selected_tasks = []\n  end\n\n  protected\n\n  def process_records(active_relation)\n    if params[:process_selected_tasks]\n      @selected_tasks = active_relation.to_a\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/resultset_processings_controller.rb",
    "content": "# encoding: utf-8\nclass ResultsetProcessingsController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      name: 'g',\n      per_page: 10,\n      # :with_paginated_resultset => :process_records,\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n    @one_page_records = []\n    @tasks_grid.with_paginated_resultset do |records|\n      records.each { |rec| @one_page_records << rec }\n    end\n  end\n\n  protected\n\n  # def process_records(records)\n  #   records.each{|rec| @one_page_records << rec}\n  # end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/saved_queries_controller.rb",
    "content": "# encoding: utf-8\nclass SavedQueriesController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project, :assigned_users],\n      order: 'statuses.name',\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/styling_controller.rb",
    "content": "# encoding: utf-8\nclass StylingController < ApplicationController\n  def index\n    @versions_grid1 = initialize_grid(Version, name: 'g1')\n    @versions_grid2 = initialize_grid(Version, name: 'g2')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/tasks_controller.rb",
    "content": "# encoding: utf-8\nclass TasksController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task,\n      include: [:priority, :status, :project],\n      order: 'statuses.name',\n      custom_order: {\n        'tasks.priority_id' => 'priorities.name',\n        'tasks.status_id' => 'statuses.position',\n        'tasks.project_id' => 'projects.name'\n      }\n    )\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/two_associations_controller.rb",
    "content": "# encoding: utf-8\nclass TwoAssociationsController < ApplicationController\n  def index\n    @projects_grid = initialize_grid(Project)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/upper_pagination_panel_controller.rb",
    "content": "# encoding: utf-8\nclass UpperPaginationPanelController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/controllers/when_filtered_controller.rb",
    "content": "# encoding: utf-8\nclass WhenFilteredController < ApplicationController\n  def index\n    @tasks_grid = initialize_grid(Task)\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/helpers/application_helper.rb",
    "content": "# encoding: utf-8\nmodule ApplicationHelper\n  @@code = {}\n\n  def show_code\n    n = 0\n    content_tag(\n      :ul, code_chunks.map do |filename_for_view, code|\n        n += 1\n        content_tag(\n          :li, content_tag(\n            :div, link_to(filename_for_view, \"#collapse#{n}\", 'data-bs-toggle' => 'collapse', 'data-parent' => '#code-accordion', :class => 'accordion-button'),\n            class: 'accordion-header'\n          ) +\n          content_tag(\n            :div, content_tag(:div, code, class: 'accordion-inner'),\n            class: 'accordion-body collapse',\n            style: 'height: 0px;',\n            id: \"collapse#{n}\"\n          ),\n          class: 'accordion-item'\n        )\n      end.join.html_safe,\n      id: 'code-accordion',\n      class: 'accordion'\n    )\n  end\n\n  def code_chunks\n    [].tap do |res|\n      res << code_for(@controller_file, @controller_file_to_show, :ruby)\n\n      @view_files_dir.each do|filename_for_view, filename|\n        filetype = filename_for_view =~ /\\.erb/ ? :rhtml : :haml\n        res << code_for(filename, filename_for_view, filetype) unless filename.ends_with? '~'\n      end\n    end\n    #.reject do |file_name|\n      #file_name.ends_with? '~'\n    #end\n  end\n\n  def code_for(filename, filename_for_view, filetype = :ruby)\n    code = File.read(filename)\n    @@code[filetype] = CodeRay.scan(\"\\n#{code}\", filetype).div unless @@code[filename]\n    [filename_for_view, @@code[filetype].html_safe]\n  end\n\n  def each_example\n    @example_map.each do |section|\n      section[1].each do |controller, name|\n        yield controller, name\n      end\n    end\n  end\n\n  def current_page_title\n    each_example do |controller, name|\n      if controller.to_s == controller_name\n        return name\n      end\n    end\n  end\n\n  def previous_next_example_urls\n    previous_example_controller = nil\n    next_example_controller     = nil\n\n    _previous_example_controller = nil\n    found = false\n    each_example do |controller, _name|\n      if found\n        return previous_example_controller, controller\n      end\n\n      if controller.to_s == controller_name\n        previous_example_controller = _previous_example_controller\n        found = true\n      end\n      _previous_example_controller = controller\n    end\n    [previous_example_controller, nil]\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/javascript/application.js",
    "content": "// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails\nimport \"@hotwired/turbo-rails\"\nimport \"jquery\" // this import first\nimport \"jquery-ui\"\nimport \"bootstrap\"\nimport \"wice_grid\"\nimport \"jquery.ui.datepicker.locales\"\nimport \"reload_on_change\"\n"
  },
  {
    "path": "spec/support/test_app/app/mailers/.gitkeep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/app/models/.gitkeep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/app/models/company.rb",
    "content": "# encoding: utf-8\nclass Company < ActiveRecord::Base\n  has_many :customer_projects, class_name: 'Project', foreign_key: 'customer_id'\n  has_many :supplier_projects, class_name: 'Project', foreign_key: 'supplier_id'\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/populate.rb",
    "content": "# encoding: utf-8\nmodule Populate\n  def self.me\n    [Priority, ProjectRole, Status, Company, Version, User, UserProjectParticipation, Project, Task].map(&:delete_all)\n\n    %w(Urgent High Normal Low Anecdotic).each_with_index do |priority_name, i|\n      Priority.create!(position: i, name: priority_name)\n    end\n\n    %w(Manager Customer Developer QualityAssurance).each_with_index do |role_name, i|\n      ProjectRole.create!(name: role_name, can_close_tasks: i < 2)\n    end\n\n    %w(New Assigned Started Resolved Duplicate Cancelled Postponed Closed Verified).each_with_index do |status_name, i|\n      Status.create!(name: status_name, position: i)\n    end\n\n    ['MNU', 'SkyNet', 'Coders Unlimited', 'Shift-Command-4 Limited'].each do |company_name|\n      Company.create!(name: company_name)\n    end\n\n    companies = Company.all.index_by(&:name)\n    version_statuses = %w(development testing production)\n\n    { 'Ultimate Website' => { customer: 'MNU', supplier: 'Coders Unlimited', versions: ['1.0', '1.1', '1.2', '2.0', '3.0'] },\n      'Super Game' => { customer: 'MNU', supplier: 'Shift-Command-4 Limited', versions: ['1.0', '88.1', '99.0'] },\n      'Divine Firmware' => { customer: 'SkyNet', supplier: 'Coders Unlimited', versions: ['6.0', '7.1', '8.0'] } }.each do |project, data|\n      project = Project.create!(name: project, customer: companies[data[:customer]], supplier: companies[data[:supplier]])\n\n      data[:versions].each do|version|\n        Version.create!(name: version, project: project, status: version_statuses[rand(3)])\n      end\n    end\n\n    projects = Project.includes(:users).all\n    project_roles = ProjectRole.all\n\n    ['Wikus van de Merwe', 'Grey Bradnam', 'Christopher Johnson', 'Piet Smit', 'Fundiswa Mhlanga', 'Tania van de Merwe',\n     'Obesandjo', 'Dirk Michaels', 'Ross Pienaar', 'Koobus Venter', 'Dirk Michaels', 'Sarah Livingstone'].each do |user|\n       user = User.create!(name: user)\n\n       (rand(3) + 1).times do\n         UserProjectParticipation.create(\n           user: user,\n           project: projects.sample,\n           project_role: project_roles.sample\n         )\n       end\n    end\n\n    projects = Project.includes([:users, :versions]).all\n    statuses = Status.all\n    priorities = Priority.all\n\n    500.times do\n      task_name = Faker::Lorem.words(rand(3) + 1).join(' ')\n\n      project  = projects.sample\n\n      assigned_users = Set.new\n\n      rand(4).times do\n        assigned_users << project.users.sample\n      end\n\n      a = Task.create!(\n        title: task_name,\n        description: Faker::Lorem.sentence,\n        project: project,\n        created_by: project.users.sample,\n        status: statuses.sample,\n        priority: (rand(4) == 0 ? nil : priorities.sample),\n        assigned_users: assigned_users.to_a,\n        relevant_version: (rand(2) == 0 ? nil : project.versions.sample),\n        expected_version: (rand(2) == 0 ? nil : project.versions.sample),\n        estimated_time: rand(20) + 1,\n        due_date: Date.current.advance(days: (rand(300) + 100)),\n        created_at: (rand(100) + 100).days.ago,\n        updated_at: rand(100).days.ago,\n        archived: rand(10) == 0\n      )\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/priority.rb",
    "content": "# encoding: utf-8\nclass Priority < ActiveRecord::Base\n  has_many :tasks\n\n  include ToDropdownMixin\n\n  def self.urgent\n    find_by_name('Urgent')\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/project.rb",
    "content": "# encoding: utf-8\nclass Project < ActiveRecord::Base\n  has_many :tasks\n  has_many :user_project_participations\n\n  has_many :users, through: :user_project_participations\n\n  has_many :versions\n\n  belongs_to :customer, class_name: 'Company'\n  belongs_to :supplier, class_name: 'Company'\n\n  include ToDropdownMixin\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/project_role.rb",
    "content": "# encoding: utf-8\nclass ProjectRole < ActiveRecord::Base\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/status.rb",
    "content": "# encoding: utf-8\nclass Status < ActiveRecord::Base\n  has_many :tasks\n\n  include ToDropdownMixin\n\n  def number_of_vowels\n    name.scan(/[aeiou]/i).count\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/task.rb",
    "content": "# encoding: utf-8\nclass Task < ActiveRecord::Base\n  belongs_to :created_by, class_name: 'User'\n  belongs_to :project\n  belongs_to :priority\n  belongs_to :status\n  belongs_to :relevant_version, class_name: 'Version'\n  belongs_to :expected_version, class_name: 'Version'\n\n  has_and_belongs_to_many :assigned_users, -> { order('users.name') }, class_name: 'User'\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/to_dropdown_mixin.rb",
    "content": "# encoding: utf-8\nmodule ToDropdownMixin\n  def self.included(base)\n    base.extend(ClassMethods)\n  end\n\n  module ClassMethods\n    def to_dropdown\n      order('name').map(&:to_option)\n    end\n  end\n\n  def to_option\n    [name, id]\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/user.rb",
    "content": "# encoding: utf-8\nclass User < ActiveRecord::Base\n  has_many :created_tasks, class_name: 'Task', foreign_key: :created_by_id\n  has_and_belongs_to_many :assigned_tasks, class_name: 'Task'\n\n  has_many :user_project_participations\n  has_many :projects, through: :user_project_participations\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/user_project_participation.rb",
    "content": "# encoding: utf-8\nclass UserProjectParticipation < ActiveRecord::Base\n  belongs_to :user\n  belongs_to :project\n  belongs_to :project_role\nend\n"
  },
  {
    "path": "spec/support/test_app/app/models/version.rb",
    "content": "# encoding: utf-8\nclass Version < ActiveRecord::Base\n  belongs_to :project\n\n  include ToDropdownMixin\nend\n"
  },
  {
    "path": "spec/support/test_app/app/views/action_column/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.action_column html_check_box: false\n  # The default param_name is 'selected', the complete HTTP parameter will be \"#{grid_name}[#{param_name}][]\"\n\n  # Or:\n  # g.action_column param_name: :foo, html: {class: 'my_class'},\n  #                 select_all_buttons: false, object_property: :id\n\n  g.column name: 'ID', attribute: 'id', filter_type: :range\n  g.column name: 'Title', attribute: 'title', negation: true\n  g.column name: 'Archived', attribute: 'archived' do |rec|\n    rec.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Due Date', attribute: 'due_date'\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:db)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/action_column/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      You can easily add a column with checkboxes for each row with\n      %code g.action_column\n      \\.\n      Normally WiceGrid does not use a form, but its filters work correctly when placed inside a form, so you can use a form to process\n      the selected records while keeping the state of the filters. Another way could be reading the selected checkoxes with the help\n      of a simple javascript.\n    %p\n      By default the checkboxes have name\n      %code \"grid_name[selected][]\"\n      , but you can change\n      %code selected\n      to something else with parameter\n      %code param_name: 'my-parameter-name'\n    %p\n      The value of the checkox is the id by default, but you can change it with parameter\n      %code object_property: 'some_object_property'\n      \\.\n    %p\n      %code select_all_buttons: false\n      hides the \"(de)select all\" icons, and\n      %code html: {class: 'my_class'}\n      changes the css class of the checkboxes.\n\n= show_code\n\n= dump_filter_parameters_as_hidden_fields(@tasks_grid)\n= form_for '#', method: :get do\n\n  - if @selected\n    .card.bg-light\n      .card-body\n        Selected tasks:\n        = @selected.to_sentence\n  .row\n    .col-md-12\n      %p\n        %button.btn.btn-default{'type' => 'submit'} Process tasks\n\n      = render   'grid'\n\n      %p\n        %button.btn.btn-default{'type' => 'submit'} Process tasks\n"
  },
  {
    "path": "spec/support/test_app/app/views/adding_rows/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.after_row do |task, number_of_columns|\n    if task.priority == Priority.urgent\n      content_tag(:tr,\n        content_tag(:td,\n          content_tag(:button, \"Panic! \\\"#{task.title}\\\" is urgent!\", class: \"btn btn-danger\"),\n        colspan: number_of_columns),\n       class: 'extra-row')\n    else\n      nil\n    end\n  end\n  g.last_row do |number_of_columns|\n    content_tag(:tr,\n      content_tag(:td,\n        content_tag(:button, \"Don't panic\", class: \"btn btn-info\"),\n        colspan: 9),\n     class: 'last-row')\n  end\n  g.row_attributes do |task|\n    if task.priority == Priority.urgent\n      {class: 'urgent'}\n    end\n  end\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend\n-%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/adding_rows/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to insert a custom row at the bottom of the grid with\n      %code last_row\n      and a custom row before or after a certain row with\n      %code before_row\n      and\n      %code after_row.\n    %p\n      The block of\n      %code before_row\n      or\n      %code after_row\n      is executed for each record and if it returns a string.\n    %p\n      Both\n      %code before_row\n      and\n      %code last_row\n      are expected to return the complete markup for a table row starting with the\n      %code tr\n      tag.\n    %p\n      The first argument for a\n      %code last_row\n      block and the second argument for\n      %code before_row\n      and\n      %code after_row\n      blocks is the number of columns in the grid.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/all_records/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, allow_showing_all_records: false) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/all_records/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Use\n      %code allow_showing_all_records: false\n      to remove \"show all\" link from the grid.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads/_grid.html.erb",
    "content": "<%= grid(@tasks_grid,  hide_submit_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', auto_reload: true , filter_type: :range\n  g.column name: 'Title', attribute: 'title', auto_reload: true, negation: true\n  g.column name: 'Archived', attribute: 'archived', auto_reload: true do |rec|\n    rec.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown, auto_reload: true do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Due Date', attribute: 'due_date', auto_reload: true do |task|\n    task.due_date if task.due_date\n  end\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true do |task|\n    task.created_at.to_fs(:db)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to reload the grid on each filter action like changing the selected option in a dropdown filter or typing in a text filter.\n      One way to do it is to use\n      %code auto_reload: true\n      for each column. Another way is changing\n      %code Wice::Defaults::AUTO_RELOAD\n      in the WiceGrid config file.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads2/_grid.html.erb",
    "content": "<%= define_grid(@tasks_grid,  hide_submit_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', auto_reload: true, detach_with_id: :id, filter_type: :range\n  g.column name: 'Title', attribute: 'title', auto_reload: true, negation: true, detach_with_id: :title\n  g.column name: 'Archived', attribute: 'archived', auto_reload: true, detach_with_id: :archived do |rec|\n    rec.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true, detach_with_id: :status_id  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown, auto_reload: true, detach_with_id: :project_id do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Due Date', attribute: 'due_date', auto_reload: true, detach_with_id: :due_date do |task|\n    task.due_date if task.due_date\n  end\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true, detach_with_id: :created_at do |task|\n    task.created_at.to_fs(:db)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads2/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      An example with an autoreloading grid with detached filters.\n\n= show_code\n\n= render   'grid'\n\n.row\n  .col-md-2\n    ID:\n  .col-md-10\n    = grid_filter @tasks_grid, :id\n.row\n  .col-md-2\n    Title:\n  .col-md-10\n    = grid_filter @tasks_grid, :title\n.row\n  .col-md-2\n    Archived:\n  .col-md-10\n    = grid_filter @tasks_grid, :archived\n.row\n  .col-md-2\n    Status:\n  .col-md-10\n    = grid_filter @tasks_grid, :status_id\n.row\n  .col-md-2\n    Project:\n  .col-md-10\n    = grid_filter @tasks_grid, :project_id\n.row\n  .col-md-2\n    Due date:\n  .col-md-10\n    = grid_filter @tasks_grid, :due_date\n.row\n  .col-md-2\n    Added:\n  .col-md-10\n    = grid_filter @tasks_grid, :created_at\n.row\n  .col-md-12\n    .external-buttons\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n.row\n  .col-md-12\n    = render_grid(@tasks_grid)\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads3/_grid.html.erb",
    "content": "<%= define_grid(grid,  hide_submit_button: true) do |g|\n  g.column name: 'Title', attribute: 'title', auto_reload: true, negation: true, detach_with_id: :title\n  g.column name: 'Archived', attribute: 'archived', auto_reload: true, detach_with_id: :archived do |rec|\n    rec.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true, detach_with_id: :status_id  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Due Date', attribute: 'due_date', auto_reload: true, detach_with_id: :due_date do |task|\n    task.due_date if task.due_date\n  end\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/auto_reloads3/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      An example with 2 independant autoreloading grids on one page.\n\n= show_code\n\n= render   'grid', grid: @tasks_grid\n= render   'grid', grid: @tasks_grid2\n\n.row\n  .col-md-2\n    Title:\n  .col-md-4\n    = grid_filter @tasks_grid, :title\n  .col-md-2\n    Title:\n  .col-md-4\n    = grid_filter @tasks_grid2, :title\n.row\n  .col-md-2\n    Archived:\n  .col-md-4\n    = grid_filter @tasks_grid, :archived\n  .col-md-2\n    Archived:\n  .col-md-4\n    = grid_filter @tasks_grid2, :archived\n.row\n  .col-md-2\n    Status:\n  .col-md-4\n    = grid_filter @tasks_grid, :status_id\n  .col-md-2\n    Status:\n  .col-md-4\n    = grid_filter @tasks_grid2, :status_id\n.row\n  .col-md-2\n    Due date:\n  .col-md-4\n    = grid_filter @tasks_grid, :due_date\n  .col-md-2\n    Due date:\n  .col-md-4\n    = grid_filter @tasks_grid2, :due_date\n.row\n  .col-md-6\n    .external-buttons.grid1\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n  .col-md-6\n    .external-buttons.grid2\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid2'} Reset\n.row\n  .col-md-6\n    = render_grid(@tasks_grid)\n  .col-md-6\n    = render_grid(@tasks_grid2)\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics1/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column do |task|\n    task.id\n  end\n  g.column  do |task|\n    task.title\n  end\n  g.column do |task|\n    task.description\n  end\n  g.column do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics1/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      The simplest grid is defined by the\n      %code grid\n      helper with column blocks inside  for each column.\n      The value of each column block is the contents of a cell.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics2/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID' do |task|\n    task.id\n  end\n  g.column name: 'Title'  do |task|\n    task.title\n  end\n  g.column  name: 'Description' do |task|\n    task.description\n  end\n  g.column  name: 'Archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics2/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      The\n      %code name\n      parameter adds names of columns to the grid.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics3/_grid.html.erb",
    "content": "<%# show_filters: :when_filtered %>\n<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id' do |task|\n    task.id\n  end\n  g.column name: 'Title', attribute: 'title'  do |task|\n    task.title\n  end\n  g.column  name: 'Description', attribute: 'description' do |task|\n    task.description\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date' do |task|\n    task.due_date\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics3/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Once a grid column is associated with the inderlying database field with the help of the\n      %code attrubute\n      parameter the column becomes sortable and a column filter is rendered. The column filter\n      is generated based on the type of the database field.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics4/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description', filter: false\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at', filter: false do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics4/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      To disable a filter use\n      %code filter: false\n      \\.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics5/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID',    attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Description', attribute: 'description', ordering: false\n  g.column name: 'Archived',    attribute: 'archived',    ordering: false do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date',     attribute: 'due_date', filter: false\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics5/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      To disable ordering columns use\n      %code allow_ordering: false\n      \\.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics6/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', filter: false\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/basics6/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Use\n      %code :order\n      and\n      %code :order_direction\n      in\n      %code  initialize_grid\n      to define by which column the grid should be ordered once it is loaded initially.\n\n  %p\n    Use\n    %code :conditions\n    in\n    %code  initialize_grid\n    to define the subset of records shown in the grid.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/blockless_column_definition/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id'\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date'\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/blockless_column_definition/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      If the contents of the cell is the return value of calling\n      %code :attrubute\n      on the active record, without any additional markup or transformations, the\n      block of the\n      %code column\n      method can be dropped.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/buttons/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, hide_submit_button: true, hide_reset_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', filter: false\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/buttons/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      To replace the default Submit and Reset icons of the grid, add class\n      %code wg-external-submit-button\n      to any clickable element on page and set its attribute\n      %code data-grid-name\n      to the name of the grid.\n      Do the same for the Reset button with class\n      %code wg-external-reset-button.\n\n    %p\n      %code grid\n      helper parameters\n      %code hide_submit_button: true\n      and\n      %code hide_reset_button: true\n      hide the default icons.\n\n= show_code\n\n.row\n  .col-md-12\n    .external-buttons\n      %button.btn.btn-primary.wg-external-submit-button{'data-grid-name' => 'grid'} Submit\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/csv_and_detached_filters/_grid.html.erb",
    "content": "<%= define_grid(@tasks_grid, hide_submit_button: true, hide_reset_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', detach_with_id: :id_filter\n  g.column name: 'Title', attribute: 'title', detach_with_id: :title_filter\n  g.column  name: 'Description', attribute: 'description', detach_with_id: :description_filter\n  g.column  name: 'Archived', attribute: 'archived', detach_with_id: :archived_filter do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', detach_with_id: :due_date do |task|\n    task.due_date.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/csv_and_detached_filters/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      CSV export works with\n      %code define_grid\n      and external filters, too.\n\n= show_code\n\n= render   'grid'\n\n.row\n  .col-md-2\n    ID:\n  .col-md-10\n    = grid_filter @tasks_grid, :id_filter\n.row\n  .col-md-2\n    Title:\n  .col-md-10\n    = grid_filter @tasks_grid, :title_filter\n.row\n  .col-md-2\n    Description:\n  .col-md-10\n    = grid_filter @tasks_grid, :description_filter\n.row\n  .col-md-2\n    Archived:\n  .col-md-10\n    = grid_filter @tasks_grid, :archived_filter\n.row\n  .col-md-2\n    Due date:\n  .col-md-10\n    = grid_filter @tasks_grid, :due_date\n.row\n  .col-md-12\n    %button.btn.btn-primary.wg-external-submit-button{'data-grid-name' => 'grid'} Submit\n    %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n    %button.btn.btn-primary.wg-external-csv-export-button{'data-grid-name' => 'grid'} Export To CSV\n%p\n.row\n  .col-md-12\n    = render_grid(@tasks_grid)\n"
  },
  {
    "path": "spec/support/test_app/app/views/csv_export/_projects_grid.html.erb",
    "content": "<%= grid(@projects_grid, show_filters: :always, hide_csv_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Project Name', attribute: 'name'\n  g.column  name: 'Customer company', assoc: :customer, attribute: 'name' do |task|\n    task.customer.name if task.customer\n  end\n  g.column  name: 'Supplier company',\n      assoc: :supplier, attribute: 'name', table_alias: 'suppliers_projects' do |task|\n    task.supplier.name if task.supplier\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/csv_export/_tasks_grid.html.erb",
    "content": "<%= grid(@tasks_grid, upper_pagination_panel: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  # html version\n  g.column name: 'Title', attribute: 'title', in_csv: false do |task|\n    link_to('Edit', edit_task_path(task.title))\n  end\n  # plain text version\n  g.column name: 'Title', in_html: false do |task|\n    task.title\n  end\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown do |task|\n    task.status.name if task.status\n  end\n  # html version\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown,  in_csv: false do |task|\n    link_to_if(task.project, task.project.name, project_path(task.project) )\n  end\n  # plain text version\n  g.column name: 'Project Name', in_html: false do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  # is not included into csv\n  g.column  in_csv: false do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/csv_export/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      A grid can export itself in the form of a CSV file. The contents of the file corresponds to the selected subset of all records,\n      that is, the CSV export follows the state of filters and sorting.\n    %p\n      To enable CSV export for a grid please do the following:\n      %ol\n        %li Make sure that the grid helper is in its own partial and there are no other elements in that partial including whitespaces\n        %li\n          Enable CSV export by adding\n          %code enable_export_to_csv: true\n          to\n          %code initialize_grid\n        %li\n          Set the name of the exported file using option\n          %code :csv_file_name\n          in\n          %code initialize_grid\n        %li\n          Change the CSV field separator by adding\n          %code csv_field_separator: 'your-separator'\n          to\n          %code initialize_grid\n          \\.\n          The default field separator is the comma, and you can change the default by editing the value of\n          %code Wice::Defaults::CSV_FIELD_SEPARATOR\n          in the config file\n        %li\n          The action code should be finished by a call to\n          %code export_grid_if_requested\n          \\:\n          :plain\n            <pre>\n            export_grid_if_requested('g1' => 'tasks_grid', 'g2' => 'projects_grid') do\n              # usual render or redirect code executed if the request is not a CSV export request\n            end\n            </pre>\n          The block is executed if the call is not a request for a CSV file, so place your usual\n          %code redirect_to\n          ,\n          %code render\n          inside the block, or just skip it if your action does not have an explicit render:\n          :plain\n            <pre>\n            export_grid_if_requested('g1' => 'tasks_grid', 'g2' => 'projects_grid')\n            </pre>\n          The keys of the hash submitted as an argument to\n          %code  export_grid_if_requested\n          are names of grids, and the values are names of partials where the grids are defined.\n        %li\n          If a column definition contains markup, first disable its export to CSV adding\n          %code in_csv: false\n          to the column definition, and then duplicate the column definition without the markup in the block while adding\n          %code in_html: false\n          to the column definition. Any filter related parameters like\n          %code :attribute\n          ,\n          %code :assoc\n          , or\n          %code :custom_filter\n          can be skipped in a CSV-only column.\n        %li\n          If you need an external CSV export button , add  class\n          %code wg-external-csv-export-button\n          to any clickable element on page\n          and set its attribute\n          %code data-grid-name\n          to the name of the grid. If you need to disable the default export icon in the grid, add\n          %code hide_csv_button: true\n          to the\n          %code grid\n          helper.\n\n= show_code\n\n%p\n  %button.btn.btn-primary.wg-external-csv-export-button{'data-grid-name' => 'g1'} Export To CSV\n\n.row\n  .col-md-12\n    =render  'projects_grid'\n.row\n  .col-md-12\n    =render  'tasks_grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filter_params/_grid.html.erb",
    "content": "<%= grid(@projects_grid) do |g|\n  g.column name: 'Project Name', attribute: 'name'  do |project|\n    link_to(project.name,\n            tasks_path(\n              wice_grid_custom_filter_params(\n                grid_name: 'grid',\n                attribute: 'project_id',\n                value: project.id  )))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filter_params/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Helper\n      %code wice_grid_custom_filter_params\n      simplifies generation of links with HTTP parameters understood by WiceGrid custom filter parameters.\n\n= show_code\n\n.row\n  .col-md-4\n    = render 'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters1/_g1.html.erb",
    "content": "<%= grid(@versions_grid1) do |g|\n  g.column name: 'Project', attribute: 'name', assoc: :project, filter: false\n  g.column name: 'Version name', attribute: 'name', filter: false\n  g.column name: 'Status', attribute: 'status', custom_filter: {'Development' => 'development', 'Testing' => 'testing', 'Production' => 'production'}\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters1/_g2.html.erb",
    "content": "<%= grid(@versions_grid2) do |g|\n  g.column name: 'Project', attribute: 'name', assoc: :project, filter: false\n  g.column name: 'Version name', attribute: 'name', filter: false\n  g.column name: 'Status', attribute: 'status',\n      custom_filter: [['Development', 'development'], ['Testing', 'testing'], ['Production', 'production']]\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters1/_g3.html.erb",
    "content": "<%= grid(@versions_grid3) do |g|\n  g.column name: 'Project', attribute: 'name', assoc: :project, filter: false\n  g.column name: 'Version name', attribute: 'name', filter: false\n  g.column name: 'Status', attribute: 'status',\n      custom_filter: ['development', 'testing', 'production']\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters1/_g4.html.erb",
    "content": "<%= grid(@versions_grid4) do |g|\n  g.column name: 'Project', attribute: 'name', assoc: :project, filter: false\n  g.column name: 'Version name', attribute: 'name', filter: false\n  g.column name: 'Status', attribute: 'status', custom_filter: :auto\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters1/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Just like\n      %code options_for_select\n      ,\n      %code :custom_filter\n      can take arguments in the form of a hash, an array of two element arrays, or just an array.\n    %p\n      %code custom_filter: :auto\n      will instruct WiceGrid to figure out the list of possible values by running a\n      %code SELECT DISTINCT `column` FROM `table`\n      query on the table.\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'g1'\n  .col-md-6\n    = render   'g2'\n.row\n  .col-md-6\n    = render   'g3'\n  .col-md-6\n    = render   'g4'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters2/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'name', assoc: :priority, custom_filter: %w(Anecdotic High Low Normal Urgent) do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id',  custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters2/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      There are two approaches to custom filters with joined tables. The first thing that comes to mind is to define\n      a column of a joined table with\n      %code :attribute\n      and\n      %code :assoc\n      , and submit a list of all possible values of this column to\n      %code :custom_filter\n      , like it is done in the example below in the Priority column:\n    %p\n      %code g.column name: 'Priority', attribute: 'name', assoc: :priority, custom_filter: %w(Anecdotic High Low Normal Urgent) do |task|\n    %p\n      This works but such a filter produces a query with a\n      %code WHERE\n      clause comparing a varchar field with one of the string values submitted to\n      %code :custom_filter\n      \\.\n      This is not guaranteed to be as efficient as comparing an indexed integer foreign key with an integer primary key, thus, this approach is highly advised against.\n    %p\n      To implement filtering by foreign keys, define the column with the foreign key in\n      %code :attribute\n      and submit a hash or a two element array containing the IDs and labels of the joined table to\n      %code :attribute\n      \\.\n      This has a negative side effect on sorting - the column will now be sorted according to the numerical value of the foreign key.\n      It can be dealt with by overiding sorting by\n      %code :custom_order\n      in\n      %code initialize_grid\n      \\:\n    %p\n      %code custom_order: {'tasks.status_id' => 'statuses.position', 'tasks.project_id' => 'projects.name'}\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters3/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Found in version', assoc: :relevant_version, attribute: 'name', custom_filter: :auto do |task|\n    task.relevant_version.name if task.relevant_version\n  end\n  g.column name: 'Expected in version', attribute: 'expected_version_id', custom_filter: [:expected_version, :to_option] do |task|\n    task.expected_version.name if task.expected_version\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters3/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      An array of symbols submitted to\n      %code :custom_filter\n      has a special meaning. The first symbol is sent as a method name to EVERY ActiveRecord object.\n      If an object responds to this method, the second method name is sent to the returned value unless it is nil, and so on.\n      The dropdown is populated by the list unique values.\n      The conditions set up by the user are ignored, that is, the records used are all those found on all pages without any active filters.\n      Naturally this can be extremely inneffective and should be used with caution.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters4/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Found in version', assoc: :relevant_version,\n      attribute: 'name', custom_filter: :auto, allow_multiple_selection: false do |task|\n    task.relevant_version.name if task.relevant_version\n  end\n  g.column name: 'Expected in version', attribute: 'expected_version_id',\n      custom_filter: [:expected_version, :to_option], allow_multiple_selection: false do |task|\n    task.expected_version.name if task.expected_version\n  end\n  g.column do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_filters4/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Use\n      %code allow_multiple_selection: false\n      to turn off mutiple selection in custom filters.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering/_grid.html.erb",
    "content": "<%= grid(grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Status Name', attribute: 'name'\n  g.column  name: 'Created' do |status|\n    status.created_at.to_fs(:db) if status.created_at\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to override the default ordering by specifying SQL Strings.\n      \"Status Name\" in the first table is done by the length of the status name.\n      Ordering \"Status Name\" in the second table is actually replaced by ordering\n      by column.\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'grid', grid: @status_grid1\n  .col-md-6\n    = render   'grid', grid: @status_grid2\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_on_calculated/_grid.html.erb",
    "content": "<%= grid(grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Status Name', attribute: 'name'\n  g.column name: 'Created' do |status|\n    status.created_at.to_fs(:db) if status.created_at\n  end\n  g.column name: 'Task Count', attribute: 'task_count', sort_by: ->(status) { status.tasks.count } do |status|\n    status.tasks.count\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_on_calculated/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to support ordering on calculated fields with custom_sort. When using this method you must specify\n      an (arbitrary) attribute name, which is used as a query parameter.\n    %p\n      Note that this method requires loading every result of the query into memory and running the Proc on each, so is\n      unsuitable for a large number of results or expensive calculations.\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'grid', grid: @status_grid\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_arel/_grid.html.erb",
    "content": "<%= grid(grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Status Name', attribute: 'name'\n  g.column  name: 'Created' do |status|\n    status.created_at.to_fs(:db) if status.created_at\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_arel/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to override the default ordering by specifying Arel objects. \"Status Name\" in the first table is done\n      by the length of the status name. Ordering \"Status Name\" in the second table is actually replaced by ordering\n      by column.\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'grid', grid: @status_grid1\n  .col-md-6\n    = render   'grid', grid: @status_grid2\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_proc/_grid.html.erb",
    "content": "<%= grid(grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Status Name', attribute: 'name'\n  g.column  name: 'Created' do |status|\n    status.created_at.to_fs(:db) if status.created_at\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_proc/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to override the default ordering by specifying a Proc which generates custom sql code. \"Status Name\"\n      is sorted alphabetically unless\n      = link_to 'a sort_by_length parameter is in the request.', sort_by_length: true\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'grid', grid: @status_grid\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_ruby/_grid.html.erb",
    "content": "<%= grid(grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Status Name', attribute: 'name', sort_by: ->(status) { [status.number_of_vowels, status] }\n  g.column  name: 'Created' do |status|\n    status.created_at.to_fs(:db) if status.created_at\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/custom_ordering_with_ruby/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      It is possible to override the default ordering by specifying a Proc to define the key to sort on. This key can be\n      a method of the model or other Ruby code. \"Status Name\" sorts on Status#number_of_vowels.\n    %p\n      Note that this method requires loading every result of the query into memory and running the Proc on each, so is\n      unsuitable for a large number of results or expensive calculations.\n\n= show_code\n\n.row\n  .col-md-6\n    = render   'grid', grid: @status_grid\n"
  },
  {
    "path": "spec/support/test_app/app/views/dates/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date' do |task|\n    task.due_date if task.due_date\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:db)\n  end\n  g.column name: 'Updated', attribute: 'updated_at', filter_type: :rails_datetime_helper, filter_control_options: {start_year: 2021} do |task|\n    task.updated_at.to_fs(:db)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/dates/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      WiceGrid provides four filters for selecting dates and time:\n      %ul\n        %li\n          %code\n            \\:jquery_datepicker\n          \\- Jquery datepicker (works for datetime, too)\n        %li\n          %code\n            \\:bootstrap_datepicker\n          \\- Bootstrap datepicker (works for datetime, too)\n        %li\n          %code\n            \\:rails_date_helper\n          \\- standard Rails date helper\n        %li\n          %code\n            \\:rails_datetime_helper\n          \\- standard Rails datetime helper\n      Specify a date/datetime filter just like you specify any other filter:\n\n    %p\n      Default filters are defined in configuration constants\n      %code\n        Wice::Defaults::DEFAULT_FILTER_FOR_DATE\n      and\n      %code\n        Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME.\n      By default\n      %code\n        \\:jquery_datepicker\n      is used for both dates and time.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/detached_filters/_grid.html.erb",
    "content": "<%= define_grid(@tasks_grid, hide_submit_button: true, hide_reset_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', detach_with_id: :id_filter\n  g.column name: 'Title', attribute: 'title', detach_with_id: :title_filter\n  g.column  name: 'Description', attribute: 'description', detach_with_id: :description_filter\n  g.column  name: 'Archived', attribute: 'archived', detach_with_id: :archived_filter do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', detach_with_id: :due_date do |task|\n    task.due_date.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/detached_filters/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Filters can also be detached from the grid table. This is a 3-step process.\n\n    %ol\n      %li\n        First, define the grid with helper\n        %code define_grid\n        instead of\n        %code grid\n        \\. Everything should be done the same way as with\n        %code grid, but every column which will have an external filter, add\n        %code detach_with_id: :some_filter_name\n        in the\n        %code column\n        definition.\n      %li\n        Then use\n        %code grid_filter(grid, :some_filter_name)\n        to render filters.\n      %li\n        Finally, use\n        %code render_grid(@grid)\n        to actually output the grid table\n        \\.\n\n= show_code\n\n= render   'grid'\n\n.row\n  .col-md-2\n    ID:\n  .col-md-10\n    = grid_filter @tasks_grid, :id_filter\n.row\n  .col-md-2\n    Title:\n  .col-md-3\n    = grid_filter @tasks_grid, :title_filter\n  .col-md-7\n.row\n  .col-md-2\n    Description:\n  .col-md-3\n    = grid_filter @tasks_grid, :description_filter\n  .col-md-7\n.row\n  .col-md-2\n    Archived:\n  .col-md-10\n    = grid_filter @tasks_grid, :archived_filter\n.row\n  .col-md-2\n    Due date:\n  .col-md-10\n    = grid_filter @tasks_grid, :due_date\n.row\n  .col-md-12\n    .external-buttons\n      %button.btn.btn-primary.wg-external-submit-button{'data-grid-name' => 'grid'} Submit\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n.row\n  .col-md-12\n\n    = render_grid(@tasks_grid)\n"
  },
  {
    "path": "spec/support/test_app/app/views/detached_filters_two_grids/_grid.html.erb",
    "content": "<%= define_grid(tasks_grid, hide_submit_button: true, hide_reset_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', detach_with_id: :id_filter\n  g.column name: 'Title', attribute: 'title', detach_with_id: :title_filter\n  g.column  name: 'Description', attribute: 'description', detach_with_id: :description_filter\n  g.column  name: 'Archived', attribute: 'archived', detach_with_id: :archived_filter do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', detach_with_id: :due_date do |task|\n    task.due_date.to_fs(:db)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/detached_filters_two_grids/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      An example of two grids with detached filters functioning independantly of each other.\n\n= show_code\n\n= render   'grid', tasks_grid: @grid1\n= render   'grid', tasks_grid: @grid2\n\n.row\n  .col-md-2\n    ID:\n  .col-md-4\n    = grid_filter @grid1, :id_filter\n  .col-md-2\n    ID:\n  .col-md-4\n    = grid_filter @grid2, :id_filter\n.row\n  .col-md-2\n    Title:\n  .col-md-4\n    = grid_filter @grid1, :title_filter\n  .col-md-2\n    Title:\n  .col-md-4\n    = grid_filter @grid2, :title_filter\n.row\n  .col-md-2\n    Description:\n  .col-md-4\n    = grid_filter @grid1, :description_filter\n  .col-md-2\n    Description:\n  .col-md-4\n    = grid_filter @grid2, :description_filter\n.row\n  .col-md-2\n    Archived:\n  .col-md-4\n    = grid_filter @grid1, :archived_filter\n  .col-md-2\n    Archived:\n  .col-md-4\n    = grid_filter @grid2, :archived_filter\n.row\n  .col-md-2\n    Due date:\n  .col-md-4\n    = grid_filter @grid1, :due_date\n  .col-md-2\n    Due date:\n  .col-md-4\n    = grid_filter @grid2, :due_date\n.row\n  .col-md-6\n    .external-buttons-grid1\n      %button.btn.btn-primary.wg-external-submit-button{'data-grid-name' => 'grid'} Submit\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid'} Reset\n  .col-md-6\n    .external-buttons-grid2\n      %button.btn.btn-primary.wg-external-submit-button{'data-grid-name' => 'grid2'} Submit\n      %button.btn.btn-default.wg-external-reset-button{'data-grid-name' => 'grid2'} Reset\n\n%p\n\n.row\n  .col-md-6\n    = render_grid(@grid1)\n  .col-md-6\n    = render_grid(@grid2)\n"
  },
  {
    "path": "spec/support/test_app/app/views/disable_all_filters/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :no) do |g|\n  g.column name: 'ID', attribute: 'id'\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/disable_all_filters/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      To disable all filters at once use\n      %code show_filters: :no\n      as a\n      %code grid\n      parameter .\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/hiding_checkboxes_in_action_column/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.action_column html_check_box: false do |task|\n    task.status.name != 'Assigned'\n  end\n  g.column name: 'ID', attribute: 'id', filter_type: :range\n  g.column name: 'Title', attribute: 'title', negation: true\n  g.column name: 'Archived', attribute: 'archived' do |rec|\n    rec.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Due Date', attribute: 'due_date' do |task|\n    task.due_date if task.due_date\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:db)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/hiding_checkboxes_in_action_column/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      You can hide a certain action checkbox if you add the usual block to\n      %code g.action_column\n      , just like with the\n      %code g.column\n      definition. If the block returns\n      %code nil\n      or\n      %code false\n      no checkbox will be rendered.\n\n= show_code\n\n= dump_filter_parameters_as_hidden_fields(@tasks_grid)\n= form_for '#', method: :get do\n  - if @selected\n    .card.bg-light\n      .card-body\n        Selected tasks:\n        = @selected.to_sentence\n  .row\n    .col-md-12\n      %p\n        %button.btn.btn-default{'type' => 'submit'} Process tasks\n\n      = render   'grid'\n\n      %p\n        %button.btn.btn-default{'type' => 'submit'} Process tasks\n"
  },
  {
    "path": "spec/support/test_app/app/views/integration_with_application_view/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, hide_submit_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title', auto_reload: true\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown, auto_reload: true do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown, auto_reload: true do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived', auto_reload: true do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true do |task|\n    task.created_at.to_fs(:short)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/integration_with_application_view/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Method\n      %code current_page_records\n      sent to the grid object returns a list of all ActiveRecord objects currently displayed on the page.\n    %p\n      Method\n      %code all_pages_records\n      returns a list of all ActiveRecord objects throughout all pages of the current selection.\n      %code all_pages_records\n      causes an additional SQL query to be executed and has to be used with care.\n    %p Both methods can be used after the grid definition only.\n\n= show_code\n\n= render   'grid'\n\n.row\n  .col-md-6\n    .card.bg-light\n      .card-body\n        - current_page_records = @tasks_grid.current_page_records\n        = current_page_records.size\n        records on the current page:\n        = current_page_records.map(&:id).to_sentence\n  .col-md-6\n    .card.bg-light\n      .card-body\n        - all_pages_records = @tasks_grid.all_pages_records\n        = all_pages_records.size\n        records throughout all pages:\n        = all_pages_records.map(&:id).to_sentence\n"
  },
  {
    "path": "spec/support/test_app/app/views/integration_with_forms/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter_type: :range\n  g.column name: 'Title', attribute: 'title', negation: true\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Due Date', attribute: 'due_date' do |task|\n    task.due_date if task.due_date\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:db)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/integration_with_forms/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      In addition to including\n      %a{href: action_column_index_path}a grid into a form\n      it is possible to dump the state of filters into another form as a set of hidden parameters with helper\n      %code dump_filter_parameters_as_hidden_fields(grid_object)\n      \\.\n\n= show_code\n\n= form_tag(integration_with_forms_path, method: :get) do\n  = dump_filter_parameters_as_hidden_fields(@tasks_grid)\n\n  %p= select_tag 'archived', options_for_select([['View active tasks', 0], ['View archived tasks', 1]], @archived ? 1 : 0), class: 'reload-on-change form-control'\n\n= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/joining_tables/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'name',  assoc: :priority\n  g.column name: 'Status', attribute: 'name', assoc: :status\n  g.column name: 'Project Name', attribute: 'name', assoc: :project\n  g.column name: 'Customer', attribute: 'name', assoc: [:project, :customer]\n  g.column name: 'Assigned To', attribute: 'name', assoc: :assigned_users do |task|\n    task.assigned_users.collect{|user| user.name}.to_sentence\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/joining_tables/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Use\n      %code :include\n      in\n      %code :initialize_grid\n      to include associated tables.\n      %code :include\n      can be a single association name, an array of association names.\n      If you need to join tables to joined tabes, use hashes, for example:\n      %code include: [:priority, :status, {project: :customer}]\n    %p\n      To define a column from a joined table, use\n      %code :assoc\n      to specify a the corresponding association.\n      If you need to join a table to a joined table,\n      list associations in an array on the correct order\n      (look at the customer column).\n    %p\n      You can drop a block if you don't need any special markup.\n\n= show_code\n\n= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/layouts/application.html.haml",
    "content": "!!! 5\n%html\n  %head\n    %title WiceGrid Examples\n    = stylesheet_link_tag \"application\", \"data-turbo-track\": \"reload\"\n    = javascript_importmap_tags\n    = favicon_link_tag 'favicon.ico'\n    = csrf_meta_tags\n    -# %meta{name: \"turbo-prefetch\", content: \"false\"}\n\n  %body\n    .container-fluid\n      %header\n        %h1\n          WiceGrid\n          = Gem.loaded_specs['wice_grid'].version.to_s\n          examples\n        .example-navigator\n          %ul.pagination\n            - previous_example_controller, next_example_controller = previous_next_example_urls\n            - if previous_example_controller\n              %li.previous.page-item\n                =link_to \"← Previous\", {controller: previous_example_controller, action: :index}, class: 'page-link'\n            -if next_example_controller\n              %li.next.page-item\n                =link_to \"Next →\", {controller: next_example_controller, action: :index}, class: 'page-link'\n        .clear\n      .row\n        .col-md-3\n          .card.bg-light\n            .card-body\n              %ul.nav-pills\n                - @example_map.each do |title, examples|\n                  %li.navbar= title\n                  - examples.each do |example_controller, name, _|\n                    - if example_controller.to_s == controller_name\n                      - active_klass = ' active'\n\n                      - @example_name = name\n                    - else\n                      - active_klass = nil\n                    %li{class: \"nav-link#{active_klass}\"}\n                      = link_to name, controller: example_controller, action: :index\n        .col-md-9\n          =yield\n      %hr\n\n      %footer\n        &copy; Yury Leikind 2012 - 2015\n        %span.sources\n          %a{href: \"https://github.com/leikind/wice_grid\"} Sources\n\n%a{href: \"https://github.com/leikind/wice_grid\", target: \"_blank\"}\n  = image_tag 'forkme_right_gray.png',\n      style: \"position: absolute; top: 0; right: 0; border: 0;;\",\n      alt: \"Fork me on GitHub\"\n"
  },
  {
    "path": "spec/support/test_app/app/views/localization/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date' do |task|\n    task.due_date.to_fs(:short)\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend\n%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/localization/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      WiceGrid integrated well with I18n.\n      Edit file\n      %code wice_grid.yml\n      to add or change languages.\n\n= show_code\n\n%ul.nav.nav-pills\n  - current = session[:lang].to_s\n  - ['en', 'nl', 'fr', 'is'].each do |lang|\n    - klass = current == lang ? 'active' : nil\n    %li{class: klass}\n      %a{href:url_for(lang: lang)}= lang\n\n= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/many_grids_on_page/_tasks_grid1.html.erb",
    "content": "<%= grid(@tasks_grid1) do |g|\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/many_grids_on_page/_tasks_grid2.html.erb",
    "content": "<%= grid(@tasks_grid2) do |g|\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/many_grids_on_page/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      There can be many grids on one page, but in order to work correctly and independantly\n      from each other they should\n      all have  different names. A grid name is the basis and the scope for all CSS classes and HTTP\n      parameters of the grid. By default the name of a grid is\n      %code grid\n      and in case there is only one grid on a page defining the name is not required unless it\n      clashes with some other form field names.\n      Define the name with the\n      %code :name\n      parameter of the\n      %code initialize_grid\n      method.\n\n= show_code\n\n.row.many-grids-on-page\n  .col-md-6\n    .example1= render   'tasks_grid1'\n  .col-md-6\n    .example2= render   'tasks_grid2'\n"
  },
  {
    "path": "spec/support/test_app/app/views/negation/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title', negation: true\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/negation/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      %code negation: true\n      adds a checkox to a text filter. The checked checkbox is the logical\n      %i NOT\n      \\- it changes the semantics of a text filter to\n      %b not\n      showing all records with a matching substring.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/no_records/_empty_grid.html.haml",
    "content": ".card.bg-light\n  .card-body\n    No records found\n"
  },
  {
    "path": "spec/support/test_app/app/views/no_records/_grid1.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.blank_slate  do\n    content_tag :div, \"No records found\", class: 'well'\n  end\n  g.column name: 'ID', attribute: 'id'\n  g.column name: 'Title', attribute: 'title'\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/no_records/_grid2.html.erb",
    "content": "<%= grid(@tasks_grid2) do |g|\n  g.blank_slate content_tag(:div, \"No records found\", class: 'well')\n  g.column name: 'ID', attribute: 'id'\n  g.column name: 'Title', attribute: 'title'\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/no_records/_grid3.html.erb",
    "content": "<%= grid(@tasks_grid3) do |g|\n  g.blank_slate partial: \"empty_grid\"\n  g.column name: 'ID', attribute: 'id'\n  g.column name: 'Title', attribute: 'title'\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/no_records/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      What if there no records to render in a grid?\n      There are three ways to define what to show in this case:\n      %ul\n        %li\n          %code blank_slate\n          with a block. This looks like a column definition, but the value\n          returned by the block is rendred when there are no records.\n        %li\n          %code blank_slate\n          whithout a block, but with one string argument.\n        %li\n          %code blank_slate\n          with parameter\n          %code partial: \"partial_name\"\n          which defines a partial to render.\n\n= show_code\n\n.example1= render   'grid1'\n.example2= render   'grid2'\n.example3= render   'grid3'\n"
  },
  {
    "path": "spec/support/test_app/app/views/null_values/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'priority_id',\n    custom_filter: [['NOT DEFINED', 'null'], ['DEFINED', 'not null']] + Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/null_values/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Strings\n      %code null\n      and\n      %code not null\n      in\n      %code custom_filter\n      values\n      are treated speacially and result in\n      %code IS NULL\n      and\n      %code IS NOT NULL\n      WHERE-clauses.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/numeric_filters/_grid.html.erb",
    "content": "<%= grid(@tasks_grid) do |g|\n  g.column name: 'ID', attribute: 'id', filter_type: :range\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date'\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/numeric_filters/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      By default the filter for numeric columns is a one input field filter which checks for equality. You can also use a range filter which check if the value is with a range. Use\n      %code filter_type: :range\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/resultset_processings/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, hide_submit_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title', auto_reload: true\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown, auto_reload: true do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown, auto_reload: true do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived', auto_reload: true do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true do |task|\n    task.created_at.to_fs(:short)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/resultset_processings/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      In addition to\n      %a{href: integration_with_application_view_index_path}\n        %code current_page_records\n      and\n      %a{href: integration_with_application_view_index_path}\n        %code current_page_records\n      helpers a callback can be setup in the controller which is executed\n      when a grid page is rendered.\n      Though the results of that processing is rendered on page, normally such callbacks\n      are used for some kind of background processing.\n      Please notice that the callback is executed\n      %em after\n      the controller action and thus all controller instance variables have already been\n      injected into the view, that is why the current example has a definition of\n      %code @one_page_records\n      %em before\n      the callback, so that the object is injected into the view and the callback block\n      has access to the object as well.\n\n      The callback can be setup separately as a block:\n      :plain\n        <pre>\n        @grid.with_paginated_resultset do |records|\n          ...\n        end\n        </pre>\n      or as an argument of\n      %code initialize_grid\n      where the value is the name of the method to be invoked:\n      :plain\n        <pre>\n        @grid = initialize_grid(Task,\n          with_paginated_resultset: :process_records\n        )\n        </pre>\n\n= show_code\n\n= render   'grid'\n\n.row\n  .col-md-12\n    .card.bg-light\n      .card-body\n        = @one_page_records.size\n        records on the current page:\n        = @one_page_records.map(&:id).to_sentence\n"
  },
  {
    "path": "spec/support/test_app/app/views/resultset_processings2/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, hide_submit_button: true) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title', auto_reload: true\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown, auto_reload: true do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown, auto_reload: true  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown, auto_reload: true do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived', auto_reload: true do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at', auto_reload: true do |task|\n    task.created_at.to_fs(:short)\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/resultset_processings2/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      In addition to the\n      %a{href: resultset_processings_path}\n        %code with_paginated_resultset\n        callback\n      there is callback\n      %code with_resultset\n      \\.\n    %p\n      Just like\n      %code with_paginated_resultset\n      it can be defined as a block and as a symbol referring to a method in the controller.\n    %p\n      The difference is that the value submitted to the method or the callback is not a list of\n      all records but an ActiveRelation object which can be used to obtain all records.\n\n      In the example on this page the list of all records is only obtained when button\n      %code Show IDs of records throughout all pages\n      is clicked.\n    %p\n      Normally\n      %code with_resultset\n      is used\n      for some kind of background processing.\n      The results of callback are rendered on page only for the sake of the demonstration.\n\n= show_code\n\n= form_tag(resultset_processings2_index_path, method: :get) do\n  = dump_filter_parameters_as_hidden_fields(@tasks_grid)\n  = hidden_field :process_selected_tasks, 1\n  %button#process.btn.btn-primary{type: 'submit'} Show IDs of records throughout all pages\n\n.example\n  = render 'grid'\n\n  -unless controller.selected_tasks.blank?\n    .row\n      .col-md-12\n        .card.bg-light\n          .card-body\n            = controller.selected_tasks.size\n            records on all pages:\n            = controller.selected_tasks.map(&:id).to_sentence\n"
  },
  {
    "path": "spec/support/test_app/app/views/saved_queries/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added', attribute: 'created_at' do |task|\n    task.created_at.to_fs(:db)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/saved_queries/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      Read\n      %code SAVED_QUERIES_HOWTO.rdoc\n      for details.\n\n= show_code\n\n.row\n  .col-md-6\n    = saved_queries_panel(@tasks_grid, confirm: false)\n\n= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/styling/_grid1.html.erb",
    "content": "<%= grid(@versions_grid1, html: {class: 'my-grid'}, header_tr_html: {class: 'my-header'}) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Project', attribute: 'name', assoc: :project do |version|\n    version.project.name if version.project\n  end\n  g.column name: 'Version name', attribute: 'name', html: {style: 'font-weight: bold; text-align: center'}\n  g.column name: 'Status', attribute: 'status', custom_filter: {'Development' => 'development', 'Testing' => 'testing', 'Production' => 'production'}\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/styling/_grid2.html.erb",
    "content": "<%= grid(@versions_grid2) do |g|\n  g.row_attributes do |version|\n    if version.status == 'production'\n      {style: 'background-color: rgb(255, 255, 204);'}\n    end\n  end\n  g.column name: 'ID', attribute: 'id', filter: false do |version|\n    if version.id.to_s.index('9')\n      [version.id, {style: 'background-color: rgb(255, 105, 104);'}]\n    else\n      version.id\n    end\n  end\n  g.column name: 'Project', attribute: 'name', assoc: :project, class: 'special-column' do |version|\n    if version.project\n      if version.project.name == 'Divine Firmware'\n        [version.project.name , {style: 'background-color: rgb(255, 105, 104);', class: 'some-special-class'}]\n      else\n        version.project.name\n      end\n    end\n  end\n  g.column name: 'Version name', attribute: 'name'\n  g.column name: 'Status', attribute: 'status', custom_filter: {'Development' => 'development', 'Testing' => 'testing', 'Production' => 'production'}\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/styling/index.html.haml",
    "content": ":css\n  table.my-grid {\n    border: 1px solid red;\n  }\n  table.my-grid tr.my-header {\n    background-color: #ebebeb;\n  }\n\n.card.bg-light\n  .card-body\n    %h2= current_page_title\n    %ul\n      %li\n        %code :html\n        in the\n        %code grid\n        helper defines html arguments for the\n        %code table\n        tag.\n      %li\n        %code :header_tr_html\n        in the\n        %code grid\n        helper defines html attributes for the header rows with column names and filters.\n      %li\n        %code :html\n        in the\n        %code column\n        helper defines html attributes for the\n        %code td\n        tag.\n      %li\n        %code g.row_attributes do |record| ... end\n        is similar to a\n        %code column\n        definition, but returns a hash of html attributes to be added to each\n        %code tr.\n        Because the block is evaluated for each record, just like\n        %column\n        , the returned value can be calculated dynamically depending on the record.\n      %li\n        Each\n        %code column\n        block can return a 2-value array, the first value of which is the content of the cell, and\n        the second is a hash of html attributes for the\n        %code td\n        tag.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid1'\n.row\n  .col-md-12\n    = render   'grid2'\n"
  },
  {
    "path": "spec/support/test_app/app/views/tasks/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :always) do |g|\n  g.column name: 'Project Name', attribute: 'project_id', custom_filter: Project.to_dropdown do |task|\n    task.project.name if task.project\n  end\n  g.column name: 'Title', attribute: 'title'\n  # returns an array of 2-element arrays\n  g.column name: 'Priority', attribute: 'priority_id', custom_filter: Priority.to_dropdown do |task|\n    task.priority.name if task.priority\n  end\n  g.column name: 'Status', attribute: 'status_id', custom_filter: Status.to_dropdown  do |task|\n    task.status.name if task.status\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/tasks/index.html.haml",
    "content": "= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/two_associations/_grid.html.erb",
    "content": "<%= grid(@projects_grid, show_filters: :always) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Project Name', attribute: 'name'\n  g.column name: 'Customer company', attribute: 'name', assoc: :customer\n  g.column name: 'Supplier company', attribute: 'name', assoc: :supplier, table_alias: 'suppliers_projects'\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/two_associations/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      When two associations referring to the same model are joined, ActiveRecord\n      uses a table alias for one of these joins. To make it work with WiceGrid, find\n      the alias in the logs and specify it in a column definition with the help of\n\n      %code :table_alias\n      \\.\n\n= show_code\n\n= render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/upper_pagination_panel/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, upper_pagination_panel: true) do |g|\n  g.column name: 'ID' do |task|\n    task.id\n  end\n  g.column name: 'Title'  do |task|\n    task.title\n  end\n  g.column  name: 'Description' do |task|\n    task.description\n  end\n  g.column  name: 'Archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Added' do |task|\n    task.created_at.to_fs(:short)\n  end\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/upper_pagination_panel/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      The\n      %code upper_pagination_panel\n      parameter for the\n      %code grid\n      helper forces the pagination panel to appear at at top of the grid\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/app/views/when_filtered/_grid.html.erb",
    "content": "<%= grid(@tasks_grid, show_filters: :when_filtered) do |g|\n  g.column name: 'ID', attribute: 'id', filter: false\n  g.column name: 'Title', attribute: 'title'\n  g.column  name: 'Description', attribute: 'description'\n  g.column  name: 'Archived', attribute: 'archived' do |task|\n    task.archived? ? 'Yes' : 'No'\n  end\n  g.column name: 'Due Date', attribute: 'due_date', filter: false\n  g.column   do |task|\n    link_to('Edit', edit_task_path(task))\n  end\nend -%>\n"
  },
  {
    "path": "spec/support/test_app/app/views/when_filtered/index.html.haml",
    "content": ".card.bg-light\n  .card-body\n    %h2= current_page_title\n    %p\n      %code show_filters: :when_filtered\n      in\n      %code grid\n      hides the filter panel but the user can make it visible by clicking on the \"Show filter\" panel.\n    %p\n      When any of the filters is active the filter panel is shown anyway.\n\n= show_code\n\n.row\n  .col-md-12\n    = render   'grid'\n"
  },
  {
    "path": "spec/support/test_app/bin/dartsass",
    "content": "#!/usr/bin/env ruby\n# frozen_string_literal: true\n\n#\n# This file was generated by Bundler.\n#\n# The application 'dartsass' is installed as part of a gem, and\n# this file is here to facilitate running it.\n#\n\nENV[\"BUNDLE_GEMFILE\"] ||= File.expand_path(\"../Gemfile\", __dir__)\n\nbundle_binstub = File.expand_path(\"bundle\", __dir__)\n\nif File.file?(bundle_binstub)\n  if File.read(bundle_binstub, 300).include?(\"This file was generated by Bundler\")\n    load(bundle_binstub)\n  else\n    abort(\"Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.\nReplace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.\")\n  end\nend\n\nrequire \"rubygems\"\nrequire \"bundler/setup\"\n\nload Gem.bin_path(\"dartsass-rails\", \"dartsass\")\n"
  },
  {
    "path": "spec/support/test_app/bin/importmap",
    "content": "#!/usr/bin/env ruby\n\nrequire_relative \"../config/application\"\nrequire \"importmap/commands\"\n"
  },
  {
    "path": "spec/support/test_app/bin/rails",
    "content": "#!/usr/bin/env ruby\nAPP_PATH = File.expand_path('../../config/application', __FILE__)\nrequire_relative '../config/boot'\nrequire 'rails/commands'\n"
  },
  {
    "path": "spec/support/test_app/bin/rake",
    "content": "#!/usr/bin/env ruby\nrequire_relative '../config/boot'\nrequire 'rake'\nRake.application.run\n"
  },
  {
    "path": "spec/support/test_app/config/application.rb",
    "content": "# encoding: utf-8\nrequire File.expand_path('../boot', __FILE__)\n\n# We don't have our own Gemfile, make sure these things are loaded.\nrequire 'rails/all'\nrequire 'sprockets/railtie'\nrequire 'haml'\nrequire 'coderay'\nrequire 'bootstrap'\nrequire 'dartsass-rails'\nrequire 'font-awesome-sass'\nrequire 'importmap-rails'\nrequire 'jquery-rails'\nrequire 'jquery-ui-rails'\nrequire 'jquery-ui-themes'\nrequire \"stimulus-rails\"\nrequire 'turbo-rails'\n\nrequire_relative '../../../../lib/wice_grid'\n\nmodule Examples\n  class TestApp < Rails::Application\n    config.load_defaults 7.1\n\n    # Settings in config/environments/* take precedence over those specified here.\n    # Application configuration should go into files in config/initializers\n    # -- all .rb files in that directory are automatically loaded.\n\n    # Custom directories with classes and modules you want to be autoloadable.\n    # config.autoload_paths += %W(#{config.root}/extras)\n\n    # Only load the plugins named here, in the order given (default is alphabetical).\n    # :all can be used as a placeholder for all plugins not explicitly named.\n    # config.plugins = [ :exception_notification, :ssl_requirement, :all ]\n\n    # Activate observers that should always be running.\n    # config.active_record.observers = :cacher, :garbage_collector, :forum_observer\n\n    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.\n    # Run \"rake -D time\" for a list of tasks for finding time zone names. Default is UTC.\n    # config.time_zone = 'Central Time (US & Canada)'\n\n    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.\n    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]\n    # config.i18n.default_locale = :de\n\n    # Configure the default encoding used in templates for Ruby 1.9.\n    config.encoding = 'utf-8'\n\n    # Configure sensitive parameters which will be filtered from the log file.\n    config.filter_parameters += [:password]\n\n    # Use SQL instead of Active Record's schema dumper when creating the database.\n    # This is necessary if your schema can't be completely dumped by the schema dumper,\n    # like if you have constraints or database-specific column types\n    # config.active_record.schema_format = :sql\n\n    # Enforce whitelist mode for mass assignment.\n    # This will create an empty whitelist of attributes available for mass-assignment for all models\n    # in your app. As such, your models will need to explicitly whitelist or blacklist accessible\n    # parameters by using an attr_accessible or attr_protected declaration.\n    # config.active_record.whitelist_attributes = true\n\n    # Enable the asset pipeline\n    config.assets.enabled = true\n\n    # Version of your assets, change this if you want to expire all your assets\n    config.assets.version = '1.0'\n\n    config.assets.initialize_on_precompile = false\n    I18n.enforce_available_locales = false\n\n    # Rails 5.2+\n    config.active_record.sqlite3.represent_boolean_as_integer = true if config.active_record.sqlite3\n\n    config.active_record.default_column_serializer = YAML\n    config.active_record.yaml_column_permitted_classes = [\n      ActionController::Parameters,\n      ActiveSupport::HashWithIndifferentAccess,\n    ]\n\n    config.dartsass.build_options = '--style=expanded --embed-source-map'\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/config/boot.rb",
    "content": "# encoding: utf-8\nrequire 'rubygems'\n\n# Set up gems listed in the Gemfile.\nENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)\n\nrequire 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])\n"
  },
  {
    "path": "spec/support/test_app/config/database.travis.yml",
    "content": "mysql: &mysql\n  adapter: mysql2\n  username: root\n  password:\n  database: wice_grid_test\n\npostgres: &postgres\n  adapter: postgresql\n  username: postgres\n  password:\n  database: wice_grid_test\n  min_messages: ERROR\n\ndefaults: &defaults\n  pool: 5\n  timeout: 5000\n  host: localhost\n  <<: *<%= ENV['DB'] || 'postgres' %>\n\ndevelopment:\n  <<: *defaults\n\ntest:\n  <<: *defaults\n\nproduction:\n  <<: *defaults\n"
  },
  {
    "path": "spec/support/test_app/config/database.yml",
    "content": "defaults: &defaults\n  adapter: sqlite3\n  encoding: unicode\n  pool: 5\n\ndevelopment:\n  <<: *defaults\n  database: db/development.sqlite3\n\ntest:\n  <<: *defaults\n  database: db/test.sqlite3\n\nproduction:\n  <<: *defaults\n  database: db/production.sqlite3\n"
  },
  {
    "path": "spec/support/test_app/config/database.yml.mysql",
    "content": "defaults: &defaults\n  adapter: mysql2\n  encoding: utf8\n  pool: 5\n  username: root\n  password:\n  socket: /tmp/mysql.sock\n\ndevelopment:\n  <<: *defaults\n  database: wice_grid_testbed_development\n\ntest:\n  <<: *defaults\n  database: wice_grid_testbed_test\n\nproduction:\n  <<: *defaults\n  database: wice_grid_testbed_production\n"
  },
  {
    "path": "spec/support/test_app/config/database.yml.postgresql",
    "content": "defaults: &defaults\n  adapter: postgresql\n  encoding: utf8\n  pool: 5\n  username: postgres\n  password:\n\ndevelopment:\n  <<: *defaults\n  database: wice_grid_testbed_development\n\ntest:\n  <<: *defaults\n  database: wice_grid_testbed_test\n\nproduction:\n  <<: *defaults\n  database: wice_grid_testbed_production\n"
  },
  {
    "path": "spec/support/test_app/config/environment.rb",
    "content": "# encoding: utf-8\n# Load the rails application\nrequire_relative 'application'\n\n# Initialize the rails application\nRails.application.initialize!\n\n# fix for bootstrap-sass that uses depricated Regexp\nindices = []\nstrings = []\nprecompile = Rails.application.config.assets.precompile\nprecompile.each_with_index do |string_or_regexp, index|\n  if string_or_regexp.is_a? Regexp\n    indices << index\n    match = string_or_regexp.source.match /(.*)\\\\\\.\\(\\?:(.*?)\\??\\)\\$$/\n    match[2].split('|').each do |ext|\n      strings << \"#{match[1]}.#{ext}\"\n    end\n  end\nend\nindices.reverse.each do |index|\n  precompile.delete_at index\nend\nstrings.each do |string|\n  precompile << string\nend\n"
  },
  {
    "path": "spec/support/test_app/config/environments/development.rb",
    "content": "# encoding: utf-8\nExamples::TestApp.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 on\n  # every request. 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.cache_classes = false\n\n  # Show full error reports and disable caching\n  config.consider_all_requests_local       = true\n  config.action_controller.perform_caching = false\n\n  # Don't care if the mailer can't send\n  config.action_mailer.raise_delivery_errors = false\n\n  # Print deprecation notices to the Rails logger\n  config.active_support.deprecation = :log\n\n  # Only use best-standards-support built into browsers\n  config.action_dispatch.best_standards_support = :builtin\n\n  config.action_dispatch.show_exceptions = :rescuable\n\n  # Do not compress assets\n  config.assets.compress = false\n\n  # Expands the lines which load the assets\n  config.assets.debug = true\n\n  config.public_file_server.enabled = false\n\n  config.eager_load = false\nend\n"
  },
  {
    "path": "spec/support/test_app/config/environments/production.rb",
    "content": "# encoding: utf-8\nExamples::TestApp.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.cache_classes = 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  # Disable Rails's static asset server (Apache or nginx will already do this)\n  config.public_file_server.enabled = true\n\n  # Compress JavaScripts and CSS\n  config.assets.compress = true\n\n  # Don't fallback to assets pipeline if a precompiled asset is missed\n  config.assets.compile = false\n\n  # Generate digests for assets URLs\n  config.assets.digest = true\n\n  # Defaults to Rails.root.join(\"public/assets\")\n  # config.assets.manifest = YOUR_PATH\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  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.\n  # config.force_ssl = true\n\n  # See everything in the log (default is :info)\n  config.log_level = :info\n\n  # Prepend all log lines with the following tags\n  # config.log_tags = [ :subdomain, :uuid ]\n\n  # Use a different logger for distributed setups\n  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)\n\n  # Use a different cache store in production\n  # config.cache_store = :mem_cache_store\n\n  # Enable serving of images, stylesheets, and JavaScripts from an asset server\n  # config.action_controller.asset_host = \"http://assets.example.com\"\n\n  # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)\n  # config.assets.precompile += %w( search.js )\n\n  # Disable delivery errors, bad email addresses will be ignored\n  # config.action_mailer.raise_delivery_errors = false\n\n  # Enable threaded mode\n  # config.threadsafe!\n\n  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to\n  # the I18n.default_locale when a translation can not be found)\n  config.i18n.fallbacks = true\n\n  # Send deprecation notices to registered listeners\n  config.active_support.deprecation = :notify\n\n  config.eager_load = true\nend\n"
  },
  {
    "path": "spec/support/test_app/config/environments/test.rb",
    "content": "# encoding: utf-8\nExamples::TestApp.configure do\n  # Settings specified here will take precedence over those in config/application.rb\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  config.cache_classes = true\n\n  # Configure static asset server for tests with Cache-Control for performance\n  config.public_file_server.enabled = true\n  config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }\n\n  # Show full error reports and disable caching\n  config.consider_all_requests_local       = true\n  config.action_controller.perform_caching = false\n\n  # Raise exceptions instead of rendering exception templates\n  config.action_dispatch.show_exceptions = true\n\n  # Disable request forgery protection in test environment\n  config.action_controller.allow_forgery_protection    = 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  config.eager_load = false\nend\n"
  },
  {
    "path": "spec/support/test_app/config/importmap.rb",
    "content": "# Pin npm packages by running ./bin/importmap\n\npin \"application\"\npin \"@hotwired/turbo-rails\", to: \"turbo.min.js\"\npin \"@hotwired/stimulus\", to: \"@hotwired--stimulus.js\" # @3.2.2\npin \"@hotwired/stimulus-loading\", to: \"stimulus-loading.js\"\npin_all_from \"app/javascript/controllers\", under: \"controllers\"\npin \"@stimulus-components/rails-nested-form\", to: \"@stimulus-components--rails-nested-form.js\" # @5.0.0\npin \"jquery\", to: \"jquery3.min.js\", preload: true\npin \"jquery-ui\", to: \"jquery-ui.js\", preload: true\npin \"wice_grid\", to: \"wice_grid.js\", preload: true\npin \"bootstrap\", to: \"bootstrap.min.js\", preload: true\npin \"@popperjs/core\", to: \"popper.js\", preload: true\n\npin \"jquery.ui.datepicker.locales\"\npin \"reload_on_change\"\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/assets.rb",
    "content": "Rails.application.config.assets.paths << Rails.root.join('app/javascript').to_s\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/backtrace_silencers.rb",
    "content": "# encoding: utf-8\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 wish to see in your backtraces.\n# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }\n\n# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.\n# Rails.backtrace_cleaner.remove_silencers!\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/inflections.rb",
    "content": "# encoding: utf-8\n# Be sure to restart your server when you modify this file.\n\n# Add new inflection rules using the following format\n# (all these examples are active by default):\n# ActiveSupport::Inflector.inflections 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 do |inflect|\n#   inflect.acronym 'RESTful'\n# end\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/mime_types.rb",
    "content": "# encoding: utf-8\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# Mime::Type.register_alias \"text/html\", :iphone\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/secret_token.rb",
    "content": "# encoding: utf-8\n# Be sure to restart your server when you modify this file.\n\n# Your secret key for verifying the integrity of signed cookies.\n# If you change this key, all old signed cookies will become invalid!\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.\nif Examples::TestApp.config.respond_to?(:secret_key_base)\n  Examples::TestApp.config.secret_key_base = '41aebe1604463465ca9a3d0c79244d48b668ca1db17b75fba958b31d250d42f2771eecac77be54fe2c6a919a4c40de4e5348857b77c4593987fcb890fcce8827'\nelse\n  Examples::TestApp.config.secret_token = '41aebe1604463465ca9a3d0c79244d48b668ca1db17b75fba958b31d250d42f2771eecac77be54fe2c6a919a4c40de4e5348857b77c4593987fcb890fcce8827'\nend\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/session_store.rb",
    "content": "# encoding: utf-8\n# Be sure to restart your server when you modify this file.\n\nExamples::TestApp.config.session_store :cookie_store, key: '_examples_session'\n\n# Use the database for sessions instead of the cookie-based default,\n# which shouldn't be used to store highly confidential information\n# (create the session table with \"rails generate session_migration\")\n# Examples::Application.config.session_store :active_record_store\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/wice_grid_config.rb",
    "content": "# encoding: utf-8\nif defined?(Wice::Defaults)\n\n  # Default number of rows to show per page.\n  Wice::Defaults::PER_PAGE = 20\n\n  # Default order direction\n  Wice::Defaults::ORDER_DIRECTION = 'asc'\n\n  # Default name for a grid. A grid name is the basis for a lot of\n  # names including parameter names, DOM IDs, etc\n  # The shorter the name is the shorter the request URI will be.\n  Wice::Defaults::GRID_NAME = 'grid'\n\n  # If REUSE_LAST_COLUMN_FOR_FILTER_ICONS is true and the last column doesn't have any filter and column name, it will be used\n  # for filter related icons (filter icon, reset icon, show/hide icon), otherwise an additional table column is added.\n  Wice::Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS = true\n\n  # The label of the first option of a custom dropdown list meaning 'All items'\n  Wice::Defaults::CUSTOM_FILTER_ALL_LABEL = '--'\n\n  # A list of classes for the table tag of the grid\n  Wice::Defaults::DEFAULT_TABLE_CLASSES = ['table', 'table-bordered', 'table-striped']\n\n  # Allow switching between a single and multiple selection modes in custom filters (dropdown boxes)\n  Wice::Defaults::ALLOW_MULTIPLE_SELECTION = true\n\n  # Show the upper pagination panel by default or not\n  Wice::Defaults::SHOW_UPPER_PAGINATION_PANEL = false\n\n  # Disabling CSV export by default\n  Wice::Defaults::ENABLE_EXPORT_TO_CSV = false\n\n  # Default CSV field separator\n  Wice::Defaults::CSV_FIELD_SEPARATOR = ','\n\n  # Default CSV encoding (p.e. 'CP1252:UTF-8' to make Microsoft Excel(tm) happy)\n  Wice::Defaults::CSV_ENCODING = nil\n\n\n  # The strategy when to show the filter.\n  # * <tt>:when_filtered</tt> - when the table is the result of filtering\n  # * <tt>:always</tt>        - show the filter always\n  # * <tt>:no</tt>            - never show the filter\n  Wice::Defaults::SHOW_FILTER = :always\n\n  # A boolean value specifying if a change in a filter triggers reloading of the grid.\n  Wice::Defaults::AUTO_RELOAD = false\n\n  # SQL operator used for matching strings in string filters.\n  Wice::Defaults::STRING_MATCHING_OPERATOR = 'LIKE'\n  # STRING_MATCHING_OPERATOR = 'ILIKE' # Use this for Postgresql case-insensitive matching.\n\n  # Defining one string matching operator globally for the whole application turns is not enough\n  # when you connect to two databases one of which is MySQL and the other is Postgresql.\n  # If the key for an adapter is missing it will fall back to Wice::Defaults::STRING_MATCHING_OPERATOR\n  Wice::Defaults::STRING_MATCHING_OPERATORS = {\n    'ActiveRecord::ConnectionAdapters::MysqlAdapter' => 'LIKE',\n    'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter' => 'ILIKE'\n  }\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                              Advanced Filters                             #\n\n  # Switch of the negation checkbox in all text filters\n  Wice::Defaults::NEGATION_IN_STRING_FILTERS = false\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                              Showing All Records                          #\n\n  # Enable or disable showing all records (non-paginated table)\n  Wice::Defaults::ALLOW_SHOWING_ALL_RECORDS = true\n\n  # If number of all queries is more than this value, the user will be given a warning message\n  Wice::Defaults::START_SHOWING_WARNING_FROM = 100\n\n  # Hide the \"show all\" link if the number of all records is more than...\n  # Force-resets back to pagination starting from this value.\n  # Set to nil to always show it\n  Wice::Defaults::SHOW_ALL_ALLOWED_UP_TO = nil\n\n  #\n  # set to nil to skip the check\n  Wice::Defaults::SWITCH_BACK_TO_PAGINATION_FROM = nil\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #                               Saving Queries                              #\n\n  # ActiveRecord model to store queries. Read the documentation for details\n  # QUERY_STORE_MODEL = 'WiceGridSerializedQuery'\n  Wice::Defaults::QUERY_STORE_MODEL = 'WiceGridSerializedQuery'\n\n  # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n  #            Here go settings related to the date/datetime filters          #\n\n  # Default column filters\n  # Possible values:\n  # * <tt>:jquery_datepicker</tt> - Jquery datepicker (works for datetime, too)\n  # * <tt>:bootstrap_datepicker</tt> - Bootstrap datepicker (works for datetime, too)\n  # * <tt>:rails_date_helper</tt> - standard Rails date helper\n  # * <tt>:rails_datetime_helper</tt> - standard Rails datetime helper\n\n  Wice::Defaults::DEFAULT_FILTER_FOR_DATE     = :jquery_datepicker\n  Wice::Defaults::DEFAULT_FILTER_FOR_DATETIME = :jquery_datepicker\n\n  # Format of the datetime displayed.\n  # If you change the format, make sure to check if +DATETIME_PARSER+ can still parse this string.\n  Wice::Defaults::DATETIME_FORMAT = '%Y-%m-%d %H:%M'\n\n  # Format of the date displayed.\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT     =  '%Y-%m-%d'\n\n  # Format of the date displayed in jQuery's Datepicker\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT_JQUERY     =  'yy-mm-dd'\n\n  # Format of the date displayed in Bootstrap's Datepicker\n  # If you change the format, make sure to check if +DATE_PARSER+ can still parse this string.\n  Wice::Defaults::DATE_FORMAT_BOOTSTRAP     =  'yyyy-mm-dd'\n\n  # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the\n  # format defined by +DATETIME_FORMAT+ and must generate a DateTime object.\n  # In many cases <tt>Time.zone.parse</tt> is enough, for instance,  <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code\n  # and modify it if needed.\n  Wice::Defaults::DATETIME_PARSER = lambda do|datetime_string|\n    if datetime_string.blank?\n      nil\n    elsif Time.zone\n      Time.zone.parse(datetime_string)\n    else\n      Time.parse(datetime_string)\n    end\n  end\n\n  # The range of years to display in jQuery Datepicker.\n  # It can always be changed dynamically with the following javascript:\n  #  $( \".hasDatepicker\" ).datepicker( \"option\", \"yearRange\", \"2000:2042\" );\n  Wice::Defaults::DATEPICKER_YEAR_RANGE = (from = Date.current.year - 10).to_s + ':' + (from + 15).to_s\n\n  # With Calendar helpers enabled the parameter sent is the string displayed. This lambda will be given a date string in the\n  # format defined by +DATETIME+ and must generate a Date object.\n  # In many cases <tt>Date.parse</tt> is enough, for instance,  <tt>%Y-%m-%d</tt>. If you change the format, make sure to check this code\n  # and modify it if needed.\n  Wice::Defaults::DATE_PARSER = lambda do|date_string|\n    if date_string.blank?\n      nil\n    else\n      Date.parse(date_string)\n    end\n  end\n\n  # The name of the page method (should correspond to Kaminari.config.page_method_name)\n  Wice::Defaults::PAGE_METHOD_NAME = :page\n\n  # The name of the theme to use for the pagination with Kaminari\n  Wice::Defaults::PAGINATION_THEME = :wice_grid\n\n  # by default Wice-Grid always use unscoped,set to true to force use of default_scope by default instead\n  Wice::Defaults::USE_DEFAULT_SCOPE = false\n\n\nend\n"
  },
  {
    "path": "spec/support/test_app/config/initializers/wrap_parameters.rb",
    "content": "# encoding: utf-8\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 to an empty array.\nActiveSupport.on_load(:action_controller) do\n  wrap_parameters format: [:json]\nend\n\n# Disable root element in JSON by default.\nActiveSupport.on_load(:active_record) do\n  self.include_root_in_json = false\nend\n"
  },
  {
    "path": "spec/support/test_app/config/locales/en.yml",
    "content": "# Sample localization file for English. Add more files in this directory for other locales.\n# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.\n\nen:\n  hello: \"Hello world\"\n"
  },
  {
    "path": "spec/support/test_app/config/locales/wice_grid.yml",
    "content": "en:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Show filter\n    hide_filter_tooltip: Hide filter\n    csv_export_tooltip: Export to CSV\n    filter_tooltip: Filter\n    reset_filter_tooltip: Reset\n    boolean_filter_true_label: \"yes\"\n    boolean_filter_false_label: \"no\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: From\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: To\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Exclude\n    # link to switch to show all records\n    show_all_records_label: show all\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Show all records\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Are you sure you want to display all records?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: back to paginated view\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Switch back to the view with pages\n    # Title of the date string.\n    date_string_tooltip: Click to delete\n    saved_query_panel_title: Saved Queries\n    save_query_button_label: Save the state of filters\n    saved_query_deletion_confirmation: Are you sure?\n    saved_query_deletion_link_title: Delete query\n    saved_query_link_title: Load query\n    validates_uniqueness_error: A query with this name already exists\n    validates_presence_error: Please submit the name of the custom query\n    query_deleted_message: Saved query deleted.\n    query_saved_message: Query saved.\n    select_all: Select all\n    deselect_all: Remove selection\n    expand: Expand\n    collapse: Collapse\n\n\nis:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Sýna síumöguleika\n    hide_filter_tooltip: Fela síumoguleika\n    csv_export_tooltip: Flytja út CSV\n    filter_tooltip: Sía\n    reset_filter_tooltip: Hreinsa\n    boolean_filter_true_label: Já\n    boolean_filter_false_label: Nei\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Frá\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Til\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Undanskilja\n    # link to switch to show all records\n    show_all_records_label: Sýna allt\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Sýna öll gögn\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Ertu viss um að þú viljir láta sýna öll gögn?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Aftur til síðuhorfs\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Aftur til síðuhorfs\n    # Title of the date string.\n    date_string_tooltip: Smella á til að eyða\n    saved_query_panel_title: Vistaðar leitarskipanir\n    save_query_button_label: Vista síuval\n    saved_query_deletion_confirmation: Ertu viss?\n    saved_query_deletion_link_title:  Eyða leitarskipun\n    saved_query_link_title: Hlaða leitarskipun\n    validates_uniqueness_error: Leitarskipun með þessu nafni er þegar til\n    validates_presence_error: Vinsamlegast gefið heiti fyrir leitarskipun\n    query_deleted_message: Vistaðri leitarskipun hefur verið eytt\n    query_saved_message: leitaskipun hefur verið vistuð\n    # To do: translate\n    select_all: Select all\n    deselect_all: Remove selection\n\nnl:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Filter tonen\n    hide_filter_tooltip: Filter verbergen\n    csv_export_tooltip: Als CSV exporteren\n    filter_tooltip: Filter\n    reset_filter_tooltip: Terugstellen\n    boolean_filter_true_label: ja\n    boolean_filter_false_label: neen\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Vanaf\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Tot\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Uitsluiten\n    # link to switch to show all records\n    show_all_records_label: Alle rijen tonen\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Alle rijen tonen\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Bent u zeker dat u alle rijen wilt tonen?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Terug naar pagina's\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Terug naar pagina's\n    # Title of the date string.\n    date_string_tooltip: Klik om te verwijderen\n    saved_query_panel_title: Opgeslagen query's\n    save_query_button_label: Query opslaan\n    saved_query_deletion_confirmation: Bent u zeker?\n    saved_query_deletion_link_title: Query verwijderen\n    saved_query_link_title: Query laden\n    validates_uniqueness_error: Deze query bestaat reeds\n    validates_presence_error: Gelieve de naam van de query in te vullen\n    query_deleted_message: Opgeslagen query verwijderd.\n    query_saved_message: Query opgeslagen\n    select_all: Selecteer alle rijen\n    deselect_all: Deselecteer alle rijen\n\nfr:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Afficher le filtre\n    hide_filter_tooltip: Cacher le filtrer\n    csv_export_tooltip: Exporter en CSV\n    filter_tooltip: Filtrer\n    reset_filter_tooltip: Effacer\n    boolean_filter_true_label: oui\n    boolean_filter_false_label: non\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: De\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: à\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Exclure\n    # link to switch to show all records\n    show_all_records_label: Voir tous\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Voir tous les enregistrements\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Etes-vous certain de vouloir afficher tous les enregistrements?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Retour à la vue paginée\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Retour à la vue par pages\n    # Title of the date string.\n    date_string_tooltip: Cliquez pour effacer\n    saved_query_panel_title: Requêtes sauvées\n    save_query_button_label: Sauver l'état des filtres\n    saved_query_deletion_confirmation: Etes vous sûr?\n    saved_query_deletion_link_title: Effacer la requête\n    saved_query_link_title: Charger la requête\n    validates_uniqueness_error: Un requête existante porte déjà ce nom\n    validates_presence_error: Veuillez indiquer le nom de la requête que vous souhaitez sauver\n    query_deleted_message: La requête a été effacée.\n    query_saved_message: La requête a été sauvée.\n    select_all: Sélectionner tout\n    deselect_all: Désélectionner tout\n\nru:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Показать фильтр\n    hide_filter_tooltip: Спрятать фильтр\n    csv_export_tooltip: Экспорт в CSV\n    filter_tooltip: Фильтровать\n    reset_filter_tooltip: Сброс\n    boolean_filter_true_label: да\n    boolean_filter_false_label: нет\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: С\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: До\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Исключая строки\n    # link to switch to show all records\n    show_all_records_label: показать все\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Показать все записи\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Вы уверены в том, что хотите отобразить все записи?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Назад к постраничному выводу\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Назад к постраничному выводу\n    # Title of the date string.\n    date_string_tooltip: Кликните, чтобы удалить дату\n    saved_query_panel_title: Сохранённые фильтры\n    save_query_button_label: Сохранить фильтр\n    saved_query_deletion_confirmation: Вы уверены?\n    saved_query_deletion_link_title: Удалить сохранённый фильтр\n    saved_query_link_title: Загрузить сохранённый фильтр\n    validates_uniqueness_error: Сохранённый фильтр с таким именем уже существует\n    validates_presence_error: Пожалуйста введите имя сохраняемого фильтра\n    query_deleted_message: Сохранённый фильтр удалён.\n    query_saved_message: Сохранённый фильтр сохранён.\n    select_all: Отметить все\n    deselect_all: Убрать выделение\n\n\npt:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Mostrar o filtro\n    hide_filter_tooltip: Esconder o filtro\n    csv_export_tooltip: Exportar em CSV\n    filter_tooltip: Filtrar\n    reset_filter_tooltip: Reinicializar\n    boolean_filter_true_label: sim\n    boolean_filter_false_label: não\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: De\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: a\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Excluir\n    # link to switch to show all records\n    show_all_records_label: Ver todos\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Ver todos os registos\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Tem a certeza de querer visualizar todos os registos?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Retorno à vista paginada\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Retorno à vista por página\n    # Title of the date string.\n    date_string_tooltip: Cliquar para apagar\n    saved_query_panel_title: Queries gravadas\n    save_query_button_label: Gravar o estado dos filtros\n    saved_query_deletion_confirmation: Tem a certeza?\n    saved_query_deletion_link_title: Apagar a query\n    saved_query_link_title: Caregar a query\n    validates_uniqueness_error: Já existe uma query com o mesmo nome\n    validates_presence_error: Queira indicar o nome da query que deseja gravar\n    query_deleted_message: A query foi apagada.\n    query_saved_message: A query foi gravada.\n    select_all: Selecionar todos\n    deselect_all: Remover seleção\n\npt-BR:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Mostrar o filtro\n    hide_filter_tooltip: Esconder o filtro\n    csv_export_tooltip: Exportar em CSV\n    filter_tooltip: Filtrar\n    reset_filter_tooltip: Reinicializar\n    boolean_filter_true_label: sim\n    boolean_filter_false_label: não\n    previous_label: «\n    next_label: »\n    date_selector_tooltip_from: De\n    date_selector_tooltip_to: a\n    negation_checkbox_title: Excluir\n    show_all_records_label: Ver todos\n    show_all_records_tooltip: Ver todos os registos\n    all_queries_warning: Tem certeza que gostaria de visualizar todos os registos?\n    switch_back_to_paginated_mode_label: Voltar à lista paginada\n    switch_back_to_paginated_mode_tooltip: Voltar à lista por página\n    date_string_tooltip: Clique para apagar\n    saved_query_panel_title: Filtros gravados\n    save_query_button_label: Gravar o estado dos filtros\n    saved_query_deletion_confirmation: Tem certeza?\n    saved_query_deletion_link_title: Apagar o filtro\n    saved_query_link_title: Carregar o filtro\n    validates_uniqueness_error: Já existe um filtro com o mesmo nome\n    validates_presence_error: Indique o nome do filtro que deseja gravar\n    query_deleted_message: O filtro foi apagado.\n    query_saved_message: O filtro foi gravado.\n    select_all: Selecionar todos\n    deselect_all: Remover seleção\n\n\nsk:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Zobraziť filter\n    hide_filter_tooltip: Skryť filter\n    csv_export_tooltip: Exportovať do CSV\n    filter_tooltip: Filter\n    reset_filter_tooltip: Zrušiť filtre\n    boolean_filter_true_label: \"áno\"\n    boolean_filter_false_label: \"nie\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Dátum od\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Dátum do\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Inverzný výber\n    # link to switch to show all records\n    show_all_records_label: Zobraziť všetko\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Zobrazí všetky záznamy v databáze\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Určite chceš zobraziť všetky záznamy v databáze?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: späť na stránkové zobrazenie\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Prepnúť do stránkového zobrazenia\n    # Title of the date string.\n    date_string_tooltip: Kliknutím zmažeš\n    saved_query_panel_title: Uložené filtre/výsledky\n    save_query_button_label: Uložiť stav filtrov\n    saved_query_deletion_confirmation: Si si istý?\n    saved_query_deletion_link_title: Vymazať uložený filter\n    saved_query_link_title: Nahrať uložený filter\n    validates_uniqueness_error: Filter s uvedeným názvom už existuje.\n    validates_presence_error: Prosím zadaj názov uloženého filtra.\n    query_deleted_message: Uložený filter bol vymazaný.\n    query_saved_message: Filter bol uložený.\n    select_all: Vyber všetko\n    deselect_all: Zrušiť výber\n\ncz:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Zobrazit filtr\n    hide_filter_tooltip: Skrýt filtr\n    csv_export_tooltip: Exportovat do CSV\n    filter_tooltip: Filtr\n    reset_filter_tooltip: Zrušit filtr\n    boolean_filter_true_label: \"áno\"\n    boolean_filter_false_label: \"ne\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Dátum od\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Dátum do\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Inverzní výběr\n    # link to switch to show all records\n    show_all_records_label: Zobrazit všechno\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Zobrazí všechny záznamy v databáze\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Určitě chceš zobrazit všechny záznamy v databáze?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: zpět na stránkové zobrazení\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Přepnout do stránkového zobrazení\n    # Title of the date string.\n    date_string_tooltip: Kliknutím zmažeš\n    saved_query_panel_title: Uložené filtry\n    save_query_button_label: Uložit aktuálni stav filtrů\n    saved_query_deletion_confirmation: Seš si jistej?\n    saved_query_deletion_link_title: Smazat uloženej filtr\n    saved_query_link_title: Použít uloženej filtr\n    validates_uniqueness_error: Filtr už existuje.\n    validates_presence_error: Prosím zadej název filtru.\n    query_deleted_message: Uložený filtr byl smazán.\n    query_saved_message: Filtr byl uložen.\n    select_all: Vyber všechno\n    deselect_all: Zrušit výběr\n\nde:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: Filter einblenden\n    hide_filter_tooltip: Filter ausblenden\n    csv_export_tooltip: CSV Export\n    filter_tooltip: Filter\n    reset_filter_tooltip: Reset\n    boolean_filter_true_label: \"Ja\"\n    boolean_filter_false_label: \"Nein\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: Von\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: Bis\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: Ausschließen\n    # link to switch to show all records\n    show_all_records_label: Alle anzeigen\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: Alle anzeigen\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: Wollen Sie wirkliche alle Einträge anzeigen?\n    # link to paginated view\n    switch_back_to_paginated_mode_label: Zurück zur seitenbasierten Ansicht\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: Zurück zur seitenbasierten Ansicht\n    # Title of the date string.\n    date_string_tooltip: Löschen\n    saved_query_panel_title: Gespeicherte Abfragen\n    save_query_button_label: Filter speichern\n    saved_query_deletion_confirmation: Sind Sie sicher?\n    saved_query_deletion_link_title: Abfrage löschen\n    saved_query_link_title: Abfrage laden\n    validates_uniqueness_error: Eine Abfrage mit dieser Bezeichnung existiert bereits!\n    validates_presence_error: Bitte vergeben Sie einen Namen!\n    query_deleted_message: Abfrage gelöscht.\n    query_saved_message: Abfrage gespeichert.\n    select_all: Alle auswählen\n    deselect_all: Auswahl aufheben\n\nzh:\n  date:\n    order:\n      - :year\n      - :month\n      - :day\n  wice_grid:\n    show_filter_tooltip: 显示过滤\n    hide_filter_tooltip: 隐藏过滤\n    csv_export_tooltip: 输出CSV档\n    filter_tooltip: 过滤\n    reset_filter_tooltip: 清除过滤\n    boolean_filter_true_label: \"是\"\n    boolean_filter_false_label: \"否\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: 从\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: 至\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: 排除\n    # link to switch to show all records\n    show_all_records_label: 显示全部\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: 显示全部记录\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: 确定要显示全部记录？\n    # link to paginated view\n    switch_back_to_paginated_mode_label: 回到分页显示\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: 切换到分页显示\n    # Title of the date string.\n    date_string_tooltip: 按下以清除\n    saved_query_panel_title: 查询存储\n    save_query_button_label: 储存查询状态\n    saved_query_deletion_confirmation: 确定删除？\n    saved_query_deletion_link_title: 删除查询\n    saved_query_link_title: 读取查询\n    validates_uniqueness_error: 已存在相同名称的查询\n    validates_presence_error: 请为此查询命名\n    query_deleted_message: 查询已删除\n    query_saved_message: 查询已储存\n    select_all: 全选\n    deselect_all: 全清\n\nja:\n  date:\n    order:\n      - :年\n      - :月\n      - :日\n  wice_grid:\n    show_filter_tooltip: フィルタ表示\n    hide_filter_tooltip: フィルタ非表示\n    csv_export_tooltip: CSVエクスポート\n    filter_tooltip: フィルタ\n    reset_filter_tooltip: リセット\n    boolean_filter_true_label: \"yes\"\n    boolean_filter_false_label: \"no\"\n    previous_label: «\n    next_label: »\n    # Title of the icon clicking on which will show the calendar to set the FROM date.\n    date_selector_tooltip_from: From\n    # Title of the icon clicking on which will show the calendar to set the TO date.\n    date_selector_tooltip_to: To\n    # The title of the checkox to turn on negation\n    negation_checkbox_title: 除外する\n    # link to switch to show all records\n    show_all_records_label: すべて表示\n    # tooltip for the link to switch to show all records\n    show_all_records_tooltip: 前レコード表示\n    # Warning message shown when the user wants to switch to all-records mode\n    all_queries_warning: 全てのレコードを表示しますか？\n    # link to paginated view\n    switch_back_to_paginated_mode_label: 戻る\n    # tooltip for the link to paginated view\n    switch_back_to_paginated_mode_tooltip: 戻る\n    # Title of the date string.\n    date_string_tooltip: 削除\n    saved_query_panel_title: クエリ保存\n    save_query_button_label: フィルタ保存\n    saved_query_deletion_confirmation: 本当によろしいですか？\n    saved_query_deletion_link_title: クエリ削除\n    saved_query_link_title: クエリのロード\n    validates_uniqueness_error: 同じ名前がすでに存在します\n    validates_presence_error: クエリ名を記入して下さい\n    query_deleted_message: クエリの削除が完了しました\n    query_saved_message: クエリを保存しました\n    select_all: 全てを選択\n    deselect_all: 選択を解除\n    expand: 開く\n    collapse: 閉じる"
  },
  {
    "path": "spec/support/test_app/config/puma.rb",
    "content": "workers Integer(ENV['WEB_CONCURRENCY'] || 2)\nthreads_count = Integer(ENV['MAX_THREADS'] || 5)\nthreads threads_count, threads_count\n\npreload_app!\n\nrackup      DefaultRackup\nport        ENV['PORT']     || 3000\nenvironment ENV['RACK_ENV'] || 'development'\n\non_worker_boot do\n  # Worker specific setup for Rails 4.1+\n  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot\n  ActiveRecord::Base.establish_connection\nend\n"
  },
  {
    "path": "spec/support/test_app/config/routes.rb",
    "content": "# encoding: utf-8\nExamples::TestApp.routes.draw do\n  # just in order to have the helpers defined\n  resources :tasks\n  resources :projects\n\n  resources :action_column do\n    collection do\n      post :process_issues\n    end\n  end\n\n  resources :hiding_checkboxes_in_action_column do\n    collection do\n      post :process_issues\n    end\n  end\n\n  resources(\n    :adding_rows,\n    :all_records,\n    :auto_reloads,\n    :auto_reloads2,\n    :auto_reloads3,\n    :basics1,\n    :basics2,\n    :basics3,\n    :basics4,\n    :basics5,\n    :basics6,\n    :blockless_column_definition,\n    :buttons,\n    :csv_and_detached_filters,\n    :csv_export,\n    :custom_filter_params,\n    :custom_filters1,\n    :custom_filters2,\n    :custom_filters3,\n    :custom_filters4,\n    :custom_ordering,\n    :custom_ordering_on_calculated,\n    :custom_ordering_with_arel,\n    :custom_ordering_with_proc,\n    :custom_ordering_with_ruby,\n    :dates,\n    :detached_filters,\n    :detached_filters_two_grids,\n    :disable_all_filters,\n    :erb_mode,\n    :integration_with_application_view,\n    :integration_with_forms,\n    :joining_tables,\n    :localization,\n    :many_grids_on_page,\n    :negation,\n    :no_records,\n    :null_values,\n    :numeric_filters,\n    :resultset_processings,\n    :resultset_processings2,\n    :saved_queries,\n    :styling,\n    :tasks,\n    :two_associations,\n    :upper_pagination_panel,\n    :when_filtered,\n  )\n\n  Wice.define_routes(self, 'queries')\n\n  # The priority is based upon order of creation:\n  # first created -> highest priority.\n\n  # Sample of regular route:\n  #   match 'products/:id' => 'catalog#view'\n  # Keep in mind you can assign values other than :controller and :action\n\n  # Sample of named route:\n  #   match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase\n  # This route can be invoked with purchase_url(:id => product.id)\n\n  # Sample resource route (maps HTTP verbs to controller actions automatically):\n  #   resources :products\n\n  # Sample resource route with options:\n  #   resources :products do\n  #     member do\n  #       get 'short'\n  #       post 'toggle'\n  #     end\n  #\n  #     collection do\n  #       get 'sold'\n  #     end\n  #   end\n\n  # Sample resource route with sub-resources:\n  #   resources :products do\n  #     resources :comments, :sales\n  #     resource :seller\n  #   end\n\n  # Sample resource route with more complex sub-resources\n  #   resources :products do\n  #     resources :comments\n  #     resources :sales do\n  #       get 'recent', :on => :collection\n  #     end\n  #   end\n\n  # Sample resource route within a namespace:\n  #   namespace :admin do\n  #     # Directs /admin/products/* to Admin::ProductsController\n  #     # (app/controllers/admin/products_controller.rb)\n  #     resources :products\n  #   end\n\n  # You can have the root of your site routed with \"root\"\n  # just remember to delete public/index.html.\n  root to: 'basics1#index'\n\n  # See how all your routes lay out with \"rake routes\"\n\n  # This is a legacy wild controller route that's not recommended for RESTful applications.\n  # Note: This route will make all actions in every controller accessible via GET requests.\n  # match ':controller(/:action(/:id))(.:format)'\nend\n"
  },
  {
    "path": "spec/support/test_app/config.ru",
    "content": "# encoding: utf-8\n# This file is used by Rack-based servers to start the application.\n\nrequire ::File.expand_path('../config/environment',  __FILE__)\nrun Examples::TestApp\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193505_create_tasks.rb",
    "content": "# encoding: utf-8\nclass CreateTasks < ActiveRecord::Migration\n  def change\n    create_table :tasks do |t|\n      t.string :title\n      t.text :description\n      t.integer :created_by_id\n      t.references :project\n      t.date :due_date\n      t.references :priority\n      t.references :status\n      t.integer :relevant_version_id\n      t.integer :expected_version_id\n      t.float :estimated_time\n      t.boolean :archived\n      t.timestamps\n    end\n\n    add_index :tasks, :title\n    add_index :tasks, :created_by_id\n    add_index :tasks, :project_id\n    add_index :tasks, :priority_id\n    add_index :tasks, :status_id\n    add_index :tasks, :relevant_version_id\n    add_index :tasks, :expected_version_id\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193517_create_users.rb",
    "content": "# encoding: utf-8\nclass CreateUsers < ActiveRecord::Migration\n  def change\n    create_table :users do |t|\n      t.string :name\n\n      t.timestamps\n    end\n\n    add_index :users, :name\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193522_create_projects.rb",
    "content": "# encoding: utf-8\nclass CreateProjects < ActiveRecord::Migration\n  def change\n    create_table :projects do |t|\n      t.string :name\n      t.integer :customer_id\n      t.integer :supplier_id\n      t.timestamps\n    end\n\n    add_index :projects, :customer_id\n    add_index :projects, :supplier_id\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193529_create_priorities.rb",
    "content": "# encoding: utf-8\nclass CreatePriorities < ActiveRecord::Migration\n  def change\n    create_table :priorities do |t|\n      t.string :name\n      t.integer :position\n      t.timestamps\n    end\n\n    add_index :priorities, :name\n    add_index :priorities, :position\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193537_create_statuses.rb",
    "content": "# encoding: utf-8\nclass CreateStatuses < ActiveRecord::Migration\n  def change\n    create_table :statuses do |t|\n      t.string :name\n      t.integer :position\n      t.timestamps\n    end\n\n    add_index :statuses, :name\n    add_index :statuses, :position\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193543_create_versions.rb",
    "content": "# encoding: utf-8\nclass CreateVersions < ActiveRecord::Migration\n  def change\n    create_table :versions do |t|\n      t.string :name\n      t.references :project\n      t.string :status\n      t.timestamps\n    end\n\n    add_index :versions, :name\n    add_index :versions, :project_id\n    add_index :versions, :status\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193550_create_project_roles.rb",
    "content": "# encoding: utf-8\nclass CreateProjectRoles < ActiveRecord::Migration\n  def change\n    create_table :project_roles do |t|\n      t.string :name\n      t.boolean :can_close_tasks\n      t.timestamps\n    end\n\n    add_index :project_roles, :name\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224193610_create_companies.rb",
    "content": "# encoding: utf-8\nclass CreateCompanies < ActiveRecord::Migration\n  def change\n    create_table :companies do |t|\n      t.string :name\n\n      t.timestamps\n    end\n\n    add_index :companies, :name\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224195351_create_user_project_participations.rb",
    "content": "# encoding: utf-8\nclass CreateUserProjectParticipations < ActiveRecord::Migration\n  def change\n    create_table :user_project_participations do |t|\n      t.references :project\n      t.references :user\n      t.references :project_role\n\n      t.timestamps\n    end\n\n    add_index :user_project_participations, :project_id\n    add_index :user_project_participations, :user_id\n    add_index :user_project_participations, :project_role_id\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120224195521_add_tasks_users.rb",
    "content": "# encoding: utf-8\nclass AddTasksUsers < ActiveRecord::Migration\n  def change\n    create_table :tasks_users, id: false do |t|\n      t.integer :task_id, :user_id\n    end\n\n    add_index :tasks_users, :task_id\n    add_index :tasks_users, :user_id\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/migrate/20120610091944_create_wice_grid_serialized_queries.rb",
    "content": "# encoding: utf-8\nclass CreateWiceGridSerializedQueries < ::ActiveRecord::Migration\n  def change\n    create_table :wice_grid_serialized_queries do |t|\n      t.column :name,      :string\n      t.column :grid_name, :string\n      t.column :query,     :text\n\n      t.timestamps\n    end\n    add_index :wice_grid_serialized_queries, :grid_name\n    add_index :wice_grid_serialized_queries, [:grid_name, :id]\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/db/schema.rb",
    "content": "# encoding: UTF-8\n# 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# Note that this schema.rb definition is the authoritative source for your\n# database schema. If you need to create the application database on another\n# system, you should be using db:schema:load, not running all the migrations\n# from scratch. The latter is a flawed and unsustainable approach (the more migrations\n# you'll amass, the slower it'll run and the greater likelihood for issues).\n#\n# It's strongly recommended that you check this file into your version control system.\n\nActiveRecord::Schema.define(version: 20120610091944) do\n\n  create_table \"companies\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"companies\", [\"name\"], name: \"index_companies_on_name\", using: :btree\n\n  create_table \"priorities\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.integer  \"position\",   limit: 4\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"priorities\", [\"name\"], name: \"index_priorities_on_name\", using: :btree\n  add_index \"priorities\", [\"position\"], name: \"index_priorities_on_position\", using: :btree\n\n  create_table \"project_roles\", force: :cascade do |t|\n    t.string   \"name\",            limit: 255\n    t.boolean  \"can_close_tasks\"\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"project_roles\", [\"name\"], name: \"index_project_roles_on_name\", using: :btree\n\n  create_table \"projects\", force: :cascade do |t|\n    t.string   \"name\",        limit: 255\n    t.integer  \"customer_id\", limit: 4\n    t.integer  \"supplier_id\", limit: 4\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"projects\", [\"customer_id\"], name: \"index_projects_on_customer_id\", using: :btree\n  add_index \"projects\", [\"supplier_id\"], name: \"index_projects_on_supplier_id\", using: :btree\n\n  create_table \"statuses\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.integer  \"position\",   limit: 4\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"statuses\", [\"name\"], name: \"index_statuses_on_name\", using: :btree\n  add_index \"statuses\", [\"position\"], name: \"index_statuses_on_position\", using: :btree\n\n  create_table \"tasks\", force: :cascade do |t|\n    t.string   \"title\",               limit: 255\n    t.text     \"description\",         limit: 65535\n    t.integer  \"created_by_id\",       limit: 4\n    t.integer  \"project_id\",          limit: 4\n    t.date     \"due_date\"\n    t.integer  \"priority_id\",         limit: 4\n    t.integer  \"status_id\",           limit: 4\n    t.integer  \"relevant_version_id\", limit: 4\n    t.integer  \"expected_version_id\", limit: 4\n    t.float    \"estimated_time\",      limit: 24\n    t.boolean  \"archived\"\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"tasks\", [\"created_by_id\"], name: \"index_tasks_on_created_by_id\", using: :btree\n  add_index \"tasks\", [\"expected_version_id\"], name: \"index_tasks_on_expected_version_id\", using: :btree\n  add_index \"tasks\", [\"priority_id\"], name: \"index_tasks_on_priority_id\", using: :btree\n  add_index \"tasks\", [\"project_id\"], name: \"index_tasks_on_project_id\", using: :btree\n  add_index \"tasks\", [\"relevant_version_id\"], name: \"index_tasks_on_relevant_version_id\", using: :btree\n  add_index \"tasks\", [\"status_id\"], name: \"index_tasks_on_status_id\", using: :btree\n  add_index \"tasks\", [\"title\"], name: \"index_tasks_on_title\", using: :btree\n\n  create_table \"tasks_users\", id: false, force: :cascade do |t|\n    t.integer \"task_id\", limit: 4\n    t.integer \"user_id\", limit: 4\n  end\n\n  add_index \"tasks_users\", [\"task_id\"], name: \"index_tasks_users_on_task_id\", using: :btree\n  add_index \"tasks_users\", [\"user_id\"], name: \"index_tasks_users_on_user_id\", using: :btree\n\n  create_table \"user_project_participations\", force: :cascade do |t|\n    t.integer  \"project_id\",      limit: 4\n    t.integer  \"user_id\",         limit: 4\n    t.integer  \"project_role_id\", limit: 4\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"user_project_participations\", [\"project_id\"], name: \"index_user_project_participations_on_project_id\", using: :btree\n  add_index \"user_project_participations\", [\"project_role_id\"], name: \"index_user_project_participations_on_project_role_id\", using: :btree\n  add_index \"user_project_participations\", [\"user_id\"], name: \"index_user_project_participations_on_user_id\", using: :btree\n\n  create_table \"users\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"users\", [\"name\"], name: \"index_users_on_name\", using: :btree\n\n  create_table \"versions\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.integer  \"project_id\", limit: 4\n    t.string   \"status\",     limit: 255\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"versions\", [\"name\"], name: \"index_versions_on_name\", using: :btree\n  add_index \"versions\", [\"project_id\"], name: \"index_versions_on_project_id\", using: :btree\n  add_index \"versions\", [\"status\"], name: \"index_versions_on_status\", using: :btree\n\n  create_table \"wice_grid_serialized_queries\", force: :cascade do |t|\n    t.string   \"name\",       limit: 255\n    t.string   \"grid_name\",  limit: 255\n    t.text     \"query\",      limit: 65535\n    t.datetime \"created_at\"\n    t.datetime \"updated_at\"\n  end\n\n  add_index \"wice_grid_serialized_queries\", [\"grid_name\", \"id\"], name: \"index_wice_grid_serialized_queries_on_grid_name_and_id\", using: :btree\n  add_index \"wice_grid_serialized_queries\", [\"grid_name\"], name: \"index_wice_grid_serialized_queries_on_grid_name\", using: :btree\n\nend\n"
  },
  {
    "path": "spec/support/test_app/db/seeds.rb",
    "content": "# encoding: utf-8\n# This file should contain all the record creation needed to seed the database with its default values.\n# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).\n#\n# Examples:\n#\n#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])\n#   Mayor.create(name: 'Emanuel', city: cities.first)\n\nPopulate.me\n"
  },
  {
    "path": "spec/support/test_app/lib/ar_fixtures.rb",
    "content": "# encoding: utf-8\n# Extension to make it easy to read and write data to a file.\nclass ActiveRecord::Base\n  class << self\n    # Writes content of this table to db/table_name.yml, or the specified file.\n    #\n    # Writes all content by default, but can be limited.\n    def dump_to_file(path = nil, limit = nil)\n      opts = {}\n      opts[:limit] = limit if limit\n      path ||= \"db/#{table_name}.yml\"\n      write_file(File.expand_path(path, Rails.root), self.find(:all, opts).to_yaml)\n    end\n\n    # Delete existing data in database and load fresh from file in db/table_name.yml\n    def load_from_file(path = nil)\n      path ||= \"db/#{table_name}.yml\"\n\n      self.destroy_all\n\n      if connection.respond_to?(:reset_pk_sequence!)\n       connection.reset_pk_sequence!(table_name)\n      end\n\n      records = YAML.load(File.open(File.expand_path(path, Rails.root)))\n      records.each do |record|\n        record_copy = self.new(record.attributes)\n        record_copy.id = record.id\n\n        # For Single Table Inheritance\n        klass_col = record.class.inheritance_column.to_sym\n        if record[klass_col]\n           record_copy.type = record[klass_col]\n        end\n\n        record_copy.save\n      end\n\n      if connection.respond_to?(:reset_pk_sequence!)\n       connection.reset_pk_sequence!(table_name)\n      end\n    end\n\n    # Write a file that can be loaded with +fixture :some_table+ in tests.\n    # Uses existing data in the database.\n    #\n    # Will be written to +test/fixtures/table_name.yml+. Can be restricted to some number of rows.\n    def to_fixture(limit = nil)\n      opts = {}\n      opts[:limit] = limit if limit\n\n      write_file(File.expand_path(\"test/fixtures/#{table_name}.yml\", Rails.root),\n                 self.find(:all, opts).inject({}) do |hsh, record|\n                     hsh.merge(\"#{table_name.singularize}_#{'%05i' % record.id}\" => record.attributes)\n                 end.to_yaml(SortKeys: true))\n      habtm_to_fixture\n    end\n\n    # Write the habtm association table\n    def habtm_to_fixture\n      joins = self.reflect_on_all_associations.select do |j|\n        j.macro == :has_and_belongs_to_many\n      end\n      joins.each do |join|\n        hsh = {}\n        connection.select_all(\"SELECT * FROM #{join.options[:join_table]}\").each_with_index do |record, i|\n          hsh[\"join_#{'%05i' % i}\"] = record\n        end\n        write_file(File.expand_path(\"test/fixtures/#{join.options[:join_table]}.yml\", Rails.root), hsh.to_yaml(SortKeys: true))\n      end\n    end\n\n    # Generates a basic fixture file in test/fixtures that lists the table's field names.\n    #\n    # You can use it as a starting point for your own fixtures.\n    #\n    #  record_1:\n    #    name:\n    #    rating:\n    #  record_2:\n    #    name:\n    #    rating:\n    #\n    # TODO: Automatically add :id field if there is one.\n    def to_skeleton\n      record = {\n          'record_1' => self.new.attributes,\n          'record_2' => self.new.attributes\n         }\n      write_file(File.expand_path(\"test/fixtures/#{table_name}.yml\", Rails.root),\n                 record.to_yaml)\n    end\n\n    def write_file(path, content) # :nodoc:\n      f = File.new(path, 'w+')\n      f.puts content\n      f.close\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/lib/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/lib/tasks/.gitkeep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/lib/tasks/ar_fixtures.rake",
    "content": "# encoding: utf-8\nrequire 'ar_fixtures'\n\ndef env_or_raise(var_name, human_name)\n  if ENV[var_name].blank?\n    fail \"No #{var_name} value given. Set #{var_name}=#{human_name}\"\n  else\n    return ENV[var_name]\n  end\nend\n\ndef model_or_raise\n  env_or_raise('MODEL', 'ModelName')\nend\n\ndef limit_or_nil_string\n  ENV['LIMIT'].blank? ? 'nil' : ENV['LIMIT']\nend\n\nnamespace :db do\n  namespace :fixtures do\n    desc 'Dump data to the test/fixtures/ directory. Use MODEL=ModelName and LIMIT (optional)'\n    task dump_all: :environment do\n      [Company, Priority, Project, ProjectRole, Status, Task, User, Version].each(&:to_fixture)\n    end\n\n    desc 'Dump data to the test/fixtures/ directory. Use MODEL=ModelName and LIMIT (optional)'\n    task dump: :environment do\n      eval \"#{model_or_raise}.to_fixture(#{limit_or_nil_string})\"\n    end\n  end\n\n  namespace :data do\n    desc 'Dump data to the db/ directory. Use MODEL=ModelName and LIMIT (optional)'\n    task dump: :environment do\n      eval \"#{model_or_raise}.dump_to_file(nil, #{limit_or_nil_string})\"\n      puts \"#{model_or_raise} has been dumped to the db folder.\"\n    end\n\n    desc 'Load data from the db/ directory. Use MODEL=ModelName'\n    task load: :environment do\n      eval \"#{model_or_raise}.load_from_file\"\n    end\n  end\nend\n"
  },
  {
    "path": "spec/support/test_app/public/404.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The page you were looking for doesn't exist (404)</title>\n  <style type=\"text/css\">\n    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }\n    div.dialog {\n      width: 25em;\n      padding: 0 4em;\n      margin: 4em auto 0 auto;\n      border: 1px solid #ccc;\n      border-right-color: #999;\n      border-bottom-color: #999;\n    }\n    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/404.html -->\n  <div class=\"dialog\">\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</body>\n</html>\n"
  },
  {
    "path": "spec/support/test_app/public/422.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The change you wanted was rejected (422)</title>\n  <style type=\"text/css\">\n    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }\n    div.dialog {\n      width: 25em;\n      padding: 0 4em;\n      margin: 4em auto 0 auto;\n      border: 1px solid #ccc;\n      border-right-color: #999;\n      border-bottom-color: #999;\n    }\n    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/422.html -->\n  <div class=\"dialog\">\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</body>\n</html>\n"
  },
  {
    "path": "spec/support/test_app/public/500.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>We're sorry, but something went wrong (500)</title>\n  <style type=\"text/css\">\n    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }\n    div.dialog {\n      width: 25em;\n      padding: 0 4em;\n      margin: 4em auto 0 auto;\n      border: 1px solid #ccc;\n      border-right-color: #999;\n      border-bottom-color: #999;\n    }\n    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/500.html -->\n  <div class=\"dialog\">\n    <h1>We're sorry, but something went wrong.</h1>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "spec/support/test_app/public/robots.txt",
    "content": "# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file\n#\n# To ban all spiders from the entire site uncomment the next two lines:\n# User-Agent: *\n# Disallow: /\n"
  },
  {
    "path": "spec/support/test_app/vendor/javascript/.keep",
    "content": ""
  },
  {
    "path": "spec/support/test_app/vendor/javascript/@hotwired--stimulus.js",
    "content": "class EventListener{constructor(e,t,r){this.eventTarget=e;this.eventName=t;this.eventOptions=r;this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=extendEvent(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort(((e,t)=>{const r=e.index,s=t.index;return r<s?-1:r>s?1:0}))}}function extendEvent(e){if(\"immediatePropagationStopped\"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:false,stopImmediatePropagation(){this.immediatePropagationStopped=true;t.call(this)}})}}class Dispatcher{constructor(e){this.application=e;this.eventListenerMaps=new Map;this.started=false}start(){if(!this.started){this.started=true;this.eventListeners.forEach((e=>e.connect()))}}stop(){if(this.started){this.started=false;this.eventListeners.forEach((e=>e.disconnect()))}}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce(((e,t)=>e.concat(Array.from(t.values()))),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=false){this.fetchEventListenerForBinding(e).bindingDisconnected(e);t&&this.clearEventListenersForBinding(e)}handleError(e,t,r={}){this.application.handleError(e,`Error ${t}`,r)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);if(!t.hasBindings()){t.disconnect();this.removeMappedEventListenerFor(e)}}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:r,eventOptions:s}=e;const n=this.fetchEventListenerMapForEventTarget(t);const i=this.cacheKey(r,s);n.delete(i);0==n.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:r,eventOptions:s}=e;return this.fetchEventListener(t,r,s)}fetchEventListener(e,t,r){const s=this.fetchEventListenerMapForEventTarget(e);const n=this.cacheKey(t,r);let i=s.get(n);if(!i){i=this.createEventListener(e,t,r);s.set(n,i)}return i}createEventListener(e,t,r){const s=new EventListener(e,t,r);this.started&&s.connect();return s}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);if(!t){t=new Map;this.eventListenerMaps.set(e,t)}return t}cacheKey(e,t){const r=[e];Object.keys(t).sort().forEach((e=>{r.push(`${t[e]?\"\":\"!\"}${e}`)}));return r.join(\":\")}}const e={stop({event:e,value:t}){t&&e.stopPropagation();return true},prevent({event:e,value:t}){t&&e.preventDefault();return true},self({event:e,value:t,element:r}){return!t||r===e.target}};const t=/^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function parseActionDescriptorString(e){const r=e.trim();const s=r.match(t)||[];let n=s[2];let i=s[3];if(i&&![\"keydown\",\"keyup\",\"keypress\"].includes(n)){n+=`.${i}`;i=\"\"}return{eventTarget:parseEventTarget(s[4]),eventName:n,eventOptions:s[7]?parseEventOptions(s[7]):{},identifier:s[5],methodName:s[6],keyFilter:s[1]||i}}function parseEventTarget(e){return\"window\"==e?window:\"document\"==e?document:void 0}function parseEventOptions(e){return e.split(\":\").reduce(((e,t)=>Object.assign(e,{[t.replace(/^!/,\"\")]:!/^!/.test(t)})),{})}function stringifyEventTarget(e){return e==window?\"window\":e==document?\"document\":void 0}function camelize(e){return e.replace(/(?:[_-])([a-z0-9])/g,((e,t)=>t.toUpperCase()))}function namespaceCamelize(e){return camelize(e.replace(/--/g,\"-\").replace(/__/g,\"_\"))}function capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}function dasherize(e){return e.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}function tokenize(e){return e.match(/[^\\s]+/g)||[]}function isSomething(e){return null!==e&&void 0!==e}function hasProperty(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const r=[\"meta\",\"ctrl\",\"alt\",\"shift\"];class Action{constructor(e,t,r,s){this.element=e;this.index=t;this.eventTarget=r.eventTarget||e;this.eventName=r.eventName||getDefaultEventNameForElement(e)||error(\"missing event name\");this.eventOptions=r.eventOptions||{};this.identifier=r.identifier||error(\"missing identifier\");this.methodName=r.methodName||error(\"missing method name\");this.keyFilter=r.keyFilter||\"\";this.schema=s}static forToken(e,t){return new this(e.element,e.index,parseActionDescriptorString(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:\"\";const t=this.eventTargetName?`@${this.eventTargetName}`:\"\";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return false;const t=this.keyFilter.split(\"+\");if(this.keyFilterDissatisfied(e,t))return true;const s=t.filter((e=>!r.includes(e)))[0];if(!s)return false;hasProperty(this.keyMappings,s)||error(`contains unknown key filter: ${this.keyFilter}`);return this.keyMappings[s].toLowerCase()!==e.key.toLowerCase()}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return false;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={};const t=new RegExp(`^data-${this.identifier}-(.+)-param$`,\"i\");for(const{name:r,value:s}of Array.from(this.element.attributes)){const n=r.match(t);const i=n&&n[1];i&&(e[camelize(i)]=typecast(s))}return e}get eventTargetName(){return stringifyEventTarget(this.eventTarget)}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[s,n,i,o]=r.map((e=>t.includes(e)));return e.metaKey!==s||e.ctrlKey!==n||e.altKey!==i||e.shiftKey!==o}}const s={a:()=>\"click\",button:()=>\"click\",form:()=>\"submit\",details:()=>\"toggle\",input:e=>\"submit\"==e.getAttribute(\"type\")?\"click\":\"input\",select:()=>\"change\",textarea:()=>\"input\"};function getDefaultEventNameForElement(e){const t=e.tagName.toLowerCase();if(t in s)return s[t](e)}function error(e){throw new Error(e)}function typecast(e){try{return JSON.parse(e)}catch(t){return e}}class Binding{constructor(e,t){this.context=e;this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if(\"function\"==typeof e)return e;throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`)}applyEventModifiers(e){const{element:t}=this.action;const{actionDescriptorFilters:r}=this.context.application;const{controller:s}=this.context;let n=true;for(const[i,o]of Object.entries(this.eventOptions))if(i in r){const c=r[i];n=n&&c({name:i,value:o,event:e,element:t,controller:s})}return n}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:r}=e;try{this.method.call(this.controller,e);this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:r,action:this.methodName})}catch(t){const{identifier:r,controller:s,element:n,index:i}=this;const o={identifier:r,controller:s,element:n,index:i,event:e};this.context.handleError(t,`invoking action \"${this.action}\"`,o)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&(!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element))))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class ElementObserver{constructor(e,t){this.mutationObserverInit={attributes:true,childList:true,subtree:true};this.element=e;this.started=false;this.delegate=t;this.elements=new Set;this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){if(!this.started){this.started=true;this.mutationObserver.observe(this.element,this.mutationObserverInit);this.refresh()}}pause(e){if(this.started){this.mutationObserver.disconnect();this.started=false}e();if(!this.started){this.mutationObserver.observe(this.element,this.mutationObserverInit);this.started=true}}stop(){if(this.started){this.mutationObserver.takeRecords();this.mutationObserver.disconnect();this.started=false}}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){if(\"attributes\"==e.type)this.processAttributeChange(e.target,e.attributeName);else if(\"childList\"==e.type){this.processRemovedNodes(e.removedNodes);this.processAddedNodes(e.addedNodes)}}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const r of this.matchElementsInTree(e))t.call(this,r)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){if(!this.elements.has(e)&&this.elementIsActive(e)){this.elements.add(e);this.delegate.elementMatched&&this.delegate.elementMatched(e)}}removeElement(e){if(this.elements.has(e)){this.elements.delete(e);this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e)}}}class AttributeObserver{constructor(e,t,r){this.attributeName=t;this.delegate=r;this.elementObserver=new ElementObserver(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[];const r=Array.from(e.querySelectorAll(this.selector));return t.concat(r)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function add(e,t,r){fetch(e,t).add(r)}function del(e,t,r){fetch(e,t).delete(r);prune(e,t)}function fetch(e,t){let r=e.get(t);if(!r){r=new Set;e.set(t,r)}return r}function prune(e,t){const r=e.get(t);null!=r&&0==r.size&&e.delete(t)}class Multimap{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){const e=Array.from(this.valuesByKey.values());return e.reduce(((e,t)=>e.concat(Array.from(t))),[])}get size(){const e=Array.from(this.valuesByKey.values());return e.reduce(((e,t)=>e+t.size),0)}add(e,t){add(this.valuesByKey,e,t)}delete(e,t){del(this.valuesByKey,e,t)}has(e,t){const r=this.valuesByKey.get(e);return null!=r&&r.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){const t=Array.from(this.valuesByKey.values());return t.some((t=>t.has(e)))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter((([t,r])=>r.has(e))).map((([e,t])=>e))}}class IndexedMultimap extends Multimap{constructor(){super();this.keysByValue=new Map}get values(){return Array.from(this.keysByValue.keys())}add(e,t){super.add(e,t);add(this.keysByValue,t,e)}delete(e,t){super.delete(e,t);del(this.keysByValue,t,e)}hasValue(e){return this.keysByValue.has(e)}getKeysForValue(e){const t=this.keysByValue.get(e);return t?Array.from(t):[]}}class SelectorObserver{constructor(e,t,r,s){this._selector=t;this.details=s;this.elementObserver=new ElementObserver(e,this);this.delegate=r;this.matchesByElement=new Multimap}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e;this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const r=e.matches(t);return this.delegate.selectorMatchElement?r&&this.delegate.selectorMatchElement(e,this.details):r}return false}matchElementsInTree(e){const{selector:t}=this;if(t){const r=this.matchElement(e)?[e]:[];const s=Array.from(e.querySelectorAll(t)).filter((e=>this.matchElement(e)));return r.concat(s)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const r of t)this.selectorUnmatched(e,r)}elementAttributeChanged(e,t){const{selector:r}=this;if(r){const t=this.matchElement(e);const s=this.matchesByElement.has(r,e);t&&!s?this.selectorMatched(e,r):!t&&s&&this.selectorUnmatched(e,r)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details);this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details);this.matchesByElement.delete(t,e)}}class StringMapObserver{constructor(e,t){this.element=e;this.delegate=t;this.started=false;this.stringMap=new Map;this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){if(!this.started){this.started=true;this.mutationObserver.observe(this.element,{attributes:true,attributeOldValue:true});this.refresh()}}stop(){if(this.started){this.mutationObserver.takeRecords();this.mutationObserver.disconnect();this.started=false}}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const r=this.delegate.getStringMapKeyForAttribute(e);if(null!=r){this.stringMap.has(e)||this.stringMapKeyAdded(r,e);const s=this.element.getAttribute(e);this.stringMap.get(e)!=s&&this.stringMapValueChanged(s,r,t);if(null==s){const t=this.stringMap.get(e);this.stringMap.delete(e);t&&this.stringMapKeyRemoved(r,e,t)}else this.stringMap.set(e,s)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,r){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,r)}stringMapKeyRemoved(e,t,r){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,r)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map((e=>e.name))}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class TokenListObserver{constructor(e,t,r){this.attributeObserver=new AttributeObserver(e,t,this);this.delegate=r;this.tokensByElement=new Multimap}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,r]=this.refreshTokensForElement(e);this.tokensUnmatched(t);this.tokensMatched(r)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach((e=>this.tokenMatched(e)))}tokensUnmatched(e){e.forEach((e=>this.tokenUnmatched(e)))}tokenMatched(e){this.delegate.tokenMatched(e);this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e);this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e);const r=this.readTokensForElement(e);const s=zip(t,r).findIndex((([e,t])=>!tokensAreEqual(e,t)));return-1==s?[[],[]]:[t.slice(s),r.slice(s)]}readTokensForElement(e){const t=this.attributeName;const r=e.getAttribute(t)||\"\";return parseTokenString(r,e,t)}}function parseTokenString(e,t,r){return e.trim().split(/\\s+/).filter((e=>e.length)).map(((e,s)=>({element:t,attributeName:r,content:e,index:s})))}function zip(e,t){const r=Math.max(e.length,t.length);return Array.from({length:r},((r,s)=>[e[s],t[s]]))}function tokensAreEqual(e,t){return e&&t&&e.index==t.index&&e.content==t.content}class ValueListObserver{constructor(e,t,r){this.tokenListObserver=new TokenListObserver(e,t,this);this.delegate=r;this.parseResultsByToken=new WeakMap;this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e;const{value:r}=this.fetchParseResultForToken(e);if(r){this.fetchValuesByTokenForElement(t).set(e,r);this.delegate.elementMatchedValue(t,r)}}tokenUnmatched(e){const{element:t}=e;const{value:r}=this.fetchParseResultForToken(e);if(r){this.fetchValuesByTokenForElement(t).delete(e);this.delegate.elementUnmatchedValue(t,r)}}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);if(!t){t=this.parseToken(e);this.parseResultsByToken.set(e,t)}return t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);if(!t){t=new Map;this.valuesByTokenByElement.set(e,t)}return t}parseToken(e){try{const t=this.delegate.parseValueForToken(e);return{value:t}}catch(e){return{error:e}}}}class BindingObserver{constructor(e,t){this.context=e;this.delegate=t;this.bindingsByAction=new Map}start(){if(!this.valueListObserver){this.valueListObserver=new ValueListObserver(this.element,this.actionAttribute,this);this.valueListObserver.start()}}stop(){if(this.valueListObserver){this.valueListObserver.stop();delete this.valueListObserver;this.disconnectAllActions()}}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new Binding(this.context,e);this.bindingsByAction.set(e,t);this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);if(t){this.bindingsByAction.delete(e);this.delegate.bindingDisconnected(t)}}disconnectAllActions(){this.bindings.forEach((e=>this.delegate.bindingDisconnected(e,true)));this.bindingsByAction.clear()}parseValueForToken(e){const t=Action.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class ValueObserver{constructor(e,t){this.context=e;this.receiver=t;this.stringMapObserver=new StringMapObserver(this.element,this);this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start();this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const r=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,r.writer(this.receiver[e]),r.writer(r.defaultValue))}stringMapValueChanged(e,t,r){const s=this.valueDescriptorNameMap[t];if(null!==e){null===r&&(r=s.writer(s.defaultValue));this.invokeChangedCallback(t,e,r)}}stringMapKeyRemoved(e,t,r){const s=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,s.writer(this.receiver[e]),r):this.invokeChangedCallback(e,s.writer(s.defaultValue),r)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:r,writer:s}of this.valueDescriptors)void 0==r||this.controller.data.has(e)||this.invokeChangedCallback(t,s(r),void 0)}invokeChangedCallback(e,t,r){const s=`${e}Changed`;const n=this.receiver[s];if(\"function\"==typeof n){const s=this.valueDescriptorNameMap[e];try{const e=s.reader(t);let i=r;r&&(i=s.reader(r));n.call(this.receiver,e,i)}catch(e){e instanceof TypeError&&(e.message=`Stimulus Value \"${this.context.identifier}.${s.name}\" - ${e.message}`);throw e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map((t=>e[t]))}get valueDescriptorNameMap(){const e={};Object.keys(this.valueDescriptorMap).forEach((t=>{const r=this.valueDescriptorMap[t];e[r.name]=r}));return e}hasValue(e){const t=this.valueDescriptorNameMap[e];const r=`has${capitalize(t.name)}`;return this.receiver[r]}}class TargetObserver{constructor(e,t){this.context=e;this.delegate=t;this.targetsByName=new Multimap}start(){if(!this.tokenListObserver){this.tokenListObserver=new TokenListObserver(this.element,this.attributeName,this);this.tokenListObserver.start()}}stop(){if(this.tokenListObserver){this.disconnectAllTargets();this.tokenListObserver.stop();delete this.tokenListObserver}}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var r;if(!this.targetsByName.has(t,e)){this.targetsByName.add(t,e);null===(r=this.tokenListObserver)||void 0===r?void 0:r.pause((()=>this.delegate.targetConnected(e,t)))}}disconnectTarget(e,t){var r;if(this.targetsByName.has(t,e)){this.targetsByName.delete(t,e);null===(r=this.tokenListObserver)||void 0===r?void 0:r.pause((()=>this.delegate.targetDisconnected(e,t)))}}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function readInheritableStaticArrayValues(e,t){const r=getAncestorsForConstructor(e);return Array.from(r.reduce(((e,r)=>{getOwnStaticArrayValues(r,t).forEach((t=>e.add(t)));return e}),new Set))}function readInheritableStaticObjectPairs(e,t){const r=getAncestorsForConstructor(e);return r.reduce(((e,r)=>{e.push(...getOwnStaticObjectPairs(r,t));return e}),[])}function getAncestorsForConstructor(e){const t=[];while(e){t.push(e);e=Object.getPrototypeOf(e)}return t.reverse()}function getOwnStaticArrayValues(e,t){const r=e[t];return Array.isArray(r)?r:[]}function getOwnStaticObjectPairs(e,t){const r=e[t];return r?Object.keys(r).map((e=>[e,r[e]])):[]}class OutletObserver{constructor(e,t){this.started=false;this.context=e;this.delegate=t;this.outletsByName=new Multimap;this.outletElementsByName=new Multimap;this.selectorObserverMap=new Map;this.attributeObserverMap=new Map}start(){if(!this.started){this.outletDefinitions.forEach((e=>{this.setupSelectorObserverForOutlet(e);this.setupAttributeObserverForOutlet(e)}));this.started=true;this.dependentContexts.forEach((e=>e.refresh()))}}refresh(){this.selectorObserverMap.forEach((e=>e.refresh()));this.attributeObserverMap.forEach((e=>e.refresh()))}stop(){if(this.started){this.started=false;this.disconnectAllOutlets();this.stopSelectorObservers();this.stopAttributeObservers()}}stopSelectorObservers(){if(this.selectorObserverMap.size>0){this.selectorObserverMap.forEach((e=>e.stop()));this.selectorObserverMap.clear()}}stopAttributeObservers(){if(this.attributeObserverMap.size>0){this.attributeObserverMap.forEach((e=>e.stop()));this.attributeObserverMap.clear()}}selectorMatched(e,t,{outletName:r}){const s=this.getOutlet(e,r);s&&this.connectOutlet(s,e,r)}selectorUnmatched(e,t,{outletName:r}){const s=this.getOutletFromMap(e,r);s&&this.disconnectOutlet(s,e,r)}selectorMatchElement(e,{outletName:t}){const r=this.selector(t);const s=this.hasOutlet(e,t);const n=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!r&&(s&&n&&e.matches(r))}elementMatchedAttribute(e,t){const r=this.getOutletNameFromOutletAttributeName(t);r&&this.updateSelectorObserverForOutlet(r)}elementAttributeValueChanged(e,t){const r=this.getOutletNameFromOutletAttributeName(t);r&&this.updateSelectorObserverForOutlet(r)}elementUnmatchedAttribute(e,t){const r=this.getOutletNameFromOutletAttributeName(t);r&&this.updateSelectorObserverForOutlet(r)}connectOutlet(e,t,r){var s;if(!this.outletElementsByName.has(r,t)){this.outletsByName.add(r,e);this.outletElementsByName.add(r,t);null===(s=this.selectorObserverMap.get(r))||void 0===s?void 0:s.pause((()=>this.delegate.outletConnected(e,t,r)))}}disconnectOutlet(e,t,r){var s;if(this.outletElementsByName.has(r,t)){this.outletsByName.delete(r,e);this.outletElementsByName.delete(r,t);null===(s=this.selectorObserverMap.get(r))||void 0===s?void 0:s.pause((()=>this.delegate.outletDisconnected(e,t,r)))}}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const r of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(r,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e);const r=new SelectorObserver(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,r);r.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e);const r=new AttributeObserver(this.scope.element,t,this);this.attributeObserverMap.set(e,r);r.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find((t=>this.attributeNameForOutletName(t)===e))}get outletDependencies(){const e=new Multimap;this.router.modules.forEach((t=>{const r=t.definition.controllerConstructor;const s=readInheritableStaticArrayValues(r,\"outlets\");s.forEach((r=>e.add(r,t.identifier)))}));return e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter((t=>e.includes(t.identifier)))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find((t=>t.element===e))}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class Context{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:r,controller:s,element:n}=this;t=Object.assign({identifier:r,controller:s,element:n},t);this.application.logDebugActivity(this.identifier,e,t)};this.module=e;this.scope=t;this.controller=new e.controllerConstructor(this);this.bindingObserver=new BindingObserver(this,this.dispatcher);this.valueObserver=new ValueObserver(this,this.controller);this.targetObserver=new TargetObserver(this,this);this.outletObserver=new OutletObserver(this,this);try{this.controller.initialize();this.logDebugActivity(\"initialize\")}catch(e){this.handleError(e,\"initializing controller\")}}connect(){this.bindingObserver.start();this.valueObserver.start();this.targetObserver.start();this.outletObserver.start();try{this.controller.connect();this.logDebugActivity(\"connect\")}catch(e){this.handleError(e,\"connecting controller\")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect();this.logDebugActivity(\"disconnect\")}catch(e){this.handleError(e,\"disconnecting controller\")}this.outletObserver.stop();this.targetObserver.stop();this.valueObserver.stop();this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,r={}){const{identifier:s,controller:n,element:i}=this;r=Object.assign({identifier:s,controller:n,element:i},r);this.application.handleError(e,`Error ${t}`,r)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,r){this.invokeControllerMethod(`${namespaceCamelize(r)}OutletConnected`,e,t)}outletDisconnected(e,t,r){this.invokeControllerMethod(`${namespaceCamelize(r)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const r=this.controller;\"function\"==typeof r[e]&&r[e](...t)}}function bless(e){return shadow(e,getBlessedProperties(e))}function shadow(e,t){const r=i(e);const s=getShadowProperties(e.prototype,t);Object.defineProperties(r.prototype,s);return r}function getBlessedProperties(e){const t=readInheritableStaticArrayValues(e,\"blessings\");return t.reduce(((t,r)=>{const s=r(e);for(const e in s){const r=t[e]||{};t[e]=Object.assign(r,s[e])}return t}),{})}function getShadowProperties(e,t){return n(t).reduce(((r,s)=>{const n=getShadowedDescriptor(e,t,s);n&&Object.assign(r,{[s]:n});return r}),{})}function getShadowedDescriptor(e,t,r){const s=Object.getOwnPropertyDescriptor(e,r);const n=s&&\"value\"in s;if(!n){const e=Object.getOwnPropertyDescriptor(t,r).value;if(s){e.get=s.get||e.get;e.set=s.set||e.set}return e}}const n=(()=>\"function\"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames)();const i=(()=>{function extendWithReflect(e){function extended(){return Reflect.construct(e,arguments,new.target)}extended.prototype=Object.create(e.prototype,{constructor:{value:extended}});Reflect.setPrototypeOf(extended,e);return extended}function testReflectExtension(){const a=function(){this.a.call(this)};const e=extendWithReflect(a);e.prototype.a=function(){};return new e}try{testReflectExtension();return extendWithReflect}catch(e){return e=>class extended extends e{}}})();function blessDefinition(e){return{identifier:e.identifier,controllerConstructor:bless(e.controllerConstructor)}}class Module{constructor(e,t){this.application=e;this.definition=blessDefinition(t);this.contextsByScope=new WeakMap;this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t);t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);if(t){this.connectedContexts.delete(t);t.disconnect()}}fetchContextForScope(e){let t=this.contextsByScope.get(e);if(!t){t=new Context(this,e);this.contextsByScope.set(e,t)}return t}}class ClassMap{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){const t=this.data.get(this.getDataKey(e))||\"\";return tokenize(t)}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class DataMap{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const r=this.getAttributeNameForKey(e);this.element.setAttribute(r,t);return this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);this.element.removeAttribute(t);return true}return false}getAttributeNameForKey(e){return`data-${this.identifier}-${dasherize(e)}`}}class Guide{constructor(e){this.warnedKeysByObject=new WeakMap;this.logger=e}warn(e,t,r){let s=this.warnedKeysByObject.get(e);if(!s){s=new Set;this.warnedKeysByObject.set(e,s)}if(!s.has(t)){s.add(t);this.logger.warn(r,e)}}}function attributeValueContainsToken(e,t){return`[${e}~=\"${t}\"]`}class TargetSet{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)]),[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){const t=this.schema.targetAttributeForScope(this.identifier);return attributeValueContainsToken(t,e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map((t=>this.deprecate(t,e)))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return attributeValueContainsToken(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:r}=this;const s=this.schema.targetAttribute;const n=this.schema.targetAttributeForScope(r);this.guide.warn(e,`target:${t}`,`Please replace ${s}=\"${r}.${t}\" with ${n}=\"${t}\". The ${s} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class OutletSet{constructor(e,t){this.scope=e;this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findOutlet(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllOutlets(t)]),[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){const r=this.scope.queryElements(e);return r.filter((r=>this.matchesElement(r,e,t)))[0]}findAllElements(e,t){const r=this.scope.queryElements(e);return r.filter((r=>this.matchesElement(r,e,t)))}matchesElement(e,t,r){const s=e.getAttribute(this.scope.schema.controllerAttribute)||\"\";return e.matches(t)&&s.split(\" \").includes(r)}}class Scope{constructor(e,t,r,s){this.targets=new TargetSet(this);this.classes=new ClassMap(this);this.data=new DataMap(this);this.containsElement=e=>e.closest(this.controllerSelector)===this.element;this.schema=e;this.element=t;this.identifier=r;this.guide=new Guide(s);this.outlets=new OutletSet(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return attributeValueContainsToken(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new Scope(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class ScopeObserver{constructor(e,t,r){this.element=e;this.schema=t;this.delegate=r;this.valueListObserver=new ValueListObserver(this.element,this.controllerAttribute,this);this.scopesByIdentifierByElement=new WeakMap;this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:r}=e;return this.parseValueForElementAndIdentifier(t,r)}parseValueForElementAndIdentifier(e,t){const r=this.fetchScopesByIdentifierForElement(e);let s=r.get(t);if(!s){s=this.delegate.createScopeForElementAndIdentifier(e,t);r.set(t,s)}return s}elementMatchedValue(e,t){const r=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,r);1==r&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const r=this.scopeReferenceCounts.get(t);if(r){this.scopeReferenceCounts.set(t,r-1);1==r&&this.delegate.scopeDisconnected(t)}}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);if(!t){t=new Map;this.scopesByIdentifierByElement.set(e,t)}return t}}class Router{constructor(e){this.application=e;this.scopeObserver=new ScopeObserver(this.element,this.schema,this);this.scopesByIdentifier=new Multimap;this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce(((e,t)=>e.concat(t.contexts)),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new Module(this.application,e);this.connectModule(t);const r=e.controllerConstructor.afterLoad;r&&r.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const r=this.modulesByIdentifier.get(t);if(r)return r.contexts.find((t=>t.element==e))}proposeToConnectScopeForElementAndIdentifier(e,t){const r=this.scopeObserver.parseValueForElementAndIdentifier(e,t);r?this.scopeObserver.elementMatchedValue(r.element,r):console.error(`Couldn't find or create scope for identifier: \"${t}\" and element:`,e)}handleError(e,t,r){this.application.handleError(e,t,r)}createScopeForElementAndIdentifier(e,t){return new Scope(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e);const t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach((t=>e.connectContextForScope(t)))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier);const t=this.scopesByIdentifier.getValuesForKey(e.identifier);t.forEach((t=>e.disconnectContextForScope(t)))}}const o={controllerAttribute:\"data-controller\",actionAttribute:\"data-action\",targetAttribute:\"data-target\",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:\"Enter\",tab:\"Tab\",esc:\"Escape\",space:\" \",up:\"ArrowUp\",down:\"ArrowDown\",left:\"ArrowLeft\",right:\"ArrowRight\",home:\"Home\",end:\"End\",page_up:\"PageUp\",page_down:\"PageDown\"},objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((e=>[e,e])))),objectFromEntries(\"0123456789\".split(\"\").map((e=>[e,e]))))};function objectFromEntries(e){return e.reduce(((e,[t,r])=>Object.assign(Object.assign({},e),{[t]:r})),{})}class Application{constructor(t=document.documentElement,r=o){this.logger=console;this.debug=false;this.logDebugActivity=(e,t,r={})=>{this.debug&&this.logFormattedMessage(e,t,r)};this.element=t;this.schema=r;this.dispatcher=new Dispatcher(this);this.router=new Router(this);this.actionDescriptorFilters=Object.assign({},e)}static start(e,t){const r=new this(e,t);r.start();return r}async start(){await domReady();this.logDebugActivity(\"application\",\"starting\");this.dispatcher.start();this.router.start();this.logDebugActivity(\"application\",\"start\")}stop(){this.logDebugActivity(\"application\",\"stopping\");this.dispatcher.stop();this.router.stop();this.logDebugActivity(\"application\",\"stop\")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){const r=Array.isArray(e)?e:[e,...t];r.forEach((e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)}))}unload(e,...t){const r=Array.isArray(e)?e:[e,...t];r.forEach((e=>this.router.unloadIdentifier(e)))}get controllers(){return this.router.contexts.map((e=>e.controller))}getControllerForElementAndIdentifier(e,t){const r=this.router.getContextForElementAndIdentifier(e,t);return r?r.controller:null}handleError(e,t,r){var s;this.logger.error(\"%s\\n\\n%o\\n\\n%o\",t,e,r);null===(s=window.onerror)||void 0===s?void 0:s.call(window,t,\"\",0,0,e)}logFormattedMessage(e,t,r={}){r=Object.assign({application:this},r);this.logger.groupCollapsed(`${e} #${t}`);this.logger.log(\"details:\",Object.assign({},r));this.logger.groupEnd()}}function domReady(){return new Promise((e=>{\"loading\"==document.readyState?document.addEventListener(\"DOMContentLoaded\",(()=>e())):e()}))}function ClassPropertiesBlessing(e){const t=readInheritableStaticArrayValues(e,\"classes\");return t.reduce(((e,t)=>Object.assign(e,propertiesForClassDefinition(t))),{})}function propertiesForClassDefinition(e){return{[`${e}Class`]:{get(){const{classes:t}=this;if(t.has(e))return t.get(e);{const r=t.getAttributeName(e);throw new Error(`Missing attribute \"${r}\"`)}}},[`${e}Classes`]:{get(){return this.classes.getAll(e)}},[`has${capitalize(e)}Class`]:{get(){return this.classes.has(e)}}}}function OutletPropertiesBlessing(e){const t=readInheritableStaticArrayValues(e,\"outlets\");return t.reduce(((e,t)=>Object.assign(e,propertiesForOutletDefinition(t))),{})}function getOutletController(e,t,r){return e.application.getControllerForElementAndIdentifier(t,r)}function getControllerAndEnsureConnectedScope(e,t,r){let s=getOutletController(e,t,r);if(s)return s;e.application.router.proposeToConnectScopeForElementAndIdentifier(t,r);s=getOutletController(e,t,r);return s||void 0}function propertiesForOutletDefinition(e){const t=namespaceCamelize(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e);const r=this.outlets.getSelectorForOutletName(e);if(t){const r=getControllerAndEnsureConnectedScope(this,t,e);if(r)return r;throw new Error(`The provided outlet element is missing an outlet controller \"${e}\" instance for host controller \"${this.identifier}\"`)}throw new Error(`Missing outlet element \"${e}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${r}\".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map((t=>{const r=getControllerAndEnsureConnectedScope(this,t,e);if(r)return r;console.warn(`The provided outlet element is missing an outlet controller \"${e}\" instance for host controller \"${this.identifier}\"`,t)})).filter((e=>e)):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e);const r=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element \"${e}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${r}\".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${capitalize(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}function TargetPropertiesBlessing(e){const t=readInheritableStaticArrayValues(e,\"targets\");return t.reduce(((e,t)=>Object.assign(e,propertiesForTargetDefinition(t))),{})}function propertiesForTargetDefinition(e){return{[`${e}Target`]:{get(){const t=this.targets.find(e);if(t)return t;throw new Error(`Missing target element \"${e}\" for \"${this.identifier}\" controller`)}},[`${e}Targets`]:{get(){return this.targets.findAll(e)}},[`has${capitalize(e)}Target`]:{get(){return this.targets.has(e)}}}}function ValuePropertiesBlessing(e){const t=readInheritableStaticObjectPairs(e,\"values\");const r={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const r=parseValueDefinitionPair(t,this.identifier);const s=this.data.getAttributeNameForKey(r.key);return Object.assign(e,{[s]:r})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,propertiesForValueDefinitionPair(t))),r)}function propertiesForValueDefinitionPair(e,t){const r=parseValueDefinitionPair(e,t);const{key:s,name:n,reader:i,writer:o}=r;return{[n]:{get(){const e=this.data.get(s);return null!==e?i(e):r.defaultValue},set(e){void 0===e?this.data.delete(s):this.data.set(s,o(e))}},[`has${capitalize(n)}`]:{get(){return this.data.has(s)||r.hasCustomDefaultValue}}}}function parseValueDefinitionPair([e,t],r){return valueDescriptorForTokenAndTypeDefinition({controller:r,token:e,typeDefinition:t})}function parseValueTypeConstant(e){switch(e){case Array:return\"array\";case Boolean:return\"boolean\";case Number:return\"number\";case Object:return\"object\";case String:return\"string\"}}function parseValueTypeDefault(e){switch(typeof e){case\"boolean\":return\"boolean\";case\"number\":return\"number\";case\"string\":return\"string\"}return Array.isArray(e)?\"array\":\"[object Object]\"===Object.prototype.toString.call(e)?\"object\":void 0}function parseValueTypeObject(e){const{controller:t,token:r,typeObject:s}=e;const n=isSomething(s.type);const i=isSomething(s.default);const o=n&&i;const c=n&&!i;const l=!n&&i;const h=parseValueTypeConstant(s.type);const u=parseValueTypeDefault(e.typeObject.default);if(c)return h;if(l)return u;if(h!==u){const e=t?`${t}.${r}`:r;throw new Error(`The specified default value for the Stimulus Value \"${e}\" must match the defined type \"${h}\". The provided default value of \"${s.default}\" is of type \"${u}\".`)}return o?h:void 0}function parseValueTypeDefinition(e){const{controller:t,token:r,typeDefinition:s}=e;const n={controller:t,token:r,typeObject:s};const i=parseValueTypeObject(n);const o=parseValueTypeDefault(s);const c=parseValueTypeConstant(s);const l=i||o||c;if(l)return l;const h=t?`${t}.${s}`:r;throw new Error(`Unknown value type \"${h}\" for \"${r}\" value`)}function defaultValueForDefinition(e){const t=parseValueTypeConstant(e);if(t)return c[t];const r=hasProperty(e,\"default\");const s=hasProperty(e,\"type\");const n=e;if(r)return n.default;if(s){const{type:e}=n;const t=parseValueTypeConstant(e);if(t)return c[t]}return e}function valueDescriptorForTokenAndTypeDefinition(e){const{token:t,typeDefinition:r}=e;const s=`${dasherize(t)}-value`;const n=parseValueTypeDefinition(e);return{type:n,key:s,name:camelize(s),get defaultValue(){return defaultValueForDefinition(r)},get hasCustomDefaultValue(){return void 0!==parseValueTypeDefault(r)},reader:l[n],writer:h[n]||h.default}}const c={get array(){return[]},boolean:false,number:0,get object(){return{}},string:\"\"};const l={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type \"array\" but instead got value \"${e}\" of type \"${parseValueTypeDefault(t)}\"`);return t},boolean(e){return!(\"0\"==e||\"false\"==String(e).toLowerCase())},number(e){return Number(e.replace(/_/g,\"\"))},object(e){const t=JSON.parse(e);if(null===t||\"object\"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type \"object\" but instead got value \"${e}\" of type \"${parseValueTypeDefault(t)}\"`);return t},string(e){return e}};const h={default:writeString,array:writeJSON,object:writeJSON};function writeJSON(e){return JSON.stringify(e)}function writeString(e){return`${e}`}class Controller{constructor(e){this.context=e}static get shouldLoad(){return true}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:r={},prefix:s=this.identifier,bubbles:n=true,cancelable:i=true}={}){const o=s?`${s}:${e}`:e;const c=new CustomEvent(o,{detail:r,bubbles:n,cancelable:i});t.dispatchEvent(c);return c}}Controller.blessings=[ClassPropertiesBlessing,TargetPropertiesBlessing,ValuePropertiesBlessing,OutletPropertiesBlessing];Controller.targets=[];Controller.outlets=[];Controller.values={};export{Application,AttributeObserver,Context,Controller,ElementObserver,IndexedMultimap,Multimap,SelectorObserver,StringMapObserver,TokenListObserver,ValueListObserver,add,o as defaultSchema,del,fetch,prune};\n\n"
  },
  {
    "path": "spec/support/test_app/vendor/javascript/@stimulus-components--rails-nested-form.js",
    "content": "import{Controller as e}from\"@hotwired/stimulus\";const t=class _RailsNestedForm extends e{add(e){e.preventDefault();const t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,(new Date).getTime().toString());this.targetTarget.insertAdjacentHTML(\"beforebegin\",t);const r=new CustomEvent(\"rails-nested-form:add\",{bubbles:!0});this.element.dispatchEvent(r)}remove(e){e.preventDefault();const t=e.target.closest(this.wrapperSelectorValue);if(t.dataset.newRecord===\"true\")t.remove();else{t.style.display=\"none\";const e=t.querySelector(\"input[name*='_destroy']\");e.value=\"1\"}const r=new CustomEvent(\"rails-nested-form:remove\",{bubbles:!0});this.element.dispatchEvent(r)}};t.targets=[\"target\",\"template\"],t.values={wrapperSelector:{type:String,default:\".nested-form-wrapper\"}};let r=t;export{r as default};\n\n"
  },
  {
    "path": "spec/support/test_app/vendor/javascript/jquery.ui.datepicker.locales.js",
    "content": "﻿$.datepicker.regional['en'] = {\n\tcloseText: 'Done',\n\tprevText: 'Prev',\n\tnextText: 'Next',\n\tcurrentText: 'Today',\n\tmonthNames: ['January','February','March','April','May','June',\n\t'July','August','September','October','November','December'],\n\tmonthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\n\t'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n\tdayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n\tdayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n\tdayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],\n\tweekHeader: 'Wk',\n\tdateFormat: 'dd/mm/yy',\n\tfirstDay: 1,\n\tisRTL: false,\n\tshowMonthAfterYear: false,\n\tyearSuffix: ''};\n\n$.datepicker.regional['fr'] = {\n\tcloseText: 'Fermer',\n\tprevText: '&#x3c;Préc',\n\tnextText: 'Suiv&#x3e;',\n\tcurrentText: 'Courant',\n\tmonthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',\n\t'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],\n\tmonthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',\n\t'Jul','Aoû','Sep','Oct','Nov','Déc'],\n\tdayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],\n\tdayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],\n\tdayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],\n\tweekHeader: 'Sm',\n\tdateFormat: 'dd/mm/yy',\n\tfirstDay: 1,\n\tisRTL: false,\n\tshowMonthAfterYear: false,\n\tyearSuffix: ''};\n\n$.datepicker.regional.nl = {\n\tcloseText: 'Sluiten',\n\tprevText: '←',\n\tnextText: '→',\n\tcurrentText: 'Vandaag',\n\tmonthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',\n\t'juli', 'augustus', 'september', 'oktober', 'november', 'december'],\n\tmonthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',\n\t'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n\tdayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],\n\tdayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],\n\tdayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n\tweekHeader: 'Wk',\n\tdateFormat: 'dd/mm/yy',\n\tfirstDay: 1,\n\tisRTL: false,\n\tshowMonthAfterYear: false,\n\tyearSuffix: ''};\n"
  },
  {
    "path": "spec/support/test_app/vendor/javascript/reload_on_change.js",
    "content": "const init = () => $(\"select.reload-on-change\").change(function() {\n  this.form.submit();\n});\n\n$(document).on('turbo:load', init);\n"
  },
  {
    "path": "spec/wice/grid_output_buffer_spec.rb",
    "content": "describe Wice::GridOutputBuffer do\n  subject(:buffer){Wice::GridOutputBuffer.new}\n  let(:key) {'key'}\n  let(:filter_code) {'here filter code'}\n  describe '#to_s' do\n    subject(:method_to_s) {buffer.to_s}\n\n    it 'has class ActiveSupport::SafeBuffer' do\n      is_expected.to be_an ActiveSupport::SafeBuffer\n    end\n  end\n\n  describe '#add_filter(key, filter_code)' do\n    subject(:add_filter) {buffer.add_filter key, filter_code}\n\n    it 'returns filter_code' do\n      is_expected.to be filter_code\n    end\n  end\n  describe '#filter_for(key)' do\n    subject(:filter_for) {buffer.filter_for key}\n    before do\n      buffer.return_empty_strings_for_nonexistent_filters = false\n    end\n\n    context 'when #add_filter has been called with the key' do\n      before do\n        buffer.add_filter(key, filter_code)\n      end\n\n      it 'returns the code saved under the key' do\n        is_expected.to be filter_code\n      end\n\n      it 'removes the code and railses Wice::WiceGridException when called again' do\n        buffer.filter_for key\n        expect { filter_for }.to raise_error Wice::WiceGridException\n      end\n    end\n\n    context 'when #add_filter has not been called with the key' do\n      it 'railses Wice::WiceGridException' do\n        expect { filter_for }.to raise_error Wice::WiceGridException\n      end\n\n      context 'when #return_empty_strings_for_nonexistent_filters is set to true' do\n        before do\n          buffer.return_empty_strings_for_nonexistent_filters = true\n        end\n\n        it 'returns empty string' do\n          is_expected.to eq ''\n        end\n      end\n    end\n  end\nend\n"
  },
  {
    "path": "spec/wice/table_column_matrix_spec.rb",
    "content": "describe Wice::TableColumnMatrix do\n  subject(:table) {Wice::TableColumnMatrix.new}\n  let(:conditions) {'general_conditions'}\n  let(:column) {'key'}\n  let(:model) {Dummy}\n  let(:column_name) {:name}\n\n  describe '#add_condition(column, conditions)' do\n    subject(:add_condition) {table.add_condition column, conditions}\n\n    it 'adds the pair column, conditions to #generated_conditions' do\n      expect{add_condition}.to change(table.generated_conditions, :size).by 1\n      expect(table.generated_conditions.last).to eq [column, conditions]\n    end\n\n    it 'adds conditions to #conditions' do\n      expect(table.conditions).to eq []\n      add_condition\n      expect(table.conditions).to eq [conditions]\n    end\n  end\n\n  describe 'default_model_class=(model)' do\n    subject(:set_default_model_class) {table.default_model_class = model}\n\n    it 'assingns model to #default_model_class' do\n      expect{set_default_model_class}.to change(table, :default_model_class).to model\n    end\n\n    it 'calls #init_columns_of_table with model' do\n      expect(table).to receive(:init_columns_of_table).with model\n      set_default_model_class\n    end\n  end\n\n  describe '#get_column_by_model_class_and_column_name(model_class, column_name)' do\n    before do\n      table.default_model_class = model\n    end\n\n    subject(:get_column_by_model_class_and_column_name) do\n      table.get_column_by_model_class_and_column_name model, column_name\n    end\n\n    it 'returns an instace of ActiveRecord::ConnectionAdapters::Column' do\n      is_expected.to be_an ActiveRecord::ConnectionAdapters::Column\n    end\n  end\n\n  describe '#get_column_in_default_model_class_by_column_name(column_name)' do\n    subject(:get_column_in_default_model_class_by_column_name) do\n      table.get_column_in_default_model_class_by_column_name column_name\n    end\n\n    context 'when #default_model_class is defined' do\n      before do\n        table.default_model_class = model\n      end\n\n      it 'returns an instace of ActiveRecord::ConnectionAdapters::Column' do\n        is_expected.to be_an ActiveRecord::ConnectionAdapters::Column\n      end\n    end\n\n    context 'when #default_model_class is undefined' do\n      it 'raises Wice::WiceGridException' do\n        expect{subject}.to raise_error Wice::WiceGridException\n      end\n    end\n  end\n\n  describe '#get_column_by_model_class_and_column_name(model_class, column_name)' do\n    before do\n      table.default_model_class = model\n    end\n\n    subject(:get_column_by_model_class_and_column_name) do\n      table.get_column_by_model_class_and_column_name model, column_name\n    end\n\n    it 'returns an instace of ActiveRecord::ConnectionAdapters::Column' do\n      is_expected.to be_an ActiveRecord::ConnectionAdapters::Column\n    end\n  end\nend\n"
  },
  {
    "path": "spec/wice/wice_grid_misc_spec.rb",
    "content": "describe Wice do\n  describe 'class method' do\n    describe '::assoc_list_to_hash(assocs)' do\n      subject(:assoc_list_to_hash) {described_class.assoc_list_to_hash assocs}\n\n      context 'when assocs size is 1' do\n        let(:assocs) {[:foo1]}\n\n        it 'it returns the first element' do\n          is_expected.to be :foo1\n        end\n      end\n\n      context 'when assocs size is 2' do\n        let(:assocs) {%i[foo1 foo2]}\n\n        it 'it returns the the Hash with the key of the first element and the value of the second' do\n          is_expected.to eq(foo1: :foo2)\n        end\n      end\n\n      context 'when assocs size > 2' do\n        let(:assocs) {%i[foo1 foo2 foo3 foo4 foo5]}\n\n        it 'it returns the the Hash with the key of the first element and the value as the result of ::assoc_list_to_hash called with the assocs without the first itemd' do\n          is_expected.to eq(foo1: {foo2: {foo3: {foo4: :foo5}}})\n        end\n      end\n    end\n\n    describe '::build_includes((existing_includes, new_assocs))' do\n      subject(:build_includes) do\n        described_class.build_includes existing_includes, new_assocs\n      end\n      let(:existing_includes) {original_includes.dup}\n      let(:original_includes) {[:a, :b, :c, :d, :e]}\n      let(:new_assocs) {[:b]}\n\n      it 'calls ::assoc_list_to_hash with new_assocs' do\n        expect(described_class).to receive(:assoc_list_to_hash).with(new_assocs)\n            .and_call_original\n        build_includes\n      end\n\n      context 'when existing_includes is an Array of Symbols' do\n        context 'and new_assocs is an Array of one Symbol that is present in existing_includes' do\n          it 'does not change existing_includes' do\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns existing_includes' do\n            is_expected.to eq original_includes\n          end\n        end\n\n        context 'and new_assocs is an Array of one Symbol that is not present in existing_includes' do\n          let(:new_assocs) {[:x]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'adds new_assocs to existing_includes' do\n            is_expected.to eq original_includes + new_assocs\n          end\n\n          it 'returns the updated existing_includes' do\n            is_expected.to eq original_includes + new_assocs\n          end\n        end\n\n        context 'and new_assocs is an Array of two Symbols the first of which is not present in existing_includes' do\n          let(:new_assocs) {[:x, :b]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns existing_includes + a Hash built of the new_assocs by ::assoc_list_to_hash' do\n            is_expected.to eq existing_includes + [{x: :b}]\n          end\n        end\n\n        context 'and new_assocs is an Array of two Symbols the first of which is  present in existing_includes and the second one is not' do\n          let(:new_assocs) {[:b, :x]}\n\n          it 'changes existing_includes' do\n            build_includes\n            expect(existing_includes).not_to eq original_includes\n          end\n\n          it 'replaces the present symbol in existing_includes with ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq [:a, {:b=>:x}, :c, :d, :e]\n          end\n\n          it 'returns the updated existing_includes' do\n            is_expected.to be existing_includes\n          end\n        end\n      end   # when existing_includes is an Array of Symbols\n\n      context 'when existing_includes is an Array that contains a Hash' do\n        let(:original_includes) {[{a: :x}, :b, :c, :d, :e]}\n\n        context 'and new_assocs is an Array of one Symbol that is present in existing_includes' do\n          it 'does not change existing_includes' do\n            expect(build_includes).to eq original_includes\n          end\n\n          it 'returns existing_includes' do\n            is_expected.to eq original_includes\n          end\n        end\n\n        context 'and new_assocs is an Array of two Symbols the first of which is  the key of the hash' do\n          let(:new_assocs) {[:a, :x]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'replaces the present symbol in existing_includes with ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq [{a: :x}, :b, :c, :d, :e]\n          end\n\n          it 'returns the existing_includes' do\n            is_expected.to be existing_includes\n          end\n        end\n\n        context 'and new_assocs is an Array of size > 2 where the first and the second items are the key and the value of the Hash in existing_includes' do\n          let(:new_assocs) {[:a, :x, :y]}\n\n          it 'changes existing_includes' do\n            build_includes\n            expect(existing_includes).not_to eq original_includes\n          end\n\n          it 'replaces the present the hash in existing_includes with ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq [{a: {x: :y}}, :b, :c, :d, :e]\n          end\n\n          it 'returns the updated existing_includes' do\n            is_expected.to be existing_includes\n          end\n        end\n      end   # when existing_includes contains a Hash\n\n      context 'when existing_includes is an Array that contains only one Hash' do\n        let(:original_includes) {[a: :x]}\n\n        context 'and new_assocs is an Array of two Symbols the first of which is  the key of the hash' do\n          let(:new_assocs) {[:a, :x]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq(a: :x)\n          end\n        end\n\n        context 'and new_assocs is an Array of size > 2 where the first and the second items are the key and the value of the Hash in existing_includes' do\n          let(:new_assocs) {[:a, :x, :y]}\n\n          it 'changes existing_includes' do\n            build_includes\n            expect(existing_includes).not_to eq original_includes\n          end\n\n          it 'replaces the hash in existing_includes with ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq(a: {x: :y})\n          end\n\n          it 'returns the first element of updated existing_includes' do\n            is_expected.to be existing_includes.first\n          end\n        end\n      end   # when existing_includes contains only one Hash\n\n      context 'when existing_includes is an Array that contains only one Hash with a value as a second Hash' do\n        let(:original_includes) {[a: {x: :y}]}\n\n        context 'and new_assocs is an Array of size 3 where the first and the second items are the keys of the first and the second Hash in existing_includes but the third is not the value of the second Hash' do\n          let(:new_assocs) {[:a, :x, :z]}\n\n          it 'changes existing_includes' do\n            build_includes\n            expect(existing_includes).not_to eq original_includes\n          end\n\n          it 'replaces the value of the hash in existing_includes with an Array whre ther first item is the value in the original existing_includes second Hash and the second is the last item in new_assocs' do\n            is_expected.to eq(a: [:y, :z])\n          end\n\n          it 'returns the first element of updated existing_includes' do\n            is_expected.to be existing_includes.first\n          end\n        end\n\n        context 'and new_assocs is an Array of size 3 where the first and the second items are the keys of the first and the second Hash in existing_includes and the third is the value of the second Hash' do\n          let(:new_assocs) {[:a, :x, :y]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns the Hash of existing_includes' do\n            is_expected.to be existing_includes.first\n          end\n        end\n      end   # when existing_includes contains only one Hash with a value as a second Hash\n\n      context 'when existing_includes is an Array that contains only one Symbol' do\n        let(:original_includes) {[:b]}\n\n        context 'and new_assocs is an empty Array' do\n          let(:new_assocs) {[]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns the Symbol' do\n            is_expected.to be existing_includes.first\n          end\n        end\n      end   # when existing_includes is an Array that contains only one Symbol\n\n      context 'when existing_includes is a Symbol' do\n        let(:original_includes) {:b}\n\n        context 'and new_assocs is an empty Array' do\n          let(:new_assocs) {[]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns the Symbol' do\n            is_expected.to be existing_includes\n          end\n        end\n\n        context 'and new_assocs is an Array that does not start with the symbol' do\n          let(:new_assocs) {[:a, :x]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns an Array that contains the symbol and ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq([:b, described_class.assoc_list_to_hash(new_assocs)])\n          end\n        end\n      end   # when existing_includes is a Symbol\n\n      context 'when existing_includes is nil' do\n        let(:original_includes) {}\n\n        context 'and new_assocs is an Array' do\n          let(:new_assocs) {[:a, :x]}\n\n          it 'does not change existing_includes' do\n            build_includes\n            expect(existing_includes).to eq original_includes\n          end\n\n          it 'returns  ::assoc_list_to_hash(new_assocs)' do\n            is_expected.to eq described_class.assoc_list_to_hash(new_assocs)\n          end\n        end\n      end   # when existing_includes is nil\n    end   # ::build_includes((existing_includes, new_assocs))\n\n    describe '::get_query_store_model' do\n      subject(:get_query_store_model) {described_class.get_query_store_model}\n\n      it 'returns WiceGridSerializedQuery' do\n        is_expected.to be WiceGridSerializedQuery\n      end\n    end\n\n    describe '::get_string_matching_operators(model)' do\n      subject(:get_string_matching_operators) do\n        described_class.get_string_matching_operators model\n      end\n      let(:model) {Dummy}\n\n      it 'returns Wice::ConfigurationProvider.value_for(:STRING_MATCHING_OPERATOR)' do\n        is_expected\n            .to be Wice::ConfigurationProvider.value_for :STRING_MATCHING_OPERATOR\n      end\n    end\n  end   # class method\nend\n"
  },
  {
    "path": "spec/wice/wice_grid_spreadsheet_spec.rb",
    "content": "describe Wice::Spreadsheet do\n  subject(:spreadsheet){Wice::Spreadsheet.new('hello', ';')}\n\n  describe '#<<(row)' do\n    subject(:add_row) {spreadsheet << row}\n    let(:row) {%w(hello world!)}\n\n    it 'sends :<< to @csv' do\n      expect(spreadsheet.instance_variable_get :@csv).to receive(:<<).with row\n      add_row\n    end\n  end\nend\n"
  },
  {
    "path": "vendor/assets/javascripts/wice_grid.js",
    "content": "//= require wice_grid_processor\n//= require wice_grid_init\n//= require wice_grid_saved_queries_init\n"
  },
  {
    "path": "vendor/assets/javascripts/wice_grid_init.js.coffee",
    "content": "if Turbo?\n  $(document).on 'turbo:load', -> initWiceGrid()\nelse\n  $ -> initWiceGrid()\n  $(document).on 'turbolinks:render', -> initWiceGrid() if Turbolinks?\n\nglobalVarForAllGrids = 'wiceGrids'\n\ninitWiceGrid = ->\n  $(\".wice-grid-container\").each (index, wiceGridContainer) ->\n    gridName = wiceGridContainer.id\n    dataDiv = $(\".wg-data\", wiceGridContainer)\n    processorInitializerArguments = dataDiv.data(\"processor-initializer-arguments\")\n    filterDeclarations = dataDiv.data(\"filter-declarations\")\n    focusElementIfNeeded dataDiv.data(\"foc\")\n\n    gridProcessor = new WiceGridProcessor(gridName,\n      processorInitializerArguments[0], processorInitializerArguments[1],\n      processorInitializerArguments[2], processorInitializerArguments[3],\n      processorInitializerArguments[4], processorInitializerArguments[5])\n\n    for filterDeclaration in filterDeclarations\n      do (filterDeclaration) ->\n        if filterDeclaration?\n          gridProcessor.register\n            filterName : filterDeclaration.filterName\n            detached    : filterDeclaration.detached\n            templates   : filterDeclaration.declaration.templates\n            ids         : filterDeclaration.declaration.ids\n\n    unless window[globalVarForAllGrids]\n      window[globalVarForAllGrids] = {}\n\n    window[globalVarForAllGrids][gridName] = gridProcessor\n\n    # setting up stuff for in the context of each grid\n    setupSubmitReset                   wiceGridContainer, gridProcessor\n    setupCsvExport                     wiceGridContainer, gridProcessor\n    setupHidingShowingOfFilterRow      wiceGridContainer\n    setupShowingAllRecords             wiceGridContainer, gridProcessor\n    setupMultiSelectToggle             wiceGridContainer\n    setupAutoreloadsForInternalFilters wiceGridContainer, gridProcessor\n    setupBulkToggleForActionColumn     wiceGridContainer\n\n  setupAutoreloadsForExternalFilters()\n  setupExternalSubmitReset()\n  setupExternalCsvExport()\n  setupDatepicker()\n\n  # for all grids on oage because it does not matter which grid it is\n  setupMultiSelectToggle $('.wg-detached-filter')\n\nmoveDateBoundIfInvalidPeriod = (dataFieldNameWithTheOtherDatepicker, datepickerHiddenField, selectedDate, dateFormat, predicate) ->\n  if (datepickerId = datepickerHiddenField.data(dataFieldNameWithTheOtherDatepicker)) &&\n    (theOtherDatepicker = $(_datepickerId = \"#\" + datepickerId)) &&\n    (theOtherDate = theOtherDatepicker.datepicker('getDate')) &&\n\n    predicate(theOtherDate, selectedDate)\n      theOtherDatepicker.datepicker(\"setDate\", selectedDate)\n      theOtherDatepicker.next().next().html  $.datepicker.formatDate(dateFormat, selectedDate)\n\nsetupDatepicker = ->\n  if $('.date-filter.wg-jquery-datepicker').length != 0\n    setupJqueryUiDatepicker()\n\n  if $('.date-filter.wg-bootstrap-datepicker').length != 0\n    setupBootstrapDatepicker()\n\nsetupBootstrapDatepicker = ->\n  # check for bootstrap datepicker\n  unless $.fn.datepicker\n    alert \"\"\"Seems like you do not have Bootstrap datepicker gem (https://github.com/Nerian/bootstrap-datepicker-rails)\n      installed. Either install it pick another filter with :filter_type.\n    \"\"\"\n    return\n\n  $('.date-filter.wg-bootstrap-datepicker input:text[data-provide=datepicker]').each (index, dateField) ->\n\n    $(dateField).datepicker().on 'hide', (event) ->\n      $self = $(event.currentTarget)\n\n      eventToTriggerOnChange = $self.data('close-calendar-event-name')\n\n      if eventToTriggerOnChange\n        $self.trigger(eventToTriggerOnChange)\n\n      else if $self.attr('id').split('_').pop() == 'fr'\n        $to = $self.parent().next().find('input:text.check-for-bsdatepicker')\n        if $to.length > 0\n          $to.datepicker 'show'\n\nsetupJqueryUiDatepicker = ->\n  # check jquery ui datepickeer\n  unless $.datepicker\n    alert \"\"\"Seems like you do not have jQuery datepicker (http://jqueryui.com/demos/datepicker/)\n        installed. Either install it pick another filter with :filter_type.\n      \"\"\"\n  # setting up the locale for datepicker\n  if locale = $('.date-filter.wg-jquery-datepicker input[type=hidden]').data('locale')\n    $.datepicker.setDefaults($.datepicker.regional[locale]);\n\n  $('.date-filter.wg-jquery-datepicker .date-label').each  (index, removeLink) ->\n    datepickerHiddenField  = $('#' + $(removeLink).data('dom-id'))\n    eventToTriggerOnChange = datepickerHiddenField.data('close-calendar-event-name')\n\n    # setting up the remove link for datepicker\n    $(removeLink).click (event) ->\n      $(this).html('')\n      datepickerHiddenField.val('')\n      if eventToTriggerOnChange\n        datepickerHiddenField.trigger(eventToTriggerOnChange)\n      event.preventDefault()\n      false\n    that = this\n\n    dateFormat = datepickerHiddenField.data('date-format')\n\n    yearRange = datepickerHiddenField.data('date-year-range')\n\n    labelText = datepickerHiddenField.data('button-text')\n\n    # datepicker constructor\n    datepickerHiddenField.datepicker\n      firstDay:        1\n      dateFormat:      dateFormat\n      changeMonth:     true\n      changeYear:      true\n      yearRange:       yearRange\n\n      onSelect: (dateText, inst) ->\n\n        selectedDate = $(this).datepicker(\"getDate\")\n\n        moveDateBoundIfInvalidPeriod(\n          'the-other-datepicker-id-to',\n          datepickerHiddenField,\n          selectedDate,\n          dateFormat,\n          (theOther, selected)-> theOther < selected\n        )\n\n        moveDateBoundIfInvalidPeriod(\n          'the-other-datepicker-id-from',\n          datepickerHiddenField,\n          selectedDate,\n          dateFormat,\n          (theOther, selected)-> theOther > selected\n        )\n\n        $(that).html(dateText)\n        if eventToTriggerOnChange\n          datepickerHiddenField.trigger(eventToTriggerOnChange)\n\n    datepickerContainer = datepickerHiddenField.parent()\n\n    $(removeLink).before(\" <i class=\\\"fa fa-calendar ui-datepicker-trigger\\\" title=\\\"#{labelText}\\\" ></i> \")\n\n    newlyAdded = $('.fa-calendar', datepickerContainer)\n\n    newlyAdded.click ->\n      datepickerHiddenField.datepicker(\"show\")\n\n# hiding and showing the row with filters\nsetupHidingShowingOfFilterRow = (wiceGridContainer) ->\n  hideFilter = '.wg-hide-filter'\n  showFilter = '.wg-show-filter'\n  filterRow = '.wg-filter-row'\n\n  $(hideFilter, wiceGridContainer).click ->\n    $(this).hide()\n    $(showFilter, wiceGridContainer).show()\n    $(filterRow, wiceGridContainer).hide()\n\n  $(showFilter, wiceGridContainer).click ->\n    $(this).hide()\n    $(hideFilter, wiceGridContainer).show()\n    $(filterRow, wiceGridContainer).show()\n\nsetupCsvExport = (wiceGridContainer, gridProcessor) ->\n  $('.export-to-csv-button', wiceGridContainer).click ->\n    gridProcessor.exportToCsv()\n\n# trigger submit/reset from within the grid\nsetupSubmitReset = (wiceGridContainer, gridProcessor) ->\n  $('.submit', wiceGridContainer).click ->\n    gridProcessor.process()\n\n  $('.reset', wiceGridContainer).click ->\n    gridProcessor.reset()\n\n  $('.wg-filter-row input[type=text], .wg-filter-row input:text[data-provide=datepicker]', wiceGridContainer).keydown (event) ->\n    if event.keyCode == 13\n      event.preventDefault()\n      gridProcessor.process()\n\nSetEnd = (txt) ->\n  if txt.createTextRange\n    #IE\n    FieldRange = txt.createTextRange()\n    FieldRange.moveStart 'character', txt.value.length\n    FieldRange.collapse()\n    FieldRange.select()\n  else\n    #Firefox and Opera\n    txt.focus()\n    length = txt.value.length\n    txt.setSelectionRange length, length\n  return\n\nfocusElementIfNeeded = (focusId) ->\n  elements = $('#' + focusId)\n  if elToFocus = elements[0]\n    SetEnd elToFocus\n\n# autoreload for internal filters\nsetupAutoreloadsForInternalFilters = (wiceGridContainer, gridProcessor) ->\n  $('select.auto-reload, input.native-datepicker.auto-reload', wiceGridContainer).change ->\n    gridProcessor.process()\n\n  $('input.auto-reload', wiceGridContainer).keyup (event)->\n    if isKeySignificant event.which\n      gridProcessor.setProcessTimer(this.id)\n\n  $('input.negation-checkbox.auto-reload', wiceGridContainer).click ->\n    gridProcessor.process()\n\n  $(document).bind 'wg:calendarChanged_' + gridProcessor.name, ->\n    gridProcessor.process()\n\nisKeySignificant = (keyCode, func)->\n  [37, 38, 39, 40, 9, 27].indexOf(keyCode) == -1\n\n# autoreload for internal filters\nsetupAutoreloadsForExternalFilters =  ->\n  $('.wg-detached-filter').each (index, detachedFilterContainer) ->\n    gridProcessor = getGridProcessorForElement(detachedFilterContainer)\n    if gridProcessor\n      $('select.auto-reload, input.native-datepicker.auto-reload', detachedFilterContainer).change ->\n        gridProcessor.process()\n\n      $('input.auto-reload', detachedFilterContainer).keyup (event)->\n        if isKeySignificant event.which\n          gridProcessor.setProcessTimer(this.id)\n\n      $('input.negation-checkbox.auto-reload', detachedFilterContainer).click ->\n        gridProcessor.process()\n\n# trigger the all records mode\nsetupShowingAllRecords = (wiceGridContainer, gridProcessor) ->\n  $('.wg-show-all-link, .wg-back-to-pagination-link', wiceGridContainer).click (event) ->\n    event.preventDefault()\n    gridState = $(this).data(\"grid-state\")\n    confirmationMessage = $(this).data(\"confim-message\")\n    reloadGrid = ->\n      gridProcessor.reloadPageForGivenGridState gridState\n    if confirmationMessage\n      if confirm(confirmationMessage)\n        reloadGrid()\n    else\n      reloadGrid()\n\n# dropdown filter multiselect\nsetupMultiSelectToggle = (wiceGridContainer)->\n  $('.expand-multi-select-icon', wiceGridContainer).click ->\n    $(this).prev().each (index, select) ->\n      select.multiple = true\n    $(this).next().show()\n    $(this).hide()\n\n  $('.collapse-multi-select-icon', wiceGridContainer).click ->\n    $(this).prev().prev().each (index, select) ->\n      select.multiple = false\n    $(this).prev().show()\n    $(this).hide()\n\nsetupBulkToggleForActionColumn = (wiceGridContainer) ->\n  $('.select-all', wiceGridContainer).click ->\n    $('.sel input', wiceGridContainer).prop('checked', true).trigger('change')\n\n  $('.deselect-all', wiceGridContainer).click ->\n    $('.sel input', wiceGridContainer).prop('checked', false).trigger('change')\n\n  $('.wg-select-all', wiceGridContainer).click ->\n    $('.sel input', wiceGridContainer).prop('checked', $(this).prop('checked')).trigger('change')\n\ngetGridProcessorForElement = (element) ->\n  gridName = $(element).data('grid-name')\n  if gridName && window[globalVarForAllGrids]\n    window[globalVarForAllGrids][gridName]\n  else\n    null\n\nsetupExternalCsvExport =  ->\n  $(\".wg-external-csv-export-button\").each (index, externalCsvExportButton) ->\n    gridProcessor = getGridProcessorForElement(externalCsvExportButton)\n    if gridProcessor\n      $(externalCsvExportButton).click (event) ->\n        gridProcessor.exportToCsv()\n\nsetupExternalSubmitReset =  ->\n  $(\".wg-external-submit-button\").each (index, externalSubmitButton) ->\n    gridProcessor = getGridProcessorForElement(externalSubmitButton)\n    if gridProcessor\n      $(externalSubmitButton).click (event) ->\n        gridProcessor.process()\n        event.preventDefault()\n        false\n\n  $(\".wg-external-reset-button\").each (index, externalResetButton) ->\n    gridProcessor = getGridProcessorForElement(externalResetButton)\n    if gridProcessor\n      $(externalResetButton).click (event) ->\n        gridProcessor.reset()\n        event.preventDefault()\n        false\n\n  $('.wg-detached-filter').each (index, detachedFilterContainer) ->\n    gridProcessor = getGridProcessorForElement(detachedFilterContainer)\n    if gridProcessor\n      $('input[type=text], input:text[data-provide=datepicker]', this).keydown (event) ->\n        if event.keyCode == 13\n          gridProcessor.process()\n          event.preventDefault()\n          false\n\nwindow['getGridProcessorForElement'] = getGridProcessorForElement\nwindow['initWiceGrid'] = initWiceGrid\n"
  },
  {
    "path": "vendor/assets/javascripts/wice_grid_processor.js.coffee",
    "content": "class WiceGridProcessor\n  constructor: (@name, @baseRequestForFilter, @baseLinkForShowAllRecords, @linkForExport, @parameterNameForQueryLoading, @parameterNameForFocus, @environment) ->\n    @filterDeclarations = new Array();\n    @checkIfJsFrameworkIsLoaded()\n\n  checkIfJsFrameworkIsLoaded :  ->\n    if ! jQuery\n      alert \"jQuery not loaded, WiceGrid cannot proceed!\"\n\n  toString :  ->\n    \"<WiceGridProcessor instance for grid '\" + @name + \"'>\"\n\n  process : (domIdToFocus)->\n    @visit @buildUrlWithParams(domIdToFocus)\n\n  visit : (path, use_turbo = true) ->\n    if Turbo? and use_turbo\n      Turbo.visit path\n    else if Turbolinks? and use_turbo\n      Turbolinks.visit path\n    else\n      window.location = path\n\n  setProcessTimer : (domIdToFocus)->\n    if @timer\n      clearTimeout(@timer)\n      @timer = null\n    processor = this\n    @timer = setTimeout(\n      -> processor.process(domIdToFocus)\n      1000\n    )\n\n  reloadPageForGivenGridState : (gridState)->\n    requestPath = @gridStateToRequest(gridState)\n    @visit @appendToUrl(@baseLinkForShowAllRecords, requestPath)\n\n  gridStateToRequest : (gridState)->\n    jQuery.map(\n      gridState\n      (pair) -> encodeURIComponent(pair[0]) + '=' + encodeURIComponent(pair[1])\n    ).join('&')\n\n  appendToUrl : (url, str)->\n    sep = if url.indexOf('?') != -1\n      if /[&\\?]$/.exec(url)\n        ''\n      else\n        '&'\n    else\n      '?'\n    url + sep + str\n\n  buildUrlWithParams : (domIdToFocus)->\n    results = new Array()\n    jQuery.each(\n      @filterDeclarations\n      (i, filterDeclaration)=>\n        param = @readValuesAndFormQueryString(filterDeclaration.filterName, filterDeclaration.detached, filterDeclaration.templates, filterDeclaration.ids)\n\n        if param && param != ''\n          results.push(param)\n    )\n\n    res = @baseRequestForFilter\n    if  results.length != 0\n      allFilterParams = results.join('&')\n      res = @appendToUrl(res, allFilterParams)\n\n    if domIdToFocus\n      res = @appendToUrl(res, @parameterNameForFocus + domIdToFocus)\n    res\n\n  reset : ->\n    @visit @baseRequestForFilter\n\n  exportToCsv : ->\n    @visit @linkForExport, false\n\n  register : (func)->\n    @filterDeclarations.push(func)\n\n  readValuesAndFormQueryString : (filterName, detached, templates, ids)->\n    res = new Array()\n\n    for i in [0 .. templates.length-1]\n\n      if $(ids[i]) == null\n        if this.environment == \"development\"\n          message = 'WiceGrid: Error reading state of filter \"' + filterName + '\". No DOM element with id \"' + ids[i] + '\" found.'\n          if detached\n            message += 'You have declared \"' + filterName + '\" as a detached filter but have not output it anywhere in the template. Read documentation about detached filters.'\n          alert(message);\n        return ''\n\n      el = $('#' + ids[i])\n\n      if el[0] && el[0].type == 'checkbox'\n        if el[0].checked\n          val = 1;\n      else\n        val = el.val()\n\n      if val instanceof Array\n        for j in [0 .. val.length-1]\n          if val[j] && val[j] != \"\"\n            res.push(templates[i] + encodeURIComponent(val[j]))\n\n      else if val &&  val != ''\n        res.push(templates[i]  + encodeURIComponent(val));\n    res.join('&');\n\n  this\n\nWiceGridProcessor._version = '3.4'\n\nwindow['WiceGridProcessor'] = WiceGridProcessor\n"
  },
  {
    "path": "vendor/assets/javascripts/wice_grid_saved_queries_init.js.coffee",
    "content": "if Turbo?\n  $(document).on 'turbo:load', -> savedQueriesInit()\nelse\n  $(document).on 'page:load ready', -> savedQueriesInit()\n  $(document).on 'turbolinks:render', -> savedQueriesInit() if Turbolinks?\n\nsavedQueriesInit = ->\n  $('.wice-grid-save-query-field').keydown (event) ->\n    if event.keyCode == 13\n      saveQuery($(this).next(), event)\n  $(\".wice-grid-save-query-button\").click (event) ->\n    saveQuery(this, event)\n  $(\".wice-grid-delete-query\").click (event) ->\n    deleteQuery(this, event)\n  $(\".wice-grid-query-load-link\").click (event) ->\n    loadQuery(this, event)\n\nloadQuery = (loadLink, event) ->\n  if gridProcessor = window.getGridProcessorForElement(loadLink)\n    queryId = $(loadLink).data('query-id')\n\n    request = gridProcessor.appendToUrl(\n      gridProcessor.buildUrlWithParams(),\n      gridProcessor.parameterNameForQueryLoading +  encodeURIComponent(queryId)\n    )\n    gridProcessor.visit request\n  event.preventDefault()\n  event.stopPropagation()\n  false\n\ndeleteQuery = (deleteQueryButton, event) ->\n  confirmation = $(deleteQueryButton).data('wg-confirm')\n\n  invokeConfirmation = if confirmation\n    -> confirm(confirmation)\n  else\n    -> true\n\n  if invokeConfirmation() && (gridProcessor = window.getGridProcessorForElement(deleteQueryButton))\n\n    jQuery.ajax\n      url: $(deleteQueryButton).attr('href')\n      async: true\n      dataType: 'json'\n      success:  (data, textStatus, jqXHR) ->\n        onChangeToQueryList(data, gridProcessor.name)\n      type: 'POST'\n  event.preventDefault()\n  event.stopPropagation()\n  false\n\nsaveQuery = (saveQueryButton, event) ->\n  if gridProcessor = window.getGridProcessorForElement(saveQueryButton)\n    _saveQueryButton = $(saveQueryButton)\n    basePathToQueryController = _saveQueryButton.data('base-path-to-query-controller')\n    gridState                 = _saveQueryButton.data('parameters')\n    inputIds                  = _saveQueryButton.data('ids')\n    inputField                = _saveQueryButton.prev()\n\n    if inputIds instanceof Array\n      inputIds.each (domId) ->\n        gridState.push(['extra[' + domId + ']', $('#'+ domId).val()])\n\n    queryName = inputField.val()\n\n    requestPath = gridProcessor.gridStateToRequest(gridState)\n\n    jQuery.ajax\n      url: basePathToQueryController\n      async: true\n      data: requestPath + '&query_name=' + encodeURIComponent(queryName)\n      dataType: 'json'\n      success:  (data, textStatus, jqXHR) ->\n        onChangeToQueryList(data, gridProcessor.name, queryName, inputField)\n      type: 'POST'\n\n    event.preventDefault()\n    false\n\nonChangeToQueryList = (data, gridName, queryName, inputField) ->\n  notificationMessagesDomId = \"##{gridName}_notification_messages\"\n  gridTitleId  = \"##{gridName}_title\"\n  queryListId  = \"##{gridName}_query_list\"\n  inputField.val('') if queryName\n  if errorMessages = data['error_messages']\n    $(notificationMessagesDomId).text(errorMessages)\n  else\n    if notificationMessages = data['notification_messages']\n      $(notificationMessagesDomId).text(notificationMessages)\n    $(gridTitleId).html(\"<h3>#{queryName}</h3>\") if queryName\n    $(queryListId).replaceWith(data['query_list'])\n    $(queryListId).effect('highlight') if jQuery.ui\n\n    $(\".wice-grid-delete-query\", $(queryListId)).click (event) ->\n      deleteQuery(this, event)\n\n    $(\".wice-grid-query-load-link\", $(queryListId)).click (event) ->\n      loadQuery(this, event)\n"
  },
  {
    "path": "vendor/assets/stylesheets/wice_grid.scss",
    "content": "/*!\n * WiceGrid CSS\n *\n * @import \"font-awesome\"\n */\n//@import \"font-awesome-sprockets\";\n@import \"font-awesome\";\n\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/core\"\n */\n@import \"jquery-ui/core\";\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/theme\"\n */\n@import \"jquery-ui/theme\";\n/*!\n * WiceGrid CSS\n *\n * @import \"jquery-ui/datepicker\"\n */\n@import \"jquery-ui/datepicker\";\n\n//@import \"jquery-ui\";\n/*!\n * WiceGrid CSS\n *\n * self\n */\n.wg-detached-filter, .wice-grid{\n\n  .text-filter-container {\n    input{\n      width:auto;\n      margin-right: 10px;\n      display: inline;\n    }\n  }\n\n  thead th select {\n    display: inline-block;\n  }\n\n  a.date-label {text-decoration: none;}\n  a.date-label:hover {text-decoration: line-through;}\n\n  .clickable{\n    cursor: pointer;\n    margin-bottom: 2px;\n    margin-right: 2px;\n  }\n\n  .ui-datepicker-trigger, .wg-detached-filter .ui-datepicker-trigger{\n    cursor: pointer;\n  }\n\n  .custom-dropdown-container {\n\n    .expand-multi-select-icon, .collapse-multi-select-icon{\n      width: 10px;\n      height: 10px;\n      display: inline-block;\n      margin-left: 5px;\n      vertical-align: top;\n    }\n  }\n}\n\n.wice-grid{\n\n  .desc,  .asc{\n    padding-right: 18px;\n    text-decoration:none;\n  }\n\n  .clickable.select-all, .clickable.deselect-all{\n    float:left;\n  }\n\n  /* in case of twitter bootstrap :) */\n  thead th select{\n    width: auto;\n  }\n\n  .pagination{\n    margin: 0px;\n    float: left;\n  }\n\n  tr.wg-filter-row  input[type=text] {\n    width: 100px;\n  }\n\n  .pagination_status {\n    font-weight: bold;\n    float: right;\n  }\n}\n\n.wice-grid-query-panel{\n  li {list-style-type: none; }\n\n  ul {margin-left: 0 }\n}\n\ninput.wice-grid-save-query-field{\n  width: auto;\n  display: inline-block;\n  margin-right: 10px;\n}\n"
  },
  {
    "path": "wice_grid.gemspec",
    "content": "Gem::Specification.new do |s|\n  s.name          = 'wice_grid'\n  s.version       = '7.1.4'\n  s.authors       = ['Yuri Leikind, Dimitri Kulk, and contributors']\n  s.email         = ['dim.kulk@gmail.com']\n  s.homepage      = 'https://github.com/leikind/wice_grid'\n  s.summary       = 'A Rails grid plugin to quickly create grids with sorting, pagination, and filters.'\n  s.description   = 'A Rails grid plugin to create grids with sorting, pagination, and filters generated automatically based on column types. ' \\\n    'The contents of the cell are up for the developer, just like one does when rendering a collection via a simple table. ' \\\n    'WiceGrid automates implementation of filters, ordering, paginations, CSV export, and so on. ' \\\n    'Ruby blocks provide an elegant means for this.'\n\n  s.files         = `git ls-files`.split $INPUT_RECORD_SEPARATOR\n  s.license       = 'MIT'\n  s.require_paths = ['lib']\n  s.date          = `date +%Y-%m-%d`\n\n  s.add_dependency 'rails', '~> 8.0'\n  s.add_dependency 'kaminari'\n  s.add_dependency 'coffee-rails', '>= 5.0.0'\n  s.add_dependency 'jquery-rails'\n\n  s.add_development_dependency 'appraisal'\n  s.add_development_dependency 'byebug'\n  s.add_development_dependency 'capybara'\n  s.add_development_dependency 'capybara-screenshot'\n  s.add_development_dependency 'csv'\n  s.add_development_dependency 'faker'\n  s.add_development_dependency 'phantomjs', '>= 2.1.1'\n  s.add_development_dependency 'poltergeist'\n  s.add_development_dependency 'rake'\n  s.add_development_dependency 'rspec'\n  s.add_development_dependency 'rspec-rails'\n  s.add_development_dependency 'selenium-webdriver'\n  s.add_development_dependency 'shoulda-matchers'\n\n  # Required by the test app.\n  s.add_development_dependency 'bootstrap'\n  s.add_development_dependency 'bundler'\n  s.add_development_dependency 'coderay'\n  s.add_development_dependency 'dartsass-rails'\n  s.add_development_dependency 'font-awesome-sass'\n  s.add_development_dependency 'guard-rspec'\n  s.add_development_dependency 'haml'\n  s.add_development_dependency 'inch'\n  s.add_development_dependency 'importmap-rails'\n  s.add_development_dependency 'jquery-ui-rails'\n  s.add_development_dependency 'jquery-ui-themes'\n  s.add_development_dependency 'rdoc'\n  s.add_development_dependency 'simplecov'\n  s.add_development_dependency 'sprockets-rails'\n  s.add_development_dependency 'stimulus-rails'\n  s.add_development_dependency 'sqlite3', '~> 1.4'\n  s.add_development_dependency 'therubyracer'\n  s.add_development_dependency 'turbo-rails'\n  s.add_development_dependency 'yard'\nend\n"
  }
]