[
  {
    "path": ".gitignore",
    "content": "*.class\n*.log\n\n# sbt specific\n.cache/\n.history/\n.lib/\ndist/*\ntarget/\nlib_managed/\nsrc_managed/\nproject/boot/\nproject/plugins/project/\n\n# Scala-IDE specific\n.scala_dependencies\n.worksheet\n\n# Ensime\n.ensime\n.ensime_cache\n\n# Intellij\n.idea/\n*.iml\n*.iws\n\n# Mac\n.DS_Store\n\n# Auto-generated files\n.scalafmt.conf\nscalastyle-config.xml\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: scala\ndist: trusty\nsudo: false\ncache:\n  directories:\n    - $HOME/.ivy2/cache\n    - $HOME/.sbt/boot/\n    - $HOME/.cache/coursier\nbefore_cache:\n  # Tricks to avoid unnecessary cache updates\n  - find $HOME/.ivy2 -name \"ivydata-*.properties\" -delete\n  - find $HOME/.sbt -name \"*.lock\" -delete\nscala:\n  - 2.12.8\njdk:\n  - oraclejdk8\nscript:\n  - sbt makeSite\n"
  },
  {
    "path": "LICENSE",
    "content": "Attribution 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n\twiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n\twiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution 4.0 International Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution 4.0 International Public License (\"Public License\"). To the\nextent this Public License may be interpreted as a contract, You are\ngranted the Licensed Rights in consideration of Your acceptance of\nthese terms and conditions, and the Licensor grants You such rights in\nconsideration of benefits the Licensor receives from making the\nLicensed Material available under these terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Adapter's License means the license You apply to Your Copyright\n     and Similar Rights in Your contributions to Adapted Material in\n     accordance with the terms and conditions of this Public License.\n\n  c. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  d. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  e. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  f. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  g. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  h. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part; and\n\n            b. produce, reproduce, and Share Adapted Material.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material (including in modified\n          form), You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n       4. If You Share Adapted Material You produce, the Adapter's\n          License You apply must not prevent recipients of the Adapted\n          Material from complying with this Public License.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n"
  },
  {
    "path": "README.md",
    "content": "# Building the site\n\n## Required tools\n\nThe following tools are needed to build the site:\n* [sbt], to compile and assemble all examples\n* [jekyll], to turn the output into a static site\n\n## Steps\n\nYou first need to run all pages through the amazing [mdoc](https://github.com/scalameta/mdoc) to make sure all examples are valid:\n\n```shell\nsbt makeSite\n```\n\nThis will generate [jekyll] sources in `./target/site`. For local development / browsing, the simplest thing to do is to run the following from `./target/site`:\n\n```shell\njekyll serve --watch -c _config.yml --baseurl \"\"\n```\n\nThis will make the entire site available on `http://localhost:4000`.\n\n[jekyll]:https://jekyllrb.com/\n[sbt]:https://www.scala-sbt.org/\n"
  },
  {
    "path": "build.sbt",
    "content": "enablePlugins(MdocSitePlugin, GhpagesPlugin)\n\nscalaVersion              :=  \"2.12.8\"\nscalacOptions             ++= Seq(\"-feature\", \"-language:implicitConversions\", \"-language:reflectiveCalls\")\nmdocIn                    :=  (sourceDirectory in Compile).value / \"mdoc\"\nmdocExtraArguments        +=  \"--no-link-hygiene\"\nincludeFilter in makeSite :=  \"*.yml\" | \"*.md\" | \"*.html\" | \"*.css\" | \"*.png\" | \"*.jpg\" | \"*.gif\" | \"*.js\" | \"*.eot\" | \"*.svg\" | \"*.ttf\" | \"*.woff\" | \"*.woff2\" | \"*.otf\"\ngit.remoteRepo            :=  \"git@github.com:nrinaudo/scala-best-practices.git\"\nghpagesNoJekyll           :=  false\n"
  },
  {
    "path": "project/MdocSitePlugin.scala",
    "content": "import com.typesafe.sbt.site.SitePlugin.autoImport._\nimport mdoc.MdocPlugin, MdocPlugin.autoImport._\nimport sbt._, Keys._\nimport sbt.plugins.{JvmPlugin, SbtPlugin}\n\n/** Provides glue to integrate mdoc with sbt-site. */\nobject MdocSitePlugin extends AutoPlugin {\n  override def trigger = allRequirements\n\n  override def requires = JvmPlugin && MdocPlugin\n\n  object autoImport {\n    val mdocSite    = taskKey[Seq[(File, String)]](\"create mdoc documentation in a way that lets sbt-site grab it\")\n    val mdocSiteOut = settingKey[String](\"name of the directory in which sbt-site will store mdoc documentation\")\n  }\n\n  import autoImport._\n\n  override def projectSettings: Seq[Setting[_]] = Seq(\n    mdocSite := {\n      mdoc.toTask(\" \").value\n      val out = mdocOut.value\n      for {\n        (file, name) <- out ** AllPassFilter --- out pair Path.relativeTo(out)\n      } yield file -> name\n    },\n    mdocSiteOut := \"./\",\n    addMappingsToSiteDir(mdocSite, mdocSiteOut)\n  )\n}\n"
  },
  {
    "path": "project/build.properties",
    "content": "sbt.version=1.2.6\n"
  },
  {
    "path": "project/plugins.sbt",
    "content": "addSbtPlugin(\"org.scalameta\"    % \"sbt-mdoc\"    % \"1.2.7\")\naddSbtPlugin(\"com.typesafe.sbt\" % \"sbt-site\"    % \"1.3.2\")\naddSbtPlugin(\"com.typesafe.sbt\" % \"sbt-ghpages\" % \"0.6.2\")\n"
  },
  {
    "path": "src/main/mdoc/_adts/data_constructors_in_companion_object.md",
    "content": "---\ntitle: Declare ADT data constructors in the companion object\nlayout: article\n---\n\n> When writing the various data constructors of an [ADT], put them in the companion object of the root type rather than at the top level.\n\nFor example, prefer:\n\n```scala mdoc\nsealed abstract class Option[+A] extends Product with Serializable\n\nobject Option {\n  final case class Some[A](value: A) extends Option[A]\n  final case object None extends Option[Nothing]\n}\n```\n\nTo:\n\n```scala mdoc:reset\nsealed abstract class Option[+A] extends Product with Serializable\n\nfinal case class Some[A](value: A) extends Option[A]\nfinal case object None extends Option[Nothing]\n```\n\nYes, I'm aware that this example contradicts the Scala stdlib - that's on purpose. I have [Martin Odersky](https://twitter.com/odersky) on record for recommending exactly the approach that [`Option`] did not take.\n\n# Reason\n\nPutting data constructors in the companion object can be locally made to behave as if they'd been declared at the top level: just import them in.\n\n```scala mdoc\nsealed abstract class Foo extends Product with Serializable\n\nobject Foo {\n  final case object Bar extends Foo\n  final case object Baz extends Foo\n}\n\n// This brings Bar and Baz in the local scope, exactly as if\n// they'd been declared at the top level.\nimport Foo._\n\nBar\n```\n\nIt's however impossible to get top level data constructors to behave as if they'd been declared in the companion object. It's possible to hide or rename them, but this requires one instruction per data constructor, which is verbose and doesn't really scale with large [ADTs][ADT]:\n\n```scala mdoc:reset\nobject root {\n  sealed abstract class Foo extends Product with Serializable\n\n  final case object Bar extends Foo\n  final case object Baz extends Foo\n}\n\n// This renames Bar to FooBar and imports Foo and Baz into the\n// local scope.\nimport root.{Bar => FooBar, _}\n\nFooBar\n```\n\nAnd while you might argue that you'd rarely need to do that, names are a surprisingly scarce resource. You *will* eventually get in naming conflicts - how many times have I written error types that conflicted with [`Failure`]? This rule helps minimise such conflicts by namespacing all data constructors.\n\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`Failure`]:https://www.scala-lang.org/api/2.12.8/scala/util/Failure.html\n[ADT]:../definitions/adt.html\n"
  },
  {
    "path": "src/main/mdoc/_adts/enumerations_as_adt.md",
    "content": "---\ntitle: Use ADTs to implement enumerations\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: Enumeration\n        url:  http://www.wartremover.org/doc/warts.html#enumeration\n---\n\n> When you need to implement an enumeration, use an [ADT], not [`Enumeration`].\n\n# Reason\n\n[`Enumeration`] suffers from a major flaw: exhaustivity is not checked in pattern matches.\n\nFor example:\n\n```scala mdoc\nobject Status extends Enumeration {\n  val Ok, Nok = Value\n}\n\ndef foo(w: Status.Value): Unit = w match {\n  case Status.Ok => println(\"ok\")\n}\n```\n\nThis compiles without a warning but will blow up at runtime:\n\n```scala mdoc:crash\nfoo(Status.Nok)\n```\n\n[ADTs][ADT], on the other hand, do not suffer from this issue. Here's a better implementation of `Status`:\n\n```scala mdoc:reset\nsealed abstract class Status extends Product with Serializable\nobject Status {\n  final case object Ok extends Status\n  final case object Nok extends Status\n}\n```\n\nThe compiler now has enough information to check whether your pattern matches are exhaustive:\n\n```scala mdoc:fail\ndef foo(w: Status): Unit = w match {\n  case Status.Ok => println(\"ok\")\n}\n```\n\n[`Enumeration`]:https://www.scala-lang.org/api/2.12.8/scala/Enumeration.html\n[ADT]:../definitions/adt.html\n"
  },
  {
    "path": "src/main/mdoc/_adts/errors_extend_exception.md",
    "content": "---\ntitle: Make error ADTs subtypes of Exception\nlayout: article\n---\n\n> When creating an [ADT] to represent errors, have the base type extend [`Exception`].\n\n# Reason\n\nSome APIs, such as the standard [`Try`] and [`Future`], represent errors through exceptions. If your error type doesn't extend [`Exception`], you cannot stick it in a [`Failure`], for example.\n\nLet's say we have this simple [ADT] for database-related errors:\n\n```scala mdoc\nsealed abstract class DbError extends Product with Serializable\n\nobject DbError {\n  final case object InvalidSql extends DbError\n  final case object ConnectionLost extends DbError\n}\n```\n\nAnd for whatever reason, we need to implement the following method:\n\n```scala\ndef foo(i: Int): Try[Int]\n```\n\nWith our current `DbError` implementation, it's impossible to write something like:\n\n```scala mdoc:fail\ndef foo(i: Int) = scala.util.Failure(DbError.InvalidSql)\n```\n\nHad `DbError` extended [`Exception`] however, this would have been perfectly possible:\n\n```scala mdoc:reset\nsealed abstract class DbError extends Exception with Product with Serializable\n\nobject DbError {\n  final case object InvalidSql extends DbError\n  final case object ConnectionLost extends DbError\n}\n\ndef foo(i: Int) = scala.util.Failure(DbError.InvalidSql)\n```\n\n# Secondary reason\n\nThere's another reason for this rule, although I find it dubious.\n\nImagine you have two different error [ADTs][ADT] - our `DbError` one, and another that's more about business logic:\n\n```scala mdoc\nsealed abstract class UserError extends Exception with Product with Serializable\n\nobject UserError {\n  final case object NotFound extends UserError\n  final case object Unauthorized extends UserError\n}\n```\n\nIf you try to write a function that attempts to find a user in database and validate its password, its error type is either a `DbError` or a `UserError`. There are ways to represent that - [`Either`] (but that gets messy very quickly if we have more than 2 error types) or a unifying [ADT] that wraps both types, for instance.\n\nHad both `DbError` and `UserError` extended [`Exception`], we'd have a third option: [`Exception`] being a sort of universal supertype for errors, we could just say that our error type is [`Exception`] and the compiler would be perfectly happy.\n\nI personally dislike this approach. It removes the compiler's ability to check whether you've dealt with all error cases. You must manually choose which subtypes of [`Exception`] you want to deal with, and the compiler has no way of knowing if you've dealt with all error types for a given call, or if the types you deal with are actually possible in a given context.\n\n[`Exception`]:https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Exception.html\n[`Try`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html\n[`Future`]:https://www.scala-lang.org/api/2.12.8/scala/concurrent/Future.html\n[`Failure`]:https://www.scala-lang.org/api/2.12.8/scala/util/Failure.html\n[`Either`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either.html\n[ADT]:../definitions/adt.html\n"
  },
  {
    "path": "src/main/mdoc/_adts/final_case_objects.md",
    "content": "---\ntitle: Mark case objects as final\nlayout: article\n---\n\n> When declaring a case object, make it [`final`].\n\n# Reason\n\nWhile case objects are effectively [`final`] in Scala - you can't extend them - they are not always flagged as such in the compiled bytecode.\n\nTake the following code, for example:\n\n```scala mdoc\nclass Test {\n  case object foo\n}\n```\n\nWhen `foo` is not flagged as [`final`], running the class file through `javap -c` yields the following (truncated) output:\n\n```java\npublic class Test$foo$ implements scala.Product,scala.Serializable {\n // [...]\n```\n\nWhen it's flagged as [`final`], however, we get:\n\n```java\npublic final class Test$foo$ implements scala.Product,scala.Serializable {\n  // [...]\n```\n\nTo make matters worse, this is not even coherent accross Scala versions - the previous output was obtained with 2.12.7, but 2.11.8, for example, will compile both versions of `Test.foo` as [`final`].\n\nThis might not seem like a big deal - as far as `scalac` is concerned, `Test.foo` is [`final`] either way and you won't be able to extend it - not having this information in the bytecode will:\n* prevent the JIT from applying any [`final`]-specific optimisations\n* potentially cause Java interop issues, since `javac` will let you extend `Test.foo`.\n\n[`final`]:../definitions/final.html\n"
  },
  {
    "path": "src/main/mdoc/_adts/index.md",
    "content": "---\nlayout: section\n---\n\n[ADTs][adt] are a common and powerful way of representing data. Scala encodes them in a way that is (currently) a bit manual and heavy on the boilerplate, and there are a few rules to respect in order for the resulting types to be well behaved and idiomatic. This is what this section will be focusing on.\n\n[adt]:../definitions/adt.html\n"
  },
  {
    "path": "src/main/mdoc/_adts/product_with_serializable.md",
    "content": "---\ntitle: Make ADTs subtypes of Product and Serializable\nlayout: article\n---\n\n> When writing an [ADT], always have the root type extend [`Product`] and [`Serializable`].\n\n# Reason\n\nIt allows the compiler to infer better types than it would otherwise.\n\nGiven the following simple [ADT]:\n\n```scala mdoc\nsealed abstract class Status\nobject Status {\n  final case object Ok extends Status\n  final case object Nok extends Status\n}\n```\n\nThe compiler will sometimes infer some wonky types:\n\n```scala mdoc\nList(Status.Ok, Status.Nok)\n```\n\nThis happens because inferring types is done by looking at the most specific supertype of `Status.Ok` and `Status.Nok`.\n\n`Status` *is* a supertype of both, but it's not the most specific one: `Status.Ok` and `Status.Nok` both also extend [`Product`] and [`Serializable`] by virtue of being case objects.\n\nAs far as the compiler is concerned, the most precise supertype it can find for both `Status.Ok` and `Status.Nok` is thus `Product with Serializable with Status`.\n\nNow, consider the following implementation - the only difference is in the types that `Status` extend:\n\n```scala mdoc:reset\nsealed abstract class Status extends Product with Serializable\nobject Status {\n  final case object Ok extends Status\n  final case object Nok extends Status\n}\n```\n\nHere, the most specific supertype of both `Status.Ok` and `Status.Nok` is `Status`, which leads to the correct types being inferred:\n\n```scala mdoc\nList(Status.Ok, Status.Nok)\n```\n\n[ADT]:../definitions/adt.html\n[`Product`]:https://www.scala-lang.org/api/2.12.8/scala/Product.html\n[`Serializable`]:https://www.scala-lang.org/api/2.12.8/scala/Serializable.html\n"
  },
  {
    "path": "src/main/mdoc/_binary_compat/abstract_over_trait.md",
    "content": "---\ntitle: Prefer abstract classes to traits\nlayout: article\n---\n\n> When declaring an abstract type without a clear reason to prefer a `trait`, use an `abstract class`.\n\nSince in most scenarios that aren't declaring an [ADT](../definitions/adt.html), it's impossible to guarantee that your type will never be involved in multiple inheritance, this rule can mostly be simplified to:\n\n> When writing an [ADT](../definitions/adt.html), have the root type be an abstract class\n\n# Reasons\n\n## Binary compatibility\n\nAdding a new concrete method to an existing trait breaks [binary compatibility](../definitions/binary_compatibility.html), which is a big deal for libraries.\n\nThe reason this happens has [been explained](https://stackoverflow.com/questions/18366817/is-adding-a-trait-method-with-implementation-breaking-backward-compatibility) far better than I could hope to do.\n\n## Java interop\n\nTraits can be a bit painful when you're writing Java code that has Scala dependencies. One concrete example of this is companion objects:\n\n```scala mdoc\ntrait ATrait\n\nobject ATrait {\n  def foo(): Int = 1\n}\n\nabstract class AnAbtractClass\n\nobject AnAbstractClass {\n  def foo(): Int = 2\n}\n```\n\nWith these definitions, calling `foo` from Java code will look like:\n\n```java\nATrait$.MODULE$.foo()\n\nAnAbstractClass.foo()\n```\n\nClearly, the abstract class version is more natural.\n\n## It's a good default\n\nThe previous reasons don't really matter to projects that are not libraries or will never have to be used from Java code.\n\nBut abstract classes are not a worse choice than traits in most other scenarios (again, except when multiple inheritance is a possibility), and I prefer:\n\n> When in doubt, use an abstract class.\n\nto\n\n> When in doubt and writing code that is or might become a library or is or might be called from Java, use an abstract class.\n"
  },
  {
    "path": "src/main/mdoc/_binary_compat/explicit_type_annotations.md",
    "content": "---\ntitle: Add explicit type annotations to public members\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: PublicInference\n        url:  http://www.wartremover.org/doc/warts.html#publicinference\n---\n\n> Always add an explicit type to your public members, even when you're happy with what's being inferred.\n\n# Reason\n\nThe compiler relies on implementation details to infer types, and implementation details can change - which can in turn break [binary compatibility][bincompat].\n\nType inference tries to work out the most specific subtype of all types a value could be. Take the following code, for example:\n\n```scala mdoc\ndef foo(i: Int) = {\n  if(i % 2 == 0) Some(i)\n  else           None\n}\n\nfoo(1)\n```\n\n[`Some[Int]`][`Some`] and [`None`] share a common direct supertype: [`Option[Int]`][`Option`] (well, [not quite](../adts/product_with_serializable.html), but close enough for our purposes). This allows the compiler to correctly infer `foo`'s return type, but what if we were to change the implementation in a later version?\n\n```scala mdoc:reset\ndef foo(i: Int) = Some(i)\n\nfoo(1)\n```\n\nThe return type is no longer [`Option[Int]`][`Option`] but [`Some[Int]`][`Some`], and just like that, we've broken [binary compatibility][bincompat].\n\nExplicit type annotations on public members ensure that implementation details don't leak out and that we don't accidentally break things without meaning to, or even realizing.\n\n# Mistaken assumption: implementing abstract members\n\nA common assumption that turns out to be incorrect is that implementing abstract members (or overriding concrete ones) is fine, since the parent type will be inferred.\n\nThis turns out to be incorrect:\n\n```scala mdoc\nabstract class Foo {\n  def getOpt[A](a: A): Option[A]\n}\n\nclass FooImpl extends Foo {\n  override def getOpt[A](a: A) = Some(a)\n}\n```\n\nIt's usually assumed that `FooImpl.getOpt` will return the right type, but this is wrong:\n\n```scala mdoc\nnew FooImpl().getOpt(1)\n```\n\nChanging `FooImpl.getOpt` implementation to return either a [`Some[Int]`][`Some`] or an [`Option[Int]`][`Option`] will break [binary compatibility][bincompat] just as much as the general case.\n\n\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`Some`]:https://www.scala-lang.org/api/2.12.8/scala/Some.html\n[`Any`]:https://www.scala-lang.org/api/2.12.8/scala/Any.html\n[bincompat]:../definitions/binary_compatibility.html\n[`None`]:https://www.scala-lang.org/api/2.12.8/scala/None$.html\n"
  },
  {
    "path": "src/main/mdoc/_binary_compat/index.md",
    "content": "---\nlayout: section\n---\n\n[Binary compatibility][bincompat] is a matter of some importance to library authors - breaking it must only be done when there is no other choice, as it can have dire repercussions downstream.\n\nWe'll explore here a few perfectly innocent design decisions that can, and often will, eventually break [binary compatibility][bincompat] without the author realising it's happened.\n\n[bincompat]:../definitions/binary_compatibility.html\n"
  },
  {
    "path": "src/main/mdoc/_definitions/adt.md",
    "content": "---\ntitle: Algebraic Data Types\nlayout: definition\n---\n\nAlgebraic Data Types (ADTs for short) are a way of structuring data. They're widely used in Scala due, mostly, to how well they work with pattern matching and how easy it is to use them to make illegal states impossible to represent.\n\nThere are two basic categories of ADTs:\n* product types\n* sum types\n\n# Product types\n\nA product type is essentially a way of sticking multiple values inside of one - a [`Tuple`], or something that's very similar to one. Case classes are the prototypical product type:\n\n```scala mdoc\nfinal case class Foo(b1: Boolean, b2: Boolean)\n```\n\n`Foo` aggregates two [`Boolean`] values.\n\nIt's called a _product_ type because we can compute its cardinality (the number of values it can possibly have) by calculating the product of the types that compose it.\n\nHere, [`Boolean`] has an cardinality of 2 (it can only contain either `true` or `false`), and thus `Foo` must have an cardinality of 4. Indeed:\n* `Foo(true, true)`\n* `Foo(true, false)`\n* `Foo(false, true)`\n* `Foo(false, false)`\n\n# Sum types\n\nA sum type is a type that is composed of different possible values and value shapes. The simplest possible example is an enumeration - `Bool`, for example:\n\n```scala mdoc\nsealed abstract class Bool extends Product with Serializable\n\nobject Bool {\n  final case object True extends Bool\n  final case object False extends Bool\n}\n```\n\nIt's called a _sum_ type because its cardinality is equal to the sum of the arities of the types that compose it. Here, both `True` and `False` are singleton types, and `Bool` can indeed only have 2 possible values.\n\nSum types get a lot more interesting when you start using more complex data types for the alternatives.\n\n# Bringing them together\n\nLet's imagine a very simple language in which you can only give the following instructions:\n* `move forward X meters`\n* `rotate Y degrees`\n\nA naïve implementation could be:\n\n```scala mdoc\nfinal case class Command(label: String, meters: Option[Int], degrees: Option[Int])\n```\n\nThis is problematic, however, since it allows so many illegal states to be represented. For example:\n\n```scala mdoc:silent\nCommand(\"foo\", None, None)\nCommand(\"bar\", Some(1), Some(2))\n```\n\nBy reworking our type to a slightly more involved ADT, we get rid of these:\n\n```scala mdoc:reset\nsealed abstract class Command extends Product with Serializable\n\nobject Command {\n  final case class Move(meters: Int) extends Command\n  final case class Rotate(degrees: Int) extends Command\n}\n```\n\nIt's now impossible to create a value that makes no sense - either you move forward by X meters, or you rotate by Y degrees, nothing else.\n\nThis type also has the advantage of being very pattern match friendly:\n\n```scala mdoc\ndef print(cmd: Command) = cmd match {\n  case Command.Move(dist)    => println(s\"Moving by ${dist}m\")\n  case Command.Rotate(angle) => println(s\"Rotating by ${angle}°\")\n}\n```\n\n[`Tuple`]:https://www.scala-lang.org/api/2.12.8/scala/Tuple2.html\n[`Boolean`]:https://www.scala-lang.org/api/2.12.8/scala/Boolean.html\n"
  },
  {
    "path": "src/main/mdoc/_definitions/binary_compatibility.md",
    "content": "---\ntitle: Binary compatibility\nlayout: definition\n---\n\nTwo versions of a library are said to be binary compatible if you can swap one for the other without recompiling.\n\nLet's imagine a `Foo` library such that its `1.0.0` and `1.1.0` versions are binary incompatible (even though they are source compatible).\nIf you have three projects such that:\n- `A` depends on `Foo 1.0.0`\n- `B` depends on `Foo 1.1.0`\n- `C` depends on `A` and `B`\n\nWhoever maintains `C` will find himself dealing with some very weird runtime errors that might be a bit a nightmare to work out - that person might not even know that `Foo` exists, let alone that it's in `C`'s dependencies.\n\nIt's best to strive for binary compatibility for this reason. Tools such as [MiMa](https://github.com/lightbend/migration-manager) have been created to help library author with this task.\n"
  },
  {
    "path": "src/main/mdoc/_definitions/final.md",
    "content": "---\ntitle: Final types\nlayout: definition\n---\n\nMarking a type as `final` means that it can never have subtypes.\n\nFor example, given:\n\n```scala mdoc\nfinal class Foo\n```\n\nThen the following can't compile:\n\n```scala mdoc:fail\nclass Bar extends Foo\n```\n"
  },
  {
    "path": "src/main/mdoc/_definitions/implicit_scope.md",
    "content": "---\ntitle: Implicit scope\nlayout: definition\n---\n\nThe implicit scope of a type `T` is where the compiler will look when attempting to locate implicit instances for that type. It is composed of all the companion objects of types associated with `T`.\n\nTo take a concrete example:\n\n```scala mdoc\nclass Foo\n\nobject Foo {\n  implicit val bar: List[Foo] = List.empty\n}\n```\n\n`bar` is of type [`List[Foo]`][`List`], and is located within the companion object of `Foo`, a type associated with [`List[Foo]`][`List`]: it's in the implicit scope of [`List[Foo]`][`List`] and we need no special import for the compiler to locate it.\n\n```scala mdoc\nimplicitly[List[Foo]]\n```\n\nThe implicit scope is particularly helpful when defining [type class](type-class.html) instances.\n\n[`List`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/List.html\n"
  },
  {
    "path": "src/main/mdoc/_definitions/paren-less.md",
    "content": "---\ntitle: Paren-less methods\nlayout: definition\n---\n\nA paren-less method is a method that doesn't take parameters (a nullary method) and that is declared without parentheses:\n\n```scala mdoc\ndef foo: Int = 1\n```\n\nTrying to call is with parentheses will fail:\n\n```scala mdoc:fail\nfoo()\n```\n\nAn interesting property of paren-less methods is that they can be overridden (or implemented, if abstract) by `val`s.\n"
  },
  {
    "path": "src/main/mdoc/_definitions/recursion.md",
    "content": "---\ntitle: Recursion\nlayout: definition\n---\n\nA recursive function is one that calls itself. For example:\n\n```scala mdoc\ndef sum(is: List[Int]): Int = is match {\n  case h :: t => h + sum(t)\n  case _      => 0\n}\n```\n\n`sum` is implemented by referencing itself: the sum of a non empty list is the sum of its head plus the sum of its tail.\n"
  },
  {
    "path": "src/main/mdoc/_definitions/reference_equality.md",
    "content": "---\ntitle: Reference equality\nlayout: definition\n---\n\nReference equality is an equality relationship that does not only guarantee that two values are equal, but also that they are, in fact, the same value.\n\nThe distinction might not be obvious. It's possible to have two values that are equivalent - you can use one or the other to get the exact same result - but not the same. For example:\n\n```scala mdoc:silent\nval foo = Some(1)\nval bar = foo\nval baz = Some(1)\n```\n\n`foo`, `bar` and `baz` are all equal:\n\n```scala mdoc\nfoo == bar\n\nfoo == baz\n\nbar == baz\n```\n\nOn the other hand, while `foo` and `bar` are the same value, `baz` isn't:\n\n```scala mdoc\nfoo eq bar\n\nfoo eq baz\n\nbar eq baz\n```\n\nReference equality is rarely used, except when [warning people against it](../unsafe/array_comparison.html).\n"
  },
  {
    "path": "src/main/mdoc/_definitions/referential_transparency.md",
    "content": "---\ntitle: Referential transparency\nlayout: definition\n---\n\nAn expression is said to be referentially transparent if it can be replaced by its value and not change the program's behaviour.\n\nFor example, take the following method:\n\n```scala mdoc\ndef add1(i: Int): Int = i + 1\n```\n\nIt's referentially transparent because for any given `i`, you can use `add1(i)` or its result interchangeably.\n\nThis new version, however, isn't referentially transparent - we call such expressions _referentially opaque_:\n\n```scala mdoc\ndef add1Bis(i: Int): Int = {\n  println(i)\n  i + 1\n}\n```\n\nIf it was referentially transparent, the two following methods would be strictly equivalent:\n\n```scala mdoc\ndef foo1(i: Int): Int = {\n  // We're using the result of add1Bis, twice.\n  val a = add1Bis(i)\n\n  a + a\n}\n\ndef foo2(i: Int): Int =\n  // We're calling add1Bis, twice.\n  add1Bis(i) + add1Bis(i)\n```\n\nBut they clearly are not:\n\n```scala mdoc\nfoo1(1)\n\nfoo2(1)\n```\n\n# Why is it important?\n\nThis is more easily explained by showing what you lose without referentialy transparency.\n\n```scala mdoc:silent\nvar i: Int = 1\n\ndef addi(j: Int): Int = i + j\n```\n\n`addi` is clearly not referentially transparent: it doesn't necessarily return the same value for the same input.\n\nNow, let's start 10 threads that'll increment `i`:\n\n```scala mdoc\nimport scala.concurrent.Future\nimport scala.concurrent.ExecutionContext.Implicits.global\n\nfor(_ <- (1 to 10)) scala.concurrent.Future(i += 1)\n```\n\nWhat do you think `addi(1)` evaluates to now? Well, there's no way to know. It could be any number between 1 and 12, depending on how many of our threads have already completed. Let's try:\n\n```scala mdoc\naddi(1)\n```\n\nThis uncertainty is something we must strive to avoid at all costs - how do you write correct code if you're not sure what happens when you run it?\n\n*This* is what referential transparency gets us: certainty, and understanding of how our code works.\n\n\n# Related terms\n\nYou'll often hear talk of purity and side effects. Those are just other terms for referentially transparency or opacity:\n* a function is pure if referentially transparent\n* a side effect is what makes a function impure\n"
  },
  {
    "path": "src/main/mdoc/_definitions/sealed.md",
    "content": "---\ntitle: Sealed types\nlayout: definition\n---\n\nMarking a type as `sealed` means that it can only have direct subtypes that are declared in the same source file.\n\nFor example, declaring this in, say, `Foo.scala`, will compile:\n\n```scala mdoc\nsealed class Foo\n\nclass Bar extends Foo\n```\n\nBut the following, in `Baz.scala`, will not:\n\n```scala mdoc\nclass Baz extends Foo\n```\n\nThis is useful when all subtypes of a given type are known and we want to let the compiler know about it - typically, when working with [ADTs](adt.html).\n"
  },
  {
    "path": "src/main/mdoc/_definitions/tail_recursion.md",
    "content": "---\ntitle: Tail recursion\nlayout: definition\n---\n\nA tail recursive function is a [recursive] function where the recursive call is the last thing to happen.\n\nThe following `sum` method is [recursive], but not tail recursive:\n\n```scala mdoc\ndef sum(is: List[Int]): Int = is match {\n  case h :: t => h + sum(t)\n  case _      => 0\n}\n```\n\nIn the first `case`, `sum` calls itself *then* adds the result to the head of the list.\n\nTo make it tail recursive, we use an accumulator:\n\n```scala mdoc:reset\ndef sum(is: List[Int]): Int = {\n  def loop(cur: List[Int], acc: Int): Int = cur match {\n    case h :: t => loop(t, acc + h)\n    case _      => acc\n  }\n  loop(is, 0)\n}\n```\n\n`sum` itself is not tail recursive - it's not even recursive anymore. On the other hand, `loop` is tail recursive: you can see that its last action is to call itself.\n\n[recursive]:./recursion.html\n"
  },
  {
    "path": "src/main/mdoc/_definitions/total_function.md",
    "content": "---\ntitle: Total functions\nlayout: definition\n---\n\nA function is said to be total if it's defined for it's entire domain. That is, `A => B` is total if there is a `B` for every possible `A`.\n\nA function that is not total is said to be [partial](https://www.scala-lang.org/api/2.12.8/scala/PartialFunction.html).\n\nFor example, in the following code:\n\n```scala mdoc\ndef int2str(i: Int): String = i.toString\n\ndef str2int(s: String): Int = Integer.parseInt(s)\n```\n\n* `int2str` is total because there exists no [`Int`] for which it's not defined.\n* `str2int` is partial because there exists *many* [`Strings`][`String`] for which it isn't defined.\n\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n"
  },
  {
    "path": "src/main/mdoc/_definitions/type_class.md",
    "content": "---\ntitle: Type class\nlayout: definition\n---\n\nIn the context of Scala, a type class is a family of types that support a known set of behaviours. This could be, for example, the family of types that expose a unique integer identifier.\n\nThis is implemented through a `trait` and any number of implicit instances of that trait.\n\nHere's how our _has a unique id_ type class could be represented:\n\n```scala mdoc\ntrait HasId[A] {\n  def getId(a: A): Int\n}\n```\n\nIf you manage to get your hands on an instance of `HasId[A]` for a given `A`, you know how to retrieve its id - however this is actually implemented in `A`.\n\nProviding instances is done through implicits:\n\n```scala mdoc:silent\nfinal case class User(id: Int, name: String)\n\nimplicit val userHasId: HasId[User] = new HasId[User] {\n  override def getId(user: User) = user.id\n}\n```\n\nInstances are traditionally put in the companion object of either the type class or the type itself - here, either in `HasId` or `User`. Instances declared elsewhere (that  are not in the [implicit scope](./implicit_scope.html)) are said to be orphaned.\n\nInstead of requiring a subtype of a known type, methods will require an implicit instance of the type class - a type and a proof that it supports the required behaviours.\n\nFor example:\n\n```scala mdoc\ndef printId[A](a: A)(implicit hia: HasId[A]): Unit =\n  println(s\"Found id ${hia.getId(a)}\")\n```\n\n`printId` isn't hard-coded to a single type, nor to a hierarchy of types with a known root, but to any type that can prove it supports the required behaviour - exposing an identifier.\n\nThis is a critical aspect of type classes: instances are linked to, but not baked into, types. You can provide instances later, or for types that you don't own.\n\nAnother important aspect is how type classes compose implicitly. Let's imagine the following:\n\n```scala mdoc\ntrait HasLabel[A] {\n  def getLabel(a: A): String\n}\n```\n\nWe could add immediate support for any type that has an `HasId` instance:\n\n```scala mdoc\nimplicit def hasLabelFromId[A](implicit hia: HasId[A]): HasLabel[A] = new HasLabel[A] {\n  override def getLabel(a: A) = s\"ID:${hia.getId(a)}\"\n}\n```\n\nWe can then rewrite our printing function:\n\n```scala mdoc\ndef print[A](a: A)(implicit hla: HasLabel[A]): Unit =\n  println(s\"Label: ${hla.getLabel(a)}\")\n```\n\nAnd to prove that this all works, let's call it on a `User`, for which we never explicitly provided an instance of `HasLabel`:\n\n```scala mdoc\nprint(User(1, \"Foo\"))\n```\n\nWe've essentially just told the compiler that any type that exposed an identifier was also capable of exposing a label.\n"
  },
  {
    "path": "src/main/mdoc/_oop/abstract_fields_as_defs.md",
    "content": "---\ntitle: Declare abstract fields as paren-less methods\nlayout: article\n---\n\n> When declaring abstract fields in an abstract class or a trait, it's good practice to declare them as [paren-less] methods.\n\nPrefer:\n\n```scala mdoc\nabstract class Foo {\n  def bar: Int\n}\n```\n\nOver:\n\n```scala mdoc:reset\nabstract class Foo {\n  val bar: Int\n}\n```\n\n# Reason\n\nScala allows abstract [paren-less] methods to be implemented as `val`s, but not the other way around.\n\nGiven the following:\n\n```scala mdoc\nabstract class AsDef {\n  def bar: Int\n}\n\nabstract class AsVal {\n  val bar: Int\n}\n```\n\nImplementing `AsDef.bar` as a `val` compiles:\n\n```scala mdoc:silent\nnew AsDef {\n  override val bar = 0\n}\n```\n\nBut implementing `AsVal.bar` as a `def` does not:\n\n```scala mdoc:fail\nnew AsVal {\n  override def bar = 0\n}\n```\n\nDeclaring abstract fields as `val`s closes some possibilities, while declaring them as [paren-less] methods has no ill effect.\n\n# Exceptions to the rule\n\nThere's at least one known scenario where declaring an abstract field as a `val` is important: path-dependent types, where its important that the field has a concrete type.\n\nHere, for example:\n\n```scala mdoc:silent:reset\ntrait Foo {\n  val bar: String\n}\n\nval foo: Foo = new Foo {\n  override val bar = \"baz\"\n}\n```\n\nIt's possible to to refer explicitly to the type of `foo.bar`:\n\n```scala mdoc:silent\nval fooBar: foo.bar.type = foo.bar\n```\n\nHad we defined `bar` as a `def`:\n\n```scala mdoc:reset:silent\ntrait Foo {\n  def bar: String\n}\n\nval foo: Foo = new Foo {\n  override val bar = \"baz\"\n}\n```\n\nThen we'd get a compilation error attempting to get the type of `foo.bar`:\n\n```scala mdoc:fail\nval fooBar: foo.bar.type = foo.bar\n```\n\n\n[paren-less]:../definitions/paren-less.html\n"
  },
  {
    "path": "src/main/mdoc/_oop/always_override.md",
    "content": "---\ntitle: Use override when implementing abstract members\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: MissingOverride\n        url:  https://github.com/wartremover/wartremover-contrib#missingoverride\n---\n\n> When overriding a concrete member or implementing an abstract one, use the `override` keyword.\n\n# Reason\n\nThis catches some scenarios where code would otherwise compile but misbehave at runtime.\n\nTake the following trait, for example:\n\n```scala mdoc\ntrait Foo[A] {\n  // Default implementation\n  def foo1(a: A): Int = 1\n}\n```\n\nAnd now, an incorrect but valid implementation:\n\n```scala mdoc:silent\nimplicit val badFooInt: Foo[Int] = new Foo[Int] {\n  // Notice how this is not quite the right name.\n  def fool(i: Int) = 2\n}\n```\n\nThis compiles, but is clearly not what the we intended: we wanted to implement `fool` but declared `foo1` instead. Since `fool` has a default implementation, this is valid but does not behave the way we think.\n\nHad we used the `override` keyword, however, the compiler would have caught our error:\n\n```scala mdoc:fail\nimplicit val fooInt: Foo[Int] = new Foo[Int] {\n  override def fool(i: Int) = 2\n}\n```\n\n# Alternatives\n\nAnother accepted practice is to *never* use `override` unless required by the language.\n\nThis comes from the fact that, for a certain subset of the Scala community, overriding (in the sense of redefining an existing method) is a code smell: the compiler can check that you're working with the right types, but not the invariants that are not expressed in the type system. A common example is implementing a `Set` as a subtype of a `Bag` (see [Subtyping, Subclassing, and Trouble with OOP](http://okmij.org/ftp/Computation/Subtyping/) for an in-depth discussion).\n\nGiven that premise, the argument is that since overriding is bad, you should treat the use of the `override` keyword like you would an instruction to silence compiler warnings: explicit acknowledgement that you're doing something unsavoury.\n\nThis debate would be solved by adding a new `implement` keywords, similar to `override` but only used to flag members that you expect to implement abstract members in a superclass. This doesn't exist however, and I feel the pragmatic approach is to follow the rule that catches bad programs rather than the purely ideological one.\n"
  },
  {
    "path": "src/main/mdoc/_oop/index.md",
    "content": "---\nlayout: section\n---\n\nWhile it should be fairly obvious by now that I lean more on the FP part of the Scala community, the language *does* have a large set of OOP features.\n\nWhen these are the right tools for the job at hand, developers should feel absolutely free to use them. But with care, and if possible while keeping in mind the rules exposed in this section.\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/either_projection_get.md",
    "content": "---\ntitle: Do not call get on an Either projection\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: EitherProjectionPartial\n        url:  http://www.wartremover.org/doc/warts.html#eitherprojectionpartial\n  - name: scapegoat\n    rules:\n      - name: EitherGet\n---\n\n> When retrieving the content of an [`Either`], do not use [`get`] on one of its projections.\n\n# Reason\n\nSome projections are [left projections][`LeftProjection`] of a [`Right`], or [right projections][`RightProjection`] of a [`Left`], and [`get`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nLeft(1).right.get\n```\n\n```scala mdoc:crash\nRight(1).left.get\n```\n\nIf you have a default value to provide for the \"other\" case, use [`getOrElse`] on a projection:\n\n```scala mdoc\nLeft(1).right.getOrElse(-1)\n```\n\nAlternatively, if you're using the common convention of treating the [`Left`] side of an [`Either`] as the error case, you can also call [`getOrElse`][biasedGetOrElse] directly on the [`Either`]:\n\n```scala mdoc\nLeft(1).getOrElse(-1)\n```\n\nAnother practical approach is to use [`fold`], which lets you provide a handler for each case:\n\n```scala mdoc\n(Left(1): Either[Int, Boolean]).fold(\n  i => s\"Found an int: '$i'\",\n  b => s\"Found a boolean: '$b'\"\n)\n```\n\n[`Either`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either.html\n[`Right`]:https://www.scala-lang.org/api/2.12.8/scala/util/Right.html\n[`Left`]:https://www.scala-lang.org/api/2.12.8/scala/util/Left.html\n[`RightProjection`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either$$RightProjection.html\n[`LeftProjection`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either$$LeftProjection.html\n[`fold`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either.html#fold[C](fa:A=%3EC,fb:B=%3EC):C\n[`getOrElse`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either$$RightProjection.html#getOrElse[B1%3E:B](or:=%3EB1):B1\n[`get`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html#get:T\n[biasedGetOrElse]:https://www.scala-lang.org/api/2.12.8/scala/util/Either.html#getOrElse[B1%3E:B](or:=%3EB1):B1\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/index.md",
    "content": "---\nlayout: section\n---\n\nScala, like a lot of other languages, sometimes takes shortcuts in its standard library to meet common expectations. We'll be focusing here on all the [partial functions](../definitions/total_function.html) that are commonly abused and really shouldn't have been there in the first place, and how to avoid them.\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/option_get.md",
    "content": "---\ntitle: Do not call get on an Option\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: OptionPartial\n        url:  http://www.wartremover.org/doc/warts.html#optionpartial\n  - name: scapegoat\n    rules:\n      - name: OptionGet\n---\n\n> When retrieving the content of an [`Option`], do not use [`get`].\n\n# Reason\n\nSome [`Options`][`Option`] are [`Nones`][`None`], and [`get`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nNone.get\n```\n\nIf you have a default value to provide for the [`None`] case, use [`getOrElse`]:\n\n```scala mdoc\nNone.getOrElse(-1)\n```\n\nAnother practical approach is to use [`fold`], which lets you provide a handler for each case:\n\n```scala mdoc\n(None: Option[String]).fold(\"Found None\")(i => s\"Found an int: '$i'\")\n```\n\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`None`]:https://www.scala-lang.org/api/2.12.8/scala/None$.html\n[`get`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html#get:A\n[`getOrElse`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html#getOrElse[B%3E:A](default:=%3EB):B\n[`fold`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html#fold[A1%3E:A](z:A1)(op:(A1,A1)=%3EA1):A1\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/traversable_head.md",
    "content": "---\ntitle: Avoid using head\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TraversableOps\n        url:  http://www.wartremover.org/doc/warts.html#traversableops\n  - name: scapegoat\n    rules:\n      - name: TraversableHead\n---\n\n> When retrieving the head of a sequence, use [`headOption`] rather than [`head`].\n\n# Reason\n\nSome collections are empty, and [`head`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nSeq.empty[Int].head\n```\n\n[`headOption`] is a safer alternative, since it encodes the possibility of the empty list in its return type:\n\n```scala mdoc\nSeq(1, 2, 3).headOption\n\nSeq.empty[Int].headOption\n```\n\n[`head`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#head:A\n[`headOption`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#headOption:Option[A]\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/traversable_init.md",
    "content": "---\ntitle: Avoid using init\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TraversableOps\n        url:  http://www.wartremover.org/doc/warts.html#traversableops\n---\n\n> When retrieving everything but the last element of a sequence, do not use [`init`]. [`dropRight(1)`] is often what you want to use.\n\n# Reason\n\nSome collections are empty, and [`init`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nSeq.empty[Int].init\n```\n\n[`dropRight(1)`], on the other hand, will yield a reasonable value: the empty list.\n\n```scala mdoc\nSeq(1, 2, 3).dropRight(1)\n\nSeq.empty[Int].dropRight(1)\n```\n\n# Exceptions to the rule\n\nNote that this is not *always* what you want to do. There are scenarios in which you must deal with the empty case explicitly - as a stop condition in a recursive function, say.\nIt's just that, often, getting the empty list when you ask for everything but the last element of an empty list is perfectly reasonable.\n\n[`dropRight(1)`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#dropRight(n:Int):Repr\n[`init`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#init:Repr\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/traversable_last.md",
    "content": "---\ntitle: Avoid using last\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TraversableOps\n        url:  http://www.wartremover.org/doc/warts.html#traversableops\n  - name: scapegoat\n    rules:\n      - name: TraversableLast\n---\n\n> When retrieving the last element of a sequence, use [`lastOption`] rather than [`last`].\n\n# Reason\n\nSome collections are empty, and [`last`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nSeq.empty[Int].last\n```\n\n[`lastOption`] is a safer alternative, since it encodes the possibility of the empty list in its return type:\n\n```scala mdoc\nSeq(1, 2, 3).lastOption\n\nSeq.empty[Int].lastOption\n```\n\n[`last`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#last:A\n[`lastOption`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#lastOption:Option[A]\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/traversable_reduce.md",
    "content": "---\ntitle: Avoid using reduce\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TraversableOps\n        url:  http://www.wartremover.org/doc/warts.html#traversableops\n---\n\n> When reducing a collection to a single value, prefer [`reduceOption`] to [`reduce`].\n\n# Reason\n\nSome collections are empty, and [`reduce`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nSeq.empty[Int].reduce(_ + _)\n```\n\n[`reduceOption`] is a safer alternative, since it encodes the possibility of the empty list in its return type:\n\n```scala mdoc\nSeq(1, 2, 3).reduceOption(_ + _)\n\nSeq.empty[Int].reduceOption(_ + _)\n```\n\n[`reduce`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#reduce[A1%3E:A](op:(A1,A1)=%3EA1):A1\n[`reduceOption`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#reduceOption[A1%3E:A](op:(A1,A1)=%3EA1):Option[A1]\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/traversable_tail.md",
    "content": "---\ntitle: Avoid using tail\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TraversableOps\n        url:  http://www.wartremover.org/doc/warts.html#traversableops\n---\n\n> When retrieving everything but the first element of a sequence, do not use [`tail`]. [`drop(1)`] is often what you want to use.\n\n# Reason\n\nSome collections are empty, and [`tail`] deals with them by throwing an exception:\n\n```scala mdoc:crash\nSeq.empty[Int].tail\n```\n\n[`drop(1)`], on the other hand, will yield a reasonable value: the empty list.\n\n```scala mdoc\nSeq(1, 2, 3).drop(1)\n\nSeq.empty[Int].drop(1)\n```\n\n# Exceptions to the rule\n\nNote that this is not *always* what you want to do. There are scenarios in which you must deal with the empty case explicitly - as a stop condition in a recursive function, say.\nIt's just that, often, getting the empty list when you ask for everything but the first element of an empty list is perfectly reasonable.\n\n[`tail`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#tail:A\n[`drop(1)`]:https://www.scala-lang.org/api/2.12.8/scala/collection/Seq.html#drop(n:Int):Repr\n"
  },
  {
    "path": "src/main/mdoc/_partial_functions/try_get.md",
    "content": "---\ntitle: Do not call get on an Try\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: TryPartial\n        url:  http://www.wartremover.org/doc/warts.html#trypartial\n  - name: scapegoat\n    rules:\n      - name: TryGet\n---\n\n> When retrieving the content of a [`Try`], do not use [`get`].\n\n# Reason\n\nSome [`Trys`][`Try`] are [`Failures`][`Failure`], and [`get`] deals with them by throwing an exception.\n\n```scala mdoc:crash\nscala.util.Failure(new Exception).get\n```\n\nIf you have a default value to provide in case of a [`Failure`], use [`getOrElse`]:\n\n```scala mdoc\nscala.util.Failure(new Exception).getOrElse(-1)\n```\n\nAnother practical approach is to use [`fold`], which lets you provide a handler for each case:\n\n```scala mdoc\nimport scala.util.{Failure, Try}\n\n(Failure(new Exception): Try[Int]).fold(\n  e => s\"Found an error: '${e.getMessage}'\",\n  i => s\"Found an int: '$i'\"\n)\n```\n\n[`Try`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html\n[`getOrElse`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html#getOrElse[U%3E:T](default:=%3EU):U\n[`fold`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html#fold[U](fa:Throwable=%3EU,fb:T=%3EU):U\n[`get`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html#get:T\n[`Failure`]:https://www.scala-lang.org/api/2.12.8/scala/util/Failure.html\n[`Success`]:https://www.scala-lang.org/api/2.12.8/scala/util/Success.html\n"
  },
  {
    "path": "src/main/mdoc/_referential_transparency/avoid_mutability.md",
    "content": "---\ntitle: Avoid mutability\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: Var\n        url:  http://www.wartremover.org/doc/warts.html#var\n      - name: MutableDataStructures\n        url: http://www.wartremover.org/doc/warts.html#mutabledatastructures\n---\n\n> Mutability is almost always a bad idea and should be avoided.\n\n# Reasons\n\n## It's referentially opaque\n\nMutability very often breaks [referential transparency][reftrans].\n\nLet's take the following method:\n\n```scala mdoc:silent\nvar i: Int = 0\n\ndef foo(j: Int): Int = {\n  i += j\n  i\n}\n```\n\nIf it were [referentially transparent][reftrans], it'd always yield the same output for the same input. This is clearly not true:\n\n```scala mdoc\nfoo(1)\n\nfoo(1)\n```\n\n\n## It's often premature optimisation\n\nMutability is very often (but not always) used for performance reasons - it's unfortunately been drilled into generations of programmers that instance reuse is the key to fast code.\n\nThere are a few problems with that assertion, though. First, it's just not really true - immutable data structures, for example, often have the same asymptotic complexity as their mutable counterparts, and are much, much simpler to both implement and work with.\n\nWhether or not you believe this to be true, however, is irrelevant, provided you agree that you use mutability to write faster code. If you agree with that, then you agree that mutability is an optimisation - it means the same thing. And optimisations, especially ones that come at such a high cost ([referential opacity][reftrans]), should only be applied when they actually matter, not by default. Optimising by default is called _premature optimisation_ and it's not a good thing.\n\nWhenever you feel like using mutability, ask yourself if it's actually worth it. Run benchmarks! If mutability gets you an incredible 50% speedup on a bit of code that's 1% of your runtime, that's a 0.5% speedup overall. Is that really worth the maintenance / complexity cost?\n\n# Exceptions to the rule\n\nMutability is acceptable when it doesn't break [referential transparency][reftrans]. The most typical example of that is local mutability:\n\n```scala mdoc\ndef sum(is: List[Int]): Int = {\n  var s = 0\n  for(i <- is) s += i\n  s\n}\n```\n\nThe fact that `s` is mutable isn't exposed to the rest of the world and `sum` is [referentially transparent][reftrans]. If using mutability this way solves some performance bottleneck, go for it!\n\nJust for the record though, this example is much cleaner without mutability:\n\n```scala mdoc:reset\ndef sum(is: List[Int]): Int = is.fold(0)(_ + _)\n```\n\n\n[reftrans]:../definitions/referential_transparency.html\n"
  },
  {
    "path": "src/main/mdoc/_referential_transparency/avoid_return.md",
    "content": "---\ntitle: Do not use return\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: Return\n        url:  http://www.wartremover.org/doc/warts.html#return\n  - name: scapegoat\n    rules:\n      - name: UnnecessaryReturnUse\n  - name: scalastyle\n    rules:\n      - name: ReturnChecker\n        url:  http://www.scalastyle.org/rules-1.0.0.html#org_scalastyle_scalariform_ReturnChecker\n---\n\n> There's never a good reason to use the `return` keyword.\n\n# Reasons\n\n## It makes code hard to reason about\n\nThere's an argument to be made that the more ways there are to reach a given line of code, the harder that code is to reason about.\n\nSee [GOTO statements considered harmful] for an eloquent dissertation on the matter.\n\n## It's referentially opaque\n\nIf `return` were [referentially transparent][reftrans], you should be able to inline expressions that use it and not change the meaning of a program.\n\nHere's `foo1`, a method whose return values are pre-computed and stored in values:\n\n```scala mdoc\ndef foo1(i: Int): Int = {\n  val pos = return i\n  val neg = return -i\n\n  if(i > 0) pos\n  else      neg\n}\n```\n\nAnd `foo2`, the same method but with the return values inlined:\n\n```scala mdoc\ndef foo2(i: Int): Int = {\n  if(i > 0) return i\n  else      return -i\n}\n```\n\nIf `return` was [referentially transparent][reftrans], we'd get the same `foo1` and `foo2` output for the same input, but:\n\n```scala mdoc\nfoo1(-1)\nfoo2(-1)\n```\n\n## You (probably) don't understand what it does\n\nLet's take the following, fairly straightforward method:\n\n```scala mdoc:fail\ndef foo(is: List[Int]): List[Int] = is.map(n => return n + 1)\n```\n\nThe compilation error doesn't seem to make much sense - how can a [`map`] on a [`List[Int]`][`List`] yield an [`Int`]? But the compiler tends to be smarter than us about these things, so let's play along.\n\n```scala mdoc:fail\ndef foo(is: List[Int]): Int = is.map(n => return n + 1)\n```\n\nIt's unclear how [`Nothing`] got mixed up in there, and is usually the sign that something went south, but fine, down the rabbit hole we go:\n\n\n```scala mdoc:fail\ndef foo(is: List[Int]): List[Nothing] = is.map(n => return n + 1)\n```\n\n`(╯°□°）╯︵ ┻━┻`\n\nI don't understand what's going on there, nor do I really want to. `return` is mad. Don't use it.\n\n[`List`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/List.html\n[`map`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/List.html#max:A\n[GOTO statements considered harmful]:https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf\n[`Nothing`]:https://www.scala-lang.org/api/2.12.8/scala/Nothing.html\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n[reftrans]:../definitions/referential_transparency.html\n"
  },
  {
    "path": "src/main/mdoc/_referential_transparency/avoid_throwing_exceptions.md",
    "content": "---\ntitle: Do not throw exceptions\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: Throw\n        url:  http://www.wartremover.org/doc/warts.html#throw\n---\n\n> Do not throw exceptions if you can possibly avoid it.\n\nIn particular, when:\n* something might not be there, use [`Option`].\n* something might fail, use [`Either`].\n* something is rude and might throw an [`Exception`], use [`Try`].\n\n# Reasons\n\n## They're referentially opaque\n\nThrowing an [`Exception`] breaks [referential transparency][reftrans].\n\nThis can be demonstrated fairly easily. If `throw` was [referentially transparent][reftrans], by definition, the two following methods would be equivalent:\n\n```scala mdoc\ndef foo1() = if(false) throw new Exception else 2\n\ndef foo2() = {\n  val a = throw new Exception\n  if (false) a  else 2\n}\n```\n\nTurns out, however, that they aren't.\n\n`foo1` terminates:\n\n```scala mdoc\nfoo1()\n```\n\n`foo2` fails with an exception:\n\n```scala mdoc:crash\nfoo2()\n```\n\n## They're unsafe\n\nScala uses unchecked exceptions, which means that the compiler is not aware of them, and cannot check whether they're dealt with properly. A function that throws is a bit of a lie: its type implies it's [total function](../definitions/total_function.html) when it's not.\n\nLet's take a trivial example:\n\n```scala mdoc\ndef foo(i: Int) = throw new Exception\n```\n\nAs far as the type checker is concerned, this function is perfectly fine and it'll happily accept the following:\n\n```scala mdoc:crash\nfoo(1)\n```\n\nThis blows up at runtime, which is really something we'd like to avoid.\n\n# Exceptions to the rule\n\nIt's perfectly fine to throw an exception for truly exceptional errors. CPU not found? Critical hard-drive failure? a required resource hasn't been bundled with the binaries? throw away.\n\nBut scenarios such as _parse this string into an int_ should never throw - a [`String`] not being an [`Int`] is not exceptional, it's the normal case! There are many more [`String`]s that aren't valid [`Int`]s than the converse.\n\n[`Exception`]:https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html\n[reftrans]:../definitions/referential_transparency.html\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`Try`]:https://www.scala-lang.org/api/2.12.8/scala/util/Try.html\n[`Either`]:https://www.scala-lang.org/api/2.12.8/scala/util/Either.html\n"
  },
  {
    "path": "src/main/mdoc/_referential_transparency/index.md",
    "content": "---\nlayout: section\n---\n\n[Referential transparency][reftrans] is a big deal in FP - it's basically the core of what functional programming is.\n\nScala, being the hybrid that it is, has features that are commonly used in imperative languages but break [referential transparency][reftrans] by their very existence. We'll explore the most common (and dangerous) ones here.\n\nAnd for readers that are in the \"Scala as an imperative language\" part of the community: even then, [referential transparency][reftrans] is a useful property, a good default to strive for but break when needed.\n\n[reftrans]:../definitions/referential_transparency.html\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/final_case_classes.md",
    "content": "---\ntitle: Mark case classes as final\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: FinalCaseClass\n        url:  http://www.wartremover.org/doc/warts.html#finalcaseclass\n  - name: scapegoat\n    rules:\n      - name: FinalModifierOnCaseClass\n---\n\n> When declaring a case class, make it [`final`].\n\n# Reason\n\nExtending a case class will produce behaviours that, while perfectly correct, can be surprising and certainly break reasonable expectations.\n\nFor example:\n\n```scala mdoc\ncase class Foo(i: Int)\nclass Bar(i: Int, s: String) extends Foo(i)\n```\n\n`Bar` will behave oddly when it comes to comparison, hashing and printing:\n\n```scala mdoc\nnew Bar(1, \"foo\") == new Bar(1, \"bar\")\n\nMap(\n  new Bar(1, \"foo\") -> \"foo\",\n  new Bar(1, \"bar\") -> \"bar\"\n)\n\nnew Bar(1, \"baz\")\n```\n\nThis is largely due to Scala's reliance on Java constructs. In this instance:\n* [`equals`], used to compare two values (and which maps to `==` in Scala)\n* [`hashCode`], used to compute the hash of a value\n* [`toString`], used to represent a value as a [`String`]\n\nCase classes will generate correct implementations of these methods - [`equals`], for example, will run a field-for-field comparison.\nThe problem is that this breaks when you extend a case class: the subclass will inherit these methods, which are not aware of any field you might have added.\n\nIn the case of our `Bar` example, the `s` field is ignored by [`equals`], [`toString`] and [`hashCode`], which leads to the surprising (but perfectly correct) behaviour we observed.\n\n# Exceptions to the rule\n\nThere's at least one scenario I know of where a non-[`final`] case class is desirable: when you wish to declare a case class but have absolute control over the values of its fields.\n\nLet's say, for example, that you want to create a `PositiveInt` type wrapping an [`Int`] that is guaranteed to be positive. A naïve implementation would be:\n\n```scala mdoc\nfinal case class PositiveInt(value: Int)\n\nobject PositiveInt {\n  def fromInt(i: Int): Option[PositiveInt] =\n    if(i > 0) Some(new PositiveInt(i))\n    else      None\n}\n```\n\nThe problem with this implementation is that you still have many ways to create values of type `PositiveInt` that containing a negative [`Int`]:\n\n```scala mdoc\nnew PositiveInt(-1)\n\nPositiveInt.fromInt(1).map(_.copy(-1))\n```\n\nIn order to seal these holes, a common trick is to declare a `sealed abstract case class`:\n\n```scala mdoc:reset\nsealed abstract case class PositiveInt(value: Int)\n\nobject PositiveInt {\n  def fromInt(i: Int): Option[PositiveInt] =\n    if(i > 0) Some(new PositiveInt(i) {})\n    else      None\n}\n```\n\nSince `PositiveInt` is abstract, the compiler can't generate a constructor, a `copy` method or an `apply` method on the companion object and you effectively control the values that get inside it. But this requires it not to be [`final`].\n\nSo, as is often the case, there are scenarios in which this rule must be broken. It's a good default behaviour, to be changed when you must.\n\n[`equals`]:https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-\n[`hashCode`]:https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--\n[`toString`]:https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n[`final`]:../definitions/final.html\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/future_in_comprehensions.md",
    "content": "---\ntitle: Start independent Futures outside of a for-comprehension\nlayout: article\n---\n\n> When working with independent [`Futures`][`Future`], make sure not to initialise them inside a for-comprehension.\n\n# Reason\n\nFor-comprehension will create a dependency between your [`Futures`][`Future`], turning your code synchronous behind your back.\n\nTo understand how this can happen, it's important to realise that for-comprehensions are just syntactic sugar for nested [`flatMap`] and [`map`] calls.\n\nTake the following code:\n\n```scala mdoc:reset-class\nimport scala.concurrent._\nimport scala.concurrent.duration._\nimport ExecutionContext.Implicits.global\n\ndef longRunning(): Int = {\n  Thread.sleep(100)\n  println(\"LONG\")\n  1\n}\n\ndef immediate(): Int = {\n  println(\"IMMEDIATE\")\n  2\n}\n\ndef combine(): Future[Int] = for {\n  i <- Future(longRunning())\n  j <- Future(immediate())\n} yield i + j\n```\n\n`combine` desugars to:\n\n```scala mdoc\ndef desugaredCombine(): Future[Int] =\n  Future(longRunning()).flatMap { i =>\n    Future(immediate()).map(j => i + j)\n  }\n```\n\nThis means that the second [`Future`] (the one that yields `2`) cannot be started before the first one has completed - `i` is in its scope, even if not used - even though these two [`Futures`][`Future`] are clearly independent from each other.\n\nTo make this evident, let's evaluate `combine`. However many times you run it, `LONG` will always be printed before `IMMEDIATE`, even though the former is executed after a significant delay:\n\n```scala mdoc\nAwait.result(combine(), 500.millis)\n```\n\nThis can be worked around by creating the two [`Future`] instances outside of the for-comprehension: [`Future`] has the controversial behaviour that it starts executing when created, not when evaluated.\n\n```scala mdoc\ndef betterCombine(): Future[Int] = {\n  val f1 = Future(longRunning())\n  val f2 = Future(immediate())\n\n  for {\n    i <- f1\n    j <- f2\n  } yield i + j\n}\n```\n\nAnd if we now evaluate `betterCombine`, the log messages should print in the expected order:\n\n```scala mdoc\nAwait.result(betterCombine(), 200.millis)\n```\n\n[`Future`]:https://www.scala-lang.org/api/2.12.8/scala/concurrent/Future.html\n[`flatMap`]:https://www.scala-lang.org/api/2.12.8/scala/concurrent/Future.html#flatMap[S](f:T=%3Escala.concurrent.Future[S])(implicitexecutor:scala.concurrent.ExecutionContext):scala.concurrent.Future[S]\n[`map`]:https://www.scala-lang.org/api/2.12.8/scala/concurrent/Future.html#map[S](f:T=%3ES)(implicitexecutor:scala.concurrent.ExecutionContext):scala.concurrent.Future[S]\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/implicit_shadowing.md",
    "content": "---\ntitle: Make implicit names as unique as possible\nlayout: article\n---\n\n> When declaring an implicit value or method, try to give it a name that minimises the chances of conflicting with other libraries.\n\n# Reason\n\nImplicit names shadow each other and confuse the compiler (and developers).\n\nFor example:\n\n```scala mdoc\nobject foo {\n  implicit val bar: Int = 1\n}\n\nobject baz {\n  implicit val bar: String = \"foo\"\n}\n```\n\nNote how both `foo` and `baz` contain a value called `bar`, even though they do not share a type and only one is implicit.\n\nThis yields the following, confusing behaviour:\n\n```scala mdoc:fail\nimport foo._, baz._\n\nimplicitly[Int]\n```\n\nThere's a single implicit value of type [`Int`] in scope - `foo.bar`. But the compiler can't find it.\n\nOne way of demonstrating *why* the compiler cannot find it is:\n\n```scala mdoc:fail\nimport foo._, baz._\n\nval a: String = bar\n```\n\nEven in the presence of sufficient type information (we know that `a` is a [`String`], and only one of the two `bar`s in scope is a [`String`]), the compiler considers two clashing names to be ambiguous and demands the ambiguity fixed.\n\nThe problem is easy to understand and fix in this last example - the error message is quite explicit. But in the context of implicit resolution, we're just getting a generic _could not find implicit value_ error message, which can be a bit of a nigthmare to debug.\n\nIn order to avoid this, and since you cannot control how other libraries name their implicits, you must:\n* give yours very, very unique names - it doesn't matter if they look silly, they're implicits, the idea is to not refer to them by name\n* hope that other libraries do the same\n\n# Exceptions to the rule\n\nThere's at least one scenario in which an implicit's name isn't used during resolution: when you declare an implicit of type `T` in the [implicit scope](../definitions/implicit_scope.html) of `T`.\n\nFor example:\n\n```scala mdoc:reset:silent\ntrait Foo[A]\nobject Foo {\n  implicit val foo: Foo[Int] = new Foo[Int] {}\n}\n\ntrait Bar[A]\nobject Bar {\n  implicit val foo: Bar[String] = new Bar[String] {}\n}\n```\n\nEven though both implicit values share the name `foo`, implicit resolution works out:\n\n```scala mdoc\n// Brings Foo.foo and Bar.foo in scope\nimport Foo._, Bar._\n\n// No conflict here\nimplicitly[Foo[Int]]\n```\n\nIn this scenario, it's safe to give terse names to your implicits.\n\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/index.md",
    "content": "---\nlayout: section\n---\n\nThis section explores aspects of Scala that break reasonable expectations or cause cryptic compilation errors. They're easily avoided if you know about them, but have been known to mystify beginners and more advanced developers alike.\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/leaky_sealed_types.md",
    "content": "---\ntitle: Make subtypes of sealed types final\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: LeakingSealed\n        url:  http://www.wartremover.org/doc/warts.html#leakingsealed\n---\n\n> When writing a subtype for a [`sealed`] type, mark it as [`final`].\n\n# Reason\n\nMost people will instinctively assume that a [`sealed`] type cannot have implementations in another source file - that's what a type being [`sealed`] means, right?\n\nWell, not quite. A [`sealed`] type can only have *direct* subtypes in the same source file. But the constraint is not transitive and these subtypes, not being [`sealed`] themselves, can have subtypes declared in other files.\n\nFor example, having this in one file:\n\n```scala mdoc\nsealed trait Foo\n\nclass Bar extends Foo\n```\n\nWe can absolutely extend `Bar` in another source file:\n\n```scala mdoc\nclass FooBar extends Bar\n```\n\nThis is perfectly correct as per the definition of [`sealed`], and sometimes even desirable. It's just not what most people expect.\n\nFor this reason, it's preferable to default to [`final`] subtypes unless you have a good reason for them not to be.\n\n[`sealed`]:../definitions/sealed.html\n[`final`]:../definitions/final.html\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/string_concatenation.md",
    "content": "---\ntitle: Do not concatenate Strings with +\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: StringPlusAny\n        url:  http://www.wartremover.org/doc/warts.html#stringplusany\n---\n\n> When concatenating something to a [`String`], consider string interpolation rather than [`+`].\n\n# Reason\n\nBecause of a little gem called [`any2stringadd`], [`+`] is just not very sane in Scala.\n\nIt has, for example, wildly different behaviours for similar collections:\n\n```scala mdoc\nList(\"foo\") + \"bar\"\n\nSet(\"foo\") + \"bar\"\n```\n\n[`+`] also causes this kind of absolutely nonsensical error message:\n\n```scala mdoc:fail\nList(1) + 2\n```\n\nThis is because of my old nemesis, [implicit conversions](../unsafe/implicit_conversions.html). What the compiler actually ends up trying is:\n\n```scala mdoc:fail:silent\nany2stringadd(List(1)).+(2)\n```\n\nIt makes sense when you understand the underlying mechanisms, but good luck explaining that to a beginner.\n\nString interpolation, on the other hand, is safe and coherent:\n\n```scala mdoc\ns\"${List(\"foo\")}bar\"\n\ns\"${Set(\"foo\")}bar\"\n\ns\"${List(1)}${2}\"\n```\n\n[`+`]:https://www.scala-lang.org/api/2.12.8/scala/Any.html#+(other:String):String\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n[`any2stringadd`]:https://www.scala-lang.org/api/2.12.8/scala/Predef$.html#any2stringadd[A]extendsAnyVal\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/type_implicits.md",
    "content": "---\ntitle: Add explicit type annotations to implicits\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: ExplicitImplicitTypes\n        url:  http://www.wartremover.org/doc/warts.html#explicitimplicittypes\n---\n\n> Always add an explicit type to your implicit values or methods, even when they're private\n\n# Reason\n\nAside from [binary compatibility concerns](../binary_compat/explicit_type_annotations.html), implicit resolution is complex and, sometimes, buggy.\n\nThe following code compiles:\n\n```scala mdoc:silent\ntrait Foo[_]\nclass Bar\n\nimplicitly[Foo[Bar]]\n\nobject Bar {\n  implicit val impFoo: Foo[Bar] = new Foo[Bar] {}\n}\n```\n\n`impFoo` is in the [implicit scope](../definitions/implicit_scope.html) of `Foo[Bar]`, and our `implicitly[Foo[Bar]]` resolves.\n\nBut, because of [bug 8697](https://github.com/scala/bug/issues/8697), the following does not:\n\n```scala mdoc:reset:fail\ntrait Foo[_]\nclass Bar\n\nimplicitly[Foo[Bar]]\n\nobject Bar {\n  implicit val impFoo = new Foo[Bar] {}\n}\n```\n\nThe only difference between the two is that `impFoo` has an explicit type in the first snippet but not in the second.\n\nThe behaviour is clearly counter-intuitive, and considered to be a bug - but it results in a compilation failure that's trivial to fix once you know the problem.\n\nWell. Most of the time. There are [cases](https://github.com/rickynils/scalacheck/pull/468) where it will result in the *wrong* implicit value being picked, which is a lot harder to realise and fix.\n"
  },
  {
    "path": "src/main/mdoc/_tricky_behaviours/unicode_operators.md",
    "content": "---\ntitle: Avoid unicode versions of ASCII operators\nlayout: article\nlinters:\n  - name: scalastyle\n    rules:\n      - name: NonASCIICharacterChecker\n        url:  http://www.scalastyle.org/rules-1.0.0.html#org_scalastyle_scalariform_NonASCIICharacterChecker\n---\n\n> ASCII operators (such as `->`) should be preferred over their fancy unicode equivalents (such as `→`).\n\n# Reasons\n\n## Not equivalent to their ASCII counterparts\n\nWhile they're supposed to be equivalent, they're not, at least as far as [priority](https://www.scala-lang.org/files/archive/spec/2.12/06-expressions.html#infix-operations) is concerned:\n* `->` has a lower priority than `/`\n* `→` has a higher priority than `/`\n\nThis makes the following code legal:\n\n```scala mdoc\n1 -> 4 / 2 // Equivalent to 1 -> (4 / 2)\n```\n\nThe following code, on the other hand, isn't:\n\n```scala mdoc:fail\n1 → 4 / 2 // Equivalent to (1 → 4) / 2\n```\n\nThis violates reasonable assumptions about the behaviour of unicode operators, and is an accident waiting to happen. Better to avoid them altogether and rely on [fonts with ligature support](https://github.com/tonsky/FiraCode) or [editor support](https://emacsredux.com/blog/2014/08/25/a-peek-at-emacs-24-dot-4-prettify-symbols-mode/) for fancy display.\n\n\n## Soon to be deprecated\n\nAs it happens, the feature is controversial enough that it's going to be [deprecated](https://github.com/scala/scala/pull/7540) in an upcoming Scala version.\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/array_comparison.md",
    "content": "---\ntitle: Do not compare arrays with ==\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: ArrayEquals\n        url:  http://www.wartremover.org/doc/warts.html#arrayequals\n  - name: scapegoat\n    rules:\n      - name: ArrayEquals\n---\n\n> When comparing two arrays for equality, use [`sameElements`] rather than `==`.\n\n# Reason\n\n`==` does not compare arrays for value equality, but for [reference equality].\n\nThis gives us the following counter-intuitive behaviour:\n\n```scala mdoc\nArray(1) == Array(1)\n```\n\nThis is because [`Array`] is essentially an alias for Java's array, which implements [`equals`] as [reference equality] - only returning `true` if two variables point to the same array instance.\n\n[`sameElements`], on the other hand, has the behaviour you'd expect:\n\n```scala mdoc\nArray(1) sameElements Array(1)\n```\n\n# Alternatives\n\nAn alternative to [`sameElements`] is calling [`deep`] on each array before comparison:\n\n```scala mdoc\nArray(1).deep == Array(1).deep\n```\n\nThis is not the preferred solution because it's slightly more expensive, creating instances that will be discarded immediately.\n\n[`Array`]:https://www.scala-lang.org/api/2.12.8/scala/Array.html\n[`sameElements`]:https://www.scala-lang.org/api/2.12.8/scala/Array.html#sameElements(that:scala.collection.GenIterable[A]):Boolean\n[`deep`]:https://www.scala-lang.org/api/2.12.8/scala/Array.html#deep:IndexedSeq[Any]\n[`equals`]:https://docs.oracle.com/javase/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Object-\n[reference equality]:../definitions/reference_equality.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/avoid_null.md",
    "content": "---\ntitle: Do not use null\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: \"Null\"\n        url:  http://www.wartremover.org/doc/warts.html#null\n  - name: scapegoat\n    rules:\n      - name: NullAssignment\n      - name: NullParameter\n  - name: scalastyle\n    rules:\n      - name: NullChecker\n        url:  http://www.scalastyle.org/rules-1.0.0.html#org_scalastyle_scalariform_NullChecker\n---\n\n> Whenever `null` seems like a good idea, use [`Option`] instead.\n\n# Reasons\n\n## It's not safe\n\nAs far as types are concerned, `null` is a bit of a lie:\n\n```scala mdoc:silent\nval s: String = null\n```\n\nThe compiler believes `s` to be a [`String`] and will accept it wherever one is required. The compiler is, obviously, wrong:\n\n```scala mdoc:crash\ns.toLowerCase\n```\n\nWhenever you're using `null`, you're hindering the compiler's ability to prove your code incorrect.\n\n## It's not pleasant\n\nThe existence of `null` is terribly unpleasant: it means that you can't trust any value to not be `null`. So, in theory, you'd be forced to write code like:\n\n```scala mdoc\ndef concat(a: String, b: String): String = {\n  if(a == null)      b\n  else if(b == null) a\n  else               s\"$a$b\"\n}\n```\n\nThat's a lot of boilerplate. In Scala, the general convention is that we pretend `null` does not exist and any value not wrapped in an [`Option`] must always be available. This allows us to rewrite `concat`:\n\n```scala mdoc:reset\ndef concat(a: String, b: String): String = s\"$a$b\"\n```\n\nJust as importantly, if we were to write `concat` such that either `a` or `b` might not be set, the compiler forces us to deal with this:\n\n```scala mdoc:reset\ndef concat(a: Option[String], b: Option[String]): String =\n  s\"${a.getOrElse(\"\")}${b.getOrElse(\"\")}\"\n```\n\n# Exception to the rule\n\nThere exists at least one scenario in which you must use `null`: Java interop. Java being what it is, some of its APIs use `null` to mean _no value there_, and you don't have much choice but to comply.\n\nThe standard [`URI`] class, for example, expect `null` values in its constructor - if you don't have a _fragment_, say, stick `null` instead and [`URI`] will work it out.\n\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n[`URI`]:https://docs.oracle.com/javase/8/docs/api/java/net/URI.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/checking_empty_collection.md",
    "content": "---\ntitle: Do not compute the size of a collection to check for emptiness\nlayout: article\nlinters:\n  - name: scapegoat\n    rules:\n      - name: AvoidSizeEqualsZero\n      - name: AvoidSizeNotEqualsZero\n---\n\n> When checking whether a collection is empty, use [`isEmpty`] or [`nonEmpty`] rather than the all too common `size == 0`.\n\n# Reasons\n\n## It's inefficient\n\nCollections such as [`List`] require a complete traversal to compute their size. Doing so just to check whether there's at least one element is clearly more expensive than it needs to be.\n\nTo prove this point, let's create a simple benchmarking method:\n\n```scala mdoc\ndef time[A](t: => A): Long = {\n  val now = System.currentTimeMillis()\n  t\n  System.currentTimeMillis() - now\n}\n```\n\nWe'll also need an unreasonably large [`List`]:\n\n```scala mdoc:silent\nval list = (0 to 10000000).toList\n```\n\nWe can now check that one approach is indeed far longer than the other:\n\n```scala mdoc\ntime(list.isEmpty)\n\ntime(list.size == 0)\n```\n\n## It's unsafe\n\nSome collections are infinite, and will loop forever when you try to compute their length:\n\n[//]:I can't use mdoc here, since this will loop forever\n```scala\n// Don't run this.\nStream.from(1).size\n```\n\n[`isEmpty`], on the other hand, behaves sanely:\n\n```scala mdoc\nStream.from(1).isEmpty\n```\n\n[`List`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/List.html\n[`Stream`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/Stream.html\n[`isEmpty`]:https://www.scala-lang.org/api/2.12.8/scala/collection/SeqLike.html#isEmpty:Boolean\n[`nonEmpty`]:https://www.scala-lang.org/api/2.12.8/scala/collection/SeqLike.html#nonEmpty:Boolean\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/custom_extractors.md",
    "content": "---\ntitle: Do not return Option from custom extractors\nlayout: article\n---\n\n> When defining a custom extractor that happens to be [total](../definitions/total_function.html), always have a return type of [`Some`] rather than [`Option`].\n\n# Reason\n\nThis is a bit convoluted and has to do with exhaustivity checking in pattern matching, by which I mean:\n\n```scala mdoc:fail\ndef unwrap(oi: Option[Int]): Int = oi match {\n  case Some(i) => i\n}\n```\n\nYou get a warning here because there are values of `oi` that would cause your code to fail at runtime.\n\nA common misconception about this check is that you get a warning whenever the compiler fails to prove exhaustivity. What actually happens is slightly different: you'll get a warning whenever the compiler succeeds in proving non-exhaustivity.\n\nThe distinction is subtle, but important: when the compiler cannot find a concrete value that is not covered by a pattern match, even though it knows such a value might exist, it will not warn.\n\nAnd if your custom extractor returns [`Option`], that's exactly what happens: it's telling the compiler that there might be values for which it's not defined, but it doesn't tell it *which* values. This effectively disables exhaustivity checking.\n\nHere's a concrete example:\n\n```scala mdoc\nobject ExtractSome {\n  def unapply[A](s: Some[A]): Option[A] = s\n}\n```\n\nUsing this code, we can write the following pattern match:\n\n```scala mdoc\ndef unwrap(oi: Option[Int]): Int = oi match {\n  case ExtractSome(i) => i\n}\n```\n\nWe're not getting a warning, even though our pattern match is clearly non-exhaustive: it'll fail on [`None`].\n\n```scala mdoc:crash\nunwrap(None)\n```\n\nThe presence of an extractor whose return type is [`Option`] disabled exhaustivity checking, even in the presence of concrete values that are not covered by the pattern match.\n\nLet's change our custom extractor to return a [`Some`]:\n\n```scala mdoc:reset\nobject ExtractSome {\n  def unapply[A](s: Some[A]): Some[A] = s\n}\n```\n\nThis is a subtle difference that changes everything: [`Some`] means that our extractor will always succeed, allowing the compiler to look for further proof of non-exhaustivity (and find it):\n\n```scala mdoc:fail\ndef unwrap(oi: Option[Int]): Int = oi match {\n  case ExtractSome(i) => i\n}\n```\n\n# Improvement\n\nAn even better rule of thumb would be to either not define custom extractors, or at least never define partial ones - pattern match exhaustivity is something that most people take for granted, and sneakily disabling it can lead to all sorts of unpleasant runtime behaviours.\n\n[`Some`]:https://www.scala-lang.org/api/2.12.8/scala/Some.html\n[`Option`]:https://www.scala-lang.org/api/2.12.8/scala/Option.html\n[`None`]:https://www.scala-lang.org/api/2.12.8/scala/None$.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/implicit_conversions.md",
    "content": "---\ntitle: Avoid implicit conversions\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: ImplicitConversion\n        url:  http://www.wartremover.org/doc/warts.html#implicitconversion\n---\n\n> Avoid implicit conversions like the plague they are.\n\n# Reason\n\nImplicit conversions allow the compiler to treat values of a type as values of another type.\n\nThere's at least one set of scenarios in which this is unambiguously bad: non-[total] conversions. That is, converting an `A` to a `B` when there exists `A`s for which this conversion is impossible.\n\nFor example, [`String`] to [`Int`]:\n\n```scala mdoc\nimplicit def str2int(str: String): Int = Integer.parseInt(str)\n```\n\nWhat this does is give the compiler a proof, as far as it's concerned, that all [`String`]s are [`Int`]s and he can accept the former where the later is expected.\n\nOur proof is unfortunately flawed, and will result in runtime failures:\n\n```scala mdoc:crash\n\"foobar\" / 2\n```\n\n# Exceptions to the rule\n\n[Total][total] conversions are more palatable - they shouldn't result in runtime failures, at least.\n\nOne common scenario is adding methods to an existing type:\n\n```scala mdoc\nimplicit class ExtendedInt(i: Int) {\n  def add1: Int = i + 1\n}\n```\n\nWhich lets us run:\n\n```scala mdoc\n1.add1\n```\n\nIn this scenario, all [`Int`]s can be converted to `ExtendedInt`: the conversion is [total] and cannot result in runtime failure.\n\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n[`String`]:https://docs.oracle.com/javase/8/docs/api/java/lang/String.html\n[total]:../definitions/total_function.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/index.md",
    "content": "---\nlayout: section\n---\n\nWe're now tackling parts of Scala that are actively unsafe to use: misusing them will cause programs not to terminate, or to break in truly incomprehensible ways.\n\nReaders should pay attention to these rules, as in my experience even advanced developers sometimes fail to heed some of them.\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/recursion.md",
    "content": "---\ntitle: Make recursive functions tail-recursive\nlayout: article\nlinters:\n  - name: wartremover\n    rules:\n      - name: Recursion\n        url:  http://www.wartremover.org/doc/warts.html#recursion\n---\n\n> When writing [recursive] functions, consider making them [tail recursive].\n\n# Reason\n\nNon-tail recursive functions that call themselves too often end up throwing [`StackOverflowError`] at runtime.\n\nHere's a naïve recursive function used to compute the sum of a [`List[Int]`][`List`]:\n\n```scala mdoc\ndef sum(is: List[Int]): Int = is match {\n  case h :: t => h + sum(t)\n  case _      => 0\n}\n```\n\nThis implementation suffers from a major flaw: on long enough lists, it will cause a runtime exception.\n\n[//]: I cannot use mdoc here since there's no way I could find to truncate the output, and the stack trace is *large*.\n```scala\nsum(List.range(1, 30000))\n// java.lang.StackOverflowError\n//   at .sum(<console>:12)\n//   at .sum(<console>:13)\n//   at .sum(<console>:13)\n//   [...]\n```\n\nWhat happens is that, for each recursive call, the call's context must be stored on the stack - and when a recursive function calls itself a lot, you get a stack overflow exception.\n\nWhen the compiler spots a [tail recursive] function, however, it knows to optimise it by essentially turning it into a `while` loops - no more recursive calls, no more frames pushed on the stack.\n\nHere's our `sum` function, but implemented tail recursively:\n\n```scala mdoc:reset\ndef sum(is: List[Int]): Int = {\n\n  // `loop` i our tail recursive function, keeping a running sum\n  // in `acc`\n  def loop(cur: List[Int], acc: Int): Int = cur match {\n    case h :: t => loop(t, acc + h)\n    case _      => acc\n  }\n\n  loop(is, 0)\n}\n```\n\nAnd as you can see, this is now safe:\n\n```scala mdoc\nsum(List.range(1, 30000))\n```\n\n# Exceptions to the rule\n\nTail recursion is a desirable property, but not an absolute requirement.\n\nThere are scenarios where \"normal\" recursion is more appropriate. A fairly standard example is tree traversal:\n* the recursion is bounded to the height of the tree, so there's no real risk of a [`StackOverflowError`].\n* tail-recursive functions for tree exploration are far more complicated than non tail-recursive ones.\n\nAs is often the case, this rule is more of a default decision, to be overruled when you need to.\n\n\n\n[recursive]:../definitions/recursion.html\n[tail recursive]:../definitions/tail_recursion.html\n[`List`]:https://www.scala-lang.org/api/2.12.8/scala/collection/immutable/List.html\n[`StackOverflowError`]:https://docs.oracle.com/javase/8/docs/api/java/lang/StackOverflowError.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/structural_types.md",
    "content": "---\ntitle: Avoid structural types\nlayout: article\nlinters:\n  - name: scalastyle\n    rules:\n      - name: StructuralTypeChecker\n        url:  http://www.scalastyle.org/rules-1.0.0.html#org_scalastyle_scalariform_StructuralTypeChecker\n---\n\n> When a structural type seems like a good solution to a problem, consider using a [type class] instead.\n\n# Reasons\n\n## Structural types are \"slow\"\n\nStructural types rely on runtime reflection. Since reflection pushes some type work to the runtime, it's inherently slower than solutions where all this work is done at compile time.\n\nNote that this is unlikely to be a bottleneck except in very specific use cases, and shouldn't be enough to discourage people in scenarios where structural types are an elegant solution.\n\n## Structural types are not always supported\n\nOn the other hand, the fact that structural types might fail at runtime for reasons entirely outside of the code author's control probably is a good reason not to use them.\n\nWhen running on the JVM (as opposed to the scala.js or native backend, say), there's one scenario where structural types will break: reflection is controlled by whatever [`SecurityManager`] is running. The default one is quite lenient, but it's possible to configure one that bans reflection altogether.\n\nThis will break Scala code in ways that are impossible to validate statically.\n\n## Type classes can express the same thing\n\nLet's imagine that we want the following behaviour:\n\n```scala mdoc\ndef add1(x: { def get: Int }): Int = 1 + x.get\n```\n\n`add1` takes any object that has a `get` method, calls it, adds 1 to it and returns that.\n\nFor example:\n\n```scala mdoc\nfinal case class Wrapper(i: Int) {\n  def get: Int = i\n}\n```\n\n`Wrapper` has a `get` method, and we can call `add1` on it:\n\n```scala mdoc\nadd1(Wrapper(1))\n```\n\nIt is, however, possible to express the notion of _has a get: Int_ method as a [type class]:\n\n```scala mdoc\ntrait HasGet[A] {\n  def get(a: A): Int\n}\n\n// add1 now works with any type on which value you can call get\ndef add1[A](a: A)(implicit hga: HasGet[A]): Int = hga.get(a) + 1\n```\n\nDeclaring an instance for `Wrapper` is straightforward:\n\n```scala mdoc:silent\nimplicit val wrap: HasGet[Wrapper] = new HasGet[Wrapper] {\n  def get(a: Wrapper) = a.i\n}\n```\n\nAnd we can now call `add1` like we wanted:\n\n```scala mdoc\nadd1(Wrapper(1))\n```\n\nThis solution is admitedly more verbose than the structural type alternative. It's also entirely statically verified, cannot fail at runtime, and is probably also slightly faster.\n\n[`SecurityManager`]:https://docs.oracle.com/javase/7/docs/api/java/lang/SecurityManager.html\n[type class]:../definitions/type_class.html\n"
  },
  {
    "path": "src/main/mdoc/_unsafe/tail_recursion.md",
    "content": "---\ntitle: Mark tail-recursive functions as such\nlayout: article\n---\n\n> Always annotate your [tail-recursive] function with [`@annotation.tailrec`].\n\n# Reason\n\nThis will let the compiler know that you expect your function to be [tail-recursive], and allow compilation to fail should it not be.\n\nThis is important, because there are scenarios where you'd expect a function to be [tail-recursive] but it really isn't. Take, for example:\n\n```scala mdoc\nclass Foo {\n  def sum(cur: List[Int], acc: Int): Int = cur match {\n    case h :: t => sum(t, acc + h)\n    case _      => acc\n  }\n}\n```\n\nThis looks [tail-recursive] - `sum` calls itself in tail position, after all. Turns out, however, that it's not:\n\n```scala mdoc:fail:reset\nclass Foo {\n  @annotation.tailrec\n  def sum(cur: List[Int], acc: Int): Int = cur match {\n    case h :: t => sum(t, acc + h)\n    case _      => acc\n  }\n}\n```\n\nThanks to that error message, we can fix the problem and make `sum` propery [tail-recursive]:\n\n```scala mdoc:reset\nclass Foo {\n  @annotation.tailrec\n  final def sum(cur: List[Int], acc: Int): Int = cur match {\n    case h :: t => sum(t, acc + h)\n    case _      => acc\n  }\n}\n```\n\n[recursive]:../definitions/recursion.html\n[tail-recursive]:../definitions/tail_recursion.html\n[`@annotation.tailrec`]:https://www.scala-lang.org/api/2.12.8/scala/annotation/tailrec.html\n"
  },
  {
    "path": "src/main/mdoc/_warming_up/checking_for_nan.md",
    "content": "---\ntitle: Use isNaN when checking for NaN\nlayout: article\nlinters:\n  - name: linter\n    rules:\n      - name: UseIsNanNotNanComparison\n        url:  https://github.com/HairyFotr/linter/blob/master/src/test/scala/LinterPluginTest.scala#L1930\n  - name: scapegoat\n    rules:\n      - name: NanComparison\n---\n\n> When checking whether a number is [`NaN`], use [`isNaN`] rather than `== NaN`.\n\nNote that, unlike most rules here, this one is not Scala specific. `NaN` equality behaves unintuitively everywhere `NaN` exists.\n\n# Reason\n\nBy [specification](https://en.wikipedia.org/wiki/IEEE_754), [`NaN`] is not equal to anything, not even itself:\n\n```scala mdoc\nDouble.NaN == Double.NaN\n```\n\nUse [`isNaN`] instead, which is meant for just this task:\n\n```scala mdoc\nDouble.NaN.isNaN\n```\n\n# Exception to the rule\n\nThere's one scenario in which you shouldn't use [`isNaN`]: if you're working with a lot of numbers and need to manually validate each one of them. [`isNaN`] can be a bit slow - it's been much improved in 2.12+, but still has a small cost.\n\nIf you identify this as a bottleneck, you always have the option of being clever. The two following methods produce the same result, but the second one is faster:\n\n```scala mdoc\ndef slowFilterNaN(ds: Seq[Double]): Seq[Double] = ds.filter(d => !d.isNaN)\n\ndef fastFilterNaN(ds: Seq[Double]): Seq[Double] = ds.filter(d => d == d)\n```\n\nNote that this is an optimisation, and one that is sure to mystify some readers. It should only be used when a bottleneck is identified, as the runtime gain is otherwise guaranteed to be lower than the human cost of explaining it over and over again.\n\n[`NaN`]:https://www.scala-lang.org/api/2.12.8/scala/Double$.html#NaN:Double(NaN)\n[`isNaN`]:https://www.scala-lang.org/api/2.12.8/scala/Double.html#isNaN:Boolean\n"
  },
  {
    "path": "src/main/mdoc/_warming_up/checking_for_odd.md",
    "content": "---\ntitle: Compare remainder to 0 when checking for oddness\nlayout: article\nlinters:\n  - name: scapegoat\n    rules:\n      - name: BrokenOddness\n---\n\n> When checking whether a number is odd, always use `x % 2 != 0` rather than the more common `x % 2 == 1`.\n\nNote that, unlike most rules here, this one is not Scala specific.\n\n# Reason\n\nThere are odd numbers whose division by 2 has a remainder that's not 1:\n\n```scala mdoc\n-3 % 2\n```\n\nThe [mathematical definition](https://en.wikipedia.org/wiki/Parity_(mathematics)) of odd and even numbers is:\n* an even number is one whose division by 2 has no remainder\n* an odd number is not even\n\nThis suggests the following implementations:\n\n```scala mdoc\ndef isEven(i: Int): Boolean = i % 2 == 0\n\ndef isOdd(i: Int): Boolean = i % 2 != 0\n```\n\nAnd, indeed:\n\n```scala mdoc\n-3 % 2 != 0\n```\n"
  },
  {
    "path": "src/main/mdoc/_warming_up/index.md",
    "content": "---\nlayout: section\n---\n\nThis first section presents a few simple, non-controversial rules, with the purpose of easing the reader into the site's format.\n\nMost of these rules are not Scala specific and probably familiar to a lot of readers already, but they should not be skipped - ignoring them caused me an embarrassing number of afternoons spent looking for the cause of behaviours I would have sworn could not possibly happen.\n"
  },
  {
    "path": "src/main/mdoc/_warming_up/numeric_literals.md",
    "content": "---\ntitle: Use upper case numeric literal suffixes\nlayout: article\nlinters:\n  - name: scalastyle\n    rules:\n      - name: UppercaseLChecker\n        url:  http://www.scalastyle.org/rules-1.0.0.html#org_scalastyle_scalariform_UppercaseLChecker\n---\n\n> When declaring literal numbers such as [`Long`] or [`Float`], use upper case suffix. For example, prefer `2L` to `2l`.\n\n# Reason\n\nDepending on the font and the syntax highlighting scheme, some letters look a lot like numbers. In some configurations, for example, `l` (lower case `L`) and `1` (one) are basically indistinguishable. Github, for instance, while not the worst offender, isn't doing a great job there.\n\nTo the casual reader, the following has a fair chance of looking like a list of [`Int`]s, but a [`Long`] sneaked in:\n\n```scala mdoc:silent\nList(1, 11, 111, 111l, 11111, 11111, 11111)\n```\n\nUsing upper-case letters makes this more obvious:\n\n```scala mdoc:silent\nList(1, 11, 111, 111L, 11111, 11111, 11111)\n```\n\n[`Long`]:https://www.scala-lang.org/api/2.12.8/scala/Long.html\n[`Float`]:https://www.scala-lang.org/api/2.12.8/scala/Float.html\n[`Int`]:https://www.scala-lang.org/api/2.12.8/scala/Int.html\n"
  },
  {
    "path": "src/main/mdoc/index.md",
    "content": "---\nlayout: index\n---\n\n# Foreword\n\nI often find myself, both professionaly and otherwise, having to explain bits of Scala to newcomers to the language (but usually not new to programming).\n\nSomething that's becoming increasingly obvious is that Scala developers follow a certain set of unspoken rules without really thinking about them, and never really explain them to beginners. This is not helping Scala's reputation as a hard to learn language, which is unfortunate - it's a language I enjoy and wish more people would learn.\n\nThis site is meant to address that, by listing and explaining all these rules I wish someone'd told me about when I was learning the language.\n\nComments, suggestions, ... are welcome! I'm clearly not the best Scala developer out there and might have gotten things wrong, or right for the wrong reasons. If you see areas that could be improved on, feel free to open an issue!\n"
  },
  {
    "path": "src/site/_config.yml",
    "content": "name:        Scala Best Practices\nmarkdown:    kramdown\nhighlighter: rouge\nbaseurl:     /scala-best-practices\n\ncollections:\n  warming_up:\n    output:   true\n    title:    Warming up\n    sequence: 1\n  tricky_behaviours:\n    output:   true\n    title:    Tricky behaviours\n    sequence: 2\n  unsafe:\n    output:   true\n    title:    Unsafe patterns\n    sequence: 3\n  partial_functions:\n    output:   true\n    title:    Partial functions\n    sequence: 4\n  binary_compat:\n    output:   true\n    title:    Binary compatibility\n    sequence: 5\n  referential_transparency:\n    output:   true\n    title:    Referential transparency\n    sequence: 6\n  adts:\n    output:   true\n    title:    ADTs\n    sequence: 7\n  oop:\n    output:   true\n    title:    OOP\n    sequence: 8\n  definitions:\n    output: true\n\nkramdown:\n  input:     GFM\n  hard_wrap: false\n\ncompress_html:\n  clippings: all\n  comments:  [\"<!-- \", \" -->\"]\n  endings:   all\n"
  },
  {
    "path": "src/site/_includes/footer.html",
    "content": "\n<div id=\"footer\">\n  <hr>\n\n  <p class=\"wrapper\">\n    This work is licensed under a <a rel=\"license\" href=\"https://creativecommons.org/licenses/by/4.0/\">Creative Commons Attribution 4.0 International License</a>.\n  </p>\n</div>\n"
  },
  {
    "path": "src/site/_includes/header.html",
    "content": "<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>{{ site.name }}{% if page.title %} - {{ page.title }}{% endif %}</title>\n\n    <link rel=\"stylesheet\" href=\"{{ site.baseurl }}/css/styles.css\">\n    <link  rel=\"shortcut icon\" href=\"{{ site.baseurl }}/favicon.ico\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n    <!--[if lt IE 9]>\n        <script src=\"//html5shiv.googlecode.com/svn/trunk/html5.js\"></script>\n        <![endif]-->\n         </head>\n  <body>\n    <div id=\"navbar\">\n      <div class=\"wrapper\">\n        <span class=\"external\"><a title=\"Issues\" href=\"https://github.com/nrinaudo/scala-best-practices/issues\"><i class=\"fa fa-bug fa-lg\"></i></a></span>\n        <span class=\"external\"><a title=\"Github\" href=\"https://github.com/nrinaudo/scala-best-practices\"><i class=\"fa-brands fa-github fa-lg\"></i></a></span>\n        <span class=\"external\"><a title=\"Twitter\" href=\"https://twitter.com/nicolasrinaudo\"><i class=\"fa-brands fa-twitter fa-lg\"></i></a></span>\n        <span class=\"external\"><a title=\"Mastodon\" rel=\"me\" href=\"https://functional.cafe/@NicolasRinaudo\"><i class=\"fa-brands fa-mastodon fa-lg\"></i></a></span>\n\n        <span class=\"internal\"><a title=\"Home\" href=\"{{ site.baseurl }}/\">Best Practices</a></span>\n        <!--<span class=\"internal\"><a title=\"Home\" href=\"{{ site.baseurl }}/\"><i class=\"fa fa-home fa-lg\"></i></a></span> -->\n      </div>\n    </div>\n"
  },
  {
    "path": "src/site/_includes/linters.html",
    "content": "<h1>Checked by</h1>\n{% if include.linters %}\n<table>\n  <thead>\n    <tr>\n      <th>Linter</th>\n      <th>Rule</th>\n    </tr>\n  </thead>\n\n  <tbody>\n    {% assign sorted_linters = include.linters | sort: \"name\" %}\n    {% for linter in sorted_linters %}\n    {% case linter.name %}\n    {% when 'wartremover' %}\n    {% assign linter_name = 'WartRemover' %}\n    {% assign linter_url = 'http://www.wartremover.org/' %}\n    {% when 'scapegoat' %}\n    {% assign linter_name = 'Scapegoat' %}\n    {% assign linter_url = 'https://github.com/sksamuel/scapegoat' %}\n    {% when 'linter' %}\n    {% assign linter_name = 'Scala Linter' %}\n    {% assign linter_url = 'https://github.com/HairyFotr/linter' %}\n    {% when 'scalastyle' %}\n    {% assign linter_name = 'Scalastyle' %}\n    {% assign linter_url = 'http://www.scalastyle.org/' %}\n    {% else %}\n    {% assign linter_url = false %}\n    {% endcase %}\n    <tr>\n      <td>\n        {% if linter_url %}\n        <a href=\"{{ linter_url }}\">{{ linter_name }}</a>\n        {% else %}\n        {{ linter_name }}\n        {% endif %}\n      </td>\n      <td>\n        <ul>\n          {% for rule in linter.rules %}\n          <li>\n            {% if rule.url %}\n            <a href=\"{{ rule.url }}\">{{ rule.name }}</a>\n            {% else %}\n            {{ rule.name }}\n            {% endif %}\n          </li>\n          {% endfor %}\n        </ul>\n      </td>\n    </tr>\n    {% endfor %}\n  </tbody>\n</table>\n{% else %}\nThis rule is not checked by any linter that I know of.\n{% endif %}\n"
  },
  {
    "path": "src/site/_includes/toc.html",
    "content": "{% assign sorted_pages = include.collection | sort: \"title\" %}\n<ul>\n{% for x in sorted_pages %}\n{% if x.title != \"Index\" %}\n<li>\n{% if x.status == \"wip\" %}\n<i>{{ x.title }} (WIP)</i>\n{% else %}\n<a href=\"{{ site.baseurl }}{{ x.url }}\">{{ x.title }}</a>\n{% endif %}\n</li>\n{% endif %}\n{% endfor %}\n</ul>\n"
  },
  {
    "path": "src/site/_layouts/article.html",
    "content": "---\nlayout: compress\n---\n{% include header.html %}\n<div class=\"wrapper\">\n    {% if page.title %}<h1>{{ page.title }}</h1>{% endif %}\n    {{ content }}\n\n    {% include linters.html linters=page.linters %}\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/site/_layouts/compress.html",
    "content": "---\n# Jekyll layout that compresses HTML\n# v3.0.4\n# http://jch.penibelst.de/\n# © 2014–2015 Anatol Broder\n# MIT License\n---\n\n{% capture _LINE_FEED %}\n{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == \"all\" %}{% assign _endings = \"html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th\" | split: \" \" %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == \"all\" %}{% assign _comments = \"<!-- -->\" | split: \" \" %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: \"<pre\" %}{% assign _content = \"\" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: \"</pre>\" %}{% assign _pres_after = \"\" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: \" \" | join: \" \" %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: \" \" | join: \" \" %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains \"</pre>\" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains \"</pre>\" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == \"all\" %}{% assign _clippings = \"html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th\" | split: \" \" %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = \" <e;<e; </e>;</e>;</e> ;</e>\" | replace: \"e\", _element | split: \";\" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id=\"compress_html_profile_{{ site.time | date: \"%Y%m%d\" }}\" class=\"compress_html_profile\"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}\n"
  },
  {
    "path": "src/site/_layouts/definition.html",
    "content": "---\nlayout: compress\n---\n{% include header.html %}\n<div class=\"wrapper\">\n    {% if page.title %}<h1>{{ page.title }}</h1>{% endif %}\n    {{ content }}\n\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/site/_layouts/index.html",
    "content": "---\nlayout: compress\n---\n{% include header.html %}\n<div class=\"wrapper index\">\n  {{ content }}\n\n  <h1>Table of Contents</h1>\n\n{% assign cs = site.collections | sort: 'sequence' %}\n{% for c in cs %}\n{% if c.title %}\n<h2><a href=\"{{ site.baseurl }}/{{ c.label }}\">{{ c.title }}</a></h2>\n{% include toc.html collection=c.docs %}\n{% endif %}\n{% endfor %}\n\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/site/_layouts/section.html",
    "content": "---\nlayout: compress\n---\n{% include header.html %}\n\n{% for c in site.collections %}\n{% if c.label == page.collection %}\n{% assign col = c %}\n{% endif %}\n{% endfor %}\n\n\n<div class=\"wrapper\">\n\n  <h1>{{ col.title }}</h1>\n  {{ content }}\n\n  <h1>Content</h1>\n\n{% include toc.html collection=col.docs %}\n\n</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/site/css/fira_code/fira_code.css",
    "content": "@font-face{\n    font-family: 'Fira Code';\n    src: url('woff2/FiraCode-Light.woff2') format('woff2'),\n         url('woff/FiraCode-Light.woff') format('woff');\n    font-weight: 300;\n    font-style: normal;\n}\n\n@font-face{\n    font-family: 'Fira Code';\n    src: url('woff2/FiraCode-Regular.woff2') format('woff2'),\n         url('woff/FiraCode-Regular.woff') format('woff');\n    font-weight: 400;\n    font-style: normal;\n}\n\n@font-face{\n    font-family: 'Fira Code';\n    src: url('woff2/FiraCode-Medium.woff2') format('woff2'),\n         url('woff/FiraCode-Medium.woff') format('woff');\n    font-weight: 500;\n    font-style: normal;\n}\n\n@font-face{\n    font-family: 'Fira Code';\n    src: url('woff2/FiraCode-Bold.woff2') format('woff2'),\n         url('woff/FiraCode-Bold.woff') format('woff');\n    font-weight: 700;\n    font-style: normal;\n}\n"
  },
  {
    "path": "src/site/css/fontawesome/font-awesome.css",
    "content": "/*!\n * Font Awesome Free 6.2.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-brands,\n.fa-classic,\n.fa-regular,\n.fa-sharp,\n.fa-solid,\n.fab,\n.far,\n.fas {\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.fa-classic,\n.fa-regular,\n.fa-solid,\n.far,\n.fas {\n  font-family: \"Font Awesome 6 Free\"\n}\n\n.fa-brands,\n.fab {\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: .625em;\n  line-height: .1em;\n  vertical-align: .225em\n}\n\n.fa-xs {\n  font-size: .75em;\n  line-height: .08333em;\n  vertical-align: .125em\n}\n\n.fa-sm {\n  font-size: .875em;\n  line-height: .07143em;\n  vertical-align: .05357em\n}\n\n.fa-lg {\n  font-size: 1.25em;\n  line-height: .05em;\n  vertical-align: -.075em\n}\n\n.fa-xl {\n  font-size: 1.5em;\n  line-height: .04167em;\n  vertical-align: -.125em\n}\n\n.fa-2xl {\n  font-size: 2em;\n  line-height: .03125em;\n  vertical-align: -.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\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-radius: var(--fa-border-radius, .1em);\n  border: var(--fa-border-width, .08em) var(--fa-border-style, solid) var(--fa-border-color, #eee);\n  padding: var(--fa-border-padding, .2em .25em .15em)\n}\n\n.fa-pull-left {\n  float: left;\n  margin-right: var(--fa-pull-margin, .3em)\n}\n\n.fa-pull-right {\n  float: right;\n  margin-left: var(--fa-pull-margin, .3em)\n}\n\n.fa-beat {\n  -webkit-animation-name: fa-beat;\n  animation-name: fa-beat;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n  animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out)\n}\n\n.fa-bounce {\n  -webkit-animation-name: fa-bounce;\n  animation-name: fa-bounce;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n  animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1));\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))\n}\n\n.fa-fade {\n  -webkit-animation-name: fa-fade;\n  animation-name: fa-fade;\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1));\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))\n}\n\n.fa-beat-fade,\n.fa-fade {\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n  animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s)\n}\n\n.fa-beat-fade {\n  -webkit-animation-name: fa-beat-fade;\n  animation-name: fa-beat-fade;\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1));\n  animation-timing-function: var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))\n}\n\n.fa-flip {\n  -webkit-animation-name: fa-flip;\n  animation-name: fa-flip;\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n  animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\n  animation-timing-function: var(--fa-animation-timing, ease-in-out)\n}\n\n.fa-shake {\n  -webkit-animation-name: fa-shake;\n  animation-name: fa-shake;\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\n  animation-timing-function: var(--fa-animation-timing, linear)\n}\n\n.fa-shake,\n.fa-spin {\n  -webkit-animation-delay: var(--fa-animation-delay, 0s);\n  animation-delay: var(--fa-animation-delay, 0s);\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal)\n}\n\n.fa-spin {\n  -webkit-animation-name: fa-spin;\n  animation-name: fa-spin;\n  -webkit-animation-duration: var(--fa-animation-duration, 2s);\n  animation-duration: var(--fa-animation-duration, 2s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, linear);\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  -webkit-animation-name: fa-spin;\n  animation-name: fa-spin;\n  -webkit-animation-direction: var(--fa-animation-direction, normal);\n  animation-direction: var(--fa-animation-direction, normal);\n  -webkit-animation-duration: var(--fa-animation-duration, 1s);\n  animation-duration: var(--fa-animation-duration, 1s);\n  -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  animation-iteration-count: var(--fa-animation-iteration-count, infinite);\n  -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\n  animation-timing-function: var(--fa-animation-timing, steps(8))\n}\n\n@media (prefers-reduced-motion:reduce) {\n\n  .fa-beat,\n  .fa-beat-fade,\n  .fa-bounce,\n  .fa-fade,\n  .fa-flip,\n  .fa-pulse,\n  .fa-shake,\n  .fa-spin,\n  .fa-spin-pulse {\n    -webkit-animation-delay: -1ms;\n    animation-delay: -1ms;\n    -webkit-animation-duration: 1ms;\n    animation-duration: 1ms;\n    -webkit-animation-iteration-count: 1;\n    animation-iteration-count: 1;\n    transition-delay: 0s;\n    transition-duration: 0s\n  }\n}\n\n@-webkit-keyframes fa-beat {\n\n  0%,\n  90% {\n    -webkit-transform: scale(1);\n    transform: scale(1)\n  }\n\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n    transform: scale(var(--fa-beat-scale, 1.25))\n  }\n}\n\n@keyframes fa-beat {\n\n  0%,\n  90% {\n    -webkit-transform: scale(1);\n    transform: scale(1)\n  }\n\n  45% {\n    -webkit-transform: scale(var(--fa-beat-scale, 1.25));\n    transform: scale(var(--fa-beat-scale, 1.25))\n  }\n}\n\n@-webkit-keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, .9)) translateY(0);\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, .9)) translateY(0)\n  }\n\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, .9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em));\n    transform: scale(var(--fa-bounce-jump-scale-x, .9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))\n  }\n\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, .95)) translateY(0);\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, .95)) translateY(0)\n  }\n\n  57% {\n    -webkit-transform: scale(1) translateY(var(--fa-bounce-rebound, -.125em));\n    transform: scale(1) translateY(var(--fa-bounce-rebound, -.125em))\n  }\n\n  64% {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n\n  to {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n}\n\n@keyframes fa-bounce {\n  0% {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n\n  10% {\n    -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, .9)) translateY(0);\n    transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, .9)) translateY(0)\n  }\n\n  30% {\n    -webkit-transform: scale(var(--fa-bounce-jump-scale-x, .9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em));\n    transform: scale(var(--fa-bounce-jump-scale-x, .9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))\n  }\n\n  50% {\n    -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, .95)) translateY(0);\n    transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, .95)) translateY(0)\n  }\n\n  57% {\n    -webkit-transform: scale(1) translateY(var(--fa-bounce-rebound, -.125em));\n    transform: scale(1) translateY(var(--fa-bounce-rebound, -.125em))\n  }\n\n  64% {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n\n  to {\n    -webkit-transform: scale(1) translateY(0);\n    transform: scale(1) translateY(0)\n  }\n}\n\n@-webkit-keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, .4)\n  }\n}\n\n@keyframes fa-fade {\n  50% {\n    opacity: var(--fa-fade-opacity, .4)\n  }\n}\n\n@-webkit-keyframes fa-beat-fade {\n\n  0%,\n  to {\n    opacity: var(--fa-beat-fade-opacity, .4);\n    -webkit-transform: scale(1);\n    transform: scale(1)\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n    transform: scale(var(--fa-beat-fade-scale, 1.125))\n  }\n}\n\n@keyframes fa-beat-fade {\n\n  0%,\n  to {\n    opacity: var(--fa-beat-fade-opacity, .4);\n    -webkit-transform: scale(1);\n    transform: scale(1)\n  }\n\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\n    transform: scale(var(--fa-beat-fade-scale, 1.125))\n  }\n}\n\n@-webkit-keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\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\n@keyframes fa-flip {\n  50% {\n    -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\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\n@-webkit-keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n    transform: rotate(-15deg)\n  }\n\n  4% {\n    -webkit-transform: rotate(15deg);\n    transform: rotate(15deg)\n  }\n\n  8%,\n  24% {\n    -webkit-transform: rotate(-18deg);\n    transform: rotate(-18deg)\n  }\n\n  12%,\n  28% {\n    -webkit-transform: rotate(18deg);\n    transform: rotate(18deg)\n  }\n\n  16% {\n    -webkit-transform: rotate(-22deg);\n    transform: rotate(-22deg)\n  }\n\n  20% {\n    -webkit-transform: rotate(22deg);\n    transform: rotate(22deg)\n  }\n\n  32% {\n    -webkit-transform: rotate(-12deg);\n    transform: rotate(-12deg)\n  }\n\n  36% {\n    -webkit-transform: rotate(12deg);\n    transform: rotate(12deg)\n  }\n\n  40%,\n  to {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg)\n  }\n}\n\n@keyframes fa-shake {\n  0% {\n    -webkit-transform: rotate(-15deg);\n    transform: rotate(-15deg)\n  }\n\n  4% {\n    -webkit-transform: rotate(15deg);\n    transform: rotate(15deg)\n  }\n\n  8%,\n  24% {\n    -webkit-transform: rotate(-18deg);\n    transform: rotate(-18deg)\n  }\n\n  12%,\n  28% {\n    -webkit-transform: rotate(18deg);\n    transform: rotate(18deg)\n  }\n\n  16% {\n    -webkit-transform: rotate(-22deg);\n    transform: rotate(-22deg)\n  }\n\n  20% {\n    -webkit-transform: rotate(22deg);\n    transform: rotate(22deg)\n  }\n\n  32% {\n    -webkit-transform: rotate(-12deg);\n    transform: rotate(-12deg)\n  }\n\n  36% {\n    -webkit-transform: rotate(12deg);\n    transform: rotate(12deg)\n  }\n\n  40%,\n  to {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg)\n  }\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg)\n  }\n\n  to {\n    -webkit-transform: rotate(1turn);\n    transform: rotate(1turn)\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg)\n  }\n\n  to {\n    -webkit-transform: rotate(1turn);\n    transform: rotate(1turn)\n  }\n}\n\n.fa-rotate-90 {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg)\n}\n\n.fa-rotate-180 {\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg)\n}\n\n.fa-rotate-270 {\n  -webkit-transform: rotate(270deg);\n  transform: rotate(270deg)\n}\n\n.fa-flip-horizontal {\n  -webkit-transform: scaleX(-1);\n  transform: scaleX(-1)\n}\n\n.fa-flip-vertical {\n  -webkit-transform: scaleY(-1);\n  transform: scaleY(-1)\n}\n\n.fa-flip-both,\n.fa-flip-horizontal.fa-flip-vertical {\n  -webkit-transform: scale(-1);\n  transform: scale(-1)\n}\n\n.fa-rotate-by {\n  -webkit-transform: rotate(var(--fa-rotate-angle, none));\n  transform: rotate(var(--fa-rotate-angle, none))\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.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-chevron-circle-right:before,\n.fa-circle-chevron-right:before {\n  content: \"\\f138\"\n}\n\n.fa-at:before {\n  content: \"\\40\"\n}\n\n.fa-trash-alt:before,\n.fa-trash-can:before {\n  content: \"\\f2ed\"\n}\n\n.fa-text-height:before {\n  content: \"\\f034\"\n}\n\n.fa-user-times:before,\n.fa-user-xmark:before {\n  content: \"\\f235\"\n}\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"\n}\n\n.fa-comment-alt:before,\n.fa-message:before {\n  content: \"\\f27a\"\n}\n\n.fa-info:before {\n  content: \"\\f129\"\n}\n\n.fa-compress-alt:before,\n.fa-down-left-and-up-right-to-center:before {\n  content: \"\\f422\"\n}\n\n.fa-explosion:before {\n  content: \"\\e4e9\"\n}\n\n.fa-file-alt:before,\n.fa-file-lines:before,\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-alt:before,\n.fa-calendar-days: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-ball:before,\n.fa-volleyball:before {\n  content: \"\\f45f\"\n}\n\n.fa-arrows-up-to-line:before {\n  content: \"\\e4c2\"\n}\n\n.fa-sort-desc:before,\n.fa-sort-down:before {\n  content: \"\\f0dd\"\n}\n\n.fa-circle-minus:before,\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.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-heart-music-camera-bolt:before,\n.fa-icons:before {\n  content: \"\\f86d\"\n}\n\n.fa-microphone-alt-slash:before,\n.fa-microphone-lines-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.fa-search-location:before {\n  content: \"\\f689\"\n}\n\n.fa-forward-step:before,\n.fa-step-forward:before {\n  content: \"\\f051\"\n}\n\n.fa-face-smile-beam:before,\n.fa-smile-beam:before {\n  content: \"\\f5b8\"\n}\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"\n}\n\n.fa-football-ball:before,\n.fa-football: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-angle-double-down:before,\n.fa-angles-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.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.fa-long-arrow-up:before {\n  content: \"\\f176\"\n}\n\n.fa-burn:before,\n.fa-fire-flame-simple:before {\n  content: \"\\f46a\"\n}\n\n.fa-male:before,\n.fa-person: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.fa-grin-stars:before {\n  content: \"\\f587\"\n}\n\n.fa-bong:before {\n  content: \"\\f55c\"\n}\n\n.fa-pastafarianism:before,\n.fa-spaghetti-monster-flying:before {\n  content: \"\\f67b\"\n}\n\n.fa-arrow-down-up-across-line:before {\n  content: \"\\e4af\"\n}\n\n.fa-spoon:before,\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.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.fa-hospital-symbol:before {\n  content: \"\\f47e\"\n}\n\n.fa-pager:before {\n  content: \"\\f815\"\n}\n\n.fa-address-book:before,\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: \"\\4b\"\n}\n\n.fa-landmark-flag:before {\n  content: \"\\e51c\"\n}\n\n.fa-pencil-alt:before,\n.fa-pencil: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-file-clipboard:before,\n.fa-paste: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-loading:before,\n.fa-truck-ramp-box: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.fa-torah:before {\n  content: \"\\f6a0\"\n}\n\n.fa-broom-ball:before,\n.fa-quidditch-broom-ball:before,\n.fa-quidditch:before {\n  content: \"\\f458\"\n}\n\n.fa-toggle-off:before {\n  content: \"\\f204\"\n}\n\n.fa-archive:before,\n.fa-box-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.fa-sort-numeric-desc:before,\n.fa-sort-numeric-down-alt:before {\n  content: \"\\f886\"\n}\n\n.fa-face-grin-tongue-squint:before,\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: \"\\57\"\n}\n\n.fa-earth-africa:before,\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-alt:before,\n.fa-tablet-screen-button: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.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.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.fa-concierge-bell:before {\n  content: \"\\f562\"\n}\n\n.fa-pen-ruler:before,\n.fa-pencil-ruler:before {\n  content: \"\\f5ae\"\n}\n\n.fa-people-arrows-left-right:before,\n.fa-people-arrows:before {\n  content: \"\\e068\"\n}\n\n.fa-mars-and-venus-burst:before {\n  content: \"\\e523\"\n}\n\n.fa-caret-square-right:before,\n.fa-square-caret-right:before {\n  content: \"\\f152\"\n}\n\n.fa-cut:before,\n.fa-scissors: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-digital-tachograph:before,\n.fa-tachograph-digital: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-mail-reply:before,\n.fa-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-minus-square:before,\n.fa-square-minus: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-caret-square-down:before,\n.fa-square-caret-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.fa-navicon:before {\n  content: \"\\f0c9\"\n}\n\n.fa-people-group:before {\n  content: \"\\e533\"\n}\n\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\"\n}\n\n.fa-heart-broken:before,\n.fa-heart-crack:before {\n  content: \"\\f7a9\"\n}\n\n.fa-external-link-square-alt:before,\n.fa-square-up-right:before {\n  content: \"\\f360\"\n}\n\n.fa-face-kiss-beam:before,\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.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.fa-sign-out:before {\n  content: \"\\f08b\"\n}\n\n.fa-chevron-circle-down:before,\n.fa-circle-chevron-down:before {\n  content: \"\\f13a\"\n}\n\n.fa-unlock-alt:before,\n.fa-unlock-keyhole:before {\n  content: \"\\f13e\"\n}\n\n.fa-cloud-showers-heavy:before {\n  content: \"\\f740\"\n}\n\n.fa-headphones-alt:before,\n.fa-headphones-simple:before {\n  content: \"\\f58f\"\n}\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"\n}\n\n.fa-circle-dollar-to-slot:before,\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-down:before,\n.fa-volume-low: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-alt:before,\n.fa-wheat-awn: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: \"\\2a\"\n}\n\n.fa-check-square:before,\n.fa-square-check:before {\n  content: \"\\f14a\"\n}\n\n.fa-peseta-sign:before {\n  content: \"\\e221\"\n}\n\n.fa-header:before,\n.fa-heading:before {\n  content: \"\\f1dc\"\n}\n\n.fa-ghost:before {\n  content: \"\\f6e2\"\n}\n\n.fa-list-squares:before,\n.fa-list:before {\n  content: \"\\f03a\"\n}\n\n.fa-phone-square-alt:before,\n.fa-square-phone-flip: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.fa-dot-circle:before {\n  content: \"\\f192\"\n}\n\n.fa-dizzy:before,\n.fa-face-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-ball:before,\n.fa-futbol:before,\n.fa-soccer-ball:before {\n  content: \"\\f1e3\"\n}\n\n.fa-paint-brush:before,\n.fa-paintbrush: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.fa-hot-tub:before {\n  content: \"\\f593\"\n}\n\n.fa-map-location:before,\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-edit:before,\n.fa-pen-to-square:before {\n  content: \"\\f044\"\n}\n\n.fa-car-side:before {\n  content: \"\\f5e4\"\n}\n\n.fa-share-alt:before,\n.fa-share-nodes:before {\n  content: \"\\f1e0\"\n}\n\n.fa-heart-circle-minus:before {\n  content: \"\\e4ff\"\n}\n\n.fa-hourglass-2:before,\n.fa-hourglass-half: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.fa-shopping-bag:before {\n  content: \"\\f290\"\n}\n\n.fa-arrow-down-z-a:before,\n.fa-sort-alpha-desc:before,\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-paper:before,\n.fa-hand: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.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.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.fa-grin-wink:before {\n  content: \"\\f58c\"\n}\n\n.fa-deaf:before,\n.fa-deafness:before,\n.fa-ear-deaf:before,\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-rss-square:before,\n.fa-square-rss: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: \"\\49\"\n}\n\n.fa-hryvnia-sign:before,\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.fa-grin-alt:before {\n  content: \"\\f581\"\n}\n\n.fa-tooth:before {\n  content: \"\\f5c9\"\n}\n\n.fa-v:before {\n  content: \"\\56\"\n}\n\n.fa-bicycle:before {\n  content: \"\\f206\"\n}\n\n.fa-rod-asclepius:before,\n.fa-rod-snake:before,\n.fa-staff-aesculapius:before,\n.fa-staff-snake:before {\n  content: \"\\e579\"\n}\n\n.fa-head-side-cough-slash:before {\n  content: \"\\e062\"\n}\n\n.fa-ambulance:before,\n.fa-truck-medical: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: \"\\51\"\n}\n\n.fa-g:before {\n  content: \"\\47\"\n}\n\n.fa-notes-medical:before {\n  content: \"\\f481\"\n}\n\n.fa-temperature-2:before,\n.fa-temperature-half:before,\n.fa-thermometer-2:before,\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-bolt:before,\n.fa-poo-storm:before {\n  content: \"\\f75a\"\n}\n\n.fa-face-frown-open:before,\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-blank:before,\n.fa-folder:before {\n  content: \"\\f07b\"\n}\n\n.fa-file-medical-alt:before,\n.fa-file-waveform: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-dashboard:before,\n.fa-gauge-med:before,\n.fa-gauge:before,\n.fa-tachometer-alt-average:before {\n  content: \"\\f624\"\n}\n\n.fa-magic-wand-sparkles:before,\n.fa-wand-magic-sparkles:before {\n  content: \"\\e2ca\"\n}\n\n.fa-e:before {\n  content: \"\\45\"\n}\n\n.fa-pen-alt:before,\n.fa-pen-clip: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-shuttle-van:before,\n.fa-van-shuttle:before {\n  content: \"\\f5b6\"\n}\n\n.fa-building-user:before {\n  content: \"\\e4da\"\n}\n\n.fa-caret-square-left:before,\n.fa-square-caret-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: \"\\43\"\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-area-chart:before,\n.fa-chart-area: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.fa-cancel:before {\n  content: \"\\f05e\"\n}\n\n.fa-camera-rotate:before {\n  content: \"\\e0d8\"\n}\n\n.fa-air-freshener:before,\n.fa-spray-can-sparkles: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.fa-mouse-pointer:before {\n  content: \"\\f245\"\n}\n\n.fa-expand-arrows-alt:before,\n.fa-maximize:before {\n  content: \"\\f31e\"\n}\n\n.fa-charging-station:before {\n  content: \"\\f5e7\"\n}\n\n.fa-shapes:before,\n.fa-triangle-circle-square:before {\n  content: \"\\f61f\"\n}\n\n.fa-random:before,\n.fa-shuffle:before {\n  content: \"\\f074\"\n}\n\n.fa-person-running:before,\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.fa-mouse:before {\n  content: \"\\f8cc\"\n}\n\n.fa-arrow-right-to-bracket:before,\n.fa-sign-in:before {\n  content: \"\\f090\"\n}\n\n.fa-shop-slash:before,\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-1:before,\n.fa-hourglass-start: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.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.fa-heartbeat:before {\n  content: \"\\f21e\"\n}\n\n.fa-people-carry-box:before,\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.fa-weight:before {\n  content: \"\\f496\"\n}\n\n.fa-user-friends:before,\n.fa-user-group:before {\n  content: \"\\f500\"\n}\n\n.fa-arrow-up-a-z:before,\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.fa-laugh-squint:before {\n  content: \"\\f59b\"\n}\n\n.fa-wheelchair:before {\n  content: \"\\f193\"\n}\n\n.fa-arrow-circle-up:before,\n.fa-circle-arrow-up:before {\n  content: \"\\f0aa\"\n}\n\n.fa-toggle-on:before {\n  content: \"\\f205\"\n}\n\n.fa-person-walking:before,\n.fa-walking:before {\n  content: \"\\f554\"\n}\n\n.fa-l:before {\n  content: \"\\4c\"\n}\n\n.fa-fire:before {\n  content: \"\\f06d\"\n}\n\n.fa-bed-pulse:before,\n.fa-procedures:before {\n  content: \"\\f487\"\n}\n\n.fa-shuttle-space:before,\n.fa-space-shuttle:before {\n  content: \"\\f197\"\n}\n\n.fa-face-laugh:before,\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-alt:before,\n.fa-microphone-lines: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.fa-mars-stroke-v:before {\n  content: \"\\f22a\"\n}\n\n.fa-champagne-glasses:before,\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.fa-file-upload:before {\n  content: \"\\f574\"\n}\n\n.fa-wifi-3:before,\n.fa-wifi-strong:before,\n.fa-wifi:before {\n  content: \"\\f1eb\"\n}\n\n.fa-bath:before,\n.fa-bathtub:before {\n  content: \"\\f2cd\"\n}\n\n.fa-underline:before {\n  content: \"\\f0cd\"\n}\n\n.fa-user-edit:before,\n.fa-user-pen: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-style:before,\n.fa-border-top-left:before {\n  content: \"\\f853\"\n}\n\n.fa-map-location-dot:before,\n.fa-map-marked-alt:before {\n  content: \"\\f5a0\"\n}\n\n.fa-jedi:before {\n  content: \"\\f669\"\n}\n\n.fa-poll:before,\n.fa-square-poll-vertical:before {\n  content: \"\\f681\"\n}\n\n.fa-mug-hot:before {\n  content: \"\\f7b6\"\n}\n\n.fa-battery-car:before,\n.fa-car-battery: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-h:before,\n.fa-mars-stroke-right:before {\n  content: \"\\f22b\"\n}\n\n.fa-hand-back-fist:before,\n.fa-hand-rock:before {\n  content: \"\\f255\"\n}\n\n.fa-caret-square-up:before,\n.fa-square-caret-up:before {\n  content: \"\\f151\"\n}\n\n.fa-cloud-showers-water:before {\n  content: \"\\e4e4\"\n}\n\n.fa-bar-chart:before,\n.fa-chart-bar:before {\n  content: \"\\f080\"\n}\n\n.fa-hands-bubbles:before,\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.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-plus-square:before,\n.fa-square-plus: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-glass-martini-alt:before,\n.fa-martini-glass:before {\n  content: \"\\f57b\"\n}\n\n.fa-rotate-back:before,\n.fa-rotate-backward:before,\n.fa-rotate-left:before,\n.fa-undo-alt:before {\n  content: \"\\f2ea\"\n}\n\n.fa-columns:before,\n.fa-table-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-box:before,\n.fa-dolly:before {\n  content: \"\\f472\"\n}\n\n.fa-smoking:before {\n  content: \"\\f48d\"\n}\n\n.fa-compress-arrows-alt:before,\n.fa-minimize: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-angle-double-right:before,\n.fa-angles-right:before {\n  content: \"\\f101\"\n}\n\n.fa-cannabis:before {\n  content: \"\\f55f\"\n}\n\n.fa-circle-play:before,\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-eur:before,\n.fa-euro-sign:before,\n.fa-euro:before {\n  content: \"\\f153\"\n}\n\n.fa-chair:before {\n  content: \"\\f6c0\"\n}\n\n.fa-check-circle:before,\n.fa-circle-check:before {\n  content: \"\\f058\"\n}\n\n.fa-circle-stop:before,\n.fa-stop-circle:before {\n  content: \"\\f28d\"\n}\n\n.fa-compass-drafting:before,\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.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-chevron-circle-up:before,\n.fa-circle-chevron-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-gbp:before,\n.fa-pound-sign:before,\n.fa-sterling-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.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-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\"\n}\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"\n}\n\n.fa-person-skating:before,\n.fa-skating:before {\n  content: \"\\f7c5\"\n}\n\n.fa-filter-circle-dollar:before,\n.fa-funnel-dollar:before {\n  content: \"\\f662\"\n}\n\n.fa-camera-retro:before {\n  content: \"\\f083\"\n}\n\n.fa-arrow-circle-down:before,\n.fa-circle-arrow-down:before {\n  content: \"\\f0ab\"\n}\n\n.fa-arrow-right-to-file:before,\n.fa-file-import:before {\n  content: \"\\f56f\"\n}\n\n.fa-external-link-square:before,\n.fa-square-arrow-up-right: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-0:before,\n.fa-temperature-empty:before,\n.fa-thermometer-0:before,\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.fa-contact-card:before,\n.fa-vcard:before {\n  content: \"\\f2bb\"\n}\n\n.fa-balance-scale-right:before,\n.fa-scale-unbalanced-flip:before {\n  content: \"\\f516\"\n}\n\n.fa-subscript:before {\n  content: \"\\f12c\"\n}\n\n.fa-diamond-turn-right:before,\n.fa-directions:before {\n  content: \"\\f5eb\"\n}\n\n.fa-burst:before {\n  content: \"\\e4dc\"\n}\n\n.fa-house-laptop:before,\n.fa-laptop-house:before {\n  content: \"\\e066\"\n}\n\n.fa-face-tired:before,\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.fa-cloud-upload-alt:before,\n.fa-cloud-upload: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.fa-sprout:before {\n  content: \"\\f4d8\"\n}\n\n.fa-arrows-alt-h:before,\n.fa-left-right:before {\n  content: \"\\f337\"\n}\n\n.fa-boxes-packing:before {\n  content: \"\\e4c7\"\n}\n\n.fa-arrow-circle-left:before,\n.fa-circle-arrow-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.fa-sort-amount-asc:before,\n.fa-sort-amount-down:before {\n  content: \"\\f160\"\n}\n\n.fa-cloud-bolt:before,\n.fa-thunderstorm:before {\n  content: \"\\f76c\"\n}\n\n.fa-remove-format:before,\n.fa-text-slash:before {\n  content: \"\\f87d\"\n}\n\n.fa-face-smile-wink:before,\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-h:before,\n.fa-arrows-left-right:before {\n  content: \"\\f07e\"\n}\n\n.fa-house-lock:before {\n  content: \"\\e510\"\n}\n\n.fa-cloud-arrow-down:before,\n.fa-cloud-download-alt:before,\n.fa-cloud-download:before {\n  content: \"\\f0ed\"\n}\n\n.fa-children:before {\n  content: \"\\e4e1\"\n}\n\n.fa-blackboard:before,\n.fa-chalkboard:before {\n  content: \"\\f51b\"\n}\n\n.fa-user-alt-slash:before,\n.fa-user-large-slash:before {\n  content: \"\\f4fa\"\n}\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"\n}\n\n.fa-handshake-alt-slash:before,\n.fa-handshake-simple-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.fa-refresh:before,\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-alt:before,\n.fa-shield-halved:before {\n  content: \"\\f3ed\"\n}\n\n.fa-atlas:before,\n.fa-book-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.fa-house-damage:before {\n  content: \"\\f6f1\"\n}\n\n.fa-file-archive:before,\n.fa-file-zipper:before {\n  content: \"\\f1c6\"\n}\n\n.fa-square:before {\n  content: \"\\f0c8\"\n}\n\n.fa-glass-martini:before,\n.fa-martini-glass-empty: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-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: \"\\5a\"\n}\n\n.fa-person-skiing:before,\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: \"\\41\"\n}\n\n.fa-temperature-arrow-down:before,\n.fa-temperature-down:before {\n  content: \"\\e03f\"\n}\n\n.fa-feather-alt:before,\n.fa-feather-pointed:before {\n  content: \"\\f56b\"\n}\n\n.fa-p:before {\n  content: \"\\50\"\n}\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"\n}\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"\n}\n\n.fa-ad:before,\n.fa-rectangle-ad:before {\n  content: \"\\f641\"\n}\n\n.fa-arrow-circle-right:before,\n.fa-circle-arrow-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.fa-unsorted:before {\n  content: \"\\f0dc\"\n}\n\n.fa-list-1-2:before,\n.fa-list-numeric:before,\n.fa-list-ol:before {\n  content: \"\\f0cb\"\n}\n\n.fa-person-dress-burst:before {\n  content: \"\\e544\"\n}\n\n.fa-money-check-alt:before,\n.fa-money-check-dollar: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.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: \"\\3f\"\n}\n\n.fa-file-signature:before {\n  content: \"\\f573\"\n}\n\n.fa-arrows-alt:before,\n.fa-up-down-left-right: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-alt:before,\n.fa-star-half-stroke:before {\n  content: \"\\f5c0\"\n}\n\n.fa-code:before {\n  content: \"\\f121\"\n}\n\n.fa-glass-whiskey:before,\n.fa-whiskey-glass: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.fa-external-link:before {\n  content: \"\\f08e\"\n}\n\n.fa-cubes-stacked:before {\n  content: \"\\e4e6\"\n}\n\n.fa-krw:before,\n.fa-won-sign:before,\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: \"\\46\"\n}\n\n.fa-leaf:before {\n  content: \"\\f06c\"\n}\n\n.fa-road:before {\n  content: \"\\f018\"\n}\n\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\"\n}\n\n.fa-person-circle-plus:before {\n  content: \"\\e541\"\n}\n\n.fa-chart-pie:before,\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.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.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-hard-hat:before,\n.fa-hat-hard:before,\n.fa-helmet-safety:before {\n  content: \"\\f807\"\n}\n\n.fa-eject:before {\n  content: \"\\f052\"\n}\n\n.fa-arrow-alt-circle-right:before,\n.fa-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.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.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-map-signs:before,\n.fa-signs-post: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: \"\\48\"\n}\n\n.fa-tarp:before {\n  content: \"\\e57b\"\n}\n\n.fa-screwdriver-wrench:before,\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-home-user:before,\n.fa-house-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-cocktail:before,\n.fa-martini-glass-citrus:before {\n  content: \"\\f561\"\n}\n\n.fa-face-surprise:before,\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.fa-pause-circle:before {\n  content: \"\\f28b\"\n}\n\n.fa-toilet-paper-slash:before {\n  content: \"\\e072\"\n}\n\n.fa-apple-alt:before,\n.fa-apple-whole:before {\n  content: \"\\f5d1\"\n}\n\n.fa-kitchen-set:before {\n  content: \"\\e51a\"\n}\n\n.fa-r:before {\n  content: \"\\52\"\n}\n\n.fa-temperature-1:before,\n.fa-temperature-quarter:before,\n.fa-thermometer-1:before,\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-poll-h:before,\n.fa-square-poll-horizontal:before {\n  content: \"\\f682\"\n}\n\n.fa-circle:before {\n  content: \"\\f111\"\n}\n\n.fa-backward-fast:before,\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-ball:before,\n.fa-basketball:before {\n  content: \"\\f434\"\n}\n\n.fa-satellite-dish:before {\n  content: \"\\f7c0\"\n}\n\n.fa-arrow-alt-circle-up:before,\n.fa-circle-up:before {\n  content: \"\\f35b\"\n}\n\n.fa-mobile-alt:before,\n.fa-mobile-screen-button:before {\n  content: \"\\f3cd\"\n}\n\n.fa-volume-high:before,\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.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.fa-rupee:before {\n  content: \"\\f156\"\n}\n\n.fa-file-image:before {\n  content: \"\\f1c5\"\n}\n\n.fa-circle-question:before,\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-alt:before,\n.fa-phone-flip: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-fast-forward:before,\n.fa-forward-fast:before {\n  content: \"\\f050\"\n}\n\n.fa-face-meh-blank:before,\n.fa-meh-blank:before {\n  content: \"\\f5a4\"\n}\n\n.fa-parking:before,\n.fa-square-parking:before {\n  content: \"\\f540\"\n}\n\n.fa-house-signal:before {\n  content: \"\\e012\"\n}\n\n.fa-bars-progress:before,\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.fa-dolly-flatbed:before {\n  content: \"\\f474\"\n}\n\n.fa-ban-smoking:before,\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.fa-shopping-basket:before {\n  content: \"\\f291\"\n}\n\n.fa-tape:before {\n  content: \"\\f4db\"\n}\n\n.fa-bus-alt:before,\n.fa-bus-simple:before {\n  content: \"\\f55e\"\n}\n\n.fa-eye:before {\n  content: \"\\f06e\"\n}\n\n.fa-face-sad-cry:before,\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-5:before,\n.fa-signal-perfect:before,\n.fa-signal: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-home-lg:before,\n.fa-house-chimney:before {\n  content: \"\\e3af\"\n}\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"\n}\n\n.fa-face-frown:before,\n.fa-frown:before {\n  content: \"\\f119\"\n}\n\n.fa-prescription:before {\n  content: \"\\f5b1\"\n}\n\n.fa-shop:before,\n.fa-store-alt:before {\n  content: \"\\f54f\"\n}\n\n.fa-floppy-disk:before,\n.fa-save:before {\n  content: \"\\f0c7\"\n}\n\n.fa-vihara:before {\n  content: \"\\f6a7\"\n}\n\n.fa-balance-scale-left:before,\n.fa-scale-unbalanced:before {\n  content: \"\\f515\"\n}\n\n.fa-sort-asc:before,\n.fa-sort-up:before {\n  content: \"\\f0de\"\n}\n\n.fa-comment-dots:before,\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.fa-grin-squint:before {\n  content: \"\\f585\"\n}\n\n.fa-hand-holding-dollar:before,\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.fa-praying-hands:before {\n  content: \"\\f684\"\n}\n\n.fa-arrow-right-rotate:before,\n.fa-arrow-rotate-forward:before,\n.fa-arrow-rotate-right:before,\n.fa-redo:before {\n  content: \"\\f01e\"\n}\n\n.fa-biohazard:before {\n  content: \"\\f780\"\n}\n\n.fa-location-crosshairs:before,\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.fa-grin-tears:before {\n  content: \"\\f588\"\n}\n\n.fa-phone:before {\n  content: \"\\f095\"\n}\n\n.fa-calendar-times:before,\n.fa-calendar-xmark: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-cog:before,\n.fa-user-gear:before {\n  content: \"\\f4fe\"\n}\n\n.fa-arrow-up-1-9:before,\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-digging:before,\n.fa-person-digging:before {\n  content: \"\\f85e\"\n}\n\n.fa-trash:before {\n  content: \"\\f1f8\"\n}\n\n.fa-gauge-simple-med:before,\n.fa-gauge-simple:before,\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-alt:before,\n.fa-quote-right:before {\n  content: \"\\f10e\"\n}\n\n.fa-shirt:before,\n.fa-t-shirt:before,\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.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: \"\\4a\"\n}\n\n.fa-users-viewfinder:before {\n  content: \"\\e595\"\n}\n\n.fa-file-video:before {\n  content: \"\\f1c8\"\n}\n\n.fa-external-link-alt:before,\n.fa-up-right-from-square:before {\n  content: \"\\f35d\"\n}\n\n.fa-table-cells:before,\n.fa-th:before {\n  content: \"\\f00a\"\n}\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"\n}\n\n.fa-bible:before,\n.fa-book-bible:before {\n  content: \"\\f647\"\n}\n\n.fa-o:before {\n  content: \"\\4f\"\n}\n\n.fa-medkit:before,\n.fa-suitcase-medical: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-female:before,\n.fa-person-dress:before {\n  content: \"\\f182\"\n}\n\n.fa-comment-dollar:before {\n  content: \"\\f651\"\n}\n\n.fa-briefcase-clock:before,\n.fa-business-time:before {\n  content: \"\\f64a\"\n}\n\n.fa-table-cells-large:before,\n.fa-th-large:before {\n  content: \"\\f009\"\n}\n\n.fa-book-tanakh:before,\n.fa-tanakh:before {\n  content: \"\\f827\"\n}\n\n.fa-phone-volume:before,\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-birthday-cake:before,\n.fa-cake-candles:before,\n.fa-cake:before {\n  content: \"\\f1fd\"\n}\n\n.fa-envelope:before {\n  content: \"\\f0e0\"\n}\n\n.fa-angle-double-up:before,\n.fa-angles-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.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-empty:before,\n.fa-hourglass:before {\n  content: \"\\f254\"\n}\n\n.fa-mountain:before {\n  content: \"\\f6fc\"\n}\n\n.fa-user-doctor:before,\n.fa-user-md:before {\n  content: \"\\f0f0\"\n}\n\n.fa-circle-info:before,\n.fa-info-circle:before {\n  content: \"\\f05a\"\n}\n\n.fa-cloud-meatball:before {\n  content: \"\\f73b\"\n}\n\n.fa-camera-alt:before,\n.fa-camera: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.fa-sort-numeric-asc:before,\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"\n}\n\n.fa-hand-holding-droplet:before,\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-alt:before,\n.fa-prescription-bottle-medical: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.fa-sort-alpha-asc:before,\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-left-rotate:before,\n.fa-arrow-rotate-back:before,\n.fa-arrow-rotate-backward:before,\n.fa-arrow-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\"\n}\n\n.fa-hard-drive:before,\n.fa-hdd:before {\n  content: \"\\f0a0\"\n}\n\n.fa-face-grin-squint-tears:before,\n.fa-grin-squint-tears:before {\n  content: \"\\f586\"\n}\n\n.fa-dumbbell:before {\n  content: \"\\f44b\"\n}\n\n.fa-list-alt:before,\n.fa-rectangle-list: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.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-arrow-alt-circle-left:before,\n.fa-circle-left:before {\n  content: \"\\f359\"\n}\n\n.fa-subway:before,\n.fa-train-subway:before {\n  content: \"\\f239\"\n}\n\n.fa-chart-gantt:before {\n  content: \"\\e0e4\"\n}\n\n.fa-indian-rupee-sign:before,\n.fa-indian-rupee:before,\n.fa-inr:before {\n  content: \"\\e1bc\"\n}\n\n.fa-crop-alt:before,\n.fa-crop-simple:before {\n  content: \"\\f565\"\n}\n\n.fa-money-bill-1:before,\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"\n}\n\n.fa-left-long:before,\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.fa-subtract:before {\n  content: \"\\f068\"\n}\n\n.fa-child-rifle:before {\n  content: \"\\e4e0\"\n}\n\n.fa-chess:before {\n  content: \"\\f439\"\n}\n\n.fa-arrow-left-long:before,\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-american-sign-language-interpreting:before,\n.fa-asl-interpreting:before,\n.fa-hands-american-sign-language-interpreting:before,\n.fa-hands-asl-interpreting:before {\n  content: \"\\f2a3\"\n}\n\n.fa-cog:before,\n.fa-gear:before {\n  content: \"\\f013\"\n}\n\n.fa-droplet-slash:before,\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.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.fa-level-up:before {\n  content: \"\\f148\"\n}\n\n.fa-u:before {\n  content: \"\\55\"\n}\n\n.fa-square-root-alt:before,\n.fa-square-root-variable:before {\n  content: \"\\f698\"\n}\n\n.fa-clock-four:before,\n.fa-clock:before {\n  content: \"\\f017\"\n}\n\n.fa-backward-step:before,\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: \"\\53\"\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-clinic-medical:before,\n.fa-house-chimney-medical:before {\n  content: \"\\f7f2\"\n}\n\n.fa-temperature-3:before,\n.fa-temperature-three-quarters:before,\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"\n}\n\n.fa-mobile-android-alt:before,\n.fa-mobile-screen: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-3:before,\n.fa-battery-half: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-h:before,\n.fa-sliders: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-v:before,\n.fa-ellipsis-vertical: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-long-arrow-alt-right:before,\n.fa-right-long: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-teletype:before,\n.fa-tty: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-hiking:before,\n.fa-person-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: \"\\4e\"\n}\n\n.fa-cable-car:before,\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.fa-grin:before {\n  content: \"\\f580\"\n}\n\n.fa-backspace:before,\n.fa-delete-left:before {\n  content: \"\\f55a\"\n}\n\n.fa-eye-dropper-empty:before,\n.fa-eye-dropper:before,\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-android:before,\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f3ce\"\n}\n\n.fa-face-meh:before,\n.fa-meh:before {\n  content: \"\\f11a\"\n}\n\n.fa-align-center:before {\n  content: \"\\f037\"\n}\n\n.fa-book-dead:before,\n.fa-book-skull:before {\n  content: \"\\f6b7\"\n}\n\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\"\n}\n\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\"\n}\n\n.fa-heart-circle-exclamation:before {\n  content: \"\\e4fe\"\n}\n\n.fa-home-alt:before,\n.fa-home-lg-alt:before,\n.fa-home:before,\n.fa-house: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: \"\\42\"\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.fa-exchange:before {\n  content: \"\\f0ec\"\n}\n\n.fa-redo-alt:before,\n.fa-rotate-forward:before,\n.fa-rotate-right:before {\n  content: \"\\f2f9\"\n}\n\n.fa-cutlery:before,\n.fa-utensils:before {\n  content: \"\\f2e7\"\n}\n\n.fa-arrow-up-wide-short:before,\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-broadcast-tower:before,\n.fa-tower-broadcast:before {\n  content: \"\\f519\"\n}\n\n.fa-truck-pickup:before {\n  content: \"\\f63c\"\n}\n\n.fa-long-arrow-alt-up:before,\n.fa-up-long: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.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.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-cny:before,\n.fa-jpy:before,\n.fa-rmb:before,\n.fa-yen-sign:before,\n.fa-yen:before {\n  content: \"\\f157\"\n}\n\n.fa-rouble:before,\n.fa-rub:before,\n.fa-ruble-sign:before,\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.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-arrow-alt-circle-down:before,\n.fa-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.fa-sort-amount-desc:before,\n.fa-sort-amount-down-alt:before {\n  content: \"\\f884\"\n}\n\n.fa-less-than:before {\n  content: \"\\3c\"\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.fa-long-arrow-right:before {\n  content: \"\\f178\"\n}\n\n.fa-anchor-circle-xmark:before {\n  content: \"\\e4ac\"\n}\n\n.fa-ellipsis-h:before,\n.fa-ellipsis:before {\n  content: \"\\f141\"\n}\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"\n}\n\n.fa-first-aid:before,\n.fa-kit-medical: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-alt:before,\n.fa-credit-card:before {\n  content: \"\\f09d\"\n}\n\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\"\n}\n\n.fa-hand-holding-hand:before {\n  content: \"\\e4f7\"\n}\n\n.fa-book-open-reader:before,\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.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-h-square:before,\n.fa-square-h:before {\n  content: \"\\f0fd\"\n}\n\n.fa-podcast:before {\n  content: \"\\f2ce\"\n}\n\n.fa-temperature-4:before,\n.fa-temperature-full:before,\n.fa-thermometer-4:before,\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-hands-helping:before,\n.fa-handshake-angle:before {\n  content: \"\\f4c4\"\n}\n\n.fa-location-dot:before,\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: \"\\3e\"\n}\n\n.fa-person-swimming:before,\n.fa-swimmer:before {\n  content: \"\\f5c4\"\n}\n\n.fa-arrow-down:before {\n  content: \"\\f063\"\n}\n\n.fa-droplet:before,\n.fa-tint:before {\n  content: \"\\f043\"\n}\n\n.fa-eraser:before {\n  content: \"\\f12d\"\n}\n\n.fa-earth-america:before,\n.fa-earth-americas:before,\n.fa-earth:before,\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-0:before,\n.fa-battery-empty: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.fa-tachometer-alt-fast:before,\n.fa-tachometer-alt:before {\n  content: \"\\f625\"\n}\n\n.fa-envelope-open-text:before {\n  content: \"\\f658\"\n}\n\n.fa-hospital-alt:before,\n.fa-hospital-wide:before,\n.fa-hospital: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.fa-reorder:before,\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-blind:before,\n.fa-person-walking-with-cane: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.fa-vote-yea:before {\n  content: \"\\f772\"\n}\n\n.fa-star-half:before {\n  content: \"\\f089\"\n}\n\n.fa-boxes-alt:before,\n.fa-boxes-stacked:before,\n.fa-boxes:before {\n  content: \"\\f468\"\n}\n\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\"\n}\n\n.fa-assistive-listening-systems:before,\n.fa-ear-listen: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-rupiah-sign:before {\n  content: \"\\e23d\"\n}\n\n.fa-magnifying-glass:before,\n.fa-search:before {\n  content: \"\\f002\"\n}\n\n.fa-ping-pong-paddle-ball:before,\n.fa-table-tennis-paddle-ball:before,\n.fa-table-tennis:before {\n  content: \"\\f45d\"\n}\n\n.fa-diagnoses:before,\n.fa-person-dots-from-line:before {\n  content: \"\\f470\"\n}\n\n.fa-trash-can-arrow-up:before,\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-edit:before,\n.fa-file-pen:before {\n  content: \"\\f31c\"\n}\n\n.fa-receipt:before {\n  content: \"\\f543\"\n}\n\n.fa-pen-square:before,\n.fa-pencil-square:before,\n.fa-square-pen: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-5:before,\n.fa-battery-full:before,\n.fa-battery: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-dots:before,\n.fa-list-ul: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.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-alt:before,\n.fa-landmark-dome:before {\n  content: \"\\f752\"\n}\n\n.fa-arrow-up:before {\n  content: \"\\f062\"\n}\n\n.fa-television:before,\n.fa-tv-alt:before,\n.fa-tv:before {\n  content: \"\\f26c\"\n}\n\n.fa-shrimp:before {\n  content: \"\\e448\"\n}\n\n.fa-list-check:before,\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.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.fa-car-crash:before {\n  content: \"\\f5e1\"\n}\n\n.fa-y:before {\n  content: \"\\59\"\n}\n\n.fa-person-snowboarding:before,\n.fa-snowboarding:before {\n  content: \"\\f7ce\"\n}\n\n.fa-shipping-fast:before,\n.fa-truck-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-adjust:before,\n.fa-circle-half-stroke:before {\n  content: \"\\f042\"\n}\n\n.fa-clapperboard:before {\n  content: \"\\e131\"\n}\n\n.fa-circle-radiation:before,\n.fa-radiation-alt:before {\n  content: \"\\f7ba\"\n}\n\n.fa-baseball-ball:before,\n.fa-baseball:before {\n  content: \"\\f433\"\n}\n\n.fa-jet-fighter-up:before {\n  content: \"\\e518\"\n}\n\n.fa-diagram-project:before,\n.fa-project-diagram:before {\n  content: \"\\f542\"\n}\n\n.fa-copy:before {\n  content: \"\\f0c5\"\n}\n\n.fa-volume-mute:before,\n.fa-volume-times:before,\n.fa-volume-xmark:before {\n  content: \"\\f6a9\"\n}\n\n.fa-hand-sparkles:before {\n  content: \"\\e05d\"\n}\n\n.fa-grip-horizontal:before,\n.fa-grip:before {\n  content: \"\\f58d\"\n}\n\n.fa-share-from-square:before,\n.fa-share-square:before {\n  content: \"\\f14d\"\n}\n\n.fa-gun:before {\n  content: \"\\e19b\"\n}\n\n.fa-phone-square:before,\n.fa-square-phone:before {\n  content: \"\\f098\"\n}\n\n.fa-add:before,\n.fa-plus:before {\n  content: \"\\2b\"\n}\n\n.fa-expand:before {\n  content: \"\\f065\"\n}\n\n.fa-computer:before {\n  content: \"\\e4e5\"\n}\n\n.fa-close:before,\n.fa-multiply:before,\n.fa-remove:before,\n.fa-times:before,\n.fa-xmark:before {\n  content: \"\\f00d\"\n}\n\n.fa-arrows-up-down-left-right:before,\n.fa-arrows:before {\n  content: \"\\f047\"\n}\n\n.fa-chalkboard-teacher:before,\n.fa-chalkboard-user: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-alt:before,\n.fa-quote-left:before {\n  content: \"\\f10d\"\n}\n\n.fa-tractor:before {\n  content: \"\\f722\"\n}\n\n.fa-trash-arrow-up:before,\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: \"\\3d\"\n}\n\n.fa-blender:before {\n  content: \"\\f517\"\n}\n\n.fa-teeth:before {\n  content: \"\\f62e\"\n}\n\n.fa-ils:before,\n.fa-shekel-sign:before,\n.fa-shekel:before,\n.fa-sheqel-sign:before,\n.fa-sheqel: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.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.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-android:before,\n.fa-tablet: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-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-alt:before,\n.fa-car-rear: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-2:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\"\n}\n\n.fa-radio:before {\n  content: \"\\f8d7\"\n}\n\n.fa-baby-carriage:before,\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.fa-percentage:before {\n  content: \"\\25\"\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.fa-smile:before {\n  content: \"\\f118\"\n}\n\n.fa-thumb-tack:before,\n.fa-thumbtack:before {\n  content: \"\\f08d\"\n}\n\n.fa-trophy:before {\n  content: \"\\f091\"\n}\n\n.fa-person-praying:before,\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.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-cogs:before,\n.fa-gears: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.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-alt:before,\n.fa-transgender:before {\n  content: \"\\f225\"\n}\n\n.fa-mercury:before {\n  content: \"\\f223\"\n}\n\n.fa-arrow-turn-down:before,\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-alt:before,\n.fa-ticket-simple:before {\n  content: \"\\f3ff\"\n}\n\n.fa-building:before {\n  content: \"\\f1ad\"\n}\n\n.fa-angle-double-left:before,\n.fa-angles-left:before {\n  content: \"\\f100\"\n}\n\n.fa-qrcode:before {\n  content: \"\\f029\"\n}\n\n.fa-clock-rotate-left:before,\n.fa-history:before {\n  content: \"\\f1da\"\n}\n\n.fa-face-grin-beam-sweat:before,\n.fa-grin-beam-sweat:before {\n  content: \"\\f583\"\n}\n\n.fa-arrow-right-from-file:before,\n.fa-file-export:before {\n  content: \"\\f56e\"\n}\n\n.fa-shield-blank:before,\n.fa-shield:before {\n  content: \"\\f132\"\n}\n\n.fa-arrow-up-short-wide:before,\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.fa-golf-ball:before {\n  content: \"\\f450\"\n}\n\n.fa-chevron-circle-left:before,\n.fa-circle-chevron-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-magic:before,\n.fa-wand-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-alt:before,\n.fa-wine-glass-empty: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-biking:before,\n.fa-person-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.fa-globe-oceania:before {\n  content: \"\\e47b\"\n}\n\n.fa-square-xmark:before,\n.fa-times-square:before,\n.fa-xmark-square:before {\n  content: \"\\f2d3\"\n}\n\n.fa-hashtag:before {\n  content: \"\\23\"\n}\n\n.fa-expand-alt:before,\n.fa-up-right-and-down-left-from-center:before {\n  content: \"\\f424\"\n}\n\n.fa-oil-can:before {\n  content: \"\\f613\"\n}\n\n.fa-t:before {\n  content: \"\\54\"\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-arrows-alt-v:before,\n.fa-up-down: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.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.fa-plus-circle:before {\n  content: \"\\f055\"\n}\n\n.fa-face-grin-tongue-wink:before,\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-chain-broken:before,\n.fa-chain-slash:before,\n.fa-link-slash:before,\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.fa-sort-alpha-up-alt:before {\n  content: \"\\f882\"\n}\n\n.fa-fire-alt:before,\n.fa-fire-flame-curved: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.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-angry:before,\n.fa-face-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-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\"\n}\n\n.fa-draw-polygon:before {\n  content: \"\\f5ee\"\n}\n\n.fa-balance-scale:before,\n.fa-scale-balanced:before {\n  content: \"\\f24e\"\n}\n\n.fa-gauge-simple-high:before,\n.fa-tachometer-fast:before,\n.fa-tachometer:before {\n  content: \"\\f62a\"\n}\n\n.fa-shower:before {\n  content: \"\\f2cc\"\n}\n\n.fa-desktop-alt:before,\n.fa-desktop:before {\n  content: \"\\f390\"\n}\n\n.fa-m:before {\n  content: \"\\4d\"\n}\n\n.fa-table-list:before,\n.fa-th-list:before {\n  content: \"\\f00b\"\n}\n\n.fa-comment-sms:before,\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-4:before,\n.fa-battery-three-quarters: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-fist-raised:before,\n.fa-hand-fist: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.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.fa-globe-europe:before {\n  content: \"\\f7a2\"\n}\n\n.fa-cart-flatbed-suitcase:before,\n.fa-luggage-cart:before {\n  content: \"\\f59d\"\n}\n\n.fa-rectangle-times:before,\n.fa-rectangle-xmark:before,\n.fa-times-rectangle:before,\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.fa-journal-whills:before {\n  content: \"\\f66a\"\n}\n\n.fa-handcuffs:before {\n  content: \"\\e4f8\"\n}\n\n.fa-exclamation-triangle:before,\n.fa-triangle-exclamation:before,\n.fa-warning:before {\n  content: \"\\f071\"\n}\n\n.fa-database:before {\n  content: \"\\f1c0\"\n}\n\n.fa-arrow-turn-right:before,\n.fa-mail-forward:before,\n.fa-share: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-exchange-alt:before,\n.fa-right-left: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.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.fa-sign-language:before,\n.fa-signing:before {\n  content: \"\\f2a7\"\n}\n\n.fa-calendar-day:before {\n  content: \"\\f783\"\n}\n\n.fa-ladder-water:before,\n.fa-swimming-pool:before,\n.fa-water-ladder:before {\n  content: \"\\f5c5\"\n}\n\n.fa-arrows-up-down:before,\n.fa-arrows-v:before {\n  content: \"\\f07d\"\n}\n\n.fa-face-grimace:before,\n.fa-grimace:before {\n  content: \"\\f57f\"\n}\n\n.fa-wheelchair-alt:before,\n.fa-wheelchair-move:before {\n  content: \"\\e2ce\"\n}\n\n.fa-level-down-alt:before,\n.fa-turn-down:before {\n  content: \"\\f3be\"\n}\n\n.fa-person-walking-arrow-right:before {\n  content: \"\\e552\"\n}\n\n.fa-envelope-square:before,\n.fa-square-envelope: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-band-aid:before,\n.fa-bandage:before {\n  content: \"\\f462\"\n}\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"\n}\n\n.fa-circle-xmark:before,\n.fa-times-circle:before,\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.fa-globe-asia:before {\n  content: \"\\f57e\"\n}\n\n.fa-id-card-alt:before,\n.fa-id-card-clip:before {\n  content: \"\\f47f\"\n}\n\n.fa-magnifying-glass-plus:before,\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-allergies:before,\n.fa-hand-dots: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-coffee:before,\n.fa-mug-saucer: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.fa-search-minus:before {\n  content: \"\\f010\"\n}\n\n.fa-ruler-vertical:before {\n  content: \"\\f548\"\n}\n\n.fa-user-alt:before,\n.fa-user-large: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.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.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: \"\\21\"\n}\n\n.fa-arrows-spin:before {\n  content: \"\\e4bb\"\n}\n\n.fa-print:before {\n  content: \"\\f02f\"\n}\n\n.fa-try:before,\n.fa-turkish-lira-sign:before,\n.fa-turkish-lira:before {\n  content: \"\\e2bb\"\n}\n\n.fa-dollar-sign:before,\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\24\"\n}\n\n.fa-x:before {\n  content: \"\\58\"\n}\n\n.fa-magnifying-glass-dollar:before,\n.fa-search-dollar:before {\n  content: \"\\f688\"\n}\n\n.fa-users-cog:before,\n.fa-users-gear:before {\n  content: \"\\f509\"\n}\n\n.fa-person-military-pointing:before {\n  content: \"\\e54a\"\n}\n\n.fa-bank:before,\n.fa-building-columns:before,\n.fa-institution:before,\n.fa-museum:before,\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: \"\\44\"\n}\n\n.fa-stapler:before {\n  content: \"\\e5af\"\n}\n\n.fa-masks-theater:before,\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-alt:before,\n.fa-handshake-simple:before {\n  content: \"\\f4c6\"\n}\n\n.fa-fighter-jet:before,\n.fa-jet-fighter:before {\n  content: \"\\f0fb\"\n}\n\n.fa-share-alt-square:before,\n.fa-square-share-nodes: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-camera:before,\n.fa-video:before {\n  content: \"\\f03d\"\n}\n\n.fa-graduation-cap:before,\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-level-up-alt:before,\n.fa-turn-up:before {\n  content: \"\\f3bf\"\n}\n\n.fa-sr-only,\n.fa-sr-only-focusable:not(:focus),\n.sr-only,\n.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:host,\n:root {\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(./fa-brands-400.woff2) format(\"woff2\"), url(./fa-brands-400.ttf) format(\"truetype\")\n}\n\n.fa-brands,\n.fab {\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-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-js-square:before,\n.fa-square-js: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-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-reddit-square:before,\n.fa-square-reddit: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-sistrix:before {\n  content: \"\\f3ee\"\n}\n\n.fa-instagram-square:before,\n.fa-square-instagram: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-hacker-news-square:before,\n.fa-square-hacker-news:before {\n  content: \"\\f3af\"\n}\n\n.fa-edge:before {\n  content: \"\\f282\"\n}\n\n.fa-napster:before {\n  content: \"\\f3d2\"\n}\n\n.fa-snapchat-square:before,\n.fa-square-snapchat: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-font-awesome-alt:before,\n.fa-square-font-awesome-stroke: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.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-pied-piper-alt:before {\n  content: \"\\f1a8\"\n}\n\n.fa-dribbble-square:before,\n.fa-square-dribbble: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-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.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-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.fa-youtube-square:before {\n  content: \"\\f431\"\n}\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"\n}\n\n.fa-rendact:before,\n.fa-wpressr: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-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-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.fa-steam-square:before {\n  content: \"\\f1b7\"\n}\n\n.fa-500px:before {\n  content: \"\\f26e\"\n}\n\n.fa-square-vimeo:before,\n.fa-vimeo-square:before {\n  content: \"\\f194\"\n}\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"\n}\n\n.fa-font-awesome-flag:before,\n.fa-font-awesome-logo-full:before,\n.fa-font-awesome: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-github-square:before,\n.fa-square-github: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-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-gitlab-square:before,\n.fa-square-gitlab: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-odnoklassniki-square:before,\n.fa-square-odnoklassniki: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-pinterest-square:before,\n.fa-square-pinterest: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-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-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-facebook-f:before {\n  content: \"\\f39e\"\n}\n\n.fa-google-plus-square:before,\n.fa-square-google-plus:before {\n  content: \"\\f0d4\"\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.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-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-cotton-bureau:before {\n  content: \"\\f89e\"\n}\n\n.fa-dashcube:before {\n  content: \"\\f210\"\n}\n\n.fa-42-group:before,\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-pied-piper-square:before,\n.fa-square-pied-piper: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-searchengin:before {\n  content: \"\\f3eb\"\n}\n\n.fa-tiktok:before {\n  content: \"\\e07b\"\n}\n\n.fa-facebook-square:before,\n.fa-square-facebook: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-lastfm-square:before,\n.fa-square-lastfm: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-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-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-sass:before {\n  content: \"\\f41e\"\n}\n\n.fa-wirsindhandwerk:before,\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-cc-jcb:before {\n  content: \"\\f24b\"\n}\n\n.fa-snapchat-ghost:before,\n.fa-snapchat: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-behance-square:before,\n.fa-square-behance:before {\n  content: \"\\f1b5\"\n}\n\n.fa-supple:before {\n  content: \"\\f3f9\"\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-git-square:before,\n.fa-square-git:before {\n  content: \"\\f1d2\"\n}\n\n.fa-square-tumblr:before,\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-telegram-plane:before,\n.fa-telegram:before {\n  content: \"\\f2c6\"\n}\n\n.fa-old-republic:before {\n  content: \"\\f510\"\n}\n\n.fa-square-whatsapp:before,\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-hash:before,\n.fa-slack: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-reacteurope:before {\n  content: \"\\f75d\"\n}\n\n.fa-medium-m:before,\n.fa-medium: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:host,\n:root {\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(./fa-regular-400.woff2) format(\"woff2\"), url(./fa-regular-400.ttf) format(\"truetype\")\n}\n\n.fa-regular,\n.far {\n  font-weight: 400\n}\n\n:host,\n:root {\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(./fa-solid-900.woff2) format(\"woff2\"), url(./fa-solid-900.ttf) format(\"truetype\")\n}\n\n.fa-solid,\n.fas {\n  font-weight: 900\n}\n\n@font-face {\n  font-family: \"Font Awesome 5 Brands\";\n  font-display: block;\n  font-weight: 400;\n  src: url(./fa-brands-400.woff2) format(\"woff2\"), url(./fa-brands-400.ttf) format(\"truetype\")\n}\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 900;\n  src: url(./fa-solid-900.woff2) format(\"woff2\"), url(./fa-solid-900.ttf) format(\"truetype\")\n}\n\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-display: block;\n  font-weight: 400;\n  src: url(./fa-regular-400.woff2) format(\"woff2\"), url(./fa-regular-400.ttf) format(\"truetype\")\n}\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(./fa-solid-900.woff2) format(\"woff2\"), url(./fa-solid-900.ttf) format(\"truetype\")\n}\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(./fa-brands-400.woff2) format(\"woff2\"), url(./fa-brands-400.ttf) format(\"truetype\")\n}\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(./fa-regular-400.woff2) format(\"woff2\"), url(./fa-regular-400.ttf) format(\"truetype\");\n  unicode-range: u+f003, u+f006, u+f014, u+f016-f017, u+f01a-f01b, u+f01d, u+f022, u+f03e, u+f044, u+f046, u+f05c-f05d, u+f06e, u+f070, u+f087-f088, u+f08a, u+f094, u+f096-f097, u+f09d, u+f0a0, u+f0a2, u+f0a4-f0a7, u+f0c5, u+f0c7, u+f0e5-f0e6, u+f0eb, u+f0f6-f0f8, u+f10c, u+f114-f115, u+f118-f11a, u+f11c-f11d, u+f133, u+f147, u+f14e, u+f150-f152, u+f185-f186, u+f18e, u+f190-f192, u+f196, u+f1c1-f1c9, u+f1d9, u+f1db, u+f1e3, u+f1ea, u+f1f7, u+f1f9, u+f20a, u+f247-f248, u+f24a, u+f24d, u+f255-f25b, u+f25d, u+f271-f274, u+f278, u+f27b, u+f28c, u+f28e, u+f29c, u+f2b5, u+f2b7, u+f2ba, u+f2bc, u+f2be, u+f2c0-f2c1, u+f2c3, u+f2d0, u+f2d2, u+f2d4, u+f2dc\n}\n\n@font-face {\n  font-family: \"FontAwesome\";\n  font-display: block;\n  src: url(./fa-v4compatibility.woff2) format(\"woff2\"), url(./fa-v4compatibility.ttf) format(\"truetype\");\n  unicode-range: u+f041, u+f047, u+f065-f066, u+f07d-f07e, u+f080, u+f08b, u+f08e, u+f090, u+f09a, u+f0ac, u+f0ae, u+f0b2, u+f0d0, u+f0d6, u+f0e4, u+f0ec, u+f10a-f10b, u+f123, u+f13e, u+f148-f149, u+f14c, u+f156, u+f15e, u+f160-f161, u+f163, u+f175-f178, u+f195, u+f1f8, u+f219, u+f27a\n}"
  },
  {
    "path": "src/site/css/inter/inter.css",
    "content": "@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 100;\n  font-display: swap;\n  src: url(\"woff2/Inter-Thin.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Thin.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 100;\n  font-display: swap;\n  src: url(\"woff2/Inter-ThinItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-ThinItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 200;\n  font-display: swap;\n  src: url(\"woff2/Inter-ExtraLight.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-ExtraLight.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 200;\n  font-display: swap;\n  src: url(\"woff2/Inter-ExtraLightItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-ExtraLightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"woff2/Inter-Light.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Light.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 300;\n  font-display: swap;\n  src: url(\"woff2/Inter-LightItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-LightItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"woff2/Inter-Regular.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Regular.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 400;\n  font-display: swap;\n  src: url(\"woff2/Inter-Italic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Italic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"woff2/Inter-Medium.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Medium.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 500;\n  font-display: swap;\n  src: url(\"woff2/Inter-MediumItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-MediumItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"woff2/Inter-SemiBold.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-SemiBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 600;\n  font-display: swap;\n  src: url(\"woff2/Inter-SemiBoldItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-SemiBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"woff2/Inter-Bold.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Bold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 700;\n  font-display: swap;\n  src: url(\"woff2/Inter-BoldItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-BoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"woff2/Inter-ExtraBold.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-ExtraBold.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 800;\n  font-display: swap;\n  src: url(\"woff2/Inter-ExtraBoldItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-ExtraBoldItalic.woff\") format(\"woff\");\n}\n\n@font-face {\n  font-family: 'Inter';\n  font-style:  normal;\n  font-weight: 900;\n  font-display: swap;\n  src: url(\"woff2/Inter-Black.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-Black.woff\") format(\"woff\");\n}\n@font-face {\n  font-family: 'Inter';\n  font-style:  italic;\n  font-weight: 900;\n  font-display: swap;\n  src: url(\"woff2/Inter-BlackItalic.woff2\") format(\"woff2\"),\n       url(\"woff/Inter-BlackItalic.woff\") format(\"woff\");\n}\n\n/* -------------------------------------------------------\nVariable font.\nUsage:\n\n  html { font-family: 'Inter', sans-serif; }\n  @supports (font-variation-settings: normal) {\n    html { font-family: 'Inter var', sans-serif; }\n  }\n*/\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-display: swap;\n  font-style: normal;\n  font-named-instance: 'Regular';\n  src: url(\"woff2/Inter-roman.var.woff2\") format(\"woff2\");\n}\n@font-face {\n  font-family: 'Inter var';\n  font-weight: 100 900;\n  font-display: swap;\n  font-style: italic;\n  font-named-instance: 'Italic';\n  src: url(\"woff2/Inter-italic.var.woff2\") format(\"woff2\");\n}\n\n\n/* --------------------------------------------------------------------------\n[EXPERIMENTAL] Multi-axis, single variable font.\n\nSlant axis is not yet widely supported (as of February 2019) and thus this\nmulti-axis single variable font is opt-in rather than the default.\n\nWhen using this, you will probably need to set font-variation-settings\nexplicitly, e.g.\n\n  * { font-variation-settings: \"slnt\" 0deg }\n  .italic { font-variation-settings: \"slnt\" 10deg }\n\n*/\n@font-face {\n  font-family: 'Inter var experimental';\n  font-weight: 100 900;\n  font-display: swap;\n  font-style: oblique 0deg 10deg;\n  src: url(\"woff2/Inter.var.woff2\") format(\"woff2\");\n}\n"
  },
  {
    "path": "src/site/css/styles.css",
    "content": "@import './inter/inter.css';\n@import './fira_code/fira_code.css';\n@import './fontawesome/font-awesome.css';\n\nbody {\n\tline-height:    1.4em;\n    font:           400 16px/1.5 'Inter';\n    background:     #ecf0f4;\n    color:          #111111;\n    margin:         0;\n\tpadding:        0;\n\tborder:         0;\n\tvertical-align: baseline;\n}\n\n.wrapper {\n    max-width:     calc(800px - (30px * 2));\n    margin-left:   auto;\n    margin-right:  auto;\n    padding-left:  30px;\n    padding-right: 30px;\n    padding-bottom: 100px;\n}\n\n#navbar {\n    height:        25px;\n    margin-bottom: 10px;\n    padding-top:   15px;\n    font-size:     25px;\n}\n\n\n#navbar span {\n    display:         inline-block;\n    line-height:     normal;\n    vertical-align:  middle;\n    float:           right;\n}\n\n#navbar span.external {\n    padding-left:    30px;\n}\n\n#navbar span.internal {\n    padding-right: 30px;\n    float: left !important;\n    font-weight: bold;\n    text-transform: uppercase;\n}\n\n@media only screen and (max-width: 600px) {\n    #navbar {\n        font-size:     17px;\n    }\n\n    #navbar span.external {\n        padding-left:    7px;\n    }\n\n    #navbar span.internal {\n        padding-right: 7px;\n        font-size: 16px;\n    }\n}\n\n\n#navbar a:hover {\n    color: #aaa;\n}\n\n#navbar a {\n    text-decoration:    none;\n    border:             none;\n    color:              #111111;\n}\n\na {\n    color:           #111111;\n    text-decoration: none;\n    border-bottom:   1px dotted #111111;\n}\n\na:not([href]) {\n    color: #aaa;\n}\n\n.prev_next {\n    text-align: center;\n}\n\n.prev_next a {\n    border: none;\n}\n\n.prev_next a[href]:hover {\n    color:              #586E75;\n}\n\nhr {\n    border:           none;\n    height:           1px;\n    color:            #111111;\n    background-color: #111111;\n}\n\nh1, h2 {\n    color:          #111111;\n    margin-bottom:  12px;\n    margin-top:     48px;\n    padding-bottom: 0px;\n}\n\nh3 {\n    color:     #111111;\n    font-size: 17px;\n}\n\nh1 {\n    border-bottom:  1px solid #111111;\n}\n\ntime {\n    color:         #a09b96;\n    padding-bottom: 200px;\n    text-transform: uppercase;\n}\n\ndiv.title {\n    margin-top:  5px;\n    font-weight: bold;\n}\n\nli p {\n    padding: 0;\n    margin: 0;\n}\n\npre {\n    border-radius: 5px;\n    font-size:   0.85em;\n    overflow:    auto;\n}\n\nblockquote {\n    margin:      0;\n    background:  #f9f9f9;\n    border-left: 10px solid #dfdedc;\n    color:       #5f5e5c;\n    border-top-right-radius:    5px;\n    border-bottom-right-radius: 5px;\n}\n\nblockquote p {\n    padding: 0.5em;\n    margin:  0;\n}\n\n.figure {\n    display   : block;\n    text-align: center;\n    background: #f9f9f9;\n    padding   : 10px;\n}\n\n.figure img {\n    max-width: 100%;\n}\n\n.highlight pre code {\n  white-space: pre;       // forces <code> to respect <pre> formatting\n}\n\n.highlight pre, pre, .highlight .hll {\n    background-color: #f8f8f8;\n    padding: 6px 10px;\n    border: none;\n}\n\ncode {\n    font-family: \"Fira Code\";\n}\n\np code, li code {\n    font-size:     0.9em;\n    color:         #586e75;\n}\n\n.highlight .hll { background-color: #ffffcc }\n.highlight .c { color: #586E75; font-style: italic; font-weight: lighter} /* Comment */\n.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */\n.highlight .k { color: #586E75; font-weight: bold } /* Keyword */\n.highlight .o { color: #586E75; font-weight: bold } /* Operator */\n.highlight .cm { color: #586E75; font-style: italic; font-weight: lighter } /* Comment.Multiline */\n.highlight .cp { color: #586E75; font-style: italic; font-weight: lighter } /* Comment.Preproc */\n.highlight .c1 { color: #586E75; font-style: italic; font-weight: lighter } /* Comment.Single */\n.highlight .cs { color: #586E75; font-style: italic; font-weight: lighter } /* Comment.Special */\n.highlight .gd { color: #586E75; font-weight: bold } /* Generic.Deleted */\n.highlight .ge { color: #586E75; font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #aa0000 } /* Generic.Error */\n.highlight .gh { color: #D0DCE3 } /* Generic.Heading */\n.highlight .gi { color: #586E75; background-color: #ddffdd } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #555555 } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #aaaaaa } /* Generic.Subheading */\n.highlight .gt { color: #aa0000 } /* Generic.Traceback */\n.highlight .kc { color: #586E75; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #586E75; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #586E75; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #586E75; font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { color: #586E75; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #586E75; font-weight: bold } /* Keyword.Type */\n.highlight .m { color: #D0DCE3 } /* Literal.Number */\n.highlight .s { color: #586E75 } /* Literal.String */\n.highlight .n { color: #586E75 }\n.highlight .na { color: #586E75 } /* Name.Attribute */\n.highlight .nb { color: #586E75 } /* Name.Builtin */\n.highlight .nc { color: #586E75; font-weight: bold } /* Name.Class */\n.highlight .no { color: #586E75 } /* Name.Constant */\n.highlight .nd { color: #586E75; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #586E75 } /* Name.Entity */\n.highlight .ne { color: #586E75; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #586E75; font-weight: bold } /* Name.Function */\n.highlight .nl { color: #586E75; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #555555 } /* Name.Namespace */\n.highlight .nt { color: #586E75 } /* Name.Tag */\n.highlight .nv { color: #586E75 } /* Name.Variable */\n.highlight .ow { color: #586E75; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mf { color: #586E75 } /* Literal.Number.Float */\n.highlight .mh { color: #586E75 } /* Literal.Number.Hex */\n.highlight .mi { color: #586E75 } /* Literal.Number.Integer */\n.highlight .mo { color: #586E75 } /* Literal.Number.Oct */\n.highlight .sb { color: #586E75 } /* Literal.String.Backtick */\n.highlight .sc { color: #586E75 } /* Literal.String.Char */\n.highlight .sd { color: #586E75 } /* Literal.String.Doc */\n.highlight .s2 { color: #586E75 } /* Literal.String.Double */\n.highlight .se { color: #586E75 } /* Literal.String.Escape */\n.highlight .sh { color: #586E75 } /* Literal.String.Heredoc */\n.highlight .si { color: #586E75 } /* Literal.String.Interpol */\n.highlight .sx { color: #586E75 } /* Literal.String.Other */\n.highlight .sr { color: #586E75 } /* Literal.String.Regex */\n.highlight .s1 { color: #586E75 } /* Literal.String.Single */\n.highlight .ss { color: #586E75 } /* Literal.String.Symbol */\n.highlight .bp { color: #586E75 } /* Name.Builtin.Pseudo */\n.highlight .vc { color: #586E75 } /* Name.Variable.Class */\n.highlight .vg { color: #586E75 } /* Name.Variable.Global */\n.highlight .vi { color: #586E75 } /* Name.Variable.Instance */\n.highlight .il { color: #586E75 } /* Literal.Number.Integer.Long */\n\ntable {\n    border-collapse:  collapse;\n    border-spacing:   0;\n    border:           1px solid #111111;\n    width:            100%;\n}\n\nthead th {\n    background: #111111;\n    color:      #ecf0f4;\n}\n\ntr td {\n    padding: 5px 10px 5px 40px;\n    text-align: center;\n}\n\ntr td:first-child {\n    padding-left: 10px;\n}\n\ntd ul {\n    display: inline;\n    margin:  0;\n    padding: 0;\n}\n\ntd ul li {\n    display:    inline;\n    list-style: none;\n    margin:     0;\n    padding:    0;\n}\n\ntd ul li:after {\n    content: \", \";\n}\n\ntd ul li:last-child:after {\n    content: \"\";\n}\n"
  },
  {
    "path": "src/site/fonts/fira/LICENSE",
    "content": "Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.\nwith Reserved Font Name < Fira >, \n\nThis Font Software is licensed under the SIL Open Font License, Version 1.1.\nThis license is copied below, and is also available with a FAQ at:\nhttp://scripts.sil.org/OFL\n\n\n-----------------------------------------------------------\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\n-----------------------------------------------------------\n\nPREAMBLE\nThe goals of the Open Font License (OFL) are to stimulate worldwide\ndevelopment of collaborative font projects, to support the font creation\nefforts of academic and linguistic communities, and to provide a free and\nopen framework in which fonts may be shared and improved in partnership\nwith others.\n\nThe OFL allows the licensed fonts to be used, studied, modified and\nredistributed freely as long as they are not sold by themselves. The\nfonts, including any derivative works, can be bundled, embedded, \nredistributed and/or sold with any software provided that any reserved\nnames are not used by derivative works. The fonts and derivatives,\nhowever, cannot be released under any other type of license. The\nrequirement for fonts to remain under this license does not apply\nto any document created using the fonts or their derivatives.\n\nDEFINITIONS\n\"Font Software\" refers to the set of files released by the Copyright\nHolder(s) under this license and clearly marked as such. This may\ninclude source files, build scripts and documentation.\n\n\"Reserved Font Name\" refers to any names specified as such after the\ncopyright statement(s).\n\n\"Original Version\" refers to the collection of Font Software components as\ndistributed by the Copyright Holder(s).\n\n\"Modified Version\" refers to any derivative made by adding to, deleting,\nor substituting -- in part or in whole -- any of the components of the\nOriginal Version, by changing formats or by porting the Font Software to a\nnew environment.\n\n\"Author\" refers to any designer, engineer, programmer, technical\nwriter or other person who contributed to the Font Software.\n\nPERMISSION & CONDITIONS\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Font Software, to use, study, copy, merge, embed, modify,\nredistribute, and sell modified and unmodified copies of the Font\nSoftware, subject to the following conditions:\n\n1) Neither the Font Software nor any of its individual components,\nin Original or Modified Versions, may be sold by itself.\n\n2) Original or Modified Versions of the Font Software may be bundled,\nredistributed and/or sold with any software, provided that each copy\ncontains the above copyright notice and this license. These can be\nincluded either as stand-alone text files, human-readable headers or\nin the appropriate machine-readable metadata fields within text or\nbinary files as long as those fields can be easily viewed by the user.\n\n3) No Modified Version of the Font Software may use the Reserved Font\nName(s) unless explicit written permission is granted by the corresponding\nCopyright Holder. This restriction only applies to the primary font name as\npresented to the users.\n\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\nSoftware shall not be used to promote, endorse or advertise any\nModified Version, except to acknowledge the contribution(s) of the\nCopyright Holder(s) and the Author(s) or with their explicit written\npermission.\n\n5) The Font Software, modified or unmodified, in part or in whole,\nmust be distributed entirely under this license, and must not be\ndistributed under any other license. The requirement for fonts to\nremain under this license does not apply to any document created\nusing the Font Software.\n\nTERMINATION\nThis license becomes null and void if any of the above conditions are\nnot met.\n\nDISCLAIMER\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\nOTHER DEALINGS IN THE FONT SOFTWARE.\n"
  },
  {
    "path": "src/site/fonts/fira/fira.css",
    "content": "@font-face{\n    font-family: 'Fira Mono';\n    src: url('eot/FiraMono-Regular.eot');\n    src: local('Fira Mono'),\n         url('eot/FiraMono-Regular.eot') format('embedded-opentype'),\n         url('woff/FiraMono-Regular.woff') format('woff'),\n         url('ttf/FiraMono-Regular.ttf') format('truetype');\n    font-weight: 400;\n    font-style: normal;\n}\n\n@font-face{\n    font-family: 'Fira Mono';\n    src: url('eot/FiraMono-Bold.eot');\n    src: local('Fira Mono Bold'),\n         url('eot/FiraMono-Bold.eot') format('embedded-opentype'),\n         url('woff/FiraMono-Bold.woff') format('woff'),\n         url('ttf/FiraMono-Bold.ttf') format('truetype');\n    font-weight: 600;\n    font-style: normal;\n}\n"
  },
  {
    "path": "src/site/fonts/fontawesome/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url('./fontawesome-webfont.eot?v=4.4.0');src:url('./fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('./fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('./fontawesome-webfont.woff?v=4.4.0') format('woff'),url('./fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('./fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\f19c\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\f1c5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\f1c6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-rebel:before{content:\"\\f1d0\"}.fa-ge:before,.fa-empire:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\f1d8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-hotel:before,.fa-bed:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-tv:before,.fa-television:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}\n"
  }
]