diff --git a/1252 CP-Names.pdf b/1252 CP-Names.pdf new file mode 100644 index 0000000..c90f5d9 Binary files /dev/null and b/1252 CP-Names.pdf differ diff --git "a/4. P\303\241gina de c\303\263digos 850 IBM_PC (8 bits) - Extension del codigo_ascii (7 bits).xlsm" "b/4. P\303\241gina de c\303\263digos 850 IBM_PC (8 bits) - Extension del codigo_ascii (7 bits).xlsm" new file mode 100644 index 0000000..cc1b646 Binary files /dev/null and "b/4. P\303\241gina de c\303\263digos 850 IBM_PC (8 bits) - Extension del codigo_ascii (7 bits).xlsm" differ diff --git a/Fase 1 - Fundamentos de programacion/CursoPython-Final.zip b/Fase 1 - Fundamentos de programacion/CursoPython-Final.zip index ba638e7..0500708 100644 Binary files a/Fase 1 - Fundamentos de programacion/CursoPython-Final.zip and b/Fase 1 - Fundamentos de programacion/CursoPython-Final.zip differ diff --git "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 1 (Apuntes) - N\303\272meros.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 1 (Apuntes) - Numeros.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 1 (Apuntes) - N\303\272meros.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 1 (Apuntes) - Numeros.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 2 (Apuntes) - Textos.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 2 (Apuntes) - Textos.ipynb similarity index 90% rename from "Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 2 (Apuntes) - Textos.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 2 (Apuntes) - Textos.ipynb index 0bf13f3..2c7662d 100644 --- "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 2 (Apuntes) - Textos.ipynb" +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 2 (Apuntes) - Textos.ipynb @@ -10,9 +10,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -32,9 +30,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -54,9 +50,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -76,9 +70,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -98,9 +90,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -120,9 +110,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -150,9 +138,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -174,9 +160,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -204,9 +188,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -223,9 +205,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -250,9 +230,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -270,9 +248,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -296,9 +272,7 @@ { "cell_type": "code", "execution_count": 13, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -338,9 +312,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -360,9 +332,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -388,9 +358,7 @@ { "cell_type": "code", "execution_count": 18, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -410,9 +378,7 @@ { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -431,9 +397,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -451,9 +415,7 @@ { "cell_type": "code", "execution_count": 25, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -479,9 +441,7 @@ { "cell_type": "code", "execution_count": 27, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -520,9 +480,7 @@ { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -542,9 +500,7 @@ { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -571,9 +527,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -593,9 +547,7 @@ { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -615,9 +567,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -637,9 +587,7 @@ { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -659,9 +607,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -702,9 +648,7 @@ { "cell_type": "code", "execution_count": 38, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -724,9 +668,7 @@ { "cell_type": "code", "execution_count": 42, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -746,9 +688,7 @@ { "cell_type": "code", "execution_count": 43, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -775,9 +715,7 @@ { "cell_type": "code", "execution_count": 44, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -797,9 +735,7 @@ { "cell_type": "code", "execution_count": 45, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -819,9 +755,7 @@ { "cell_type": "code", "execution_count": 46, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -848,9 +782,7 @@ { "cell_type": "code", "execution_count": 47, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "ename": "IndexError", @@ -878,9 +810,7 @@ { "cell_type": "code", "execution_count": 48, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -900,9 +830,7 @@ { "cell_type": "code", "execution_count": 50, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -930,9 +858,7 @@ { "cell_type": "code", "execution_count": 51, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "ename": "TypeError", @@ -960,9 +886,7 @@ { "cell_type": "code", "execution_count": 52, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -991,9 +915,7 @@ { "cell_type": "code", "execution_count": 53, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -1036,9 +958,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 3 (Apuntes) - Listas.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 3 (Apuntes) - Listas.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 3 (Apuntes) - Listas.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 3 (Apuntes) - Listas.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 4 (Apuntes) - Lectura por teclado.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 4 (Apuntes) - Lectura por teclado.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 4 (Apuntes) - Lectura por teclado.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 4 (Apuntes) - Lectura por teclado.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 5 (Apuntes) - Primeros pasos.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 5 (Apuntes) - Primeros pasos.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Lecci\303\263n 5 (Apuntes) - Primeros pasos.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Apuntes/Leccion 5 (Apuntes) - Primeros pasos.ipynb diff --git a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 1 - Numeros.ipynb b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 1 - Numeros.ipynb new file mode 100644 index 0000000..e6704cd --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 1 - Numeros.ipynb @@ -0,0 +1,35 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 2 - Textos.ipynb b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 2 - Textos.ipynb new file mode 100644 index 0000000..e6704cd --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 2 - Textos.ipynb @@ -0,0 +1,35 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 3 - Listas.ipynb b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 3 - Listas.ipynb new file mode 100644 index 0000000..e6704cd --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 3 - Listas.ipynb @@ -0,0 +1,35 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 4 - Lectura por teclado.ipynb b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 4 - Lectura por teclado.ipynb new file mode 100644 index 0000000..8b885eb --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 4 - Lectura por teclado.ipynb @@ -0,0 +1,35 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 5 - Primeros pasos.ipynb b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 5 - Primeros pasos.ipynb new file mode 100644 index 0000000..51f2375 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 01 - Introduccion informal/Leccion 5 - Primeros pasos.ipynb @@ -0,0 +1,50 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejemplo de cabecera\n", + "Intenta deducir qué hace este programa (no hace falta que le des muchas vueltas)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "n = 0\n", + "while n < 10: # while = mientras\n", + " if (n % 2) == 0: # if = si (de condicion)\n", + " print(n,'es un número par')\n", + " else: # else = sino (def condicion)\n", + " print(n,'es un número impar')\n", + " n = n + 1" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/6.16 Operator precedence.mhtml b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/6.16 Operator precedence.mhtml new file mode 100644 index 0000000..a087867 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/6.16 Operator precedence.mhtml @@ -0,0 +1,4420 @@ +From: +Snapshot-Content-Location: https://docs.python.org/3/reference/expressions.html#operator-precedence +Subject: =?utf-8?Q?6.=20Expressions=20=E2=80=94=20Python=203.8.1=20documentation?= +Date: Mon, 27 Jan 2020 22:44:44 -0000 +MIME-Version: 1.0 +Content-Type: multipart/related; + type="text/html"; + boundary="----MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt----" + + +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/html +Content-ID: +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/reference/expressions.html#operator-precedence + + + =20 + 6. Expressions =E2=80=94 Python 3.8.1 documentation + + + =20 + =20 + =20 + =20 + =20 + =20 + =20 + =20 + =20 + + + + + + + + + =20 + =20 + =20 + =20 + =20 + + =20 + =20 + + + =20 + =20 + =20 + =20 + + + + =20 +
+

Navigation

+
    +
  • + index
  • +
  • + modules |
  • +
  • + next |
  • +
  • + previous |
  • + +
  • 3D""
  • +
  • Python =C2=BB
  • + =20 + +
  • + + + + =20 + =20 + +
+ =20 + | + + + + =20 + +
+
+
+
+ =20 +
+

6. Expres= +sions=C2=B6= +

+

This chapter explains the meaning of the elements of expr= +essions in Python.

+

Syntax Notes: In this and the following chapters, exten= +ded BNF notation will +be used to describe syntax, not lexical analysis. When (one alternative of= +) a +syntax rule has the form

+
name ::=3D  othername
+
+

and no semantics are given, the semantics of this form of name are t= +he same +as for oth= +ername.

+
+

6.1. Arithmetic conversions=C2=B6

+

When a description of an arithmetic operator below uses t= +he phrase =E2=80=9Cthe numeric +arguments are converted to a common type,=E2=80=9D this means that the oper= +ator +implementation for built-in types works as follows:

+
    +
  • If either argument is a complex number, the other is converted to co= +mplex;

  • +
  • otherwise, if either argument is a floating point number, the other = +is +converted to floating point;

  • +
  • otherwise, both must be integers and no conversion is necessary.

    = +
  • +
+

Some additional rules apply for certain operators (e.g., a string as a l= +eft +argument to the =E2=80=98%=E2=80=99 operator). Extensions must define thei= +r own conversion +behavior.

+
+
+

6.2. Atom= +s=C2=B6

+

Atoms are the most basic elements of expressions. The si= +mplest atoms are +identifiers or literals. Forms enclosed in parentheses, brackets or braces= + are +also categorized syntactically as atoms. The syntax for atoms is:

+
atom      ::=3D  identifier | literal | <=
+span class=3D"pre">enclosure
+enclosure ::=3D  parenth_form | list_display | dict_display | set_display
+               | generator=
+_expression | yiel=
+d_atom
+
+
+

6.= +2.1. Identifiers (Names)=C2=B6

+

An identifier occurring as an atom is a name. See sectio= +n Identifie= +rs and keywords +for lexical definition and section Naming and binding for documentation of naming = +and +binding.

+

When the name is bound to an object, evaluation of the at= +om yields that object. +When a name is not bound, an attempt to evaluate it raises a NameError +exception.

+

Private name mangling: When an identifie= +r that textually occurs in a class +definition begins with two or more underscore characters and does not end i= +n two +or more underscores, it is considered a private name= + of that class. +Private names are transformed to a longer form before code is generated for +them. The transformation inserts the class name, with leading underscores +removed and a single underscore inserted, in front of the name. For exampl= +e, +the identifier __spam occurring in a class named Ham will be transf= +ormed +to _Ham__s= +pam. This transformation is independent of the syntactical +context in which the identifier is used. If the transformed name is extrem= +ely +long (longer than 255 characters), implementation defined truncation may ha= +ppen. +If the class name consists only of underscores, no transformation is done.<= +/p> +

+
+

6.2.2.= + Literals= +=C2=B6

+

Python supports string and bytes literals and various num= +eric literals:

+
literal ::=3D  stringliteral | bytesliteral
+             | integer | floatnumber | imagnumber
+
+

Evaluation of a literal yields an object of the given type (string, byte= +s, +integer, floating point number, complex number) with the given value. The = +value +may be approximated in the case of floating point and imaginary (complex) +literals. See section Literals for details.

+

All literals correspond to immutable data types, and henc= +e the object=E2=80=99s identity +is less important than its value. Multiple evaluations of literals with th= +e +same value (either the same occurrence in the program text or a different +occurrence) may obtain the same object or a different object with the same +value.

+
+
+

6.2.3.= + Parenthesized forms=C2=B6

+

A parenthesized form is an optional expression list enclo= +sed in parentheses:

+
parenth_form ::=3D =
+ "(" [starred_expression] ")"
+
+

A parenthesized expression list yields whatever that expression list yie= +lds: if +the list contains at least one comma, it yields a tuple; otherwise, it yiel= +ds +the single expression that makes up the expression list.

+

An empty pair of parentheses yields an empty tuple object= +. Since tuples are +immutable, the same rules as for literals apply (i.e., two occurrences of t= +he empty +tuple may or may not yield the same object).

+

Note that tuples are not formed by the parentheses, but = +rather by use of the +comma operator. The exception is the empty tuple, for which parentheses are +required =E2=80=94 allowing unparenthesized =E2=80=9Cnothing=E2=80=9D in ex= +pressions would cause +ambiguities and allow common typos to pass uncaught.

+
+
+

6.2.4= +. Displays for lists, sets and dictionaries=C2=B6<= +/h3> +

For constructing a list, a set or a dictionary Python provides special s= +yntax +called =E2=80=9Cdisplays=E2=80=9D, each of them in two flavors:

+
    +
  • either the container contents are listed explicitly, or

  • +
  • they are computed via a set of looping and filtering instructions, c= +alled a +comprehension.

  • +
+

Common syntax elements for comprehensions are:

+
comprehension ::=
+=3D  expression comp_for
+comp_for      ::=3D  ["async=
+"] "for" target_list=
+ "in" or_test [comp_iter]
+comp_iter     ::=3D  comp_for | comp_if
+comp_if       ::=3D  "if" expression_nocond<=
+/a> [comp_iter]
+
+

The comprehension consists of a single expression followed by at least o= +ne +for clause and zero or more for<= +/code> or if clauses. +In this case, the elements of the new container are those that would be pro= +duced +by considering each of the for or if clauses a block, +nesting from left to right, and evaluating the expression to produce an ele= +ment +each time the innermost block is reached.

+

However, aside from the iterable expression in the leftmost = +for clause, +the comprehension is executed in a separate implicitly nested scope. This e= +nsures +that names assigned to in the target list don=E2=80=99t =E2=80=9Cleak=E2=80= +=9D into the enclosing scope.

+

The iterable expression in the leftmost for cla= +use is evaluated +directly in the enclosing scope and then passed as an argument to the impli= +citly +nested scope. Subsequent for clauses and any filte= +r condition in the +leftmost = +for clause cannot be evaluated in the enc= +losing scope as +they may depend on the values obtained from the leftmost iterable. For exam= +ple: +[x*y for x in range(10) for y in range(x, x+10)]. +

To ensure the comprehension always results in a container of the appropr= +iate +type, yiel= +d and yield from expressions a= +re prohibited in the implicitly +nested scope.

+

Since Python 3.6, in an = +async def function,= + an async for +clause may be used to iterate over a asynchronous iterator. +A comprehension in an async def function may consist of either a +for or async for clause following the leading +expression, may contain additional for or async for +clauses, and may also use await<= +/code> expressions. +If a comprehension contains either async for clauses +or await expressions it is called an +asynchronous comprehension. An asynchronous compreh= +ension may +suspend the execution of the coroutine function in which it appears. +See also P= +EP 530.

+
+

New in version 3.6: Asynchr= +onous comprehensions were introduced.

+
+
+

Changed in version 3.8: <= +code class=3D"docutils literal notranslate">yield and yield from prohibited in the im= +plicitly nested scope.

+
+

+ + +
+

6.2.7. D= +ictionary displays=C2=B6

+

A dictionary display is a possibly empty series of key/d= +atum pairs enclosed in +curly braces:

+
dict_display       =
+::=3D  "{" [key_datum_list | dict_comprehe=
+nsion] "}"
+key_datum_list     ::=
+=3D  key_datum (","=
+ key_datum)* [","]
+key_datum          ::=3D  <=
+a class=3D"reference internal" href=3D"https://docs.python.org/3/reference/=
+expressions.html#grammar-token-expression">expression ":" expression | "**" or_expr
+dict_comprehension=
+ ::=3D  expression=
+ ":" expression comp_for
+
+

A dictionary display yields a new dictionary object.

+

If a comma-separated sequence of key/datum pairs is given, they are eval= +uated +from left to right to define the entries of the dictionary: each key object= + is +used as a key into the dictionary to store the corresponding datum. This m= +eans +that you can specify the same key multiple times in the key/datum list, and= + the +final dictionary=E2=80=99s value for that key will be the last one given. +

A double asterisk ** denotes dicti= +onary unpacking. +Its operand must be a = +mapping. Each mapping item is added +to the new dictionary. Later values replace values already set by +earlier key/datum pairs and earlier dictionary unpackings.

+
+

New in version 3.5: Unpacki= +ng into dictionary displays, originally proposed by PEP 448.

+
+

A dict comprehension, in contrast to list and set comprehensions, needs = +two +expressions separated with a colon followed by the usual =E2=80=9Cfor=E2=80= +=9D and =E2=80=9Cif=E2=80=9D clauses. +When the comprehension is run, the resulting key and value elements are ins= +erted +in the new dictionary in the order they are produced.

+

Restrictions on the types of the key values are listed e= +arlier in section +The standard type hierar= +chy. (To summarize, the key type should be = +hashable, which excludes +all mutable objects.) Clashes between duplicate keys are not detected; the= + last +datum (textually rightmost in the display) stored for a given key value +prevails.

+
+

Changed in version 3.8: P= +rior to Python 3.8, in dict comprehensions, the evaluation order of key +and value was not well-defined. In CPython, the value was evaluated before +the key. Starting with 3.8, the key is evaluated before the value, as +proposed by PEP 572.

+
+
+
+

6.2.8. Generator expressions=C2=B6

+

A generator expression is a compact generator notation i= +n parentheses:

+
generator_expression=
+ ::=3D  "(" expression comp_for ")"
+
+

A generator expression yields a new generator object. Its syntax is the= + same as +for comprehensions, except that it is enclosed in parentheses instead of +brackets or curly braces.

+

Variables used in the generator expression are evaluated lazily when the +__= +next__() method is called for the generator object (in th= +e same +fashion as normal generators). However, the iterable expression in the +leftmost = +for clause is immediately evaluated, so t= +hat an error +produced by it will be emitted at the point where the generator expression +is defined, rather than at the point where the first value is retrieved. +Subsequent for clauses and any filter condition in= + the leftmost +for clause cannot be evaluated in the enclosing sc= +ope as they may +depend on the values obtained from the leftmost iterable. For example: +(x*y for x in range(10) for y in range(x, x+10)). +

The parentheses can be omitted on calls with only one argument. See sec= +tion +Calls for d= +etails.

+

To avoid interfering with the expected operation of the generator expres= +sion +itself, yi= +eld and yield from expressions= + are prohibited in the +implicitly defined generator.

+

If a generator expression contains either async for +clauses or await expr= +essions it is called an +asynchronous generator expression. An asynchronous = +generator +expression returns a new asynchronous generator object, +which is an asynchronous iterator (see Asynchronous Iterators).

+
+

New in version 3.6: Asynchr= +onous generator expressions were introduced.

+
+
+

Changed in version 3.7: P= +rior to Python 3.7, asynchronous generator expressions could +only appear in async def coroutines. Starting +with 3.7, any function can use asynchronous generator expressions.

+
+
+

Changed in version 3.8: <= +code class=3D"docutils literal notranslate">yield and yield from prohibited in the im= +plicitly nested scope.

+
+
+
+

6.2.9. Yield expressions=C2=B6

+
yield_atom    =
+   ::=3D  "(" yield_e=
+xpression ")"
+yield_expression ::=
+=3D  "yield" [expression_list<=
+/span> | "from" expressio=
+n]
+
+

The yield expression is used when defining a generator function +or an a= +synchronous generator function and +thus can only be used in the body of a function definition. Using a yield +expression in a function=E2=80=99s body causes that function to be a genera= +tor, +and using it in an async = +def function=E2=80=99s body causes th= +at +coroutine function to be an asynchronous generator. For example:

+
= +
def gen():  =
+# defines a generator function
+    yield 123
+
+async def agen(): # defines an=
+ asynchronous generator function
+    yield 123
+
+
+

Due to their side effects on the containing scope, yield expressions +are not permitted as part of the implicitly defined scopes used to +implement comprehensions and generator expressions.

+
+

Changed in version 3.8: Y= +ield expressions prohibited in the implicitly nested scopes used to +implement comprehensions and generator expressions.

+
+

Generator functions are described below, while asynchronous generator +functions are described separately in section +Asynchronous generator functions.

+

When a generator function is called, it returns an iterator known as a +generator. That generator then controls the execution of the generator fun= +ction. +The execution starts when one of the generator=E2=80=99s methods is called.= + At that +time, the execution proceeds to the first yield expression, where it is +suspended again, returning the value of expression_list to the generator= +=E2=80=99s +caller. By suspended, we mean that all local state is retained, including = +the +current bindings of local variables, the instruction pointer, the internal +evaluation stack, and the state of any exception handling. When the execut= +ion +is resumed by calling one of the +generator=E2=80=99s methods, the function can proceed exactly as if the yie= +ld expression +were just another external call. The value of the yield expression after +resuming depends on the method which resumed the execution. If +__= +next__() is used (typically via either a for or +the next() built= +in) then the result is None. Otherwise, if +send() is used, then the result will be the value passed in to +that method.

+

All of this makes generator functions quite similar to c= +oroutines; they yield +multiple times, they have more than one entry point and their execution can= + be +suspended. The only difference is that a generator function cannot control +where the execution should continue after it yields; the control is always +transferred to the generator=E2=80=99s caller.

+

Yield expressions are allowed anywhere in a try construct. If the +generator is not resumed before it is +finalized (by reaching a zero reference count or by being garbage collected= +), +the generator-iterator=E2=80=99s close() method will be called, +allowing any pending finally clauses to execute.

+

When yield from <expr> is used, it treats the supplied expression a= +s +a subiterator. All values produced by that subiterator are passed directly +to the caller of the current generator=E2=80=99s methods. Any values passed= + in with +send() and any exceptions passed in with +throw()<= +/span> are passed to the underlying iterator if it has the +appropriate methods. If this is not the case, then send() +will raise Att= +ributeError or TypeError, while +throw()<= +/span> will just raise the passed in exception immediately.

+

When the underlying iterator is complete, the value +attribute of the raised StopIteration instance becomes the value of +the yield expression. It can be either set explicitly when raising +StopIteration, or automatically when the subiterator is a generator +(by returning a value from the subgenerator).

+
+
+

Changed in version 3.3: A= +dded yield= + from <expr> to delegate control flow to a subiterator.

+
+
+

The parentheses may be omitted when the yield expression is the sole exp= +ression +on the right hand side of an assignment statement.

+
+

See also

+
+
PEP 25= +5 - Simple Generators

The proposal for adding gener= +ators and the yield = +statement to Python.

+
+
PEP 34= +2 - Coroutines via Enhanced Generators

The proposal= + to enhance the API and syntax of generators, making them +usable as simple coroutines.

+
+
PEP 38= +0 - Syntax for Delegating to a Subgenerator

The pro= +posal to introduce the yield_from syntax, making del= +egation +to subgenerators easy.

+
+
PEP 52= +5 - Asynchronous Generators

The proposal that expan= +ded on PEP= + 492 by adding generator capabilities to +coroutine functions.

+
+
+
+
+

6.2.9.1. Generator-iterator methods=C2=B6= +

+

This subsection describes the methods of a generator iterator. They can +be used to control the execution of a generator function.

+

Note that calling any of the generator methods below when the generator +is already executing raises a ValueError exception.

+
+
+generator.__next__()=C2=B6
+

Starts the execution of a generator function or resumes it at the la= +st +executed yield expression. When a generator function is resumed with a +__= +next__() method, the current yield expression always +evaluates to None. The execution then continues to the next yield +expression, where the generator is suspended again, and the value of the +expression_list is returned to __next__()=E2=80=99s caller= +. If the +generator exits without yielding another value, a StopIteration +exception is raised.

+

This method is normally called implicitly, e.g. by a for loop, or +by the built-in next() function.

+
+ +
+
+generator.send(value)=C2=B6
+

Resumes the execution and =E2=80=9Csends=E2=80=9D a value into the g= +enerator function. The +value argument becomes the result of the current yield expression.= + The +send() method returns the next value yielded by the generator, or +raises StopItera= +tion if the generator exits without yielding another +value. When send() is called to start the generator, it must be ca= +lled +with None as th= +e argument, because there is no yield expression that +could receive the value.

+
+ +
+
+generator.throw(type[, value[, traceback]]= +)=C2=B6
+

Raises an exception of type type at the point where the generato= +r was paused, +and returns the next value yielded by the generator function. If the gener= +ator +exits without yielding another value, a StopIteration exception is +raised. If the generator function does not catch the passed-in exception, = +or +raises a different exception, then that exception propagates to the caller.= +

+
+ +
+
+generator.close()=C2=B6
+

Raises a = +GeneratorExit at the point where the generator function w= +as +paused. If the generator function then exits gracefully, is already closed= +, +or raises Genera= +torExit (by not catching the exception), close +returns to its caller. If the generator yields a value, a +RuntimeError is raised. If the generator raises any other exception, +it is propagated to the caller. close() does nothing if the ge= +nerator +has already exited due to an exception or normal exit.

+
+ +
+
+

6.2.9.2. Examples=C2= +=B6

+

Here is a simple example that demonstrates the behavior of generators an= +d +generator functions:

+
= +
>>&= +gt;
>>> def echo(value=3DNone):
+...     print("Execution starts when 'next()' is calle=
+d for the first time.")
+...     try:
+...         while True:
+...             try:
+...                 value =3D (=
+yield value)
+...             except <=
+span class=3D"ne">Exception as e:
+...                 value =3D e
+...     finally:
+...         print("Don't forget to clean up when 'clos=
+e()' is called.")
+...
+>>> generator <=
+span class=3D"o">=3D echo=
+(1)
+>>> print(next(generator))
+Execution starts when 'next()' is called for the first t=
+ime.
+1
+>>> print(next(generator))
+None
+>>> print(generator.<=
+/span>send(2))
+2
+>>> generator.throw(TypeError, "spam")
+TypeError('spam',)
+>>> generator.close()<=
+/span>
+Don't forget to clean up when 'close()' is called.
+
+
+

For examples using yield from, see PEP 380: Syntax for Delegating to a= + Subgenerator in =E2=80=9CWhat=E2=80=99s New in +Python.=E2=80=9D

+
+
+

6.2.9.3. = +Asynchronous generator functions=C2=B6

+

The presence of a yield expression in a function or method defined using +async def further defines the function as an +asynchr= +onous generator function.

+

When an asynchronous generator function is called, it returns an +asynchronous iterator known as an asynchronous generator object. +That object then controls the execution of the generator function. +An asynchronous generator object is typically used in an +async for statement in a coroutine function analogously to +how a generator object would be used in a for statement.

+

Calling one of the asynchronous generator=E2=80=99s methods returns an +awaitable= + object, and the execution starts when this object +is awaited on. At that time, the execution proceeds to the first yield +expression, where it is suspended again, returning the value of +expression_list to the awaiting coroutine. As with a generator, +suspension means that all local state is retained, including the +current bindings of local variables, the instruction pointer, the internal +evaluation stack, and the state of any exception handling. When the execut= +ion +is resumed by awaiting on the next object returned by the asynchronous +generator=E2=80=99s methods, the function can proceed exactly as if the yie= +ld +expression were just another external call. The value of the yield expressi= +on +after resuming depends on the method which resumed the execution. If +__anext__(= +) is used then the result is None. Otherwise, if +asend() is used, then the result will be the value passed in to +that method.

+

In an asynchronous generator function, yield expressions are allowed any= +where +in a try construct. = +However, if an asynchronous generator is not +resumed before it is finalized (by reaching a zero reference count or by +being garbage collected), then a yield expression within a try +construct could result in a failure to execute pending finally +clauses. In this case, it is the responsibility of the event loop or +scheduler running the asynchronous generator to call the asynchronous +generator-iterator=E2=80=99s aclose() method and run the resulting +coroutine object, thus allowing any pending finally clauses +to execute.

+

To take care of finalization, an event loop should define +a finalizer function which takes an asynchronous generator-iterato= +r +and presumably calls <= +code class=3D"xref py py-meth docutils literal notranslate">aclose() and executes the coroutine. +This finalizer may be registered by calling sys.set_asyncgen_hooks()<= +/span>. +When first iterated over, an asynchronous generator-iterator will store the +registered finalizer to be called upon finalization. For a referen= +ce example +of a finalizer method see the implementation of +asyncio.Lo= +op.shutdown_asyncgens in = +Lib/asyncio/base_events.py.

+

The expression yield from &= +lt;expr> is a syntax error when used in an +asynchronous generator function.

+
+
+

6.2.9.4. Asynchronous genera= +tor-iterator methods=C2=B6

+

This subsection describes the methods of an asynchronous generator itera= +tor, +which are used to control the execution of a generator function.

+
+
+coroutine agen.__anext__()=C2=B6
+

Returns an awaitable which when run starts to execute the asynchrono= +us +generator or resumes it at the last executed yield expression. When an +asynchronous generator function is resumed with an __anext__() +method, the current yield expression always evaluates to None in +the returned awaitable, which when run will continue to the next yield +expression. The value of the expression_list of the yield +expression is the value of the StopIteration exception raised by +the completing coroutine. If the asynchronous generator exits without +yielding another value, the awaitable instead raises a +StopAs= +yncIteration exception, signalling that the asynchronous +iteration has completed.

+

This method is normally called implicitly by a async for lo= +op.

+
+ +
+
+coroutine agen.asend(value)=C2=B6
+

Returns an awaitable which when run resumes the execution of the +asynchronous generator. As with the send() method for a +generator, this =E2=80=9Csends=E2=80=9D a value into the asynchronous gener= +ator function, +and the value argument becomes the result of the current yield exp= +ression. +The awaitable returned by the asend() method will return the next +value yielded by the generator as the value of the raised +StopIteration, or raises StopAsyncIteration if the +asynchronous generator exits without yielding another value. When +asend() is called to start the asynchronous +generator, it must be called with None as the argument, +because there is no yield expression that could receive the value.

+
+ +
+
+coroutine agen.athrow(type[, value= +[, traceback]<= +/span>])=C2=B6
+

Returns an awaitable that raises an exception of type type at th= +e point +where the asynchronous generator was paused, and returns the next value +yielded by the generator function as the value of the raised +StopIteration exception. If the asynchronous generator exits +without yielding another value, a StopAsyncIteration exception= + is +raised by the awaitable. +If the generator function does not catch the passed-in exception, or +raises a different exception, then when the awaitable is run that exception +propagates to the caller of the awaitable.

+
+ +
+
+coroutine agen.aclose()=C2=B6
+

Returns an awaitable that when run will throw a GeneratorExit into +the asynchronous generator function at the point where it was paused. +If the asynchronous generator function then exits gracefully, is already +closed, or raises GeneratorExit (by not catching the exception), +then the returned awaitable will raise a StopIteration exception. +Any further awaitables returned by subsequent calls to the asynchronous +generator will raise a StopAsyncIteration exception. If the +asynchronous generator yields a value, a RuntimeError is raised +by the awaitable. If the asynchronous generator raises any other exception= +, +it is propagated to the caller of the awaitable. If the asynchronous +generator has already exited due to an exception or normal exit, then +further calls to aclose() will return an awaitable that does nothing.

+
+ +
+
+
+
+

6.3. Prim= +aries=C2=B6 +

Primaries represent the most tightly bound operations of= + the language. Their +syntax is:

+
primary ::=3D  atom | attributeref | subscription | slicing | cal=
+l
+
+
+

6.3.1. At= +tribute references=C2=B6

+

An attribute reference is a primary followed by a period= + and a name:

+
attributeref ::=3D =
+ primary "." identifier
+
+

The primary must evaluate to an object of a type that su= +pports attribute +references, which most objects do. This object is then asked to produce th= +e +attribute whose name is the identifier. This production can be customized = +by +overriding the __getattr__() method. If this attribute is no= +t available, +the exception = +AttributeError is raised. Otherwise, the type and value = +of +the object produced is determined by the object. Multiple evaluations of t= +he +same attribute reference may yield different objects.

+
+
+

6.3.2. Su= +bscriptions= +=C2=B6

+

A subscrip= +tion selects an item of a sequence (string, tuple or list) or mapping +(dictionary) object:

+
subscription ::=3D =
+ primary "[" expression_list "]"
+
+

The primary must evaluate to an object that supports subscription (lists= + or +dictionaries for example). User-defined objects can support subscription b= +y +defining a __getitem__() method.

+

For built-in objects, there are two types of objects that support subscr= +iption:

+

If the primary is a mapping, the expression list must evaluate to an obj= +ect +whose value is one of the keys of the mapping, and the subscription selects= + the +value in the mapping that corresponds to that key. (The expression list is= + a +tuple except if it has exactly one item.)

+

If the primary is a sequence, the expression list must evaluate to an in= +teger +or a slice (as discussed in the following section).

+

The formal syntax makes no special provision for negative indices in +sequences; however, built-in sequences all provide a __getitem__() +method that interprets negative indices by adding the length of the sequenc= +e +to the index (so that x[-1] selects the last item of x). The +resulting value must be a nonnegative integer less than the number of items= + in +the sequence, and the subscription selects the item whose index is that val= +ue +(counting from zero). Since the support for negative indices and slicing +occurs in the object=E2=80=99s __getitem__() method, subclass= +es overriding +this method will need to explicitly add that support.

+

A string=E2=80=99s items are characters. A character is= + not a separate data type but a +string of exactly one character.

+
+
+

6.3.3. Sl= +icings=C2=B6 +

A slicing = +selects a range of items in a sequence object (e.g., a string, tuple +or list). Slicings may be used as expressions or as targets in assignment = +or +del statements. The s= +yntax for a slicing:

+
slicing      ::=3D  primary "[" slice_list "]"
+slice_list   ::=3D  slice_item ("," slice_item)* [","]
+slice_item   ::=3D  expression | proper_slice
+proper_slice ::=3D  [lower_bound] ":" [upper_bound] [ ":" =
+[stride] ]
+lower_bound  ::=3D  expression
+upper_bound  ::=3D  expression
+stride       ::=3D  expression
+
+

There is ambiguity in the formal syntax here: anything that looks like a= +n +expression list also looks like a slice list, so any subscription can be +interpreted as a slicing. Rather than further complicating the syntax, thi= +s is +disambiguated by defining that in this case the interpretation as a subscri= +ption +takes priority over the interpretation as a slicing (this is the case if th= +e +slice list contains no proper slice).

+

The semantics for a slicing are as follows. The primary= + is indexed (using the +same __getitem__() method as +normal subscription) with a key that is constructed from the slice list, as +follows. If the slice list contains at least one comma, the key is a tuple +containing the conversion of the slice items; otherwise, the conversion of = +the +lone slice item is the key. The conversion of a slice item that is an +expression is that expression. The conversion of a proper slice is a slice +object (see section The = +standard type hierarchy) whose start, +stop and step attributes are the va= +lues of the +expressions given as lower bound, upper bound and stride, respectively, +substituting None for missing expressions.

+

+
+

6.3.4. Calls=C2=B6

+

A call calls a callable object (e.g., a function) with a possibly empty +series of arguments:

+
call                 ::=3D =
+ primary "(" [argument_list [","] | =
+comprehension] =
+")"
+argument_list        ::=
+=3D  positional_arguments<=
+/span> ["," sta=
+rred_and_keywords]
+                            ["," keywords_arguments]
+                          | starred_and_keywords ["," keywords_arguments]
+                          | =
+keywords_arguments
+positional_arguments ::=3D  ["*"] expression ("," ["*"] expression)*
+starred_and_keywords ::=3D  ("*" expression | keyword_item)
+                          ("," "*" e=
+xpression | "," =
+keyword_item)*
+keywords_arguments   ::=3D  (keyword_item | "**" expression)
+                          ("," key=
+word_item | "," "**" expression)*
+keyword_item         ::=
+=3D  identifier "=3D" expression
+
+

An optional trailing comma may be present after the positional and keywo= +rd arguments +but does not affect the semantics.

+

The primary must evaluate to a callable object (user-def= +ined functions, built-in +functions, methods of built-in objects, class objects, methods of class +instances, and all objects having a __call__() method are callable= +). All +argument expressions are evaluated before the call is attempted. Please re= +fer +to section Funct= +ion definitions for the syntax of formal parameter lists.

+

If keyword arguments are present, they are first converted to positional +arguments, as follows. First, a list of unfilled slots is created for the +formal parameters. If there are N positional arguments, they are placed in= + the +first N slots. Next, for each keyword argument, the identifier is used to +determine the corresponding slot (if the identifier is the same as the firs= +t +formal parameter name, the first slot is used, and so on). If the slot is +already filled, a TypeEr= +ror exception is raised. Otherwise, the value of +the argument is placed in the slot, filling it (even if the expression is +None, it fills the slot). When all arguments have been processed, the = +slots +that are still unfilled are filled with the corresponding default value fro= +m the +function definition. (Default values are calculated, once, when the functi= +on is +defined; thus, a mutable object such as a list or dictionary used as defaul= +t +value will be shared by all calls that don=E2=80=99t specify an argument va= +lue for the +corresponding slot; this should usually be avoided.) If there are any unfi= +lled +slots for which no default value is specified, a TypeError exception is +raised. Otherwise, the list of filled slots is used as the argument list f= +or +the call.

+
+

CPython implementation detail: An implementation may pr= +ovide built-in functions whose positional parameters +do not have names, even if they are =E2=80=98named=E2=80=99 for the purpose= + of documentation, +and which therefore cannot be supplied by keyword. In CPython, this is the +case for functions implemented in C that use PyArg_ParseTuple() to +parse their arguments.

+
+

If there are more positional arguments than there are formal parameter s= +lots, a +TypeError<= +/a> exception is raised, unless a formal parameter using the syntax +*identifie= +r is present; in this case, that formal parameter receives a = +tuple +containing the excess positional arguments (or an empty tuple if there were= + no +excess positional arguments).

+

If any keyword argument does not correspond to a formal parameter name, = +a +TypeError<= +/a> exception is raised, unless a formal parameter using the syntax +**identifi= +er is present; in this case, that formal parameter receives a +dictionary containing the excess keyword arguments (using the keywords as k= +eys +and the argument values as corresponding values), or a (new) empty dictiona= +ry if +there were no excess keyword arguments.

+

If the syntax *expression appears in the function ca= +ll, expres= +sion must +evaluate to an iterab= +le. Elements from these iterables are +treated as if they were additional positional arguments. For the call +f(x1, x2, *y, x3, x4), if y e= +valuates to a sequence y1, =E2=80=A6, yM, +this is equivalent to a call with M+4 positional arguments x1, x2, +y1, =E2=80=A6, yM, x3, x4.

+

A consequence of this is that although the *expression syntax may ap= +pear +after explicit keyword arguments, it is processed before = +the +keyword arguments (and any **expression arguments =E2=80=93 see below).= + So:

+
= +
>>&= +gt;
>>> def f(<=
+span class=3D"n">a, b):
+...     print(a, b)
+...
+>>> f(b=3D1, *=
+(2,))<=
+/span>
+2 1
+>>> f(a=3D1, *=
+(2,))<=
+/span>
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+TypeError: f() got=
+ multiple values for keyword argument 'a'
+>>> f(1, *(2<=
+span class=3D"p">,))
+1 2
+
+
+

It is unusual for both keyword arguments and the *expression syntax = +to be +used in the same call, so in practice this confusion does not arise.

+

If the syntax **expression appears in the function c= +all, expre= +ssion must +evaluate to a mapping<= +/span>, the contents of which are treated as +additional keyword arguments. If a keyword is already present +(as an explicit keyword argument, or from another unpacking), +a TypeError exception is raised.

+

Formal parameters using the syntax *identifier or **identifier c= +annot be +used as positional argument slots or as keyword argument names.

+
+

Changed in version 3.5: F= +unction calls accept any number of * and ** unpackings, +positional arguments may follow iterable unpackings (*), +and keyword arguments may follow dictionary unpackings (**). +Originally proposed by PEP 448.

+
+

A call always returns some value, possibly None, unless it raises an +exception. How this value is computed depends on the type of the callable +object.

+

If it is=E2=80=94

+
+
a user-defined function:

The code block for = +the function is executed, passing it the argument list. The +first thing the code block will do is bind the formal parameters to the +arguments; this is described in section Function definitions. When the code blo= +ck +executes a return s= +tatement, this specifies the return value of the +function call.

+
+
a built-in function or method:

The result is= + up to the interpreter; see Built-in Functions for the +descriptions of built-in functions and methods.

+
+
a class object:

A new instance of that class= + is returned.

+
+
a class instance method:

The corresponding u= +ser-defined function is called, with an argument list that is +one longer than the argument list of the call: the instance becomes the fir= +st +argument.

+
+
a class instance:

The class must define a __call__() method; the effect is then the same as +if that method was called.

+
+
+
+

+
+

6.4. Await expression=C2=B6

+

Suspend the execution of coroutine on an awaitable object. +Can only be used inside a coroutine function.

+
await_expr ::=3D  "aw=
+ait" primary
+
+
+

New in version 3.5.

+
+
+
+

6.5. Th= +e power operator=C2=B6

+

The power operator binds more tightly than unary operato= +rs on its left; it binds +less tightly than unary operators on its right. The syntax is:

+
power ::=3D  (await_expr | <=
+span class=3D"pre">primary) ["**" u_expr]
+
+

Thus, in an unparenthesized sequence of power and unary operators, the o= +perators +are evaluated from right to left (this does not constrain the evaluation or= +der +for the operands): -1**2 results in -1.

+

The power operator has the same semantics as the built-in pow() function, +when called with two arguments: it yields its left argument raised to the p= +ower +of its right argument. The numeric arguments are first converted to a comm= +on +type, and the result is of that type.

+

For int operands, the result has the same type as the operands unless th= +e second +argument is negative; in that case, all arguments are converted to float an= +d a +float result is delivered. For example, 10**2 returns 100, but +10**-2 returns 0.01.

+

Raising 0.0 to a negative power results in a ZeroDivisionError= +. +Raising a negative number to a fractional power results in a complex +number. (In earlier versions it raised a ValueError.)

+
+
+

6.6. Un= +ary arithmetic and bitwise operations=C2=B6

+

All unary arithmetic and bitwise operations have the sam= +e priority:

+
u_expr ::=3D  power | "-" u_expr | "+" u_expr | "~" =
+u_exp=
+r
+
+

The unary <= +span class=3D"pre">- (minus) operator yields the negation of = +its numeric argument.

+

The unary <= +span class=3D"pre">+ (plus) operator yields its numeric argum= +ent unchanged.

+

The unary <= +span class=3D"pre">~ (invert) operator yields the bitwise inv= +ersion of its integer +argument. The bitwise inversion of x is defined as -(x+1). It onl= +y +applies to integral numbers.

+

In all three cases, if the argument does not have the pr= +oper type, a +TypeError<= +/a> exception is raised.

+
+
+

6.7. B= +inary arithmetic operations=C2=B6

+

The binary arithmetic operations have the conventional p= +riority levels. Note +that some of these operations also apply to certain non-numeric types. Apa= +rt +from the power operator, there are only two levels, one for multiplicative +operators and one for additive operators:

+
m_expr ::=3D  u_expr | m_expr "*" =
+u_expr | m_expr=
+ "@" m_expr=
+ |
+            m_expr "//=
+" u_expr | m_expr "/" u_expr |
+            m_expr "%"=
+ u_expr
+a_expr ::=3D  <=
+span class=3D"pre">m_expr | a_expr "+" =
+m_exp=
+r | a_expr "-" m_expr
+
+

The * (multiplication) operator yields the product o= +f its arguments. The +arguments must either both be numbers, or one argument must be an integer a= +nd +the other must be a sequence. In the former case, the numbers are converted= + to a +common type and then multiplied together. In the latter case, sequence +repetition is performed; a negative repetition factor yields an empty seque= +nce.

+

The @ (at) operator is intended to be used for matri= +x multiplication. No +builtin Python types implement this operator.

+
+

New in version 3.5.

+
+

The / (division) and // (floor division) operato= +rs yield the quotient of +their arguments. The numeric arguments are first converted to a common typ= +e. +Division of integers yields a float, while floor division of integers resul= +ts in an +integer; the result is that of mathematical division with the =E2=80=98floo= +r=E2=80=99 function +applied to the result. Division by zero raises the ZeroDivisionError= + +exception.

+

The % (modulo) operator yields the remainder from th= +e division of the first +argument by the second. The numeric arguments are first converted to a com= +mon +type. A zero right argument raises the ZeroDivisionError excepti= +on. The +arguments may be floating point numbers, e.g., 3.14%0.7 equals 0.34 +(since 3.1= +4 equals 4*0.7 + = +0.34.) The modulo operator always yields a +result with the same sign as its second operand (or zero); the absolute val= +ue of +the result is strictly smaller than the absolute value of the second operan= +d +1.

+

The floor division and modulo operators are connected by the following +identity: = +x =3D=3D (x//y)*y + (x%y). = +Floor division and modulo are also +connected with the built-in function divmod(): divmod(x, y) <= +span class=3D"pre">=3D=3D (x//y, +x%y). 2.

+

In addition to performing the modulo operation on numbers, the % ope= +rator is +also overloaded by string objects to perform old-style string formatting (a= +lso +known as interpolation). The syntax for string formatting is described in = +the +Python Library Reference, section printf-style String Formatting.

+

The floor division operator, the modulo operator, and the divmod() +function are not defined for complex numbers. Instead, convert to a floati= +ng +point number using the abs()<= +/code> function if appropriate.

+

The + (addition) operator yields the sum of its argu= +ments. The arguments +must either both be numbers or both be sequences of the same type. In the +former case, the numbers are converted to a common type and then added toge= +ther. +In the latter case, the sequences are concatenated.

+

The - (subtraction) operator yields the difference o= +f its arguments. The +numeric arguments are first converted to a common type.

+
+
+

6.8. Shifting operations=C2=B6

+

The shifting operations have lower priority than the ari= +thmetic operations:

+
shift_expr ::=3D  a_expr | shift_expr ("<<" | ">>=
+") a_expr
+
+

These operators accept integers as arguments. They shift the first argu= +ment to +the left or right by the number of bits given by the second argument.

+

A right shift by n bits is defined as floor div= +ision by p= +ow(2,n). A left +shift by n bits is defined as multiplication with pow(2,n). +

+
+

6.9. = +Binary bitwise operations=C2=B6

+

Each of the three bitwise operations has a different pri= +ority level:

+
and_expr ::=3D  shift_expr | and_expr "&" shift_expr
+xor_expr ::=3D  and_expr | xor_expr "^" and_expr
+or_expr  ::=3D  xor_expr | or_expr "|" xor_expr
+
+

The & operator yields the bitwise AND of its arg= +uments, which must be +integers.

+

The ^ operator yields the bitwise XOR (exclusive OR)= + of its arguments, which +must be integers.

+

The | operator yields the bitwise (inclusive) OR of = +its arguments, which +must be integers.

+
+
+

6.10. Co= +mparisons=C2=B6= +

+

Unlike C, all comparison operations in Python have the s= +ame priority, which is +lower than that of any arithmetic, shifting or bitwise operation. Also unl= +ike +C, expressions like a < b < c ha= +ve the interpretation that is conventional +in mathematics:

+
comparison    ::=3D  =
+or_expr (comp_operator or_expr)*
+comp_operator ::=3D  "&=
+lt;" | ">" | "=3D=3D" | ">=3D" | "<=3D" | "!=3D"
+                   | "is" ["not"] | ["not"] "in"
+
+

Comparisons yield boolean values: True or False.

+

Comparisons can be chained arbitrarily, e.g., x < y <= +=3D z is equivalent to +x <= +span class=3D"pre">< y and y <=3D z, except that y is evaluated on= +ly once (but in both +cases z is not evaluated at all when x < y is found to be false).

+

Formally, if a, b, c, =E2=80=A6, y, = +z are expressions and op1, op2, =E2=80=A6, +opN are comparison operators, then a op1 <= +span class=3D"pre">b op2 c ... y opN z is equival= +ent +to a op1 b and b op2 c and ... y opN z, except that each expression is +evaluated at most once.

+

Note that a op1 b op2 c doesn=E2=80= +=99t imply any kind of comparison between a and +c, so that, e.g., x < y > z is perfectly legal (though perhaps not +pretty).

+
+

6.10.1. Value comparisons=C2=B6

+

The operators <, <= +span class=3D"pre">>, =3D=3D, >=3D, <=3D= +, and !=3D= + compare the +values of two objects. The objects do not need to have the same type.

+

Chapter Objects, va= +lues and types states that objects have a value (in addition to = +type +and identity). The value of an object is a rather abstract notion in Pytho= +n: +For example, there is no canonical access method for an object=E2=80=99s va= +lue. Also, +there is no requirement that the value of an object should be constructed i= +n a +particular way, e.g. comprised of all its data attributes. Comparison opera= +tors +implement a particular notion of what the value of an object is. One can t= +hink +of them as defining the value of an object indirectly, by means of their +comparison implementation.

+

Because all types are (direct or indirect) subtypes of object, they +inherit the default comparison behavior from object. Types can +customize their comparison behavior by implementing +rich comparison methods like __lt__(), described= + in +Basic customizat= +ion.

+

The default behavior for equality comparison (=3D=3D and !=3D) i= +s based on +the identity of the objects. Hence, equality comparison of instances with = +the +same identity results in equality, and equality comparison of instances wit= +h +different identities results in inequality. A motivation for this default +behavior is the desire that all objects should be reflexive (i.e. x is y +implies x<= +/span> =3D=3D y).

+

A default order comparison (<, >, <=3D, and >=3D) is not provided; +an attempt raises TypeEr= +ror. A motivation for this default behavior is +the lack of a similar invariant as for equality.

+

The behavior of the default equality comparison, that instances with dif= +ferent +identities are always unequal, may be in contrast to what types will need t= +hat +have a sensible definition of object value and value-based equality. Such +types will need to customize their comparison behavior, and in fact, a numb= +er +of built-in types have done that.

+

The following list describes the comparison behavior of the most importa= +nt +built-in types.

+
+

User-defined classes that customize their comparison behavior should fol= +low +some consistency rules, if possible:

+
    +
  • Equality comparison should be reflexive. +In other words, identical objects should compare equal:

    +
    +

    x<= +/span> is y im= +plies x =3D=3D y<= +/p> +

    +
  • +
  • Comparison should be symmetric. +In other words, the following expressions should have the same result:

    +
    +

    x<= +/span> =3D=3D y and y =3D=3D x<= +/p> +

    x !=3D y and <= +code class=3D"docutils literal notranslate">y !=3D x

    +

    x < y and <= +code class=3D"docutils literal notranslate">y > x

    +

    x <=3D y an= +d y= + >=3D x

    +
    +
  • +
  • Comparison should be transitive. +The following (non-exhaustive) examples illustrate that:

    +
    +

    x<= +/span> > y and y &g= +t; z implies x &g= +t; z

    +

    x < y and y <= +=3D z implies x &= +lt; z

    +
    +
  • +
  • Inverse comparison should result in the boolean negation. +In other words, the following expressions should have the same result:

    +
    +

    x<= +/span> =3D=3D y and not<= +/span> x !=3D y

    +

    x < y and <= +code class=3D"docutils literal notranslate">not = +x >=3D y (for total ordering)

    +

    x > y and <= +code class=3D"docutils literal notranslate">not = +x <=3D y (for total ordering)

    +
    +

    The last two expressions apply to totally ordered collections (e.g. to +sequences, but not to sets or mappings). See also the += +total_ordering() decorator.

    +
  • +
  • The hash() result should be consistent with equality. +Objects that are equal should either have the same hash value, +or be marked as unhashable.

  • +
+

Python does not enforce these consistency rules. In fact, the not-a-numb= +er +values are an example for not following these rules.

+
+
+

6.10.2. Member= +ship test operations=C2=B6

+

The operators in and = +not in test for membership. x in +s evaluates to True if x is = +a member of s, and False otherwise. +x <= +span class=3D"pre">not in s returns the negation of x in <= +span class=3D"pre">s. All built-in sequences and +set types support this as well as dictionary, for which in tests +whether the dictionary has a given key. For container types such as list, t= +uple, +set, frozenset, dict, or collections.deque, the expression x in y is equivalent +to any(x is e or x =3D=3D= + e for e in y)<= +/span>.

+

For the string and bytes types, x in y is True if and only if x is a +substring of y. An equivalent test is y.find(x) = +!=3D -1. Empty strings are +always considered to be a substring of any other string, so "" in "abc" will +return Tru= +e.

+

For user-defined classes which define the __contains__()= + method, x= + in +y returns True if y.__contains__(x) returns a true value, and +False otherwise.

+

For user-defined classes which do not define __contains__()<= +/a> but do define +__iter__()= +, x in y is True if some value z, for which the +expression x is z or x = +=3D=3D z is true, is produced whil= +e iterating over y. +If an exception is raised during the iteration, it is as if in raised +that exception.

+

Lastly, the old-style iteration protocol is tried: if a class defines +__ge= +titem__(), <= +span class=3D"pre">x in y is True if and only if there is a non-negative +integer index i such that x is y[i] or x =3D=3D y[i], and no lower integer index +raises the IndexError<= +/span> exception. (If any other exception is raised, it is as +if in raised that except= +ion).

+

The operator not in is defined to have the invers= +e truth value of +in.

+
+
+

6.10.3. Identit= +y comparisons=C2=B6<= +/a>

+

The operators is and = +is not test for an object=E2=80=99s identity: x +is y is true i= +f and only if x and y are the same object. An Object=E2= +=80=99s identity +is determined using the id() function. x is not y yields the inverse +truth value. 4

+
+
+
+

6.11. Bo= +olean operations=C2=B6

+
or_test =
+ ::=3D  and_test | <=
+a class=3D"reference internal" href=3D"https://docs.python.org/3/reference/=
+expressions.html#grammar-token-or-test">or_test "or" and_test
+and_test ::=3D  not_test | and_test "and" not_test
+not_test ::=3D  comparison | "not" not_test
+
+

In the context of Boolean operations, and also when expressions are used= + by +control flow statements, the following values are interpreted as false: +False, None, numeric zero of all types, and empty strings and conta= +iners +(including strings, tuples, lists, dictionaries, sets and frozensets). All +other values are interpreted as true. User-defined objects can customize t= +heir +truth value by providing a __bool__() method.

+

The operator not yields True if its argument is false, False +otherwise.

+

The expression x and y first evaluates x; if x is false= +, its value is +returned; otherwise, y is evaluated and the resulting value is ret= +urned.

+

The expression x or y first evaluates x; if x is true,= + its value is +returned; otherwise, y is evaluated and the resulting value is ret= +urned.

+

Note that neither and nor or restrict the va= +lue and type +they return to False and <= +span class=3D"pre">True, but rather return the last evaluated +argument. This is sometimes useful, e.g., if s is a string that should= + be +replaced by a default value if it is empty, the expression s or 'foo' yields +the desired value. Because not has to create a new value, it +returns a boolean value regardless of the type of its argument +(for example, not 'foo' produces False r= +ather than ''.)

+
+
+

6.12. Conditional expressions=C2=B6

+
co=
+nditional_expression ::=3D  =
+or_test ["if" or_test=
+ "else" expression=
+]
+expression             ::=
+=3D  conditional_express=
+ion | lambda_expr=
+
+expression_nocond      ::=3D  or_test | =
+lambda_expr_nocond
+
+

Conditional expressions (sometimes called a =E2=80=9Cternary operator=E2= +=80=9D) have the lowest +priority of all Python operations.

+

The expression x if C else y first= + evaluates the condition, C rather than x. +If C is true, x is evaluated and its value is returned; o= +therwise, y is +evaluated and its value is returned.

+

See PEP= + 308 for more details about conditional expressions.

+
+
+

6.13. Lambdas=C2=B6

+
lambda_expr  =
+      ::=3D  "lambda" [parameter_list] ":" expression
+lambda_expr_nocond=
+ ::=3D  "lambda" [parameter_l=
+ist] ":" ex=
+pression_nocond
+
+

Lambda expressions (sometimes called lambda forms) are used to create an= +onymous +functions. The expression lambda parameters: expression yields a function +object. The unnamed object behaves like a function object defined with: +

def <lambda>(parameters):
+    return expression
+
+
+

See section F= +unction definitions for the syntax of parameter lists. Note tha= +t +functions created with lambda expressions cannot contain statements or +annotations.

+
+
+

6.14. Expression lists=C2=B6

+
expressio=
+n_list    ::=3D  expression=
+ ("," expression)* [","]
+starred_list       ::=3D=
+  starred_item (=
+"," starred_item=
+)* [","]
+starred_expression=
+ ::=3D  expression=
+ | (starred_item=
+ ",")* [starred_item=
+]
+starred_item       ::=3D=
+  expression | "*"=
+ or_expr
+
+

Except when part of a list or set display, an expression= + list +containing at least one comma yields a tuple. The length of +the tuple is the number of expressions in the list. The expressions are +evaluated from left to right.

+

An asterisk * denotes iterable unp= +acking. Its operand must be +an iterable. The iterable is expanded into a sequence of items, +which are included in the new tuple, list, or set, at the site of +the unpacking.

+ +

The trailing comma is required only to create a single t= +uple (a.k.a. a +singleton); it is optional in all other cases. A single expressio= +n without a +trailing comma doesn=E2=80=99t create a tuple, but rather yields the value = +of that +expression. (To create an empty tuple, use an empty pair of parentheses: +()<= +/code>.)

+
+
+

6.15. Evaluation order=C2=B6

+

Python evaluates expressions from left to right. Notice= + that while evaluating +an assignment, the right-hand side is evaluated before the left-hand side.<= +/p> +

In the following lines, expressions will be evaluated in the arithmetic = +order of +their suffixes:

+
= +
expr1, expr2,<=
+/span> expr3, expr4
+(expr1,=
+ expr2, expr3, expr4)
+{expr1:=
+ expr2, expr3: expr4}
+expr1 + expr2 * (expr3 - expr4)
+expr1(e=
+xpr2, expr3, *expr4, **ex=
+pr5)
+expr3, =
+expr4 =3D expr1, expr2
+
+
+
+
+

6.1= +6. Operator precedence=C2=B6

+

The following table summarizes the operator precedence i= +n Python, from lowest +precedence (least binding) to highest precedence (most binding). Operators= + in +the same box have the same precedence. Unless the syntax is explicitly giv= +en, +operators are binary. Operators in the same box group left to right (excep= +t for +exponentiation, which groups from right to left).

+

Note that comparisons, membership tests, and identity tests, all have th= +e same +precedence and have a left-to-right chaining feature as described in the +Comparisons section.

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

Operator

Description

= +:=3D

Assignment expression

lambda

Lambda expression

if =E2=80=93 else

Conditional expression

or

Boolean OR

and<= +/code>

Boolean AND

not = +x

Boolean NOT

in, not in, +is, is not, <, +<=3D, >, >=3D, !=3D, =3D=3D

Comparisons, including membership +tests and identity tests

<= +span class=3D"pre">|

Bitwise OR

= +^

Bitwise XOR

<= +span class=3D"pre">&

Bitwise AND

= +<<, >>

Shifts

<= +span class=3D"pre">+, -

Addition and subtraction

= +*, @, /, //, %

Multiplication, matrix +multiplication, division, floor +division, remainder 5

<= +/td> +

<= +span class=3D"pre">+x, -x, ~x

Positive, negative, bitwise NOT

= +**

Exponentiation 6

await x

Await expression

= +x[index], x[index:index], +x(argument= +s...), x.attribute

Subscription, slicing, +call, attribute reference

<= +span class=3D"pre">(expressions...),

+

[expres= +sions...], +{key: value...}, +{expressio= +ns...}

+

Binding or parenthesized +expression, +list display, +dictionary display, +set display

+

Footnotes

+
+
1
+

While abs(x%y) < abs(= +y) is true mathematically, for floats it may not be +true numerically due to roundoff. For example, and assuming a platform on = +which +a Python float is an IEEE 754 double-precision number, in order that -1e-100 <= +span class=3D"pre">% +1e100 have the same sign as 1e100, = +the computed result is -1e-100 + +1e100, which is numerically exactly equal= + to 1e100<= +/span>. The function +math.fmod()= + returns a result whose sign matches the sign of the +first argument instead, and so returns -1e-100 in this case. Which appr= +oach +is more appropriate depends on the application.

+
+
2<= +/a>
+

If x is very close to an exact integer multiple of y, it=E2=80=99s p= +ossible for +x//y to be one larger than (x-x%y)//y due to rounding. In such +cases, Python returns the latter result, in order to preserve that +divmod(x,y= +)[0] * y + x %<= +/span> y be very close to x.

+
+
3<= +/a>
+

The Unicode standard distinguishes between code po= +ints +(e.g. U+0041) and abstract characters (e.g. =E2=80= +=9CLATIN CAPITAL LETTER A=E2=80=9D). +While most abstract characters in Unicode are only represented using one +code point, there is a number of abstract characters that can in addition b= +e +represented using a sequence of more than one code point. For example, the +abstract character =E2=80=9CLATIN CAPITAL LETTER C WITH CEDILLA=E2=80=9D ca= +n be represented +as a single precomposed character at code position U= ++00C7, or as a +sequence of a base character at code position U+0043= + (LATIN CAPITAL +LETTER C), followed by a combining character at code= + position U+0327 +(COMBINING CEDILLA).

+

The comparison operators on strings compare at the level of Unicode code +points. This may be counter-intuitive to humans. For example, +"\u00C7" =3D=3D "\u0043\u0327"<= +/span> is False, even though both strings +represent the same abstract character =E2=80=9CLATIN CAPITAL LETTER C WITH = +CEDILLA=E2=80=9D.

+

To compare strings at the level of abstract characters (that is, in a wa= +y +intuitive to humans), use unicodedata.normalize().

+
+
4<= +/a>
+

Due to automatic garbage-collection, free lists, and the dynamic nat= +ure of +descriptors, you may notice seemingly unusual behaviour in certain uses of +the is operator, like th= +ose involving comparisons between instance +methods, or constants. Check their documentation for more info.

+
+
5<= +/a>
+

The % operator is also used for string formatting; the same +precedence applies.

+
+
6<= +/a>
+

The power operator ** binds less tightly than an arithmetic or +bitwise unary operator on its right, that is, 2**-1 is 0.5.

+
+
+
+
+ + +
+
+
+ +
+
=20 +
+

Navigation

+
    +
  • + index
  • +
  • + modules |
  • +
  • + next |
  • +
  • + previous |
  • + +
  • 3D""
  • +
  • Python =C2=BB
  • + =20 + +
  • + + + + =20 + =20 + +
+ =20 + | + + + + =20 + + + =20 + +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: cid:css-df77f20e-c09b-425c-a602-7f2609ac8dd9@mhtml.blink + +@charset "utf-8"; + +@media only screen { + table.full-width-table { width: 100%; } +} +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/pydoctheme.css + +@charset "utf-8"; + +@import url("default.css"); + +body { background-color: white; margin-left: 1em; margin-right: 1em; } + +div.related { margin-bottom: 1.2em; padding: 0.5em 0px; border-top: 1px sol= +id rgb(204, 204, 204); margin-top: 0.5em; } + +div.related a:hover { color: rgb(0, 149, 196); } + +div.related:first-child { border-top: 0px; border-bottom: 1px solid rgb(204= +, 204, 204); } + +.inline-search { display: inline; } + +form.inline-search input { display: inline; } + +form.inline-search input[type=3D"submit"] { width: 40px; } + +div.sphinxsidebar { background-color: rgb(238, 238, 238); border-radius: 5p= +x; line-height: 130%; font-size: smaller; } + +div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-top: 1.5em; } + +div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.2em; } + +div.sphinxsidebarwrapper > ul > li > ul > li { margin-bottom: 0.4em; } + +div.sphinxsidebar a:hover { color: rgb(0, 149, 196); } + +form.inline-search input, div.sphinxsidebar input { font-family: "Lucida Gr= +ande", Arial, sans-serif; border: 1px solid rgb(153, 153, 153); font-size: = +smaller; border-radius: 3px; } + +div.sphinxsidebar input[type=3D"text"] { max-width: 150px; } + +div.body { padding: 0px 0px 0px 1.2em; } + +div.body p { line-height: 140%; } + +div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h= +6 { margin: 0px; border: 0px; padding: 0.3em 0px; } + +div.body hr { border: 0px; background-color: rgb(204, 204, 204); height: 1p= +x; } + +div.body pre { border-radius: 3px; border: 1px solid rgb(170, 204, 153); } + +div.body div.admonition, div.body div.impl-detail { border-radius: 3px; } + +div.body div.impl-detail > p { margin: 0px; } + +div.body div.seealso { border: 1px solid rgb(221, 221, 102); } + +div.body a { color: rgb(0, 114, 170); } + +div.body a:visited { color: rgb(99, 99, 187); } + +div.body a:hover { color: rgb(0, 176, 228); } + +tt, code, pre { font-family: monospace, sans-serif; font-size: 96.5%; } + +div.body tt, div.body code { border-radius: 3px; } + +div.body tt.descname, div.body code.descname { font-size: 120%; } + +div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { font= +-weight: normal; } + +.deprecated { border-radius: 3px; } + +table.docutils { border: 1px solid rgb(221, 221, 221); min-width: 20%; bord= +er-radius: 3px; margin-top: 10px; margin-bottom: 10px; } + +table.docutils td, table.docutils th { border-radius: 3px; border: 1px soli= +d rgb(221, 221, 221) !important; } + +table p, table li { text-align: left !important; } + +table.docutils th { background-color: rgb(238, 238, 238); padding: 0.3em 0.= +5em; } + +table.docutils td { background-color: white; padding: 0.3em 0.5em; } + +table.footnote, table.footnote td { border: 0px !important; } + +div.footer { line-height: 150%; margin-top: -2em; text-align: right; width:= + auto; margin-right: 10px; } + +div.footer a:hover { color: rgb(0, 149, 196); } + +.refcount { color: rgb(0, 102, 0); } + +.stableabi { color: rgb(34, 34, 153); } + +.highlight { background: none !important; } +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/default.css + +@charset "utf-8"; + +@import url("classic.css"); +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/classic.css + +@charset "utf-8"; + +@import url("basic.css"); + +html { background-color: rgb(255, 255, 255); } + +body { font-family: "Lucida Grande", Arial, sans-serif; font-size: 100%; ba= +ckground-color: white; color: rgb(0, 0, 0); margin: 0px; padding: 0px; } + +div.document { background-color: white; } + +div.documentwrapper { float: left; width: 100%; } + +div.bodywrapper { margin: 0px 0px 0px 230px; } + +div.body { background-color: white; color: rgb(34, 34, 34); padding: 0px 20= +px 30px; } + +div.footer { color: rgb(85, 85, 85); width: 100%; padding: 9px 0px; text-al= +ign: center; font-size: 75%; } + +div.footer a { color: rgb(85, 85, 85); text-decoration: underline; } + +div.related { background-color: white; line-height: 30px; color: rgb(102, 1= +02, 102); } + +div.related a { color: rgb(68, 68, 68); } + +div.sphinxsidebar { } + +div.sphinxsidebar h3 { font-family: "Lucida Grande", Arial, sans-serif; col= +or: rgb(68, 68, 68); font-size: 1.4em; font-weight: normal; margin: 0px; pa= +dding: 0px; } + +div.sphinxsidebar h3 a { color: rgb(68, 68, 68); } + +div.sphinxsidebar h4 { font-family: "Lucida Grande", Arial, sans-serif; col= +or: rgb(68, 68, 68); font-size: 1.3em; font-weight: normal; margin: 5px 0px= + 0px; padding: 0px; } + +div.sphinxsidebar p { color: rgb(68, 68, 68); } + +div.sphinxsidebar p.topless { margin: 5px 10px 10px; } + +div.sphinxsidebar ul { margin: 10px; padding: 0px; color: rgb(68, 68, 68); = +} + +div.sphinxsidebar a { color: rgb(68, 68, 68); } + +div.sphinxsidebar input { border: 1px solid rgb(68, 68, 68); font-family: s= +ans-serif; font-size: 1em; } + +div#sidebarbutton { background-color: rgb(60, 110, 131); } + +a { color: rgb(0, 144, 192); text-decoration: none; } + +a:visited { color: rgb(0, 96, 143); text-decoration: none; } + +a:hover { text-decoration: underline; } + +div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h= +6 { font-family: "Lucida Grande", Arial, sans-serif; background-color: whit= +e; font-weight: normal; color: rgb(26, 26, 26); border-bottom: 1px solid rg= +b(204, 204, 204); margin: 20px -20px 10px; padding: 3px 0px 3px 10px; } + +div.body h1 { margin-top: 0px; font-size: 200%; } + +div.body h2 { font-size: 160%; } + +div.body h3 { font-size: 140%; } + +div.body h4 { font-size: 120%; } + +div.body h5 { font-size: 110%; } + +div.body h6 { font-size: 100%; } + +a.headerlink { color: rgb(170, 170, 170); font-size: 0.8em; padding: 0px 4p= +x; text-decoration: none; } + +a.headerlink:hover { background-color: rgb(170, 170, 170); color: white; } + +div.body p, div.body dd, div.body li, div.body blockquote { text-align: jus= +tify; line-height: 130%; } + +div.admonition p.admonition-title + p { display: inline; } + +div.admonition p { margin-bottom: 5px; } + +div.admonition pre { margin-bottom: 5px; } + +div.admonition ul, div.admonition ol { margin-bottom: 5px; } + +div.note { background-color: rgb(238, 238, 238); border: 1px solid rgb(204,= + 204, 204); } + +div.seealso { background-color: rgb(255, 255, 204); border: 1px solid rgb(2= +55, 255, 102); } + +div.topic { background-color: rgb(238, 238, 238); } + +div.warning { background-color: rgb(255, 228, 228); border: 1px solid rgb(2= +55, 102, 102); } + +p.admonition-title { display: inline; } + +p.admonition-title::after { content: ":"; } + +pre { padding: 5px; background-color: rgb(238, 255, 204); color: rgb(51, 51= +, 51); line-height: 120%; border-top: 1px solid rgb(170, 204, 153); border-= +bottom: 1px solid rgb(170, 204, 153); border-image: initial; border-left: n= +one; border-right: none; } + +code { background-color: rgb(236, 240, 243); padding: 0px 1px; font-size: 0= +.95em; } + +th, dl.field-list > dt { background-color: rgb(238, 221, 238); } + +.warning code { background: rgb(239, 194, 194); } + +.note code { background: rgb(214, 214, 214); } + +.viewcode-back { font-family: "Lucida Grande", Arial, sans-serif; } + +div.viewcode-block:target { background-color: rgb(244, 222, 191); border-to= +p: 1px solid rgb(170, 204, 153); border-bottom: 1px solid rgb(170, 204, 153= +); } + +div.code-block-caption { color: rgb(239, 239, 239); background-color: rgb(2= +8, 78, 99); } +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/basic.css + +@charset "utf-8"; + +div.clearer { clear: both; } + +div.related { width: 100%; font-size: 90%; } + +div.related h3 { display: none; } + +div.related ul { margin: 0px; padding: 0px 0px 0px 10px; list-style: none; = +} + +div.related li { display: inline; } + +div.related li.right { float: right; margin-right: 5px; } + +div.sphinxsidebarwrapper { padding: 10px 5px 0px 10px; } + +div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-siz= +e: 90%; overflow-wrap: break-word; } + +div.sphinxsidebar ul { list-style: none; } + +div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20= +px; list-style: square; } + +div.sphinxsidebar ul ul { margin-top: 0px; margin-bottom: 0px; } + +div.sphinxsidebar form { margin-top: 10px; } + +div.sphinxsidebar input { border: 1px solid rgb(152, 219, 204); font-family= +: sans-serif; font-size: 1em; } + +div.sphinxsidebar #searchbox form.search { overflow: hidden; } + +div.sphinxsidebar #searchbox input[type=3D"text"] { float: left; width: 80%= +; padding: 0.25em; box-sizing: border-box; } + +div.sphinxsidebar #searchbox input[type=3D"submit"] { float: left; width: 2= +0%; border-left: none; padding: 0.25em; box-sizing: border-box; } + +img { border: 0px; max-width: 100%; } + +ul.search { margin: 10px 0px 0px 20px; padding: 0px; } + +ul.search li { padding: 5px 0px 5px 20px; background-image: url("file.png")= +; background-repeat: no-repeat; background-position: 0px 7px; } + +ul.search li a { font-weight: bold; } + +ul.search li div.context { color: rgb(136, 136, 136); margin: 2px 0px 0px 3= +0px; text-align: left; } + +ul.keywordmatches li.goodmatch a { font-weight: bold; } + +table.contentstable { width: 90%; margin-left: auto; margin-right: auto; } + +table.contentstable p.biglink { line-height: 150%; } + +a.biglink { font-size: 1.3em; } + +span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } + +table.indextable { width: 100%; } + +table.indextable td { text-align: left; vertical-align: top; } + +table.indextable ul { margin-top: 0px; margin-bottom: 0px; list-style-type:= + none; } + +table.indextable > tbody > tr > td > ul { padding-left: 0em; } + +table.indextable tr.pcap { height: 10px; } + +table.indextable tr.cap { margin-top: 10px; background-color: rgb(242, 242,= + 242); } + +img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } + +div.modindex-jumpbox { border-top: 1px solid rgb(221, 221, 221); border-bot= +tom: 1px solid rgb(221, 221, 221); margin: 1em 0px; padding: 0.4em; } + +div.genindex-jumpbox { border-top: 1px solid rgb(221, 221, 221); border-bot= +tom: 1px solid rgb(221, 221, 221); margin: 1em 0px; padding: 0.4em; } + +table.modindextable td { padding: 2px; border-collapse: collapse; } + +div.body { min-width: 450px; max-width: 800px; } + +div.body p, div.body dd, div.body li, div.body blockquote { } + +a.headerlink { visibility: hidden; } + +a.brackets::before, span.brackets > a::before { content: "["; } + +a.brackets::after, span.brackets > a::after { content: "]"; } + +h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, = +h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, = +dt:hover > a.headerlink, caption:hover > a.headerlink, p.caption:hover > a.= +headerlink, div.code-block-caption:hover > a.headerlink { visibility: visib= +le; } + +div.body p.caption { text-align: inherit; } + +div.body td { text-align: left; } + +.first { margin-top: 0px !important; } + +p.rubric { margin-top: 30px; font-weight: bold; } + +img.align-left, .figure.align-left, object.align-left { clear: left; float:= + left; margin-right: 1em; } + +img.align-right, .figure.align-right, object.align-right { clear: right; fl= +oat: right; margin-left: 1em; } + +img.align-center, .figure.align-center, object.align-center { display: bloc= +k; margin-left: auto; margin-right: auto; } + +img.align-default, .figure.align-default { display: block; margin-left: aut= +o; margin-right: auto; } + +.align-left { text-align: left; } + +.align-center { text-align: center; } + +.align-default { text-align: center; } + +.align-right { text-align: right; } + +div.sidebar { margin: 0px 0px 0.5em 1em; border: 1px solid rgb(221, 221, 18= +7); padding: 7px 7px 0px; background-color: rgb(255, 255, 238); width: 40%;= + float: right; } + +p.sidebar-title { font-weight: bold; } + +div.topic { border: 1px solid rgb(204, 204, 204); padding: 7px 7px 0px; mar= +gin: 10px 0px; } + +p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } + +div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } + +div.admonition dt { font-weight: bold; } + +div.admonition dl { margin-bottom: 0px; } + +p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; } + +div.body p.centered { text-align: center; margin-top: 25px; } + +table.docutils { border: 0px; border-collapse: collapse; } + +table.align-center { margin-left: auto; margin-right: auto; } + +table.align-default { margin-left: auto; margin-right: auto; } + +table caption span.caption-number { font-style: italic; } + +table caption span.caption-text { } + +table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-wid= +th: 0px 0px 1px; border-top-style: initial; border-top-color: initial; bord= +er-left-style: initial; border-left-color: initial; border-right-style: ini= +tial; border-right-color: initial; border-bottom-style: solid; border-botto= +m-color: rgb(170, 170, 170); } + +table.footnote td, table.footnote th { border: 0px !important; } + +th { text-align: left; padding-right: 5px; } + +table.citation { border-left: 1px solid gray; margin-left: 1px; } + +table.citation td { border-bottom: none; } + +th > p:first-child, td > p:first-child { margin-top: 0px; } + +th > p:last-child, td > p:last-child { margin-bottom: 0px; } + +div.figure { margin: 0.5em; padding: 0.5em; } + +div.figure p.caption { padding: 0.3em; } + +div.figure p.caption span.caption-number { font-style: italic; } + +div.figure p.caption span.caption-text { } + +table.field-list td, table.field-list th { border: 0px !important; } + +.field-list ul { margin: 0px; padding-left: 1em; } + +.field-list p { margin: 0px; } + +.field-name { hyphens: manual; } + +table.hlist td { vertical-align: top; } + +ol.arabic { list-style: decimal; } + +ol.loweralpha { list-style: lower-alpha; } + +ol.upperalpha { list-style: upper-alpha; } + +ol.lowerroman { list-style: lower-roman; } + +ol.upperroman { list-style: upper-roman; } + +li > p:first-child { margin-top: 0px; } + +li > p:last-child { margin-bottom: 0px; } + +dl.footnote > dt, dl.citation > dt { float: left; } + +dl.footnote > dd, dl.citation > dd { margin-bottom: 0em; } + +dl.footnote > dd::after, dl.citation > dd::after { content: ""; clear: both= +; } + +dl.field-list { display: grid; grid-template-columns: fit-content(30%) auto= +; } + +dl.field-list > dt { font-weight: bold; word-break: break-word; padding-lef= +t: 0.5em; padding-right: 5px; } + +dl.field-list > dt::after { content: ":"; } + +dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; margin-left: 0em= +; margin-bottom: 0em; } + +dl { margin-bottom: 15px; } + +dd > p:first-child { margin-top: 0px; } + +dd ul, dd table { margin-bottom: 10px; } + +dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } + +dt:target, span.highlighted { background-color: rgb(251, 229, 78); } + +rect.highlighted { fill: rgb(251, 229, 78); } + +dl.glossary dt { font-weight: bold; font-size: 1.1em; } + +.optional { font-size: 1.3em; } + +.sig-paren { font-size: larger; } + +.versionmodified { font-style: italic; } + +.system-message { background-color: rgb(255, 221, 170); padding: 5px; borde= +r: 3px solid red; } + +.footnote:target { background-color: rgb(255, 255, 170); } + +.line-block { display: block; margin-top: 1em; margin-bottom: 1em; } + +.line-block .line-block { margin-top: 0px; margin-bottom: 0px; margin-left:= + 1.5em; } + +.guilabel, .menuselection { font-family: sans-serif; } + +.accelerator { text-decoration: underline; } + +.classifier { font-style: oblique; } + +.classifier::before { font-style: normal; margin: 0.5em; content: ":"; } + +abbr, acronym { border-bottom: 1px dotted; cursor: help; } + +pre { overflow: auto hidden; } + +span.pre { hyphens: none; } + +td.linenos pre { padding: 5px 0px; border: 0px; background-color: transpare= +nt; color: rgb(170, 170, 170); } + +table.highlighttable { margin-left: 0.5em; } + +table.highlighttable td { padding: 0px 0.5em; } + +div.code-block-caption { padding: 2px 5px; font-size: small; } + +div.code-block-caption code { background-color: transparent; } + +div.code-block-caption + div > div.highlight > pre { margin-top: 0px; } + +div.doctest > div.highlight span.gp { user-select: none; } + +div.code-block-caption span.caption-number { padding: 0.1em 0.3em; font-sty= +le: italic; } + +div.code-block-caption span.caption-text { } + +div.literal-block-wrapper { padding: 1em 1em 0px; } + +div.literal-block-wrapper div.highlight { margin: 0px; } + +code.descname { background-color: transparent; font-weight: bold; font-size= +: 1.2em; } + +code.descclassname { background-color: transparent; } + +code.xref, a code { background-color: transparent; font-weight: bold; } + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { background-color: tr= +ansparent; } + +.viewcode-link { float: right; } + +.viewcode-back { float: right; font-family: sans-serif; } + +div.viewcode-block:target { margin: -1px -10px; padding: 0px 10px; } + +img.math { vertical-align: middle; } + +div.body div.math p { text-align: center; } + +span.eqno { float: right; } + +span.eqno a.headerlink { position: relative; left: 0px; z-index: 1; } + +div.math:hover a.headerlink { visibility: visible; } + +@media print { + div.document, div.documentwrapper, div.bodywrapper { width: 100%; margin:= + 0px !important; } + div.sphinxsidebar, div.related, div.footer, #top-link { display: none; } +} +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/pygments.css + +@charset "utf-8"; + +.highlight .hll { background-color: rgb(255, 255, 204); } + +.highlight { background: rgb(238, 255, 204); } + +.highlight .c { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .err { border: 1px solid rgb(255, 0, 0); } + +.highlight .k { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .o { color: rgb(102, 102, 102); } + +.highlight .ch { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cm { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cp { color: rgb(0, 112, 32); } + +.highlight .cpf { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .c1 { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cs { color: rgb(64, 128, 144); background-color: rgb(255, 240, = +240); } + +.highlight .gd { color: rgb(160, 0, 0); } + +.highlight .ge { font-style: italic; } + +.highlight .gr { color: rgb(255, 0, 0); } + +.highlight .gh { color: rgb(0, 0, 128); font-weight: bold; } + +.highlight .gi { color: rgb(0, 160, 0); } + +.highlight .go { color: rgb(51, 51, 51); } + +.highlight .gp { color: rgb(198, 93, 9); font-weight: bold; } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: rgb(128, 0, 128); font-weight: bold; } + +.highlight .gt { color: rgb(0, 68, 221); } + +.highlight .kc { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kd { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kn { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kp { color: rgb(0, 112, 32); } + +.highlight .kr { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kt { color: rgb(144, 32, 0); } + +.highlight .m { color: rgb(32, 128, 80); } + +.highlight .s { color: rgb(64, 112, 160); } + +.highlight .na { color: rgb(64, 112, 160); } + +.highlight .nb { color: rgb(0, 112, 32); } + +.highlight .nc { color: rgb(14, 132, 181); font-weight: bold; } + +.highlight .no { color: rgb(96, 173, 213); } + +.highlight .nd { color: rgb(85, 85, 85); font-weight: bold; } + +.highlight .ni { color: rgb(213, 85, 55); font-weight: bold; } + +.highlight .ne { color: rgb(0, 112, 32); } + +.highlight .nf { color: rgb(6, 40, 126); } + +.highlight .nl { color: rgb(0, 32, 112); font-weight: bold; } + +.highlight .nn { color: rgb(14, 132, 181); font-weight: bold; } + +.highlight .nt { color: rgb(6, 40, 115); font-weight: bold; } + +.highlight .nv { color: rgb(187, 96, 213); } + +.highlight .ow { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .w { color: rgb(187, 187, 187); } + +.highlight .mb { color: rgb(32, 128, 80); } + +.highlight .mf { color: rgb(32, 128, 80); } + +.highlight .mh { color: rgb(32, 128, 80); } + +.highlight .mi { color: rgb(32, 128, 80); } + +.highlight .mo { color: rgb(32, 128, 80); } + +.highlight .sa { color: rgb(64, 112, 160); } + +.highlight .sb { color: rgb(64, 112, 160); } + +.highlight .sc { color: rgb(64, 112, 160); } + +.highlight .dl { color: rgb(64, 112, 160); } + +.highlight .sd { color: rgb(64, 112, 160); font-style: italic; } + +.highlight .s2 { color: rgb(64, 112, 160); } + +.highlight .se { color: rgb(64, 112, 160); font-weight: bold; } + +.highlight .sh { color: rgb(64, 112, 160); } + +.highlight .si { color: rgb(112, 160, 208); font-style: italic; } + +.highlight .sx { color: rgb(198, 93, 9); } + +.highlight .sr { color: rgb(35, 83, 136); } + +.highlight .s1 { color: rgb(64, 112, 160); } + +.highlight .ss { color: rgb(81, 121, 24); } + +.highlight .bp { color: rgb(0, 112, 32); } + +.highlight .fm { color: rgb(6, 40, 126); } + +.highlight .vc { color: rgb(187, 96, 213); } + +.highlight .vg { color: rgb(187, 96, 213); } + +.highlight .vi { color: rgb(187, 96, 213); } + +.highlight .vm { color: rgb(187, 96, 213); } + +.highlight .il { color: rgb(32, 128, 80); } +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://docs.python.org/3/_static/py.png + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A +/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gEGxE4IQYzJ14AAAI3SURBVDjL +ZZNPSFVBFIe/e9+zd3silBCl0SZoU4s2rVq0EB5tQip4UNvATVGu3QRBiyAi2iltWkgbF5EgRhFF +RpiWtrWIzDIV1Pzz7p15M2fmtvDevOqBw8DM9zvnN8ycgF3R/eDtM2mac96ZdrFNxBikqbRV+vHH +/ut9gAZczoe7C3gnF0f6au1OLM5avFi8d1Ea+JvAMSAq8nsKOGs5f2cYJ3Y7rc2PO4BqkS8DdD98 +f9tbe1ysCoxOBo1qlEXHJWcM4b5KPU19zleA0o4Clx99eO3EdqVewHsCoFRugUoVghJO7A6H6Vx9 +wdtYi27cr5x6dy/03nVtWTU7bWeZh6jNUcAiCaFTURl9A+gs56AviHzh3mnqtdPxm6knfQPLU7Ua +okASQq/agY7yDrG16Mba6Pz48NP56VdrgAApYObGaicPtkovToFLQBKA/WUxTe3FRk4san15aGKg +d3Dj560rrdGJS6FT0X9YYvLuiMKL1kAQOpHZ3PqfyZfP41+9PW1VfzX0RXFSECfgNEmSTgImdDru +F2O0E8vvqZG1auQubAsKooIYYHpGvwA2g+xndQBHgWa6cG0ih5cW/w6VvEq3nChwCoBvs+bL2Z7V +ceBHGTDAIrABpMVuhw+4OiLgLIglOLPYBTQAlfErIeCzjRVg1dtEb1kt5Omv+DTV2YssAN+zNdkz +C42N9brV8WdvYp07seOdM2Of1F3AAknW0AJpwN6IgEPAEaANaMlcbmZdl7KRBuAfAb+v//yMAJoA +AAAASUVORK5CYII= + +------MultipartBoundary--pqKor7BVEUh96UTtccQ369JDE6tshTqMPrnc3Soavt------ diff --git "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 1 (Apuntes) - El tipo l\303\263gico.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 1 (Apuntes) - El tipo logico.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 1 (Apuntes) - El tipo l\303\263gico.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 1 (Apuntes) - El tipo logico.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 2 (Apuntes) - Operadores relacionales.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 2 (Apuntes) - Operadores relacionales.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 2 (Apuntes) - Operadores relacionales.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 2 (Apuntes) - Operadores relacionales.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 3 (Apuntes) - Operadores l\303\263gicos.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 3 (Apuntes) - Operadores logicos.ipynb similarity index 77% rename from "Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 3 (Apuntes) - Operadores l\303\263gicos.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 3 (Apuntes) - Operadores logicos.ipynb index 29cc4c1..c64f587 100644 --- "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 3 (Apuntes) - Operadores l\303\263gicos.ipynb" +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 3 (Apuntes) - Operadores logicos.ipynb @@ -18,12 +18,22 @@ "## Not - Negación lógica" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**
Tabla de la verdad
**\n", + "\n", + "| A\t| ~A\t| \n", + "|:---:\t|:---:\t|\n", + "| True\t| False\t|\n", + "| False | True | \n" + ] + }, { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -43,9 +53,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -69,12 +77,24 @@ "## And - Conjunción lógica (agrupa uniendo)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**
Tabla de la verdad
**\n", + "\n", + "| A\t| B\t| A ∧ B |\n", + "|:---:\t|:---:\t|:---:\t|\n", + "| True\t| True\t| True \t|\n", + "| True | False | False\t|\n", + "| False | True \t| False\t|\n", + "| False\t| False\t| False\t|" + ] + }, { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -94,9 +114,7 @@ { "cell_type": "code", "execution_count": 4, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -116,9 +134,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -138,9 +154,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -159,10 +173,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -170,7 +182,7 @@ "False" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -182,10 +194,8 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { @@ -193,7 +203,7 @@ "False" ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -210,12 +220,24 @@ "## Or - Disyunción lógica (agrupa separando)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**
Tabla de la verdad
**\n", + "\n", + "| A\t| B\t| A ∨ B |\n", + "|:---:\t|:---:\t|:---:\t|\n", + "| True\t| True\t| True \t|\n", + "| True | False | True\t|\n", + "| False | True \t| True\t|\n", + "| False\t| False\t| False\t|" + ] + }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { @@ -223,7 +245,7 @@ "True" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -234,10 +256,8 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { @@ -245,7 +265,7 @@ "True" ] }, - "execution_count": 13, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -256,10 +276,8 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { @@ -267,7 +285,7 @@ "True" ] }, - "execution_count": 14, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -278,10 +296,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "data": { @@ -289,7 +305,7 @@ "False" ] }, - "execution_count": 15, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -300,10 +316,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "data": { @@ -311,7 +325,7 @@ "False" ] }, - "execution_count": 17, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -323,10 +337,8 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "data": { @@ -334,7 +346,7 @@ "False" ] }, - "execution_count": 20, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -361,9 +373,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 4 (Apuntes) - Expresiones anidadas.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 4 (Apuntes) - Expresiones anidadas.ipynb similarity index 92% rename from "Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 4 (Apuntes) - Expresiones anidadas.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 4 (Apuntes) - Expresiones anidadas.ipynb index 4518f33..bbe2d49 100644 --- "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 4 (Apuntes) - Expresiones anidadas.ipynb" +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 4 (Apuntes) - Expresiones anidadas.ipynb @@ -15,9 +15,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -53,9 +51,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 5 (Apuntes) - Operadores de asignaci\303\263n.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 5 (Apuntes) - Operadores de asignacion.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Lecci\303\263n 5 (Apuntes) - Operadores de asignaci\303\263n.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Apuntes/Leccion 5 (Apuntes) - Operadores de asignacion.ipynb diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 1 - El tipo logico.ipynb b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 1 - El tipo logico.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 1 - El tipo logico.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 2 - Operadores relacionales.ipynb b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 2 - Operadores relacionales.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 2 - Operadores relacionales.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 3 - Operadores logicos.ipynb b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 3 - Operadores logicos.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 3 - Operadores logicos.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 4 - Expresiones anidadas.ipynb b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 4 - Expresiones anidadas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 4 - Expresiones anidadas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 5 - Operadores de asignacion.ipynb b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 5 - Operadores de asignacion.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 02 - Operadores y expresiones/Leccion 5 - Operadores de asignacion.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 1 (Apuntes) - Sentencia If.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 1 (Apuntes) - Sentencia If.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 1 (Apuntes) - Sentencia If.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 1 (Apuntes) - Sentencia If.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 2 (Apuntes) - Sentencia While.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 2 (Apuntes) - Sentencia While.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 2 (Apuntes) - Sentencia While.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 2 (Apuntes) - Sentencia While.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 3 (Apuntes) - Sentencia For.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 3 (Apuntes) - Sentencia For.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 3 (Apuntes) - Sentencia For.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 3 (Apuntes) - Sentencia For.ipynb diff --git "a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 4 (Apuntes) - Post an\303\241lisis.ipynb" b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 4 (Apuntes) - Post analisis.ipynb similarity index 100% rename from "Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Lecci\303\263n 4 (Apuntes) - Post an\303\241lisis.ipynb" rename to Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Apuntes/Leccion 4 (Apuntes) - Post analisis.ipynb diff --git a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 1 - Sentencia If.ipynb b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 1 - Sentencia If.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 1 - Sentencia If.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 2 - Sentencia While.ipynb b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 2 - Sentencia While.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 2 - Sentencia While.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 3 - Sentencia For.ipynb b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 3 - Sentencia For.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 3 - Sentencia For.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 4 - Post analisis.ipynb b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 4 - Post analisis.ipynb new file mode 100644 index 0000000..f5fdf67 --- /dev/null +++ b/Fase 1 - Fundamentos de programacion/Tema 03 - Controlando el flujo/Leccion 4 - Post analisis.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "n = 0\n", + "while n < 10:\n", + " if (n % 2) == 0:\n", + " print(n,'es un número par')\n", + " else:\n", + " print(n,'es un número impar') \n", + " n = n + 1" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 1 (Apuntes) - Tuplas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 1 (Apuntes) - Tuplas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 1 (Apuntes) - Tuplas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 1 (Apuntes) - Tuplas.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 2 (Apuntes) - Conjuntos.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 2 (Apuntes) - Conjuntos.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 2 (Apuntes) - Conjuntos.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 2 (Apuntes) - Conjuntos.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 3 (Apuntes) - Diccionarios.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 3 (Apuntes) - Diccionarios.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 3 (Apuntes) - Diccionarios.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 3 (Apuntes) - Diccionarios.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 4 (Apuntes) - Pilas y colas con listas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 4 (Apuntes) - Pilas y colas con listas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Lecci\303\263n 4 (Apuntes) - Pilas y colas con listas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Apuntes/Leccion 4 (Apuntes) - Pilas y colas con listas.ipynb diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 1 - Tuplas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 1 - Tuplas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 1 - Tuplas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 2 - Conjuntos.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 2 - Conjuntos.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 2 - Conjuntos.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 3 - Diccionarios.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 3 - Diccionarios.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 3 - Diccionarios.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 4 - Pilas y colas con listas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 4 - Pilas y colas con listas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 04 - Colecciones de datos/Leccion 4 - Pilas y colas con listas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 1 (Apuntes) - Entradas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Leccion 1 (Apuntes) - Entradas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 1 (Apuntes) - Entradas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Leccion 1 (Apuntes) - Entradas.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 3 (Apuntes) - Salidas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Leccion 3 (Apuntes) - Salidas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 3 (Apuntes) - Salidas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Leccion 3 (Apuntes) - Salidas.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion.py" new file mode 100644 index 0000000..9df9658 --- /dev/null +++ "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion.py" @@ -0,0 +1 @@ +print("Este programa tiene código fuente en Español") \ No newline at end of file diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion_ANSI.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion_ANSI.py" new file mode 100644 index 0000000..cc9b876 --- /dev/null +++ "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - codificacion_ANSI.py" @@ -0,0 +1 @@ +print("Este programa tiene cdigo fuente en Espaol") \ No newline at end of file diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - escribir_lineas.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - escribir_lineas.py" new file mode 100644 index 0000000..61db6c4 --- /dev/null +++ "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - escribir_lineas.py" @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jan 10 16:21:00 2020 + +@author: Isra +""" + +import sys + +if len(sys.argv) == 3: + texto = sys.argv[1] + repeticiones = int(sys.argv[2]) + + for r in range(repeticiones): + + print(texto) +else: + print("Error, introduce los argumentos correctamente") + print("Ejemplo: escribir_lineas.py 'texto' 5") \ No newline at end of file diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - primer_script.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - primer_script.py" new file mode 100644 index 0000000..dda0e4d --- /dev/null +++ "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Apuntes/Lecci\303\263n 2 (Apuntes) - primer_script.py" @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jan 10 16:15:21 2020 + +@author: Isra +""" + +import sys + +print("Hola, bienvenido a tu primer script") +print(sys.argv) \ No newline at end of file diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 1 - Entradas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 1 - Entradas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 1 - Entradas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 3 - Salidas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 3 - Salidas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Leccion 3 - Salidas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/codificacion.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/codificacion.py" deleted file mode 100644 index 03c9bd4..0000000 --- "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/codificacion.py" +++ /dev/null @@ -1 +0,0 @@ -print("Este programa tiene código fuente en español") \ No newline at end of file diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/escribir_lineas.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/escribir_lineas.py" deleted file mode 100644 index 8b0ef7f..0000000 --- "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/escribir_lineas.py" +++ /dev/null @@ -1,9 +0,0 @@ -import sys -if len(sys.argv) == 3: - texto = sys.argv[1] - repeticiones = int(sys.argv[2]) - for r in range(repeticiones): - print(texto) -else: - print("Error - Introduce los argumentos correctamente") - print('Ejemplo: escribir_lineas.py "Texto" 5') diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/primer_script.py" "b/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/primer_script.py" deleted file mode 100644 index e9e731c..0000000 --- "a/Fase 2 - Manejo de datos y optimizacion/Tema 05 - Entradas y salidas de datos/Lecci\303\263n 2 (Apuntes) - Scripts/primer_script.py" +++ /dev/null @@ -1,3 +0,0 @@ -import sys -print("Hola, bienvenido a tu primer script") -print(sys.argv) \ No newline at end of file diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 1 (Apuntes) - Definici\303\263n de funciones.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 1 (Apuntes) - Definicion de funciones.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 1 (Apuntes) - Definici\303\263n de funciones.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 1 (Apuntes) - Definicion de funciones.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 2 (Apuntes) - Retorno de valores.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 2 (Apuntes) - Retorno de valores.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 2 (Apuntes) - Retorno de valores.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 2 (Apuntes) - Retorno de valores.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 3 (Apuntes) - Env\303\255o de valores.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 3 (Apuntes) - Envio de valores.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 3 (Apuntes) - Env\303\255o de valores.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 3 (Apuntes) - Envio de valores.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 4 (Apuntes) - Argumentos y par\303\241metros.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 4 (Apuntes) - Argumentos y parametros.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 4 (Apuntes) - Argumentos y par\303\241metros.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 4 (Apuntes) - Argumentos y parametros.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 5 (Apuntes) - Argumentos por valor y referencia.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 5 (Apuntes) - Argumentos por valor y referencia.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 5 (Apuntes) - Argumentos por valor y referencia.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 5 (Apuntes) - Argumentos por valor y referencia.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 6 (Apuntes) - Argumentos y par\303\241metros indeterminados.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 6 (Apuntes) - Argumentos y parametros indeterminados.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 6 (Apuntes) - Argumentos y par\303\241metros indeterminados.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 6 (Apuntes) - Argumentos y parametros indeterminados.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 7 (Apuntes) - Funciones recursivas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 7 (Apuntes) - Funciones recursivas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 7 (Apuntes) - Funciones recursivas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 7 (Apuntes) - Funciones recursivas.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 8 (Apuntes) - Funciones integradas.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 8 (Apuntes) - Funciones integradas.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Lecci\303\263n 8 (Apuntes) - Funciones integradas.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Apuntes/Leccion 8 (Apuntes) - Funciones integradas.ipynb diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 1 - Definicion de funciones.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 1 - Definicion de funciones.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 1 - Definicion de funciones.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 2 - Retorno de valores.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 2 - Retorno de valores.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 2 - Retorno de valores.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 3 - Envio de valores.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 3 - Envio de valores.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 3 - Envio de valores.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 4 - Argumentos y parametros.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 4 - Argumentos y parametros.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 4 - Argumentos y parametros.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 5 - Argumentos por valor y referencia.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 5 - Argumentos por valor y referencia.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 5 - Argumentos por valor y referencia.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 6 - Argumentos y parametros indeterminados.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 6 - Argumentos y parametros indeterminados.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 6 - Argumentos y parametros indeterminados.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 7 - Funciones recursivas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 7 - Funciones recursivas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 7 - Funciones recursivas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 8 - Funciones integradas.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 8 - Funciones integradas.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 06 - Programacion de funciones/Leccion 8 - Funciones integradas.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 1 (Apuntes) - Errores.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 1 (Apuntes) - Errores.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 1 (Apuntes) - Errores.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 1 (Apuntes) - Errores.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 2 (Apuntes) - Excepciones.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 2 (Apuntes) - Excepciones.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 2 (Apuntes) - Excepciones.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 2 (Apuntes) - Excepciones.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 3 (Apuntes) - Excepciones m\303\272ltiples.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 3 (Apuntes) - Excepciones multiples.ipynb similarity index 100% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 3 (Apuntes) - Excepciones m\303\272ltiples.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 3 (Apuntes) - Excepciones multiples.ipynb diff --git "a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 4 (Apuntes) - Invocaci\303\263n de excepciones.ipynb" b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 4 (Apuntes) - Invocacion de excepciones.ipynb similarity index 87% rename from "Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 4 (Apuntes) - Invocaci\303\263n de excepciones.ipynb" rename to Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 4 (Apuntes) - Invocacion de excepciones.ipynb index 9997e13..a3370e9 100644 --- "a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Lecci\303\263n 4 (Apuntes) - Invocaci\303\263n de excepciones.ipynb" +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 4 (Apuntes) - Invocacion de excepciones.ipynb @@ -26,9 +26,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -53,9 +51,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -70,10 +66,18 @@ " try:\n", " if algo is None:\n", " raise ValueError(\"Error! No se permite un valor nulo\")\n", + " print(\"hola\") #Después de invocar el error las líneas posteriores no se ejecutan\n", " except ValueError:\n", " print(\"Error! No se permite un valor nulo (desde la excepción)\")\n", "mi_funcion()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -92,9 +96,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.1" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 1 - Errores.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 1 - Errores.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 1 - Errores.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 2 - Excepciones.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 2 - Excepciones.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 2 - Excepciones.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 3 - Excepciones multiples.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 3 - Excepciones multiples.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 3 - Excepciones multiples.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 4 - Invocacion de excepciones.ipynb b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 4 - Invocacion de excepciones.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Leccion 4 - Invocacion de excepciones.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 1 (Apuntes) - Programaci\303\263n estructurada vs POO.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 1 (Apuntes) - Programacion estructurada vs POO.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 1 (Apuntes) - Programaci\303\263n estructurada vs POO.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 1 (Apuntes) - Programacion estructurada vs POO.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 2 (Apuntes) - Clases y objetos.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 2 (Apuntes) - Clases y objetos.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 2 (Apuntes) - Clases y objetos.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 2 (Apuntes) - Clases y objetos.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 3 (Apuntes) - Atributos y m\303\251todos de clase.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 3 (Apuntes) - Atributos y metodos de clase.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 3 (Apuntes) - Atributos y m\303\251todos de clase.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 3 (Apuntes) - Atributos y metodos de clase.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 4 (Apuntes) - M\303\251todos especiales de clase.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 4 (Apuntes) - Metodos especiales de clase.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 4 (Apuntes) - M\303\251todos especiales de clase.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 4 (Apuntes) - Metodos especiales de clase.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 5 (Apuntes) - Objetos dentro de objetos.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 5 (Apuntes) - Objetos dentro de objetos.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 5 (Apuntes) - Objetos dentro de objetos.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 5 (Apuntes) - Objetos dentro de objetos.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 6 (Apuntes) - Encapsulaci\303\263n de atributos y m\303\251todos.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 6 (Apuntes) - Encapsulacion de atributos y metodos.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Lecci\303\263n 6 (Apuntes) - Encapsulaci\303\263n de atributos y m\303\251todos.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Apuntes/Leccion 6 (Apuntes) - Encapsulacion de atributos y metodos.ipynb diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Enunciados.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Enunciados.ipynb index 30b7ee6..9e8abd1 100644 --- a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Enunciados.ipynb +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Enunciados.ipynb @@ -22,11 +22,11 @@ "\n", "Representa un espacio bidimensional (en 2 dimensiones), formado por dos rectas perpendiculares, una horizontal y otra vertical que se cortan en un punto. La recta horizontal se denomina eje de las abscisas o **eje X**, mientras que la vertical recibe el nombre de eje de las ordenadas o simplemente **eje Y**. En cuanto al punto donde se cortan, se conoce como el **punto de origen O**.\n", "\n", - "\n", + "![](./images/eje.jpg)\n", "\n", "Es importante remarcar que el plano se divide en 4 cuadrantes:\n", "\n", - "\n", + "![](./images/cuadrante.jpg)\n", "\n", "## Puntos y coordenadas\n", "\n", @@ -34,7 +34,7 @@ "\n", "La representación de un punto es sencilla: **P(X,Y)** dónde X y la Y son la distancia horizontal (izquierda o derecha) y vertical (arriba o abajo) respectivamente, utilizando como referencia el punto de origen (0,0), justo en el centro del plano.\n", "\n", - "\n", + "![](./images/Cartesian-coordinate-system.svg.png)\n", "\n", "\n", "## Vectores en el plano\n", @@ -43,8 +43,7 @@ "\n", "A efectos prácticos no deja de ser una línea formada desde un punto inicial en dirección a otro punto final, por lo que se entiende que un vector tiene longitud y dirección/sentido.\n", "\n", - "\n", - "\n", + "![](./images/vector3.png)\n", "\n", "En esta figura, podemos observar dos puntos A y B que podríamos definir de la siguiente forma:\n", "* **A(x1, y1)** => **A(2, 3)**\n", @@ -73,7 +72,7 @@ "* Añade un método llamado **vector**, que tome otro punto y calcule el vector resultante entre los dos puntos.\n", "* (Optativo) Añade un método llamado **distancia**, que tome otro punto y calcule la distancia entre los dos puntos y la muestre por pantalla. La fórmula es la siguiente:\n", "\n", - "\n", + "![](./images/distancia.png)\n", "\n", "*Nota: La función raíz cuadrada en Python sqrt() se debe importar del módulo math y utilizarla de la siguiente forma:*\n", "```python\n", @@ -103,9 +102,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Completa el ejercicio aquí\n", @@ -116,9 +113,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -130,9 +127,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.1" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Soluciones.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Soluciones.ipynb index 6c84f2e..2d2be7d 100644 --- a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Soluciones.ipynb +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/Soluciones.ipynb @@ -22,11 +22,11 @@ "\n", "Representa un espacio bidimensional (en 2 dimensiones), formado por dos rectas perpendiculares, una horizontal y otra vertical que se cortan en un punto. La recta horizontal se denomina eje de las abscisas o **eje X**, mientras que la vertical recibe el nombre de eje de las ordenadas o simplemente **eje Y**. En cuanto al punto donde se cortan, se conoce como el **punto de origen O**.\n", "\n", - "\n", + "\n", "\n", "Es importante remarcar que el plano se divide en 4 cuadrantes:\n", "\n", - "\n", + "\n", "\n", "## Puntos y coordenadas\n", "\n", @@ -34,7 +34,7 @@ "\n", "La representación de un punto es sencilla: **P(X,Y)** dónde X y la Y son la distancia horizontal (izquierda o derecha) y vertical (arriba o abajo) respectivamente, utilizando como referencia el punto de origen (0,0), justo en el centro del plano.\n", "\n", - "\n", + "\n", "\n", "\n", "## Vectores en el plano\n", @@ -44,7 +44,7 @@ "A efectos prácticos no deja de ser una línea formada desde un punto inicial en dirección a otro punto final, por lo que se entiende que un vector tiene longitud y dirección/sentido.\n", "\n", "\n", - "\n", + "\n", "\n", "En esta figura, podemos observar dos puntos A y B que podríamos definir de la siguiente forma:\n", "* **A(x1, y1)** => **A(2, 3)**\n", @@ -73,7 +73,7 @@ "* Añade un método llamado **vector**, que tome otro punto y calcule el vector resultante entre los dos puntos.\n", "* (Optativo) Añade un método llamado **distancia**, que tome otro punto y calcule la distancia entre los dos puntos y la muestre por pantalla. La fórmula es la siguiente:\n", "\n", - "\n", + "\n", "\n", "*Nota: La función raíz cuadrada en Python sqrt() se debe importar del módulo math y utilizarla de la siguiente forma:*\n", "```python\n", @@ -103,9 +103,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -166,18 +164,18 @@ " self.pFinal = pFinal\n", " \n", " def base(self):\n", - " self.v_base = abs(self.pFinal.x - self.pInicial.x)\n", - " print(\"La base del rectángulo es {}\".format( self.v_base ) )\n", + " self.base = abs(self.pFinal.x - self.pInicial.x)\n", + " print(\"La base del rectángulo es {}\".format( self.base ) )\n", " \n", " def altura(self):\n", - " self.v_altura = abs(self.pFinal.y - self.pInicial.y)\n", - " print(\"La altura del rectángulo es {}\".format( self.v_altura ) )\n", + " self.altura = abs(self.pFinal.y - self.pInicial.y)\n", + " print(\"La altura del rectángulo es {}\".format( self.altura ) )\n", " \n", " def area(self):\n", - " self.v_base = abs(self.pFinal.x - self.pInicial.x)\n", - " self.v_altura = abs(self.pFinal.y - self.pInicial.y)\n", - " self.v_area = self.v_base * self.v_altura\n", - " print(\"El área del rectángulo es {}\".format( self.v_area ) )\n", + " self.base = abs(self.pFinal.x - self.pInicial.x)\n", + " self.altura = abs(self.pFinal.y - self.pInicial.y)\n", + " self.area = self.base * self.altura\n", + " print(\"El área del rectángulo es {}\".format( self.area ) )\n", " \n", " \n", "A = Punto(2,3)\n", @@ -209,9 +207,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -223,9 +221,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/Cartesian-coordinate-system.svg.png b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/Cartesian-coordinate-system.svg.png new file mode 100644 index 0000000..8a3ad28 Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/Cartesian-coordinate-system.svg.png differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/cuadrante.jpg b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/cuadrante.jpg new file mode 100644 index 0000000..d1bfcde Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/cuadrante.jpg differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/distancia.png b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/distancia.png new file mode 100644 index 0000000..7a4efda Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/distancia.png differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/eje.jpg b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/eje.jpg new file mode 100644 index 0000000..80c9f6f Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/eje.jpg differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/vector3.png b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/vector3.png new file mode 100644 index 0000000..db5d74a Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Ejercicios/images/vector3.png differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 1 - Programacion estructurada vs POO.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 1 - Programacion estructurada vs POO.ipynb new file mode 100644 index 0000000..6fa79ed --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 1 - Programacion estructurada vs POO.ipynb @@ -0,0 +1,200 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\"\"\" Ejemplo de implementación con Programación Estructurada \"\"\"\n", + "\n", + "clientes= [\n", + " {'Nombre': 'Hector', 'Apellidos':'Costa Guzman', 'dni':'11111111A'},\n", + " {'Nombre': 'Juan', 'Apellidos':'González Márquez', 'dni':'22222222B'} \n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def mostrar_cliente(clientes, dni):\n", + " for c in clientes:\n", + " if (dni == c['dni']):\n", + " print('{} {}'.format(c['Nombre'],c['Apellidos']))\n", + " return\n", + " \n", + " print('Cliente no encontrado')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def borrar_cliente(clientes, dni):\n", + " for i,c in enumerate(clientes):\n", + " if (dni == c['dni']):\n", + " del( clientes[i] )\n", + " print(str(c),\"> BORRADO\")\n", + " return\n", + " \n", + " print('Cliente no encontrado')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

















\n", + "## Espacio en blanco a propósito\n", + "

















" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "\"\"\" Ejemplo de implementación con Programación Orientada a Objetos \n", + " No hace falta entender el código, lo aprenderemos en esta unidad \"\"\"\n", + "\n", + "class Cliente:\n", + " \n", + " def __init__(self, dni, nombre, apellidos):\n", + " self.dni = dni\n", + " self.nombre = nombre\n", + " self.apellidos = apellidos\n", + " \n", + " def __str__(self):\n", + " return '{} {}'.format(self.nombre,self.apellidos)\n", + " \n", + "\n", + "class Empresa:\n", + " \n", + " def __init__(self, clientes=[]):\n", + " self.clientes = clientes\n", + " \n", + " def mostrar_cliente(self, dni=None):\n", + " for c in self.clientes:\n", + " if c.dni == dni:\n", + " print(c)\n", + " return\n", + " print(\"Cliente no encontrado\")\n", + " \n", + " def borrar_cliente(self, dni=None):\n", + " for i,c in enumerate(self.clientes):\n", + " if c.dni == dni:\n", + " del(self.clientes[i])\n", + " print(str(c),\"> BORRADO\")\n", + " return\n", + " print(\"Cliente no encontrado\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 2 - Clases y objetos.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 2 - Clases y objetos.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 2 - Clases y objetos.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 3 - Atributos y metodos de clase.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 3 - Atributos y metodos de clase.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 3 - Atributos y metodos de clase.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 4 - Metodos especiales de clase.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 4 - Metodos especiales de clase.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 4 - Metodos especiales de clase.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 5 - Objetos dentro de objetos.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 5 - Objetos dentro de objetos.ipynb new file mode 100644 index 0000000..db9b945 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 5 - Objetos dentro de objetos.ipynb @@ -0,0 +1,55 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Pelicula:\n", + " \n", + " # Constructor de clase\n", + " def __init__(self, titulo, duracion, lanzamiento):\n", + " self.titulo = titulo\n", + " self.duracion = duracion\n", + " self.lanzamiento = lanzamiento\n", + " print('Se ha creado la película:',self.titulo)\n", + " \n", + " def __str__(self):\n", + " return '{} ({})'.format(self.titulo, self.lanzamiento)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 6 - Encapsulacion de atributos y metodos.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 6 - Encapsulacion de atributos y metodos.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 08 - Programacion Orientada a Objetos/Leccion 6 - Encapsulacion de atributos y metodos.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 1 (Apuntes) - Herencia.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 1 (Apuntes) - Herencia.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 1 (Apuntes) - Herencia.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 1 (Apuntes) - Herencia.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 2 (Apuntes) - Clases heredadas y polimorfismo.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 2 (Apuntes) - Clases heredadas y polimorfismo.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 2 (Apuntes) - Clases heredadas y polimorfismo.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 2 (Apuntes) - Clases heredadas y polimorfismo.ipynb diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 3 (Apuntes) - Herencia m\303\272ltiple.ipynb" b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 3 (Apuntes) - Herencia multiple.ipynb similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Lecci\303\263n 3 (Apuntes) - Herencia m\303\272ltiple.ipynb" rename to Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Apuntes/Leccion 3 (Apuntes) - Herencia multiple.ipynb diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Enunciados.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Enunciados.ipynb index bf17950..d7a7b33 100644 --- a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Enunciados.ipynb +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Enunciados.ipynb @@ -20,17 +20,14 @@ "metadata": {}, "source": [ "Hasta ahora sabemos que una clase heredada puede fácilmente extender algunas funcionalidades, simplemente añadiendo nuevos atributos y métodos, o sobreescribiendo los ya existentes. Como en el siguiente ejemplo\n", - "

\n", - "\n", - "
" + "\n", + "![](./images/EjemploClases.png)\n" ] }, { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -79,9 +76,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -128,10 +123,8 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -173,9 +166,9 @@ "source": [ "# Ejercicio\n", "Utilizando esta nueva técnica, extiende la clase Vehiculo y realiza la siguiente implementación:\n", - "

\n", - "\n", - "
\n", + "\n", + "![](./images/EjercicioClases.png)\n", + "\n", "## Experimenta\n", "* Crea al menos un objeto de cada subclase y añádelos a una lista llamada vehiculos.\n", "* Realiza una función llamada **catalogar()** que reciba la lista de vehiculos y los recorra mostrando el nombre de su clase y sus atributos.\n", @@ -190,9 +183,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class Vehiculo():\n", @@ -242,9 +233,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -256,9 +247,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.1" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Soluciones.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Soluciones.ipynb index 3fa6c21..510af71 100644 --- a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Soluciones.ipynb +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/Soluciones.ipynb @@ -21,16 +21,14 @@ "source": [ "Hasta ahora sabemos que una clase heredada puede fácilmente extender algunas funcionalidades, simplemente añadiendo nuevos atributos y métodos, o sobreescribiendo los ya existentes. Como en el siguiente ejemplo\n", "

\n", - "\n", + "\n", "
" ] }, { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -79,9 +77,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -129,9 +125,7 @@ { "cell_type": "code", "execution_count": 37, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -174,7 +168,7 @@ "# Ejercicio\n", "Utilizando esta nueva técnica, extiende la clase Vehiculo y realiza la siguiente implementación:\n", "

\n", - "\n", + "\n", "
\n", "## Experimenta\n", "* Crea al menos un objeto de cada subclase y añádelos a una lista llamada vehiculos.\n", @@ -190,9 +184,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -319,9 +311,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -333,9 +325,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjemploClases.png b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjemploClases.png new file mode 100644 index 0000000..41936a8 Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjemploClases.png differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjercicioClases.png b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjercicioClases.png new file mode 100644 index 0000000..5b93d7e Binary files /dev/null and b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Ejercicios/images/EjercicioClases.png differ diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 1 - Herencia.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 1 - Herencia.ipynb new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 1 - Herencia.ipynb @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 2 - Clases heredadas y polimorfismo.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 2 - Clases heredadas y polimorfismo.ipynb new file mode 100644 index 0000000..ad82ce8 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 2 - Clases heredadas y polimorfismo.ipynb @@ -0,0 +1,89 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Producto:\n", + " def __init__(self,referencia,nombre,pvp,descripcion):\n", + " self.referencia = referencia\n", + " self.nombre = nombre\n", + " self.pvp = pvp\n", + " self.descripcion = descripcion\n", + " \n", + " def __str__(self):\n", + " return \"\"\"\\\n", + "REFERENCIA\\t{}\n", + "NOMBRE\\t\\t{}\n", + "PVP\\t\\t{}\n", + "DESCRIPCIÓN\\t{}\"\"\".format(self.referencia,self.nombre,self.pvp,self.descripcion)\n", + " \n", + "\n", + "class Adorno(Producto):\n", + " pass\n", + "\n", + "\n", + "class Alimento(Producto):\n", + " productor = \"\"\n", + " distribuidor = \"\"\n", + " \n", + " def __str__(self):\n", + " return \"\"\"\\\n", + "REFERENCIA\\t{}\n", + "NOMBRE\\t\\t{}\n", + "PVP\\t\\t{}\n", + "DESCRIPCIÓN\\t{}\n", + "PRODUCTOR\\t{}\n", + "DISTRIBUIDOR\\t{}\"\"\".format(self.referencia,self.nombre,self.pvp,self.descripcion,self.productor,self.distribuidor)\n", + "\n", + "\n", + "class Libro(Producto):\n", + " isbn = \"\"\n", + " autor = \"\"\n", + " \n", + " def __str__(self):\n", + " return \"\"\"\\\n", + "REFERENCIA\\t{}\n", + "NOMBRE\\t\\t{}\n", + "PVP\\t\\t{}\n", + "DESCRIPCIÓN\\t{}\n", + "ISBN\\t\\t{}\n", + "AUTOR\\t\\t{}\"\"\".format(self.referencia,self.nombre,self.pvp,self.descripcion,self.isbn,self.autor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 3 - Herencia multiple.ipynb b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 3 - Herencia multiple.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 3 - Programacion Orientada a Objetos/Tema 09 - Herencia en la POO/Leccion 3 - Herencia multiple.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 1 (Apuntes) - Cadenas.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 1 (Apuntes) - Cadenas.ipynb" similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 1 (Apuntes) - Cadenas.ipynb" rename to "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 1 (Apuntes) - Cadenas.ipynb" diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 2 (Apuntes) - Listas.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 2 (Apuntes) - Listas.ipynb" similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 2 (Apuntes) - Listas.ipynb" rename to "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 2 (Apuntes) - Listas.ipynb" diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 3 (Apuntes) - Conjuntos.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 3 (Apuntes) - Conjuntos.ipynb" similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 3 (Apuntes) - Conjuntos.ipynb" rename to "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 3 (Apuntes) - Conjuntos.ipynb" diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 4 (Apuntes) - Diccionarios.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 4 (Apuntes) - Diccionarios.ipynb" similarity index 100% rename from "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Lecci\303\263n 4 (Apuntes) - Diccionarios.ipynb" rename to "Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Apuntes/Leccion 4 (Apuntes) - Diccionarios.ipynb" diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 1 - Cadenas.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 1 - Cadenas.ipynb" new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 1 - Cadenas.ipynb" @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 2 - Listas.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 2 - Listas.ipynb" new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 2 - Listas.ipynb" @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 3 - Conjuntos.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 3 - Conjuntos.ipynb" new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 3 - Conjuntos.ipynb" @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 4 - Diccionarios.ipynb" "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 4 - Diccionarios.ipynb" new file mode 100644 index 0000000..286dcb3 --- /dev/null +++ "b/Fase 3 - Programacion Orientada a Objetos/Tema 10 - M\303\251todos de las colecciones/Leccion 4 - Diccionarios.ipynb" @@ -0,0 +1,6 @@ +{ + "cells": [], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/hola.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/hola.py similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/hola.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/hola.py index 47a8ac8..8579181 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/hola.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/hola.py @@ -1,7 +1,7 @@ -# Este es un módulo con funciones que saludan -def saludar(): - print("Hola, te estoy saludando desde la función saludar() del módulo saludos") - -class Saludo(): - def __init__(self): +# Este es un módulo con funciones que saludan +def saludar(): + print("Hola, te estoy saludando desde la función saludar() del módulo saludos") + +class Saludo(): + def __init__(self): print("Hola, te estoy saludando desde el __init__ de la clase Saludo") \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/saludos.py b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/saludos.py new file mode 100644 index 0000000..643d9ab --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/saludos.py @@ -0,0 +1,8 @@ +# Este es un módulo con funciones que saluda +def saludar(): + print("Hola, te estoy saludando desde la función saludar del módulo saludos") + +#Redefinir clases +class Saludo(): + def __init__(self): + print("Hola, te estoy llamando desde le metodo __init__ de la clase") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/script.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/script.py similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/script.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/script.py index 62e2faf..b0bd001 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/script.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/script.py @@ -1,3 +1,3 @@ -from saludos import Saludo - +from saludos import Saludo + s = Saludo() \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/test/script.py b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/test/script.py new file mode 100644 index 0000000..0c1d331 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 01 (Apuntes) - Modulos/test/script.py @@ -0,0 +1,13 @@ +import sys + +# for v in sys.path[:]: +# if v == '..': +# sys.path.remove(v) + +if not ('..' in sys.path): + sys.path.append('..') + +print(sys.path) + +from saludos import * +Saludo() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO index 5a831cf..43141fc 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/PKG-INFO @@ -1,10 +1,10 @@ -Metadata-Version: 1.0 -Name: paquete -Version: 0.1 -Summary: Este es un paquete de jemplo -Home-page: http://hcosta.info -Author: Hector Costa -Author-email: yo@hcosta.info -License: UNKNOWN -Description: UNKNOWN -Platform: UNKNOWN +Metadata-Version: 1.0 +Name: paquete +Version: 0.1 +Summary: Este es un paquete de jemplo +Home-page: http://hcosta.info +Author: Hector Costa +Author-email: yo@hcosta.info +License: UNKNOWN +Description: UNKNOWN +Platform: UNKNOWN diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/SOURCES.txt" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/SOURCES.txt similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/SOURCES.txt" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/SOURCES.txt diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/dependency_links.txt" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/dependency_links.txt similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/dependency_links.txt" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/dependency_links.txt diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/top_level.txt" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/top_level.txt similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/Paquete.egg-info/top_level.txt" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/Paquete.egg-info/top_level.txt diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/dist/paquete-0.1.zip" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/dist/paquete-0.1.zip similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/dist/paquete-0.1.zip" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/dist/paquete-0.1.zip diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/otra/carpeta/script.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/otra/carpeta/script.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/otra/carpeta/script.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/otra/carpeta/script.py index d28d662..103f0e6 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/otra/carpeta/script.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/otra/carpeta/script.py @@ -1,5 +1,5 @@ -from paquete.hola.saludos import saludar -from paquete.adios.despedidas import Despedida - -saludar() +from paquete.hola.saludos import saludar +from paquete.adios.despedidas import Despedida + +saludar() Despedida() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__pycache__/__init__.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/__pycache__/__init__.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__pycache__/__init__.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/__pycache__/__init__.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__pycache__/saludos.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/__pycache__/saludos.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__pycache__/saludos.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/__pycache__/saludos.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/__init__.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/__init__.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/__init__.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/__init__.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/despedidas.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/despedidas.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/despedidas.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/__pycache__/despedidas.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py index 484d145..1fd35d6 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/adios/despedidas.py @@ -1,9 +1,9 @@ -# Este es un módulo con funciones que saludan - -def despedir(): - print("Adiós, me estoy despidiendo desde la función despedir() del módulo despedidas") - - -class Despedida(): - def __init__(self): +# Este es un módulo con funciones que saludan + +def despedir(): + print("Adiós, me estoy despidiendo desde la función despedir() del módulo despedidas") + + +class Despedida(): + def __init__(self): print("Adiós, me estoy despidiendo desde el __init__ de la clase Despedida") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/__init__.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/__init__.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/__init__.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/__init__.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/saludos.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/saludos.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/saludos.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/__pycache__/saludos.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/saludos.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/saludos.py similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/saludos.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/saludos.py index 47a8ac8..8579181 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/saludos.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/hola/saludos.py @@ -1,7 +1,7 @@ -# Este es un módulo con funciones que saludan -def saludar(): - print("Hola, te estoy saludando desde la función saludar() del módulo saludos") - -class Saludo(): - def __init__(self): +# Este es un módulo con funciones que saludan +def saludar(): + print("Hola, te estoy saludando desde la función saludar() del módulo saludos") + +class Saludo(): + def __init__(self): print("Hola, te estoy saludando desde el __init__ de la clase Saludo") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/saludos.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/saludos.py similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/saludos.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/saludos.py index 47a8ac8..8579181 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/saludos.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/saludos.py @@ -1,7 +1,7 @@ -# Este es un módulo con funciones que saludan -def saludar(): - print("Hola, te estoy saludando desde la función saludar() del módulo saludos") - -class Saludo(): - def __init__(self): +# Este es un módulo con funciones que saludan +def saludar(): + print("Hola, te estoy saludando desde la función saludar() del módulo saludos") + +class Saludo(): + def __init__(self): print("Hola, te estoy saludando desde el __init__ de la clase Saludo") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/setup.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/setup.py similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/setup.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/setup.py index 870d55c..1b06c44 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/setup.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/paquete/setup.py @@ -1,12 +1,12 @@ -from setuptools import setup, find_packages - -setup( - name="paquete", - version="0.1", - description="Este es un paquete de jemplo", - author="Hector Costa", - author_email="yo@hcosta.info", - url="http://hcosta.info", - packages=find_packages(), - scripts=[] +from setuptools import setup, find_packages + +setup( + name="paquete", + version="0.1", + description="Este es un paquete de jemplo", + author="Hector Costa", + author_email="yo@hcosta.info", + url="http://hcosta.info", + packages=find_packages(), + scripts=[] ) \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/script.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/script.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/script.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/script.py index d28d662..103f0e6 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/script.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/script.py @@ -1,5 +1,5 @@ -from paquete.hola.saludos import saludar -from paquete.adios.despedidas import Despedida - -saludar() +from paquete.hola.saludos import saludar +from paquete.adios.despedidas import Despedida + +saludar() Despedida() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/setup.py" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/setup.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/setup.py" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/setup.py index fcdd071..1c4d7a3 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/setup.py" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 02 (Apuntes) - Paquetes/setup.py @@ -1,11 +1,11 @@ -from setuptools import setup - -setup( - name="paquete", - version="0.1", - description="Este es un paquete de jemplo", - author="Hector Costa", - author_email="yo@hcosta.info", - url="http://hcosta.info", - packages=['paquete','paquete.hola','paquete.adios'] +from setuptools import setup + +setup( + name="paquete", + version="0.1", + description="Este es un paquete de jemplo", + author="Hector Costa", + author_email="yo@hcosta.info", + url="http://hcosta.info", + packages=['paquete','paquete.hola','paquete.adios'] ) \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 04 (Apuntes) - Collections.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 04 (Apuntes) - Collections.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 04 (Apuntes) - Collections.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 04 (Apuntes) - Collections.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 05 (Apuntes) - Datetime.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 05 (Apuntes) - Datetime.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 05 (Apuntes) - Datetime.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 05 (Apuntes) - Datetime.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 06 (Apuntes) - Math.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 06 (Apuntes) - Math.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 06 (Apuntes) - Math.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 06 (Apuntes) - Math.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 07 (Apuntes) - Random.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 07 (Apuntes) - Random.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 07 (Apuntes) - Random.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Apuntes/Leccion 07 (Apuntes) - Random.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Enunciados.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Enunciados.ipynb similarity index 82% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Enunciados.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Enunciados.ipynb index 3401e90..b055c37 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Enunciados.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Enunciados.ipynb @@ -23,7 +23,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Una vez creado el módulo, crea un script calculos.py en el mismo directorio en el que deberás importar el módulo y realizar las siguientes instrucciones. Observa si el comportamiento es el esperado:**\n", + "**Una vez creado el módulo, crea un script calculos.py en el mismo directorio en el que deberás importar \n", + "el módulo y realizar las siguientes instrucciones. Observa si el comportamiento es el esperado:**\n", "\n", "```python\n", "from operaciones import * \n", @@ -37,6 +38,22 @@ "```" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### operaciones.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Completa el ejercicio aquí" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -46,6 +63,22 @@ "*Ayudas: El módulo **time** integra una función llamada **sleep(segundos)** que puede pausar la ejecución de un programa durante un tiempo. Así mismo el módulo **os** integra la función **system('cls')** y **system('clear')** para limpiar la pantalla de la terminal en sistemas Windows y Linux/Unix respecticamente.*" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### reloj.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Completa el ejercicio aquí" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -66,14 +99,30 @@ "\n", "*Nota: Recuerda que el redondeo tradicional round() no requiere ningún módulo.*" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### generador.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Completa el ejercicio aquí" + ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -85,9 +134,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Soluciones.ipynb" b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Soluciones.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Soluciones.ipynb" rename to Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Soluciones.ipynb index 930b6f3..706b4a9 100644 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Ejercicios/Soluciones.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Ejercicios/Soluciones.ipynb @@ -260,9 +260,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 01 - Modulos.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 01 - Modulos.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 01 - Modulos.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 02 - Paquetes.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 02 - Paquetes.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 02 - Paquetes.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 04 - Collections.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 04 - Collections.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 04 - Collections.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 05 - Datetime.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 05 - Datetime.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 05 - Datetime.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 06 - Math.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 06 - Math.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 06 - Math.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 07 - Random.ipynb b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 07 - Random.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 11 - Modulos/Leccion 07 - Random.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/test/script.py" "b/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/test/script.py" deleted file mode 100644 index 0e37860..0000000 --- "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 01 (Apuntes) - Modulos/test/script.py" +++ /dev/null @@ -1,6 +0,0 @@ -import sys -sys.path.insert(1,'..') -print(sys.path) - -from saludos import * -s = Saludo() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 02 (Apuntes) - Ficheros de texto.ipynb" b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 02 (Apuntes) - Ficheros de texto.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 02 (Apuntes) - Ficheros de texto.ipynb" rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 02 (Apuntes) - Ficheros de texto.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 03 (Apuntes) - Ficheros y objetos con Pickle.ipynb" b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 03 (Apuntes) - Ficheros y objetos con Pickle.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 03 (Apuntes) - Ficheros y objetos con Pickle.ipynb" rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 03 (Apuntes) - Ficheros y objetos con Pickle.ipynb diff --git "a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 04 (Apuntes) - Cat\303\241logo de pel\303\255culas persistente.ipynb" b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 04 (Apuntes) - Catalogo de peliculas persistente.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Lecci\303\263n 04 (Apuntes) - Cat\303\241logo de pel\303\255culas persistente.ipynb" rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/Leccion 04 (Apuntes) - Catalogo de peliculas persistente.ipynb diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/catalogo.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/catalogo.pckl similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/catalogo.pckl rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/catalogo.pckl diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/catalogo.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/catalogo.txt similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/catalogo.txt rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/catalogo.txt diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero.txt new file mode 100644 index 0000000..3b0a039 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero.txt @@ -0,0 +1,4 @@ +Una lnea con texto +Otra lnea con texto +Otra lnea ms con texto +Cuarta lnea del fichero \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero2.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero2.txt new file mode 100644 index 0000000..860a80e --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/fichero2.txt @@ -0,0 +1,4 @@ +asdfgh1 +Lnea 2 +Esta es la lnea 3 modificada +Lnea 4 \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/lista.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/lista.pckl similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/lista.pckl rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/lista.pckl diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/personas.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/personas.pckl similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/personas.pckl rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Apuntes/personas.pckl diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.pckl new file mode 100644 index 0000000..06b1cfc Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.pckl differ diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.txt new file mode 100644 index 0000000..6afadc3 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/catalogo.txt differ diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero.txt similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero.txt rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero.txt diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero2.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero2.txt similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero2.txt rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero2.txt diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero_inventado.txt b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero_inventado.txt similarity index 100% rename from Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/fichero_inventado.txt rename to Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/fichero_inventado.txt diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/lista.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/lista.pckl new file mode 100644 index 0000000..a000a1e Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/lista.pckl differ diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/personas.pckl b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/personas.pckl new file mode 100644 index 0000000..f08a138 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Archivos/personas.pckl differ diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Enunciados.ipynb b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Enunciados.ipynb index e114f5e..668d6cb 100644 --- a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Enunciados.ipynb +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Enunciados.ipynb @@ -93,9 +93,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Soluciones.ipynb b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Soluciones.ipynb index ef67de3..d547fbd 100644 --- a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Soluciones.ipynb +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Ejercicios/Soluciones.ipynb @@ -287,9 +287,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 02 - Ficheros de texto.ipynb b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 02 - Ficheros de texto.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 02 - Ficheros de texto.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 03 - Ficheros y objetos con Pickle.ipynb b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 03 - Ficheros y objetos con Pickle.ipynb new file mode 100644 index 0000000..f582c06 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 03 - Ficheros y objetos con Pickle.ipynb @@ -0,0 +1,34 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 04 - Catalogo de peliculas persistente.ipynb b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 04 - Catalogo de peliculas persistente.ipynb new file mode 100644 index 0000000..868fa58 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 12 - Manejo de ficheros/Leccion 04 - Catalogo de peliculas persistente.ipynb @@ -0,0 +1,65 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from io import open\n", + "import pickle\n", + "\n", + "class Pelicula:\n", + " \n", + " # Constructor de clase\n", + " def __init__(self, titulo, duracion, lanzamiento):\n", + " self.titulo = titulo\n", + " self.duracion = duracion\n", + " self.lanzamiento = lanzamiento\n", + " print('Se ha creado la película:',self.titulo)\n", + " \n", + " def __str__(self):\n", + " return '{} ({})'.format(self.titulo, self.lanzamiento)\n", + "\n", + "\n", + "class Catalogo:\n", + " \n", + " peliculas = []\n", + " \n", + " # Constructor de clase\n", + " def __init__(self, peliculas=[]):\n", + " self.peliculas = peliculas\n", + " \n", + " def agregar(self,p):\n", + " self.peliculas.append(p)\n", + " \n", + " def mostrar(self):\n", + " for p in self.peliculas:\n", + " print(p)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/button.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/button.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/button.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/button.py index aadf084..5e52fd0 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/button.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/button.py @@ -1,40 +1,40 @@ -from tkinter import * - -def sumar(): - r.set( float(n1.get()) + float(n2.get()) ) - borrar() - -def resta(): - r.set( float(n1.get()) - float(n2.get()) ) - borrar() - -def producto(): - r.set( float(n1.get()) * float(n2.get()) ) - borrar() - -def borrar(): - n1.set("") - n2.set("") - -# Configuración de la raíz -root = Tk() -root.config(bd=15) - -n1 = StringVar() -n2 = StringVar() -r = StringVar() - -Label(root, text="Número 1").pack() -Entry(root, justify="center", textvariable=n1).pack() # primer numero -Label(root, text="Número 2").pack() -Entry(root, justify="center", textvariable=n2).pack() # segundo numero -Label(root, text="Resultado").pack() -Entry(root, justify="center", textvariable=r, state="disabled").pack() # resultado -Label(root, text="").pack() -Button(root, text="Sumar", command=sumar).pack(side="left") -Button(root, text="Resta", command=resta).pack(side="left") -Button(root, text="Producto", command=producto).pack(side="left") - - -# Finalmente bucle de la apliación +from tkinter import * + +def sumar(): + r.set( float(n1.get()) + float(n2.get()) ) + borrar() + +def resta(): + r.set( float(n1.get()) - float(n2.get()) ) + borrar() + +def producto(): + r.set( float(n1.get()) * float(n2.get()) ) + borrar() + +def borrar(): + n1.set("") + n2.set("") + +# Configuración de la raíz +root = Tk() +root.config(bd=15) + +n1 = StringVar() +n2 = StringVar() +r = StringVar() + +Label(root, text="Número 1").pack() +Entry(root, justify="center", textvariable=n1).pack() # primer numero +Label(root, text="Número 2").pack() +Entry(root, justify="center", textvariable=n2).pack() # segundo numero +Label(root, text="Resultado").pack() +Entry(root, justify="center", textvariable=r, state="disabled").pack() # resultado +Label(root, text="").pack() +Button(root, text="Sumar", command=sumar).pack(side="left") +Button(root, text="Resta", command=resta).pack(side="left") +Button(root, text="Producto", command=producto).pack(side="left") + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/checkbutton.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/checkbutton.py similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/checkbutton.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/checkbutton.py index 52abd26..a19e647 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/checkbutton.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/checkbutton.py @@ -1,41 +1,41 @@ -from tkinter import * - -def seleccionar(): - cadena = "" - if (leche.get()): - cadena += "Con leche" - else: - cadena += "Sin leche" - - if (azucar.get()): - cadena += " y con azúcar" - else: - cadena += " y sin azúcar" - - monitor.config(text=cadena) - -# Configuración de la raíz -root = Tk() -root.title("Cafetería") -root.config(bd=15) - - -leche = IntVar() # 1 si, 0 no -azucar = IntVar() # 1 si, 0 no - -imagen = PhotoImage(file="imagen.gif") -Label(root, image=imagen).pack(side="left") - -frame = Frame(root) -frame.pack(side="left") - -Label(frame, text="¿Cómo quieres el café?").pack(anchor="w") -Checkbutton(frame, text="Con leche", variable=leche, onvalue=1, offvalue=0, command=seleccionar).pack(anchor="w") -Checkbutton(frame, text="Con azúcar", variable=azucar, onvalue=1, offvalue=0, command=seleccionar).pack(anchor="w") - -monitor = Label(frame) -monitor.pack() - - -# Finalmente bucle de la apliación +from tkinter import * + +def seleccionar(): + cadena = "" + if (leche.get()): + cadena += "Con leche" + else: + cadena += "Sin leche" + + if (azucar.get()): + cadena += " y con azúcar" + else: + cadena += " y sin azúcar" + + monitor.config(text=cadena) + +# Configuración de la raíz +root = Tk() +root.title("Cafetería") +root.config(bd=15) + + +leche = IntVar() # 1 si, 0 no +azucar = IntVar() # 1 si, 0 no + +imagen = PhotoImage(file="imagen.gif") +Label(root, image=imagen).pack(side="left") + +frame = Frame(root) +frame.pack(side="left") + +Label(frame, text="¿Cómo quieres el café?").pack(anchor="w") +Checkbutton(frame, text="Con leche", variable=leche, onvalue=1, offvalue=0, command=seleccionar).pack(anchor="w") +Checkbutton(frame, text="Con azúcar", variable=azucar, onvalue=1, offvalue=0, command=seleccionar).pack(anchor="w") + +monitor = Label(frame) +monitor.pack() + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/editor.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/editor.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/editor.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/editor.py index 07bfc0d..d14350d 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/editor.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/editor.py @@ -1,88 +1,88 @@ -from tkinter import * -from tkinter import filedialog as FileDialog -from io import open - -ruta = "" # La utilizaremos para almacenar la ruta del fichero - -def nuevo(): - global ruta - mensaje.set("Nuevo fichero") - ruta = "" - texto.delete(1.0, "end") - root.title("Mi editor") - -def abrir(): - global ruta - mensaje.set("Abrir fichero") - ruta = FileDialog.askopenfilename( - initialdir='.', - filetype=(("Ficheros de texto", "*.txt"),), - title="Abrir un fichero de texto") - - if ruta != "": - fichero = open(ruta, 'r') - contenido = fichero.read() - texto.delete(1.0,'end') - texto.insert('insert', contenido) - fichero.close() - root.title(ruta + " - Mi editor") - - -def guardar(): - mensaje.set("Guardar fichero") - if ruta != "": - contenido = texto.get(1.0,'end-1c') - fichero = open(ruta, 'w+') - fichero.write(contenido) - fichero.close() - mensaje.set("Fichero guardado correctamente") - else: - guardar_como() - -def guardar_como(): - global ruta - mensaje.set("Guardar fichero como") - fichero = FileDialog.asksaveasfile(title="Guardar fichero", mode="w", defaultextension=".txt") - if fichero is not None: - ruta = fichero.name - contenido = texto.get(1.0,'end-1c') - fichero = open(ruta, 'w+') - fichero.write(contenido) - fichero.close() - mensaje.set("Fichero guardado correctamente") - else: - mensaje.set("Guardado cancelado") - ruta = "" - - -# Configuración de la raíz -root = Tk() -root.title("Mi editor") - - -# Menú superior -menubar = Menu(root) -filemenu = Menu(menubar, tearoff=0) -filemenu.add_command(label="Nuevo", command=nuevo) -filemenu.add_command(label="Abrir", command=abrir) -filemenu.add_command(label="Guardar", command=guardar) -filemenu.add_command(label="Guardar como", command=guardar_como) -filemenu.add_separator() -filemenu.add_command(label="Salir", command=root.quit) -menubar.add_cascade(menu=filemenu, label="Archivo") - -# Caja de texto central -texto = Text(root) -texto.pack(fill="both", expand=1) -texto.config(bd=0, padx=6, pady=4, font=("Consolas",12)) - -# Monitor inferior -mensaje = StringVar() -mensaje.set("Bienvenido a tu Editor") -monitor = Label(root, textvar=mensaje, justify='left') -monitor.pack(side="left") - - -root.config(menu=menubar) -# Finalmente bucle de la apliación +from tkinter import * +from tkinter import filedialog as FileDialog +from io import open + +ruta = "" # La utilizaremos para almacenar la ruta del fichero + +def nuevo(): + global ruta + mensaje.set("Nuevo fichero") + ruta = "" + texto.delete(1.0, "end") + root.title("Mi editor") + +def abrir(): + global ruta + mensaje.set("Abrir fichero") + ruta = FileDialog.askopenfilename( + initialdir='.', + filetype=(("Ficheros de texto", "*.txt"),), + title="Abrir un fichero de texto") + + if ruta != "": + fichero = open(ruta, 'r') + contenido = fichero.read() + texto.delete(1.0,'end') + texto.insert('insert', contenido) + fichero.close() + root.title(ruta + " - Mi editor") + + +def guardar(): + mensaje.set("Guardar fichero") + if ruta != "": + contenido = texto.get(1.0,'end-1c') + fichero = open(ruta, 'w+') + fichero.write(contenido) + fichero.close() + mensaje.set("Fichero guardado correctamente") + else: + guardar_como() + +def guardar_como(): + global ruta + mensaje.set("Guardar fichero como") + fichero = FileDialog.asksaveasfile(title="Guardar fichero", mode="w", defaultextension=".txt") + if fichero is not None: + ruta = fichero.name + contenido = texto.get(1.0,'end-1c') + fichero = open(ruta, 'w+') + fichero.write(contenido) + fichero.close() + mensaje.set("Fichero guardado correctamente") + else: + mensaje.set("Guardado cancelado") + ruta = "" + + +# Configuración de la raíz +root = Tk() +root.title("Mi editor") + + +# Menú superior +menubar = Menu(root) +filemenu = Menu(menubar, tearoff=0) +filemenu.add_command(label="Nuevo", command=nuevo) +filemenu.add_command(label="Abrir", command=abrir) +filemenu.add_command(label="Guardar", command=guardar) +filemenu.add_command(label="Guardar como", command=guardar_como) +filemenu.add_separator() +filemenu.add_command(label="Salir", command=root.quit) +menubar.add_cascade(menu=filemenu, label="Archivo") + +# Caja de texto central +texto = Text(root) +texto.pack(fill="both", expand=1) +texto.config(bd=0, padx=6, pady=4, font=("Consolas",12)) + +# Monitor inferior +mensaje = StringVar() +mensaje.set("Bienvenido a tu Editor") +monitor = Label(root, textvar=mensaje, justify='left') +monitor.pack(side="left") + + +root.config(menu=menubar) +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/entry.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/entry.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/entry.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/entry.py index 88117e5..520b56f 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/entry.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/entry.py @@ -1,22 +1,22 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() - -label = Label(root, text="Nombre muy largo") -label.grid(row=0, column=0, sticky="w", padx=5, pady=5) - -entry = Entry(root) -entry.grid(row=0, column=1, padx=5, pady=5) -entry.config(justify="right", state="normal") - -label2 = Label(root, text="Contraseña") -label2.grid(row=1, column=0, sticky="w", padx=5, pady=5) - -entry2 = Entry(root) -entry2.grid(row=1, column=1, padx=5, pady=5) -entry2.config(justify="center", show="?") - - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() + +label = Label(root, text="Nombre muy largo") +label.grid(row=0, column=0, sticky="w", padx=5, pady=5) + +entry = Entry(root) +entry.grid(row=0, column=1, padx=5, pady=5) +entry.config(justify="right", state="normal") + +label2 = Label(root, text="Contraseña") +label2.grid(row=1, column=0, sticky="w", padx=5, pady=5) + +entry2 = Entry(root) +entry2.grid(row=1, column=1, padx=5, pady=5) +entry2.config(justify="center", show="?") + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/frame.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/frame.py similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/frame.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/frame.py index 870627c..fb273c9 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/frame.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/frame.py @@ -1,25 +1,25 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() -root.title("Hola mundo") -root.resizable(1,1) -root.iconbitmap('hola.ico') - - -frame = Frame(root, width=480, height=320) -frame.pack(fill='both', expand=1) -frame.config(cursor="pirate") -frame.config(bg="lightblue") -frame.config(bd=25) -frame.config(relief="sunken") - - -root.config(cursor="arrow") -root.config(bg="blue") -root.config(bd=15) -root.config(relief="ridge") - - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() +root.title("Hola mundo") +root.resizable(1,1) +root.iconbitmap('hola.ico') + + +frame = Frame(root, width=480, height=320) +frame.pack(fill='both', expand=1) +frame.config(cursor="pirate") +frame.config(bg="lightblue") +frame.config(bd=25) +frame.config(relief="sunken") + + +root.config(cursor="arrow") +root.config(bg="blue") +root.config(bd=15) +root.config(relief="ridge") + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/hola.ico" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/hola.ico similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/hola.ico" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/hola.ico diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/imagen.gif" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/imagen.gif similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/imagen.gif" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/imagen.gif diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/label.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/label.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/label.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/label.py index 2e7cd4a..c80cab4 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/label.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/label.py @@ -1,23 +1,23 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() -""" -# Variables dinámicas -texto = StringVar() -texto.set("Un nuevo texto") - -Label(root, text="¡Hola mundo!").pack(anchor="nw") -label = Label(root, text="¡Otra etiqueta!") -label.pack(anchor="center") -Label(root, text="¡Última etiqueta!").pack(anchor="se") - -label.config(bg="green", fg="blue", font=("Verdana",24)) -label.config(textvariable=texto) -""" - -imagen = PhotoImage(file="imagen.gif") -Label(root, image=imagen, bd=0).pack(side="left") - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() +""" +# Variables dinámicas +texto = StringVar() +texto.set("Un nuevo texto") + +Label(root, text="¡Hola mundo!").pack(anchor="nw") +label = Label(root, text="¡Otra etiqueta!") +label.pack(anchor="center") +Label(root, text="¡Última etiqueta!").pack(anchor="se") + +label.config(bg="green", fg="blue", font=("Verdana",24)) +label.config(textvariable=texto) +""" + +imagen = PhotoImage(file="imagen.gif") +Label(root, image=imagen, bd=0).pack(side="left") + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/menu.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/menu.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/menu.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/menu.py index ee7266a..bb54ca3 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/menu.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/menu.py @@ -1,34 +1,34 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() - -menubar = Menu(root) -root.config(menu=menubar) - -filemenu = Menu(menubar, tearoff=0) -filemenu.add_command(label="Nuevo") -filemenu.add_command(label="Abrir") -filemenu.add_command(label="Guardar") -filemenu.add_command(label="Cerrar") -filemenu.add_separator() -filemenu.add_command(label="Salir", command=root.quit) - -editmenu = Menu(menubar, tearoff=0) -editmenu.add_command(label="Cortar") -editmenu.add_command(label="Copiar") -editmenu.add_command(label="Pegar") - - -helpmenu = Menu(menubar, tearoff=0) -helpmenu.add_command(label="Ayuda") -helpmenu.add_separator() -helpmenu.add_command(label="Acerca de...") - - -menubar.add_cascade(label="Archivo", menu=filemenu) -menubar.add_cascade(label="Editar", menu=editmenu) -menubar.add_cascade(label="Ayuda", menu=helpmenu) - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() + +menubar = Menu(root) +root.config(menu=menubar) + +filemenu = Menu(menubar, tearoff=0) +filemenu.add_command(label="Nuevo") +filemenu.add_command(label="Abrir") +filemenu.add_command(label="Guardar") +filemenu.add_command(label="Cerrar") +filemenu.add_separator() +filemenu.add_command(label="Salir", command=root.quit) + +editmenu = Menu(menubar, tearoff=0) +editmenu.add_command(label="Cortar") +editmenu.add_command(label="Copiar") +editmenu.add_command(label="Pegar") + + +helpmenu = Menu(menubar, tearoff=0) +helpmenu.add_command(label="Ayuda") +helpmenu.add_separator() +helpmenu.add_command(label="Acerca de...") + + +menubar.add_cascade(label="Archivo", menu=filemenu) +menubar.add_cascade(label="Editar", menu=editmenu) +menubar.add_cascade(label="Ayuda", menu=helpmenu) + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/p3.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/p3.txt similarity index 91% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/p3.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/p3.txt index a563a47..a1d4271 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/p3.txt" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/p3.txt @@ -1,6 +1,6 @@ -dfdfdf -df -df -dfdfdfdfdf - +dfdfdf +df +df +dfdfdfdfdf + hola cara de cola xD kjdfkdjfkd \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/popups.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/popups.py similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/popups.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/popups.py index 54e2a49..73fc7b6 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/popups.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/popups.py @@ -1,42 +1,42 @@ -from tkinter import * -from tkinter import messagebox as MessageBox -from tkinter import colorchooser as ColorChooser -from tkinter import filedialog as FileDialog - -# Configuración de la raíz -root = Tk() - - -def test(): - # MessageBox.showinfo("Hola!","Hola mundo") - # MessageBox.showwarning("Alerta","Sección sólo para administradores.") - # MessageBox.showerror("Error!","Ha ocurrido un error inesperado.") - # resultado = MessageBox.askquestion("Salir","¿Está seguro que desea salir sin guardar?") - # if resultado == "yes": # "no" - # root.destroy() - # resultado = MessageBox.askokcancel("Salir","¿Sobreescribir el fichero actual?") - # resultado = MessageBox.askyesno("Salir","¿Está seguro que desea salir sin guardar?") - #if resultado: - # root.destroy() - #resultado = MessageBox.askretrycancel("Reintentar","No se puede conectar") - #if resultado: - # root.destroy() - #color = ColorChooser.askcolor(title="Elige un color") - #print(color) - #ruta = FileDialog.askopenfilename(title="Abrir un fichero", initialdir="C:", - # filetypes=(("Fichero de texto","*.txt"), - # ("Fichero de texto avanzado","*.txt2"), - # ("Todos los ficheros","*.*")) ) - #print(ruta) - # equivale a open('ruta','w') - fichero = FileDialog.asksaveasfile(title="Guardar un fichero", mode="w", defaultextension=".txt") - if fichero is not None: - fichero.write("Hola voy a escribir otra cosa!") - fichero.close() - - -Button(root, text="Clícame", command=test).pack() - - -# Finalmente bucle de la apliación +from tkinter import * +from tkinter import messagebox as MessageBox +from tkinter import colorchooser as ColorChooser +from tkinter import filedialog as FileDialog + +# Configuración de la raíz +root = Tk() + + +def test(): + # MessageBox.showinfo("Hola!","Hola mundo") + # MessageBox.showwarning("Alerta","Sección sólo para administradores.") + # MessageBox.showerror("Error!","Ha ocurrido un error inesperado.") + # resultado = MessageBox.askquestion("Salir","¿Está seguro que desea salir sin guardar?") + # if resultado == "yes": # "no" + # root.destroy() + # resultado = MessageBox.askokcancel("Salir","¿Sobreescribir el fichero actual?") + # resultado = MessageBox.askyesno("Salir","¿Está seguro que desea salir sin guardar?") + #if resultado: + # root.destroy() + #resultado = MessageBox.askretrycancel("Reintentar","No se puede conectar") + #if resultado: + # root.destroy() + #color = ColorChooser.askcolor(title="Elige un color") + #print(color) + #ruta = FileDialog.askopenfilename(title="Abrir un fichero", initialdir="C:", + # filetypes=(("Fichero de texto","*.txt"), + # ("Fichero de texto avanzado","*.txt2"), + # ("Todos los ficheros","*.*")) ) + #print(ruta) + # equivale a open('ruta','w') + fichero = FileDialog.asksaveasfile(title="Guardar un fichero", mode="w", defaultextension=".txt") + if fichero is not None: + fichero.write("Hola voy a escribir otra cosa!") + fichero.close() + + +Button(root, text="Clícame", command=test).pack() + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba 2.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba 2.txt similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba 2.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba 2.txt diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba.txt similarity index 90% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba.txt index eb77969..4b441a0 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba.txt" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba.txt @@ -1,6 +1,6 @@ -dfdfdf -df -df -dfdfdfdfdf - +dfdfdf +df +df +dfdfdfdfdf + hola cara de cola xD \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba3.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba3.txt similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba3.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba3.txt index b22c041..8452d33 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/prueba3.txt" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/prueba3.txt @@ -1,5 +1,5 @@ -Hola voy a escribir otra cosa! -Esto es otra lnea que escribo aqu. -Y otra ms. -dskjskdjsakjd +Hola voy a escribir otra cosa! +Esto es otra lnea que escribo aqu. +Y otra ms. +dskjskdjsakjd sadkjsadkjsakdj skdjskdjak skdjskdjs \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/radiobuttons.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/radiobuttons.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/radiobuttons.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/radiobuttons.py index f3fc2c5..548cb7c 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/radiobuttons.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/radiobuttons.py @@ -1,25 +1,25 @@ -from tkinter import * - -def seleccionar(): - monitor.config(text="{}".format(opcion.get())) - -def reset(): - opcion.set(None) - monitor.config(text="") - -# Configuración de la raíz -root = Tk() - -opcion = IntVar() - -Radiobutton(root, text="Opción 1", variable=opcion, value=1, command=seleccionar).pack() -Radiobutton(root, text="Opción 2", variable=opcion, value=2, command=seleccionar).pack() -Radiobutton(root, text="Opción 3", variable=opcion, value=3, command=seleccionar).pack() - -monitor = Label(root) -monitor.pack() - -Button(root, text="Reiniciar", command=reset).pack() - -# Finalmente bucle de la apliación +from tkinter import * + +def seleccionar(): + monitor.config(text="{}".format(opcion.get())) + +def reset(): + opcion.set(None) + monitor.config(text="") + +# Configuración de la raíz +root = Tk() + +opcion = IntVar() + +Radiobutton(root, text="Opción 1", variable=opcion, value=1, command=seleccionar).pack() +Radiobutton(root, text="Opción 2", variable=opcion, value=2, command=seleccionar).pack() +Radiobutton(root, text="Opción 3", variable=opcion, value=3, command=seleccionar).pack() + +monitor = Label(root) +monitor.pack() + +Button(root, text="Reiniciar", command=reset).pack() + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test.py diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test.txt similarity index 94% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test.txt index ff59a21..831ca9d 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test.txt" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test.txt @@ -1,5 +1,5 @@ -dfdfdsfsdfdsf -dsfdsfdsfsdf -dsfdf -sadjsahdjhsadjhsadj +dfdfdsfsdfdsf +dsfdsfdsfsdf +dsfdf +sadjsahdjhsadjhsadj sadjhsadjhsajd \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test2.txt" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test2.txt similarity index 94% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test2.txt" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test2.txt index ff59a21..831ca9d 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/test2.txt" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/test2.txt @@ -1,5 +1,5 @@ -dfdfdsfsdfdsf -dsfdsfdsfsdf -dsfdf -sadjsahdjhsadjhsadj +dfdfdsfsdfdsf +dsfdsfdsfsdf +dsfdf +sadjsahdjhsadjhsadj sadjhsadjhsajd \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/text.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/text.py similarity index 95% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/text.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/text.py index ccdca34..5a607d1 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/text.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/text.py @@ -1,13 +1,13 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() - - -texto = Text(root) -texto.pack() -texto.config(width=30, height=10, font=("Consolas",12), padx=15, pady=15, selectbackground="red") - - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() + + +texto = Text(root) +texto.pack() +texto.config(width=30, height=10, font=("Consolas",12), padx=15, pady=15, selectbackground="red") + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/tk.py" b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/tk.py similarity index 94% rename from "Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/tk.py" rename to Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/tk.py index b7e8f9d..ee6a31f 100644 --- "a/Fase 4 - Temas avanzados/Tema 13 - Interfaces gr\303\241ficas con tkinter/tk.py" +++ b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/Apuntes/tk.py @@ -1,13 +1,13 @@ -from tkinter import * - -# Configuración de la raíz -root = Tk() -root.title("Hola mundo") -root.resizable(1,1) -root.iconbitmap('hola.ico') - - - - -# Finalmente bucle de la apliación +from tkinter import * + +# Configuración de la raíz +root = Tk() +root.title("Hola mundo") +root.resizable(1,1) +root.iconbitmap('hola.ico') + + + + +# Finalmente bucle de la apliación root.mainloop() \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/hola.ico b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/hola.ico new file mode 100644 index 0000000..dbbcafe Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/hola.ico differ diff --git a/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/imagen.gif b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/imagen.gif new file mode 100644 index 0000000..26da1f5 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 13 - Interfaces graficas con tkinter/imagen.gif differ diff --git "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 01 (Apuntes) - Conexion, puntero y consultas b\303\241sicas.ipynb" b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 01 (Apuntes) - Conexion, puntero y consultas basicas.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 01 (Apuntes) - Conexion, puntero y consultas b\303\241sicas.ipynb" rename to Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 01 (Apuntes) - Conexion, puntero y consultas basicas.ipynb index fbde751..9a257ec 100644 --- "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 01 (Apuntes) - Conexion, puntero y consultas b\303\241sicas.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 01 (Apuntes) - Conexion, puntero y consultas basicas.ipynb @@ -241,9 +241,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 02 (Apuntes) - Claves primarias, campos autoincrementales y claves \303\272nicas.ipynb" b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 02 (Apuntes) - Claves primarias, campos autoincrementales y claves unicas.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 02 (Apuntes) - Claves primarias, campos autoincrementales y claves \303\272nicas.ipynb" rename to Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 02 (Apuntes) - Claves primarias, campos autoincrementales y claves unicas.ipynb index f4816a5..f534b5e 100644 --- "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 02 (Apuntes) - Claves primarias, campos autoincrementales y claves \303\272nicas.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 02 (Apuntes) - Claves primarias, campos autoincrementales y claves unicas.ipynb @@ -383,9 +383,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 03 (Apuntes) - Consultas, modificaci\303\263n y borrado registros.ipynb" b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 03 (Apuntes) - Consultas, modificacion y borrado registros.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 03 (Apuntes) - Consultas, modificaci\303\263n y borrado registros.ipynb" rename to Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 03 (Apuntes) - Consultas, modificacion y borrado registros.ipynb index dbee7f0..fadae64 100644 --- "a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Lecci\303\263n 03 (Apuntes) - Consultas, modificaci\303\263n y borrado registros.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Apuntes/Leccion 03 (Apuntes) - Consultas, modificacion y borrado registros.ipynb @@ -253,9 +253,9 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python [default]", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { diff --git a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/Enunciados.ipynb b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/Enunciados.ipynb index bfdfefe..5e3073b 100644 --- a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/Enunciados.ipynb +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/Enunciados.ipynb @@ -71,16 +71,23 @@ "\n", "### Ejemplo\n", "\n", - "![](menu.png)" + "![](./images/menu.png)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [Root]", + "display_name": "Python 3", "language": "python", - "name": "Python [Root]" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -92,9 +99,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.1" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/menu.png b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/images/menu.png similarity index 100% rename from Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/menu.png rename to Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/images/menu.png diff --git a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/menu_final.py b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/menu_final.py new file mode 100644 index 0000000..c9a3ce7 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/menu_final.py @@ -0,0 +1,37 @@ +import sqlite3 +from tkinter import * + +# Configuración de la raíz +root = Tk() +root.title("Bar Don Costa - Menú") +root.resizable(0,0) +root.config(bd=25, relief="sunken") + +Label(root, text=" Bar Don Costa ", fg="darkgreen", font=("Times New Roman",28,"bold italic")).pack() +Label(root, text="Menú del día", fg="green", font=("Times New Roman",24,"bold italic")).pack() + +# Separación de títulos y categorias +Label(root, text="").pack() + +conexion = sqlite3.connect("restaurante_final.db") +cursor = conexion.cursor() + +# Buscar las categorías y platos de la bd +categorias = cursor.execute("SELECT * FROM categoria").fetchall() +for categoria in categorias: + Label(root, text=categoria[1], fg="black", font=("Times New Roman",20,"bold italic")).pack() + + platos = cursor.execute("SELECT * FROM plato WHERE categoria_id={}".format(categoria[0])).fetchall() + for plato in platos: + Label(root, text=plato[1], fg="gray", font=("Verdana",15,"italic")).pack() + + # Separación entre categorias + Label(root, text="").pack() + +conexion.close() + +# Precio del menú +Label(root, text="12€ (IVA incl.)", fg="darkgreen", font=("Times New Roman",20,"bold italic")).pack(side="right") + +# Finalmente ejecutamos el bucle +root.mainloop() \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.db b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.db new file mode 100644 index 0000000..7f30839 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.db differ diff --git a/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.py b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.py new file mode 100644 index 0000000..1debe86 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 14 - Bases de datos con SQLite/Ejercicios/restaurante_final.py @@ -0,0 +1,112 @@ +import sqlite3 + +def crear_bd(): + conexion = sqlite3.connect("restaurante_final.db") + cursor = conexion.cursor() + + try: + cursor.execute('''CREATE TABLE categoria( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nombre VARCHAR(100) UNIQUE NOT NULL)''') + except sqlite3.OperationalError: + print("La tabla de Categorías ya existe.") + else: + print("La tabla de Categorías se ha creado correctamente.") + + + try: + cursor.execute('''CREATE TABLE plato( + id INTEGER PRIMARY KEY AUTOINCREMENT, + nombre VARCHAR(100) UNIQUE NOT NULL, + categoria_id INTEGER NOT NULL, + FOREIGN KEY(categoria_id) REFERENCES categoria(id))''') + except sqlite3.OperationalError: + print("La tabla de Platos ya existe.") + else: + print("La tabla de Platos se ha creado correctamente.") + + + conexion.close() + + +def agregar_categoria(): + categoria = input("¿Nombre de la nueva categoría?\n> ") + + conexion = sqlite3.connect("restaurante_final.db") + cursor = conexion.cursor() + + try: + cursor.execute("INSERT INTO categoria VALUES (null, '{}')".format(categoria) ) + except sqlite3.IntegrityError: + print("La categoría '{}' ya existe.".format(categoria)) + else: + print("Categoría '{}' creada correctamente.".format(categoria)) + + conexion.commit() + conexion.close() + + +def agregar_plato(): + + conexion = sqlite3.connect("restaurante_final.db") + cursor = conexion.cursor() + + categorias = cursor.execute("SELECT * FROM categoria").fetchall() + print("Selecciona una categoría para añadir el plato:") + for categoria in categorias: + print("[{}] {}".format(categoria[0], categoria[1])) + + categoria_usuario = int(input("> ")) + + plato = input("¿Nombre del nuevo plato?\n> ") + + try: + cursor.execute("INSERT INTO plato VALUES (null, '{}', {})".format(plato, categoria_usuario) ) + except sqlite3.IntegrityError: + print("El plato '{}' ya existe.".format(plato)) + else: + print("Plato '{}' creado correctamente.".format(plato)) + + + conexion.commit() + conexion.close() + + +def mostrar_menu(): + + conexion = sqlite3.connect("restaurante_final.db") + cursor = conexion.cursor() + + categorias = cursor.execute("SELECT * FROM categoria").fetchall() + for categoria in categorias: + print(categoria[1]) + platos = cursor.execute("SELECT * FROM plato WHERE categoria_id={}".format(categoria[0])).fetchall() + for plato in platos: + print("\t{}".format(plato[1])) + + conexion.close() + + +# Crear la base de datos +crear_bd() + +# Menú de opciones del programa +while True: + print("\nBienvenido al gestor del restaurante!") + opcion = input("\nIntroduce una opción:\n[1] Agregar una categoría\n[2] Agregar un plato\n[3] Mostrar el menú\n[4] Salir del programa\n\n> ") + + if opcion == "1": + agregar_categoria() + + elif opcion == "2": + agregar_plato() + + elif opcion == "3": + mostrar_menu() + + elif opcion == "4": + print("Nos vemos!") + break + + else: + print("Opción incorrecta") \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Anexo Json.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Anexo Json.ipynb new file mode 100644 index 0000000..92ad865 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Anexo Json.ipynb @@ -0,0 +1,196 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "producto1 = {\"nombre\":\"silla\", \"color\":\"blanco\", \"precio\":80}" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "estructura_json = json.dumps(producto1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "string indices must be integers", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mestructura_json\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"name\"\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: string indices must be integers" + ] + } + ], + "source": [ + "estructura_json[\"name\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"nombre\": \"silla\", \"color\": \"blanco\", \"precio\": 80}\n" + ] + } + ], + "source": [ + "print(estructura_json\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'{'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "estructura_json[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# convertir una estructura json (estructura_json) en un dyct ne python" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "dict_cargado = json.loads(estructura_json)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'nombre': 'silla', 'color': 'blanco', 'precio': 80}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict_cargado\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(dict_cargado)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'silla'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict_cargado[\"nombre\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Leccion 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" similarity index 93% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" rename to "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Leccion 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" index 609c6f8..45b0d15 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" +++ "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Leccion 02 (Apuntes) - Comprensi\303\263n de listas.ipynb" @@ -16,9 +16,7 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -39,9 +37,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -79,9 +75,7 @@ { "cell_type": "code", "execution_count": 7, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -102,9 +96,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -139,9 +131,7 @@ { "cell_type": "code", "execution_count": 11, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -163,9 +153,7 @@ { "cell_type": "code", "execution_count": 10, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -204,9 +192,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -233,9 +219,7 @@ { "cell_type": "code", "execution_count": 17, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -264,7 +248,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -278,9 +262,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Tipos incorporados_ documentaci\303\263n de Python 3.8.1.html" "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Tipos incorporados_ documentaci\303\263n de Python 3.8.1.html" new file mode 100644 index 0000000..8bdfde3 --- /dev/null +++ "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Apuntes/Tipos incorporados_ documentaci\303\263n de Python 3.8.1.html" @@ -0,0 +1,12381 @@ +From: +Snapshot-Content-Location: https://docs.python.org/3/library/stdtypes.html#iterator-types +Subject: =?utf-8?Q?Tipos=20incorporados:=20documentaci=C3=B3n=20de=20Python=203.8.1?= +Date: Tue, 28 Jan 2020 01:38:55 -0000 +MIME-Version: 1.0 +Content-Type: multipart/related; + type="text/html"; + boundary="----MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3----" + + +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/html +Content-ID: +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/library/stdtypes.html#iterator-types + + + =20 + Tipos incorporados: documentaci=C3=B3n de Python 3.8.1 + + + =20 + =20 + =20 + =20 + =20 + =20 + =20 + =20 + =20 + + + + + + + + + =20 + =20 + =20 + =20 + =20 + + =20 + =20 + + + =20 + =20 + =20 + =20 + + + + =20 +
+

Navegaci=C3=B3n

+
    +
  • + index
  • +
  • + modules |
  • +
  • + next |
  • +
  • + previous |
  • + +
  • 3D""
  • +
  • Python =C2=BB
  • + =20 + +
  • + + + + =20 + =20 + +
+ =20 + | + + + + =20 + +
+
+
+
+ =20 +
+

Built-in Types=C2=B6

+

The following sections describe the standard types that are built into t= +he +interpreter.

+

The principal built-in types are numerics, sequences, map= +pings, classes, +instances and exceptions.

+

Some collection classes are mutable. The methods that add, subtract, or +rearrange their members in place, and don=E2=80=99t return a specific item,= + never return +the collection instance itself but None.

+

Some operations are supported by several object types; in particular, +practically all objects can be compared for equality, tested for truth +value, and converted to a string (with the repr() function or the +slightly different str() function). The latter function is implicitly +used when an object is written by the print() function.

+
+

Truth Value Testing=C2=B6

+

Any object can be tested for truth value, for use in an <= +a class=3D"reference internal" href=3D"https://docs.python.org/3/reference/= +compound_stmts.html#if">if or +while condition or= + as operand of the Boolean operations below.

+

By default, an object is considered true unless its class= + defines either a +__bool__()= + method that returns False or a __len__() metho= +d that +returns zero, when called with the object. 1 Here are most of the built-in +objects considered false:

+
+
+
    +
  • constants defined to be false: None and False.

  • +
  • zero of any numeric type: 0, 0.0, 0j, Decimal(0), +Fraction(0= +, 1)

  • +
  • empty sequences and collections: '', (), [], {}, set()<= +/code>, +range(0)

  • +
+

Operations and built-in functions that have a Boolean res= +ult always return 0 +or False for false and 1 or True for true, unless otherwise sta= +ted. +(Important exception: the Boolean operations or and and always retu= +rn +one of their operands.)

+
+
+

Boolean Operations =E2=80=94 and= +, or, not=C2= +=B6

+

These are the Boolean operations, ordered by ascending pr= +iority:

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

Operation

Result

Notes

= +x or y

if x is false, then y, else +x

(1)

<= +span class=3D"pre">x and y

if x is false, then x, else +y

(2)

= +not x

if x is false, then True, +else False= +

(3)

+

Notes:

+
    +
  1. This is a short-circuit operator, so it only evaluates the second +argument if the first one is false.

  2. +
  3. This is a short-circuit operator, so it only evaluates the second +argument if the first one is true.

  4. +
  5. not= + has a lower priority than non-Boolean operators, so not a =3D=3D b is +interpreted as not (a =3D=3D b), and a =3D=3D not b is = +a syntax error.

  6. +
+
+
+

Comparisons=C2=B6

+

There are eight comparison operations in Python. They al= +l have the same +priority (which is higher than that of the Boolean operations). Comparison= +s can +be chained arbitrarily; for example, x < y <=3D z is equivalent to x < y and +y <=3D z, except that y is evaluated only once (bu= +t in both cases z is not +evaluated at all when x < y<= +/span> is found to be false).

+

This table summarizes the comparison operations:

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

Operation

Meaning

= +<

strictly less than

<= +span class=3D"pre"><=3D

less than or equal

= +>

strictly greater than

<= +span class=3D"pre">>=3D

greater than or equal

= +=3D=3D

equal

<= +span class=3D"pre">!=3D

not equal

= +is

object identity

<= +span class=3D"pre">is not

negated object identity

+

Objects of different types, except different numeric type= +s, never compare equal. +The =3D=3D= + operator is always defined but for some object types (for ex= +ample, +class objects) is equivalent to is<= +/code>. The <, <=3D, > and >=3D +operators are only defined where they make sense; for example, they raise a +TypeError<= +/a> exception when one of the arguments is a complex number.

+

Non-identical instances of a class normally compare as no= +n-equal unless the +class defines the __eq__() method.

+

Instances of a class cannot be ordered with respect to other instances o= +f the +same class, or other types of object, unless the class defines enough of th= +e +methods __lt_= +_(), __le__(), __gt__(), and __ge__() (in +general, __lt_= +_() and __eq__() are sufficient, if you want the +conventional meanings of the comparison operators).

+

The behavior of the is and is no= +t operators cannot be +customized; also they can be applied to any two objects and never raise an +exception.

+

Two more operations with the same syntactic priority, in and +not in, are supported by types that are iterable or +implement the __contains__() method.

+
+
+

Numeric Types =E2=80=94 int, float, complex=C2=B6

+

There are three distinct numeric types: integers, floating +point numbers, and complex numbers. In additio= +n, Booleans are a +subtype of integers. Integers have unlimited precision. Floating point +numbers are usually implemented using double in C; inform= +ation +about the precision and internal representation of floating point +numbers for the machine on which your program is running is available +in sys.float_info. Complex numbers have a real and imaginary +part, which are each a floating point number. To extract these parts +from a complex number z, use z.real and z.imag. (The stand= +ard +library includes the additional numeric types fractions.Fraction= +, for +rationals, and = +decimal.Decimal, for floating-point numbers with +user-definable precision.)

+

Numbers are created by numeric literals or as the result= + of built-in functions +and operators. Unadorned integer literals (including hex, octal and binary +numbers) yield integers. Numeric literals containing a decimal point or an +exponent sign yield floating point numbers. Appending 'j' or 'J' t= +o a +numeric literal yields an imaginary number (a complex number with a zero re= +al +part) which you can add to an integer or float to get a complex number with= + real +and imaginary parts.

+

Python fully supports mixed arithmetic: when a binary ar= +ithmetic operator has +operands of different numeric types, the operand with the =E2=80=9Cnarrower= +=E2=80=9D type is +widened to that of the other, where integer is narrower than floating point= +, +which is narrower than complex. Comparisons between numbers of mixed type = +use +the same rule. 2 The constructor= +s int(), float(), and +complex() = +can be used to produce numbers of a specific type.

+

All numeric types (except complex) support the following operations (for= + priorities of +the operations, see Operator precedence):

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

Operation

Result

Notes

Full documentation

= +x + y

sum of x and y

<= +span class=3D"pre">x - y

difference of x and y

= +x * y

product of x and y

<= +span class=3D"pre">x / y

quotient of x and y

= +x // y

floored quotient of x and +y

(1)

<= +span class=3D"pre">x % y

remainder of x / y

(2)

= +-x

x negated

<= +span class=3D"pre">+x

x unchanged

= +abs(x)

absolute value or magnitude of +x

abs()

+

<= +span class=3D"pre">int(x)

x converted to integer

(3)(6)

int()

+

= +float(x)

x converted to floating point

(4)(6)

float()= +

<= +span class=3D"pre">complex(re, im)= +

a complex number with real part +re, imaginary part im. +im defaults to zero.

(6)

complex()

= +c.conjugate()

conjugate of the complex number +c

<= +span class=3D"pre">divmod(x, y)

the pair (x // y,= + x % y)

(2)

divmod()<= +/a>

= +pow(x, y)

<= +/td> +

x to the power y

(5)

pow()

+

<= +span class=3D"pre">x ** y

x to the power y

(5)

+

Notes:

+
    +
  1. Also referred to as integer division. The resultant value is a whol= +e +integer, though the result=E2=80=99s type is not necessarily int. The resu= +lt is +always rounded towards minus infinity: 1//2 is 0, (-1)//2 is +-1<= +/code>, 1/= +/(-2) is -1, and (-1)//(-2) is 0.

  2. +
  3. Not for complex numbers. Instead convert to floats using abs() if +appropriate.

  4. +
  5. Conversion from floating point to integer may round = +or truncate +as in C; see functions math= +.floor() and math.ceil() for +well-defined conversions.

    +
  6. +
  7. float also accepts the strings =E2=80=9Cnan=E2=80=9D and =E2=80=9Cin= +f=E2=80=9D with an optional prefix =E2=80=9C+=E2=80=9D +or =E2=80=9C-=E2=80=9D for Not a Number (NaN) and positive or negative infi= +nity.

  8. +
  9. Python defines pow(0, 0) and 0 ** 0 to be 1, as i= +s common for +programming languages.

  10. +
  11. The numeric literals accepted include the digits 0 to 9 or a= +ny +Unicode equivalent (code points with the Nd property).

    +

    See http://www.unicode.org/Publi= +c/12.1.0/ucd/extracted/DerivedNumericType.txt +for a complete list of code points with the Nd property.

    +
  12. +
+

All numbers.Real= + types (int and float) also include +the following operations:

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

Operation

Result

math.trunc(x)

x truncated to = +Integral

rou= +nd(x[, +n])

x rounded to n digits, +rounding half to even. If n is +omitted, it defaults to 0.

math.floor(x)

the greatest Integral +<=3D x

= +math.ceil(x)

the least <= +code class=3D"xref py py-class docutils literal notranslate">Integral >=3D x

+

For additional numeric operations see the math an= +d cmath +modules.

+
+

Bitwise Operations on Integer Types=C2=B6

+

Bitwise operations only make sense for integers. The res= +ult of bitwise +operations is calculated as though carried out in two=E2=80=99s complement = +with an +infinite number of sign bits.

+

The priorities of the binary bitwise operations are all lower than the n= +umeric +operations and higher than the comparisons; the unary operation ~ has t= +he +same priority as the other unary numeric operations (+ and -).

+

This table lists the bitwise operations sorted in ascending priority: + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Operation

Result

Notes

= +x | y

bitwise or of x and +y

(4)

<= +span class=3D"pre">x ^ y

bitwise exclusive or of +x and y

(4)

= +x & y

bitwise and of x and +y

(4)

<= +span class=3D"pre">x << n

x shifted left by n bits

(1)(2)

= +x >> n

x shifted right by n bits

(1)(3)

<= +span class=3D"pre">~x

the bits of x inverted

+

Notes:

+
    +
  1. Negative shift counts are illegal and cause a ValueError to be raised.

  2. +
  3. A left shift by n bits is equivalent to multiplication by <= +code class=3D"docutils literal notranslate">pow(2, n) +without overflow check.

  4. +
  5. A right shift by n bits is equivalent to division by pow(2, n) without +overflow check.

  6. +
  7. Performing these calculations with at least one extra sign extension= + bit in +a finite two=E2=80=99s complement representation (a working bit-width of +1 <= +span class=3D"pre">+ max(x.bit_length(), = +y.bit_length()) or more) is sufficient to= + get the +same result as if there were an infinite number of sign bits.

  8. +
+
+
+

Additional Methods on Integer Types=C2=B6

+

The int type implements the numbers.Integral abstract base +class. In addition, it provides a few more methods:

+
+
+int.bit_length()=C2=B6
+

Return the number of bits necessary to represent an integer in binar= +y, +excluding the sign and leading zeros:

+
= +
>>&= +gt;
>>> n =3D -<=
+span class=3D"mi">37
+>>> bin(n)
+'-0b100101'
+>>> n.bit_length()
+6
+
+
+

More precisely, if x is nonzero, then x.bit_length() is the +unique positive integer k such that 2**(k-1) <=3D abs(x) < 2**k. +Equivalently, when abs(x) is small enough to have a correctly +rounded logarithm, then k =3D 1= + + int(log(abs(x), 2)). +If x is zero, then x.bit_length() returns 0.

+

Equivalent to:

+
= +
def bit_length(self):
+    s =3D bin(self)       # binary representation:  bi=
+n(-37) --> '-0b100101'
+    s =3D s.lstrip('-0b') # remove leading zeros and minus sign
+    return len(s)       =
+# len('100101') --> 6
+
+
+
+

New in version 3.1.

+
+
+ +
+
+int.to_bytes(length, byteorder, *, signed=3DFalse)=C2=B6
+

Return an array of bytes representing an integer.

+
>>> (1024).to_bytes(2, b=
+yteorder=3D'big'<=
+span class=3D"p">)
+b'\x04\x00'
+>>> (1024).to_bytes(=
+10, byteorder=3D'big')
+b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
+>>> (-1024).to_bytes(=
+10, byteorder=3D'big'=
+, signed=3DTrue)
+b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
+>>> x =3D 1000
+>>> x.to_bytes((x.bit_=
+length() + 7) // =
+8, byt=
+eorder=3D'little'=
+)
+b'\xe8\x03'
+
+
+

The integer is represented using length bytes. An OverflowError<= +/a> +is raised if the integer is not representable with the given number of +bytes.

+

The byteorder argument determines the byte order used to repres= +ent the +integer. If byteorder is "big", the most significant byte is = +at the +beginning of the byte array. If byteorder is "little", the mo= +st +significant byte is at the end of the byte array. To request the native +byte order of the host system, use sys.byteorder as the byte order +value.

+

The signed argument determines whether two=E2=80=99s complement= + is used to +represent the integer. If signed is False and a negative inte= +ger is +given, an Overfl= +owError is raised. The default value for signed +is False.

+
+

New in version 3.2.

+
+
+ +
+
+classmethod int.from_bytes(bytes, byteorder, *, signed=3DFalse)=C2=B6<= +/dt> +

Return the integer represented by the given array of bytes.

+
>>> int.from_bytes=
+(b'\x00\x10', byteorder=3D'big')
+16
+>>> int.from_bytes(b'\x00\x10', byteorder=3D'little')
+4096
+>>> int.from_bytes(b'\xfc\x00', byteorder=3D'big', signed=3DTrue)=
+
+-1024
+>>> int.from_bytes(b'\xfc\x00', byteorder=3D'big', signed=3DFalse=
+)
+64512
+>>> int.from_bytes([<=
+/span>255, 0, 0], byteorder=
+=3D'big')
+16711680
+
+
+

The argument bytes must either be a bytes-like object or an +iterable producing bytes.

+

The byteorder argument determines the byte order used to repres= +ent the +integer. If byteorder is "big", the most significant byte is = +at the +beginning of the byte array. If byteorder is "little", the mo= +st +significant byte is at the end of the byte array. To request the native +byte order of the host system, use sys.byteorder as the byte order +value.

+

The signed argument indicates whether two=E2=80=99s complement = +is used to +represent the integer.

+
+

New in version 3.2.

+
+
+ +
+
+int.as_integer_ratio()=C2=B6
+

Return a pair of integers whose ratio is exactly equal to the origin= +al +integer and with a positive denominator. The integer ratio of integers +(whole numbers) is always the integer as the numerator and 1 as the +denominator.

+
+

Nuevo en la versi=C3=B3n 3.= +8.

+
+
+ +
+
+

M=C3=A9todos adicionales en flotaci=C3=B3n =C2=B6

+

El tipo flotante implementa la clase base abstracta . flotador tambi= +=C3=A9n tiene los siguientes m=C3=A9todos adicionales.numbers.Real= +

+
+
+float.as_integer_ratio( ) = +=C2=B6
+

Devuelve un par de enteros cuya relaci=C3=B3n es exactamente = +igual a la flotante original y con un denominador positivo. Aumenta + O= +verflowErroren infinitos y a ValueError<= +font style=3D"vertical-align: inherit;">en NaNs.

+
+ +
+
+float.is_integer( ) = +=C2=B6
+

Devuelva Truesi la instancia flotant= +e es finita con valor integral, y de lo Falsecont= +rario:

+
= +
>>&= +gt;
>>> (-2.0).is_inte=
+ger()
+True
+>>> (3.2).is_integer()
+False
+
+
+
+ +

Dos m=C3=A9todos admiten la conversi=C3=B3n hacia y desde cadenas= + hexadecimales. Dado que lo= +s flotantes de Python se almacenan internamente como n=C3=BAmeros binarios,= + la conversi=C3=B3n de un flotante ao desde una + cadena <= +font style=3D"vertical-align: inherit;">decimal generalmente implica un peque=C3=B1= +o error de redondeo. En con= +traste, las cadenas hexadecimales permiten la representaci=C3=B3n y especif= +icaci=C3=B3n exactas de n=C3=BAmeros de coma flotante. Esto puede ser =C3=BAtil al depurar y en trab= +ajos num=C3=A9ricos.

+
+
+float.hex( ) =C2=B6
+

Devuelve una representaci=C3=B3n de un n=C3=BAmero de coma fl= +otante como una cadena hexadecimal. Para n=C3=BAmeros finitos de coma flotante, esta representaci=C3= +=B3n siempre incluir=C3=A1 un inicio 0xy un final = +py un exponente.

+
+ +
+
+m=C3=A9todo float.= +fromhex( s ) de clase <= +/em>=C2=B6
+

M=C3=A9todo de clase para devolver el flotante representado p= +or una cadena hexadecimal s . La cadena s= + pueden tener espacio inicial y fi= +nal.

+
+ +

Tenga en cuenta que float.hex()es un m=C3=A9todo = +de instancia, mientras que + fl= +oat.fromhex()es un m=C3=A9todo de clase.

+

Una cadena hexadecimal toma la forma:

+
= +
[sign] ['0x'] integer ['.' fraction] =
+['p' exponent]
+
+
+

donde el opcional signpuede por cualquie= +ra +o -, = +integer +y fractionson cadenas de d=C3=ADgitos hexadecimale= +s, y exponent +es un entero decimal con un signo inicial opcional. El caso no es significativo y debe haber al menos = +un d=C3=ADgito hexadecimal en el entero o en la fracci=C3=B3n. Esta sintaxis es similar a la sintaxis = +especificada en la secci=C3=B3n 6.4.4.2 del est=C3=A1ndar C99, y tambi=C3= +=A9n a la sintaxis utilizada en Java 1.5 en adelante. En particular, la salida de + float.hex(= +)es utilizable como un literal hexadecimal de coma= + flotante en c=C3=B3digo C o Java, y las cadenas hexadecimales producidas p= +or el %acar=C3=A1cter de formato C o Java Double.toHexStringson aceptadas por + fl= +oat.fromhex().

+

Tenga en cuenta que el exponente se escribe en decimal en lugar d= +e hexadecimal, y que le da la potencia de 2 por la cual multiplica el coefi= +ciente. Por ejemplo, la cad= +ena hexadecimal = +0x3.a7p10representa el n=C3=BAmero= + de coma flotante o + :(3 + 10./16 + 7./16**2) * 2.0**103740.0

+
= +
>>&= +gt;
>>> float.fromhex<=
+/span>('0x3.a7p10')
+3740.0
+
+
+

Al aplicar la conversi=C3=B3n inversa, se 3740.0obtiene una cadena hexadecimal diferente que representa el mismo n= +=C3=BAmero:

+
= +
>>&= +gt;
>>> float.hex(3740.0)
+'0x1.d380000000000p+11'
+
+
+
+
+

Hash de tipos num=C3=A9ricos =C2=B6

+

Para n=C3=BAmeros xy y= +, posiblemente, de diferentes tipos, es un requisito que siempre que lo ha= +ga (consulte la +documentaci=C3=B3n del m=C3=A9todo para obtener m=C3= +=A1s detalles). Para facili= +tar la aplicaci=C3=B3n y la eficiencia a trav=C3=A9s de una variedad de tip= +os num=C3=A9ricos (incluyendo , + , y )= + de hash de Python para tipos num=C3=A9ricos se basa en una =C3=BAnica func= +i=C3=B3n matem=C3=A1tica que se define para cualquier n=C3=BAmero racional,= + y por lo tanto se aplica a todas las instancias de + y , y todas las instancias finitos de + y . E= +sencialmente, esta funci=C3=B3n viene dada por el m=C3=B3dulo de reducci=C3= +=B3n para un primo fijo . El valor de est=C3=A1 disponible para Python como el atributo de + .hash(x) =3D=3D hash(y)x =3D=3D = +y= +__hash__()intfloat= +deci= +mal.Decimalfractions.Fractionint<= +font style=3D"vertical-align: inherit;">fractions.Fractionfloatdecimal.DecimalPPPmodulus= +sys.hash_info

+
+

Detalle de implementaci=C3=B3n de CPython:<= +/strong> actualmente, el principal utilizado es en m=C3=A1quinas con C de 32 bits y en m=C3=A1quinas con C de 64 bits.P =3D 2**31 = +- 1P =3D 2**61 - 1= +

+
+

Aqu=C3=AD est=C3=A1n las reglas en detalle:

+
    +
  • Si es un n=C3= +=BAmero racional no negativo y no es divisible entre ,= + defina como , donde da el inverso del m=C3=B3dulo .<= +/font>x =3D m / nnPhash(x)m * invmod(n, P) % Pinvmod(n, +P)n= +P

  • +
  • Si es un n=C3= +=BAmero racional no negativo y es divisible por (pero = +no lo es), entonces = +no tiene m=C3=B3dulo inverso y la regla anterior no se aplica= +; en este caso, se define + como el valor constante .x =3D m / <= +span class=3D"pre">n= +nPmnP<= +font style=3D"vertical-align: inherit;">hash(x)sys.hash_info.inf

  • +
  • Si es un n=C3= +=BAmero racional negativo, def=C3=ADnalo +como . Si el hash resultante es , reempl=C3=A1celo con + .x =3D m / nhash(x)-hash(-x)-1-2

  • +
  • Los valores particulares sys.hash_info.inf<= +font style=3D"vertical-align: inherit;">, -sys.hash_info.inf +y sys.hash_info.nanse utilizan como valores hash p= +ara infinito positivo, infinito negativo o nans (respectivamente). <= +font style=3D"vertical-align: inherit;">(Todos los nans hashable tienen el = +mismo valor hash).

  • +
  • Para un complexn=C3=BAmero z, los valores hash de las partes real e imaginaria se combinan mediant= +e la computaci=C3=B3n , m= +=C3=B3dulo reducido + para que quede + . Nuevamente, si el resultado es , se reemplaza con .hash(z.real) + +sys.hash_info.imag * = +hash(z.imag)2**sys.hash_info.widthrange(-2**(sys.hash_info.width -= + 1), 2**(sys.hash_info.width= + - +1))= +-1-2

  • +
+

Para aclarar las reglas anteriores, aqu=C3=AD hay un ejemplo de c= +=C3=B3digo Python, equivalente al hash incorporado, para calcular el hash d= +e un n=C3=BAmero racional float, o complex:<= +/font>

+
= +
import=
+ sys, math
+
+def hash_fraction(m, n):
+    """Compute the hash of a rational number m / n.
+
+    Assumes m and n are integers, with n positive.
+    Equivalent to hash(fractions.Fraction(m, n)).
+
+    """
+    P =3D sys.hash_info.modulus
+    # Remove common factors of P.  (Unnecessary if m and=
+ n already coprime.)
+    while m % P =3D=3D =
+n % P =3D=3D 0:
+        m, n =3D m // P, =
+n // P<=
+/span>
+
+    if n % P =3D=3D 0:
+        hash_value =3D sys.hash_=
+info.inf
+    else:
+        # Fermat's Little Theorem: pow(n, P-1, P) is 1, =
+so
+        # pow(n, P-2, P) gives the inverse of n modulo P=
+.
+        hash_value =3D (abs(m) =
+% P) * pow(n, P=
+ - 2,<=
+/span> P) % P
+    if m < 0:
+        hash_value =3D -hash_value
+    if hash_value =3D=3D -1:
+        hash_value =3D -2
+    return hash_value
+
+def hash_float(x):
+    """Compute the hash of a float x."""
+
+    if math.isnan(x):
+        return sys.hash_info.nan
+    elif math.isinf(x):
+        return sys.hash_info.inf if x > 0 else -sys.hash_info.inf
+    else:
+        return hash_fraction(*x<=
+/span>.as_integer_ratio())
+
+def hash_complex(z):
+    """Compute the hash of a complex number z."""
+
+    hash_value =3D hash_float(z<=
+/span>.real) + sys.hash_info.imag * hash_float(z.imag)
+    # do a signed reduction modulo 2**sys.hash_info.widt=
+h
+    M =3D 2**(sys.hash_info.width - 1)
+    hash_value =3D (hash_value &=
+amp; (M - 1)) - (hash_va=
+lue & M)
+    if hash_value =3D=3D -1:
+        hash_value =3D -2
+    return hash_value
+
+
+
+
+
+

<= +font style=3D"vertical-align: inherit;">Tipos de iteradores <= +a class=3D"headerlink" href=3D"https://docs.python.org/3/library/stdtypes.h= +tml#iterator-types" title=3D"Enlace permanente a este titular">=C2= +=B6

+

Python admite un concepto de iteraci=C3=B3n sobre= + contenedores. Esto se impl= +ementa utilizando dos m=C3=A9todos distintos; Estos se utilizan para permitir que las clases definidas= + por el usuario admitan la iteraci=C3=B3n. Las secuencias, que se describen a continuaci=C3=B3n con m= +=C3=A1s detalle, siempre admiten los m=C3=A9todos de iteraci=C3=B3n.= +

+

Se necesita definir un m=C3=A9todo para los objetos contenedor pa= +ra proporcionar soporte de iteraci=C3=B3n:

+
+
+container.__iter__( = +) =C2=B6
+

Devuelve un objeto iterador. El objeto es necesario para admitir el protocolo iterador q= +ue se describe a continuaci=C3=B3n. Si un contenedor admite diferentes tipos de iteraci=C3=B3n, se pue= +den proporcionar m=C3=A9todos adicionales para solicitar espec=C3=ADficamen= +te iteradores para esos tipos de iteraci=C3=B3n. (Un ejemplo de un objeto que admite m=C3=BAltiples fo= +rmas de iteraci=C3=B3n ser=C3=ADa una estructura de =C3=A1rbol que admite e= +l recorrido transversal primero y ancho primero.) Este m=C3=A9todo correspo= +nde a la + tp_iterranura de la estructura tipo par= +a los objetos Python en la API Python / C.

+
+ +

Los propios objetos iteradores son necesarios para admitir los si= +guientes dos m=C3=A9todos, que juntos forman el protocolo iterador : +

+
+iterator.__iter__( <= +/font>) =C2=B6
+

Devuelve el objeto iterador en s=C3=AD. Esto es necesario para permitir que tanto los co= +ntenedores como los iteradores se usen con las declaraciones <= +code class=3D"xref std std-keyword docutils literal notranslate">fory in. Este m=C3=A9todo corresponde a la tp_iterranura de la estructura de tipo para los objetos Python en l= +a API Python / C.

+
+ +
+
+iterator.__next__( <= +/font>) =C2=B6
+

Devuelva el siguiente art=C3=ADculo del contenedor. Si no hay m=C3=A1s elementos, aument= +e la StopIteration= +excepci=C3=B3n. Este m=C3=A9todo corresponde a la + <= +span class=3D"pre">tp_iternextranura de la estruct= +ura de tipo para los objetos Python en la API Python / C.

+
+ +

Python define varios objetos iteradores para admitir la iteraci= +=C3=B3n sobre tipos de secuencia generales y espec=C3=ADficos, diccionarios= + y otras formas m=C3=A1s especializadas. Los tipos espec=C3=ADficos no son importantes m=C3=A1s all=C3= +=A1 de su implementaci=C3=B3n del protocolo iterador.

+

Una vez que surge el __next__()m=C3=A9todo de + un iterador = +StopIteration, debe continuar haci=C3=A9ndolo en llamadas posterio= +res. Las implementaciones q= +ue no obedecen a esta propiedad se consideran rotas.

+
+

Tipos de generador =C2=B6

+

Los generadores de Python proporcionan una forma convenient= +e de implementar el protocolo iterador. Si el __iter__()m=C3=A9todo de = +un objeto contenedor se implementa como un generador, = +devolver=C3=A1 autom=C3=A1ticamente un objeto iterador (t=C3=A9cnicamente, = +un objeto generador) que suministra los +m=C3=A9todos <= +span class=3D"pre">__iter__()y = +__next__(). Puede encontrar m=C3=A1s informaci=C3=B3n sobre generadores en la documentaci=C3=B3n para la expresi=C3=B3n de rendimiento<= +/span> .

+
+
+
+

<= +font style=3D"vertical-align: inherit;">Tipos de secuencia - = +list, tuple<= +/a>, =C2=B6range= +

+

Hay tres tipos b=C3=A1sicos de secuencia: listas, tuplas y objeto= +s de rango. Los tipos de se= +cuencia adicionales dise=C3=B1ados para el procesamiento de + d= +atos binarios y cadenas de texto<= +/span> se describen en secciones dedicadas.

+
+

Operaciones de secuencia com= +=C3=BAn =C2=B6

+

Las operaciones en la siguiente tabla son compati= +bles con la mayor=C3=ADa de los tipos de secuencia, tanto mutables como inm= +utables. El <= +a class=3D"reference internal" href=3D"https://docs.python.org/3/library/co= +llections.abc.html#collections.abc.Sequence" title=3D"collections.abc.Seque= +nce">collections.abc.SequenceABC se proporc= +iona para facilitar la implementaci=C3=B3n correcta de estas operaciones en= + tipos de secuencia personalizados.

+

Esta tabla enumera las operaciones de secuencia ordenadas en prio= +ridad ascendente. En la tab= +la, s y <= +em>t son secuencias del mismo tipo, n , i= + , j<= +font style=3D"vertical-align: inherit;"> y k son n=C3=BAme= +ros enteros y x es un ob= +jeto arbitrario que cumple con las restricciones de tipo y valor impuestas = +por s . +

Las operaciones <= +/font>iny tienen las mismas prioridades que las operaciones de comparaci=C3=B3n. Las operaciones (concatenaci=C3=B3n) y (repetici=C3=B3n) tienen la misma prioridad que las operaciones num=C3= +=A9ricas correspondientes. 3not in+*

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

Operaci=C3=B3n

Resultado

Notas

= +x in s

Tru= +esi un elemento de s es igual a x<= +font style=3D"vertical-align: inherit;"> , de lo contrarioFalse

(1)

<= +span class=3D"pre">x not in s

Fal= +sesi un elemento de s<= +/font> es igual a x= + , de lo contrarioTrue

(1)

= +s + t

la concatenaci=C3=B3n de s y + t

(6) (7)

<= +span class=3D"pre">s * n o +n * s

equivalente a agregar s a s=C3=AD mismo n= + veces

(2) (7)

= +s[i]

i elemento de s , origen 0

(3)

<= +span class=3D"pre">s[i:j]

rebanada de s de i a j

(3) (4)

= +s[i:j:k]

rebanada de s de i a j=20 +con el paso k

(3) (5)

<= +span class=3D"pre">len(s)

longitud de s

= +

= +min(s)

elemento m=C3=A1s peque=C3=B1o de s<= +/font>

<= +span class=3D"pre">max(s)

elemento m=C3=A1s grande de s= +

= +s.index(x[, i[, j]])

=C3=ADndice de la primera aparici=C3=B3n de x en s (en o despu=C3=A9s del =C3=ADndice i y antes del =C3=ADndice j )

(8)

<= +span class=3D"pre">s.count(x)

n=C3=BAmero total de ocurrencias de + x en = +s

+

Sequences of the same type also support comparisons. In particular, tup= +les +and lists are compared lexicographically by comparing corresponding element= +s. +This means that to compare equal, every element must compare equal and the +two sequences must be of the same type and have the same length. (For full +details see Comp= +arisons in the language reference.)

+

Notes:

+
    +
  1. While the in and = +not in operati= +ons are used only for simple +containment testing in the general case, some specialised sequences +(such as str, bytes and bytearray) als= +o use +them for subsequence testing:

    +
    = +
    >>&= +gt;
    >>> "gg" in "egg=
    +s"
    +True
    +
    +
    +
  2. +
  3. Values of n less than 0 are treated as 0 (which yie= +lds an empty +sequence of the same type as s). Note that items in the sequence = +s +are not copied; they are referenced multiple times. This often haunts +new Python programmers; consider:

    +
    = +
    >>&= +gt;
    >>> lists =3D [[]]<=
    +/span> * 3
    +>>> lists
    +[[], [], []]
    +>>> lists[0].append(<=
    +/span>3)
    +>>> lists
    +[[3], [3], [3]]
    +
    +
    +

    What has happened is that <= +span class=3D"pre">[[]] is a one-element list containing an e= +mpty +list, so all three elements of [[]] * 3 are references to this single empty +list. Modifying any of the elements of lists modifies this single list= +. +You can create a list of different lists this way:

    +
    = +
    >>&= +gt;
    >>> lists =3D [[] for i in range(=
    +3)]
    +>>> lists[0].append(<=
    +/span>3)
    +>>> lists[1].append(<=
    +/span>5)
    +>>> lists[2].append(<=
    +/span>7)
    +>>> lists
    +[[3], [5], [7]]
    +
    +
    +

    Further explanation is available in the FAQ entry +How do I= + create a multidimensional list?.

    +
  4. +
  5. If i or j is negative, the index is relative to th= +e end of sequence s: +len(s) + i or len(s)= + + j is substi= +tuted. But note that -0 is +still 0.

  6. +
  7. The slice of s from i to j is defined as = +the sequence of items with index +k such that i <=3D = +k < j. If i or j is greater than len(s), use +len(s). If i is omitted or None, use 0. If j is omitted or +None, use len(s). If i is greater than or equal to j<= +/em>, the slice is +empty.

  8. +
  9. The slice of s from i to j with step = +k is defined as the sequence of +items with index x =3D i + n*k such = +that 0 <=3D n < (j-i)/k. In oth= +er words, +the indices are i, i+k, i+2*k, i+3*k and so on, stopping wh= +en +j is reached (but never including j). When k is= + positive, +i and j are reduced to len(s) if they are greater. +When k is negative, i and j are reduced to len(s) <= +span class=3D"pre">- 1 if +they are greater. If i or j are omitted or None, t= +hey become +=E2=80=9Cend=E2=80=9D values (which end depends on the sign of k).= + Note, k cannot be zero. +If k is None, it is treated like 1.

  10. +
  11. Concatenating immutable sequences always results in a new object. T= +his +means that building up a sequence by repeated concatenation will have a +quadratic runtime cost in the total sequence length. To get a linear +runtime cost, you must switch to one of the alternatives below:

    + +
  12. +
  13. Some sequence types (such as range) only support item sequences +that follow specific patterns, and hence don=E2=80=99t support sequence +concatenation or repetition.

  14. +
  15. ind= +ex raises ValueError when x is not found in s. +Not all implementations support passing the additional arguments i= + and j. +These arguments allow efficient searching of subsections of the sequence. P= +assing +the extra arguments is roughly equivalent to using s[i:j].index(x), onl= +y +without copying any data and with the returned index being relative to +the start of the sequence rather than the start of the slice.

  16. +
+
+
+

Immutable Sequence Types=C2=B6

+

The only operation that immutable sequence types general= +ly implement that is +not also implemented by mutable sequence types is support for the hash() +built-in.

+

This support allows immutable sequences, such as = +tuple instances, to +be used as dict = +keys and stored in set and f= +rozenset +instances.

+

Attempting to hash an immutable sequence that contains unhashable values= + will +result in TypeEr= +ror.

+
+
+

Mutable Sequence Types=C2=B6

+

The operations in the following table are defined on mut= +able sequence types. +The collections.abc.MutableSequence ABC is provided to make it +easier to correctly implement these operations on custom sequence types. +

In the table s is an instance of a mutable sequence type, t= + is any +iterable object and x is an arbitrary object that meets any type +and value restrictions imposed by s (for example, bytearray only +accepts integers that meet the value restriction 0 <=3D= + x <=3D 255).

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

Operation

Result

Notes

= +s[i] =3D x

item i of s is replaced by +x

<= +span class=3D"pre">s[i:j] =3D t

slice of s from i to j +is replaced by the contents of +the iterable t

= +del s[i:j]

= +

same as s[i:j] =3D []

<= +span class=3D"pre">s[i:j:k] =3D t

the elements of s[i:j:k] +are replaced by those of t

(1)

= +del s[i:j:k]

removes the elements of +s[i:j:k] from the list

<= +span class=3D"pre">s.append(x)

appends x to the end of the +sequence (same as +s[len(s):l= +en(s)] =3D [x]= +)

= +s.clear()

removes all items from s +(same as d= +el s[:])

(5)

<= +span class=3D"pre">s.copy()

creates a shallow copy of s +(same as s= +[:])

(5)

= +s.extend(t) or +s <= +span class=3D"pre">+=3D t

extends s with the +contents of t (for the +most part the same as +s[len(s):l= +en(s)] =3D t)

<= +span class=3D"pre">s *=3D n

updates s with its contents +repeated n times

(6)

= +s.insert(i, x)= +

inserts x into s at the +index given by i +(same as s= +[i:i] =3D [x]<= +/code>)

<= +span class=3D"pre">s.pop([i])

retrieves the item at i and +also removes it from s

(2)

= +s.remove(x)

remove the first item from s +where s[i]= + is equal to x

(3)

<= +span class=3D"pre">s.reverse()

reverses the items of s in +place

(4)

+

Notes:

+
    +
  1. t must have the same length as the slice it is replacing.

  2. +
  3. The optional argument i defaults to -1, so that by defa= +ult the last +item is removed and returned.

  4. +
  5. remove() raises ValueError when x is not fo= +und in s.

  6. +
  7. The reverse() method modifies the sequence in pl= +ace for economy of +space when reversing a large sequence. To remind users that it operates by +side effect, it does not return the reversed sequence.

  8. +
  9. clear() and copy() are inclu= +ded for consistency with the +interfaces of mutable containers that don=E2=80=99t support slicing operati= +ons +(such as dict an= +d set). copy() is not part of the +collections.abc.MutableSequence ABC, but most concrete +mutable sequence classes provide it.

    +
    +

    New in version 3.3: c= +lear() and copy() methods.

    +
    +
  10. +
  11. The value n is an integer, or an object implementing += +__index__(). Zero and negative values of n clea= +r +the sequence. Items in the sequence are not copied; they are referenced +multiple times, as explained for s * n under Common Sequence Operations.

  12. +
+
+
+

Lists=C2=B6

+

Lists are mutable sequences, typically used to store col= +lections of +homogeneous items (where the precise degree of similarity will vary by +application).

+
+
+class list([iterable])=C2=B6
+

Lists may be constructed in several ways:

+
    +
  • Using a pair of square brackets to denote the empty list: []

    = +
  • +
  • Using square brackets, separating items with commas: [a], [a, b, c]

  • +
  • Using a list comprehension: [x for x in itera= +ble]

  • +
  • Using the type constructor: list() or list(iterable)

    +
+

The constructor builds a list whose items are the same and in the same +order as iterable=E2=80=99s items. iterable may be eithe= +r a sequence, a +container that supports iteration, or an iterator object. If iterable<= +/em> +is already a list, a copy is made and returned, similar to iterable[:]. +For example, list('abc') returns ['a', 'b', 'c'] and +list( (1, 2, 3) ) returns [1, 2, 3]. +If no argument is given, the constructor creates a new empty list, [].<= +/p> +

Many other operations also produce lists, including the sorted() +built-in.

+

Lists implement all of the common and +mutable sequence operations. Lists also provide the +following additional method:

+
+
+sort(*, key=3DNone= +, reverse=3DFalse)=C2= +=B6
+

This method sorts the list in place, using only < comparisons +between items. Exceptions are not suppressed - if any comparison operations +fail, the entire sort operation will fail (and the list will likely be left +in a partially modified state).

+

sort() accepts two arguments that can only be passed by keyword +(keyword-only argu= +ments):

+

key specifies a function of one argument that is used to extrac= +t a +comparison key from each list element (for example, key=3Dstr.lower). +The key corresponding to each item in the list is calculated once and +then used for the entire sorting process. The default value of None +means that list items are sorted directly without calculating a separate +key value.

+

The <= +code class=3D"xref py py-func docutils literal notranslate">functools.cmp_to_key() utility is available to conve= +rt a 2.x +style cmp function to a key function.

+

reverse is a boolean value. If set to True, then the list = +elements +are sorted as if each comparison were reversed.

+

This method modifies the sequence in place for economy of space when +sorting a large sequence. To remind users that it operates by side +effect, it does not return the sorted sequence (use sorted() to +explicitly request a new sorted list instance).

+

The sort() method is guaranteed to be stable. A sort is stable if it +guarantees not to change the relative order of elements that compare equal +=E2=80=94 this is helpful for sorting in multiple passes (for example, sort= + by +department, then by salary grade).

+

For sorting examples and a brief sorting tutorial, see Sorting HOW TO.

+
+

CPython implementation detail: While a list is being so= +rted, the effect of attempting to mutate, or even +inspect, the list is undefined. The C implementation of Python makes the +list appear empty for the duration, and raises ValueError if it can +detect that the list has been mutated during a sort.

+
+
+ +
+ +
+
+

Tuples=C2=B6

+

Tuples are immutable sequences, typically used to store = +collections of +heterogeneous data (such as the 2-tuples produced by the enumerate() +built-in). Tuples are also used for cases where an immutable sequence of +homogeneous data is needed (such as allowing storage in a set or +dict instance).<= +/p> +

+
+class tuple([iterable])=C2=B6
+

Tuples may be constructed in a number of ways:

+
    +
  • Using a pair of parentheses to denote the empty tuple: ()

    <= +/li> +
  • Using a trailing comma for a singleton tuple: a, or (a,)

  • +
  • Separating items with commas: a, b, c or (a, b, c)

  • +
  • Using the tuple() built-in: tuple() or tuple(iterable)

  • +
+

The constructor builds a tuple whose items are the same and in the same +order as iterable=E2=80=99s items. iterable may be eithe= +r a sequence, a +container that supports iteration, or an iterator object. If iterable<= +/em> +is already a tuple, it is returned unchanged. For example, +tuple('abc= +') returns ('a', 'b', 'c') and +tuple( [1, 2, 3] ) returns (1, 2, 3). +If no argument is given, the constructor creates a new empty tuple, ().= +

+

Note that it is actually the comma which makes a tuple, not the parenthe= +ses. +The parentheses are optional, except in the empty tuple case, or +when they are needed to avoid syntactic ambiguity. For example, +f(a, b, c) is a f= +unction call with three arguments, while +f((a, b, c)) is a= + function call with a 3-tuple as the sole argument.

+

Tuples implement all of the common sequence +operations.

+
+ +

For heterogeneous collections of data where access by name is clearer th= +an +access by index, collections.namedtuple() may be a mo= +re appropriate +choice than a simple tuple object.

+
+
+

Ranges=C2=B6

+

The range type represents an immutable sequence of numbers and is +commonly used for looping a specific number of times in for +loops.

+
+
+class range(stop)=C2=B6
+
+class range(start, = +stop[, step])
+

The arguments to the range constructor must be integers (either buil= +t-in +int or any objec= +t that implements the __index__ special +method). If the step argument is omitted, it defaults to 1. +If the start argument is omitted, it defaults to 0. +If step is zero, <= +code class=3D"xref py py-exc docutils literal notranslate">ValueError is raised.

+

For a positive step, the contents of a range r are determin= +ed by the +formula r[= +i] =3D start <= +span class=3D"pre">+ step*i where = +i <= +span class=3D"pre">>=3D 0 and +r[i] < stop. +

For a negative step, the contents of the range are still determ= +ined by +the formula r[i] =3D start + step*i, b= +ut the constraints are i >=3D 0 +and r[i] > stop.

+

A range object will be empty if r[0] does not meet the value +constraint. Ranges do support negative indices, but these are interpreted +as indexing from the end of the sequence determined by the positive +indices.

+

Ranges containing absolute values larger than sys.maxsize are +permitted but some features (such as len()) may raise +OverflowError.

+

Range examples:

+
= +
>>&= +gt;
>>> list(range(10))
+[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+>>> list(range(1, =
+11))
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+>>> list(range(0, =
+30, 5))
+[0, 5, 10, 15, 20, 25]
+>>> list(range(0, =
+10, 3))
+[0, 3, 6, 9]
+>>> list(range(0, -=
+10, -1))
+[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+>>> list(range(0))
+[]
+>>> list(range(1, =
+0))
+[]
+
+
+

Ranges implement all of the common sequence operations +except concatenation and repetition (due to the fact that range objects can +only represent sequences that follow a strict pattern and repetition and +concatenation will usually violate that pattern).

+
+
+start=C2=B6
+

The value of the start parameter (or 0 if the parameter= + was +not supplied)

+
+ +
+
+stop=C2=B6
+

The value of the stop parameter

+
+ +
+
+step=C2=B6
+

The value of the step parameter (or 1 if the parameter = +was +not supplied)

+
+ +
+ +

The advantage of the range type over a regular list or +tuple is that = +a range object= + will always take the same +(small) amount of memory, no matter the size of the range it represents (as= + it +only stores the start, stop and step values, calculating indivi= +dual +items and subranges as needed).

+

Range objects implement the collections.abc.Sequence= + ABC, and provide +features such as containment tests, element index lookup, slicing and +support for negative indices (see Sequence Types =E2=80=94 list, tuple, range):

+
>>> r =3D range(0, 20, 2)
+>>> r
+range(0, 20, 2)
+>>> 11 in r
+False
+>>> 10 in r
+True
+>>> r.index(10)
+5
+>>> r[5]
+10
+>>> r[:5]
+range(0, 10, 2)
+>>> r[-1]
+18
+
+
+

Testing range objects for equality with =3D=3D and !=3D compares +them as sequences. That is, two range objects are considered equal if +they represent the same sequence of values. (Note that two range +objects that compare equal might have different start, +stop = +and step<= +/a> attributes, for example +range(0) =3D=3D range(2,= + 1, 3) or range(0, 3, 2) =3D=3D range(0, 4, 2).)

+
+

Changed in version 3.2: I= +mplement the Sequence ABC. +Support slicing and negative indices. +Test int objects= + for membership in constant time instead of +iterating through all items.

+
+
+

Changed in version 3.3: D= +efine =E2=80=98=3D=3D=E2=80=99 and =E2=80=98!=3D=E2=80=99 to compare range = +objects based on the +sequence of values they define (instead of comparing based on +object identity).

+
+
+

New in version 3.3: The start,= + stop= + and step= + +attributes.

+
+
+

See also

+
    +
  • The linspace recipe +shows how to implement a lazy version of range suitable for floating +point applications.

  • +
+
+
+
+
+

Text Sequence = +Type =E2=80=94 str= +=C2= +=B6

+

Textual data in Python is handled with <= +code class=3D"xref py py-class docutils literal notranslate">str objects, or strings. +Strings are immutable +sequences of = +Unicode code points. String literals are +written in a variety of ways:

+
    +
  • Single quotes: 'allows embedded "double" quotes'

  • +
  • Double quotes: "allows embedded 'single' quotes".

    +
  • Triple quoted: '''Three single quotes''', """Three double <= +span class=3D"pre">quotes"""

  • +
+

Triple quoted strings may span multiple lines - all associated whitespac= +e will +be included in the string literal.

+

String literals that are part of a single expression and have only white= +space +between them will be implicitly converted to a single string literal. That +is, ("spam= + " "eggs") =3D=3D "spam eggs".

+

See String a= +nd Bytes literals for more about the various forms of string lit= +eral, +including supported escape sequences, and the r (=E2=80=9Craw=E2=80=9D)= + prefix that +disables most escape sequence processing.

+

Strings may also be created from other objects using the str +constructor.

+

Since there is no separate =E2=80=9Ccharacter=E2=80=9D type, indexing a = +string produces +strings of length 1. That is, for a non-empty string s, s[0] =3D=3D s[0:1].

+

There is also no mutable string type, but str.join() or +io.StringIO<= +/a> can be used to efficiently construct strings from +multiple fragments.

+
+

Changed in version 3.3: F= +or backwards compatibility with the Python 2 series, the u prefix is +once again permitted on string literals. It has no effect on the meaning +of string literals and cannot be combined with the r prefix.

+
+
+
+class str(object=3D'')=C2=B6
+
+class str(object=3Db'', encoding=3D'utf-8', errors=3D'strict')
+

Return a string version of object. If object is not +provided, returns the empty string. Otherwise, the behavior of str() +depends on whether encoding or errors is given, as follow= +s.

+

If neither encoding nor errors is given, str(object) returns +object.__s= +tr__(), which is the =E2=80=9Cinformal=E2=80=9D or nicely +printable string representation of object. For string objects, th= +is is +the string itself. If object does not have a __str__() +method, then str() = +falls back to returning +repr(object). +

If at least one of encoding or errors = +is given, object should be a +bytes-like o= +bject (e.g. bytes or byte= +array). In +this case, if object is a bytes (or = +bytearray) object, +then str(b= +ytes, encoding, error= +s) is equivalent to +bytes.decode(encodi= +ng, errors). Otherwise, the b= +ytes +object underlying the buffer object is obtained before calling +bytes.decode(). See Bin= +ary Sequence Types =E2=80=94 bytes, bytearray, memoryview and +Buffer Protocol<= +/a> for information on buffer objects.

+

Passing a bytes= + object to str() without the encoding +or errors arguments falls under the first case of returning the in= +formal +string representation (see also the -b command-line option to +Python). For example:

+
= +
>>&= +gt;
>>> str(b<=
+span class=3D"s1">'Zoot!')
+"b'Zoot!'"
+
+
+

For more information on the str class and its methods, see +Text Sequence Type =E2=80= +=94 str and the String Methods section below. To output +formatted strings, see the Formatted string literals and Format String Syntax +sections. In addition, see the Text Processing Services section.

+
+ +
+

String Methods=C2=B6

+

Strings implement all of the common sequence +operations, along with the additional methods described below.

+

Strings also support two styles of string formatting, one providing a la= +rge +degree of flexibility and customization (see str.format(), +Format String Syntax<= +/span> and Cu= +stom String Formatting) and the other based on C +printf style formatting that handles a narrower range of types and is +slightly harder to use correctly, but is often faster for the cases it can +handle (pri= +ntf-style String Formatting).

+

The Text Processing S= +ervices section of the standard library covers a number of +other modules that provide various text related utilities (including regula= +r +expression support in the re module).

+
+
+str.capitalize()=C2=B6
+

Return a copy of the string with its first character capitalized and= + the +rest lowercased.

+
+

Changed in version 3.8: T= +he first character is now put into titlecase rather than uppercase. +This means that characters like digraphs will only have their first +letter capitalized, instead of the full character.

+
+
+ +
+
+str.casefold()=C2=B6
+

Return a casefolded copy of the string. Casefolded strings may be us= +ed for +caseless matching.

+

Casefolding is similar to lowercasing but more aggressive because it is +intended to remove all case distinctions in a string. For example, the Germ= +an +lowercase letter '=C3=9F' is equivalent to "ss". Since it is alre= +ady +lowercase, lower()= + would do nothing to '=C3=9F'; casefold() +converts it to "ss".

+

The casefolding algorithm is described in section 3.13 of the Unicode +Standard.

+
+

New in version 3.3.

+
+
+ +
+
+str.center(width[, fillchar])= += +=C2=B6
+

Return centered in a string of length width. Padding is don= +e using the +specified fillchar (default is an ASCII space). The original strin= +g is +returned if width is less than or equal to len(s).

+
+ +
+
+str.count(sub[, s= +tart[, end]])=C2=B6
+

Return the number of non-overlapping occurrences of substring su= +b in the +range [start, end]. Optional arguments start an= +d end are +interpreted as in slice notation.

+
+ +
+
+str.encode(encoding=3D"utf-8", errors=3D"strict"<= +/em>)=C2=B6
+

Return an encoded version of the string as a bytes object. Default e= +ncoding +is 'utf-8'= +. errors may be given to set a different error handl= +ing scheme. +The default for errors is 'strict', meaning that encoding erro= +rs raise +a UnicodeError. Other possible +values are 'ignore', 'replace', 'xmlcharrefreplace', +'backslash= +replace' and any other name registered via +cod= +ecs.register_error(), see section Error Handlers. For a +list of possible encodings, see section Standard Encodings.

+
+

Changed in version 3.1: S= +upport for keyword arguments added.

+
+
+ +
+
+str.endswith(suffix[, start[, e= +nd]])=C2=B6
+

Return True if the string ends with the specified suffix, otherwise return +False. suffix can also be a tuple of suffixes to look for. W= +ith optional +start, test beginning at that position. With optional end, stop comparing +at that position.

+
+ +
+
+str.expandtabs(tabsize=3D8)=C2=B6
+

Return a copy of the string where all tab characters are replaced by= + one or +more spaces, depending on the current column and the given tab size. Tab +positions occur every tabsize characters (default is 8, giving tab +positions at columns 0, 8, 16 and so on). To expand the string, the curren= +t +column is set to zero and the string is examined character by character. I= +f +the character is a tab (\t), one or more space characters are inserted +in the result until the current column is equal to the next tab position. +(The tab character itself is not copied.) If the character is a newline +(\n= +) or return (\r), it is copied and the current column is reset t= +o +zero. Any other character is copied unchanged and the current column is +incremented by one regardless of how the character is represented when +printed.

+
>>> '01\t012\t0123\t=
+01234'.expandtabs()
+'01      012     0123    01234'
+>>> '01\t012\t0123\t01234'.expandtabs(4=
+)
+'01  012 0123    01234'
+
+
+
+ +
+
+str.find(sub[, st= +art[, end= +]])=C2=B6
+

Return the lowest index in the string where substring sub i= +s found within +the slice = +s[start:end]. Optional arguments start and end<= +/em> are +interpreted as in slice notation. Return -1 if sub is not fou= +nd.

+
+

Note

+

The find()= + method should be used only if you need to know the +position of sub. To check if sub is a substring or not, = +use the +in operator:

+
= +
>>&= +gt;
>>> 'Py' in 'Pyt=
+hon'
+True
+
+
+
+
+ +
+
+str.format(*args, **kwargs)=C2=B6
+

Perform a string formatting operation. The string on which this met= +hod is +called can contain literal text or replacement fields delimited by braces +{}<= +/code>. Each replacement field contains either the numeric index of a +positional argument, or the name of a keyword argument. Returns a copy of +the string where each replacement field is replaced with the string value o= +f +the corresponding argument.

+
>>> "The sum of 1 + 2 is {0}".format(1+<=
+span class=3D"mi">2)
+'The sum of 1 + 2 is 3'
+
+
+

See Format String = +Syntax for a description of the various formatting options +that can be specified in format strings.

+
+

Note

+

When formatting a number (int<= +/span>, float, complex, +decimal.Decim= +al and subclasses) with the n type +(ex: '{:n}= +'.format(1234)), the function temporarily sets the +LC_CTYPE locale to the LC_NUMERIC locale to decode +decimal_po= +int and thousands_sep fields of localeconv() if +they are non-ASCII or longer than 1 byte, and the LC_NUMERIC locale is +different than the LC_CTYPE locale. This temporary change affects +other threads.

+
+
+

Changed in version 3.7: W= +hen formatting a number with the n type, the function sets +temporarily the LC_CTYPE locale to the LC_NUMERIC locale in some +cases.

+
+
+ +
+
+str.format_map(mapping)=C2=B6
+

Similar to str.format(**mapping), except that mapping is +used directly and not copied to a = +dict. This is useful +if for example mapping is a dict subclass:

+
>>> class Default(=
+dict):
+...     def __missing__(self=
+, key):
+...         return key
+...
+>>> '{name} was born in {country}'.format_map(Default(name=3D'Guido'))
+'Guido was born in country'
+
+
+
+

New in version 3.2.

+
+
+ +
+
+str.index(sub[, s= +tart[, end]])=C2=B6
+

Like find(), but raise V= +alueError when the substring is +not found.

+
+ +
+
+str.isalnum()=C2=B6
+

Return True if all characters in the string are alphanumeric and= + there is at +least one character, False otherwise. A character c is alphanumeri= +c if one +of the following returns True: c.isalpha(), c.isdecimal(), +c.isdigit(= +), or c.isnumeric().

+
+ +
+
+str.isalpha()=C2=B6
+

Return True if all characters in the string are alphabetic and t= +here is at least +one character, False otherwise. Alphabetic characters are those charac= +ters defined +in the Unicode character database as =E2=80=9CLetter=E2=80=9D, i.e., those = +with general category +property being one of =E2=80=9CLm=E2=80=9D, =E2=80=9CLt=E2=80=9D, =E2=80=9C= +Lu=E2=80=9D, =E2=80=9CLl=E2=80=9D, or =E2=80=9CLo=E2=80=9D. Note that this= + is different +from the =E2=80=9CAlphabetic=E2=80=9D property defined in the Unicode Stand= +ard.

+
+ +
+
+str.isascii()=C2=B6
+

Return True if the string is empty or all characters in the stri= +ng are ASCII, +False otherwise. +ASCII characters have code points in the range U+0000-U+007F.

+
+

New in version 3.7.

+
+
+ +
+
+str.isdecimal()=C2=B6
+

Return True if all characters in the string are decimal +characters and there is at least one character, False +otherwise. Decimal characters are those that can be used to form +numbers in base 10, e.g. U+0660, ARABIC-INDIC DIGIT +ZERO. Formally a decimal character is a character in the Unicode +General Category =E2=80=9CNd=E2=80=9D.

+
+ +
+
+str.isdigit()=C2=B6
+

Return True if all characters in the string are digits and there= + is at least one +character, False otherwise. Digits include decimal characters and digi= +ts that need +special handling, such as the compatibility superscript digits. +This covers digits which cannot be used to form numbers in base 10, +like the Kharosthi numbers. Formally, a digit is a character that has the +property value Numeric_Type=3DDigit or Numeric_Type=3DDecimal.

+
+ +
+
+str.isidentifier()=C2=B6
+

Return True if the string is a valid identifier according to the= + language +definition, section Identifiers and keywords.

+

Call ke= +yword.iskeyword() to test whether string s is a reser= +ved +identifier, such as def<= +/a> and class.

+

Example:

+
= +
>>&= +gt;
>>> from keyword import iskeyword
+
+>>> 'hello'.isidentifier(), iskeyword(<=
+span class=3D"s1">'hello')
+True, False
+>>> 'def'.isidentifier(), iskeyword('def')
+True, True
+
+
+
+ +
+
+str.islower()=C2=B6
+

Return True if all cased characters 4 in the string are lowercase and +there is at least one cased character, False otherwise.

+
+ +
+
+str.isnumeric()=C2=B6
+

Return True if all characters in the string are numeric +characters, and there is at least one character, False +otherwise. Numeric characters include digit characters, and all characters +that have the Unicode numeric value property, e.g. U+2155, +VULGAR FRACTION ONE FIFTH. Formally, numeric characters are those with the= + property +value Numeric_Type=3DDigit, Numeric_Type=3DDecimal or Numeric_Type=3DNumeri= +c.

+
+ +
+
+str.isprintable()=C2=B6
+

Return True if all characters in the string are printable or the= + string is +empty, Fal= +se otherwise. Nonprintable characters are those characters d= +efined +in the Unicode character database as =E2=80=9COther=E2=80=9D or =E2=80=9CSe= +parator=E2=80=9D, excepting the +ASCII space (0x20) which is considered printable. (Note that printable +characters in this context are those which should not be escaped when +repr() is invoke= +d on a string. It has no bearing on the handling of +strings written to sys.stdou= +t or sys.s= +tderr.)

+
+ +
+
+str.isspace()=C2=B6
+

Return True if there are only whitespace characters in the strin= +g and there is +at least one character, False otherwise.

+

A character is whitespace if in the Unicode character database +(see unicodedata), either its general c= +ategory is Zs +(=E2=80=9CSeparator, space=E2=80=9D), or its bidirectional class is one of = +WS<= +/code>, +B, or = +S.

+
+ +
+
+str.istitle()=C2=B6
+

Return True if the string is a titlecased string and there is at= + least one +character, for example uppercase characters may only follow uncased charact= +ers +and lowercase characters only cased ones. Return False otherwise.

+
+ +
+
+str.isupper()=C2=B6
+

Return True if all cased characters 4 in the string are uppercase and +there is at least one cased character, False otherwise.

+
+ +
+
+str.join(iterable)=C2=B6
+

Return a string which is the concatenation of the strings in ite= +rable. +A TypeError will be raised if there are any non-string values in +iterable, including byt= +es objects. The separator between +elements is the string providing this method.

+
+ +
+
+str.ljust(width[, fillchar])<= +/span>=C2=B6 +

Return the string left justified in a string of length width. Padding is +done using the specified fillchar (default is an ASCII space). The +original string is returned if width is less than or equal to len(s)<= +/code>.

+
+ +
+
+str.lower()=C2= +=B6
+

Return a copy of the string with all the cased characters 4 converted to +lowercase.

+

The lowercasing algorithm used is described in section 3.13 of the Unico= +de +Standard.

+
+ +
+
+str.lstrip([chars])=C2=B6
+

Return a copy of the string with leading characters removed. The chars +argument is a string specifying the set of characters to be removed. If om= +itted +or None, the chars argument defaults to removing whitespace. = +The chars +argument is not a prefix; rather, all combinations of its values are stripp= +ed:

+
= +
>>&= +gt;
>>> '   spacious   '.lstrip()
+'spacious   '
+>>> 'www.example.com'=
+.lstrip('cmowz.')
+'example.com'
+
+
+
+ +
+
+static str.maketrans(x[, y[, z]])=C2=B6
+

This static method returns a translation table usable for str.translate().

+

If there is only one argument, it must be a dictionary mapping Unicode +ordinals (integers) or characters (strings of length 1) to Unicode ordinals= +, +strings (of arbitrary lengths) or None. Character keys will then be +converted to ordinals.

+

If there are two arguments, they must be strings of equal length, and in= + the +resulting dictionary, each character in x will be mapped to the character a= +t +the same position in y. If there is a third argument, it must be a string, +whose characters will be mapped to None in the result.

+
+ +
+
+str.partition(sep)=C2=B6
+

Split the string at the first occurrence of sep, and return= + a 3-tuple +containing the part before the separator, the separator itself, and the par= +t +after the separator. If the separator is not found, return a 3-tuple conta= +ining +the string itself, followed by two empty strings.

+
+ +
+
+str.replace(old, new[, count])=C2=B6
+

Return a copy of the string with all occurrences of substring ol= +d replaced by +new. If the optional argument count is given, only the f= +irst count +occurrences are replaced.

+
+ +
+
+str.rfind(sub[, s= +tart[, end]])=C2=B6
+

Return the highest index in the string where substring sub = +is found, such +that sub is contained within s[start:end]. Optional arguments= + start +and end are interpreted as in slice notation. Return -1 on f= +ailure.

+
+ +
+
+str.rindex(sub[, = +start[, end]])=C2=B6
+

Like rfind() but raises ValueError when the substring sub is not +found.

+
+ +
+
+str.rjust(width[, fillchar])<= +/span>=C2=B6 +

Return the string right justified in a string of length width. Padding is +done using the specified fillchar (default is an ASCII space). The +original string is returned if width is less than or equal to len(s)<= +/code>.

+
+ +
+
+str.rpartition(sep)=C2=B6
+

Split the string at the last occurrence of sep, and return = +a 3-tuple +containing the part before the separator, the separator itself, and the par= +t +after the separator. If the separator is not found, return a 3-tuple conta= +ining +two empty strings, followed by the string itself.

+
+ +
+
+str.rsplit(sep=3DNone, maxsplit=3D-1)=C2=B6
+

Return a list of the words in the string, using sep as the = +delimiter string. +If maxsplit is given, at most maxsplit splits are done, t= +he rightmost +ones. If sep is not specified or None, any whitespace string = +is a +separator. Except for splitting from the right, rsplit() behaves like +split()= + which is described in detail below.

+
+ +
+
+str.rstrip([chars])=C2=B6
+

Return a copy of the string with trailing characters removed. The <= +em>chars +argument is a string specifying the set of characters to be removed. If om= +itted +or None, the chars argument defaults to removing whitespace. = +The chars +argument is not a suffix; rather, all combinations of its values are stripp= +ed:

+
= +
>>&= +gt;
>>> '   spacious   '.rstrip()
+'   spacious'
+>>> 'mississippi'.rstrip('ipz')
+'mississ'
+
+
+
+ +
+
+str.split(sep=3DNone, maxsplit=3D-1)=C2=B6
+

Return a list of the words in the string, using sep as the = +delimiter +string. If maxsplit is given, at most maxsplit splits ar= +e done (thus, +the list will have at most maxsplit+1 elements). If maxsplit = +is not +specified or -1, then there is no limit on the number of splits +(all possible splits are made).

+

If sep is given, consecutive delimiters are not grouped togethe= +r and are +deemed to delimit empty strings (for example, '1,,2'.split(',') returns +['1', '', '2']). = + The sep argument may consist of multiple characters +(for example, '1<>2<>3'.split('<>') returns ['1', '2', '3']). +Splitting an empty string with a specified separator returns [''].

+

For example:

+
= +
>>&= +gt;
>>> '1,2,3'.split<=
+/span>(',')
+['1', '2', '3']
+>>> '1,2,3'.split(',', maxsplit=3D1)
+['1', '2,3']
+>>> '1,2,,3,'<=
+span class=3D"o">.split(<=
+/span>',')
+['1', '2', '', '3', '']
+
+
+

If sep is not specified or is None, a different splitting a= +lgorithm is +applied: runs of consecutive whitespace are regarded as a single separator, +and the result will contain no empty strings at the start or end if the +string has leading or trailing whitespace. Consequently, splitting an empt= +y +string or a string consisting of just whitespace with a None separator +returns []= +.

+

For example:

+
= +
>>&= +gt;
>>> '1 2 3'.split<=
+/span>()
+['1', '2', '3']
+>>> '1 2 3'.split(maxsplit=3D1)
+['1', '2 3']
+>>> '   1   2   3   '=
+.split()
+['1', '2', '3']
+
+
+
+ +
+
+str.splitlines([keepends])=C2=B6
+

Return a list of the lines in the string, breaking at line boundarie= +s. Line +breaks are not included in the resulting list unless keepends is g= +iven and +true.

+

This method splits on the following line boundaries. In particular, the +boundaries are a superset of universal newlines.

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

Representation

Description

= +\n

Line Feed

<= +span class=3D"pre">\r

Carriage Return

= +\r\n

Carriage Return + Line Feed

<= +span class=3D"pre">\v or \x0b

Line Tabulation

= +\f or \x0c

Form Feed

<= +span class=3D"pre">\x1c

File Separator

= +\x1d

Group Separator

<= +span class=3D"pre">\x1e

Record Separator

= +\x85

Next Line (C1 Control Code)

<= +span class=3D"pre">\u2028

Line Separator

= +\u2029

Paragraph Separator

+
+

Changed in version 3.2: <= +code class=3D"docutils literal notranslate">\v and = +\f added to list of line boundaries.

+
+

For example:

+
= +
>>&= +gt;
>>> 'ab c\n\nde =
+fg\rkl\r\n'.splitlines()
+['ab c', '', 'de fg', 'kl']
+>>> 'ab c\n\nde fg=
+\rkl\r\n'.splitlines(keepends=3DTrue)
+['ab c\n', '\n', 'de fg\r', 'kl\r\n']
+
+
+

Unlike split()<= +/code> when a delimiter string sep is given, this +method returns an empty list for the empty string, and a terminal line +break does not result in an extra line:

+
= +
>>&= +gt;
>>> "".splitlines<=
+/span>()
+[]
+>>> "One line<=
+span class=3D"se">\n".splitlines()
+['One line']
+
+
+

For comparison, split('\n') gives:

+
= +
>>&= +gt;
>>> ''.split('\n=
+')
+['']
+>>> 'Two lines=
+\n'.<=
+/span>split('\n')
+['Two lines', '']
+
+
+
+ +
+
+str.startswith(prefix[, start[, end]]= +)=C2=B6
+

Return True if string starts with the prefix, otherwise= + return Fa= +lse. +prefix can also be a tuple of prefixes to look for. With optional= + start, +test string beginning at that position. With optional end, stop c= +omparing +string at that position.

+
+ +
+
+str.strip([chars= +])=C2=B6
+

Return a copy of the string with the leading and trailing characters= + removed. +The chars argument is a string specifying the set of characters to= + be removed. +If omitted or None, the chars argument defaults to removing wh= +itespace. +The chars argument is not a prefix or suffix; rather, all combinat= +ions of its +values are stripped:

+
= +
>>&= +gt;
>>> '   spacious   '.strip()
+'spacious'
+>>> 'www.example.com'=
+.strip('cmowz.')
+'example'
+
+
+

The outermost leading and trailing chars argument values are st= +ripped +from the string. Characters are removed from the leading end until +reaching a string character that is not contained in the set of +characters in chars. A similar action takes place on the trailing = +end. +For example:

+
= +
>>&= +gt;
>>> comment_string =3D '#....... Section 3.2.1 Issue #32 .......'
+>>> comment_string.strip('.#! ')
+'Section 3.2.1 Issue #32'
+
+
+
+ +
+
+str.swapcase()=C2=B6
+

Return a copy of the string with uppercase characters converted to l= +owercase and +vice versa. Note that it is not necessarily true that +s.swapcase= +().swapcase() =3D=3D = +s.

+
+ +
+
+str.title()=C2= +=B6
+

Return a titlecased version of the string where words start with an = +uppercase +character and the remaining characters are lowercase.

+

For example:

+
= +
>>&= +gt;
>>> 'Hello world'.=
+title()
+'Hello World'
+
+
+

The algorithm uses a simple language-independent definition of a word as +groups of consecutive letters. The definition works in many contexts but +it means that apostrophes in contractions and possessives form word +boundaries, which may not be the desired result:

+
= +
>>&= +gt;
>>> "they're bill's friends from the UK".title()
+"They'Re Bill'S Friends From The Uk"
+
+
+

A workaround for apostrophes can be constructed using regular expression= +s:

+
= +
>>&= +gt;
>>> import re
+>>> def titlecase(s):
+...     return re.sub(r"[A-Za=
+-z]+('[A-Za-z]+)?",
+...                   lambda mo: mo.group(0).capitalize=
+(),
+...                   s<=
+span class=3D"p">)
+...
+>>> titlecase("they're bill's friends."=
+)
+"They're Bill's Friends."
+
+
+
+ +
+
+str.translate(table)=C2=B6
+

Return a copy of the string in which each character has been mapped = +through +the given translation table. The table must be an object that implements +indexing via __getitem__(), typically a mapping or +sequence. = + When indexed by a Unicode ordinal (an integer), the +table object can do any of the following: return a Unicode ordinal or a +string, to map the character to one or more other characters; return +None, to delete the character from the return string; or raise a +LookupError exception, to map the character to itself.

+

You can use st= +r.maketrans() to create a translation map from +character-to-character mappings in different formats.

+

See also the codecs module for a more flexib= +le approach to custom +character mappings.

+
+ +
+
+str.upper()=C2= +=B6
+

Return a copy of the string with all the cased characters 4 converted to +uppercase. Note that s.upper().isupper() might be False if s +contains uncased characters or if the Unicode category of the resulting +character(s) is not =E2=80=9CLu=E2=80=9D (Letter, uppercase), but e.g. =E2= +=80=9CLt=E2=80=9D (Letter, +titlecase).

+

The uppercasing algorithm used is described in section 3.13 of the Unico= +de +Standard.

+
+ +
+
+str.zfill(width)=C2=B6
+

Return a copy of the string left filled with ASCII '0' digits to +make a string of length width. A leading sign prefix ('+'/'-') +is handled by inserting the padding after the sign character rathe= +r +than before. The original string is returned if width is less than +or equal to len(s).

+

For example:

+
= +
>>&= +gt;
>>> "42".zfill(5)=
+
+'00042'
+>>> "-42".zfill(5)
+'-0042'
+
+
+
+ +
+
+

printf-style String Forma= +tting=C2=B6

+
+

Note

+

The formatting operations described here exhibit a variety of quirks tha= +t +lead to a number of common errors (such as failing to display tuples and +dictionaries correctly). Using the newer formatted string literals, the str.format()<= +/a> interface, or = +template strings may help avoid these errors. Each of these +alternatives provides their own trade-offs and benefits of simplicity, +flexibility, and/or extensibility.

+
+

String objects have one unique built-in operation: the % operator (m= +odulo). +This is also known as the string formatting or interpolation operator. +Given form= +at % values (where format is a string), % conversion +specifications in format are replaced with zero or more elements o= +f values. +The effect is similar to using the sprintf() in the C lan= +guage.

+

If format requires a single argument, values may be a = +single non-tuple +object. 5 Otherwise, value= +s must be a tuple with exactly the number of +items specified by the format string, or a single mapping object (for examp= +le, a +dictionary).

+

A conversion specifier contains two or more characters a= +nd has the following +components, which must occur in this order:

+
    +
  1. The '%' character, which marks the start of the specifier.

    +
  2. Mapping key (optional), consisting of a parenthesised sequence of ch= +aracters +(for example, (somename)).

  3. +
  4. Conversion flags (optional), which affect the result of some convers= +ion +types.

  5. +
  6. Minimum field width (optional). If specified as an '*' (asteris= +k), the +actual width is read from the next element of the tuple in values,= + and the +object to convert comes after the minimum field width and optional precisio= +n.

  7. +
  8. Precision (optional), given as a '.' (dot) followed by the preci= +sion. If +specified as '*' (an asterisk), the actual precision is read from the n= +ext +element of the tuple in values, and the value to convert comes aft= +er the +precision.

  9. +
  10. Length modifier (optional).

  11. +
  12. Conversion type.

  13. +
+

When the right argument is a dictionary (or other mapping type), then th= +e +formats in the string must include a parenthesised mapping key int= +o that +dictionary inserted immediately after the '%' character. The mapping ke= +y +selects the value to be formatted from the mapping. For example:

+
>>> print('%(language)s has %(number)03d quote types.' %
+...       {'language': "Pyt=
+hon", "number": 2})
+Python has 002 quote types.
+
+
+

In this case no * specifiers may occur in a format (since they requi= +re a +sequential parameter list).

+

The conversion flag characters are:

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

Flag

Meaning

= +'#'

The value conversion will use the =E2=80=9Calternate form=E2=80=9D (= +where defined +below).

<= +span class=3D"pre">'0'

The conversion will be zero padded for numeric values.

= +'-'

The converted value is left adjusted (overrides the '0' +conversion if both are given).

<= +span class=3D"pre">' '

(a space) A blank should be left before a positive number (or empty +string) produced by a signed conversion.

= +'+'

A sign character ('+' or '-') will precede the conversion +(overrides a =E2=80=9Cspace=E2=80=9D flag).

+

A length modifier (h, <= +span class=3D"pre">l, or L) may be present, but is ignore= +d as it +is not necessary for Python =E2=80=93 so e.g. %ld is identical to %d.

+

The conversion types are:

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

Conversion

Meaning

Notes

= +'d'

Signed integer decimal.

<= +span class=3D"pre">'i'

Signed integer decimal.

= +'o'

Signed octal value.

(1)

<= +span class=3D"pre">'u'

Obsolete type =E2=80=93 it is identical to 'd'.

(6)

= +'x'

Signed hexadecimal (lowercase).

(2)

<= +span class=3D"pre">'X'

Signed hexadecimal (uppercase).

(2)

= +'e'

Floating point exponential format (lowercase).

(3)

<= +span class=3D"pre">'E'

Floating point exponential format (uppercase).

(3)

= +'f'

Floating point decimal format.

(3)

<= +span class=3D"pre">'F'

Floating point decimal format.

(3)

= +'g'

Floating point format. Uses lowercase exponential +format if exponent is less than -4 or not less than +precision, decimal format otherwise.

(4)

<= +span class=3D"pre">'G'

Floating point format. Uses uppercase exponential +format if exponent is less than -4 or not less than +precision, decimal format otherwise.

(4)

= +'c'

Single character (accepts integer or single +character string).

<= +span class=3D"pre">'r'

String (converts any Python object using +repr()).

+

(5)

= +'s'

String (converts any Python object using +str()).

(5)

<= +span class=3D"pre">'a'

String (converts any Python object using +ascii()).

<= +/td> +

(5)

= +'%'

No argument is converted, results in a '%' +character in the result.

+

Notes:

+
    +
  1. The alternate form causes a leading octal specifier ('0o') to be +inserted before the first digit.

  2. +
  3. The alternate form causes a leading '0x' or '0X' (depending = +on whether +the 'x' or 'X' format was used) to be inserted before the first dig= +it.

  4. +
  5. The alternate form causes the result to always contain a decimal poi= +nt, even if +no digits follow it.

    +

    The precision determines the number of digits after the decimal point an= +d +defaults to 6.

    +
  6. +
  7. The alternate form causes the result to always contain a decimal poi= +nt, and +trailing zeroes are not removed as they would otherwise be.

    +

    The precision determines the number of significant digits before and aft= +er the +decimal point and defaults to 6.

    +
  8. +
  9. If precision is N, the output is truncated to N characters.<= +/p>

  10. +
  11. See PEP 237.

  12. +
+

Since Python strings have an explicit length, %s conversions do not = +assume +that '\0'<= +/span> is the end of the string.

+
+

Changed in version 3.1: <= +code class=3D"docutils literal notranslate">%f conversions for numbers whose absolute value is over 1e50 are no +longer replaced by %g conversions.

+
+
+
+
+

Binary Seque= +nce Types =E2=80=94 bytes= +, bytearray, memo= +ryview=C2=B6

+

The core built-in types for manipulating binary data are= + bytes and +bytearray<= +/a>. They are supported by memoryview which uses +the buffer protocol to access the memory of other +binary objects without needing to make a copy.

+

The array module supports= + efficient storage of basic data types like +32-bit integers and IEEE754 double-precision floating values.

+
+

Bytes Objects=C2=B6

+

Bytes objects are immutable sequences of single bytes. S= +ince many major +binary protocols are based on the ASCII text encoding, bytes objects offer +several methods that are only valid when working with ASCII compatible +data and are closely related to string objects in a variety of other ways.<= +/p> +

+
+class bytes([source[, encoding[, errors]]])=C2=B6
+

Firstly, the syntax for bytes literals is largely the same as that f= +or string +literals, except that a b prefix is added:

+
    +
  • Single quotes: b'still allows embedded "double" quotes'

  • +
  • Double quotes: b"still allows embedded 'single' quotes".

  • +
  • Triple quoted: b'''3 single quotes''', <= +span class=3D"pre">b"""3 double quotes"""

  • +
+

Only ASCII characters are permitted in bytes literals (regardless of the +declared source code encoding). Any binary values over 127 must be entered +into bytes literals using the appropriate escape sequence.

+

As with string literals, bytes literals may also use a r prefix to d= +isable +processing of escape sequences. See String and Bytes literals for more about th= +e various +forms of bytes literal, including supported escape sequences.

+

While bytes literals and representations are based on ASCII text, bytes +objects actually behave like immutable sequences of integers, with each +value in the sequence restricted such that 0 <=3D x < 256 (attempts to +violate this restriction will trigger ValueError). This is done +deliberately to emphasise that while many binary formats include ASCII base= +d +elements and can be usefully manipulated with some text-oriented algorithms= +, +this is not generally the case for arbitrary binary data (blindly applying +text processing algorithms to binary data formats that are not ASCII +compatible will usually lead to data corruption).

+

In addition to the literal forms, bytes objects can be created in a numb= +er of +other ways:

+
    +
  • A zero-filled bytes object of a specified length: bytes(10)

    <= +/li> +
  • From an iterable of integers: bytes(range(20))

  • +
  • Copying existing binary data via the buffer protocol: bytes(obj)

  • +
+

Also see the bytes= + built-in.

+

Since 2 hexadecimal digits correspond precisely to a single byte, hexade= +cimal +numbers are a commonly used format for describing binary data. Accordingly, +the bytes type has an additional class method to read data in that format:<= +/p> +

+
+classmethod f= +romhex(stri= +ng)=C2=B6
+

This bytes<= +/a> class method returns a bytes object, decoding the +given string object. The string must contain two hexadecimal digits per +byte, with ASCII whitespace being ignored.

+
>>> bytes.fromhex<=
+span class=3D"p">('2Ef0 F1f2  ')
+b'.\xf0\xf1\xf2'
+
+
+
+
+ +

A reverse conversion function exists to transform a bytes object into it= +s +hexadecimal representation.

+
+
+hex()=C2=B6
+

Return a string object containing two hexadecimal digits for each +byte in the instance.

+
>>> b'\xf0\xf1\xf2'.he=
+x()
+'f0f1f2'
+
+
+

If you want to make the hex string easier to read, you can specify a +single character separator sep parameter to include in the output. +By default between each byte. A second optional bytes_per_sep +parameter controls the spacing. Positive values calculate the +separator position from the right, negative values from the left.

+
>>> value =3D b'\xf0\xf1\xf2'
+>>> value.hex(<=
+span class=3D"s1">'-')
+'f0-f1-f2'
+>>> value.hex(<=
+span class=3D"s1">'_', 2=
+)
+'f0_f1f2'
+>>> b'UUDDLRLRAB'.he=
+x(' ', -4)
+'55554444 4c524c52 4142'
+
+
+
+

New in version 3.5.

+
+
+

Changed in version 3.8: <= +a class=3D"reference internal" href=3D"https://docs.python.org/3/library/st= +dtypes.html#bytes.hex" title=3D"bytes.hex">bytes.hex()<= +/a> now supports optional sep and bytes_per_sep +parameters to insert separators between bytes in the hex output.

+
+
+ +
+ +

Since bytes objects are sequences of integers (akin to a tuple), for a b= +ytes +object b, b[0] will be an integer, while b[0:1] will be a = +bytes +object of length 1. (This contrasts with text strings, where both indexing +and slicing will produce a string of length 1)

+

The representation of bytes objects uses the literal format (b'...') +since it is often more useful than e.g. bytes([46, 46, 46]). You can +always convert a bytes object into a list of integers using list(b). +

+

Note

+

For Python 2.x users: In the Python 2.x series, a variety of implicit +conversions between 8-bit strings (the closest thing 2.x offers to a +built-in binary data type) and Unicode strings were permitted. This was a +backwards compatibility workaround to account for the fact that Python +originally only supported 8-bit text, and Unicode text was a later +addition. In Python 3.x, those implicit conversions are gone - conversions +between 8-bit binary data and Unicode text must be explicit, and bytes and +string objects will always compare unequal.

+
+
+
+

Bytearray Objects=C2=B6

+

byte= +array objects are a mutable counterpart to bytes +objects.

+
+
+class bytearr= +ay([source[, encoding[, errors]]])=C2=B6
+

There is no dedicated literal syntax for bytearray objects, instead +they are always created by calling the constructor:

+
    +
  • Creating an empty instance: bytearray()

  • +
  • Creating a zero-filled instance with a given length: bytearray(10)

  • +
  • From an iterable of integers: bytearray(range(20))

  • +
  • Copying existing binary data via the buffer protocol: bytearray(b'Hi!')

  • +
+

As bytearray objects are mutable, they support the +mutable sequence operations in addition to the +common bytes and bytearray operations described in Bytes and Bytearray Operations.<= +/p> +

Also see the b= +ytearray built-in.

+

Since 2 hexadecimal digits correspond precisely to a single byte, hexade= +cimal +numbers are a commonly used format for describing binary data. Accordingly, +the bytearray type has an additional class method to read data in that form= +at:

+
+
+classmethod f= +romhex(stri= +ng)=C2=B6
+

This bytearray class method returns bytearray object, decoding +the given string object. The string must contain two hexadecimal digits +per byte, with ASCII whitespace being ignored.

+
>>> bytearray.fromhex('2Ef0 F1f2  ')
+bytearray(b'.\xf0\xf1\xf2')
+
+
+
+

Changed in version 3.7: <= +a class=3D"reference internal" href=3D"https://docs.python.org/3/library/st= +dtypes.html#bytearray.fromhex" title=3D"bytearray.fromhex">bytearray.= +fromhex() now skips all ASCII whitespace in the string, +not just spaces.

+
+
+ +

A reverse conversion function exists to transform a bytearray object int= +o its +hexadecimal representation.

+
+
+hex()=C2=B6
+

Return a string object containing two hexadecimal digits for each +byte in the instance.

+
>>> bytearray(b'\xf0\xf1\xf2').hex()
+'f0f1f2'
+
+
+
+

New in version 3.5.

+
+
+ +
+ +

Since bytearray objects are sequences of integers (akin to a list), for = +a +bytearray object b, <= +span class=3D"pre">b[0] will be an integer, while b[0:1] = +will be +a bytearray object of length 1. (This contrasts with text strings, where +both indexing and slicing will produce a string of length 1)

+

The representation of bytearray objects uses the bytes literal format +(bytearray= +(b'...')) since it is often more useful than e.g. +bytearray(= +[46, 46, 46])<= +/code>. You can always convert a bytearray object into +a list of integers using list(b).

+
+
+

Bytes and Bytearray Operations=C2=B6

+

Both bytes and bytearray objects support the common +sequence operations. They interoperate not just with operands of the same +type, but with any bytes-like object. Due to this flexibility, they can be +freely mixed in operations without causing errors. However, the return type +of the result may depend on the order of operands.

+
+

Note

+

The methods on bytes and bytearray objects don=E2=80=99t accept strings = +as their +arguments, just as the methods on strings don=E2=80=99t accept bytes as the= +ir +arguments. For example, you have to write:

+
= +
a =3D "abc"
+b =3D a=
+.replace("a", "f")
+
+
+

and:

+
= +
a =3D b"abc"=
+
+b =3D a=
+.replace(b"a", b"f")
+
+
+
+

Some bytes and bytearray operations assume the use of ASCII compatible +binary formats, and hence should be avoided when working with arbitrary +binary data. These restrictions are covered below.

+
+

Note

+

Using these ASCII based operations to manipulate binary data that is not +stored in an ASCII based format may lead to data corruption.

+
+

The following methods on bytes and bytearray objects can be used with +arbitrary binary data.

+
+
+bytes.count(sub[, start[, end]])=C2=B6
+
+bytearray.count(sub[, start[, end]]= +)=C2=B6
+

Return the number of non-overlapping occurrences of subsequence = +sub in +the range [start, end]. Optional arguments start and end are +interpreted as in slice notation.

+

The subsequence to search for may be any bytes-like object or an +integer in the range 0 to 255.

+
+

Changed in version 3.3: A= +lso accept an integer in the range 0 to 255 as the subsequence.

+
+
+ +
+
+bytes.decode(encoding=3D"utf-8", errors=3D"strict= +")=C2=B6
+
+bytearray.decode(encoding=3D"utf-8", errors=3D"s= +trict")=C2=B6
+

Return a string decoded from the given bytes. Default encoding is +'utf-8'. errors may be given to set a different +error handling scheme. The default for errors is 'strict', me= +aning +that encoding errors raise a UnicodeError. Other possible values are +'ignore', 'replace' and any other name registered via +cod= +ecs.register_error(), see section Error Handlers. For a +list of possible encodings, see section Standard Encodings.

+
+

Note

+

Passing the encoding argument to str allows decoding any +bytes-like o= +bject directly, without needing to make a temporary +bytes or bytearray object.

+
+
+

Changed in version 3.1: A= +dded support for keyword arguments.

+
+
+ +
+
+bytes.endswith(suffix[, start[, end]]= +)=C2=B6
+
+bytearray.endswith(suffix[, start[, end]])=C2=B6
+

Return True if the binary data ends with the specified suffi= +x, +otherwise return False. suffix can also be a tuple of suffi= +xes to +look for. With optional start, test beginning at that position. = +With +optional end, stop comparing at that position.

+

The suffix(es) to search for may be any bytes-like object.

+
+ +
+
+bytes.find(sub[, = +start[, end]])=C2=B6
+
+bytearray.find(sub[, start[, en= +d]])=C2=B6
+

Return the lowest index in the data where the subsequence sub is found, +such that sub is contained in the slice s[start:end]. Optiona= +l +arguments start and end are interpreted as in slice notat= +ion. Return +-1<= +/code> if sub is not found.

+

The subsequence to search for may be any bytes-like object or an +integer in the range 0 to 255.

+
+

Note

+

The find() method should be used only if you need to know the +position of sub. To check if sub is a substring or not, = +use the +in operator:

+
= +
>>&= +gt;
>>> b'Py' in b'Python'
+True
+
+
+
+
+

Changed in version 3.3: A= +lso accept an integer in the range 0 to 255 as the subsequence.

+
+
+ +
+
+bytes.index(sub[, start[, end]])=C2=B6
+
+bytearray.index(sub[, start[, end]]= +)=C2=B6
+

Like find(), but raise ValueError when the +subsequence is not found.

+

The subsequence to search for may be any bytes-like object or an +integer in the range 0 to 255.

+
+

Changed in version 3.3: A= +lso accept an integer in the range 0 to 255 as the subsequence.

+
+
+ +
+
+bytes.join(iterable)=C2=B6
+
+bytearray.join(iterable)=C2=B6
+

Return a bytes or bytearray object which is the concatenation of the +binary data sequences in iterable. A TypeError will be raised +if there are any values in iterable that are not bytes-like +objects, including str<= +/span> objects. The +separator between elements is the contents of the bytes or +bytearray object providing this method.

+
+ +
+
+static bytes.maketrans(from, to)=C2=B6
+
+static bytearray.maketrans(from, to)=C2=B6
+

This static method returns a translation table usable for +bytes.transla= +te() that will map each character in from into t= +he +character at the same position in to; from and to must both be +bytes-like o= +bjects and have the same length.

+
+

New in version 3.1.

+
+
+ +
+
+bytes.partition(sep)=C2=B6
+
+bytearray.partition(sep)=C2=B6
+

Split the sequence at the first occurrence of sep, and retu= +rn a 3-tuple +containing the part before the separator, the separator itself or its +bytearray copy, and the part after the separator. +If the separator is not found, return a 3-tuple +containing a copy of the original sequence, followed by two empty bytes or +bytearray objects.

+

The separator to search for may be any bytes-like object.

+
+ +
+
+bytes.replace(old, new[, count])=C2=B6
+
+bytearray.replace(old, new[, count])=C2=B6
+

Return a copy of the sequence with all occurrences of subsequence old +replaced by new. If the optional argument count is given= +, only the +first count occurrences are replaced.

+

The subsequence to search for and its replacement may be any +bytes-like o= +bject.

+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.rfind(sub[, start[, end]])=C2=B6
+
+bytearray.rfind(sub[, start[, end]]= +)=C2=B6
+

Return the highest index in the sequence where the subsequence s= +ub is +found, such that sub is contained within s[start:end]. Option= +al +arguments start and end are interpreted as in slice notat= +ion. Return +-1<= +/code> on failure.

+

The subsequence to search for may be any bytes-like object or an +integer in the range 0 to 255.

+
+

Changed in version 3.3: A= +lso accept an integer in the range 0 to 255 as the subsequence.

+
+
+ +
+
+bytes.rindex(sub[, start[, end<= +/em>]])=C2=B6
+
+bytearray.rindex(sub[, start[, end]]= +)=C2=B6
+

Like rfind() but raises ValueError when the +subsequence sub is not found.

+

The subsequence to search for may be any bytes-like object or an +integer in the range 0 to 255.

+
+

Changed in version 3.3: A= +lso accept an integer in the range 0 to 255 as the subsequence.

+
+
+ +
+
+bytes.rpartition(sep)=C2=B6
+
+bytearray.rpartition(sep)=C2=B6
+

Split the sequence at the last occurrence of sep, and retur= +n a 3-tuple +containing the part before the separator, the separator itself or its +bytearray copy, and the part after the separator. +If the separator is not found, return a 3-tuple +containing two empty bytes or bytearray objects, followed by a copy of the +original sequence.

+

The separator to search for may be any bytes-like object.

+
+ +
+
+bytes.startswith(prefix[, start[, end]])=C2=B6
+
+bytearray.startswith(prefix[, start[, end]= +])=C2=B6
+

Return True if the binary data starts with the specified pre= +fix, +otherwise return False. prefix can also be a tuple of prefi= +xes to +look for. With optional start, test beginning at that position. = +With +optional end, stop comparing at that position.

+

The prefix(es) to search for may be any bytes-like object.

+
+ +
+
+bytes.translate(table, /, delete=3Db'')=C2=B6
+
+bytearray.translate(table, /, delete=3Db'')=C2=B6
+

Return a copy of the bytes or bytearray object where all bytes occur= +ring in +the optional argument delete are removed, and the remaining bytes = +have +been mapped through the given translation table, which must be a bytes +object of length 256.

+

You can use the = +bytes.maketrans() method to create a translation +table.

+

Set the table argument to None for translations that only d= +elete +characters:

+
= +
>>&= +gt;
>>> b'read this short text'.translate(None, b'aeiou')
+b'rd ths shrt txt'
+
+
+
+

Changed in version 3.6: <= +em>delete is now supported as a keyword argument.

+
+
+ +

The following methods on bytes and bytearray objects have default behavi= +ours +that assume the use of ASCII compatible binary formats, but can still be us= +ed +with arbitrary binary data by passing appropriate arguments. Note that all = +of +the bytearray methods in this section do not operate in place, and= + instead +produce new objects.

+
+
+bytes.center(width[, fillbyte])=C2=B6
+
+bytearray.center(width[, fillbyte])=C2=B6
+

Return a copy of the object centered in a sequence of length wid= +th. +Padding is done using the specified fillbyte (default is an ASCII +space). For bytes<= +/a> objects, the original sequence is returned if +width is less than or equal to len(s).

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.ljust(width[, fillbyte]= +)=C2=B6= +
+
+bytearray.ljust(width[, fillbyte])= +=C2=B6
+

Return a copy of the object left justified in a sequence of length <= +em>width. +Padding is done using the specified fillbyte (default is an ASCII +space). For bytes<= +/a> objects, the original sequence is returned if +width is less than or equal to len(s).

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.lstrip([chars])=C2=B6
+
+bytearray.lstrip([chars])=C2=B6
+

Return a copy of the sequence with specified leading bytes removed. = + The +chars argument is a binary sequence specifying the set of byte val= +ues to +be removed - the name refers to the fact this method is usually used with +ASCII characters. If omitted or None, the chars argument defa= +ults +to removing ASCII whitespace. The chars argument is not a prefix; +rather, all combinations of its values are stripped:

+
= +
>>&= +gt;
>>> b'   spacious   '.lstrip()
+b'spacious   '
+>>> b'www.example.com'.lstrip(b'cmowz.')
+b'example.com'
+
+
+

The binary sequence of byte values to remove may be any +bytes-like o= +bject.

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.rjust(width[, fillbyte]= +)=C2=B6= +
+
+bytearray.rjust(width[, fillbyte])= +=C2=B6
+

Return a copy of the object right justified in a sequence of length = +width. +Padding is done using the specified fillbyte (default is an ASCII +space). For bytes<= +/a> objects, the original sequence is returned if +width is less than or equal to len(s).

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.rsplit(sep=3DNone, maxsplit=3D-1)=C2=B6
+
+bytearray.rsplit(sep=3DNone, maxsplit=3D-1<= +span class=3D"sig-paren">)=C2=B6
+

Split the binary sequence into subsequences of the same type, using = +sep +as the delimiter string. If maxsplit is given, at most maxspli= +t splits +are done, the rightmost ones. If sep is not specified or= + None, +any subsequence consisting solely of ASCII whitespace is a separator. +Except for splitting from the right, rsplit() behaves like +split() which is described in detail below.

+
+ +
+
+bytes.rstrip([chars])=C2=B6
+
+bytearray.rstrip([chars])=C2=B6
+

Return a copy of the sequence with specified trailing bytes removed.= + The +chars argument is a binary sequence specifying the set of byte val= +ues to +be removed - the name refers to the fact this method is usually used with +ASCII characters. If omitted or None, the chars argument defa= +ults to +removing ASCII whitespace. The chars argument is not a suffix; ra= +ther, +all combinations of its values are stripped:

+
= +
>>&= +gt;
>>> b'   spacious   '.rstrip()
+b'   spacious'
+>>> b'mississippi'.r=
+strip(b'ipz')
+b'mississ'
+
+
+

The binary sequence of byte values to remove may be any +bytes-like o= +bject.

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.split(sep=3DNone, maxsplit=3D-1)=C2=B6
+
+bytearray.split(sep=3DNone, maxsplit=3D-1<= +span class=3D"sig-paren">)=C2=B6
+

Split the binary sequence into subsequences of the same type, using = +sep +as the delimiter string. If maxsplit is given and non-negative, at= + most +maxsplit splits are done (thus, the list will have at most maxsplit+1= + +elements). If maxsplit is not specified or is -1, then there = +is no +limit on the number of splits (all possible splits are made).

+

If sep is given, consecutive delimiters are not grouped togethe= +r and are +deemed to delimit empty subsequences (for example, b'1,,2'.split(b',') +returns [b= +'1', b'', b'2']). The sep argument may consist of a +multibyte sequence (for example, b'1<>2<>3'.split(b'<>') returns +[b'1', b'2', b'3']). Splitting an empty sequence with a specified +separator returns [b''] or [bytearray(b'')] depending on the type +of object being split. The sep argument may be any +bytes-like o= +bject.

+

For example:

+
= +
>>&= +gt;
>>> b'1,2,3'.split(b',')
+[b'1', b'2', b'3']
+>>> b'1,2,3'.split(b',', maxsplit=3D1)
+[b'1', b'2,3']
+>>> b'1,2,,3,'.split=
+(b',')
+[b'1', b'2', b'', b'3', b'']
+
+
+

If sep is not specified or is None, a different splitting a= +lgorithm +is applied: runs of consecutive ASCII whitespace are regarded as a single +separator, and the result will contain no empty strings at the start or +end if the sequence has leading or trailing whitespace. Consequently, +splitting an empty sequence or a sequence consisting solely of ASCII +whitespace without a specified separator returns [].

+

For example:

+
= +
>>&= +gt;
>>> b'1 2 3'.split()
+[b'1', b'2', b'3']
+>>> b'1 2 3'.split(maxsplit=3D1)
+[b'1', b'2 3']
+>>> b'   1   2   3   '.split()
+[b'1', b'2', b'3']
+
+
+
+ +
+
+bytes.strip([chars])=C2=B6
+
+bytearray.strip([chars])=C2=B6
+

Return a copy of the sequence with specified leading and trailing by= +tes +removed. The chars argument is a binary sequence specifying the se= +t of +byte values to be removed - the name refers to the fact this method is +usually used with ASCII characters. If omitted or None, the chars<= +/em> +argument defaults to removing ASCII whitespace. The chars argument= + is +not a prefix or suffix; rather, all combinations of its values are +stripped:

+
= +
>>&= +gt;
>>> b'   spacious   '.strip()
+b'spacious'
+>>> b'www.example.com'.strip(b'cmowz.')
+b'example'
+
+
+

The binary sequence of byte values to remove may be any +bytes-like o= +bject.

+
+

Note

+

The bytearray version of this method does not operate in place = +- +it always produces a new object, even if no changes were made.

+
+
+ +

The following methods on bytes and bytearray objects assume the use of A= +SCII +compatible binary formats and should not be applied to arbitrary binary dat= +a. +Note that all of the bytearray methods in this section do not oper= +ate in +place, and instead produce new objects.

+
+
+bytes.capitalize()=C2=B6
+
+bytearray.capitalize()=C2=B6
+

Return a copy of the sequence with each byte interpreted as an ASCII +character, and the first byte capitalized and the rest lowercased. +Non-ASCII byte values are passed through unchanged.

+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.expandtabs(tabsize=3D8)=C2=B6
+
+bytearray.expandtabs(tabsize=3D8)=C2=B6
+

Return a copy of the sequence where all ASCII tab characters are rep= +laced +by one or more ASCII spaces, depending on the current column and the given +tab size. Tab positions occur every tabsize bytes (default is 8, +giving tab positions at columns 0, 8, 16 and so on). To expand the +sequence, the current column is set to zero and the sequence is examined +byte by byte. If the byte is an ASCII tab character (b'\t'), one or +more space characters are inserted in the result until the current column +is equal to the next tab position. (The tab character itself is not +copied.) If the current byte is an ASCII newline (b'\n') or +carriage return (b'\r'), it is copied and the current column is reset +to zero. Any other byte value is copied unchanged and the current column +is incremented by one regardless of how the byte value is represented when +printed:

+
= +
>>&= +gt;
>>> b'01\t012\t0123\t01234'.expandtabs()
+b'01      012     0123    01234'
+>>> b'01\t012\t0123\t01234'.expandtabs(4)
+b'01  012 0123    01234'
+
+
+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.isalnum()=C2=B6
+
+bytearray.isalnum()=C2=B6
+

Return True if all bytes in the sequence are alphabetical ASCII = +characters +or ASCII decimal digits and the sequence is not empty, False otherwise. +Alphabetic ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'. ASCII decimal +digits are those byte values in the sequence b'0123456789'.

+

For example:

+
= +
>>&= +gt;
>>> b'ABCabc1'.isalnum()
+True
+>>> b'ABC abc1'.isal=
+num()
+False
+
+
+
+ +
+
+bytes.isalpha()=C2=B6
+
+bytearray.isalpha()=C2=B6
+

Return True if all bytes in the sequence are alphabetic ASCII ch= +aracters +and the sequence is not empty, False otherwise. Alphabetic ASCII +characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.

+

For example:

+
= +
>>&= +gt;
>>> b'ABCabc'.isalpha()
+True
+>>> b'ABCabc1'.isalp=
+ha()
+False
+
+
+
+ +
+
+bytes.isascii()=C2=B6
+
+bytearray.isascii()=C2=B6
+

Return True if the sequence is empty or all bytes in the sequenc= +e are ASCII, +False otherwise. +ASCII bytes are in the range 0-0x7F.

+
+

New in version 3.7.

+
+
+ +
+
+bytes.isdigit()=C2=B6
+
+bytearray.isdigit()=C2=B6
+

Return True if all bytes in the sequence are ASCII decimal digit= +s +and the sequence is not empty, False otherwise. ASCII decimal digits ar= +e +those byte values in the sequence b'0123456789'.

+

For example:

+
= +
>>&= +gt;
>>> b'1234'.isdigit()
+True
+>>> b'1.23'.isdigit<=
+/span>()
+False
+
+
+
+ +
+
+bytes.islower()=C2=B6
+
+bytearray.islower()=C2=B6
+

Return True if there is at least one lowercase ASCII character +in the sequence and no uppercase ASCII characters, False otherwise.

+

For example:

+
= +
>>&= +gt;
>>> b'hello world'.islower()
+True
+>>> b'Hello world'.i=
+slower()
+False
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +

+ +
+
+bytes.isspace()=C2=B6
+
+bytearray.isspace()=C2=B6
+

Return True if all bytes in the sequence are ASCII whitespace an= +d the +sequence is not empty, False otherwise. ASCII whitespace characters ar= +e +those byte values in the sequence b' \t\n\r\x0b\f'<= +/code> (space, tab, newline, +carriage return, vertical tab, form feed).

+
+ +
+
+bytes.istitle()=C2=B6
+
+bytearray.istitle()=C2=B6
+

Return True if the sequence is ASCII titlecase and the sequence = +is not +empty, Fal= +se otherwise. See bytes.title() for more details on the +definition of =E2=80=9Ctitlecase=E2=80=9D.

+

For example:

+
= +
>>&= +gt;
>>> b'Hello World'.istitle()
+True
+>>> b'Hello world'.i=
+stitle()
+False
+
+
+
+ +
+
+bytes.isupper()=C2=B6
+
+bytearray.isupper()=C2=B6
+

Return True if there is at least one uppercase alphabetic ASCII = +character +in the sequence and no lowercase ASCII characters, False otherwise.

+

For example:

+
= +
>>&= +gt;
>>> b'HELLO WORLD'.isupper()
+True
+>>> b'Hello world'.i=
+supper()
+False
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +

+ +
+
+bytes.lower()=C2=B6
+
+bytearray.lower()=C2=B6
+

Return a copy of the sequence with all the uppercase ASCII character= +s +converted to their corresponding lowercase counterpart.

+

For example:

+
= +
>>&= +gt;
>>> b'Hello World'.lower()
+b'hello world'
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +

+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.splitlines(keepends=3DFalse)=C2=B6
+
+bytearray.splitlines(keepends=3DFalse)=C2=B6<= +/dt> +

Return a list of the lines in the binary sequence, breaking at ASCII +line boundaries. This method uses the universal newlines approach +to splitting lines. Line breaks are not included in the resulting list +unless keepends is given and true.

+

For example:

+
= +
>>&= +gt;
>>> b'ab c\n\nde fg\rkl\r\n'<=
+span class=3D"o">.splitlines()
+[b'ab c', b'', b'de fg', b'kl']
+>>> b'ab c\n\nde f=
+g\rkl\r\n'.splitlines(keepends=3DTrue<=
+span class=3D"p">)
+[b'ab c\n', b'\n', b'de fg\r', b'kl\r\n']
+
+
+

Unlike split() when a delimiter string sep is given, this +method returns an empty list for the empty string, and a terminal line +break does not result in an extra line:

+
= +
>>&= +gt;
>>> b"".split(b<=
+/span>'\n'), b"Two lines\n".split(b'\n')
+([b''], [b'Two lines', b''])
+>>> b"".splitlines(), b"One line\n".splitlines()
+([], [b'One line'])
+
+
+
+ +
+
+bytes.swapcase()=C2=B6
+
+bytearray.swapcase()=C2=B6
+

Return a copy of the sequence with all the lowercase ASCII character= +s +converted to their corresponding uppercase counterpart and vice-versa.

+

For example:

+
= +
>>&= +gt;
>>> b'Hello World'.swapcase()
+b'hELLO wORLD'
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +

Unlike str.swapc= +ase(), it is always the case that +bin.swapca= +se().swapcase() =3D=3D bin for the binary versions. Case +conversions are symmetrical in ASCII, even though that is not generally +true for arbitrary Unicode code points.

+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.title()=C2=B6
+
+bytearray.title()=C2=B6
+

Return a titlecased version of the binary sequence where words start= + with +an uppercase ASCII character and the remaining characters are lowercase. +Uncased byte values are left unmodified.

+

For example:

+
= +
>>&= +gt;
>>> b'Hello world'.title()
+b'Hello World'
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +All other byte values are uncased.

+

The algorithm uses a simple language-independent definition of a word as +groups of consecutive letters. The definition works in many contexts but +it means that apostrophes in contractions and possessives form word +boundaries, which may not be the desired result:

+
= +
>>&= +gt;
>>> b"they're bill's friends from the UK"<=
+/span>.title()
+b"They'Re Bill'S Friends From The Uk"
+
+
+

A workaround for apostrophes can be constructed using regular expression= +s:

+
= +
>>&= +gt;
>>> import re
+>>> def titlecase(s):
+...     return re.sub(rb"[A-Z=
+a-z]+('[A-Za-z]+)?",
+...                   lambda mo: mo.group(0)[0:1].upp=
+er() +
+...                              mo.group(0)[1:].lower(),
+...                   s<=
+span class=3D"p">)
+...
+>>> titlecase(b"they=
+'re bill's friends.")
+b"They're Bill's Friends."
+
+
+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.upper()=C2=B6
+
+bytearray.upper()=C2=B6
+

Return a copy of the sequence with all the lowercase ASCII character= +s +converted to their corresponding uppercase counterpart.

+

For example:

+
= +
>>&= +gt;
>>> b'Hello World'.upper()
+b'HELLO WORLD'
+
+
+

Lowercase ASCII characters are those byte values in the sequence +b'abcdefgh= +ijklmnopqrstuvwxyz'. Uppercase ASCII characters +are those byte values in the sequence b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. +

+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+bytes.zfill(width)=C2=B6
+
+bytearray.zfill(width)=C2=B6
+

Return a copy of the sequence left filled with ASCII b'0' digits= + to +make a sequence of length width. A leading sign prefix (b'+'/ +b'-') is handled by inserting the padding after the sign chara= +cter +rather than before. For bytes objects, the original sequence is +returned if width is less than or equal to len(seq).

+

For example:

+
= +
>>&= +gt;
>>> b"42".=
+zfill(=
+5)
+b'00042'
+>>> b"-42".zfill(5)=
+
+b'-0042'
+
+
+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+ +
+
+

printf-style Bytes Formatting<= +a class=3D"headerlink" href=3D"https://docs.python.org/3/library/stdtypes.h= +tml#printf-style-bytes-formatting" title=3D"Permalink to this headline">=C2= +=B6

+
+

Note

+

The formatting operations described here exhibit a variety of quirks tha= +t +lead to a number of common errors (such as failing to display tuples and +dictionaries correctly). If the value being printed may be a tuple or +dictionary, wrap it in a tuple.

+
+

Bytes objects (bytes/<= +span class=3D"pre">bytearray) have one unique built-in operat= +ion: +the % operator (modulo). +This is also known as the bytes formatting or interpolation operator. +Given form= +at % values (where format is a bytes object), % conversion +specifications in format are replaced with zero or more elements o= +f values. +The effect is similar to using the sprintf() in the C lan= +guage.

+

If format requires a single argument, values may be a = +single non-tuple +object. 5 Otherwise, value= +s must be a tuple with exactly the number of +items specified by the format bytes object, or a single mapping object (for +example, a dictionary).

+

A conversion specifier contains two or more characters a= +nd has the following +components, which must occur in this order:

+
    +
  1. The '%' character, which marks the start of the specifier.

    +
  2. Mapping key (optional), consisting of a parenthesised sequence of ch= +aracters +(for example, (somename)).

  3. +
  4. Conversion flags (optional), which affect the result of some convers= +ion +types.

  5. +
  6. Minimum field width (optional). If specified as an '*' (asteris= +k), the +actual width is read from the next element of the tuple in values,= + and the +object to convert comes after the minimum field width and optional precisio= +n.

  7. +
  8. Precision (optional), given as a '.' (dot) followed by the preci= +sion. If +specified as '*' (an asterisk), the actual precision is read from the n= +ext +element of the tuple in values, and the value to convert comes aft= +er the +precision.

  9. +
  10. Length modifier (optional).

  11. +
  12. Conversion type.

  13. +
+

When the right argument is a dictionary (or other mapping type), then th= +e +formats in the bytes object must include a parenthesised mapping k= +ey into that +dictionary inserted immediately after the '%' character. The mapping ke= +y +selects the value to be formatted from the mapping. For example:

+
>>> print(b'%(language)s has %(number)03d qu=
+ote types.' %
+...       {b'language': b"Python", b"number": 2=
+})
+b'Python has 002 quote types.'
+
+
+

In this case no * specifiers may occur in a format (since they requi= +re a +sequential parameter list).

+

The conversion flag characters are:

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

Flag

Meaning

= +'#'

The value conversion will use the =E2=80=9Calternate form=E2=80=9D (= +where defined +below).

<= +span class=3D"pre">'0'

The conversion will be zero padded for numeric values.

= +'-'

The converted value is left adjusted (overrides the '0' +conversion if both are given).

<= +span class=3D"pre">' '

(a space) A blank should be left before a positive number (or empty +string) produced by a signed conversion.

= +'+'

A sign character ('+' or '-') will precede the conversion +(overrides a =E2=80=9Cspace=E2=80=9D flag).

+

A length modifier (h, <= +span class=3D"pre">l, or L) may be present, but is ignore= +d as it +is not necessary for Python =E2=80=93 so e.g. %ld is identical to %d.

+

The conversion types are:

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

Conversion

Meaning

Notes

= +'d'

Signed integer decimal.

<= +span class=3D"pre">'i'

Signed integer decimal.

= +'o'

Signed octal value.

(1)

<= +span class=3D"pre">'u'

Obsolete type =E2=80=93 it is identical to 'd'.

(8)

= +'x'

Signed hexadecimal (lowercase).

(2)

<= +span class=3D"pre">'X'

Signed hexadecimal (uppercase).

(2)

= +'e'

Floating point exponential format (lowercase).

(3)

<= +span class=3D"pre">'E'

Floating point exponential format (uppercase).

(3)

= +'f'

Floating point decimal format.

(3)

<= +span class=3D"pre">'F'

Floating point decimal format.

(3)

= +'g'

Floating point format. Uses lowercase exponential +format if exponent is less than -4 or not less than +precision, decimal format otherwise.

(4)

<= +span class=3D"pre">'G'

Floating point format. Uses uppercase exponential +format if exponent is less than -4 or not less than +precision, decimal format otherwise.

(4)

= +'c'

Single byte (accepts integer or single +byte objects).

<= +span class=3D"pre">'b'

Bytes (any object that follows the +buffer protocol<= +/a> or has +__bytes_= +_()).

(5)

= +'s'

's'= + is an alias for 'b' and should only +be used for Python2/3 code bases.

(6)

<= +span class=3D"pre">'a'

Bytes (converts any Python object using +repr(obj).= +encode('ascii','backslashreplace)).

(5)

= +'r'

'r'= + is an alias for 'a' and should only +be used for Python2/3 code bases.

(7)

<= +span class=3D"pre">'%'

No argument is converted, results in a '%' +character in the result.

+

Notes:

+
    +
  1. The alternate form causes a leading octal specifier ('0o') to be +inserted before the first digit.

  2. +
  3. The alternate form causes a leading '0x' or '0X' (depending = +on whether +the 'x' or 'X' format was used) to be inserted before the first dig= +it.

  4. +
  5. The alternate form causes the result to always contain a decimal poi= +nt, even if +no digits follow it.

    +

    The precision determines the number of digits after the decimal point an= +d +defaults to 6.

    +
  6. +
  7. The alternate form causes the result to always contain a decimal poi= +nt, and +trailing zeroes are not removed as they would otherwise be.

    +

    The precision determines the number of significant digits before and aft= +er the +decimal point and defaults to 6.

    +
  8. +
  9. If precision is N, the output is truncated to N characters.<= +/p>

  10. +
  11. b'%= +s' is deprecated, but will not be removed during the 3.x seri= +es.

  12. +
  13. b'%= +r' is deprecated, but will not be removed during the 3.x seri= +es.

  14. +
  15. See PEP 237.

  16. +
+
+

Note

+

The bytearray version of this method does not operate in place = +- it +always produces a new object, even if no changes were made.

+
+
+

See also

+

PEP 461= + - Adding % formatting to bytes and bytearray

+
+
+

New in version 3.5.

+
+
+
+

Memory Views=C2=B6

+

memoryview objects allow Python code to access the internal data +of an object that supports the buffer protocol without +copying.

+
+
+class memoryv= +iew(obj)=C2=B6
+

Create a memo= +ryview that references obj. obj must s= +upport the +buffer protocol. Built-in objects that support the buffer protocol include +bytes and bytearray.= +

+

A memoryview= + has the notion of an element, which is the +atomic memory unit handled by the originating object obj. For man= +y +simple types such as bytes and bytearr= +ay, an element +is a single byte, but other types such as <= +span class=3D"pre">array.array may have +bigger elements.

+

len(vie= +w) is equal to the length of tolist. +If view.nd= +im =3D 0, the length is 1. If view.ndim =3D 1, the length +is equal to the number of elements in the view. For higher dimensions, +the length is equal to the length of the nested list representation of +the view. The itemsize attribute will give you the +number of bytes in a single element.

+

A memoryview= + supports slicing and indexing to expose its data. +One-dimensional slicing will result in a subview:

+
= +
>>&= +gt;
>>> v =3D memoryvi=
+ew(b'abcefg')
+>>> v[1]
+98
+>>> v[-1]
+103
+>>> v[1:4]
+<memory at 0x7f3ddc9f4350>
+>>> bytes(v[1:4])
+b'bce'
+
+
+

If fo= +rmat is one of the native format specifiers +from the struct module, indexing with an int= +eger or a tuple of +integers is also supported and returns a single element with +the correct type. One-dimensional memoryviews can be indexed +with an integer or a one-integer tuple. Multi-dimensional memoryviews +can be indexed with tuples of exactly ndim integers where ndim= + is +the number of dimensions. Zero-dimensional memoryviews can be indexed +with the empty tuple.

+

Here is an example with a non-byte format:

+
= +
>>&= +gt;
>>> import array
+>>> a =3D array.array('l', [-11111111,=
+ 22222222, -33333333,=
+ 44444444])
+>>> m =3D memoryview(=
+a)
+>>> m[0]
+-11111111
+>>> m[-1]
+44444444
+>>> m[::2].tolist()
+[-11111111, -33333333]
+
+
+

If the underlying object is writable, the memoryview supports +one-dimensional slice assignment. Resizing is not allowed:

+
= +
>>&= +gt;
>>> data =3D bytea=
+rray(b'abcefg')
+>>> v =3D memoryview(=
+data)
+>>> v.readonly
+False
+>>> v[0] =3D ord(b'z')
+>>> data
+bytearray(b'zbcefg')
+>>> v[1:4] =3D b'123'
+>>> data
+bytearray(b'z123fg')
+>>> v[2:3] =3D b'spam'
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+ValueError: memory=
+view assignment: lvalue and rvalue have different structures
+>>> v[2:6] =3D b'spam'
+>>> data
+bytearray(b'z1spam')
+
+
+

One-dimensional memoryviews of hashable (read-only) types with formats +=E2=80=98B=E2=80=99, =E2=80=98b=E2=80=99 or =E2=80=98c=E2=80=99 are also ha= +shable. The hash is defined as +hash(m) =3D=3D hash(m.tobytes()= +):

+
= +
>>&= +gt;
>>> v =3D memoryvi=
+ew(b'abcefg')
+>>> hash(v) =3D=3D hash(b'abcefg')
+True
+>>> hash(v[2:4]) =3D=3D hash(b'ce')
+True
+>>> hash(v[::<=
+span class=3D"o">-2]) =3D=3D hash(b'abcefg'[::-2])
+True
+
+
+
+

Changed in version 3.3: O= +ne-dimensional memoryviews can now be sliced. +One-dimensional memoryviews with formats =E2=80=98B=E2=80=99, =E2=80=98b=E2= +=80=99 or =E2=80=98c=E2=80=99 are now hashable.

+
+
+

Changed in version 3.4: m= +emoryview is now registered automatically with +collections.abc.Sequence

+
+
+

Changed in version 3.5: m= +emoryviews can now be indexed with tuple of integers.

+
+

memoryview has several methods:

+
+
+__eq__(<= +/span>exporter)=C2=B6= +
+

A memoryview and a PEP 3118 exporter are equal if their shapes ar= +e +equivalent and if all corresponding values are equal when the operands=E2= +=80=99 +respective format codes are interpreted using struct syntax.

+

For the subset of struct format strings c= +urrently supported by +tolist()<= +/span>, v and <= +span class=3D"pre">w are equal if v.tolist() =3D=3D w.tolist():

+
= +
>>&= +gt;
>>> import array
+>>> a =3D array.array('I', [1, 2, 3,=
+ 4, 5=
+])
+>>> b =3D array.array('d', [1.0, 2.0<=
+span class=3D"p">, 3.0,<=
+/span> 4.0, 5.0])
+>>> c =3D array.array('b', [5, 3, 1])
+>>> x =3D memoryview(=
+a)
+>>> y =3D memoryview(=
+b)
+>>> x =3D=3D a =3D=3D<=
+/span> y =3D=3D b
+True
+>>> x.tolist() =
+=3D=3D a.tolist() =3D=3D y.tolist() =3D=3D b.tolist()
+True
+>>> z =3D y[::<=
+span class=3D"o">-2]
+>>> z =3D=3D c
+True
+>>> z.tolist() =
+=3D=3D c.tolist()
+True
+
+
+

If either format string is not supported by the struct module, +then the objects will always compare as unequal (even if the format +strings and buffer contents are identical):

+
= +
>>&= +gt;
>>> from ctypes =
+import BigEndianStructure=
+, c_long
+>>> class BEPoint(Big=
+EndianStructure):
+...     _fields_ =3D [("x", c_long), ("y", c_long)]
+...
+>>> point =3D BEPoint(=
+100, 200)
+>>> a =3D memoryview(=
+point)
+>>> b =3D memoryview(=
+point)
+>>> a =3D=3D point
+False
+>>> a =3D=3D b
+False
+
+
+

Note that, as with floating point numbers, v is = +w does not imply +v <= +span class=3D"pre">=3D=3D w for me= +moryview objects.

+
+

Changed in version 3.3: P= +revious versions compared the raw memory disregarding the item format +and the logical array structure.

+
+
+ +
+
+tobytes(= +order=3DNone)= +=C2= +=B6
+

Return the data in the buffer as a bytestring. This is equivalent t= +o +calling the bytes<= +/a> constructor on the memoryview.

+
= +
>>&= +gt;
>>> m =3D memoryvi=
+ew(b"abc")
+>>> m.tobytes()
+b'abc'
+>>> bytes(m)
+b'abc'
+
+
+

For non-contiguous arrays the result is equal to the flattened list +representation with all elements converted to bytes. tobytes() +supports all format strings, including those that are not in +struct module syntax.

+
+

New in version 3.8: ord= +er can be {=E2=80=98C=E2=80=99, =E2=80=98F=E2=80=99, =E2=80=98A=E2=80= +=99}. When order is =E2=80=98C=E2=80=99 or =E2=80=98F=E2=80=99, t= +he data +of the original array is converted to C or Fortran order. For contiguous +views, =E2=80=98A=E2=80=99 returns an exact copy of the physical memory. In= + particular, +in-memory Fortran order is preserved. For non-contiguous views, the +data is converted to C first. order=3DNone is the same as orde= +r=3D=E2=80=99C=E2=80=99.

+
+
+ +
+
+hex()=C2=B6
+

Return a string object containing two hexadecimal digits for each +byte in the buffer.

+
= +
>>&= +gt;
>>> m =3D memoryvi=
+ew(b"abc")
+>>> m.hex()
+'616263'
+
+
+
+

New in version 3.5.

+
+
+ +
+
+tolist(<= +/span>)=C2=B6
+

Return the data in the buffer as a list of elements.

+
= +
>>&= +gt;
>>> memoryview(b<=
+/span>'abc').tolist()
+[97, 98, 99]
+>>> import array
+>>> a =3D array.array('d', [1.1, 2.2<=
+span class=3D"p">, 3.3])=
+
+>>> m =3D memoryview(=
+a)
+>>> m.tolist()
+[1.1, 2.2, 3.3]
+
+
+
+

Changed in version 3.3: <= +a class=3D"reference internal" href=3D"https://docs.python.org/3/library/st= +dtypes.html#memoryview.tolist" title=3D"memoryview.tolist">tolist() now supports all single character native formats in +struct module syntax as well as multi-dimens= +ional +representations.

+
+
+ +
+
+toreadonly()=C2=B6
+

Return a readonly version of the memoryview object. The original +memoryview object is unchanged.

+
= +
>>&= +gt;
>>> m =3D memoryvi=
+ew(bytearray(b'abc'))
+>>> mm =3D m.toreadonly()
+>>> mm.tolist()
+[89, 98, 99]
+>>> mm[0] =3D 42
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+TypeError: cannot =
+modify read-only memory
+>>> m[0] =3D 43
+>>> mm.tolist()
+[43, 98, 99]
+
+
+
+

New in version 3.8.

+
+
+ +
+
+release(= +)=C2=B6
+

Release the underlying buffer exposed by the memoryview object. Man= +y +objects take special actions when a view is held on them (for example, +a bytearray would temporarily forbid resizing); therefore, +calling release() is handy to remove these restrictions (and free any +dangling resources) as soon as possible.

+

After this method has been called, any further operation on the view +raises a ValueError<= +/span> (except <= +span class=3D"pre">release() itself which can +be called multiple times):

+
= +
>>&= +gt;
>>> m =3D memoryvi=
+ew(b'abc')
+>>> m.release()
+>>> m[0]
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+ValueError: operat=
+ion forbidden on released memoryview object
+
+
+

The context management protocol can be used for a similar effect, +using the = +with statement:

+
= +
>>&= +gt;
>>> with memoryview(b'abc') as m:
+...     m[0]
+...
+97
+>>> m[0]
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+ValueError: operat=
+ion forbidden on released memoryview object
+
+
+
+

New in version 3.2.

+
+
+ +
+
+cast(format[, <= +em class=3D"sig-param">shape])=C2=B6
+

Cast a memoryview to a new format or shape. shape defaults = +to +[byte_leng= +th//new_itemsize], which means that the result view +will be one-dimensional. The return value is a new memoryview, but +the buffer itself is not copied. Supported casts are 1D -> C-contiguous +and C-contiguous -> 1D.

+

The destination format is restricted to a single element native format i= +n +struct syntax. One of the formats must be a = +byte format +(=E2=80=98B=E2=80=99, =E2=80=98b=E2=80=99 or =E2=80=98c=E2=80=99). The byte= + length of the result must be the same +as the original length.

+

Cast 1D/long to 1D/unsigned bytes:

+
= +
>>&= +gt;
>>> import array
+>>> a =3D array.array('l', [1,2,3])
+>>> x =3D memoryview(=
+a)
+>>> x.format
+'l'
+>>> x.itemsize
+8
+>>> len(x)
+3
+>>> x.nbytes
+24
+>>> y =3D x.cast('B'<=
+/span>)
+>>> y.format
+'B'
+>>> y.itemsize
+1
+>>> len(y)
+24
+>>> y.nbytes
+24
+
+
+

Cast 1D/unsigned bytes to 1D/char:

+
= +
>>&= +gt;
>>> b =3D bytearra=
+y(b'zyz')
+>>> x =3D memoryview(=
+b)
+>>> x[0] =3D b'a'
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+ValueError: memory=
+view: invalid value for format "B"
+>>> y =3D x.cast('c'<=
+/span>)
+>>> y[0] =3D b'a'
+>>> b
+bytearray(b'ayz')
+
+
+

Cast 1D/bytes to 3D/ints to 1D/signed char:

+
= +
>>&= +gt;
>>> import struct
+>>> buf =3D struct.pack("i"*12, *list=
+(range=
+(12)))
+>>> x =3D memoryview(=
+buf)
+>>> y =3D x.cast('i'<=
+/span>, shape=3D[2,2,<=
+span class=3D"mi">3])
+>>> y.tolist()
+[[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]
+>>> y.format
+'i'
+>>> y.itemsize
+4
+>>> len(y)
+2
+>>> y.nbytes
+48
+>>> z =3D y.cast('b'<=
+/span>)
+>>> z.format
+'b'
+>>> z.itemsize
+1
+>>> len(z)
+48
+>>> z.nbytes
+48
+
+
+

Cast 1D/unsigned long to 2D/unsigned long:

+
= +
>>&= +gt;
>>> buf =3D struct<=
+/span>.pack("L"*6, *list(ran=
+ge(6)))
+>>> x =3D memoryview(=
+buf)
+>>> y =3D x.cast('L'<=
+/span>, shape=3D[2,3])
+>>> len(y)
+2
+>>> y.nbytes
+48
+>>> y.tolist()
+[[0, 1, 2], [3, 4, 5]]
+
+
+
+

New in version 3.3.

+
+
+

Changed in version 3.5: T= +he source format is no longer restricted when casting to a byte view.

+
+
+ +

There are also several readonly attributes available:

+
+
+obj=C2=B6
+

The underlying object of the memoryview:

+
= +
>>&= +gt;
>>> b  =3D bytearr=
+ay(b'xyz')
+>>> m =3D memoryview(=
+b)
+>>> m.obj is <=
+span class=3D"n">b
+True
+
+
+
+

New in version 3.3.

+
+
+ +
+
+nbytes=C2=B6
+

nby= +tes =3D=3D product(sh= +ape) * itemsize =3D=3D len(m.tobytes()). This is +the amount of space in bytes that the array would use in a contiguous +representation. It is not necessarily equal to len(m):

+
= +
>>&= +gt;
>>> import array
+>>> a =3D array.array('i', [1,2,3,4,5])
+>>> m =3D memoryview(=
+a)
+>>> len(m)
+5
+>>> m.nbytes
+20
+>>> y =3D m[::<=
+span class=3D"mi">2]
+>>> len(y)
+3
+>>> y.nbytes
+12
+>>> len(y.tobytes())
+12
+
+
+

Multi-dimensional arrays:

+
= +
>>&= +gt;
>>> import struct
+>>> buf =3D struct.pack("d"*12, *[1.5*x for x in range(12)])
+>>> x =3D memoryview(=
+buf)
+>>> y =3D x.cast('d'<=
+/span>, shape=3D[3,4])
+>>> y.tolist()
+[[0.0, 1.5, 3.0, 4.5], [6.0, 7.5, 9.0, 10.5], [12.0, 13.=
+5, 15.0, 16.5]]
+>>> len(y)
+3
+>>> y.nbytes
+96
+
+
+
+

New in version 3.3.

+
+
+ +
+
+readonly=C2=B6
+

A bool indicating whether the memory is read only.

+
+ +
+
+format=C2=B6
+

A string containing the format (in struct module style) for each +element in the view. A memoryview can be created from exporters with +arbitrary format strings, but some methods (e.g. tolist()) are +restricted to native single element formats.

+
+

Changed in version 3.3: f= +ormat 'B'<= +/span> is now handled according to the struct module syntax. +This means that memoryview(b'abc')[0] =3D=3D b'abc'[0] =3D=3D 97.

+
+
+ +
+
+itemsize=C2=B6
+

The size in bytes of each element of the memoryview:

+
= +
>>&= +gt;
>>> import array,=
+ struct
+>>> m =3D memoryview(=
+array.array('H'<=
+span class=3D"p">, [3200=
+0, 32001, 32002]))
+>>> m.itemsize
+2
+>>> m[0]
+32000
+>>> struct.calcsize('H') =3D=3D m.itemsize
+True
+
+
+
+ +
+
+ndim=C2=B6
+

An integer indicating how many dimensions of a multi-dimensional arr= +ay the +memory represents.

+
+ +
+
+shape=C2=B6
+

A tuple of integers the length of ndim giving the shape of the +memory as an N-dimensional array.

+
+

Changed in version 3.3: A= +n empty tuple instead of None when ndim =3D 0.

+
+
+ +
+
+strides=C2=B6
+

A tuple of integers the length of ndim giving the size in bytes= + to +access each element for each dimension of the array.

+
+

Changed in version 3.3: A= +n empty tuple instead of None when ndim =3D 0.

+
+
+ +
+
+suboffsets=C2=B6
+

Used internally for PIL-style arrays. The value is informational onl= +y.

+
+ +
+
+c_contiguous=C2=B6
+

A bool indicating whether the memory is C-contiguous.

+
+

New in version 3.3.

+
+
+ +
+
+f_contiguous=C2=B6
+

A bool indicating whether the memory is Fortran contiguous.

+
+

New in version 3.3.

+
+
+ +
+
+contiguous=C2=B6
+

A bool indicating whether the memory is contiguous.

+
+

New in version 3.3.

+
+
+ +
+ +
+
+
+

Set Types =E2=80=94 set, frozenset=C2=B6

+

A set object is an unordered coll= +ection of distinct ha= +shable objects. +Common uses include membership testing, removing duplicates from a sequence= +, and +computing mathematical operations such as intersection, union, difference, = +and +symmetric difference. +(For other containers see the built-in dict, list= +, +and tuple clas= +ses, and the collections module.)

+

Like other collections, sets support x in set, len(set), and for x in +set. Being an unordered collection, sets= + do not record element position or +order of insertion. Accordingly, sets do not support indexing, slicing, or +other sequence-like behavior.

+

There are currently two built-in set types, set and frozenset. +The set type is mu= +table =E2=80=94 the contents can be changed using methods +like add() and remove(). Since it = +is mutable, it has no +hash value and cannot be used as either a dictionary key or as an element o= +f +another set. The froz= +enset type is immutable and hashable =E2=80=94 +its contents cannot be altered after it is created; it can therefore be use= +d as +a dictionary key or as an element of another set.

+

Non-empty sets (not frozensets) can be created by placing a comma-separa= +ted list +of elements within braces, for example: {'jack', 'sjoerd'}= +, in addition to the +set constructor. +

The constructors for both classes work the same:

+
+
+class set([iterable])= +=C2=B6
+
+class frozens= +et([iterable])=C2=B6
+

Return a new set or frozenset object whose elements are taken from +iterable. The elements of a set must be hashable. To +represent sets of sets, the inner sets must be frozenset +objects. If iterable is not specified, a new empty set is +returned.

+

Instances of set and frozenset provide the following +operations:

+
+
+len(s)
+

Return the number of elements in set s (cardinality of = +s).

+
+ +
+
+x in s
+

Test x for membership in s.

+
+ +
+
+x not in s
+

Test x for non-membership in s.

+
+ +
+
+isdisjoint(other)=C2=B6= +
+

Return True if the set has no elements in common with other<= +/em>. Sets are +disjoint if and only if their intersection is the empty set.

+
+ +
+
+issubset= +(other)=C2=B6= +
+
+set <=3D other
+

Test whether every element in the set is in other.

+
+ +
+
+set < other
+

Test whether the set is a proper subset of other, that is, +set= + <=3D other and set !=3D other.

+
+ +
+
+issuperset(other)=C2=B6= +
+
+set >=3D other
+

Test whether every element in other is in the set.

+
+ +
+
+set > other
+

Test whether the set is a proper superset of other, that is= +, set >=3D +other and set !=3D oth= +er.

+
+ +
+
+union(*others)= +=C2=B6 +
+set | other | ...
+

Return a new set with elements from the set and all others.

+
+ +
+
+intersection(*others)= += +=C2=B6
+
+set & other & ...
+

Return a new set with elements common to the set and all others.

+
+ +
+
+difference(*others)=C2= +=B6
+
+set - other - ...
+

Return a new set with elements in the set that are not in the others= +.

+
+ +
+
+symmetric_difference(other)=C2=B6
+
+set ^ other
+

Return a new set with elements in either the set or other b= +ut not both.

+
+ +
+
+copy()=C2=B6
+

Return a shallow copy of the set.

+
+ +

Note, the non-operator versions of union(), intersection(), +dif= +ference(), and symmetric_difference(), issubset(), and +iss= +uperset() methods will accept any iterable as an argument= +. In +contrast, their operator based counterparts require their arguments to be +sets. This precludes error-prone constructions like set('abc') & 'cbs' +in favor of the more readable = +set('abc').intersection('cbs').

+

Both set and frozenset support set to set comparisons. Two +sets are equal if and only if every element of each set is contained in the +other (each is a subset of the other). A set is less than another set if an= +d +only if the first set is a proper subset of the second set (is a subset, bu= +t +is not equal). A set is greater than another set if and only if the first s= +et +is a proper superset of the second set (is a superset, but is not equal). +

Instances of set are compared to instances of = +frozenset +based on their members. For example, set('abc') =3D=3D frozenset('abc') +returns Tr= +ue and so does <= +span class=3D"pre">set('abc') in set([frozenset('abc')]).

+

The subset and equality comparisons do not generalize to a total orderin= +g +function. For example, any two nonempty disjoint sets are not equal and ar= +e not +subsets of each other, so all of the following return False: = +a<b, +a=3D=3Db, or a>b.

+

Since sets only define partial ordering (subset relationships), the outp= +ut of +the list.sort() method is undefined for lists of sets.

+

Set elements, like dictionary keys, must be hashable.

+

Binary operations that mix set<= +/span> instances with frozenset +return the type of the first operand. For example: frozenset('ab') | +set('bc') returns an instance of frozenset.

+

The following table lists operations available for set that do not +apply to immutable instances of frozenset:

+
+
+update(<= +/span>*others)=C2=B6 +
+set |=3D other | ...
+

Update the set, adding elements from all others.

+
+ +
+
+intersection_update(*others)=C2=B6
+
+set &=3D other & ...
+

Update the set, keeping only elements found in it and all others. +

+ +
+
+difference_update(*others)=C2=B6
+
+set -=3D other | ...
+

Update the set, removing elements found in others.

+
+ +
+
+symmetric_difference_update(other)=C2=B6
+
+set ^=3D other
+

Update the set, keeping only elements found in either set, but not i= +n both.

+
+ +
+
+add(elem)=C2=B6
+

Add element elem to the set.

+
+ +
+
+remove(<= +/span>elem)=C2=B6
+

Remove element elem from the set. Raises KeyError if elem= + is +not contained in the set.

+
+ +
+
+discard(= +elem)<= +a class=3D"headerlink" href=3D"https://docs.python.org/3/library/stdtypes.h= +tml#frozenset.discard" title=3D"Permalink to this definition">=C2=B6 +

Remove element elem from the set if it is present.

+
+ +
+
+pop()=C2=B6
+

Remove and return an arbitrary element from the set. Raises +KeyError= + if the set is empty.

+
+ +
+
+clear()=C2=B6
+

Remove all elements from the set.

+
+ +

Note, the non-operator versions of the update(), +intersection_update(), differen= +ce_update(), and +symmetric_difference_update()<= +/a> methods will accept any iterable as an +argument.

+

Note, the elem argument to the __contains__(), = +remove(), and +discard()= + methods may be a set. To support searching for an equiv= +alent +frozenset, a temporary one is created from elem.

+
+ +
+
+

Mapping Types =E2=80=94 dict=C2=B6

+

A m= +apping object maps hashable values to arbitrary objects. +Mappings are mutable objects. There is currently only one standard mapping +type, the dictionary. (For other containers see the= + built-in +list, set, and tuple classes, and the +collections module.)

+

A dictionary=E2=80=99s keys are almost arbitrary values. Value= +s that are not +hashable, = +that is, values containing lists, dictionaries or other +mutable types (that are compared by value rather than by object identity) m= +ay +not be used as keys. Numeric types used for keys obey the normal rules for +numeric comparison: if two numbers compare equal (such as 1 and 1.0= +) +then they can be used interchangeably to index the same dictionary entry. = +(Note +however, that since computers store floating-point numbers as approximation= +s it +is usually unwise to use them as dictionary keys.)

+

Dictionaries can be created by placing a comma-separated list of key: value +pairs within braces, for example: {'jack': 4098, 'sjoerd': 4127} = +or {4098:<= +/span> +'jack', 4127: 'sjoerd'}, or by the dict constructor.

+
+
+class dict(**kwarg<= +span class=3D"sig-paren">)=C2=B6
+
+class dict(mapping,= + **kwarg) +
+class dict(iterable= +, **kwarg) +

Return a new dictionary initialized from an optional positional argu= +ment +and a possibly empty set of keyword arguments.

+

If no positional argument is given, an empty dictionary is created. +If a positional argument is given and it is a mapping object, a dictionary +is created with the same key-value pairs as the mapping object. Otherwise, +the positional argument must be an iterable object. Each item in +the iterable must itself be an iterable with exactly two objects. The +first object of each item becomes a key in the new dictionary, and the +second object the corresponding value. If a key occurs more than once, the +last value for that key becomes the corresponding value in the new +dictionary.

+

If keyword arguments are given, the keyword arguments and their values a= +re +added to the dictionary created from the positional argument. If a key +being added is already present, the value from the keyword argument +replaces the value from the positional argument.

+

To illustrate, the following examples all return a dictionary equal to +{"one": 1, "two": 2, "three": 3}:

+
= +
>>&= +gt;
>>> a =3D dict(one=
+=3D1, two=3D2, three=3D=
+3)
+>>> b =3D {'one': 1,=
+ 'two': 2, 'three': 3=
+}
+>>> c =3D dict(zip(['one', 'two', 'three']=
+, [1, 2, 3]))
+>>> d =3D dict([('two', 2), ('one', 1), (=
+'three', 3)])
+>>> e =3D dict({'three': 3, 'one'<=
+span class=3D"p">: 1, 'two': 2})
+>>> a =3D=3D b =3D=3D<=
+/span> c =3D=3D d =3D=3D e
+True
+
+
+

Providing keyword arguments as in the first example only works for keys = +that +are valid Python identifiers. Otherwise, any valid keys can be used.

+

These are the operations that dictionaries support (and therefore, custo= +m +mapping types should support too):

+
+
+list(d)
+

Return a list of all the keys used in the dictionary d.

+
+ +
+
+len(d)
+

Return the number of items in the dictionary d.

+
+ +
+
+d[key]
+

Return the item of d with key key. Raises a KeyError if <= +em>key is +not in the map.

+

If a subclass of dict defines a method __missing__()<= +/code> and key +is not present, the d[key] operation calls that method with the key key +as argument. The d[key] operation then returns or raises whatever is +returned or raised by the __missing__(key) call. +No other operations or methods invoke __missing__(). If +__mi= +ssing__() is not defined, <= +span class=3D"pre">KeyError is raised. +__mi= +ssing__() must be a method; it cannot be an instance vari= +able:

+
= +
>>&= +gt;
>>> class Counter(=
+dict):
+...     def __missing__(self=
+, key):
+...         return 0
+>>> c =3D Counter()
+>>> c['red']
+0
+>>> c['red'] <=
+span class=3D"o">+=3D 1
+>>> c['red']
+1
+
+
+

The example above shows part of the implementation of +c= +ollections.Counter. A different __missing__ method i= +s used +by collections.defaultdict.

+
+ +
+
+d[key] =3D value
+

Set d[key] to value.

+
+ +
+
+del d[key]
+

Remove d[key] from d. Raises a KeyError if key is not= + in the +map.

+
+ +
+
+key in d
+

Return True if d has a key key, else False= +.

+
+ +
+
+key not in d
+

Equivalent to not key in= + d.

+
+ +
+
+iter(d)
+

Return an iterator over the keys of the dictionary. This is a short= +cut +for iter(d= +.keys()).

+
+ +
+
+clear()=C2=B6
+

Remove all items from the dictionary.

+
+ +
+
+copy()=C2=B6
+

Return a shallow copy of the dictionary.

+
+ +
+
+classmethod f= +romkeys(ite= +rable[, value<= +/em>])=C2=B6
+

Create a new dictionary with keys from iterable and values = +set to value.

+

fromkeys() is a class method that returns a new dictionary. value +defaults to None. All of the values refer to just a single instance, +so it generally doesn=E2=80=99t make sense for value to be a mutab= +le object +such as an empty list. To get distinct values, use a dict +comprehension instead.

+
+ +
+
+get(key[, default])=C2=B6
+

Return the value for key if key is in the dictiona= +ry, else default. +If default is not given, it defaults to None, so that this met= +hod +never raises a KeyError.

+
+ +
+
+items()=C2=B6
+

Return a new view of the dictionary=E2=80=99s items ((key, value) pairs). +See the documentation = +of view objects.

+
+ +
+
+keys()=C2=B6
+

Return a new view of the dictionary=E2=80=99s keys. See the documentation +of view objects.

+
+ +
+
+pop(key[, default])=C2=B6
+

If key is in the dictionary, remove it and return its value= +, else return +default. If default is not given and key is not= + in the dictionary, +a KeyError is raised.

+
+ +
+
+popitem(= +)=C2=B6
+

Remove and return a (key, value) pair= + from the dictionary. +Pairs are returned in LIFO order.= +

+

popitem()= + is useful to destructively iterate over a dictionary, as +often used in set algorithms. If the dictionary is empty, calling +popitem() raises a KeyErr= +or.

+
+

Changed in version 3.7: L= +IFO order is now guaranteed. In prior versions, popitem() would +return an arbitrary key/value pair.

+
+
+ +
+
+reversed(d)
+

Return a reverse iterator over the keys of the dictionary. This is a +shortcut for reversed(d.keys()).

+
+

New in version 3.8.

+
+
+ +
+
+setdefault(key[= +, default])=C2=B6
+

If key is in the dictionary, return its value. If not, ins= +ert key +with a value of default and return default. default<= +/em> defaults to +None.

+
+ +
+
+update(<= +/span>[other])=C2=B6
+

Update the dictionary with the key/value pairs from other, = +overwriting +existing keys. Return None.

+

update() accepts either another dictionary object or an iterable of +key/value pairs (as tuples or other iterables of length two). If keyword +arguments are specified, the dictionary is then updated with those +key/value pairs: d.update(red=3D1, blue=3D2).

+
+ +
+
+values(<= +/span>)=C2=B6
+

Return a new view of the dictionary=E2=80=99s values. See the +documentation of view = +objects.

+

An equality comparison between one dict.values() view and another +will always return False. This also applies when comparing +dict.value= +s() to itself:

+
= +
>>&= +gt;
>>> d =3D {<=
+span class=3D"s1">'a': 1=
+}
+>>> d.values() =
+=3D=3D d.values()
+False
+
+
+
+ +

Dictionaries compare equal if and only if they have the same (key, +value) pairs (regardless of ordering). Or= +der comparisons (=E2=80=98<=E2=80=99, =E2=80=98<=3D=E2=80=99, =E2=80= +=98>=3D=E2=80=99, =E2=80=98>=E2=80=99) raise +TypeError<= +/a>.

+

Dictionaries preserve insertion order. Note that updating a key does no= +t +affect the order. Keys added after deletion are inserted at the end.

+
= +
>>&= +gt;
>>> d =3D {<=
+span class=3D"s2">"one": 1, "two": 2, "three": 3, "four": 4}
+>>> d
+{'one': 1, 'two': 2, 'three': 3, 'four': 4}
+>>> list(d)
+['one', 'two', 'three', 'four']
+>>> list(d.values())
+[1, 2, 3, 4]
+>>> d["one"] <=
+span class=3D"o">=3D 42
+>>> d
+{'one': 42, 'two': 2, 'three': 3, 'four': 4}
+>>> del d["two"]
+>>> d["two"] <=
+span class=3D"o">=3D None
+>>> d
+{'one': 42, 'three': 3, 'four': 4, 'two': None}
+
+
+
+

Changed in version 3.7: D= +ictionary order is guaranteed to be insertion order. This behavior was +an implementation detail of CPython from 3.6.

+
+

Dictionaries and dictionary views are reversible.

+
= +
>>&= +gt;
>>> d =3D {<=
+span class=3D"s2">"one": 1, "two": 2, "three": 3, "four": 4}
+>>> d
+{'one': 1, 'two': 2, 'three': 3, 'four': 4}
+>>> list(reversed(d))
+['four', 'three', 'two', 'one']
+>>> list(reversed(d.=
+values()))
+[4, 3, 2, 1]
+>>> list(reversed(d.=
+items()))
+[('four', 4), ('three', 3), ('two', 2), ('one', 1)]
+
+
+
+

Changed in version 3.8: D= +ictionaries are now reversible.

+
+
+ +
+

See also

+

types.MappingProxyType can be used to create a read-onl= +y view +of a dict.

+
+
+

Dictionary view objects=C2=B6

+

The objects returned by dict.keys(), dict.values() and +dict.items() are view objects. They provide a dynamic view on the +dictionary=E2=80=99s entries, which means that when the dictionary changes,= + the view +reflects these changes.

+

Dictionary views can be iterated over to yield their respective data, an= +d +support membership tests:

+
+
+len(dictview)
+

Return the number of entries in the dictionary.

+
+ +
+
+iter(dictview)
+

Return an iterator over the keys, values or items (represented as tu= +ples of +(key, value)) in the dictionary.

+

Keys and values are iterated over in insertion order. +This allows the creation of (value, key) pai= +rs +using zip(): pairs =3D zip(d.values(), d.keys()). Another way to +create the same list is pairs =3D [(v, k) for= + (k, v) in d.items()].

+

Iterating views while adding or deleting entries in the dictionary may r= +aise +a RuntimeError or fail to iterate over all entries.

+
+

Changed in version 3.7: D= +ictionary order is guaranteed to be insertion order.

+
+
+ +
+
+x in dictview
+

Return True if x is in the underlying dictionary=E2=80= +=99s keys, values or +items (in the latter case, x should be a (key, va= +lue) tuple).

+
+ +
+
+reversed(dictview)
+

Return a reverse iterator over the keys, values or items of the dict= +ionary. +The view will be iterated in reverse order of the insertion.

+
+

Changed in version 3.8: D= +ictionary views are now reversible.

+
+
+ +

Keys views are set-like since their entries are unique and hashable. If= + all +values are hashable, so that <= +span class=3D"pre">(key, value) pa= +irs are unique and hashable, +then the items view is also set-like. (Values views are not treated as set= +-like +since the entries are generally not unique.) For set-like views, all of th= +e +operations defined for the abstract base class collections.abc.Set are +available (for example, =3D=3D, <, or ^).

+

An example of dictionary view usage:

+
= +
>>&= +gt;
>>> dishes =3D {'eggs': 2, 'sausage': 1=
+, 'bacon': 1, 'spam': 500}
+>>> keys =3D dishes.keys()
+>>> values =3D dishes.=
+values()
+
+>>> # iteration
+>>> n =3D 0
+>>> for val in values=
+:
+...     n +=3D val
+>>> print(n)
+504
+
+>>> # keys and values=
+ are iterated over in the same order (insertion order)
+>>> list(keys)
+['eggs', 'sausage', 'bacon', 'spam']
+>>> list(values)
+[2, 1, 1, 500]
+
+>>> # view objects ar=
+e dynamic and reflect dict changes
+>>> del dishes['eggs'=
+]
+>>> del dishes['sausa=
+ge']
+>>> list(keys)
+['bacon', 'spam']
+
+>>> # set operations<=
+/span>
+>>> keys & {'eggs=
+', 'bacon', 'salad'}
+{'bacon'}
+>>> keys ^ {'sausage'=
+, 'juice'}
+{'juice', 'sausage', 'bacon', 'spam'}
+
+
+
+
+
+

Context Manager Types=C2=B6

+

Python=E2=80=99s = +with statement supports the concept of a runtime context +defined by a context manager. This is implemented using a pair of methods +that allow user-defined classes to define a runtime context that is entered +before the statement body is executed and exited when the statement ends: +

+
+contextmanager.__enter__()=C2=B6
+

Enter the runtime context and return either this object or another o= +bject +related to the runtime context. The value returned by this method is bound = +to +the identifier in the as clause of with statements using +this context manager.

+

An example of a context manager that returns itself is a file object. +File objects return themselves from __enter__() to allow open() to be +used as the context expression in a = +with statement.

+

An example of a context manager that returns a related object is the one +returned by decimal.localcontext(). These managers set the a= +ctive +decimal context to a copy of the original decimal context and then return t= +he +copy. This allows changes to be made to the current decimal context in the = +body +of the with stateme= +nt without affecting code outside the +with statement.

+
+ +
+
+contextmanager.__exit__(exc_type, exc_val, <= +em class=3D"sig-param">exc_tb)=C2=B6 +

Exit the runtime context and return a Boolean flag indicating if any= + exception +that occurred should be suppressed. If an exception occurred while executin= +g the +body of the with st= +atement, the arguments contain the exception type, +value and traceback information. Otherwise, all three arguments are None.

+

Returning a true value from this method will cause the with statement +to suppress the exception and continue execution with the statement immedia= +tely +following the with statement. Otherwise the except= +ion continues +propagating after this method has finished executing. Exceptions that occur +during execution of this method will replace any exception that occurred in= + the +body of the with statement.

+

The exception passed in should never be reraised explicitly - instead, t= +his +method should return a false value to indicate that the method completed +successfully and does not want to suppress the raised exception. This allow= +s +context management code to easily detect whether or not an __exit__() +method has actually failed.

+
+ +

Python defines several context managers to support easy thread synchroni= +sation, +prompt closure of files or other objects, and simpler manipulation of the a= +ctive +decimal arithmetic context. The specific types are not treated specially be= +yond +their implementation of the context management protocol. See the +contextlib module for some examp= +les.

+

Python=E2=80=99s = +generators and the contextlib.contextmanager decorator +provide a convenient way to implement these protocols. If a generator func= +tion is +decorated with the contextlib.contextmanager de= +corator, it will return a +context manager implementing the necessary __enter__() and +__exit__()= + methods, rather than the iterator produced by an undecor= +ated +generator function.

+

Note that there is no specific slot for any of these methods in the type +structure for Python objects in the Python/C API. Extension types wanting t= +o +define these methods must provide them as a normal Python accessible method= +. +Compared to the overhead of setting up the runtime context, the overhead of= + a +single class dictionary lookup is negligible.

+
+
+

Other Built-in Types=C2=B6

+

The interpreter supports several other kinds of objects. Most of these s= +upport +only one or two operations.

+
+

Modules=C2=B6

+

The only special operation on a module is attribute access: m.name,= + where +m is a module and name accesses a name defined in m=E2=80=99s symbol table. +Module attributes can be assigned to. (Note that the import +statement is not, strictly speaking, an operation on a module object; import +foo does not require a module object name= +d foo to exist, rather it requires +an (external) definition for a module named foo somewhere= +.)

+

A special attribute of every module is __dict__. This is the +dictionary containing the module=E2=80=99s symbol table. Modifying this dic= +tionary will +actually change the module=E2=80=99s symbol table, but direct assignment to= + the +__dict__ attribute is not possible (you can write +m.__dict__= +['a'] =3D 1, which defines m.a to be 1, but you can=E2=80=99t write +m.__dict__= + =3D {}= +). Modifying __dict__ directly is +not recommended.

+

Modules built into the interpreter are written like this: <module 'sys' +(built-in)>. If loaded from a file, t= +hey are written as <module 'os' from +'/usr/local/lib/pythonX.Y/os.pyc'>. +

+
+

Classes and Class Instances=C2=B6

+

See Objects, values= + and types and Class definitions for these.

+
+
+

Functions=C2=B6

+

Function objects are created by function definitions. The only operatio= +n on a +function object is to call it: func(argument-list).

+

There are really two flavors of function objects: built-in functions and +user-defined functions. Both support the same operation (to call the funct= +ion), +but the implementation is different, hence the different object types.

+

See Function = +definitions for more information.

+
+
+

Methods=C2=B6

+

Methods are functions that are called using the attribut= +e notation. There are +two flavors: built-in methods (such as append() on list= +s) and class +instance methods. Built-in methods are described with the types that suppo= +rt +them.

+

If you access a method (a function defined in a class namespace) through= + an +instance, you get a special object: a bound method (= +also called +instance method) object. When called, it will add th= +e self argument +to the argument list. Bound methods have two special read-only attributes: +m.__self__= + is the object on which the method operates, and m.__func__ is +the function implementing the method. Calling m(arg-1, ar= +g-2, ..., arg-n) +is completely equivalent to calling m.__func__(m.__self__, arg-1, arg-2, ..., +arg-n).

+

Like function objects, bound method objects support getting arbitrary +attributes. However, since method attributes are actually stored on the +underlying function object (meth.__func__), setting method attributes o= +n +bound methods is disallowed. Attempting to set an attribute on a method +results in an = +AttributeError being raised. In order to set a method +attribute, you need to explicitly set it on the underlying function object:= +

+
= +
>>&= +gt;
>>> class C:
+...     def method(self):
+...         pass
+...
+>>> c =3D C()
+>>> c.method.whoami =3D 'my name is method'  # can't set on the method=
+
+Traceback (most recent call last):
+  File "<stdin>", line =
+1, in <module>=
+;
+AttributeError: 'm=
+ethod' object has no attribute 'whoami'
+>>> c.method.__func__.whoami =3D 'my name is =
+method'
+>>> c.method.whoami
+'my name is method'
+
+
+

See The standard type= + hierarchy for more information.

+
+
+

Cod= +e Objects=C2=B6= +

+

Code objects are used by the implementation to represent= + =E2=80=9Cpseudo-compiled=E2=80=9D +executable Python code such as a function body. They differ from function +objects because they don=E2=80=99t contain a reference to their global exec= +ution +environment. Code objects are returned by the built-in compile() function +and can be extracted from function objects through their __code__ +attribute. See also the code module.

+

A code object can be executed or evaluated by passing it= + (instead of a source +string) to the exec() or eval() = + built-in functions.

+

See The standard type= + hierarchy for more information.

+
+
+

Type Objects=C2=B6

+

Type objects represent the various object types. An obj= +ect=E2=80=99s type is accessed +by the built-in function type(). There are no special operations on +types. The standard module types defines names for all stan= +dard built-in +types.

+

Types are written like this: <class 'int'>= +.

+
+
+

The Null Object=C2=B6

+

This object is returned by functions that don=E2=80=99t explicitly retur= +n a value. It +supports no special operations. There is exactly one null object, named +None (a built-in name). <= +span class=3D"pre">type(None)() produces the same singleton.<= +/p> +

It is written as None.

+
+
+

= +The Ellipsis Object=C2=B6

+

This object is commonly used by slicing (see Slicings). It supports no +special operations. There is exactly one ellipsis object, named +Ellipsis (a built-in name). type(Ellipsis)() produces the +Ellipsis singleton.

+

It is written as Ellipsis or ....

+
+
+

The NotImplemented Obje= +ct=C2= +=B6

+

This object is returned from comparisons and binary operations when they= + are +asked to operate on types they don=E2=80=99t support. See Comparisons for more +information. There is exactly one NotImplemented object. +type(NotIm= +plemented)() produces the singleton instance.

+

It is written as NotImplemented.

+
+
+

Boolean Values=C2=B6

+

Boolean values are the two constant objects False and True. The= +y are +used to represent truth values (although other values can also be considere= +d +false or true). In numeric contexts (for example when used as the argument= + to +an arithmetic operator), they behave like the integers 0 and 1, respectivel= +y. +The built-in function bool() can be used to convert any value to a +Boolean, if the value can be interpreted as a truth value (see section +Truth Value Testing<= +/a> above).

+

They are written as False and True, respectively= +.

+
+
+

Internal Objects=C2=B6

+

See The standard type= + hierarchy for this information. It describes stack frame objec= +ts, +traceback objects, and slice objects.

+
+
+
+

Special Attributes=C2=B6

+

The implementation adds a few special read-only attributes to several ob= +ject +types, where they are relevant. Some of these are not reported by the +dir() built-in fun= +ction.

+
+
+object.__dict__=C2=B6
+

A dictionary or other mapping object used to store an object=E2=80= +=99s (writable) +attributes.

+
+ +
+
+instance.__class__=C2=B6
+

The class to which a class instance belongs.

+
+ +
+
+class.__bases__=C2=B6
+

The tuple of base classes of a class object.

+
+ +
+
+definition.__name__=C2=B6
+

The name of the class, function, method, descriptor, or +generator instance.

+
+ +
+
+definition.__qualname__=C2=B6
+

The qual= +ified name of the class, function, method, descriptor, +or generator instance.

+
+

New in version 3.3.

+
+
+ +
+
+class.__mro__=C2=B6
+

This attribute is a tuple of classes that are considered when lookin= +g for +base classes during method resolution.

+
+ +
+
+class.mro()=C2=B6
+

This method can be overridden by a metaclass to customize the method +resolution order for its instances. It is called at class instantiation, a= +nd +its result is stored in __mro__.

+
+ +
+
+class.__subclasses__()=C2=B6
+

Each class keeps a list of weak references to its immediate subclass= +es. This +method returns a list of all those references still alive. +Example:

+
= +
>>&= +gt;
>>> int.__subclass=
+es__()
+[<class 'bool'>]
+
+
+
+ +

Footnotes

+
+
1
+

Additional information on these special methods may be found in the = +Python +Reference Manual (Basic customization).

+
+
2
+

As a consequence, the list [1, 2] is = +considered equal to [1.0, 2.0], and +similarly for tuples.

+
+
3
+

They must have since the parser can=E2=80=99t tell the type of the o= +perands.

+
+
4(1,2,3,4)
+

Cased characters are those with general category property being one = +of +=E2=80=9CLu=E2=80=9D (Letter, uppercase), =E2=80=9CLl=E2=80=9D (Letter, low= +ercase), or =E2=80=9CLt=E2=80=9D (Letter, titlecase).

+
+
5(1,2)
+

To format only a tuple you should therefore provide a singleton tupl= +e whose only +element is the tuple to be formatted.

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

Table of Contents= +

+
+ +

Tema anterior

+

Constantes incorporadas

+

Siguiente tema

+

Excepciones incorporadas= +

+
+

Esta p=C3=A1gina

+
+
+
+
=C2=AB=C2=AB
+
+
=20 +
+

Navegaci=C3=B3n

+
+
=20 +
3D"Google

Texto original

Su= +giere una traducci=C3=B3n mejor= +

+ + =20 +
+------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: cid:css-2ceb892a-e586-4f29-8bc4-b725b1b091a3@mhtml.blink + +@charset "utf-8"; + +@media only screen { + table.full-width-table { width: 100%; } +} +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/pydoctheme.css + +@charset "utf-8"; + +@import url("default.css"); + +body { background-color: white; margin-left: 1em; margin-right: 1em; } + +div.related { margin-bottom: 1.2em; padding: 0.5em 0px; border-top: 1px sol= +id rgb(204, 204, 204); margin-top: 0.5em; } + +div.related a:hover { color: rgb(0, 149, 196); } + +div.related:first-child { border-top: 0px; border-bottom: 1px solid rgb(204= +, 204, 204); } + +.inline-search { display: inline; } + +form.inline-search input { display: inline; } + +form.inline-search input[type=3D"submit"] { width: 40px; } + +div.sphinxsidebar { background-color: rgb(238, 238, 238); border-radius: 5p= +x; line-height: 130%; font-size: smaller; } + +div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-top: 1.5em; } + +div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.2em; } + +div.sphinxsidebarwrapper > ul > li > ul > li { margin-bottom: 0.4em; } + +div.sphinxsidebar a:hover { color: rgb(0, 149, 196); } + +form.inline-search input, div.sphinxsidebar input { font-family: "Lucida Gr= +ande", Arial, sans-serif; border: 1px solid rgb(153, 153, 153); font-size: = +smaller; border-radius: 3px; } + +div.sphinxsidebar input[type=3D"text"] { max-width: 150px; } + +div.body { padding: 0px 0px 0px 1.2em; } + +div.body p { line-height: 140%; } + +div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h= +6 { margin: 0px; border: 0px; padding: 0.3em 0px; } + +div.body hr { border: 0px; background-color: rgb(204, 204, 204); height: 1p= +x; } + +div.body pre { border-radius: 3px; border: 1px solid rgb(170, 204, 153); } + +div.body div.admonition, div.body div.impl-detail { border-radius: 3px; } + +div.body div.impl-detail > p { margin: 0px; } + +div.body div.seealso { border: 1px solid rgb(221, 221, 102); } + +div.body a { color: rgb(0, 114, 170); } + +div.body a:visited { color: rgb(99, 99, 187); } + +div.body a:hover { color: rgb(0, 176, 228); } + +tt, code, pre { font-family: monospace, sans-serif; font-size: 96.5%; } + +div.body tt, div.body code { border-radius: 3px; } + +div.body tt.descname, div.body code.descname { font-size: 120%; } + +div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { font= +-weight: normal; } + +.deprecated { border-radius: 3px; } + +table.docutils { border: 1px solid rgb(221, 221, 221); min-width: 20%; bord= +er-radius: 3px; margin-top: 10px; margin-bottom: 10px; } + +table.docutils td, table.docutils th { border-radius: 3px; border: 1px soli= +d rgb(221, 221, 221) !important; } + +table p, table li { text-align: left !important; } + +table.docutils th { background-color: rgb(238, 238, 238); padding: 0.3em 0.= +5em; } + +table.docutils td { background-color: white; padding: 0.3em 0.5em; } + +table.footnote, table.footnote td { border: 0px !important; } + +div.footer { line-height: 150%; margin-top: -2em; text-align: right; width:= + auto; margin-right: 10px; } + +div.footer a:hover { color: rgb(0, 149, 196); } + +.refcount { color: rgb(0, 102, 0); } + +.stableabi { color: rgb(34, 34, 153); } + +.highlight { background: none !important; } +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/default.css + +@charset "utf-8"; + +@import url("classic.css"); +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/classic.css + +@charset "utf-8"; + +@import url("basic.css"); + +html { background-color: rgb(255, 255, 255); } + +body { font-family: "Lucida Grande", Arial, sans-serif; font-size: 100%; ba= +ckground-color: white; color: rgb(0, 0, 0); margin: 0px; padding: 0px; } + +div.document { background-color: white; } + +div.documentwrapper { float: left; width: 100%; } + +div.bodywrapper { margin: 0px 0px 0px 230px; } + +div.body { background-color: white; color: rgb(34, 34, 34); padding: 0px 20= +px 30px; } + +div.footer { color: rgb(85, 85, 85); width: 100%; padding: 9px 0px; text-al= +ign: center; font-size: 75%; } + +div.footer a { color: rgb(85, 85, 85); text-decoration: underline; } + +div.related { background-color: white; line-height: 30px; color: rgb(102, 1= +02, 102); } + +div.related a { color: rgb(68, 68, 68); } + +div.sphinxsidebar { } + +div.sphinxsidebar h3 { font-family: "Lucida Grande", Arial, sans-serif; col= +or: rgb(68, 68, 68); font-size: 1.4em; font-weight: normal; margin: 0px; pa= +dding: 0px; } + +div.sphinxsidebar h3 a { color: rgb(68, 68, 68); } + +div.sphinxsidebar h4 { font-family: "Lucida Grande", Arial, sans-serif; col= +or: rgb(68, 68, 68); font-size: 1.3em; font-weight: normal; margin: 5px 0px= + 0px; padding: 0px; } + +div.sphinxsidebar p { color: rgb(68, 68, 68); } + +div.sphinxsidebar p.topless { margin: 5px 10px 10px; } + +div.sphinxsidebar ul { margin: 10px; padding: 0px; color: rgb(68, 68, 68); = +} + +div.sphinxsidebar a { color: rgb(68, 68, 68); } + +div.sphinxsidebar input { border: 1px solid rgb(68, 68, 68); font-family: s= +ans-serif; font-size: 1em; } + +div#sidebarbutton { background-color: rgb(60, 110, 131); } + +a { color: rgb(0, 144, 192); text-decoration: none; } + +a:visited { color: rgb(0, 96, 143); text-decoration: none; } + +a:hover { text-decoration: underline; } + +div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h= +6 { font-family: "Lucida Grande", Arial, sans-serif; background-color: whit= +e; font-weight: normal; color: rgb(26, 26, 26); border-bottom: 1px solid rg= +b(204, 204, 204); margin: 20px -20px 10px; padding: 3px 0px 3px 10px; } + +div.body h1 { margin-top: 0px; font-size: 200%; } + +div.body h2 { font-size: 160%; } + +div.body h3 { font-size: 140%; } + +div.body h4 { font-size: 120%; } + +div.body h5 { font-size: 110%; } + +div.body h6 { font-size: 100%; } + +a.headerlink { color: rgb(170, 170, 170); font-size: 0.8em; padding: 0px 4p= +x; text-decoration: none; } + +a.headerlink:hover { background-color: rgb(170, 170, 170); color: white; } + +div.body p, div.body dd, div.body li, div.body blockquote { text-align: jus= +tify; line-height: 130%; } + +div.admonition p.admonition-title + p { display: inline; } + +div.admonition p { margin-bottom: 5px; } + +div.admonition pre { margin-bottom: 5px; } + +div.admonition ul, div.admonition ol { margin-bottom: 5px; } + +div.note { background-color: rgb(238, 238, 238); border: 1px solid rgb(204,= + 204, 204); } + +div.seealso { background-color: rgb(255, 255, 204); border: 1px solid rgb(2= +55, 255, 102); } + +div.topic { background-color: rgb(238, 238, 238); } + +div.warning { background-color: rgb(255, 228, 228); border: 1px solid rgb(2= +55, 102, 102); } + +p.admonition-title { display: inline; } + +p.admonition-title::after { content: ":"; } + +pre { padding: 5px; background-color: rgb(238, 255, 204); color: rgb(51, 51= +, 51); line-height: 120%; border-top: 1px solid rgb(170, 204, 153); border-= +bottom: 1px solid rgb(170, 204, 153); border-image: initial; border-left: n= +one; border-right: none; } + +code { background-color: rgb(236, 240, 243); padding: 0px 1px; font-size: 0= +.95em; } + +th, dl.field-list > dt { background-color: rgb(238, 221, 238); } + +.warning code { background: rgb(239, 194, 194); } + +.note code { background: rgb(214, 214, 214); } + +.viewcode-back { font-family: "Lucida Grande", Arial, sans-serif; } + +div.viewcode-block:target { background-color: rgb(244, 222, 191); border-to= +p: 1px solid rgb(170, 204, 153); border-bottom: 1px solid rgb(170, 204, 153= +); } + +div.code-block-caption { color: rgb(239, 239, 239); background-color: rgb(2= +8, 78, 99); } +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/basic.css + +@charset "utf-8"; + +div.clearer { clear: both; } + +div.related { width: 100%; font-size: 90%; } + +div.related h3 { display: none; } + +div.related ul { margin: 0px; padding: 0px 0px 0px 10px; list-style: none; = +} + +div.related li { display: inline; } + +div.related li.right { float: right; margin-right: 5px; } + +div.sphinxsidebarwrapper { padding: 10px 5px 0px 10px; } + +div.sphinxsidebar { float: left; width: 230px; margin-left: -100%; font-siz= +e: 90%; overflow-wrap: break-word; } + +div.sphinxsidebar ul { list-style: none; } + +div.sphinxsidebar ul ul, div.sphinxsidebar ul.want-points { margin-left: 20= +px; list-style: square; } + +div.sphinxsidebar ul ul { margin-top: 0px; margin-bottom: 0px; } + +div.sphinxsidebar form { margin-top: 10px; } + +div.sphinxsidebar input { border: 1px solid rgb(152, 219, 204); font-family= +: sans-serif; font-size: 1em; } + +div.sphinxsidebar #searchbox form.search { overflow: hidden; } + +div.sphinxsidebar #searchbox input[type=3D"text"] { float: left; width: 80%= +; padding: 0.25em; box-sizing: border-box; } + +div.sphinxsidebar #searchbox input[type=3D"submit"] { float: left; width: 2= +0%; border-left: none; padding: 0.25em; box-sizing: border-box; } + +img { border: 0px; max-width: 100%; } + +ul.search { margin: 10px 0px 0px 20px; padding: 0px; } + +ul.search li { padding: 5px 0px 5px 20px; background-image: url("file.png")= +; background-repeat: no-repeat; background-position: 0px 7px; } + +ul.search li a { font-weight: bold; } + +ul.search li div.context { color: rgb(136, 136, 136); margin: 2px 0px 0px 3= +0px; text-align: left; } + +ul.keywordmatches li.goodmatch a { font-weight: bold; } + +table.contentstable { width: 90%; margin-left: auto; margin-right: auto; } + +table.contentstable p.biglink { line-height: 150%; } + +a.biglink { font-size: 1.3em; } + +span.linkdescr { font-style: italic; padding-top: 5px; font-size: 90%; } + +table.indextable { width: 100%; } + +table.indextable td { text-align: left; vertical-align: top; } + +table.indextable ul { margin-top: 0px; margin-bottom: 0px; list-style-type:= + none; } + +table.indextable > tbody > tr > td > ul { padding-left: 0em; } + +table.indextable tr.pcap { height: 10px; } + +table.indextable tr.cap { margin-top: 10px; background-color: rgb(242, 242,= + 242); } + +img.toggler { margin-right: 3px; margin-top: 3px; cursor: pointer; } + +div.modindex-jumpbox { border-top: 1px solid rgb(221, 221, 221); border-bot= +tom: 1px solid rgb(221, 221, 221); margin: 1em 0px; padding: 0.4em; } + +div.genindex-jumpbox { border-top: 1px solid rgb(221, 221, 221); border-bot= +tom: 1px solid rgb(221, 221, 221); margin: 1em 0px; padding: 0.4em; } + +table.modindextable td { padding: 2px; border-collapse: collapse; } + +div.body { min-width: 450px; max-width: 800px; } + +div.body p, div.body dd, div.body li, div.body blockquote { } + +a.headerlink { visibility: hidden; } + +a.brackets::before, span.brackets > a::before { content: "["; } + +a.brackets::after, span.brackets > a::after { content: "]"; } + +h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, = +h4:hover > a.headerlink, h5:hover > a.headerlink, h6:hover > a.headerlink, = +dt:hover > a.headerlink, caption:hover > a.headerlink, p.caption:hover > a.= +headerlink, div.code-block-caption:hover > a.headerlink { visibility: visib= +le; } + +div.body p.caption { text-align: inherit; } + +div.body td { text-align: left; } + +.first { margin-top: 0px !important; } + +p.rubric { margin-top: 30px; font-weight: bold; } + +img.align-left, .figure.align-left, object.align-left { clear: left; float:= + left; margin-right: 1em; } + +img.align-right, .figure.align-right, object.align-right { clear: right; fl= +oat: right; margin-left: 1em; } + +img.align-center, .figure.align-center, object.align-center { display: bloc= +k; margin-left: auto; margin-right: auto; } + +img.align-default, .figure.align-default { display: block; margin-left: aut= +o; margin-right: auto; } + +.align-left { text-align: left; } + +.align-center { text-align: center; } + +.align-default { text-align: center; } + +.align-right { text-align: right; } + +div.sidebar { margin: 0px 0px 0.5em 1em; border: 1px solid rgb(221, 221, 18= +7); padding: 7px 7px 0px; background-color: rgb(255, 255, 238); width: 40%;= + float: right; } + +p.sidebar-title { font-weight: bold; } + +div.topic { border: 1px solid rgb(204, 204, 204); padding: 7px 7px 0px; mar= +gin: 10px 0px; } + +p.topic-title { font-size: 1.1em; font-weight: bold; margin-top: 10px; } + +div.admonition { margin-top: 10px; margin-bottom: 10px; padding: 7px; } + +div.admonition dt { font-weight: bold; } + +div.admonition dl { margin-bottom: 0px; } + +p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; } + +div.body p.centered { text-align: center; margin-top: 25px; } + +table.docutils { border: 0px; border-collapse: collapse; } + +table.align-center { margin-left: auto; margin-right: auto; } + +table.align-default { margin-left: auto; margin-right: auto; } + +table caption span.caption-number { font-style: italic; } + +table caption span.caption-text { } + +table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; border-wid= +th: 0px 0px 1px; border-top-style: initial; border-top-color: initial; bord= +er-left-style: initial; border-left-color: initial; border-right-style: ini= +tial; border-right-color: initial; border-bottom-style: solid; border-botto= +m-color: rgb(170, 170, 170); } + +table.footnote td, table.footnote th { border: 0px !important; } + +th { text-align: left; padding-right: 5px; } + +table.citation { border-left: 1px solid gray; margin-left: 1px; } + +table.citation td { border-bottom: none; } + +th > p:first-child, td > p:first-child { margin-top: 0px; } + +th > p:last-child, td > p:last-child { margin-bottom: 0px; } + +div.figure { margin: 0.5em; padding: 0.5em; } + +div.figure p.caption { padding: 0.3em; } + +div.figure p.caption span.caption-number { font-style: italic; } + +div.figure p.caption span.caption-text { } + +table.field-list td, table.field-list th { border: 0px !important; } + +.field-list ul { margin: 0px; padding-left: 1em; } + +.field-list p { margin: 0px; } + +.field-name { hyphens: manual; } + +table.hlist td { vertical-align: top; } + +ol.arabic { list-style: decimal; } + +ol.loweralpha { list-style: lower-alpha; } + +ol.upperalpha { list-style: upper-alpha; } + +ol.lowerroman { list-style: lower-roman; } + +ol.upperroman { list-style: upper-roman; } + +li > p:first-child { margin-top: 0px; } + +li > p:last-child { margin-bottom: 0px; } + +dl.footnote > dt, dl.citation > dt { float: left; } + +dl.footnote > dd, dl.citation > dd { margin-bottom: 0em; } + +dl.footnote > dd::after, dl.citation > dd::after { content: ""; clear: both= +; } + +dl.field-list { display: grid; grid-template-columns: fit-content(30%) auto= +; } + +dl.field-list > dt { font-weight: bold; word-break: break-word; padding-lef= +t: 0.5em; padding-right: 5px; } + +dl.field-list > dt::after { content: ":"; } + +dl.field-list > dd { padding-left: 0.5em; margin-top: 0em; margin-left: 0em= +; margin-bottom: 0em; } + +dl { margin-bottom: 15px; } + +dd > p:first-child { margin-top: 0px; } + +dd ul, dd table { margin-bottom: 10px; } + +dd { margin-top: 3px; margin-bottom: 10px; margin-left: 30px; } + +dt:target, span.highlighted { background-color: rgb(251, 229, 78); } + +rect.highlighted { fill: rgb(251, 229, 78); } + +dl.glossary dt { font-weight: bold; font-size: 1.1em; } + +.optional { font-size: 1.3em; } + +.sig-paren { font-size: larger; } + +.versionmodified { font-style: italic; } + +.system-message { background-color: rgb(255, 221, 170); padding: 5px; borde= +r: 3px solid red; } + +.footnote:target { background-color: rgb(255, 255, 170); } + +.line-block { display: block; margin-top: 1em; margin-bottom: 1em; } + +.line-block .line-block { margin-top: 0px; margin-bottom: 0px; margin-left:= + 1.5em; } + +.guilabel, .menuselection { font-family: sans-serif; } + +.accelerator { text-decoration: underline; } + +.classifier { font-style: oblique; } + +.classifier::before { font-style: normal; margin: 0.5em; content: ":"; } + +abbr, acronym { border-bottom: 1px dotted; cursor: help; } + +pre { overflow: auto hidden; } + +span.pre { hyphens: none; } + +td.linenos pre { padding: 5px 0px; border: 0px; background-color: transpare= +nt; color: rgb(170, 170, 170); } + +table.highlighttable { margin-left: 0.5em; } + +table.highlighttable td { padding: 0px 0.5em; } + +div.code-block-caption { padding: 2px 5px; font-size: small; } + +div.code-block-caption code { background-color: transparent; } + +div.code-block-caption + div > div.highlight > pre { margin-top: 0px; } + +div.doctest > div.highlight span.gp { user-select: none; } + +div.code-block-caption span.caption-number { padding: 0.1em 0.3em; font-sty= +le: italic; } + +div.code-block-caption span.caption-text { } + +div.literal-block-wrapper { padding: 1em 1em 0px; } + +div.literal-block-wrapper div.highlight { margin: 0px; } + +code.descname { background-color: transparent; font-weight: bold; font-size= +: 1.2em; } + +code.descclassname { background-color: transparent; } + +code.xref, a code { background-color: transparent; font-weight: bold; } + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { background-color: tr= +ansparent; } + +.viewcode-link { float: right; } + +.viewcode-back { float: right; font-family: sans-serif; } + +div.viewcode-block:target { margin: -1px -10px; padding: 0px 10px; } + +img.math { vertical-align: middle; } + +div.body div.math p { text-align: center; } + +span.eqno { float: right; } + +span.eqno a.headerlink { position: relative; left: 0px; z-index: 1; } + +div.math:hover a.headerlink { visibility: visible; } + +@media print { + div.document, div.documentwrapper, div.bodywrapper { width: 100%; margin:= + 0px !important; } + div.sphinxsidebar, div.related, div.footer, #top-link { display: none; } +} +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://docs.python.org/3/_static/pygments.css + +@charset "utf-8"; + +.highlight .hll { background-color: rgb(255, 255, 204); } + +.highlight { background: rgb(238, 255, 204); } + +.highlight .c { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .err { border: 1px solid rgb(255, 0, 0); } + +.highlight .k { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .o { color: rgb(102, 102, 102); } + +.highlight .ch { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cm { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cp { color: rgb(0, 112, 32); } + +.highlight .cpf { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .c1 { color: rgb(64, 128, 144); font-style: italic; } + +.highlight .cs { color: rgb(64, 128, 144); background-color: rgb(255, 240, = +240); } + +.highlight .gd { color: rgb(160, 0, 0); } + +.highlight .ge { font-style: italic; } + +.highlight .gr { color: rgb(255, 0, 0); } + +.highlight .gh { color: rgb(0, 0, 128); font-weight: bold; } + +.highlight .gi { color: rgb(0, 160, 0); } + +.highlight .go { color: rgb(51, 51, 51); } + +.highlight .gp { color: rgb(198, 93, 9); font-weight: bold; } + +.highlight .gs { font-weight: bold; } + +.highlight .gu { color: rgb(128, 0, 128); font-weight: bold; } + +.highlight .gt { color: rgb(0, 68, 221); } + +.highlight .kc { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kd { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kn { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kp { color: rgb(0, 112, 32); } + +.highlight .kr { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .kt { color: rgb(144, 32, 0); } + +.highlight .m { color: rgb(32, 128, 80); } + +.highlight .s { color: rgb(64, 112, 160); } + +.highlight .na { color: rgb(64, 112, 160); } + +.highlight .nb { color: rgb(0, 112, 32); } + +.highlight .nc { color: rgb(14, 132, 181); font-weight: bold; } + +.highlight .no { color: rgb(96, 173, 213); } + +.highlight .nd { color: rgb(85, 85, 85); font-weight: bold; } + +.highlight .ni { color: rgb(213, 85, 55); font-weight: bold; } + +.highlight .ne { color: rgb(0, 112, 32); } + +.highlight .nf { color: rgb(6, 40, 126); } + +.highlight .nl { color: rgb(0, 32, 112); font-weight: bold; } + +.highlight .nn { color: rgb(14, 132, 181); font-weight: bold; } + +.highlight .nt { color: rgb(6, 40, 115); font-weight: bold; } + +.highlight .nv { color: rgb(187, 96, 213); } + +.highlight .ow { color: rgb(0, 112, 32); font-weight: bold; } + +.highlight .w { color: rgb(187, 187, 187); } + +.highlight .mb { color: rgb(32, 128, 80); } + +.highlight .mf { color: rgb(32, 128, 80); } + +.highlight .mh { color: rgb(32, 128, 80); } + +.highlight .mi { color: rgb(32, 128, 80); } + +.highlight .mo { color: rgb(32, 128, 80); } + +.highlight .sa { color: rgb(64, 112, 160); } + +.highlight .sb { color: rgb(64, 112, 160); } + +.highlight .sc { color: rgb(64, 112, 160); } + +.highlight .dl { color: rgb(64, 112, 160); } + +.highlight .sd { color: rgb(64, 112, 160); font-style: italic; } + +.highlight .s2 { color: rgb(64, 112, 160); } + +.highlight .se { color: rgb(64, 112, 160); font-weight: bold; } + +.highlight .sh { color: rgb(64, 112, 160); } + +.highlight .si { color: rgb(112, 160, 208); font-style: italic; } + +.highlight .sx { color: rgb(198, 93, 9); } + +.highlight .sr { color: rgb(35, 83, 136); } + +.highlight .s1 { color: rgb(64, 112, 160); } + +.highlight .ss { color: rgb(81, 121, 24); } + +.highlight .bp { color: rgb(0, 112, 32); } + +.highlight .fm { color: rgb(6, 40, 126); } + +.highlight .vc { color: rgb(187, 96, 213); } + +.highlight .vg { color: rgb(187, 96, 213); } + +.highlight .vi { color: rgb(187, 96, 213); } + +.highlight .vm { color: rgb(187, 96, 213); } + +.highlight .il { color: rgb(32, 128, 80); } +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://translate.googleapis.com/translate_static/css/translateelement.css + +@charset "utf-8"; + +.goog-te-banner-frame { left: 0px; top: 0px; height: 39px; width: 100%; z-i= +ndex: 10000001; position: fixed; border-top: none; border-right: none; bord= +er-left: none; border-image: initial; border-bottom: 1px solid rgb(107, 144= +, 218); margin: 0px; box-shadow: rgb(153, 153, 153) 0px 0px 8px 1px; } + +.goog-te-menu-frame { z-index: 10000002; position: fixed; border: none; box= +-shadow: rgb(153, 153, 153) 0px 3px 8px 2px; } + +.goog-te-ftab-frame { z-index: 10000000; border: none; margin: 0px; } + +.goog-te-gadget { font-family: arial; font-size: 11px; color: rgb(102, 102,= + 102); white-space: nowrap; } + +.goog-te-gadget img { vertical-align: middle; border: none; } + +.goog-te-gadget-simple { background-color: rgb(255, 255, 255); border-width= +: 1px; border-style: solid; border-color: rgb(155, 155, 155) rgb(213, 213, = +213) rgb(232, 232, 232); font-size: 10pt; display: inline-block; padding-to= +p: 1px; padding-bottom: 2px; cursor: pointer; zoom: 1; } + +.goog-te-gadget-icon { margin-left: 2px; margin-right: 2px; width: 19px; he= +ight: 19px; border: none; vertical-align: middle; } + +.goog-te-combo { margin-left: 4px; margin-right: 4px; vertical-align: basel= +ine; } + +.goog-te-gadget .goog-te-combo { margin: 4px 0px; } + +.goog-logo-link, .goog-logo-link:link, .goog-logo-link:visited, .goog-logo-= +link:hover, .goog-logo-link:active { font-size: 12px; font-weight: bold; co= +lor: rgb(68, 68, 68); text-decoration: none; } + +.goog-te-banner .goog-logo-link, .goog-close-link { display: block; margin:= + 0px 10px; } + +.goog-te-banner .goog-logo-link { padding-top: 2px; padding-left: 4px; } + +.goog-te-combo, .goog-te-banner *, .goog-te-ftab *, .goog-te-menu *, .goog-= +te-menu2 *, .goog-te-balloon * { font-family: arial; font-size: 10pt; } + +.goog-te-banner { margin: 0px; background-color: rgb(228, 239, 251); overfl= +ow: hidden; } + +.goog-te-banner img { border: none; } + +.goog-te-banner-content { color: rgb(0, 0, 0); } + +.goog-te-banner-content img { vertical-align: middle; } + +.goog-te-banner-info { color: rgb(102, 102, 102); vertical-align: top; marg= +in-top: 0px; font-size: 7pt; } + +.goog-te-banner-margin { width: 8px; } + +.goog-te-button { border-color: rgb(231, 231, 231); border-style: none soli= +d solid none; border-width: 0px 1px 1px 0px; } + +.goog-te-button div { border-color: rgb(204, 204, 204) rgb(153, 153, 153) r= +gb(153, 153, 153) rgb(204, 204, 204); border-style: solid; border-width: 1p= +x; height: 20px; } + +.goog-te-button button { background: transparent; border: none; cursor: poi= +nter; height: 20px; overflow: hidden; margin: 0px; vertical-align: top; whi= +te-space: nowrap; } + +.goog-te-button button:active { background: none 0px 0px repeat scroll rgb(= +204, 204, 204); } + +.goog-te-ftab { margin: 0px; background-color: rgb(255, 255, 255); white-sp= +ace: nowrap; } + +.goog-te-ftab-link { text-decoration: none; font-weight: bold; font-size: 1= +0pt; border: 1px outset rgb(136, 136, 136); padding: 6px 10px; white-space:= + nowrap; position: absolute; left: 0px; top: 0px; } + +.goog-te-ftab-link img { margin-left: 2px; margin-right: 2px; width: 19px; = +height: 19px; border: none; vertical-align: middle; } + +.goog-te-ftab-link span { text-decoration: underline; margin-left: 2px; mar= +gin-right: 2px; vertical-align: middle; } + +.goog-float-top .goog-te-ftab-link { padding: 2px; border-top-width: 0px; } + +.goog-float-bottom .goog-te-ftab-link { padding: 2px; border-bottom-width: = +0px; } + +.goog-te-menu-value { text-decoration: none; color: rgb(0, 0, 204); white-s= +pace: nowrap; margin-left: 4px; margin-right: 4px; } + +.goog-te-menu-value span { text-decoration: underline; } + +.goog-te-menu-value img { margin-left: 2px; margin-right: 2px; } + +.goog-te-gadget-simple .goog-te-menu-value { color: rgb(0, 0, 0); } + +.goog-te-gadget-simple .goog-te-menu-value span { text-decoration: none; } + +.goog-te-menu { background-color: rgb(255, 255, 255); text-decoration: none= +; border: 2px solid rgb(195, 217, 255); overflow: hidden scroll; position: = +absolute; left: 0px; top: 0px; } + +.goog-te-menu-item { padding: 3px; text-decoration: none; } + +.goog-te-menu-item, .goog-te-menu-item:link { color: rgb(0, 0, 204); backgr= +ound: rgb(255, 255, 255); } + +.goog-te-menu-item:visited { color: rgb(85, 26, 139); } + +.goog-te-menu-item:hover { background: rgb(195, 217, 255); } + +.goog-te-menu-item:active { color: rgb(0, 0, 204); } + +.goog-te-menu2 { background-color: rgb(255, 255, 255); text-decoration: non= +e; border: 1px solid rgb(107, 144, 218); overflow: hidden; padding: 4px; } + +.goog-te-menu2-colpad { width: 16px; } + +.goog-te-menu2-separator { margin: 6px 0px; height: 1px; background-color: = +rgb(170, 170, 170); overflow: hidden; } + +.goog-te-menu2-item div, .goog-te-menu2-item-selected div { padding: 4px; } + +.goog-te-menu2-item .indicator { display: none; } + +.goog-te-menu2-item-selected .indicator { } + +.goog-te-menu2-item-selected .text { padding-left: 4px; padding-right: 4px;= + } + +.goog-te-menu2-item, .goog-te-menu2-item-selected { text-decoration: none; = +} + +.goog-te-menu2-item div, .goog-te-menu2-item:link div, .goog-te-menu2-item:= +visited div, .goog-te-menu2-item:active div { color: rgb(0, 0, 204); backgr= +ound: rgb(255, 255, 255); } + +.goog-te-menu2-item:hover div { color: rgb(255, 255, 255); background: rgb(= +51, 102, 204); } + +.goog-te-menu2-item-selected div, .goog-te-menu2-item-selected:link div, .g= +oog-te-menu2-item-selected:visited div, .goog-te-menu2-item-selected:hover = +div, .goog-te-menu2-item-selected:active div { color: rgb(0, 0, 0); font-we= +ight: bold; } + +.goog-te-balloon { background-color: rgb(255, 255, 255); overflow: hidden; = +padding: 8px; border: none; border-radius: 10px; } + +.goog-te-balloon-frame { background-color: rgb(255, 255, 255); border: 1px = +solid rgb(107, 144, 218); box-shadow: rgb(153, 153, 153) 0px 3px 8px 2px; b= +order-radius: 8px; } + +.goog-te-balloon img { border: none; } + +.goog-te-balloon-text { margin-top: 6px; } + +.goog-te-balloon-zippy { margin-top: 6px; white-space: nowrap; } + +.goog-te-balloon-zippy * { vertical-align: middle; } + +.goog-te-balloon-zippy .minus { background-image: url("//www.google.com/ima= +ges/zippy_minus_sm.gif"); } + +.goog-te-balloon-zippy .plus { background-image: url("//www.google.com/imag= +es/zippy_plus_sm.gif"); } + +.goog-te-balloon-zippy span { color: rgb(0, 0, 204); text-decoration: under= +line; cursor: pointer; margin: 0px 4px; } + +.goog-te-balloon-form { margin: 6px 0px 0px; } + +.goog-te-balloon-form form { margin: 0px; } + +.goog-te-balloon-form form textarea { margin-bottom: 4px; width: 100%; } + +.goog-te-balloon-footer { margin: 6px 0px 4px; } + +.goog-te-spinner-pos { z-index: 1000; position: fixed; transition-delay: 0.= +6s; left: -1000px; top: -1000px; } + +.goog-te-spinner-animation { display: flex; align-items: center; justify-co= +ntent: center; width: 104px; height: 104px; border-radius: 50px; background= +: url("//www.gstatic.com/images/branding/product/2x/translate_24dp.png") 50= +% 50% no-repeat rgb(255, 255, 255); transition: all 0.6s ease-in-out 0s; tr= +ansform: scale(0.4); opacity: 0; } + +.goog-te-spinner-animation-show { transform: scale(0.5); opacity: 1; } + +.goog-te-spinner { margin: 2px 0px 0px 2px; animation: 1.4s linear 0s infin= +ite normal none running goog-te-spinner-rotator; } + +@keyframes goog-te-spinner-rotator {=20 + 0% { transform: rotate(0deg); } + 100% { transform: rotate(270deg); } +} + +.goog-te-spinner-path { stroke-dasharray: 187; stroke-dashoffset: 0; stroke= +: rgb(66, 133, 244); transform-origin: center center; animation: 1.4s ease-= +in-out 0s infinite normal none running goog-te-spinner-dash; } + +@keyframes goog-te-spinner-dash {=20 + 0% { stroke-dashoffset: 187; } + 50% { stroke-dashoffset: 46.75; transform: rotate(135deg); } + 100% { stroke-dashoffset: 187; transform: rotate(450deg); } +} + +#goog-gt-tt html, #goog-gt-tt body, #goog-gt-tt div, #goog-gt-tt span, #goo= +g-gt-tt iframe, #goog-gt-tt h1, #goog-gt-tt h2, #goog-gt-tt h3, #goog-gt-tt= + h4, #goog-gt-tt h5, #goog-gt-tt h6, #goog-gt-tt p, #goog-gt-tt a, #goog-gt= +-tt img, #goog-gt-tt ol, #goog-gt-tt ul, #goog-gt-tt li, #goog-gt-tt table,= + #goog-gt-tt form, #goog-gt-tt tbody, #goog-gt-tt tr, #goog-gt-tt td { marg= +in: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inhe= +rit; font-weight: inherit; font-stretch: inherit; font-size: inherit; font-= +family: inherit; vertical-align: baseline; text-align: left; line-height: n= +ormal; } + +#goog-gt-tt ol, #goog-gt-tt ul { list-style: none; } + +#goog-gt-tt table { border-collapse: collapse; border-spacing: 0px; } + +#goog-gt-tt caption, #goog-gt-tt th, #goog-gt-tt td { text-align: left; fon= +t-weight: normal; } + +div#goog-gt-tt { padding: 10px 14px; } + +#goog-gt-tt { color: rgb(34, 34, 34); background-color: rgb(255, 255, 255);= + border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.2) 0px 4= +px 16px; display: none; font-family: arial; font-size: 10pt; width: 420px; = +padding: 12px; position: absolute; z-index: 10000; } + +#goog-gt-tt .original-text, .gt-hl-layer { clear: both; font-size: 10pt; po= +sition: relative; text-align: justify; width: 100%; } + +#goog-gt-tt .title { color: rgb(153, 153, 153); font-family: arial, sans-se= +rif; margin: 4px 0px; text-align: left; } + +#goog-gt-tt .close-button { display: none; } + +#goog-gt-tt .logo { float: left; margin: 0px; } + +#goog-gt-tt .activity-links { display: inline-block; } + +#goog-gt-tt .started-activity-container { display: none; width: 100%; } + +#goog-gt-tt .activity-root { margin-top: 20px; } + +#goog-gt-tt .left { float: left; } + +#goog-gt-tt .right { float: right; } + +#goog-gt-tt .bottom { min-height: 15px; position: relative; height: 1%; } + +#goog-gt-tt .status-message { background: rgb(41, 145, 13); border-radius: = +4px; box-shadow: rgb(30, 102, 9) 0px 2px 2px inset; color: white; font-size= +: 9pt; font-weight: bolder; margin-top: 12px; padding: 6px; text-shadow: rg= +b(30, 102, 9) 1px 1px 1px; } + +#goog-gt-tt .activity-link { color: rgb(17, 85, 204); cursor: pointer; font= +-family: arial; font-size: 11px; margin-right: 15px; text-decoration: none;= + } + +#goog-gt-tt textarea { font-family: arial; resize: vertical; width: 100%; m= +argin-bottom: 10px; border-radius: 1px; border-width: 1px; border-style: so= +lid; border-color: silver rgb(217, 217, 217) rgb(217, 217, 217); border-ima= +ge: initial; font-size: 13px; height: auto; overflow-y: auto; padding: 1px;= + } + +#goog-gt-tt textarea:focus { box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 2px ins= +et; border: 1px solid rgb(77, 144, 254); outline: none; } + +#goog-gt-tt .activity-cancel { margin-right: 10px; } + +#goog-gt-tt .translate-form { min-height: 25px; vertical-align: middle; pad= +ding-top: 8px; } + +#goog-gt-tt .translate-form .activity-form { margin-bottom: 0px; } + +#goog-gt-tt .translate-form .activity-form input { display: inline-block; m= +in-width: 54px; border: 1px solid rgba(0, 0, 0, 0.1); text-align: center; c= +olor: rgb(68, 68, 68); font-size: 11px; font-weight: bold; height: 27px; ou= +tline: 0px; padding: 0px 8px; vertical-align: middle; line-height: 27px; ma= +rgin: 0px 16px 0px 0px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px; border-= +radius: 2px; transition: all 0.218s ease 0s; background-color: rgb(245, 245= +, 245); background-image: -webkit-linear-gradient(top, rgb(245, 245, 245), = +rgb(241, 241, 241)); user-select: none; cursor: default; } + +#goog-gt-tt .translate-form .activity-form input:hover { border: 1px solid = +rgb(198, 198, 198); color: rgb(34, 34, 34); transition: all 0s ease 0s; bac= +kground-color: rgb(248, 248, 248); background-image: -webkit-linear-gradien= +t(top, rgb(248, 248, 248), rgb(241, 241, 241)); } + +#goog-gt-tt .translate-form .activity-form input:active { border: 1px solid= + rgb(198, 198, 198); color: rgb(51, 51, 51); background-color: rgb(246, 246= +, 246); background-image: -webkit-linear-gradient(top, rgb(246, 246, 246), = +rgb(241, 241, 241)); } + +#goog-gt-tt .translate-form .activity-form input:focus, #goog-gt-tt .transl= +ate-form .activity-form input.focus { outline: none; border: 1px solid rgb(= +77, 144, 254); z-index: 4 !important; } + +#goog-gt-tt .translate-form .activity-form input.selected { background-colo= +r: rgb(238, 238, 238); background-image: -webkit-linear-gradient(top, rgb(2= +38, 238, 238), rgb(224, 224, 224)); box-shadow: rgba(0, 0, 0, 0.1) 0px 1px = +2px inset; border: 1px solid rgb(204, 204, 204); color: rgb(51, 51, 51); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit { color: w= +hite; border-color: rgb(48, 121, 237); background-color: rgb(77, 144, 254);= + background-image: -webkit-linear-gradient(top, rgb(77, 144, 254), rgb(71, = +135, 237)); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit:hover #goo= +g-gt-tt .translate-form .activity-form input.activity-submit:focus, #goog-g= +t-tt .translate-form .activity-form input.activity-submit.focus #goog-gt-tt= + .translate-form .activity-form input.activity-submit:active { border-color= +: rgb(48, 121, 237); background-color: rgb(53, 122, 232); background-image:= + -webkit-linear-gradient(top, rgb(77, 144, 254), rgb(53, 122, 232)); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit:hover { bo= +x-shadow: rgb(255, 255, 255) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.1) 0px = +1px 1px; } + +#goog-gt-tt .translate-form .activity-form input:focus, #goog-gt-tt .transl= +ate-form .activity-form input.focus, #goog-gt-tt .translate-form .activity-= +form input:active, #goog-gt-tt .translate-form .activity-form input:hover, = +#goog-gt-tt .translate-form .activity-form input.activity-submit:focus, #go= +og-gt-tt .translate-form .activity-form input.activity-submit.focus, #goog-= +gt-tt .translate-form .activity-form input.activity-submit:active, #goog-gt= +-tt .translate-form .activity-form input.activity-submit:hover { border-col= +or: rgb(48, 121, 237); } + +#goog-gt-tt .gray { color: rgb(153, 153, 153); font-family: arial, sans-ser= +if; } + +#goog-gt-tt .alt-helper-text { color: rgb(153, 153, 153); font-size: 11px; = +font-family: arial, sans-serif; margin: 15px 0px 5px; } + +#goog-gt-tt .alt-error-text { color: rgb(136, 0, 0); display: none; font-si= +ze: 9pt; } + +.goog-text-highlight { background-color: rgb(201, 215, 241); box-shadow: rg= +b(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative; } + +#goog-gt-tt .alt-menu.goog-menu { background: rgb(255, 255, 255); border: 1= +px solid rgb(221, 221, 221); box-shadow: rgb(153, 153, 170) 0px 2px 4px; mi= +n-width: 0px; outline: none; padding: 0px; position: absolute; z-index: 200= +0; } + +#goog-gt-tt .alt-menu .goog-menuitem { cursor: pointer; padding: 2px 5px 5p= +x; margin-right: 0px; border-style: none; } + +#goog-gt-tt .alt-menu div.goog-menuitem:hover { background: rgb(221, 221, 2= +21); } + +#goog-gt-tt .alt-menu .goog-menuitem h1 { font-size: 100%; font-weight: bol= +d; margin: 4px 0px; } + +#goog-gt-tt .alt-menu .goog-menuitem strong { color: rgb(52, 90, 173); } + +#goog-gt-tt .goog-submenu-arrow { text-align: right; position: absolute; ri= +ght: 0px; left: auto; } + +#goog-gt-tt .goog-menuitem-rtl .goog-submenu-arrow { text-align: left; posi= +tion: absolute; left: 0px; right: auto; } + +#goog-gt-tt .gt-hl-text, #goog-gt-tt .trans-target-highlight { background-c= +olor: rgb(241, 234, 0); border-radius: 4px; box-shadow: rgba(0, 0, 0, 0.5) = +3px 3px 4px; box-sizing: border-box; color: rgb(241, 234, 0); cursor: point= +er; margin: -2px -2px -2px -3px; padding: 2px 2px 2px 3px; position: relati= +ve; } + +#goog-gt-tt .trans-target-highlight { color: rgb(34, 34, 34); } + +#goog-gt-tt .gt-hl-layer { color: white; position: absolute !important; } + +#goog-gt-tt .trans-target, #goog-gt-tt .trans-target .trans-target-highligh= +t { background-color: rgb(201, 215, 241); border-radius: 4px 4px 0px 0px; b= +ox-shadow: rgba(0, 0, 0, 0.5) 3px 3px 4px; box-sizing: border-box; cursor: = +pointer; margin: -2px -2px -2px -3px; padding: 2px 2px 3px 3px; position: r= +elative; } + +#goog-gt-tt span:focus { outline: none; } + +#goog-gt-tt .trans-edit { background-color: transparent; border: 1px solid = +rgb(77, 144, 254); border-radius: 0em; margin: -2px; padding: 1px; } + +#goog-gt-tt .gt-trans-highlight-l { border-left: 2px solid red; margin-left= +: -2px; } + +#goog-gt-tt .gt-trans-highlight-r { border-right: 2px solid red; margin-rig= +ht: -2px; } + +#goog-gt-tt #alt-input { padding: 2px; } + +#goog-gt-tt #alt-input-text { font-size: 11px; padding: 2px 2px 3px; margin= +: 0px; background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); border= +-width: 1px; border-style: solid; border-color: rgb(192, 192, 192) rgb(217,= + 217, 217) rgb(217, 217, 217); border-image: initial; display: inline-block= +; vertical-align: top; height: 21px; box-sizing: border-box; border-radius:= + 1px; } + +#goog-gt-tt #alt-input-text:hover { border-width: 1px; border-style: solid;= + border-color: rgb(160, 160, 160) rgb(185, 185, 185) rgb(185, 185, 185); bo= +rder-image: initial; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px inset; } + +#goog-gt-tt #alt-input-text:focus { box-shadow: rgba(0, 0, 0, 0.3) 0px 1px = +2px inset; outline: none; border: 1px solid rgb(77, 144, 254); } + +#goog-gt-tt #alt-input-submit { font-size: 11px; padding: 2px 6px 3px; marg= +in: 0px 0px 0px 2px; height: 21px; } +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gstatic.com/images/branding/product/2x/translate_24dp.png + +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 +5PF339yL/IxXqK4AAAAASUVORK5CYII= + +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://docs.python.org/3/_static/py.png + +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A +/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9gEGxE4IQYzJ14AAAI3SURBVDjL +ZZNPSFVBFIe/e9+zd3silBCl0SZoU4s2rVq0EB5tQip4UNvATVGu3QRBiyAi2iltWkgbF5EgRhFF +RpiWtrWIzDIV1Pzz7p15M2fmtvDevOqBw8DM9zvnN8ycgF3R/eDtM2mac96ZdrFNxBikqbRV+vHH +/ut9gAZczoe7C3gnF0f6au1OLM5avFi8d1Ea+JvAMSAq8nsKOGs5f2cYJ3Y7rc2PO4BqkS8DdD98 +f9tbe1ysCoxOBo1qlEXHJWcM4b5KPU19zleA0o4Clx99eO3EdqVewHsCoFRugUoVghJO7A6H6Vx9 +wdtYi27cr5x6dy/03nVtWTU7bWeZh6jNUcAiCaFTURl9A+gs56AviHzh3mnqtdPxm6knfQPLU7Ua +okASQq/agY7yDrG16Mba6Pz48NP56VdrgAApYObGaicPtkovToFLQBKA/WUxTe3FRk4san15aGKg +d3Dj560rrdGJS6FT0X9YYvLuiMKL1kAQOpHZ3PqfyZfP41+9PW1VfzX0RXFSECfgNEmSTgImdDru +F2O0E8vvqZG1auQubAsKooIYYHpGvwA2g+xndQBHgWa6cG0ih5cW/w6VvEq3nChwCoBvs+bL2Z7V +ceBHGTDAIrABpMVuhw+4OiLgLIglOLPYBTQAlfErIeCzjRVg1dtEb1kt5Omv+DTV2YssAN+zNdkz +C42N9brV8WdvYp07seOdM2Of1F3AAknW0AJpwN6IgEPAEaANaMlcbmZdl7KRBuAfAb+v//yMAJoA +AAAASUVORK5CYII= + +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gstatic.com/images/branding/product/1x/translate_24dp.png + +iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADAElEQVR4Ab2TA5djWRRGaxlj/51h +27Zt23xltG3btrtj2zbHM9/c87LuvKCNumvtYrL3zTlJVaucIeuz/bs3pv/s1ZRHT0YPTmMe3Rnd +GvLoypiwPvzxWwVI3rs5j1cFOq32dHurAIm5nJDkpYHOq2O33irAxS+8PaeesfTW528c+F/6gttz +OVFz1AebzQu/P4BQKIRgMCgSCARE/H4/8YfF7upZGmiUKJfzQBfGsPUJPJPp4PX6mTjE5eUB+Hy+ +36VAmXjt6Sz0rhRi8SSM7Pvqk1lRTnSuy+PUVR10OjOT+F8YIKR3UbH8VBaJZBKH72ew9GgWh++l +Mf9QjstF1hxwQSbTwGy2kvTVARoFR+9M4fjDdMnci+WdGENa4nj8RAWt1sD2YSPZ80YkBUjGobGs +OZUVxTtvZJBMJkUMrhTJC9TSmLRQqfUwGIwYuaSW7cTLqQyQjEOik48y4q0Hb8hh0q4cHuhTuKdL +cTk6MnouvoEhcwQMW7AWIxYJGLW0FmNWNGDMysbKAMk4tFDawZEHaSw/nsUhtgv6fRn7mcuJQc1x +bNl/GvceydguzBC27sPJSzdIzJECfL4citAu4okkjO4UhNOl8g41ObRnCNuuYEH9dpy7fhszq9ez +kAVOp/PFgU7l1EqUy4lV+5yYV7MVIxbW4Mb9x7RwEZfLRbuQAqXSF4olOVGdQ/+GKEYvbMDMtRuw +8cAxWK1WMeBwOOiVSIEXSEvE5XKiHaNhzy08fabCwqatLHKCBwgp0LY2/UfHNxQTbYUcVrIxyeQa +qDV6LG7ejqt3HsBut5cGugnBPr+sjv/eXsiA066ctWmRtgXQZk2Bgc0RKJRaGI0mmMzmkjFVvemZ +Mv/Mdz/2PIcfehT4vvs5rKi9Jd7eZDLDYrEQbx+gM3zKlehPvS6BWFF3G3I2Hq2OAib6PPAAjent +AouEO4t/7s3ktYXlKpUa6MoChTHZf3+rwLx5175aUXMLDx/JIJMpoVZrodVqodfrRQwGAwV/v3L9 +ab+q1jj/Aa5bwO+xfluQAAAAAElFTkSuQmCC + +------MultipartBoundary--iQuJI5RQb7T74wDxev4jcuIw6Jn8H7EsJ6TzxZNAY3------ diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Leccion 02 - Comprensi\303\263n de listas.ipynb" "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Leccion 02 - Comprensi\303\263n de listas.ipynb" new file mode 100644 index 0000000..2282f78 --- /dev/null +++ "b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Leccion 02 - Comprensi\303\263n de listas.ipynb" @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Comprensión de listas" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 01 (Apuntes) - Operadores encadenados.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 01 (Apuntes) - Operadores encadenados.ipynb similarity index 92% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 01 (Apuntes) - Operadores encadenados.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 01 (Apuntes) - Operadores encadenados.ipynb index 3580598..b173a82 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 01 (Apuntes) - Operadores encadenados.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 01 (Apuntes) - Operadores encadenados.ipynb @@ -13,9 +13,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -42,9 +40,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -71,9 +67,7 @@ { "cell_type": "code", "execution_count": 29, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -110,9 +104,7 @@ { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -140,9 +132,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -164,7 +154,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -178,9 +168,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 03 (Apuntes) - Funciones decoradoras.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 03 (Apuntes) - Funciones decoradoras.ipynb similarity index 71% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 03 (Apuntes) - Funciones decoradoras.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 03 (Apuntes) - Funciones decoradoras.ipynb index aa9b431..784e98f 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 03 (Apuntes) - Funciones decoradoras.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 03 (Apuntes) - Funciones decoradoras.ipynb @@ -22,9 +22,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def hola():\n", @@ -44,10 +42,8 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "ename": "NameError", @@ -56,7 +52,7 @@ "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mbienvenido\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mbienvenido\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mNameError\u001b[0m: name 'bienvenido' is not defined" ] } @@ -74,18 +70,16 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 3, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - ".bienvenido>" + ".bienvenido()>" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -106,16 +100,14 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'bienvenido': .bienvenido at 0x000001F867E88C80>}\n" + "{'bienvenido': .bienvenido at 0x000001663E9193A8>}\n" ] } ], @@ -141,20 +133,11 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { - "collapsed": false, "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'bienvenido': .bienvenido at 0x000001F867E88950>, 'numero': 50}\n" - ] - } - ], + "outputs": [], "source": [ "lista = [1,2,3]\n", "\n", @@ -179,16 +162,14 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'__name__': '__main__', '_oh': {}, '__doc__': 'Automatically created module for IPython interactive environment', 'lista': [1, 2, 3], '__builtin__': , 'In': ['', '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()'], '_ih': ['', '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()'], '__loader__': None, '__builtins__': , '_dh': ['C:\\\\CursoPython\\\\Fase 4 - Temas avanzados\\\\Tema 15 - Funcionalidades avanzadas\\\\Apuntes'], 'get_ipython': >, 'hola': , '_sh': , '_': '', '_ii': '', 'Out': {}, '__package__': None, '___': '', '_iii': '', '_i': '', '__spec__': None, 'exit': , 'quit': , '_i1': '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()', '__': ''}\n" + "{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': , '__builtins__': , '_ih': ['', 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n return bienvenido', 'bienvenido()', 'hola()', 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( locals() ) # Mostramos el ámbito local\\n\\nhola()', '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()'], '_oh': {3: .bienvenido at 0x000001663E9B5DC8>}, '_dh': ['C:\\\\Users\\\\Isra\\\\CursoPython\\\\Fase 4 - Temas avanzados\\\\Tema 15 - Funcionalidades avanzadas\\\\Apuntes'], 'In': ['', 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n return bienvenido', 'bienvenido()', 'hola()', 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( locals() ) # Mostramos el ámbito local\\n\\nhola()', '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()'], 'Out': {3: .bienvenido at 0x000001663E9B5DC8>}, 'get_ipython': >, 'exit': , 'quit': , '_': .bienvenido at 0x000001663E9B5DC8>, '__': '', '___': '', '_i': 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( locals() ) # Mostramos el ámbito local\\n\\nhola()', '_ii': 'hola()', '_iii': 'bienvenido()', '_i1': 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n return bienvenido', 'hola': , '_i2': 'bienvenido()', '_i3': 'hola()', '_3': .bienvenido at 0x000001663E9B5DC8>, '_i4': 'def hola():\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( locals() ) # Mostramos el ámbito local\\n\\nhola()', '_i5': '# Antes de ejecutar este bloque reinicia el Notebook para vaciar la memoria.\\nlista = [1,2,3]\\n\\ndef hola():\\n \\n numero = 50\\n \\n def bienvenido():\\n return \"Hola!\"\\n \\n print( globals() ) # Mostramos el ámbito global\\n\\nhola()', 'lista': [1, 2, 3]}\n" ] } ], @@ -219,22 +200,9 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['_i4', '__name__', '_oh', '__doc__', 'lista', '__builtin__', 'In', '_i5', '_ih', '__loader__', '__builtins__', '_dh', 'get_ipython', 'hola', '_sh', '_', '_ii', 'Out', '__package__', '___', '_iii', '_i', '__spec__', 'exit', '_i3', 'quit', '_i1', '_i2', '__'])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "globals().keys()" ] @@ -248,41 +216,18 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[1, 2, 3]\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "globals()['lista'] # Desde la función globals" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[1, 2, 3]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "lista # Forma tradicional" ] @@ -299,18 +244,16 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - ".bienvenido>" + ".bienvenido()>" ] }, - "execution_count": 13, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -335,10 +278,8 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -346,7 +287,7 @@ "'Hola!'" ] }, - "execution_count": 15, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -364,10 +305,8 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { @@ -375,7 +314,7 @@ "'Hola!'" ] }, - "execution_count": 16, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -394,10 +333,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { @@ -405,7 +342,7 @@ "'Hola!'" ] }, - "execution_count": 17, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -426,16 +363,14 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Hola Mundo\n" + "Hola!\n" ] } ], @@ -468,10 +403,8 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [], "source": [ "def hola():\n", @@ -492,10 +425,8 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [], "source": [ "def monitorizar(funcion):\n", @@ -519,10 +450,8 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -547,10 +476,8 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": true - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "@monitorizar\n", @@ -571,22 +498,16 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\t* Se está apunto de ejecutar la función: hola\n", "Hola!\n", - "\t* Se ha finalizado de ejecutar la función: hola\n", "\n", - "\t* Se está apunto de ejecutar la función: adios\n", - "Adiós!\n", - "\t* Se ha finalizado de ejecutar la función: adios\n" + "Adiós!\n" ] } ], @@ -605,25 +526,9 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\t* Se está apunto de ejecutar la función: hola\n", - "Hola Héctor!\n", - "\t* Se ha finalizado de ejecutar la función: hola\n", - "\n", - "\t* Se está apunto de ejecutar la función: adios\n", - "Adiós Héctor!\n", - "\t* Se ha finalizado de ejecutar la función: adios\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def monitorizar_args(funcion):\n", "\n", @@ -653,12 +558,19 @@ "source": [ "**Perfecto!** Ahora ya sabes qué son las funciones decoradoras y cómo utilizar el símbolo @ para automatizar su ejecución. Estas funciones se utilizan mucho cuando trabajamos con Frameworks Web como Django, así que seguro te harán servicio si tienes pensado aprender a utilizarlo." ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -672,9 +584,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 04 (Apuntes) - Funciones generadoras e iteradores.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 04 (Apuntes) - Funciones generadoras e iteradores.ipynb similarity index 59% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 04 (Apuntes) - Funciones generadoras e iteradores.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 04 (Apuntes) - Funciones generadoras e iteradores.ipynb index cb5c8f0..cf3afec 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 04 (Apuntes) - Funciones generadoras e iteradores.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 04 (Apuntes) - Funciones generadoras e iteradores.ipynb @@ -11,9 +11,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -40,9 +38,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -75,9 +71,7 @@ { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -113,9 +107,7 @@ { "cell_type": "code", "execution_count": 21, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -145,9 +137,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -168,7 +158,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Sin embargo el gran potencial de los generadores no es simplemente crear listas, de hecho como ya hemos visto, el propio resultado no es una lista en sí mismo, sino una secuencia iterable con un montón de características únicas." + "Sin embargo el gran potencial de los generadores no es simplemente crear listas, de hecho como ya hemos visto, el propio resultado no es una lista en sí mismo, sino una __**secuencia iterable**__ con un montón de características únicas." ] }, { @@ -184,9 +174,7 @@ { "cell_type": "code", "execution_count": 31, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "pares = pares(3)" @@ -202,9 +190,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -231,9 +217,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -262,9 +246,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "ename": "StopIteration", @@ -294,9 +276,7 @@ { "cell_type": "code", "execution_count": 38, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "ename": "TypeError", @@ -325,9 +305,7 @@ { "cell_type": "code", "execution_count": 39, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "ename": "TypeError", @@ -350,15 +328,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Pues no, no podemos iterar ninguna colección como si fuera una secuencia. Sin embargo, hay una función muy interesante que nos permite covertir las cadenas y algunas colecciones a iteradores, la función **iter()**:" + "Pues no, no podemos iterar ninguna colección como si fuera una secuencia. Sin embargo, hay una función muy interesante que nos permite convertir las cadenas y algunas colecciones a *objetos iteradores*, la función **iter()**:" ] }, { "cell_type": "code", - "execution_count": 48, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -374,19 +350,31 @@ ], "source": [ "lista = [1,2,3,4,5]\n", - "lista_iterable = iter(lista)\n", - "print( next(lista_iterable) )\n", - "print( next(lista_iterable) )\n", - "print( next(lista_iterable) )\n", - "print( next(lista_iterable) )\n", - "print( next(lista_iterable) )" + "lista_iterador = iter(lista)\n", + "\n", + "print( next(lista_iterador) )\n", + "print( next(lista_iterador) )\n", + "print( next(lista_iterador) )\n", + "print( next(lista_iterador) )\n", + "print( next(lista_iterador) )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Un objeto se dice que es **iterable**, si podemos obtener un **objeto iterador** de él y, por tanto, puede ser **iterado**. La mayoría de los contenedores integrados en Python son iterables, como por ejemplo: **list**, **tuple**, **string**, etc...\n", + "\n", + "Técnicamente hablando, un objeto iterable debe implementar dos métodos especiales **\\__iter\\__()** y **\\__next\\__()**, a lo que se llama **protocolo iterador**.\n", + "\n", + "La llamada a la función **iter(objeto)** se corresponde con **objeto.\\__iter\\__()**, y devuelve un iterador, a partir del objeto iterable. De forma similar, la llamada a la función **next(objeto)**, es sinónimo a llamar al método implementado del objeto iterable **objeto.\\__next\\__()**. " ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "metadata": { - "collapsed": false + "scrolled": true }, "outputs": [ { @@ -402,11 +390,256 @@ ], "source": [ "cadena = \"Hola\"\n", - "cadena_iterable = iter(cadena)\n", - "print( next(cadena_iterable) )\n", - "print( next(cadena_iterable) )\n", - "print( next(cadena_iterable) )\n", - "print( next(cadena_iterable) )" + "#cadena_iterable = iter(cadena)\n", + "cadena_iterador = cadena.__iter__()\n", + "\n", + "print( next(cadena_iterador) )\n", + "print( next(cadena_iterador) )\n", + "print( cadena_iterador.__next__() )\n", + "print( cadena_iterador.__next__() )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El bucle **for** puede iterar sobre cualquier iterable (**list**, **tuple**, **string**,...). Echemos un vistazo más de cerca a cómo se implementa el bucle **for** en Python." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "iterable = [1, 2, 3]\n", + "\n", + "for element in iterable:\n", + " # Especificamos la lógica a realizar\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En realidad, el bucle **for** de manera interna se implementa como:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "3\n", + "4\n", + "5\n" + ] + } + ], + "source": [ + "iterable = [1,2,3,4,5]\n", + "objeto_iterador = iter(iterable) # Convertimos la lista a una secuencia iterable\n", + "#print(objeto_iterador)\n", + "\n", + "while True:\n", + " try:\n", + " elemento = next(objeto_iterador)\n", + " print(elemento)\n", + " except StopIteration:\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El bucle **for**, de manera interna, crea un **objeto iterador** (objeto_iterador), llamando a la función **iter()** sobre el **iterable**. Dentro del bucle, la llamada a **next()** proporcionará el siguiente elemento ejecutándose el cuerpo del bucle **for** para ese valor. Al terminar de recorrer todos los elementos, se generará internamente una excepción del tipo **StopIteration** y el bucle finalizará." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Construyendo tu propio iterador en Python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Construir un iterador desde cero es fácil en Python. Solo tenemos que implementar los métodos **\\__iter\\__()** y **\\__next\\__()**.\n", + "\n", + "El método **\\__iter\\__()** devuelve el objeto iterador en sí mismo. Si es necesario, se puede realizar alguna inicialización. El método **\\__next\\__()** debe devolver el siguiente elemento de la secuencia. Al llegar al final, y en llamadas posteriores, debería generarse un **StopIteration**.\n", + "\n", + "Aquí, mostramos un ejemplo que nos dará la próxima potencia de 2 en cada iteración. El exponente de potencia comienza desde cero hasta un número establecido por el usuario." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "class Potencia_Dos:\n", + " \"\"\"Clase que implemente un iterador de la potencia del 2\"\"\"\n", + "\n", + " def __init__(self, max = 0):\n", + " self.max = max\n", + "\n", + " def __iter__(self):\n", + " self.n = 0\n", + " return self\n", + "\n", + " def __next__(self):\n", + " if self.n <= self.max:\n", + " resultado = 2 ** self.n\n", + " self.n += 1\n", + " return resultado\n", + " else:\n", + " raise StopIteration" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "4\n", + "8\n", + "16\n", + "32\n" + ] + } + ], + "source": [ + "for i in Potencia_Dos(5):\n", + " print(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "O la función de los **Pares** que se definió usando los generadores." + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "class Pares:\n", + " \"\"\"Clase que implemente un iterador de números pares\"\"\"\n", + "\n", + " def __init__(self, max = 0):\n", + " self.max = max\n", + "\n", + " def __iter__(self):\n", + " self.n = 0\n", + " return self\n", + "\n", + " def __next__(self):\n", + " if self.n <= self.max:\n", + " if self.n % 2 == 0:\n", + " resultado = self.n\n", + " self.n += 1\n", + " return resultado\n", + " else:\n", + " self.n += 1\n", + " return self.__next__()\n", + " else:\n", + " raise StopIteration\n", + " \n", + " # De forma más sencilla\n", + " # def __next__(self):\n", + " # if self.n <= self.max:\n", + " # resultado = self.n\n", + " # self.n +=2\n", + " # return resultado\n", + " # else:\n", + " # raise StopIteration" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "2\n", + "4\n", + "6\n", + "8\n", + "10\n" + ] + } + ], + "source": [ + "for i in Pares(10):\n", + " print(i)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "No obstante, la manera más aconsejable y sencilla de crear **Iteradores** es mediante el uso de *Generadores*. Y a modo de recordatorio se definían:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "def pares(n):\n", + " for numero in range(n+1):\n", + " if numero % 2 == 0:\n", + " yield numero\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n", + "2\n", + "4\n", + "6\n", + "8\n", + "10\n" + ] + } + ], + "source": [ + "for numero in pares(10):\n", + " print(numero)" ] }, { @@ -420,7 +653,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -434,9 +667,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 05 (Apuntes) - Funciones lambda.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 05 (Apuntes) - Funciones lambda.ipynb similarity index 78% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 05 (Apuntes) - Funciones lambda.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 05 (Apuntes) - Funciones lambda.ipynb index c6e724f..e2ef37c 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 05 (Apuntes) - Funciones lambda.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 05 (Apuntes) - Funciones lambda.ipynb @@ -20,9 +20,7 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def doblar(num):\n", @@ -33,9 +31,7 @@ { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -62,9 +58,7 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def doblar(num):\n", @@ -99,9 +93,7 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -122,17 +114,55 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "¡Hualá! Aquí tenemos una función anónima con una entrada que recibe **num**, y una salida que devuelve **num * 2**.\n", - "\n", - "Lo único que necesitamos hacer para utilizarla es guardarla en una variable y utilizarla tal como haríamos con una función normal:" + "¡Hualá! Aquí tenemos una función anónima con una entrada que recibe **num**, y una salida que devuelve **num * 2**. Como se puede observar las funciones **lambda** devuelven objetos de tipo función." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Las funciones **Lambda** pueden tener cualquier número de argumentos pero solo una expresión." ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lambda argumentos: expresion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "En el programa anterior, la función lambda es:\n", + "```python\n", + "lambda num: num * 2``` \n", + "En dónde **num** es el argumento y **num * 2** es la expresión que se evalúa y devuelve. Esta función no tiene nombre, y devuelve un objeto de tipo función que debemos asignar a una variable, en nuestro caso, se denomina **doblar**: " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "doblar = lambda num: num*2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ahora podemos llamarla como una función normal:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { @@ -140,14 +170,12 @@ "4" ] }, - "execution_count": 9, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "doblar = lambda num: num*2\n", - "\n", "doblar(2)" ] }, @@ -162,25 +190,23 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "False" ] }, - "execution_count": 14, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "impar = lambda num: num%2 != 0\n", - "impar(5)" + "impar(4)" ] }, { @@ -193,9 +219,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -223,9 +247,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -265,7 +287,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -279,9 +301,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 06 (Apuntes) - Funci\303\263n filter.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 06 (Apuntes) - Funcion filter.ipynb similarity index 72% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 06 (Apuntes) - Funci\303\263n filter.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 06 (Apuntes) - Funcion filter.ipynb index 4ba6a76..b010919 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 06 (Apuntes) - Funci\303\263n filter.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 06 (Apuntes) - Funcion filter.ipynb @@ -6,39 +6,55 @@ "source": [ "# Función filter()\n", "\n", - "Tal como su nombre indica filter significa filtrar, y es una de mis funciones favoritas, ya que a partir de una lista o iterador, y una función condicional, es capaz de devolver una nueva colección con los elementos filtrados que cumplan la condición.\n", + "Tal como su nombre indica **filter** significa filtrar, y toma como argumentos una función condicional y una lista o iterable. Al ejecutarse, **filter** llama a la función tantas veces como elementos tiene la lista, y devuelve una nueva lista que contiene aquellos ***elementos** para los que la función se evalúa como **True**. \n", "\n", "Por ejemplo, supongamos que tenemos una lista varios números y queremos filtrarla, quedándonos únicamente con los múltiples de 5..." ] }, { "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "def multiple(numero): # Primero declaramos una función condicional\n", + " if numero % 5 == 0: # Comprobamos si un numero es múltiple de cinco\n", + " return True # Sólo devolvemos True si lo es\n", + " \n", + "numeros = [2, 5, 10, 23, 50, 33]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def multiple(numero): # Primero declaramos una función condicional\n", - " if numero % 5 == 0: # Comprobamos si un numero es múltiple de cinco\n", - " return True # Sólo devolvemos True si lo es\n", - " \n", - "numeros = [2, 5, 10, 23, 50, 33]\n", - "\n", "filter(multiple, numeros)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "La llamada a la función **filter** es equivalente a:\n", + "```python\n", + "# (item for item in iterable if function(item))\n", + "(elemento for elemento in numeros if multiple(elemento))\n", + "```" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -48,10 +64,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -59,7 +73,7 @@ "[5, 10, 50]" ] }, - "execution_count": 17, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -68,6 +82,35 @@ "list( filter(multiple, numeros) )" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Los objetos de tipo **filter**, a su vez, son iteradores y soportan la llamada al método **next()**. " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f = filter(multiple, numeros)\n", + "\n", + "next(f)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -78,9 +121,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -112,9 +153,7 @@ { "cell_type": "code", "execution_count": 30, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "class Persona:\n", @@ -145,9 +184,7 @@ { "cell_type": "code", "execution_count": 33, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -176,7 +213,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -190,9 +227,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 07 (Apuntes) - Funci\303\263n map.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 07 (Apuntes) - Funcion map.ipynb similarity index 69% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 07 (Apuntes) - Funci\303\263n map.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 07 (Apuntes) - Funcion map.ipynb index fa5bebb..0da5afa 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 07 (Apuntes) - Funci\303\263n map.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 07 (Apuntes) - Funcion map.ipynb @@ -9,27 +9,23 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "Esta función trabaja de una forma muy similar a **filter()**, con la diferencia que en lugar de aplicar una condición a un elemento de una lista o secuencia, aplica una función sobre todos los elementos y como resultado se devuelve un iterable de tipo map:" + "Esta función trabaja de una forma similar a **filter()**, en lugar de aplicar una condición a un elemento de una lista o secuencia, devuelve un iterador de tipo map, que contiene los elementos devueltos por esa función para cada elemento." ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -43,21 +39,38 @@ "map(doblar, numeros)" ] }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p = map(doblar, numeros)\n", + "next(p)" + ] + }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ - "Fácilmente podemos transformar este iterable en una lista:" + "Fácilmente podemos transformar este iterador en una lista:" ] }, { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -76,9 +89,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Y podemos simplificarlo con una función lambda para substituir la llamada de una función definida:" ] @@ -86,9 +97,7 @@ { "cell_type": "code", "execution_count": 6, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -119,14 +128,12 @@ { "cell_type": "code", "execution_count": 8, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[7, 9, 11, 13, 15]" + "[6, 14, 24, 36, 50]" ] }, "execution_count": 8, @@ -152,7 +159,7 @@ "cell_type": "code", "execution_count": 12, "metadata": { - "collapsed": false + "scrolled": true }, "outputs": [ { @@ -172,6 +179,36 @@ "list( map(lambda x,y,z : x*y*z, a,b,c) )" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Para realizar el **map** las secuencias deben tener el mismo número de elementos. Si las secuencias tienen diferentes tamaños, la función **map** se aplicará a los elementos hasta que una de las secuencias se agote, ignorandose el resto de elementos que no tienen una correlación directa con los elementos de la otra secuencia." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[6, 14, 24, 36, 50]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n", + "b = [6, 7, 8, 9, 10]\n", + "\n", + "list( map(lambda x,y : x*y, a,b) )" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -182,10 +219,8 @@ }, { "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": true - }, + "execution_count": 10, + "metadata": {}, "outputs": [], "source": [ "class Persona:\n", @@ -216,9 +251,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -246,15 +279,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Claro que en este caso tenemos que utilizar una función definida porque no necesitamos actuar sobre la instancia, a no ser que nos tomemos la molestia de rehacer todo el objeto:" + "Si queremos usar una función **lambda** con un objeto, no se puede indicar como valor de retorno (**persona.edad += 1**) una expresión que modifica un campo del objeto:\n", + "```python\n", + "lambda persona: persona.edad += 1\n", + "```\n", + "Por lo tanto, será necesario indicar como valor de retorno un nuevo objeto de clase **Persona** con la información que deseamos modificar." ] }, { "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -275,7 +310,7 @@ " Persona(\"Eduardo\", 12)\n", "]\n", "\n", - "personas = map(lambda p: Persona(p.nombre, p.edad+1), personas)\n", + "personas = map(lambda persona: Persona(persona.nombre, persona.edad+1), personas)\n", "\n", "for persona in personas:\n", " print(persona)" @@ -292,7 +327,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -306,9 +341,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 08 (Apuntes) - Expresiones regulares.ipynb" b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 08 (Apuntes) - Expresiones regulares.ipynb similarity index 87% rename from "Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 08 (Apuntes) - Expresiones regulares.ipynb" rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 08 (Apuntes) - Expresiones regulares.ipynb index aa4a5e9..2f0828e 100644 --- "a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/Lecci\303\263n 08 (Apuntes) - Expresiones regulares.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/Leccion 08 (Apuntes) - Expresiones regulares.ipynb @@ -21,9 +21,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## Métodos básicos\n", "### re.search: buscar un patrón en otra cadena" @@ -31,18 +29,16 @@ }, { "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "<_sre.SRE_Match object; span=(40, 46), match='mágica'>" + "" ] }, - "execution_count": 42, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -66,10 +62,8 @@ }, { "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "re.search('hola', texto)" @@ -84,10 +78,8 @@ }, { "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, + "execution_count": 3, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -102,7 +94,7 @@ "\n", "encontrado = re.search(palabra, texto)\n", "\n", - "if encontrado:\n", + "if encontrado is not None:\n", " print(\"Se ha encontrado la palabra:\", palabra)\n", "else:\n", " print(\"No se ha encontrado la palabra:\", palabra)" @@ -117,10 +109,8 @@ }, { "cell_type": "code", - "execution_count": 57, - "metadata": { - "collapsed": false - }, + "execution_count": 4, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -156,17 +146,18 @@ }, { "cell_type": "code", - "execution_count": 273, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "<_sre.SRE_Match object; span=(0, 4), match='Hola'>\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -176,10 +167,8 @@ }, { "cell_type": "code", - "execution_count": 275, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [], "source": [ "texto = \"Hola mundo\"\n", @@ -195,10 +184,8 @@ }, { "cell_type": "code", - "execution_count": 52, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ { "data": { @@ -206,7 +193,7 @@ "['Vamos', 'a', 'dividir', 'esta', 'cadena']" ] }, - "execution_count": 52, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -225,10 +212,8 @@ }, { "cell_type": "code", - "execution_count": 228, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { @@ -236,7 +221,7 @@ "'Hola amiga'" ] }, - "execution_count": 228, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -255,10 +240,8 @@ }, { "cell_type": "code", - "execution_count": 287, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { @@ -266,7 +249,7 @@ "['hola', 'hola', 'hola']" ] }, - "execution_count": 287, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -285,10 +268,8 @@ }, { "cell_type": "code", - "execution_count": 288, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { @@ -296,7 +277,7 @@ "3" ] }, - "execution_count": 288, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -315,10 +296,8 @@ }, { "cell_type": "code", - "execution_count": 290, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { @@ -326,7 +305,7 @@ "['hola', 'hello']" ] }, - "execution_count": 290, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -346,10 +325,8 @@ }, { "cell_type": "code", - "execution_count": 119, - "metadata": { - "collapsed": true - }, + "execution_count": 12, + "metadata": {}, "outputs": [], "source": [ "texto = \"hla hola hoola hooola hooooola\"" @@ -364,10 +341,8 @@ }, { "cell_type": "code", - "execution_count": 121, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -398,10 +373,8 @@ }, { "cell_type": "code", - "execution_count": 125, - "metadata": { - "collapsed": false - }, + "execution_count": 14, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -429,10 +402,8 @@ }, { "cell_type": "code", - "execution_count": 127, - "metadata": { - "collapsed": false - }, + "execution_count": 15, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -458,10 +429,8 @@ }, { "cell_type": "code", - "execution_count": 128, - "metadata": { - "collapsed": false - }, + "execution_count": 16, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -489,10 +458,8 @@ }, { "cell_type": "code", - "execution_count": 129, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -519,10 +486,8 @@ }, { "cell_type": "code", - "execution_count": 130, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -549,9 +514,9 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 19, "metadata": { - "collapsed": false + "scrolled": true }, "outputs": [ { @@ -580,10 +545,8 @@ }, { "cell_type": "code", - "execution_count": 142, - "metadata": { - "collapsed": false - }, + "execution_count": 20, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -612,15 +575,14 @@ }, { "cell_type": "code", - "execution_count": 216, - "metadata": { - "collapsed": false - }, + "execution_count": 24, + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "['hola']\n", "['hola']\n", "['hala', 'hela', 'hila', 'hula']\n" ] @@ -629,15 +591,13 @@ "source": [ "texto = \"hala hela hila hola hula\"\n", "\n", - "patrones = ['h[o]la', 'h[^o]la'] \n", + "patrones = ['h[o]la','ho{1}la', 'h[^o]la'] \n", "buscar(patrones, texto)" ] }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "Si excluimos una expresión regular con un grupo excluido, en realidad tenemos lo mismo:" ] @@ -660,10 +620,8 @@ }, { "cell_type": "code", - "execution_count": 223, - "metadata": { - "collapsed": false - }, + "execution_count": 22, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -706,14 +664,13 @@ "|\\w|alfanumérico|\n", "|\\W|no alfanumérico|\n", "\n", - "El problema que encontraremos en Python a la hora de definir código escapado, es que las cadenas no tienen en cuenta el \\ a no ser que especifiquemos que son cadenas en crudo (raw), **por lo que tendremos que precedir las expresiones regulares con una 'r'**." + "El problema que encontraremos en Python a la hora de definir código escapado, es que las cadenas no tienen en cuenta el \\ a no ser que especifiquemos que son cadenas en crudo (raw), **por lo que tendremos que preceder las expresiones regulares con una 'r'**." ] }, { "cell_type": "code", - "execution_count": 270, + "execution_count": 30, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -721,10 +678,14 @@ "name": "stdout", "output_type": "stream", "text": [ + "['2', '0', '1', '6']\n", "['2016']\n", + "['E', 's', 't', 'e', ' ', 'c', 'u', 'r', 's', 'o', ' ', 'd', 'e', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', 's', 'e', ' ', 'p', 'u', 'b', 'l', 'i', 'c', 'ó', ' ', 'e', 'n', ' ', 'e', 'l', ' ', 'a', 'ñ', 'o', ' ']\n", "['Este curso de Python se publicó en el año ']\n", "[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']\n", + "['E', 's', 't', 'e', 'c', 'u', 'r', 's', 'o', 'd', 'e', 'P', 'y', 't', 'h', 'o', 'n', 's', 'e', 'p', 'u', 'b', 'l', 'i', 'c', 'ó', 'e', 'n', 'e', 'l', 'a', 'ñ', 'o', '2', '0', '1', '6']\n", "['Este', 'curso', 'de', 'Python', 'se', 'publicó', 'en', 'el', 'año', '2016']\n", + "['E', 's', 't', 'e', 'c', 'u', 'r', 's', 'o', 'd', 'e', 'P', 'y', 't', 'h', 'o', 'n', 's', 'e', 'p', 'u', 'b', 'l', 'i', 'c', 'ó', 'e', 'n', 'e', 'l', 'a', 'ñ', 'o', '2', '0', '1', '6']\n", "['Este', 'curso', 'de', 'Python', 'se', 'publicó', 'en', 'el', 'año', '2016']\n", "[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']\n" ] @@ -733,7 +694,7 @@ "source": [ "texto = \"Este curso de Python se publicó en el año 2016\"\n", "\n", - "patrones = [r'\\d+', r'\\D+', r'\\s', r'\\S+', r'\\w+', r'\\W+'] \n", + "patrones = [r'\\d', r'\\d+',r'\\D', r'\\D+', r'\\s', r'\\S', r'\\S+', r'\\w', r'\\w+', r'\\W+'] \n", "buscar(patrones, texto)" ] }, @@ -765,7 +726,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -779,9 +740,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/img/figura_1.png b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/img/figura_1.png similarity index 100% rename from Fase 4 - Temas avanzados/Tema 15 - Funcionalidades Avanzadas/img/figura_1.png rename to Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Apuntes/img/figura_1.png diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 01 - Operadores encadenados.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 01 - Operadores encadenados.ipynb new file mode 100644 index 0000000..3f7eb58 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 01 - Operadores encadenados.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Operadores encadenados" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 03 - Funciones decoradoras.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 03 - Funciones decoradoras.ipynb new file mode 100644 index 0000000..0db2c27 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 03 - Funciones decoradoras.ipynb @@ -0,0 +1,49 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Ámbitos y funciones decoradoras" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### NOTA: Antes de realizar esta lección debes reiniciar Jupyter Notebook para vaciar la memoria." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 04 - Funciones generadoras e iteradores.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 04 - Funciones generadoras e iteradores.ipynb new file mode 100644 index 0000000..8e57dc4 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 04 - Funciones generadoras e iteradores.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Funciones generadoras" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 05 - Funciones lambda.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 05 - Funciones lambda.ipynb new file mode 100644 index 0000000..83b124a --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 05 - Funciones lambda.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Funciones Lambda" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 06 - Funcion filter.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 06 - Funcion filter.ipynb new file mode 100644 index 0000000..c93af65 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 06 - Funcion filter.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Función filter()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 07 - Funcion map.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 07 - Funcion map.ipynb new file mode 100644 index 0000000..389b57b --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 07 - Funcion map.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Función map()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 08 - Expresiones regulares.ipynb b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 08 - Expresiones regulares.ipynb new file mode 100644 index 0000000..42e599b --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 15 - Funcionalidades avanzadas/Leccion 08 - Expresiones regulares.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Expresiones regulares" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 01 (Apuntes) - Docstrings.ipynb" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 01 (Apuntes) - Docstrings.ipynb similarity index 98% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 01 (Apuntes) - Docstrings.ipynb" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 01 (Apuntes) - Docstrings.ipynb index 6dc5b34..0937925 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 01 (Apuntes) - Docstrings.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 01 (Apuntes) - Docstrings.ipynb @@ -39,9 +39,7 @@ { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -65,9 +63,7 @@ { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -115,7 +111,6 @@ "cell_type": "code", "execution_count": 29, "metadata": { - "collapsed": false, "scrolled": true }, "outputs": [ @@ -190,9 +185,7 @@ { "cell_type": "code", "execution_count": 9, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -226,9 +219,7 @@ { "cell_type": "code", "execution_count": 12, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -256,9 +247,7 @@ { "cell_type": "code", "execution_count": 14, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -294,9 +283,7 @@ { "cell_type": "code", "execution_count": 18, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -316,9 +303,7 @@ { "cell_type": "code", "execution_count": 19, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -338,9 +323,7 @@ { "cell_type": "code", "execution_count": 20, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { @@ -363,7 +346,7 @@ "source": [ "## Docstrings en paquetes\n", "En el caso de los paquetes el docstring debemos establecerlo en la primera línea del inicializador **init**:\n", - "#### ______init______.py\n", + "#### \\_\\_init\\_\\_.py\n", "```python\n", "\"\"\" Este es el docstring de mi_paquete \"\"\"\n", "```" @@ -383,9 +366,7 @@ { "cell_type": "code", "execution_count": 22, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -422,9 +403,7 @@ { "cell_type": "code", "execution_count": 32, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -452,9 +431,7 @@ { "cell_type": "code", "execution_count": 34, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -475,9 +452,7 @@ { "cell_type": "code", "execution_count": 35, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -881,9 +856,7 @@ { "cell_type": "code", "execution_count": 36, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1534,9 +1507,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" } }, "nbformat": 4, diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 02 (Apuntes) - Pydoc.ipynb" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 02 (Apuntes) - Pydoc.ipynb similarity index 97% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 02 (Apuntes) - Pydoc.ipynb" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 02 (Apuntes) - Pydoc.ipynb index 17e21f3..3e983a3 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 02 (Apuntes) - Pydoc.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 02 (Apuntes) - Pydoc.ipynb @@ -56,7 +56,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -70,7 +70,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 03 (Apuntes) - Doctest.ipynb" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 03 (Apuntes) - Doctest.ipynb similarity index 98% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 03 (Apuntes) - Doctest.ipynb" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 03 (Apuntes) - Doctest.ipynb index 56487ca..caa7d1c 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 03 (Apuntes) - Doctest.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 03 (Apuntes) - Doctest.ipynb @@ -102,7 +102,7 @@ "\n", "Para ejecutar pruebas tendremos que utilizar la terminal, así vamos a guardar la función en un script **test.py** como si fuera un módulo con funciones.\n", "\n", - "Ahora justo al final indicaremos que se ejecten las pruebas doctest de las funciones del módulo escribiendo el siguiente código abajo del todo:\n", + "Ahora justo al final indicaremos que se ejecuten las pruebas doctest de las funciones del módulo escribiendo el siguiente código abajo del todo:\n", "\n", "```python\n", "import doctest\n", @@ -395,9 +395,7 @@ { "cell_type": "code", "execution_count": 26, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "def doblar(lista):\n", @@ -707,7 +705,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -721,7 +719,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 04 (Apuntes) - Unittest.ipynb" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 04 (Apuntes) - Unittest.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 04 (Apuntes) - Unittest.ipynb" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 04 (Apuntes) - Unittest.ipynb index 63a0bc5..c3e3a6c 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/Lecci\303\263n 04 (Apuntes) - Unittest.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/Leccion 04 (Apuntes) - Unittest.ipynb @@ -287,7 +287,7 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -301,7 +301,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.2" + "version": "3.7.4" } }, "nbformat": 4, diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/img/errores.PNG" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/img/errores.png similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/img/errores.PNG" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/img/errores.png diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_modulo.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_modulo.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_modulo.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_modulo.py diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/__init__.py diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/__pycache__/__init__.cpython-35.pyc" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/__pycache__/__init__.cpython-35.pyc similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/__pycache__/__init__.cpython-35.pyc" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/__pycache__/__init__.cpython-35.pyc diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/adios/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/adios/__init__.py diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/adios/despedidas.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/adios/despedidas.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/adios/despedidas.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/adios/despedidas.py index a6bae2d..af90350 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/adios/despedidas.py" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/adios/despedidas.py @@ -1,5 +1,5 @@ -class Despedida(): - - def __init__(self): - +class Despedida(): + + def __init__(self): + print("Adiós, me estoy despidiendo desde el __init__ de la clase Despedida") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/hola/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/adios/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/hola/__init__.py diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/hola/saludos.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/hola/saludos.py similarity index 96% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/hola/saludos.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/hola/saludos.py index 0daa0d2..32a283b 100644 --- "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/hola/saludos.py" +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_paquete/hola/saludos.py @@ -1,5 +1,5 @@ -class Saludo(): - - def __init__(self): - +class Saludo(): + + def __init__(self): + print("Hola, te estoy saludando desde el __init__ de la clase Saludo") \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_script.py b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_script.py new file mode 100644 index 0000000..5054d45 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Apuntes/mi_script.py @@ -0,0 +1,13 @@ +def suma(a, b): + """Esta función recibe dos parámetros y devuelve la suma de ambos + + >>> suma(5,10) + 15 + """ + return a+b + +if __name__ == "__main__": # Cuando se llama al script + import doctest + doctest.testmod() + +print(__name__) \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Leccion 01 - Docstrings.ipynb b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Leccion 01 - Docstrings.ipynb new file mode 100644 index 0000000..81837bf --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/Leccion 01 - Docstrings.ipynb @@ -0,0 +1,42 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Docstrings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_modulo.py b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_modulo.py new file mode 100644 index 0000000..0d4621e --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_modulo.py @@ -0,0 +1,5 @@ +def despedir(): + print("Adiós! Me estoy despidiendo desde la función despedir() del módulo") + +def saludar(): + print("Hola! Te estoy saludando desde la función saludar() del módulo") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 11 - M\303\263dulos/Lecci\303\263n 02 (Apuntes) - Paquetes/paquete/hola/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/__init__.py diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/__pycache__/__init__.cpython-35.pyc b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000..54cba0f Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/__pycache__/__init__.cpython-35.pyc differ diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/adios/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/adios/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__init__.py diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/__init__.cpython-35.pyc b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000..6b3c62c Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/__init__.cpython-35.pyc differ diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/despedidas.cpython-35.pyc b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/despedidas.cpython-35.pyc new file mode 100644 index 0000000..4650ba4 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/__pycache__/despedidas.cpython-35.pyc differ diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/despedidas.py b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/despedidas.py new file mode 100644 index 0000000..af90350 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/adios/despedidas.py @@ -0,0 +1,5 @@ +class Despedida(): + + def __init__(self): + + print("Adiós, me estoy despidiendo desde el __init__ de la clase Despedida") \ No newline at end of file diff --git "a/Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/hola/__init__.py" b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__init__.py similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 16 - Documentaci\303\263n y Pruebas/mi_paquete/hola/__init__.py" rename to Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__init__.py diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/__init__.cpython-35.pyc b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000..ebce291 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/__init__.cpython-35.pyc differ diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/saludos.cpython-35.pyc b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/saludos.cpython-35.pyc new file mode 100644 index 0000000..5536591 Binary files /dev/null and b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/__pycache__/saludos.cpython-35.pyc differ diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/saludos.py b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/saludos.py new file mode 100644 index 0000000..32a283b --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/mi_paquete/hola/saludos.py @@ -0,0 +1,5 @@ +class Saludo(): + + def __init__(self): + + print("Hola, te estoy saludando desde el __init__ de la clase Saludo") \ No newline at end of file diff --git a/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/python - __name__ == __main__.html b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/python - __name__ == __main__.html new file mode 100644 index 0000000..59ca04c --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 16 - Documentacion y pruebas/python - __name__ == __main__.html @@ -0,0 +1,35148 @@ +From: +Snapshot-Content-Location: https://stackoverflow.com/questions/419163/what-does-if-name-main-do +Subject: =?utf-8?Q?python=20-=20=C2=BFQu=C3=A9=20hace=20si=20__name__=20=3D=3D=20"?= + =?utf-8?Q?__main__":=20do?=20-=20Desbordamiento=20de=20pila?= +Date: Wed, 29 Jan 2020 13:36:29 -0000 +MIME-Version: 1.0 +Content-Type: multipart/related; + type="text/html"; + boundary="----MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR----" + + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/html +Content-ID: +Content-Transfer-Encoding: quoted-printable +Content-Location: https://stackoverflow.com/questions/419163/what-does-if-name-main-do + + + + python - =C2=BFQu=C3=A9 hace si __name__ =3D=3D "__main__": = +do? - Desbordamiento de pila + + + =20 + + + + + + + + + + + + + =20 + =20 + =20 + + + + =20 + + + + + + + + + + + + =20 + + =20 + =20 + =20 + =20 + =20 + =20 + =20 + + + =20 + =20 + + +
+
+ + + + +
+ +
+ =20 + + =20 + + + + + + +
+ + + + + + +
+ + + +
+
+ +
+

Equipos

+

Preguntas y r= +espuestas para el trabajo

+

+ =20 + Stack Overflow for Teams es un lugar privado y = +seguro para que usted y sus compa=C3=B1eros de trabajo encuentren y compart= +an informaci=C3=B3n. + =20 +

+ + Aprende m=C3=A1s + +
+ +
+ <= +path d=3D"M31 2l6-1.5 7 2V38H14.9L5 45v-7H1V6h25l5-4z" fill=3D"#fff"> +
+
+ +
+ + +
+ + + =20 + + +
+ + +
+ + =20 + + +
+
+ Pregunt=C3=B3 + +
+
+ Activo hace= + + 1 mes +
+
+ Visto=20 + 2,7 millones de veces +
+
+
+ + =20 + +
+ + =20 +
+
+
+ =20 + +
+ +
571= +6
+ + + + =20 + + =20 + = + + +
+ +
+ + =20 + + +
+ =20 +
+ +

=C2=BFQu=C3=A9 hace el if __name__ =3D=3D "__= +main__":?

+ +
# Threading example
+import time, thread
+
+def myfunction=
+(string, sleeptime, lock, *args):
+    while True:
+        lock.acquire<=
+/span>()
+        time.sleep(sleeptime)
+        lock.release<=
+/span>()
+        time.sleep(sleeptime)
+
+if __name__ =3D=3D "__main__":
+    lock =3D thread.allocate_lock()
+    thread.start_new_=
+thread(myfunction, ("Thread #: 1", 2, lock))=
+
+    thread.start_new_=
+thread(myfunction, ("Thread #: 2", 2, lock))=
+
+
+ + + +
+
+
+ + +
+
+ +
+
+
+
+ RAM<= +/font> +
+ 9411 1 insignia de oro6 6 insignias de plata20 20 insignias de bronce +
+
+
+
+
+
+ pregunt=C3=B3 el 7 de enero de 2009 a las 4:11 +
+
+
3D""
+
+
+ De= +votoDevo= +to +
+ 78,2k39 39 insignias de oro80 80 insignias de plata109<= +font style=3D"vertical-align: inherit;"> 109 insignias de bronce +
+
+
+ +
+
+
+ =20 +
+ + +
+
+
    + +
+
+ + =20 +
+
+ + +
+
+ + +
+
+

+ 29 respuestas + 29 +

+
+
+
+ + + + + =20 + +
+
+
+ =20 + +
+ + + =20 +
+ +
+ + =20 + = + + +
+ +
+ + =20 + + +
+ =20 +
+

Cada vez que el int=C3=A9rprete de Python lee un archivo = +fuente, hace dos cosas:

+ +
    +
  • establece algunas variables especiales como __name__, y luego

  • +
  • ejecuta todo el c=C3=B3digo encontrado en el archivo.<= +/font>

  • +
+ +

Veamos c=C3=B3mo funciona esto y c=C3=B3mo se relaciona con su pr= +egunta sobre las __name__comprobaciones q= +ue siempre vemos en los scripts de Python.

+ +

Muestra de c=C3=B3digo

+ +

Usemos una muestra de c=C3=B3digo ligeramente diferente para expl= +orar c=C3=B3mo funcionan las importaciones y los scripts. Supongamos que lo siguiente est=C3=A1 en un = +archivo llamado foo.py.

+ +
# Suppose this is foo.py.
+
+print("before import")
+import math
+
+print("before functionA")
+def functionA<=
+span class=3D"pun">():
+    print("Function A")
+
+print("before functionB")
+def functionB<=
+span class=3D"pun">():
+    print("Function B {}".format(mat=
+h.sqrt(100)))
+
+print("before __name__ guard")
+if __name__ =3D=3D '__main__':
+    functionA()
+    functionB()
+print("after __name__ guard")
+ +

Variables especiales

+ +

Cuando el int=C3=A9rprete de Python lee un archivo fuente, primer= +o define algunas variables especiales. En este caso, nos importa la __name__variable.

+ +

Cuando su m=C3=B3dulo es el programa principal

+ +

Si est=C3=A1 ejecutando su m=C3=B3dulo (el archivo fuente) como e= +l programa principal, p. Ej.

+ +
python foo.py
+ +

el int=C3=A9rprete asignar=C3=A1 la cadena codificada "__main__"a la __name__variable, es decir

+ +
# It's as if the interpreter inserts this at the top
+# of your module when run as the main program.
+__name__ =3D <=
+span class=3D"str">"__main__" 
+
+

Cuando su m=C3=B3dulo es importado por otro= +

+ +

Por otro lado, supongamos que otro m=C3=B3dulo es el programa pri= +ncipal e importa su m=C3=B3dulo. Esto significa que hay una declaraci=C3=B3n como esta en el programa = +principal, o en alg=C3=BAn otro m=C3=B3dulo que importa el programa princip= +al:

+ +
# Suppose this is in some other main program.
+import foo
+ +

En este caso, el int=C3=A9rprete mirar=C3=A1 el nombre de archivo= + de su m=C3=B3dulo, foo.pyeliminar=C3=A1 = +.pyy asignar=C3=A1 esa cadena a la __name__variable de su m=C3=B3dulo , es decir

+ +
# It's as if the interpreter inserts this at the top
+# of your module when it's imported from another=
+ module.
+__name__ =3D <=
+span class=3D"str">"foo"
+ +

Ejecutando el C=C3=B3digo del M=C3=B3dulo

+ +

Despu=C3=A9s de configurar las variables especiales, el int=C3=A9= +rprete ejecuta todo el c=C3=B3digo del m=C3=B3dulo, una declaraci=C3=B3n a = +la vez. Es posible que dese= +e abrir otra ventana en el lado con el ejemplo de c=C3=B3digo para que pued= +a seguir esta explicaci=C3=B3n.

+ +

Siempre

+ +
    +
  1. Imprime la cadena "before import"<= +font style=3D"vertical-align: inherit;">(sin comillas).

  2. +
  3. Carga el mathm=C3=B3dulo y = +lo asigna a una variable llamada math. Esto es equivalente a reempla= +zar import mathcon lo siguiente (tenga en= + cuenta que __import__es una funci=C3=B3n= + de bajo nivel en Python que toma una cadena y desencadena la importaci=C3= +=B3n real):

  4. +
+ +
# Find and load a module given its string name, "math",
+# then assign it to a local variable called math=
+.
+math =3D __import__("math")
+ +
    +
  1. Imprime la cuerda "before functionA".

  2. +
  3. Ejecuta el defbloque, crea = +un objeto de funci=C3=B3n y luego asigna ese objeto de funci=C3=B3n a una v= +ariable llamada functionA.<= +/p>

  4. +
  5. Imprime la cuerda "before functionB".

  6. +
  7. Ejecuta el segundo defbloq= +ue, crea otro objeto de funci=C3=B3n y luego lo asigna a una variable llama= +da functionB.

  8. +
  9. Imprime la cuerda "before __name__ guard"= +.

  10. +
+ +

Solo cuando su m=C3=B3dulo es el programa principal

+ +
    +
  1. Si su m=C3=B3dulo es el programa principal, ver=C3=A1 que __name__efectivamente se configur=C3=B3 en "__main__"<= +font style=3D"vertical-align: inherit;">y llama a las dos funciones, imprim= +e las cadenas "Function A"y "Function B 10.0".
  2. +
+ +

Solo cuando su m=C3=B3dulo es importado por otro

+ +
    +
  1. (en cambio ) Si su m=C3=B3dulo no es el programa principal pero fue importado po= +r otro, entonces __name__lo ser=C3=A1 "foo", no "__main__", y omitir=C3=A1 el cuerpo de la ifdeclaraci=C3=B3n.
  2. +
+ +

Siempre

+ +
    +
  1. Imprimir=C3=A1 la cadena "after __name__ gua= +rd"en ambas situaciones.
  2. +
+ +

Resumen

+ +

En resumen, esto es lo que se imprimir=C3=ADa en los dos casos:

+ +
# What gets printed if foo is the main program
+before import
+before functionA
+before functionB
+before __name__ guard
+Function A
+Function B 10.0
+after __name__ guard
+ +
# What gets printed if foo is imported as a regular module
+before import
+before functionA
+before functionB
+before __name__ guard
+after __name__ guard
+ +

=C2=BFPor qu=C3=A9 funciona de esta manera?

+ +

Naturalmente, podr=C3=ADa preguntarse por qu=C3=A9 alguien querr= +=C3=ADa esto. Bueno, a vece= +s desea escribir un .pyarchivo que pueda = +ser utilizado por otros programas y / o m=C3=B3dulos como un m=C3=B3dulo, y= + que tambi=C3=A9n pueda ejecutarse como el programa principal en s=C3=AD. <= +/font>Ejemplos:

+ +
    +
  • Su m=C3=B3dulo es una biblioteca, pero desea tener un modo de= + script donde ejecute algunas pruebas unitarias o una demostraci=C3=B3n.

  • +
  • Su m=C3=B3dulo solo se usa como programa principal, pero tien= +e algunas pruebas unitarias, y el marco de prueba funciona importando .pyarchivos como su script y ejecutando funcio= +nes de prueba especiales. N= +o desea que intente ejecutar el script solo porque est=C3=A1 importando el = +m=C3=B3dulo.

  • +
  • Su m=C3=B3dulo se utiliza principalmente como programa princi= +pal, pero tambi=C3=A9n proporciona una API f=C3=A1cil de usar para programa= +dores para usuarios avanzados.

  • +
+ +

M=C3=A1s all=C3=A1 de esos ejemplos, es elegante que ejecutar un = +script en Python solo est=C3=A9 configurando algunas variables m=C3=A1gicas= + e importando el script. "E= +jecutar" el script es un efecto secundario de importar el m=C3=B3dulo del s= +cript.

+ +

Comida para el pensamiento

+ +
    +
  • Pregunta: =C2=BFPuedo tener m=C3=BAltiples __name__bloques de verificaci=C3=B3n? Respuesta: es extra=C3=B1o hacerlo, pero el leng= +uaje no te detendr=C3=A1.

  • +
  • Supongamos que lo siguiente est=C3=A1 adentro <= +code>foo2.py. =C2=BFQu=C3=A9 pasa si dices python foo2.pyen la l=C3=ADnea de comandos? =C2=BFPor qu=C3=A9?

  • +
+ +
# Suppose this is foo2.py.
+
+def functionA<=
+span class=3D"pun">():
+    print("a1")
+    from foo2 =
+import functionB
+    print("a2")
+    functionB()
+    print("a3")
+
+def functionB<=
+span class=3D"pun">():
+    print("b")
+
+print("t1")
+if __name__ =3D=3D "__main__":
+    print("m1")
+    functionA()
+    print("m2")
+print("t2")
+ +
    +
  • Ahora, descubra qu=C3=A9 suceder=C3=A1 si elimina el __name__check in foo3.py<= +font style=3D"vertical-align: inherit;">:
  • +
+ +
# Suppose this is foo3.py.
+
+def functionA<=
+span class=3D"pun">():
+    print("a1")
+    from foo3 =
+import functionB
+    print("a2")
+    functionB()
+    print("a3")
+
+def functionB<=
+span class=3D"pun">():
+    print("b")
+
+print("t1")
+print("m1")
+functionA()
+print("m2")
+print("t2")
+ +
    +
  • =C2=BFQu=C3=A9 har=C3=A1 esto cuando se use como script? = +Cuando se importa como un m=C3=B3d= +ulo?
  • +
+ +
# Suppose this is in foo4.py
+__name__ =3D <=
+span class=3D"str">"__main__"
+
+def bar():
+    print("bar")
+
+print("before __name__ guard")
+if __name__ =3D=3D "__main__":
+    bar()
+print("after __name__ guard")
+
+
+
+ + + + + +
+
+
+ respondi=C3=B3 Jan 7 '09 a las 4:26 +
+
+
3D""
+
+
+ Se= +=C3=B1or foozSe=C3=B1or fooz +
+ 81,3k4 4 insignias de oro= +62 62 insignias de plata94 94 insignias de bronce +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    + 8 +
    +
    +
    +
    + =20 + Por curiosidad: =C2=BFq= +u=C3=A9 sucede si ejecuto subprocess.run('foo_bar.py')<= +/code>un script de Python? Supongo que foo_bareso se iniciar= +=C3=A1 __name__ =3D '__main__'al igual qu= +e cuando escribo foo_bar.pycmd manualment= +e. =C2=BFEs ese el caso? Teniendo en cuenta la respues= +ta de @MrFooz, no deber=C3=ADa haber ning=C3=BAn problema para hacer esto y= + tener tantos m=C3=B3dulos "principales" a la vez como quiera. Incluso cambiar el = +__name__valor o tener varias instancias creadas de forma inde= +pendiente (o instancias que se crearon entre s=C3=AD su= +bprocess) interact=C3=BAan entre s=C3=AD, deber=C3=ADa ser lo= + habitual para Python. =C2= +=BFEcho de menos algo? + =20 + -  hajef + 18 de febrero de 19 a 16:09= + + + + +
    +
    +
  • +
  • +
    +
    + 8 +
    +
    +
    +
    + =20 + @hajef Tienes raz=C3=B3= +n sobre c=C3=B3mo funcionar=C3=ADan las cosas subproces= +s.run. Dicho = +esto, una forma generalmente mejor de compartir c=C3=B3digo entre scripts e= +s crear m=C3=B3dulos y hacer que los scripts llamen a los m=C3=B3dulos comp= +artidos en lugar de invocarse entre ellos como scripts. Es dif=C3=ADcil depurar s= +ubprocess.runllamadas ya que la mayor=C3=ADa de los depurador= +es no saltan los l=C3=ADmites del proceso, puede agregar una sobrecarga del= + sistema no trivial para crear y destruir los procesos adicionales, etc.=20 + =20 + -  Sr. Fooz + 19 de febrero de 19 a 16:16= + +
    +
    +
  • +
  • +
    +
    + 3 +
    +
    +
    +
    + =20 + Tengo una duda en el ej= +emplo de foo2.py en la secci=C3=B3n de alimentos para el pensamiento. =C2= +=BFQu=C3=A9 hace la funci=C3=B3n de importaci=C3=B3n de foo2.py B? <= +font style=3D"vertical-align: inherit;">En mi opini=C3=B3n, solo importa fo= +o2.py desde la funci=C3=B3n B + =20 + =20 + -  user471651 24 de febrero de 19 a 13:47 +
    +
    +
  • +
  • +
    +
    +
    +
    +
    +
    + =20 + @MrFooz Nunca tuve la i= +ntenci=C3=B3n de hacer algo como esto xD Simplemente me vino a la mente y m= +e di cuenta de que era lo suficientemente extra=C3=B1o como para ayudar a l= +a gente. envolviendo sus me= +ntes alrededor de este tipo de cosas. @ user471651 =C2=BFPor qu=C3=A9 deber=C3=ADa from foo2 import functionB= +importar foo2 desde la funci=C3=B3= +n B ? = +Esa es una contorsi=C3=B3n sem=C3=A1ntica. from module = +import methodimporta el m=C3=A9todo desde el m=C3=B3dulo. + =20 + -  hajef + 25 de febrero de 19 a 15:51= + +
    +
    +
  • +
  • +
    +
    + 1 +
    +
    +
    +
    + =20 + Uno de los m=C3=B3dulos= + que pueden importar su c=C3=B3digo es multiprocessing<= +/code>, en particular, hacer que esta prueba sea necesaria en Window= +s. + =20 + -  Yann Vernier + 17 de septiembre de 19 a 15:51 +
    +
    +
  • +
+
+ + =20 +
+
+
+ =20 + +
+
+
+ =20 + +
+ + + =20 +
+ +
+ + =20 + = + + +
+ +
+ + =20 + + +
+ =20 +
+

Cuando su script se ejecuta pas=C3=A1ndolo como un comand= +o al int=C3=A9rprete de Python,

+ +
python myscript.py
+ +

todo el c=C3=B3digo que est=C3=A1 en el nivel de sangr=C3=ADa 0 s= +e ejecuta. Las funciones y = +clases que est=C3=A1n definidas est=C3=A1n bien definidas, pero ninguno de = +sus c=C3=B3digos se ejecuta. A diferencia de otros lenguajes, no hay una main()funci=C3=B3n que se ejecute autom=C3=A1ticamente: la main()funci=C3=B3n es impl=C3=ADcitamente todo el c= +=C3=B3digo en el nivel superior.

+ +

En este caso, el c=C3=B3digo de nivel superior es un ifbloque. __name__= +es una variable incorporada que eval=C3=BAa el nombre del m=C3=B3dulo actua= +l. Sin embargo, si un m=C3= +=B3dulo se est=C3=A1 ejecutando directamente (como en el myscript.pyanterior), entonces __name__= +se establece en la cadena "__main__". Por lo tanto, pu= +ede probar si su script se est=C3=A1 ejecutando directamente o si est=C3=A1= + siendo importado por otra cosa probando

+ +
if __name__ =3D=3D "__main__":
+    ...
+ +

Si su script se est=C3=A1 importando a otro m=C3=B3dulo, se impor= +tar=C3=A1n sus diversas funciones y definiciones de clase y se ejecutar=C3= +=A1 su c=C3=B3digo de nivel superior, pero el c=C3=B3digo en el cuerpo de l= +a ifcl=C3=A1usula anterior no se ejecutar= +=C3=A1 ya que la condici=C3=B3n es no se cumplen. Como ejemplo b=C3=A1sico, considere los siguientes d= +os scripts:

+ +
# file one.py
+def func():
+    print("func() in one.py")
+
+print("top-level in one.py")
+
+if __name__ =3D=3D "__main__":
+    print("one.py is being run directly")<=
+/span>
+else:
+    print("one.py is being imported into another module")
+ + + +
# file two.py
+import one
+
+print("top-level in two.py")
+one.func()
+
+if __name__ =3D=3D "__main__":
+    print("two.py is being run directly")<=
+/span>
+else:
+    print("two.py is being imported into another module")
+ +

Ahora, si invoca al int=C3=A9rprete como

+ +
python one.py
+ +

La salida ser=C3=A1

+ +
top-level =
+in one.py
+one.py is being run directly=
+
+ +

Si corres en su two.pylugar:

+ +
python two.py
+ +

Usted obtiene

+ +
top-level =
+in one.py
+one.py is being imported into another modu=
+le
+top-level in two.py
+func() in one.<=
+/span>py
+two.py is being run directly=
+
+ +

Por lo tanto, cuando el m=C3=B3dulo onese carga, es __name__igual en "one"lugar de "__main__"= +.

+
+
+
+ +
+
+ +
+
3D"" +
+
+ Tonechas +
+ 8,7339 9 insignias de oro29 29 insignias de plata57 57 insignias de bronce +
+
+
+ + + +
+
+
+ respondi=C3=B3 Jan 7 '09 a las 4:28 +
+
+ +=3D""
+
+
+ Adam RosenfieldAdam Rosenfield +
+ 332k8787 go= +ld badges463= +463 silver badges558558 bron= +ze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ + + =20 +
+ +
+ + =20 + = + + +
+ +
+ + =20 + + +
+ =20 +
+

The simplest explanation for the __name__ variable = +(imho) is the following:

+ +

Create the following files.

+ +
# a.py
+import b
+ +

and

+ +
# b.py
+print "Hello World from %s!" % __name__
+
+if __name__ =3D=3D '__main__':
+    print "Hello World again from %s!" % __name__=
+
+ +

Running them will get you this output:

+ +
$ python a.py
+Hello World fro=
+m b!
+
+

As you can see, when a module is imported, Python sets globals()['= +__name__'] in this module to the module's name. Also, upon import al= +l the code in the module is being run. As the if statement eva= +luates to False this part is not executed.

+ +
$ python b.py
+Hello World fro=
+m __main__!
+Hello World again from __main__!
+ +

As you can see, when a file is executed, Python sets globals()['__= +name__'] in this file to "__main__". This time, the if statement evaluates to True and is being run.

+
+
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ + + =20 +
+ +
+ + =20 + + +
+ +
+ + =20 + + +
+ =20 +
+
+

What does the if __name__ =3D=3D "__main__": do?

+
+ +

To outline the basics:

+ +
    +
  • The global variable, __name__, in the module that is th= +e entry point to your program, is '__main__'. Otherwise, it's = +the name you import the module by.

  • +
  • So, code under the if block will only run if the module= + is the entry point to your program.

  • +
  • It allows the code in the module to be importable by other modules, = +without executing the code block beneath on import.

  • +
+ +
+ +

Why do we need this?

+ +

Developing and Testing Your Code

+ +

Say you're writing a Python script designed to be used as a module:

+ +
def do_important():
+    """This function does something very importa=
+nt"""
+ +

You could test the module by adding this call of the function t= +o the bottom:

+ +
do_important()
+ +

and running it (on a command prompt) with something like:

+ +
~$ python important.py
+ +

The Problem

+ +

However, if you want to import the module to another script:

+ +
import important
+ +

On import, the do_important function would be called, so yo= +u'd probably comment out your function call, do_important(), a= +t the bottom.

+ +
# do_important() # I must remember to uncomment to execute this!=
+
+ +

And then you'll have to remember whether or not you've commented out you= +r test function call. And this extra complexity would mean you're likely to= + forget, making your development process more troublesome.

+ +

A Better Way

+ +

The __name__ variable points to the namespace wherever the = +Python interpreter happens to be at the moment.

+ +

Inside an imported module, it's the name of that module.

+ +

But inside the primary module (or an interactive Python session, i.e. th= +e interpreter's Read, Eval, Print Loop, or REPL) you are running everything= + from its "__main__".

+ +

So if you check before executing:

+ +
if __name__ =3D=3D "__main__":
+    do_important()
+ +

With the above, your code will only execute when you're running it as th= +e primary module (or intentionally call it from another script).

+ +

An Even Better Way

+ +

There's a Pythonic way to improve on this, though.

+ +

What if we want to run this business process from outside the module? + +

If we put the code we want to exercise as we develop and test in a funct= +ion like this and then do our check for '__main__' immediately= + after:

+ +
def main()=
+:
+    """business logic for when running this modu=
+le as the primary one!"""
+    setup()
+    foo =3D do_import=
+ant()
+    bar =3D do_even_m=
+ore_important(foo)
+    for baz in bar:
+        do_super_important(baz)
+    teardown()
+
+# Here's our payoff idiom!
+if __name__ =3D=3D '__main__':
+    main()
+ +

We now have a final function for the end of our module that will run if = +we run the module as the primary module.

+ +

It will allow the module and its functions and classes to be imported in= +to other scripts without running the main function, and will a= +lso allow the module (and its functions and classes) to be called when runn= +ing from a different '__main__' module, i.e.

+ +
import important
+important.main=
+()
+ +

This idiom can also be found in the Python documentation in an expla= +nation of the __main__ module. That text states:

+ +
+

This module represents the (otherwise anonymous) scope in which the + interpreter=E2=80=99s main program executes =E2=80=94 commands read eithe= +r from + standard input, from a script file, or from an interactive prompt. It + is this environment in which the idiomatic =E2=80=9Cconditional script=E2= +=80=9D stanza + causes a script to run:

+ +
if __name__ =3D=3D '__main__':
+    main()
+
+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Nov 23 '13 at 4:38 +
+
+ +
+ Aaron= + Hall=E2=99=A6Aaron Hall +
+ 225k6262 gold badges331331 silver badges= +286286 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ + + =20 +
+ +
+ + =20 + = + + +
+ +
+ + =20 + + +
+ =20 +
+

if __name__ =3D=3D "__main__" is the part that runs= + when the script is run from (say) the command line using a command like python myscript.py.

+
+
+
+ + + +
+
+
+ answered Jan 7 '09 at 4:14 +
+
+ +=3D""
+
+
+ Ha= +rley HolcombeHarley Hol= +combe +
+ 133k1515 gold badges6565 silver badg= +es6262 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    +
    +
    +
    +
    + =20 + Why does a file hellowor= +ld.py with just print("hello world") in it can run with= + command python helloworld.py even when there is no if _= +_name__ =3D=3D "__main__"? + =20 + =E2=80=93 hi15 + Aug 22 '19 at 16:39 + + + +
    +
    +
  • +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
78
+
+ +
+ + =20 + + +
+ =20 +
+
+

What does if __name__ =3D=3D "__main__": do?

+
+ +

__name__ is a global variable (in Python, global actually m= +eans on the module level) that exists in all namespaces. It is typically the mod= +ule's name (as a str type).

+ +

As the only special case, however, in whatever Python process you run, a= +s in mycode.py:

+ +
python mycode.py
+ +

the otherwise anonymous global namespace is assigned the value of = +'__main__' to its __name__.

+ +

Thus, including the final lines

+ +
if __name__ =3D=3D '__main__':
+    main()
+ +
    +
  • at the end of your mycode.py script,
  • +
  • when it is the primary, entry-point module that is run by a Python proc= +ess,
  • +
+ +

will cause your script's uniquely defined main function to = +run.

+ +

Another benefit of using this construct: you can also import your code a= +s a module in another script and then run the main function if and when you= +r program decides:

+ +
import mycode
+# ... any amount of other code
+mycode.main()
+
+
+
+
+ +
+ c= +offee-grinder +
+ 23.5k1717 gold badges5151 silver badg= +es7979 bronze badges +
+
+
+ + + +
+
+
+ answered Oct 14 '14 at 20:22 +
+
+ +
+ Aaron= + Hall=E2=99=A6Aaron Hall +
+ 225k6262 gold badges331331 silver ba= +dges286286 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
69
+
+ +
+ + =20 + + +
+ =20 +
+

There are lots of different takes here on the mechanics of the c= +ode in question, the "How", but for me none of it made sense until I unders= +tood the "Why". This should be especially helpful for new programmers.

+ +

Take file "ab.py":

+ +
def a():
+    print('A function in ab file');=
+
+a()
+ +

And a second file "xy.py":

+ +
import ab
+def main():
+    print('main function: this is where the action is')
+def x():
+    print ('peripheral task: might be usef=
+ul in other projects')
+x()
+if __name__ =3D=3D "__main__":
+    main()
+ +
+

What is this code actually doing?

+
+ +

When you execute xy.py, you import ab. The imp= +ort statement runs the module immediately on import, so ab's o= +perations get executed before the remainder of xy's. Once fini= +shed with ab, it continues with xy.

+ +

The interpreter keeps track of which scripts are running with __na= +me__. When you run a script - no matter what you've named it - the i= +nterpreter calls it "__main__", making it the master or 'home'= + script that gets returned to after running an external script.

+ +

Any other script that's called from this "__main__" script = +is assigned its filename as its __name__ (e.g., __name__= + =3D=3D "ab.py"). Hence, the line if __name__ =3D=3D "__main__= +": is the interpreter's test to determine if it's interpreting/parsi= +ng the 'home' script that was initially executed, or if it's temporarily pe= +eking into another (external) script. This gives the programmer flexibility= + to have the script behave differently if it's executed directly vs. called= + externally.

+ +

Let's step through the above code to understand what's happening, focusi= +ng first on the unindented lines and the order they appear in the scripts. = +Remember that function - or def - blocks don't do anything by = +themselves until they're called. What the interpreter might say if mumbled = +to itself:

+ +
    +
  • Open xy.py as the 'home' file; call it "__main__" in the <= +code>__name__ variable.
  • +
  • Import and open file with the __name__ =3D=3D "ab.py". +
  • Oh, a function. I'll remember that.
  • +
  • Ok, function a(); I just learned that. Printing 'A fun= +ction in ab file'.
  • +
  • End of file; back to "__main__"!
  • +
  • Oh, a function. I'll remember that.
  • +
  • Another one.
  • +
  • Function x(); ok, printing 'peripheral task: might be = +useful in other projects'.
  • +
  • What's this? An if statement. Well, the condition has been= + met (the variable __name__ has been set to "__main__"), so I'll enter the main() function and print 'main = +function: this is where the action is'.
  • +
+ +

The bottom two lines mean: "If this is the "__main__" or 'h= +ome' script, execute the function called main()". That's why y= +ou'll see a def main(): block up top, which contains the main = +flow of the script's functionality.

+ +
+

Why implement this?

+
+ +

Remember what I said earlier about import statements? When you import a = +module it doesn't just 'recognize' it and wait for further instructions - i= +t actually runs all the executable operations contained within the script. = +So, putting the meat of your script into the main() function e= +ffectively quarantines it, putting it in isolation so that it won't immedia= +tely run when imported by another script.

+ +

Again, there will be exceptions, but common practice is that main(= +) doesn't usually get called externally. So you may be wondering one= + more thing: if we're not calling main(), why are we calling t= +he script at all? It's because many people structure their scripts with sta= +ndalone functions that are built to be run independent of the rest of the c= +ode in the file. They're then later called somewhere else in the body of th= +e script. Which brings me to this:

+ +
+

But the code works without it

+
+ +

Yes, that's right. These separate functions can be call= +ed from an in-line script that's not contained inside a main()= + function. If you're accustomed (as I am, in my early learning stages of pr= +ogramming) to building in-line scripts that do exactly what you need, and y= +ou'll try to figure it out again if you ever need that operation again ... = +well, you're not used to this kind of internal structure to your code, beca= +use it's more complicated to build and it's not as intuitive to read.

+ +

But that's a script that probably can't have its functions called extern= +ally, because if it did it would immediately start calculating and assignin= +g variables. And chances are if you're trying to re-use a function, your ne= +w script is related closely enough to the old one that there will be confli= +cting variables.

+ +

In splitting out independent functions, you gain the ability to re-use y= +our previous work by calling them into another script. For example, "exampl= +e.py" might import "xy.py" and call x(), making use of the 'x'= + function from "xy.py". (Maybe it's capitalizing the third word of a given = +text string; creating a NumPy array from a list of numbers and squaring the= +m; or detrending a 3D surface. The possibilities are limitless.)

+ +

(As an aside, this question contains an answer by @kindall tha= +t finally helped me to understand - the why, not the how. Unfortunately it'= +s been marked as a duplicate of this one, which I think is a mist= +ake.)

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Sep 29 '16 at 4:33 +
+
+
3D""=
+
+
+ joechoj= +joechoj +
+ 89155 silver badges1111 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
50
+
+ +
+ + =20 + + +
+ =20 +
+

When there are certain statements in our module (M.py) we want to be executed when it'll be running as main (not imported), we= + can place those statements (test-cases, print statements) under this if block.

+ +

As by default (when module running as main, not imported) the __na= +me__ variable is set to "__main__", and when it'll be i= +mported the __name__ variable will get a different value, most= + probably the name of the module ('M'). +This is helpful in running different variants of a modules together, and se= +parating their specific input & output statements and also if there are= + any test-cases.

+ +

In short, use this 'if __name__ =3D=3D "main" ' block to prevent (certain) code from being run when the module is imp= +orted.

+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Apr 3 '13 at 14:09 +
+
+ 3D""
+
+
+ Na= +beel AhmedNabeel Ahmed<= +/font> +
+ 11.1k44 gold badges4343 silver badges4747 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
42
+
+ +
+ + =20 + + +
+ =20 +
+

Put simply, __name__ is a variable defined for each= + script that defines whether the script is being run as the main module or = +it is being run as an imported module.

+ +

So if we have two scripts;

+ +
#script1.py
+print "Script 1's name: {}".format(_=
+_name__)
+ +

and

+ +
#script2.py
+import script1
+print "Script 2's name: {}".format(_=
+_name__)
+ +

The output from executing script1 is

+ +
Script 1's name: __main__
+ +

And the output from executing script2 is:

+ +
Script1's name is script1
+Script 2's name: __main__
+ +

As you can see, __name__ tells us which code is the 'main' = +module. +This is great, because you can just write code and not have to worry about = +structural issues like in C/C++, where, if a file does not implement a 'mai= +n' function then it cannot be compiled as an executable and if it does, it = +cannot then be used as a library.

+ +

Say you write a Python script that does something great and you implemen= +t a boatload of functions that are useful for other purposes. If I want to = +use them I can just import your script and use them without executing your = +program (given that your code only executes within the if __name__ = +=3D=3D "__main__": context). Whereas in C/C++ you would have to port= +ion out those pieces into a separate module that then includes the file. Pi= +cture the situation below;

+ +

3D"Complicated

+ +

The arrows are import links. For three modules each trying to include th= +e previous modules code there are six files (nine, counting the implementat= +ion files) and five links. This makes it difficult to include other code in= +to a C project unless it is compiled specifically as a library. Now picture= + it for Python:

+ +

3D"Elegant

+ +

You write a module, and if someone wants to use your code they just impo= +rt it and the __name__ variable can help to separate the execu= +table portion of the program from the library part.

+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Oct 15 '16 at 9:07 +
+
+
3D""
+
+
+ redba= +nditredbandit +
+ 1,49512<= +span class=3D"v-visible-sr">12 silver badges1111 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    + 2 +
    +
    +
    +
    + =20 + The C/C++ illustration is wron= +g: 3 times the same unit name (file1). + =20 + =E2=80=93 Wolf + Jan 11 '18 at 12:59 +
    +
    +
  • +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
37
+
+ +
+ + =20 + + +
+ =20 +
+

Let's look at the answer in a more abstract way:

+ +

Suppose we have this code in x.py:

+ +
...
+<Block A>
+if __name__ =3D=3D '__main__':
+    <Block<=
+span class=3D"pln"> B>
+...
+ +

Blocks A and B are run when we are running "x.py".

+ +

But just block A (and not B) is run when we are running another module, = +"y.py" for example, in which x.y is imported and the code is run from there= + (like when a function in "x.py" is called from y.py).

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Jan 20 '15 at 17:48 +
+
+
3D"" +
+
+ Alisa= +Alisa +
+ 1,89422 gold badges2020 silver badges= +3737 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
34
+
+ +
+ + =20 + + +
+ =20 +
+

When you run Python interactively the local __name__ variable is assigned a value of __main__. Likewise, when you= + execute a Python module from the command line, rather than importing it in= +to another module, its __name__ attribute is assigned a value = +of __main__, rather than the actual name of the module. In thi= +s way, modules can look at their own __name__ value to determi= +ne for themselves how they are being used, whether as support for another p= +rogram or as the main application executed from the command line. Thus, the= + following idiom is quite common in Python modules:

+ +
if __name__ =3D=3D '__main__':
+    # Do something appropriate here, like callin=
+g a
+    # main() function defined elsewhere in this =
+module.
+    main()
+else:
+    # Do nothing. This module has been imported =
+by another
+    # module that wants to make use of the funct=
+ions,
+    # classes and other useful bits it has defin=
+ed.
+
+
+
+ + + +
+
+
+ answered Dec 11 '13 at 11:23 +
+
+
+
+
+ ZainZain +
+ 1,05811 gold badge1414 silver badges2626 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
31
+
+ +
+ + =20 + + +
+ =20 +
+

Consider:

+ +
if __name__ =3D=3D "__main__":
+    main()
+ +

It checks if the __name__ attribute of the Python script is= + "__main__". In other words, if the program itself is executed= +, the attribute will be __main__, so the program will be execu= +ted (in this case the main() function).

+ +

However, if your Python script is used by a module, any code outside of = +the if statement will be executed, so if \__name__ =3D= +=3D "\__main__" is used just to check if the program is used as a mo= +dule or not, and therefore decides whether to run the code.

+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Aug 22 '17 at 18:53 +
+
+
+
+
+ Larry= +Larry +
+ 88211 gold badge= +88 silver badges= +1919 = +bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
27
+
+ +
+ + =20 + + +
+ =20 +
+

Before explaining anything about if __name__ =3D=3D '_= +_main__' it is important to understand what __name__ is= + and what it does.

+ +
+

What is __name__?

+
+ +

__name__ is a DunderAlias - can be thought of as a global = +variable (accessible from modules) and works in a similar way to global.

+ +

It is a string (global as mentioned above) as indicated by type(__= +name__) (yielding <class 'str'>), and is an inbui= +lt standard for both Python 3 and Python 2 versions.

+ +
+

Where:

+
+ +

It can not only be used in scripts but can also be found in both the int= +erpreter and modules/packages.

+ +

Interpreter:

+ +
>>> print(__name__)
+__main__
+>>>
+ +

Script:

+ +

test_file.py:

+ +
print(__na=
+me__)
+ +

Resulting in __main__

+ +

Module or package:

+ +

somefile.py:

+ +
def somefunction():
+    print(__name__)
+ +

test_file.py:

+ +
import somefile
+somefile.somefunction=
+()
+ +

Resulting in somefile

+ +

Notice that when used in a package or module, __name__ take= +s the name of the file. The path of the actual module or package path is n= +ot given, but has its own DunderAlias __file__, that allows fo= +r this.

+ +

You should see that, where __name__, where it is the main f= +ile (or program) will always return __main__, and if = +it is a module/package, or anything that is running off some other Python s= +cript, will return the name of the file where it has originated from.

+ +
+

Practice:

+
+ +

Being a variable means that it's value can be overwritten ("can= +" does not mean "should"), overwriting the value of __name__ w= +ill result in a lack of readability. So do not do it, for any reason. If = +you need a variable define a new variable.

+ +

It is always assumed that the value of __name__ to be __main__ or the name of the file. Once again changing this default= + value will cause more confusion that it will do good, causing problems fur= +ther down the line.

+ +

example:

+ +
>>> __name__ =3D 'Horr=
+ify' # Change default=
+ from __main__
+>>> <=
+span class=3D"kwd">if __name__ =3D=3D 'Hor=
+rify': print(__=
+name__)
+...
+>>> <=
+span class=3D"kwd">else: print('Not Horrify')
+...
+Horrify
+>>>
+ +

It is considered good practice in general to include the if __name= +__ =3D=3D '__main__' in scripts.

+ +
+

Now to answer if __name__ =3D=3D '__main__':

+
+ +

Now we know the behaviour of __name__ things become cle= +arer:

+ +

An if is a flow control statement= + that contains the block of code will execute if the value given is true. W= +e have seen that __name__ can take either=20 +__main__ or the file name it has been imported from.

+ +

This means that if __name__ is equal to __main__ then the file must be the main file and must actually be running (or it = +is the interpreter), not a module or package imported into the script.

+ +

If indeed __name__ does take the value of __main__ then whatever is in that block of code will execute.

+ +

This tells us that if the file running is the main file (or you are runn= +ing from the interpreter directly) then that condition must execute. If it= + is a package then it should not, and the value will not be __main__<= +/code>.

+ +
+

Modules:

+
+ +

__name__ can also be used in modules to define the name of = +a module

+ +
+

Variants:

+
+ +

It is also possible to do other, less common but useful things with __name__, some I will show here:

+ +

Executing only if the file is a module or package:

+ +
if __name__ !=3D '__main__':
+    # Do some useful things 
+ +

Running one condition if the file is the main one and another if= + it is not:

+ +
if __name__ =3D=3D '__main__':
+    # Execute something
+else:
+    # Do some useful things
+ +

You can also use it to provide runnable help functions/utilities on pack= +ages and modules without the elaborate use of libraries.

+ +

It also allows modules to be run from the command line as main scripts, = +which can be also very useful.

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Apr 3 '18 at 19:32 +
+
+
3D"" +
+
+ Simon= +Sim=C3=B3n +
+ 7,04677 gold badges3636 silver badges= +5555 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
23
+
+ +
+ + =20 + + +
+ =20 +
+

I think it's best to break the answer in depth and in simple wor= +ds:

+ +

__name__: Every module in Python has a special attribute ca= +lled __name__. +It is a built-in variable that returns the name of the module.

+ +

__main__: Like other programming languages, Python too has = +an execution entry point, i.e., main. '__main__' is the na= +me of the scope in which top-level code executes. Basically you have t= +wo ways of using a Python module: Run it directly as a script, or import it= +. When a module is run as a script, its __name__ is set to __main__.

+ +

Thus, the value of the __name__ attribute is set to _= +_main__ when the module is run as the main program. Otherwise the va= +lue of __name__ is set to contain the name of the module.

+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Nov 30 '16 at 6:47 +
+
+
3D""
+
+
+ Inconnu= +Inconnu +
+ 4,23422 gold badges2323 silver badges= +3838 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
21
+
+ +
+ + =20 + + +
+ =20 +
+

It is a special for when a Python file is called from the comman= +d line. This is typically used to call a "main()" function or execute other= + appropriate startup code, like commandline arguments handling for instance= +.

+ +

It could be written in several ways. Another is:

+ +
def some_function_for_instance_main():
+    dosomething()
+
+
+__name__ =3D=3D '__main__' and some_function_for_instance_main<=
+/span>()
+ +

I am not saying you should use this in production code, but it serves to= + illustrate that there is nothing "magical" about if __name__ =3D=3D = +'__main__'. It is a good convention for invoking a main function in = +Python files.

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Jan 24 '13 at 13:48 +
+
+
3D""
+
+
+ Prof. Falken supports MonicaEl profesor Falken apoya a Monica +
+ 20.5k1515 gold badges8686 silver badg= +es154154 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    + 6 +
    +
    +
    +
    + =20 + I would consider this bad form= + as you're 1) relying on side effects and 2) abusing and. and is used for checking if two boolean statements are both true. = +Since you're not interested in the result of the and, an if statement more clearly communicates your intentions. + =20 + =E2=80=93 jpmc2= +6 + Dec 26 '13 at 18:07 + + + +
    +
    +
  • +
  • +
    +
    + 8 +
    +
    +
    +
    + =20 + Leaving aside the question of = +whether exploiting the short-circuit behaviour of boolean operators as a fl= +ow control mechanism is bad style or not, the bigger problem is that this <= +i>doesn't answer the question at all. + =20 + =E2=80=93 M= +ark Amery + Jul 10 '15 at 15:33 +
    +
    +
  • +
  • +
    +
    +
    +
    +
    +
    + =20 + @MarkAmery haha, sheesh, now i= +t does. =F0=9F=98=8A + =20 + =E2=80=93 Prof. Falken supports Monica + Dec 10 '19 at 15:34 + + + +
    +
    +
  • +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
19
+
+ +
+ + =20 + + +
+ =20 +
+

There are a number of variables that the system (Python interpre= +ter) provides for source files (modules). You can get their values anytime= + you want, so, let us focus on the __name__ variable/attri= +bute:

+ +

When Python loads a source code file, it executes all of the code found = +in it. (Note that it doesn't call all of the methods and functions defined = +in the file, but it does define them.)

+ +

Before the interpreter executes the source code file though, it defines = +a few special variables for that file; __name__ is one of = +those special variables that Python automatically defines for each source c= +ode file.

+ +

If Python is loading this source code file as the main program (i.e. the= + file you run), then it sets the special __name__ variable= + for this file to have a value "__main__".

+ +

If this is being imported from another module, __name__= + will be set to that module's name.

+ +

So, in your example in part:

+ +
if __name__ =3D=3D "__main__":
+   lock =3D thread.allocate_lock()
+   thread.start_new_t=
+hread(myfunction, ("Thread #: 1", 2, lock))<=
+span class=3D"pln">
+   thread.start_new_t=
+hread(myfunction, ("Thread #: 2", 2, lock))<=
+/code>
+ +

means that the code block:

+ +
lock =3D t=
+hread.allocate_lock()
+thread.start_new_thre=
+ad(myfunction<=
+span class=3D"pun">, =
+("Thread #: 1", 2, lock))
+thread.start_new_thre=
+ad(myfunction<=
+span class=3D"pun">, =
+("Thread #: 2", 2, lock))
+ +

will be executed only when you run the module directly; the code block w= +ill not execute if another module is calling/importing it because the value= + of __name__ will not equal to "main" in = +that particular instance.

+ +

Hope this helps out.

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Nov 25 '15 at 12:26 +
+
+ 3D""= +
+
+
+ code= +wizardcodewizard= + +
+ 27622 silver badges88 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
17
+
+ +
+ + =20 + + +
+ =20 +
+

if __name__ =3D=3D "__main__": is basically the top= +-level script environment, and it specifies the interpreter that ('I have t= +he highest priority to be executed first').

+ +

'__main__' is the name of the scope in which top-level code= + executes. A module=E2=80=99s __name__ is set equal to '= +__main__' when read from standard input, a script, or from an intera= +ctive prompt.

+ +
if __name__ =3D=3D "__main__":
+    # Execute only if run as a script
+    main()
+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Apr 24 '16 at 8:23 +
+
+
+
+
+ The Gr8 AdakronEl Gr8 = +Adakron +
+ 87488 silver badges1313 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
15
+
+ +
+ + =20 + + +
+ =20 +
+

I've been reading so much throughout the answers on this page. I= + would say, if you know the thing, for sure you will understand those answe= +rs, otherwise, you are still confused.

+ +

To be short, you need to know several points:

+ +
    +
  1. import a action actually runs all that can be ran in "a= +"

  2. +
  3. Because of point 1, you may not want everything to be run in "a" whe= +n importing it

  4. +
  5. To solve the problem in point 2, python allows you to put a conditio= +n check

  6. +
  7. __name__ is an implicit variable in all .py modules; wh= +en a.py is imported, the value of __name__ of a.py module is s= +et to its file name "a"; when a.py is run directly using "python a.py", whi= +ch means a.py is the entry point, then the value of __name__ o= +f a.py module is set to a string __main__

  8. +
  9. Based on the mechanism how python sets the variable __name__ for each module, do you know how to achieve point 3? The answer is fa= +irly easy, right? Put a if condition: if __name__ =3D=3D "__main__": = +...; you can even put if __name__ =3D=3D "a" depending = +on your functional need

  10. +
+ +

The important thing that python is special at is point 4! The rest is ju= +st basic logic.

+
+
+
+ + + +
+
+
+ answered Jun 24 '18 at 15:48 +
+
+
+
+
+ jackJack +
+ 22322 silver badges77 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    +
    +
    +
    +
    + =20 + Yes, point 1 is vital to under= +stand. From that, the need for this mechanism become clear. + =20 + =E2=80=93 Eureka + Mar 24 '19 at 21:16 +
    +
    +
  • +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
14
+
+ +
+ + =20 + + +
+ =20 +
+

The reason for

+ +
if __name__ =3D=3D "__main__":
+    main()
+ +

is primarily to avoid the import lock problems that would arise from having code directly imported. You want main() to run if your file was directly invoked (that's the __name__ = +=3D=3D "__main__" case), but if your code was imported then the impo= +rter has to enter your code from the true main module to avoid import lock = +problems.

+ +

A side-effect is that you automatically sign on to a methodology that su= +pports multiple entry points. You can run your program using main() as the entry point, but you don't have to. While setup= +.py expects main(), other tools use alternate entry poi= +nts. For example, to run your file as a gunicorn process, you = +define an app() function instead of a main(). Jus= +t as with setup.py, gunicorn imports your code so= + you don't want it do do anything while it's being imported (because of the= + import lock issue).

+
+
+
+
+
+ +
+ =20 +
+
+ =20 +
+ =20 +
+
+
+ + + +
+
+
+ answered Sep 22 '17 at 18:32 +
+
+ = +
3D""
+
+
+ = +personal_cloudnube_pers= +onal +
+ 1,860= +99 silver badges2222 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    + 3 +
    +
    +
    +
    + =20 + Good to learn about import = +lock. Could you please explain sign on to a methodology that [...] part a little bit more? + =20 + =E2=80=93 Wolf + Jan 11 '18 at 13:06 +
    +
    +
  • +
  • +
    +
    + 1 +
    +
    +
    +
    + =20 + @Wolf: Sure. I've added a few = +sentences about the multiple entry points methodology. + =20 + =E2=80=93 personal_cloud + Apr 14 '18 at 0:26 +
    +
    +
  • +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
14
+
+ +
+ + =20 + + +
+ =20 +
+

Consider:

+ +
print __name__
+ +

The output for the above is __main__.

+ +
if __name__ =3D=3D "__main__":
+  print "direct method"
+ +

The above statement is true and prints "direct method". Suppose= + if they imported this class in another class it doesn't print "direct = +method" because, while importing, it will set __name__ equal to = +"first model name".

+
+
+
+
+ +
+ sim= +humileco +
+ 13.7k77 gold badges7979 silver badges6969 bronze badges +
+
+
+ + + +
+
+
+ answered Jun 22 '16 at 10:47 +
+
+
3D""
+
+
+ Janarthanan RamuJana= +rthanan Ramu +
+ 90199 silver badges1414 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
13
+
+ +
+ + =20 + + +
+ =20 +
+
+

You can make the file usable as a script as well as a= +n importable module.

+
+ +

fibo.py (a module named fibo)

+ +
# Other modules can IMPORT this MODULE to use the function fib
+def fib(n):    # write Fibonacci ser=
+ies up to n
+    a, b =3D 0<=
+/span>, 1
+    while b < n:
+        print(=
+b, end=3D' ')
+        a, b <=
+span class=3D"pun">=3D b, a+b
+    print()
+
+# This allows the file to be used as a SCRIPT
+if __name__ =3D=3D "__main__":
+    import sys
+    fib(int(sys=
+.argv[1]))
+ +

Reference: https://docs.python.org/3.5/tutorial/modules.html +

+
+
+ + + +
+
+
+ answered Mar 13 '17 at 21:44 +
+
+
+
+
+ samsam +
+ 6,84155 gold badges2929 silver badges= +4646 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
9
+
+ +
+ + =20 + + +
+ =20 +
+

This answer is for Java programmers learning Python. +Every Java file typically contains one public class. You can use that class= + in two ways:

+ +
    +
  1. Call the class from other files. You just have to import it in the c= +alling program.

  2. +
  3. Run the class stand alone, for testing purposes.

  4. +
+ +

For the latter case, the class should contain a public static void main(= +) method. In Python this purpose is served by the globally defined label '__main__'.

+
+
+
+
+
+ +
+ +
+ eylla= +nesc +
+ 127k1313 gold badges4444 silver badg= +es8181 bronze badges +
+
+
+ + + +
+
+
+ answered Oct 7 '18 at 4:52 +
+
+
3D""
+
+
+ RajaRaja +
+ 75699 silver badges88 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+
+ + =20 + +
+
+
+ =20 + +
+ +
8
+
+ +
+ + =20 + + +
+ =20 +
+

Every module in python has a attribute called __name__. The value of __name__ attribute is __main__ when the module is run directly, like python my_module.py. = +Otherwise (like when you say import my_module) the value of __name__ is the name of the module.

+ +

Small example to explain in short.

+ +
#Script test.py
+
+apple =3D 42
+
+def hello_world():
+    print("I am inside hello_world")
+
+if __name__ =3D=3D "__main__":
+    print("Value of __name__ is: ",=
+ __name__)
+    print("Going to call hello_world")
+    hello_world()
+ +

We can execute this directly as

+ +
python test.py  
+ +

Output

+ +
Value of __name__ is: __main__
+Going to call hello_w=
+orld
+I am inside hello_world
+ +

Now suppose we call above script from other script

+ +
#script external_calling.py
+
+import test
+print(test.appl=
+e)
+test.hello_world()
+
+print(test.__na=
+me__)
+ +

When you execute this

+ +
python external_calling.py
+ +

Output

+ +
42
+I am inside hello_world
+test
+ +

So, above is self explanatory that when you call test from other script,= + if loop __name__ in test.py will not execute. +

+
+
+
+ +
+ cha= +rlesreid1 +
+ 2,56011 gold badge2020 silver badges3434 bronze badges +
+
+
+ + + +
+
+
+ answered Jun 12 '19 at 9:28 +
+
+ 3D""
+
+
+ Ri= +shi BansalRishi Bansal<= +/font> +
+ 1,51211 gold badge77 silver badges232= +3 bronze badges +
+
+
+ +
+
+ =20 + + +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
6
+
+ +
+ + =20 + + +
+ =20 +
+

If the python interpreter is running a particular module th= +en __name__ global variable will have value "__main__"<= +/code>

+ +
  def a():
+      print("a")
+  def b():
+      print("b")
+
+  if __name__ =
+=3D=3D "__main__":=20
+
+          print ("you =
+can see me" )<=
+span class=3D"pln">
+          a()
+  else:=20
+
+          print ("You =
+can't see me")
+          b()
+ +

When you run this script prints you can see me

+ +

a

+ +

If you import this file say A to file B and execute the file B then if __name__ =3D=3D "__main__" in file A becomes false, so it prin= +ts You can't see me

+ +

b

+
+
+
+ + + +
+
+
+ answered Jul 30 '19 at 16:22 +
+
+
3D""
+
+
+ Nikil MunireddyNikil M= +unireddy +
+ 7911 silver badge33 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
5
+
+ +
+ + =20 + + +
+ =20 +
+

If this .py file are imported by other .py files, the code under= + "the if statement" will not be executed.

+ +

If this .py are run by python this_py.py under shell, or do= +uble clicked in Windows. the code under "the if statement" will be executed= +.

+ +

It is usually written for testing.

+
+
+
+ + + +
+
+
+ answered Jun 19 '18 at 11:44 +
+
+
+
+
+ pah8J= +pah8J +
+ 61755 silver badges1212 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
4
+
+ +
+ + =20 + + +
+ =20 +
+

Create a file, a.py:

+ +
print(__na=
+me__) # It will print out __main__
+ +

__name__ is always equal to __main__ whenever = +that file is run directly showing that this is the main fi= +le.

+ +

Create another file, b.py, in the same directory:

+ +
import a  =
+# Prints a
+ +

Run it. It will print a, i.e., the name of the file whi= +ch is imported.

+ +

So, to show two different behavior of the same file, th= +is is a commonly used trick:

+ +
# Code to be run when imported into another python file
+
+if __name__ =3D=3D '__main__':
+    # Code to be run only when run directly
+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Jan 8 '18 at 15:24 +
+
+ +
+ TheVi= +shalTheVishal +
+ 31544 silver badges1212 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
4
+
+ +
+ + =20 + + +
+ =20 +
+

if name =3D=3D 'main':

+ +

We see if __name__ =3D=3D '__main__': quite often.

+ +

It checks if a module is being imported or not.

+ +

In other words, the code within the if block will be execut= +ed only when the code runs directly. Here directly means not imported.

+ +

Let's see what it does using a simple code that prints the name of the m= +odule:

+ +
# test.py
+def test():
+   print('test module name=3D%s' %(__name__))
+
+if __name__ =3D=3D '__main__':
+   print('call test()')
+   test()
+ +

If we run the code directly via python test.py, the module = +name is __main__:

+ +
call test()
+test module name=3D__=
+main__
+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered Apr 4 '18 at 14:32 +
+
+ 3D""
+
+
+ Ali= + HallajiAli Hallaji +
+ 1,26414<= +span class=3D"v-visible-sr">14 silver badges2020 bronze badges +
+
+
+ +
+
+ =20 + + +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
4
+
+ +
+ + =20 + + +
+ =20 +
+

All the answers have pretty much explained the functionality. Bu= +t I will provide one example of its usage which might help clearing out the= + concept further.

+ +

Assume that you have two Python files, a.py and b.py. Now, a.py imports = +b.py. We run the a.py file, where the "import b.py" code is executed first.= + Before the rest of the a.py code runs, the code in the file b.py must run = +completely.

+ +

In the b.py code there is some code that is exclusive to that file b.py = +and we don't want any other file (other than b.py file), that has imported = +the b.py file, to run it.

+ +

So that is what this line of code checks. If it is the main file (i.e., = +b.py) running the code, which in this case it is not (a.py is the main file= + running), then only the code gets executed.

+
+
+
+
+ +
+ P= +eter Mortensen +
+ 24.7k2020 gold badges8989 silver badg= +es118118 bronze badges +
+
+
+ + + +
+
+
+ answered May 4 '18 at 8:25 +
+
+
+
+
+ preetika mondalpreetik= +a mondal +
+ 12566 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + +
+
+ + =20 +
+ + + =20 + +
+
+
+ =20 + +
+ +
3
+
+ +
+ + =20 + + +
+ =20 +
+

Simply it is the entry point to run the file like the main= + function in the C programming language.

+
+
+
+
+ +
+ sim= +humileco +
+ 13.7k77 gold badges7979 silver badges6969 bronze badges +
+
+
+ + + +
+
+
+ answered Feb 3 '19 at 19:36 +
+
+ = +
3D""
+
+
+ = +Mohammed AwneyMohammed = +Awney +
+ 46766 silver badges1111 bronze badges +
+
+
+ +
+
+ =20 +
+ +
+
+
    + + +
  • +
    +
    + 6 +
    +
    +
    +
    + =20 + This answer makes the assumpti= +on that the OP (or any user with a similar question) is both familiar with = +C and knows what an entry point is. + =20 + =E2=80=93 arredo= +nd + Feb 22 '19 at 12:44 +
    +
    +
  • +
  • +
    +
    + 1 +
    +
    +
    +
    + =20 + This answer also assumes that = +no code (other than definitions without side effects) take place before the= + if __name__ =3D=3D "__main__" block. Technically the top of t= +he script executed is the entry point of the program. + =20 + =E2=80=93 Charlie Harding + Apr 9 '19 at 21:35 +
    +
    +
  • +
+
+ + =20 +
+ + + + + + + +

+Not the answer you're looking for? Browse ot= +her questions tagged python namespaces main python-module idioms or ask your own question.

+ + + + + + + +
+

+ + Hot Network Questions + +

+ + + =20 +
+ + + + + + +
lang-py
+ + + + + + + =20 + =20 +
+ =20 + =20 + + + =20 + =20 + =20 +
 
3D"Google

Texto original

Sugiere una traducci=C3=B3n mejor

+------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: cid:css-c09e4e52-b6f6-4188-ab51-98b4f09d0ea0@mhtml.blink + +@charset "utf-8"; + +.everyoneloves__top-leaderboard:empty, .everyoneloves__mid-leaderboard:empt= +y, .everyoneloves__bot-mid-leaderboard:empty { margin-bottom: 0px; } +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://cdn.sstatic.net/Shared/stacks.css?v=1757951bb781 + +@charset "utf-8"; + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, b= +lockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, i= +mg, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i= +, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, cap= +tion, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, emb= +ed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, se= +ction, summary, time, mark, audio, video { margin: 0px; padding: 0px; borde= +r: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; f= +ont-stretch: inherit; line-height: inherit; font-family: inherit; font-size= +: 100%; vertical-align: baseline; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, = +nav, section { display: block; } + +body { line-height: 1; } + +ol, ul { list-style: none; } + +blockquote, q { quotes: none; } + +blockquote::before, blockquote::after, q::before, q::after { content: none;= + } + +table { border-collapse: collapse; border-spacing: 0px; } + +sub, sup { font-size: 80%; line-height: 1; vertical-align: sub; } + +sup { vertical-align: super; } + +button { margin: 0px; } + +.svg-icon { vertical-align: bottom; } + +.svg-icon:not(.native) * { fill: currentcolor; } + +.s-avatar { display: inline-block; position: relative; width: 16px; height:= + 16px; border-radius: 3px; background-color: var(--black-400); background-r= +epeat: no-repeat; background-size: 100%; vertical-align: bottom; } + +.s-avatar .s-avatar--letter { display: block; color: rgb(255, 255, 255); fo= +nt-size: 11px; font-weight: bold; line-height: 1.45455; text-align: center;= + text-transform: uppercase; user-select: none; } + +.s-avatar .s-avatar--badge { position: absolute; right: -4px; bottom: -4px;= + } + +.s-avatar.s-avatar__md { width: 32px; height: 32px; border-radius: 5px; } + +.s-avatar.s-avatar__md .s-avatar--letter { font-size: 22px; } + +.s-avatar.s-avatar__md .s-avatar--badge { transform: scale(1.3); } + +.s-avatar.s-avatar__lg { width: 64px; height: 64px; border-radius: 7px; } + +.s-avatar.s-avatar__lg .s-avatar--letter { font-size: 44px; } + +.s-avatar.s-avatar__lg .s-avatar--badge { transform: scale(2.4); } + +.s-avatar.s-avatar__xl { width: 96px; height: 96px; border-radius: 10px; } + +.s-avatar.s-avatar__xl .s-avatar--letter { font-size: 66px; } + +.s-avatar.s-avatar__xl .s-avatar--badge { transform: scale(3); } + +.s-avatar.s-avatar__xxl { width: 128px; height: 128px; border-radius: 14px;= + } + +.s-avatar.s-avatar__xxl .s-avatar--letter { font-size: 88px; } + +.s-avatar.s-avatar__xxl .s-avatar--badge { transform: scale(3); } + +.s-badge { display: inline-flex; place-content: center; min-width: 0px; pad= +ding: 0px 6px; border: 1px solid transparent; border-radius: 3px; font-size= +: 12px; font-weight: normal; line-height: 2; text-decoration: none; vertica= +l-align: middle; white-space: nowrap; background-color: var(--black-800); c= +olor: var(--black-025); } + +.s-badge .s-tag--dismiss { background-color: transparent; } + +a.s-badge:hover { text-decoration: none; } + +.s-badge--image { display: inline-flex; align-self: center; margin-right: 1= +px; margin-left: -5px; } + +.s-badge__tag { border-color: var(--black-100); background-color: var(--bla= +ck-050); color: var(--black-700); } + +.s-badge__tag .s-tag--dismiss { background-color: transparent; } + +.s-badge__gold { border-color: var(--gold); background-color: var(--gold-li= +ghter); color: var(--black-900); } + +.s-badge__gold .s-tag--dismiss { background-color: transparent; } + +.s-badge__silver { border-color: var(--silver); background-color: var(--sil= +ver-lighter); color: var(--black-900); } + +.s-badge__silver .s-tag--dismiss { background-color: transparent; } + +.s-badge__bronze { border-color: var(--bronze); background-color: var(--bro= +nze-lighter); color: var(--black-900); } + +.s-badge__bronze .s-tag--dismiss { background-color: transparent; } + +.s-badge__bounty { border-color: transparent; background-color: var(--blue-= +600); color: var(--white); } + +.s-badge__bounty .s-tag--dismiss { background-color: transparent; } + +.s-badge__votes { border-color: var(--black-150); background-color: var(--w= +hite); color: var(--black-700); } + +.s-badge__votes .s-tag--dismiss { background-color: transparent; } + +.s-badge__answered { border-color: transparent; background-color: var(--gre= +en-400); color: var(--white); } + +.s-badge__answered .s-tag--dismiss { background-color: transparent; } + +.s-badge__rep { border-color: var(--green-400); background-color: var(--whi= +te); color: var(--green-500); } + +.s-badge__rep .s-tag--dismiss { background-color: transparent; } + +.s-badge__rep-down { border-color: var(--red-400); background-color: var(--= +white); color: var(--red-500); } + +.s-badge__rep-down .s-tag--dismiss { background-color: transparent; } + +.s-badge__mini { align-self: flex-start; padding-right: 4px; padding-left: = +3px; font-size: 11px; line-height: 1.8; border-color: transparent; backgrou= +nd-color: var(--blue-600); color: var(--white); } + +.s-badge__mini .s-tag--dismiss { background-color: transparent; } + +.s-badge__important { border-color: transparent; background-color: var(--re= +d-600); color: var(--white); } + +.s-badge__important .s-tag--dismiss { background-color: transparent; } + +.s-empty-state { color: var(--fc-light); text-align: center; margin-left: a= +uto; margin-right: auto; } + +.s-empty-state p { font-size: 13px; margin-bottom: 12px; } + +.s-empty-state p strong { color: var(--fc-dark); } + +.s-breadcrumbs { display: flex; flex-wrap: wrap; align-items: start; color:= + var(--black-150); font-size: 12px; } + +.s-breadcrumbs .s-breadcrumbs--item { display: flex; flex-wrap: nowrap; mar= +gin-top: 2px; margin-bottom: 2px; } + +.s-breadcrumbs .s-breadcrumbs--divider { margin-right: 4px; margin-left: 4p= +x; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-breadcrumbs .s-brea= +dcrumbs--divider { margin-right: 2px; margin-left: 2px; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .s-breadcrumbs .s-breadcrumb= +s--divider { margin-right: 2px; margin-left: 2px; } +} + +.s-breadcrumbs .s-breadcrumbs--link { color: var(--black-350); } + +.s-breadcrumbs .s-breadcrumbs--link:hover { color: var(--black-600); } + +.s-btn-group { display: flex; flex-wrap: wrap; margin-bottom: 1px; } + +.s-btn-group .s-btn { margin-bottom: -1px; white-space: nowrap; } + +.s-btn-group .s-btn:not(:last-child) { margin-right: -1px; } + +.s-btn-group .s-btn:not(:first-child):not(:last-child) { border-radius: 0px= +; } + +.s-btn-group .s-btn:first-child:not(:only-child) { border-top-right-radius:= + 0px; border-bottom-right-radius: 0px; } + +.s-btn-group .s-btn:last-child:not(:only-child) { border-top-left-radius: 0= +px; border-bottom-left-radius: 0px; } + +.s-btn-group .s-btn.is-selected { z-index: 25; } + +.s-btn-group .s-btn:active { z-index: 30; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-btn-group .s-btn { = +padding-left: 0.4em; padding-right: 0.4em; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .s-btn-group .s-btn { paddin= +g-left: 0.4em; padding-right: 0.4em; } +} + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-btn-group .s-btn.s-= +btn__dropdown { padding-right: 1.2em; } + html.html__responsive:not(.html__unpinned-leftnav) .s-btn-group .s-btn.s-= +btn__dropdown::after { right: 0.4em; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .s-btn-group .s-btn.s-btn__d= +ropdown { padding-right: 1.2em; } + html.html__responsive.html__unpinned-leftnav .s-btn-group .s-btn.s-btn__d= +ropdown::after { right: 0.4em; } +} + +.s-btn-group .s-btn-group--container { display: flex; } + +.s-btn-group .s-btn-group--container .s-btn { margin-right: -1px; } + +.s-btn-group .s-btn-group--container:not(:first-child):not(:last-child) .s-= +btn { border-radius: 0px; } + +.s-btn-group .s-btn-group--container:first-child .s-btn { border-top-right-= +radius: 0px; border-bottom-right-radius: 0px; margin-left: 0px; } + +.s-btn-group .s-btn-group--container:last-child .s-btn { border-top-left-ra= +dius: 0px; border-bottom-left-radius: 0px; } + +.s-card { padding: 12px; border: 1px solid var(--black-100); border-radius:= + 3px; background-color: var(--white); } + +.s-card p:last-of-type { margin-bottom: 0px; } + +a.s-card:not(.s-card__muted):hover, a.s-card:not(.s-card__muted):focus, a.s= +-card:not(.s-card__muted):active { border-color: var(--black-200); } + +.s-card__muted { border-color: var(--black-075); } + +.s-card__muted > * { opacity: 0.65; } + +.s-expandable { display: flex; clip-path: polygon(-1e+06px -1e+06px, 1e+06p= +x -1e+06px, 1e+06px 1e+06px, -1e+06px 1e+06px); align-items: flex-start; tr= +ansition: clip-path 0s ease 100ms, -webkit-clip-path 0s ease 100ms; } + +.s-expandable::after { content: ""; flex-basis: 0px; height: 50px; max-heig= +ht: 0px; transition: height 100ms linear 0s, max-height 0s linear 100ms; } + +.s-expandable--content { flex-basis: 100%; max-height: 1e+06px; margin-bott= +om: 0px; transform-origin: 0px 0px; transition: margin-bottom 100ms cubic-b= +ezier(0, 0, 0, 1) 0s, transform 100ms cubic-bezier(1, 0, 1, 1) 0s, opacity = +100ms cubic-bezier(1, 0, 1, 1) 0s; } + +.s-expandable:not(.is-expanded) { overflow: hidden; clip-path: polygon(0% 0= +%, 100% 0%, 100% 100%, 0% 100%); transition: none 0s ease 0s; } + +.s-expandable:not(.is-expanded) .s-expandable--content { visibility: hidden= +; max-height: 0px; margin-bottom: -1500px; opacity: 0; transform: scaleY(0)= +; transition: margin-bottom 100ms cubic-bezier(1, 0, 1, 1) 0s, visibility 0= +s ease 100ms, max-height 0s ease 100ms, transform 100ms cubic-bezier(0, 1, = +1, 1) 0s, opacity 100ms cubic-bezier(0, 1, 1, 1) 0s; } + +@supports ((-webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))= + or (clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))) { + .s-expandable:not(.is-expanded) .s-expandable--content { opacity: 1; tran= +sform: none; } +} + +.s-expandable:not(.is-expanded)::after { height: 0px; max-height: 50px; tra= +nsition: height 100ms linear 0s; } + +.s-input, .s-textarea { -webkit-appearance: none; width: 100%; margin: 0px;= + padding: 0.6em 0.7em; border: 1px solid var(--black-200); border-radius: 3= +px; background-color: var(--white); color: var(--fc-dark); font-size: 13px;= + font-family: inherit; line-height: 1.15385; } + +@supports (-webkit-overflow-scrolling: touch) { + .s-input, .s-textarea { font-size: 16px; padding: 0.36em 0.55em; } + .s-input::-webkit-input-placeholder, .s-textarea::-webkit-input-placehold= +er { line-height: normal !important; } +} + +.s-input::-webkit-input-placeholder, .s-textarea::-webkit-input-placeholder= + { color: var(--black-200); } + +.s-input::placeholder, .s-textarea::placeholder { color: var(--black-200); = +} + +.s-input::-webkit-scrollbar, .s-textarea::-webkit-scrollbar { width: 8px; h= +eight: 8px; background-color: transparent; } + +.s-input::-webkit-scrollbar-track, .s-textarea::-webkit-scrollbar-track { b= +order-radius: 8px; background-color: transparent; } + +.s-input::-webkit-scrollbar-thumb, .s-textarea::-webkit-scrollbar-thumb { b= +order-radius: 8px; background-color: var(--scrollbar); } + +.s-input::-webkit-scrollbar-corner, .s-textarea::-webkit-scrollbar-corner {= + background-color: transparent; border-color: transparent; } + +.s-input.s-input__search, .s-input.s-input__creditcard { padding-left: 32px= +; } + +fieldset { min-width: 0px; padding: 0px; border: 0px; } + +.s-label { padding: 0px 2px; color: var(--fc-dark); font-family: inherit; f= +ont-size: 1.15385rem; font-weight: 700; cursor: pointer; } + +legend.s-label { cursor: default; } + +.s-label--status { margin-left: 4px; padding: 2px 8px; border-radius: 1000p= +x; background-color: var(--black-050); color: var(--fc-medium); font-size: = +12px; font-weight: 400; vertical-align: text-bottom; } + +.s-label--status.s-label--status__required { background-color: var(--red-10= +0); color: var(--red-600); } + +.s-label--status.s-label--status__new { background-color: var(--green-100);= + color: var(--green-700); } + +.s-label--status.s-label--status__beta { background-color: var(--blue-100);= + color: var(--blue-700); } + +.s-description { padding: 0px 2px; color: var(--fc-medium); font-size: 12px= +; } + +.s-label .s-description, .s-label .s-input-message { padding: 0px; margin-t= +op: 4px; margin-bottom: 0px; font-weight: normal; } + +.s-input-fill { padding: 0.6em 0.7em; border-top-color: ; border-top-style:= + ; border-top-width: ; border-right-color: ; border-right-style: ; border-b= +ottom-color: ; border-bottom-style: ; border-bottom-width: ; border-left-co= +lor: ; border-left-style: ; border-image-source: ; border-image-slice: ; bo= +rder-image-width: ; border-image-outset: ; border-image-repeat: ; border-ri= +ght-width: 0px; border-left-width: 0px; background-color: var(--black-050);= + color: var(--fc-medium); font-family: inherit; white-space: nowrap; line-h= +eight: 1.15385; } + +.s-input-fill.s-input-fill__clear { border-color: transparent; background-c= +olor: transparent; } + +.s-input-fill.order-first { border-left-width: 1px; border-top-left-radius:= + 3px; border-bottom-left-radius: 3px; } + +.s-input-fill.order-last { border-right-width: 1px; border-top-right-radius= +: 3px; border-bottom-right-radius: 3px; } + +.s-select { position: relative; color: var(--fc-dark); } + +.s-select::before, .s-select::after { content: ""; position: absolute; z-in= +dex: 25; right: 13px; border-color: currentcolor transparent; border-style:= + solid; border-width: 4px; pointer-events: none; } + +.s-select::before { top: calc(50% - 5px); border-top-width: 0px; border-bot= +tom-width: 4px; } + +.s-select::after { top: calc(50% + 1px); border-top-width: 4px; border-bott= +om-width: 0px; } + +.s-select > select { -webkit-appearance: none; position: relative; width: 1= +00%; height: 100%; padding: 0.6em 32px 0.6em 0.7em; border: 1px solid var(-= +-black-200); border-radius: 3px; background-color: var(--white); outline: 0= +px; font-size: 13px; font-family: inherit; color: var(--black); line-height= +: 1.15385; } + +@supports (-webkit-overflow-scrolling: touch) { + .s-select > select { font-size: 16px; padding: 0.4em 0.55em; } +} + +@supports ((-webkit-appearance: none) or (-moz-appearance: none) or (appear= +ance: none)) { + .s-checkbox, .s-radio { -webkit-appearance: none; margin: 0px; width: 1em= +; height: 1em; border: 1px solid var(--black-200); background-color: var(--= +white); outline: 0px; font-size: inherit; vertical-align: middle; cursor: p= +ointer; } +} + +.s-checkbox[disabled], .s-radio[disabled] { opacity: 0.5; cursor: not-allow= +ed; } + +@supports ((-webkit-appearance: none) or (-moz-appearance: none) or (appear= +ance: none)) { + .s-checkbox { border-radius: 3px; background-position: center center; bac= +kground-repeat: no-repeat; background-size: contain; } + .s-checkbox[disabled] { border-color: var(--black-200); background-color:= + var(--black-075); } + .s-checkbox:checked { background-color: var(--blue-500); background-image= +: url("data:image/svg+xml,%3Csvg width=3D'11' height=3D'11' xmlns=3D'http:/= +/www.w3.org/2000/svg'%3E%3Cpath d=3D'M10 3.41L8.59 2 4 6.59 2.41 5 1 6.41l3= + 3z' fill=3D'%23fff'/%3E%3C/svg%3E"); border-color: var(--blue-500) !impor= +tant; } + .s-checkbox:checked:focus { border-color: var(--blue-500); } + .s-checkbox:checked[disabled] { background-color: var(--black-400); borde= +r-color: var(--black-500) !important; } + .s-checkbox:focus { border-color: var(--blue-300); box-shadow: 0 0 0 4px = +var(--focus-ring); } +} + +@supports ((-webkit-appearance: none) or (-moz-appearance: none) or (appear= +ance: none)) { + .s-radio { border-radius: 50%; } + .s-radio:checked { border-color: var(--blue-500); border-width: 0.307692e= +m; background-color: rgb(255, 255, 255); } + .s-radio:focus { box-shadow: 0 0 0 4px var(--focus-ring); } +} + +.s-input:focus, .s-input.has-focus, .s-textarea:focus, .s-select > select:f= +ocus { border-color: var(--blue-300); box-shadow: 0 0 0 4px var(--focus-rin= +g); outline: 0px; } + +.s-input:focus-within { border-color: var(--blue-300); box-shadow: 0 0 0 4p= +x var(--focus-ring); outline: 0px; } + +.s-input[disabled], .s-textarea[disabled], .s-select > select[disabled], .s= +-input[read-only], .s-textarea[read-only], .s-select > select[read-only] { = +border-color: var(--black-075); background-color: var(--black-050); color: = +var(--black-200); } + +.s-input[disabled], .s-textarea[disabled], .s-select > select[disabled] { c= +ursor: not-allowed; } + +.is-disabled, .has-success, .has-error, .has-warning { position: relative; = +} + +.is-disabled .s-input, .has-success .s-input, .has-error .s-input, .has-war= +ning .s-input { padding-right: 32px; } + +.is-disabled .s-select .s-input-icon, .has-success .s-select .s-input-icon,= + .has-error .s-select .s-input-icon, .has-warning .s-select .s-input-icon {= + right: 32px; } + +.is-disabled .s-textarea, .has-success .s-textarea, .has-error .s-textarea,= + .has-warning .s-textarea { padding-right: 48px; } + +.is-disabled .s-textarea ~ .s-input-icon, .has-success .s-textarea ~ .s-inp= +ut-icon, .has-error .s-textarea ~ .s-input-icon, .has-warning .s-textarea ~= + .s-input-icon { top: 1.5em; } + +.is-disabled .s-input-message a, .has-success .s-input-message a, .has-erro= +r .s-input-message a, .has-warning .s-input-message a { text-decoration: un= +derline; } + +.has-warning .s-input, .has-warning .s-textarea, .has-warning .s-checkbox, = +.has-warning .s-radio:not(:checked), .has-warning .s-select > select { bord= +er-color: var(--yellow-600); } + +.has-warning .s-input:focus, .has-warning .s-textarea:focus, .has-warning .= +s-checkbox:focus, .has-warning .s-radio:not(:checked):focus, .has-warning .= +s-select > select:focus { box-shadow: 0 0 0 4px var(--focus-ring-warning); = +} + +.has-warning .s-input-message { color: var(--yellow-800); } + +.has-warning .s-input-message a { color: var(--yellow-900); } + +.has-warning .s-input-icon { color: var(--yellow-600); } + +.has-error .s-input, .has-error .s-textarea, .has-error .s-checkbox, .has-e= +rror .s-radio:not(:checked), .has-error .s-select > select { border-color: = +var(--red-400); } + +.has-error .s-input:focus, .has-error .s-textarea:focus, .has-error .s-chec= +kbox:focus, .has-error .s-radio:not(:checked):focus, .has-error .s-select >= + select:focus { box-shadow: 0 0 0 4px var(--focus-ring-error); } + +.has-error .s-input-message { color: var(--red-500); } + +.has-error .s-input-message a { color: var(--red-800); } + +.has-error .s-input-message a:hover { color: var(--red-900); } + +.has-error .s-input-icon { color: var(--red-400); } + +.has-success .s-input, .has-success .s-textarea, .has-success .s-checkbox, = +.has-success .s-radio:not(:checked), .has-success .s-select > select { bord= +er-color: var(--green-400); } + +.has-success .s-input:focus, .has-success .s-textarea:focus, .has-success .= +s-checkbox:focus, .has-success .s-radio:not(:checked):focus, .has-success .= +s-select > select:focus { box-shadow: 0 0 0 4px var(--focus-ring-success); = +} + +.has-success .s-input-message { color: var(--green-500); } + +.has-success .s-input-message a { color: var(--green-800); } + +.has-success .s-input-message a:hover { color: var(--green-900); } + +.has-success .s-input-icon { color: var(--green-400); } + +.is-disabled .s-select::before, .is-disabled .s-select::after { border-colo= +r: var(--black-200) transparent; } + +.is-disabled .s-label, .is-disabled .s-description { opacity: 0.5; } + +.is-disabled .s-input-icon { color: var(--black-200); } + +.is-disabled .s-label { cursor: not-allowed; } + +.s-input-icon { position: absolute; top: 50%; right: 0.7em; margin-top: -9p= +x; pointer-events: none; } + +.s-input-icon.s-input-icon__search, .s-input-icon.s-input-icon__creditcard = +{ right: auto; left: 0.7em; color: var(--black-200); } + +.s-input-message { padding: 2px; font-size: 12px; } + +.s-input__sm, .s-textarea__sm, .s-label__sm, .s-select__sm > select { font-= +size: 12px; } + +.s-input__md, .s-textarea__md, .s-label__md, .s-select__md > select { font-= +size: 1.30769rem; } + +.s-input__lg, .s-textarea__lg, .s-label__lg, .s-select__lg > select { font-= +size: 1.61538rem; } + +.s-input__xl, .s-textarea__xl, .s-label__xl, .s-select__xl > select { font-= +size: 2.07692rem; } + +.s-input__md, .s-textarea__md, .s-select__md > select { padding-top: 0.5em;= + padding-bottom: 0.5em; border-radius: 4px; } + +.s-input__lg, .s-textarea__lg, .s-select__lg > select { padding: 0.45em 0.6= +em; border-radius: 4px; } + +.s-input__xl, .s-textarea__xl, .s-select__xl > select { padding: 0.4em 0.5e= +m; border-radius: 5px; } + +.s-modal { display: flex; visibility: hidden; position: fixed; z-index: -1;= + top: 0px; right: 0px; bottom: 0px; left: 0px; align-items: center; justify= +-content: center; background-color: rgba(12, 13, 14, 0.5); opacity: 0; back= +face-visibility: hidden; transition: opacity 100ms cubic-bezier(0.165, 0.84= +, 0.44, 1) 0s, z-index 0s ease 100ms, visibility 0s ease 100ms; will-change= +: visibility, z-index, opacity; } + +.s-modal[aria-hidden=3D"false"], .s-modal[aria-hidden=3D"false"] .s-modal--= +dialog { visibility: visible; z-index: 9000; opacity: 1; transform: transla= +te3d(0px, 0px, 0px) scale3d(1, 1, 1); transition: opacity 100ms cubic-bezie= +r(0.165, 0.84, 0.44, 1) 10ms, z-index 0s ease 0s, visibility 0s ease 0s, tr= +ansform 100ms cubic-bezier(0.165, 0.84, 0.44, 1) 10ms, transform 100ms cubi= +c-bezier(0.165, 0.84, 0.44, 1) 10ms; } + +.s-modal--dialog { overflow-y: auto; visibility: hidden; z-index: -1; max-w= +idth: 600px; max-height: 100%; padding: 24px; border-radius: 7px; backgroun= +d-color: var(--white); box-shadow: rgba(0, 0, 0, 0.09) 0px 1px 4px, rgba(0,= + 0, 0, 0.09) 0px 3px 8px, rgba(0, 0, 0, 0.13) 0px 4px 13px; opacity: 0; bac= +kface-visibility: hidden; transform: translate(0px, 30%) scale(0.6, 0.6); t= +ransition: opacity 200ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s, z-index 0s = +ease 100ms, visibility 0s ease 100ms, transform 100ms cubic-bezier(0.165, 0= +.84, 0.44, 1) 0s, transform 100ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; wi= +ll-change: visibility, z-index, opacity, transform; } + +.s-modal[aria-hidden=3D"false"] .s-modal--dialog { transform: translate(0px= +, 0px) scale(1, 1); } + +@supports (display: block) { + .s-modal--dialog { transform: translate3d(0px, 30%, 0px) scale3d(0.6, 0.6= +, 0.6); } + .s-modal[aria-hidden=3D"false"] .s-modal--dialog { transform: translate3d= +(0px, 0px, 0px) scale3d(1, 1, 1); } +} + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-modal--dialog { background-color: var(--black-100); = +} +} + +body.has-darkmode__forced .s-modal--dialog { background-color: var(--black-= +100); } + +.s-modal--close { top: 8px; right: 8px; position: absolute !important; padd= +ing: 12px !important; } + +.s-modal--close .svg-icon { margin: 0px !important; } + +.s-modal--header { margin-bottom: 16px; color: var(--fc-dark); font-size: 2= +.07692rem; } + +.s-modal--body { margin-bottom: 24px; } + +.s-modal--footer { margin-top: 24px; } + +.s-modal.has-danger { background-color: rgba(24, 5, 5, 0.5); } + +.s-modal.has-danger .s-modal--header { color: var(--red-600); } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-modal.has-danger .s-modal--dialog { background-color= +: var(--black-050); } +} + +body.has-darkmode__forced .s-modal.has-danger .s-modal--dialog { background= +-color: var(--black-050); } + +.s-modal__full { max-width: calc(100% - 48px); max-height: calc(100% - 48px= +); } + +.s-page-title { display: flex; flex-direction: row; justify-content: space-= +between; align-items: flex-end; width: 100%; padding-bottom: 16px; border-b= +ottom: 1px solid var(--black-100); margin-bottom: 16px; } + +@media (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-page-title { flex-d= +irection: column; align-items: flex-start; } +} + +@media (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .s-page-title { flex-directi= +on: column; align-items: flex-start; } +} + +.s-page-title h1 { margin-bottom: -4px; font-size: 2.07692rem; color: var(-= +-fc-dark); line-height: 1.15385; font-weight: normal; } + +.s-page-title .s-page-title--description { color: var(--fc-light); margin: = +4px 0px 0px; font-size: 1.15385rem; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-page-title .s-page-= +title--actions { margin-top: 8px; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .s-page-title .s-page-title-= +-actions { margin-top: 8px; } +} + +.s-page-title .s-breadcrumbs { margin-bottom: 8px; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .s-page-title .s-bread= +crumbs { margin-bottom: 2px; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .s-page-title .s-breadcrumbs= + { margin-bottom: 2px; } +} + +.s-popover { display: none; position: absolute; max-width: 24rem; padding: = +12px; z-index: 2000; border-radius: 5px; border: 1px solid var(--black-075)= +; background-color: var(--white); box-shadow: var(--bs-md); color: var(--fc= +-dark); font-size: 13px; min-width: 12rem; width: 100%; } + +.s-popover.s-popover__tooltip { width: auto; min-width: unset; } + +.s-popover.is-visible { display: block; } + +.s-popover[x-placement^=3D"top"] { margin-bottom: 10px; } + +.s-popover[x-placement^=3D"right"] { margin-left: 10px; } + +.s-popover[x-placement^=3D"bottom"] { margin-top: 10px; } + +.s-popover[x-placement^=3D"left"] { margin-right: 10px; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-popover { background-color: var(--black-075); border= +-color: transparent; box-shadow: var(--bs-lg); } +} + +body.has-darkmode__forced .s-popover { background-color: var(--black-075); = +border-color: transparent; box-shadow: var(--bs-lg); } + +.s-popover--close { float: right; top: -8px; right: -8px; padding: 8px !imp= +ortant; } + +.s-popover--arrow, .s-popover--arrow__tl, .s-popover--arrow__tc, .s-popover= +--arrow__tr, .s-popover--arrow__bl, .s-popover--arrow__bc, .s-popover--arro= +w__br, .s-popover--arrow__lt, .s-popover--arrow__lc, .s-popover--arrow__lb,= + .s-popover--arrow__rt, .s-popover--arrow__rc, .s-popover--arrow__rb { colo= +r: var(--white); } + +.s-popover--arrow::before, .s-popover--arrow__tl::before, .s-popover--arrow= +__tc::before, .s-popover--arrow__tr::before, .s-popover--arrow__bl::before,= + .s-popover--arrow__bc::before, .s-popover--arrow__br::before, .s-popover--= +arrow__lt::before, .s-popover--arrow__lc::before, .s-popover--arrow__lb::be= +fore, .s-popover--arrow__rt::before, .s-popover--arrow__rc::before, .s-popo= +ver--arrow__rb::before, .s-popover--arrow::after, .s-popover--arrow__tl::af= +ter, .s-popover--arrow__tc::after, .s-popover--arrow__tr::after, .s-popover= +--arrow__bl::after, .s-popover--arrow__bc::after, .s-popover--arrow__br::af= +ter, .s-popover--arrow__lt::after, .s-popover--arrow__lc::after, .s-popover= +--arrow__lb::after, .s-popover--arrow__rt::after, .s-popover--arrow__rc::af= +ter, .s-popover--arrow__rb::after { content: ""; position: absolute; border= +-width: 8px; border-style: solid; border-color: transparent; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-popover--arrow, body.has-darkmode .s-popover--arrow_= +_tl, body.has-darkmode .s-popover--arrow__tc, body.has-darkmode .s-popover-= +-arrow__tr, body.has-darkmode .s-popover--arrow__bl, body.has-darkmode .s-p= +opover--arrow__bc, body.has-darkmode .s-popover--arrow__br, body.has-darkmo= +de .s-popover--arrow__lt, body.has-darkmode .s-popover--arrow__lc, body.has= +-darkmode .s-popover--arrow__lb, body.has-darkmode .s-popover--arrow__rt, b= +ody.has-darkmode .s-popover--arrow__rc, body.has-darkmode .s-popover--arrow= +__rb { color: var(--black-075); } +} + +body.has-darkmode__forced .s-popover--arrow, body.has-darkmode__forced .s-p= +opover--arrow__tl, body.has-darkmode__forced .s-popover--arrow__tc, body.ha= +s-darkmode__forced .s-popover--arrow__tr, body.has-darkmode__forced .s-popo= +ver--arrow__bl, body.has-darkmode__forced .s-popover--arrow__bc, body.has-d= +arkmode__forced .s-popover--arrow__br, body.has-darkmode__forced .s-popover= +--arrow__lt, body.has-darkmode__forced .s-popover--arrow__lc, body.has-dark= +mode__forced .s-popover--arrow__lb, body.has-darkmode__forced .s-popover--a= +rrow__rt, body.has-darkmode__forced .s-popover--arrow__rc, body.has-darkmod= +e__forced .s-popover--arrow__rb { color: var(--black-075); } + +.s-popover[x-placement^=3D"bottom"] .s-popover--arrow::before, .s-popover--= +arrow__tl::before, .s-popover--arrow__tc::before, .s-popover--arrow__tr::be= +fore, .s-popover[x-placement^=3D"bottom"] .s-popover--arrow::after, .s-popo= +ver--arrow__tl::after, .s-popover--arrow__tc::after, .s-popover--arrow__tr:= +:after { border-top: none; } + +.s-popover[x-placement^=3D"bottom"] .s-popover--arrow::before, .s-popover--= +arrow__tl::before, .s-popover--arrow__tc::before, .s-popover--arrow__tr::be= +fore { top: -8px; border-bottom-color: var(--black-100); } + +.s-popover[x-placement^=3D"bottom"] .s-popover--arrow::after, .s-popover--a= +rrow__tl::after, .s-popover--arrow__tc::after, .s-popover--arrow__tr::after= + { top: -7px; border-bottom-color: currentcolor; } + +.s-popover[x-placement^=3D"top"] .s-popover--arrow::before, .s-popover--arr= +ow__bl::before, .s-popover--arrow__bc::before, .s-popover--arrow__br::befor= +e, .s-popover[x-placement^=3D"top"] .s-popover--arrow::after, .s-popover--a= +rrow__bl::after, .s-popover--arrow__bc::after, .s-popover--arrow__br::after= + { border-bottom: none; } + +.s-popover[x-placement^=3D"top"] .s-popover--arrow::before, .s-popover--arr= +ow__bl::before, .s-popover--arrow__bc::before, .s-popover--arrow__br::befor= +e { bottom: -8px; border-top-color: var(--black-100); } + +.s-popover[x-placement^=3D"top"] .s-popover--arrow::after, .s-popover--arro= +w__bl::after, .s-popover--arrow__bc::after, .s-popover--arrow__br::after { = +bottom: -7px; border-top-color: currentcolor; } + +.s-popover[x-placement=3D"top-start"] .s-popover--arrow::before, .s-popover= +[x-placement=3D"bottom-start"] .s-popover--arrow::before, .s-popover--arrow= +__tl::before, .s-popover--arrow__bl::before, .s-popover[x-placement=3D"top-= +start"] .s-popover--arrow::after, .s-popover[x-placement=3D"bottom-start"] = +.s-popover--arrow::after, .s-popover--arrow__tl::after, .s-popover--arrow__= +bl::after { left: 12px; } + +.s-popover[x-placement=3D"top"] .s-popover--arrow::before, .s-popover[x-pla= +cement=3D"bottom"] .s-popover--arrow::before, .s-popover--arrow__tc::before= +, .s-popover--arrow__bc::before, .s-popover[x-placement=3D"top"] .s-popover= +--arrow::after, .s-popover[x-placement=3D"bottom"] .s-popover--arrow::after= +, .s-popover--arrow__tc::after, .s-popover--arrow__bc::after { left: 50%; m= +argin-left: -8px; } + +.s-popover[x-placement=3D"top-end"] .s-popover--arrow::before, .s-popover[x= +-placement=3D"bottom-end"] .s-popover--arrow::before, .s-popover--arrow__tr= +::before, .s-popover--arrow__br::before, .s-popover[x-placement=3D"top-end"= +] .s-popover--arrow::after, .s-popover[x-placement=3D"bottom-end"] .s-popov= +er--arrow::after, .s-popover--arrow__tr::after, .s-popover--arrow__br::afte= +r { right: 12px; } + +.s-popover[x-placement^=3D"right"] .s-popover--arrow::before, .s-popover--a= +rrow__lt::before, .s-popover--arrow__lc::before, .s-popover--arrow__lb::bef= +ore, .s-popover[x-placement^=3D"right"] .s-popover--arrow::after, .s-popove= +r--arrow__lt::after, .s-popover--arrow__lc::after, .s-popover--arrow__lb::a= +fter { border-left: none; } + +.s-popover[x-placement^=3D"right"] .s-popover--arrow::before, .s-popover--a= +rrow__lt::before, .s-popover--arrow__lc::before, .s-popover--arrow__lb::bef= +ore { left: -8px; border-right-color: var(--black-100); } + +.s-popover[x-placement^=3D"right"] .s-popover--arrow::after, .s-popover--ar= +row__lt::after, .s-popover--arrow__lc::after, .s-popover--arrow__lb::after = +{ left: -7px; border-right-color: currentcolor; } + +.s-popover[x-placement^=3D"left"] .s-popover--arrow::before, .s-popover--ar= +row__rt::before, .s-popover--arrow__rc::before, .s-popover--arrow__rb::befo= +re, .s-popover[x-placement^=3D"left"] .s-popover--arrow::after, .s-popover-= +-arrow__rt::after, .s-popover--arrow__rc::after, .s-popover--arrow__rb::aft= +er { border-right: none; } + +.s-popover[x-placement^=3D"left"] .s-popover--arrow::before, .s-popover--ar= +row__rt::before, .s-popover--arrow__rc::before, .s-popover--arrow__rb::befo= +re { right: -8px; border-left-color: var(--black-100); } + +.s-popover[x-placement^=3D"left"] .s-popover--arrow::after, .s-popover--arr= +ow__rt::after, .s-popover--arrow__rc::after, .s-popover--arrow__rb::after {= + right: -7px; border-left-color: currentcolor; } + +.s-popover[x-placement=3D"left-start"] .s-popover--arrow::before, .s-popove= +r[x-placement=3D"right-start"] .s-popover--arrow::before, .s-popover--arrow= +__lt::before, .s-popover--arrow__rt::before, .s-popover[x-placement=3D"left= +-start"] .s-popover--arrow::after, .s-popover[x-placement=3D"right-start"] = +.s-popover--arrow::after, .s-popover--arrow__lt::after, .s-popover--arrow__= +rt::after { top: 12px; } + +.s-popover[x-placement=3D"left"] .s-popover--arrow::before, .s-popover[x-pl= +acement=3D"right"] .s-popover--arrow::before, .s-popover--arrow__lc::before= +, .s-popover--arrow__rc::before, .s-popover[x-placement=3D"left"] .s-popove= +r--arrow::after, .s-popover[x-placement=3D"right"] .s-popover--arrow::after= +, .s-popover--arrow__lc::after, .s-popover--arrow__rc::after { top: 50%; ma= +rgin-top: -8px; } + +.s-popover[x-placement=3D"left-end"] .s-popover--arrow::before, .s-popover[= +x-placement=3D"right-end"] .s-popover--arrow::before, .s-popover--arrow__lb= +::before, .s-popover--arrow__rb::before, .s-popover[x-placement=3D"left-end= +"] .s-popover--arrow::after, .s-popover[x-placement=3D"right-end"] .s-popov= +er--arrow::after, .s-popover--arrow__lb::after, .s-popover--arrow__rb::afte= +r { bottom: 12px; } + +.s-progress, .s-progress--bar { position: relative; min-height: 4px; border= +-radius: 3px; } + +.s-progress { width: 100%; background-color: var(--black-200); } + +.s-progress--bar { background-color: var(--green-400); } + +.s-progress--label { position: absolute; width: 100%; height: 100%; border-= +radius: 5px; border: 1px solid transparent; font-size: 12px; line-height: 1= +; color: var(--fc-dark); z-index: 2; } + +.s-progress__brand .s-progress--bar { background-color: var(--orange-500); = +} + +.s-progress__info .s-progress--bar { background-color: var(--blue-500); } + +.s-progress__privilege .s-progress--bar { background-color: var(--green-050= +); } + +.s-progress__privilege .s-progress--label { border-color: var(--green-400);= + } + +.s-progress__privilege, .s-progress__privilege .s-progress--bar, .s-progres= +s__badge, .s-progress__badge .s-progress--bar { min-height: 2em; border-rad= +ius: 5px; } + +.s-progress__privilege, .s-progress__badge { background-color: transparent;= + } + +.s-progress__gold .s-progress--bar { background-color: var(--gold-lighter);= + } + +.s-progress__gold .s-progress--label { border-color: var(--gold-darker); } + +.s-progress__silver .s-progress--bar { background-color: var(--silver-light= +er); } + +.s-progress__silver .s-progress--label { border-color: var(--silver-darker)= +; } + +.s-progress__bronze .s-progress--bar { background-color: var(--bronze-light= +er); } + +.s-progress__bronze .s-progress--label { border-color: var(--bronze-darker)= +; } + +.s-progress.s-progress__stepped { background: transparent; display: flex; } + +.s-progress.s-progress__stepped .s-progress--step { display: flex; flex: 1 = +1 0px; flex-direction: column; align-items: center; position: relative; } + +.s-progress.s-progress__stepped .s-progress--label { position: static; disp= +lay: block; width: auto; height: auto; font-size: 13px; border: 0px; border= +-radius: 0px; padding: 12px 6px 0px; text-align: center; color: var(--black= +-200); z-index: 0; } + +.s-progress.s-progress__stepped .s-progress--stop { position: relative; dis= +play: flex; align-items: center; justify-content: center; background: var(-= +-black-200); border-radius: 100%; width: 24px; height: 24px; z-index: 25; c= +olor: var(--white); } + +.s-progress.s-progress__stepped .s-progress--bar { position: absolute; top:= + 9px; height: 6px; background: var(--black-200); z-index: 0; border-radius:= + 0px; } + +.s-progress.s-progress__stepped .s-progress--bar.s-progress--bar__left { le= +ft: 0px; right: 50%; } + +.s-progress.s-progress__stepped .s-progress--bar.s-progress--bar__right { r= +ight: 0px; left: 50%; } + +.s-progress.s-progress__stepped .s-progress--step.is-active .s-progress--ba= +r.s-progress--bar__left { background: var(--blue-500); } + +.s-progress.s-progress__stepped .s-progress--step.is-active .s-progress--st= +op { background: var(--blue-500); box-shadow: 0 0 0 6px var(--focus-ring); = +} + +.s-progress.s-progress__stepped .s-progress--step.is-active .s-progress--la= +bel { color: var(--fc-dark); } + +.s-progress.s-progress__stepped .s-progress--step.is-complete .s-progress--= +bar, .s-progress.s-progress__stepped .s-progress--step.is-complete .s-progr= +ess--stop { background: var(--blue-500); } + +.s-progress.s-progress__stepped .s-progress--step.is-complete .s-progress--= +label { color: var(--fc-dark); } + +.s-spinner { position: relative; width: 24px; height: 24px; text-align: lef= +t; } + +.s-spinner::before, .s-spinner::after { content: ""; position: absolute; wi= +dth: 100%; height: 100%; border: 3px solid currentcolor; border-radius: 50%= +; } + +.s-spinner::before { opacity: 0.25; transform: rotate(90deg); } + +.s-spinner::after { border-top-color: transparent; border-right-color: tran= +sparent; border-bottom-color: transparent; animation: 0.9s cubic-bezier(0.5= +, 0.1, 0.5, 0.9) 0s infinite normal none running s-spinner-rotate; } + +.s-spinner.s-spinner__xs { width: 12px; height: 12px; } + +.s-spinner.s-spinner__xs::before, .s-spinner.s-spinner__xs::after { border-= +width: 1px; } + +.s-spinner.s-spinner__sm { width: 16px; height: 16px; } + +.s-spinner.s-spinner__sm::before, .s-spinner.s-spinner__sm::after { border-= +width: 2px; } + +.s-spinner.s-spinner__md { width: 32px; height: 32px; } + +.s-spinner.s-spinner__md::before, .s-spinner.s-spinner__md::after { border-= +width: 4px; } + +.s-spinner.s-spinner__lg { width: 48px; height: 48px; } + +.s-spinner.s-spinner__lg::before, .s-spinner.s-spinner__lg::after { border-= +width: 6px; } + +@supports (-ms-ime-align:auto) { + .s-spinner, .s-spinner::before, .s-spinner::after { filter: invert(0); tr= +ansform-origin: 50% 50% 1px; } +} + +@media not all and (min-resolution: 0.001dpcm) { + @supports (-webkit-appearance:none) and (stroke-color:transparent) { + .s-spinner, .s-spinner::before, .s-spinner::after { box-shadow: transpare= +nt 0px 0px 0px 2px; } +} +} + +@keyframes s-spinner-rotate {=20 + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.s-table { display: table; width: 100%; max-width: 100%; border-collapse: c= +ollapse; border-spacing: 0px; font-size: 13px; } + +.s-table th, .s-table td { padding: 8px; border-top: 1px solid var(--black-= +100); border-left: 1px solid var(--black-100); border-right: 1px solid var(= +--black-100); vertical-align: middle; color: var(--fc-medium); text-align: = +left; } + +.s-table th.s-table--bulk, .s-table td.s-table--bulk { width: 30px; } + +.s-table th .s-checkbox, .s-table td .s-checkbox { display: block; } + +.s-table th { font-weight: bold; color: var(--fc-dark); } + +.s-table thead th { vertical-align: bottom; white-space: nowrap; background= +-color: var(--black-025); line-height: 1.15385; text-transform: uppercase; = +letter-spacing: 0.05em; } + +.s-table thead th:not(.s-table--bulk) { font-size: 11px; } + +.s-table tbody th { font-weight: normal; } + +.s-table tr:last-of-type td, .s-table tr:last-of-type th { border-bottom: 1= +px solid var(--black-100); } + +.s-table tbody + tbody { border-top: 2px solid var(--black-100); } + +.s-table.va-top th, .s-table.va-top td { vertical-align: top; } + +.s-table.va-middle th, .s-table.va-middle td { vertical-align: middle; } + +.s-table.va-bottom th, .s-table.va-bottom td { vertical-align: bottom; } + +.s-table.ta-left th, .s-table.ta-left td { text-align: left; } + +.s-table.ta-center th, .s-table.ta-center td { text-align: center; } + +.s-table.ta-right th, .s-table.ta-right td { text-align: right; } + +.s-table.ta-justify th, .s-table.ta-justify td { text-align: justify; } + +.s-table.s-table__stripes thead th { background-color: var(--black-050); } + +.s-table.s-table__stripes tbody tr:nth-child(2n) { background-color: var(--= +black-025); } + +.s-table.s-table__sm th, .s-table.s-table__sm td { padding: 4px; } + +.s-table.s-table__lg th, .s-table.s-table__lg td { padding: 12px; } + +.s-table.s-table__b0 th, .s-table.s-table__b0 td, .s-table.s-table__b0 tr:l= +ast-of-type th, .s-table.s-table__b0 tr:last-of-type td { border-color: tra= +nsparent; } + +.s-table.s-table__b0 thead th { background-color: transparent; text-transfo= +rm: initial; font-size: inherit; letter-spacing: initial; } + +.s-table.s-table__b0 tbody + tbody { border-color: transparent; border-widt= +h: 12px; } + +.s-table.s-table__bx tr > :not(:first-child) { border-left-color: transpare= +nt; } + +.s-table.s-table__bx tr > :not(:last-child) { border-right-color: transpare= +nt; } + +.s-table.s-table__bx-simple th, .s-table.s-table__bx-simple td { border-lef= +t-color: transparent; border-right-color: transparent; } + +.s-table.s-table__bx-simple thead th { border-top-color: transparent; borde= +r-bottom-color: var(--black-200); background-color: transparent; text-trans= +form: initial; font-size: inherit; letter-spacing: initial; } + +.s-table.s-table__bx-simple tbody tr:first-of-type th, .s-table.s-table__bx= +-simple tbody tr:first-of-type td { border-top-color: transparent; } + +.s-table.s-table__bx-simple tbody tr:last-of-type th, .s-table.s-table__bx-= +simple tbody tr:last-of-type td { border-bottom-color: transparent; } + +.s-table.s-table__bx-simple tfoot th, .s-table.s-table__bx-simple tfoot td = +{ border-bottom-color: transparent; } + +.s-table .s-table--totals th, .s-table .s-table--totals td { padding-top: 1= +2px; font-size: 1.46154rem; font-weight: bold; } + +.s-table.s-table__sortable thead th { color: var(--fc-light); cursor: point= +er; } + +.s-table.s-table__sortable thead th a { color: inherit; } + +.s-table.s-table__sortable thead th .svg-icon { position: relative; bottom:= + -1px; } + +.s-table.s-table__sortable thead th.is-sorted { color: var(--black-900); } + +.s-table td.s-table--progress { border-right: none; text-align: right; } + +.s-table td.s-table--progress-bar { border-left: none; padding-left: 0px; w= +idth: 120px; } + +.s-table tr.is-disabled { background-color: var(--black-025); } + +.s-table tr.is-disabled th:not(.is-enabled), .s-table tr.is-disabled td:not= +(.is-enabled) { opacity: 0.3; } + +.s-table--cell1 { width: 8.33333%; } + +.s-table--cell2 { width: 16.6667%; } + +.s-table--cell3 { width: 25%; } + +.s-table--cell4 { width: 33.3333%; } + +.s-table--cell5 { width: 41.6667%; } + +.s-table--cell6 { width: 50%; } + +.s-table--cell7 { width: 58.3333%; } + +.s-table--cell8 { width: 66.6667%; } + +.s-table--cell9 { width: 75%; } + +.s-table--cell10 { width: 83.3333%; } + +.s-table--cell11 { width: 91.6667%; } + +.s-table--cell12 { width: 100%; } + +.s-option-toggle .s-radio { position: absolute; left: -999em; opacity: 0; } + +.s-option-toggle .s-option-toggle--option:not(:first-child) { margin-left: = +-1px; } + +.s-option-toggle .s-option-toggle--option:first-of-type .s-label { border-t= +op-left-radius: 3px !important; border-bottom-left-radius: 3px !important; = +} + +.s-option-toggle .s-option-toggle--option:last-of-type .s-label { border-to= +p-right-radius: 3px !important; border-bottom-right-radius: 3px !important;= + } + +.s-option-toggle .s-label { width: 100%; margin: 0px; padding: 0.8em 1em; b= +order: 1px solid rgb(200, 204, 208); background-color: rgb(255, 255, 255); = +font-family: inherit; font-size: inherit; font-weight: 400; line-height: 1;= + text-align: center; cursor: pointer; user-select: none; } + +.s-option-toggle .s-label:hover { background-color: rgba(184, 192, 199, 0.0= +5); } + +.s-option-toggle .s-radio:checked + .s-label { z-index: 25; background-colo= +r: rgb(214, 217, 220); box-shadow: rgba(165, 165, 183, 0.6) 0px 2px 6px 0px= + inset; color: rgb(60, 65, 70); } + +.s-option-toggle.s-option-toggle__primary .s-label:hover { background-color= +: rgb(242, 249, 255); color: rgb(0, 100, 189); } + +.s-option-toggle.s-option-toggle__primary .s-radio:checked + .s-label { bor= +der-color: rgb(0, 119, 204); background-color: rgb(0, 149, 255); box-shadow= +: rgba(10, 113, 192, 0.9) 0px 2px 6px 0px inset; color: rgb(255, 255, 255);= + } + +.s-option-toggle.s-option-toggle__switch .s-radio:checked + .s-label:not(.s= +-label__off) { border-color: rgb(94, 186, 125); background-color: rgb(94, 1= +86, 125); box-shadow: rgba(69, 161, 100, 0.9) 0px 2px 6px 0px inset; color:= + rgb(255, 255, 255); } + +.s-sidebarwidget { position: relative; border: 1px solid var(--black-100); = +border-radius: 3px; box-shadow: var(--bs-sm); font-size: 13px; background-c= +olor: var(--white); } + +.s-sidebarwidget:not(.s-anchors) a:not(.button):not(.s-btn):not(.post-tag):= +not(.s-sidebarwidget--action), .s-sidebarwidget:not(.s-anchors) a:not(.butt= +on):not(.s-btn):not(.post-tag):not(.s-sidebarwidget--action):visited { colo= +r: var(--black-500); } + +.s-sidebarwidget::before { content: ""; display: block; margin-top: -1px; } + +.s-sidebarwidget::after { content: ""; position: absolute; top: -1px; right= +: -1px; left: -1px; height: 5px; border-top: 1px solid var(--black-100); bo= +rder-radius: 3px; pointer-events: none; } + +@supports ((-webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))= + or (clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%))) or (-webkit-c= +lip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)) { + .s-sidebarwidget::after { clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0%= + 50%); border: 1px solid var(--black-100); } +} + +.s-sidebarwidget--header, .s-sidebarwidget--content { border-top: 1px solid= + var(--black-075); } + +.s-sidebarwidget--header:active, .s-sidebarwidget--content:active { outline= +: none; } + +.s-sidebarwidget--header { padding: 12px 15px; background: var(--black-025)= +; color: var(--black-500); font-size: 1.15385rem; font-weight: normal; } + +.s-sidebarwidget--header.s-sidebarwidget__small-bold-text { font-size: 12px= +; font-weight: bold; } + +.s-sidebarwidget--header.s-sidebarwidget__small-bold-text .-action { font-w= +eight: normal; line-height: 15.6px; } + +.s-sidebarwidget--header.s-sidebarwidget__expanding-control { cursor: point= +er; } + +.s-sidebarwidget--header.s-sidebarwidget__expanding-control::before { conte= +nt: ""; float: left; margin-top: calc(0.65em - 5px); margin-right: 12px; bo= +rder-width: 5px 0px 5px 5px; border-style: solid; border-top-color: transpa= +rent; border-right-color: transparent; border-bottom-color: transparent; bo= +rder-image: initial; border-left-color: var(--black-200); transition: trans= +form 0.3s cubic-bezier(0.4, 0.4, 0.6, 1) 0s, -webkit-transform 0.3s cubic-b= +ezier(0.4, 0.4, 0.6, 1) 0s; } + +.s-sidebarwidget--header.s-sidebarwidget__expanding-control[aria-expanded= +=3D"true"]::before { transform: rotate(90deg); } + +.s-sidebarwidget--action { float: right; margin: 0px 0px 4px 8px; color: va= +r(--blue); font-size: 11px; line-height: 19.5px; } + +table.s-sidebarwidget--content.s-sidebarwidget__items { padding: 4px 3px; b= +order-collapse: separate; border-spacing: 12px; } + +table.s-sidebarwidget--content.s-sidebarwidget__items tr.-item { display: t= +able-row; } + +table.s-sidebarwidget--content.s-sidebarwidget__items tr.-item td { padding= +: 0px; } + +.s-sidebarwidget--content:not(table):not(.s-sidebarwidget__items) { display= +: flex; } + +.s-sidebarwidget--content:not(table):not(.s-sidebarwidget__block-items) .s-= +sidebarwidget--item { display: flex; } + +.s-sidebarwidget--content { margin: 0px; padding: 16px 15px; } + +.s-sidebarwidget--content.s-sidebarwidget__items { display: block; padding:= + 4px 15px; } + +.s-sidebarwidget--content.s-sidebarwidget__items.s-sidebarwidget__block-ite= +ms .s-sidebarwidget--item { display: block !important; } + +.s-sidebarwidget--item { margin: 12px 0px; } + +.s-sidebarwidget--item[aria-current=3D"true"], .s-sidebarwidget--item > :fi= +rst-child[aria-current=3D"true"], .s-sidebarwidget--item[aria-current=3D"pa= +ge"], .s-sidebarwidget--item > :first-child[aria-current=3D"page"] { positi= +on: relative; color: var(--black); font-weight: bold; } + +.s-sidebarwidget--item[aria-current=3D"true"]::before, .s-sidebarwidget--it= +em > :first-child[aria-current=3D"true"]::before, .s-sidebarwidget--item[ar= +ia-current=3D"page"]::before, .s-sidebarwidget--item > :first-child[aria-cu= +rrent=3D"page"]::before { content: ""; position: absolute; left: 0px; heigh= +t: calc(100% + 12px); margin-top: -6px; margin-left: -16px; border-left-wid= +th: 3px; border-left-style: solid; } + +.s-sidebarwidget--item[aria-current=3D"true"] a, .s-sidebarwidget--item > := +first-child[aria-current=3D"true"] a, .s-sidebarwidget--item[aria-current= +=3D"page"] a, .s-sidebarwidget--item > :first-child[aria-current=3D"page"] = +a, .s-sidebarwidget--item[aria-current=3D"true"] a:visited, .s-sidebarwidge= +t--item > :first-child[aria-current=3D"true"] a:visited, .s-sidebarwidget--= +item[aria-current=3D"page"] a:visited, .s-sidebarwidget--item > :first-chil= +d[aria-current=3D"page"] a:visited { color: inherit; } + +.s-sidebarwidget--subnav { list-style-type: none; padding-left: 0px; margin= +-left: 8px; } + +.s-sidebarwidget--subnav li { margin-top: 12px; padding-left: 16px; backgro= +und-position: 0px calc((1.2em - 10px) / 2); background-repeat: no-repeat; b= +ackground-size: auto 10px; background-image: url("data:image/svg+xml,%3C?xm= +l%20version%3D%221.0%22%20encoding%3D%22UTF-8%22?%3E%3Csvg%20version%3D%221= +.1%22%20viewBox%3D%220%200%207%2010%22%20xmlns%3D%22http%3A//www.w3.org/200= +0/svg%22%3E%3Cpath%20d%3D%22m0.72153%200.68446%204.1336%204.3077-4.1336%204= +.3077%22%20fill%3D%22none%22%20stroke%3D%22var%28--black-100%29%22%20stroke= +-width%3D%222%22/%3E%3C/svg%3E"); } + +.s-sidebarwidget--subnav li[aria-current=3D"true"], .s-sidebarwidget--subna= +v li[aria-current=3D"page"] { color: var(--black); font-weight: bold; } + +.s-sidebarwidget--subnav li[aria-current=3D"true"] a, .s-sidebarwidget--sub= +nav li[aria-current=3D"page"] a, .s-sidebarwidget--subnav li[aria-current= +=3D"true"] a:visited, .s-sidebarwidget--subnav li[aria-current=3D"page"] a:= +visited { color: inherit; } + +.s-sidebarwidget__blue { border-color: var(--blue-200); background-color: v= +ar(--blue-050); } + +.s-sidebarwidget__blue .s-sidebarwidget--header { background-color: var(--b= +lue-100); color: var(--fc-medium); } + +.s-sidebarwidget__blue .s-sidebarwidget--header, .s-sidebarwidget__blue .s-= +sidebarwidget--content { border-color: var(--blue-200); } + +.s-sidebarwidget__blue::after { border-color: var(--blue-200); } + +.s-sidebarwidget__yellow { border-color: var(--yellow-200); background-colo= +r: var(--yellow-050); } + +.s-sidebarwidget__yellow .s-sidebarwidget--header { background-color: var(-= +-yellow-100); color: var(--fc-medium); } + +.s-sidebarwidget__yellow .s-sidebarwidget--header, .s-sidebarwidget__yellow= + .s-sidebarwidget--content { border-color: var(--yellow-200); } + +.s-sidebarwidget__yellow::after { border-color: var(--yellow-200); } + +.s-sidebarwidget__green { border-color: var(--green-200); background-color:= + var(--green-050); } + +.s-sidebarwidget__green .s-sidebarwidget--header { background-color: var(--= +green-100); color: var(--fc-medium); } + +.s-sidebarwidget__green .s-sidebarwidget--header, .s-sidebarwidget__green .= +s-sidebarwidget--content { border-color: var(--green-200); } + +.s-sidebarwidget__green::after { border-color: var(--green-200); } + +body { --white:#fff; --black:#0c0d0e; --orange:#f48024; --yellow:#fbf2d4; -= +-green:#5eba7d; --blue:#0077cc; --powder:#e1ecf4; --red:#d1383d; --black-02= +5:#fafafb; --black-050:#eff0f1; --black-075:#e4e6e8; --black-100:#d6d9dc; -= +-black-150:#c8ccd0; --black-200:#bbc0c4; --black-300:#9fa6ad; --black-350:#= +9199a1; --black-400:#848d95; --black-500:#6a737c; --black-600:#535a60; --bl= +ack-700:#3c4146; --black-750:#2f3337; --black-800:#242729; --black-900:#0c0= +d0e; --orange-050:#fff7f2; --orange-100:#fee3cf; --orange-200:#fcd0ad; --or= +ange-300:#f7aa6d; --orange-400:#f48024; --orange-500:#f2720c; --orange-600:= +#da670b; --orange-700:#bd5c00; --orange-800:#a35200; --orange-900:#874600; = +--blue-050:#f2f9ff; --blue-100:#cfeafe; --blue-200:#addafc; --blue-300:#6cb= +bf7; --blue-400:#379fef; --blue-500:#0095ff; --blue-600:#0077cc; --blue-700= +:#0064bd; --blue-800:#0054a3; --blue-900:#004487; --powder-050:#f4f8fb; --p= +owder-100:#e1ecf4; --powder-200:#d1e5f1; --powder-300:#b3d3ea; --powder-400= +:#a0c7e4; --powder-500:#7aa7c7; --powder-600:#5b8db1; --powder-700:#39739d;= + --powder-800:#2c5777; --powder-900:#1e3c52; --green-025:#eef8f1; --green-0= +50:#dcf0e2; --green-100:#cae8d4; --green-200:#a6d9b7; --green-300:#82ca9a; = +--green-400:#5eba7d; --green-500:#48a868; --green-600:#3d8f58; --green-700:= +#2f6f44; --green-800:#29603b; --green-900:#1e472c; --yellow-050:#fdf7e3; --= +yellow-100:#fbf2d4; --yellow-200:#f1e5bc; --yellow-300:#e6d178; --yellow-40= +0:#e9c63f; --yellow-500:#ddb624; --yellow-600:#cea51b; --yellow-700:#b89516= +; --yellow-800:#9f8010; --yellow-900:#826a0b; --red-050:#fdf3f4; --red-100:= +#f9d3d7; --red-200:#f4b4bb; --red-300:#e87c87; --red-400:#de535e; --red-500= +:#d1383d; --red-600:#c02d2e; --red-700:#ac2726; --red-800:#942121; --red-90= +0:#7a1819; --gold:#ffcc01; --gold-lighter:#fff4d1; --gold-darker:#f1b600; -= +-silver:#b4b8bc; --silver-lighter:#e8e8e8; --silver-darker:#9a9c9f; --bronz= +e:#caa789; --bronze-lighter:#f2e9e1; --bronze-darker:#ab825f; --fc-dark:#0c= +0d0e; --fc-medium:#3c4146; --fc-light:#6a737c; --focus-ring:rgba(0,149,255,= +0.15); --focus-ring-success:rgba(166,217,183,0.4); --focus-ring-warning:rgb= +a(233,198,63,0.4); --focus-ring-error:rgba(192,45,46,0.15); --focus-ring-mu= +ted:rgba(36,39,41,0.1); --bs-sm:0 1px 2px rgba(0,0,0,0.05),0 1px 4px rgba(0= +,0,0,0.05),0 2px 8px rgba(0,0,0,0.05); --bs-md:0 1px 3px rgba(0,0,0,0.06),0= + 2px 6px rgba(0,0,0,0.06),0 3px 8px rgba(0,0,0,0.09); --bs-lg:0 1px 4px rgb= +a(0,0,0,0.09),0 3px 8px rgba(0,0,0,0.09),0 4px 13px rgba(0,0,0,0.13); --scr= +ollbar:rgba(0,0,0,0.2); } + +@media (prefers-color-scheme: dark) { + body.has-darkmode { --white:#2d2d2d; --black:#fff; --black-025:#393939; -= +-black-050:#3d3d3d; --black-075:#404345; --black-100:#4a4e51; --black-150:#= +555a5e; --black-200:#697075; --black-300:#7d848d; --black-350:#959ca3; --bl= +ack-400:#9fa6ad; --black-500:#acb2b8; --black-600:#c4c8cc; --black-700:#cfd= +2d6; --black-750:#dadee0; --black-800:#e7e8eb; --black-900:#f2f2f3; --orang= +e-050:#473c33; --orange-100:#5e4433; --orange-200:#8d5a2f; --orange-300:#cc= +7525; --orange-400:#f48024; --orange-500:#ff901e; --orange-600:#ffa95e; --o= +range-700:#f8b682; --orange-800:#fcd6b9; --orange-900:#fee7d6; --blue-050:#= +233e52; --blue-100:#25445f; --blue-200:#295070; --blue-300:#2b5f8a; --blue-= +400:#3070ab; --blue-500:#378ad3; --blue-600:#3ca4ff; --blue-700:#81c4f8; --= +blue-800:#b8dffd; --blue-900:#d5ecfd; --powder-050:#414648; --powder-100:#3= +e4a52; --powder-200:#43525f; --powder-300:#4c6071; --powder-400:#577489; --= +powder-500:#688eac; --powder-600:#7badd3; --powder-700:#9cc3db; --powder-80= +0:#cde1ee; --powder-900:#e5f3ff; --green-025:#2e4233; --green-050:#344b3a; = +--green-100:#3d6048; --green-200:#487455; --green-300:#4d815c; --green-400:= +#5a9e6f; --green-500:#63b47c; --green-600:#76c490; --green-700:#93d0a8; --g= +reen-800:#b3dec1; --green-900:#d0eada; --yellow-050:#464236; --yellow-100:#= +524b38; --yellow-200:#675c37; --yellow-300:#7e6f3a; --yellow-400:#9e883b; -= +-yellow-500:#bf9f37; --yellow-600:#dab941; --yellow-700:#f1d056; --yellow-8= +00:#f8df7a; --yellow-900:#fcedaf; --red-050:#572f32; --red-100:#723738; --r= +ed-200:#873f3e; --red-300:#9b4544; --red-400:#b24d49; --red-500:#c4524f; --= +red-600:#d25d5d; --red-700:#de7176; --red-800:#e7929a; --red-900:#f2c1c7; -= +-gold:#ffcc01; --gold-lighter:#5e553c; --gold-darker:#bc8f03; --silver:#b4b= +8bc; --silver-lighter:#424242; --silver-darker:#7b7c7e; --bronze:#caa789; -= +-bronze-lighter:#4d433b; --bronze-darker:#8b684a; --fc-dark:var(--black-900= +); --fc-medium:var(--black-700); --fc-light:var(--black-500); --focus-ring:= +rgba(55,138,211,0.15); --focus-ring-success:rgba(72,116,85,0.4); --focus-ri= +ng-warning:rgba(158,136,59,0.4); --focus-ring-error:rgba(196,82,79,0.3); --= +focus-ring-muted:rgba(231,232,235,0.1); --bs-sm:0 1px 2px rgba(0,0,0,0.1), = +0 1px 4px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1); --bs-md:0 1px 3= +px rgba(0,0,0,0.11), 0 2px 6px rgba(0, 0, 0, 0.11), 0 3px 8px rgba(0, 0, 0,= + 0.14); --bs-lg:0 1px 4px rgba(0,0,0,0.14), 0 3px 8px rgba(0, 0, 0, 0.14), = +0 4px 13px rgba(0, 0, 0, 0.18); --scrollbar:rgba(255,255,255,0.2); } +} + +body.has-darkmode__forced { --white:#2d2d2d; --black:#fff; --black-025:#393= +939; --black-050:#3d3d3d; --black-075:#404345; --black-100:#4a4e51; --black= +-150:#555a5e; --black-200:#697075; --black-300:#7d848d; --black-350:#959ca3= +; --black-400:#9fa6ad; --black-500:#acb2b8; --black-600:#c4c8cc; --black-70= +0:#cfd2d6; --black-750:#dadee0; --black-800:#e7e8eb; --black-900:#f2f2f3; -= +-orange-050:#473c33; --orange-100:#5e4433; --orange-200:#8d5a2f; --orange-3= +00:#cc7525; --orange-400:#f48024; --orange-500:#ff901e; --orange-600:#ffa95= +e; --orange-700:#f8b682; --orange-800:#fcd6b9; --orange-900:#fee7d6; --blue= +-050:#233e52; --blue-100:#25445f; --blue-200:#295070; --blue-300:#2b5f8a; -= +-blue-400:#3070ab; --blue-500:#378ad3; --blue-600:#3ca4ff; --blue-700:#81c4= +f8; --blue-800:#b8dffd; --blue-900:#d5ecfd; --powder-050:#414648; --powder-= +100:#3e4a52; --powder-200:#43525f; --powder-300:#4c6071; --powder-400:#5774= +89; --powder-500:#688eac; --powder-600:#7badd3; --powder-700:#9cc3db; --pow= +der-800:#cde1ee; --powder-900:#e5f3ff; --green-025:#2e4233; --green-050:#34= +4b3a; --green-100:#3d6048; --green-200:#487455; --green-300:#4d815c; --gree= +n-400:#5a9e6f; --green-500:#63b47c; --green-600:#76c490; --green-700:#93d0a= +8; --green-800:#b3dec1; --green-900:#d0eada; --yellow-050:#464236; --yellow= +-100:#524b38; --yellow-200:#675c37; --yellow-300:#7e6f3a; --yellow-400:#9e8= +83b; --yellow-500:#bf9f37; --yellow-600:#dab941; --yellow-700:#f1d056; --ye= +llow-800:#f8df7a; --yellow-900:#fcedaf; --red-050:#572f32; --red-100:#72373= +8; --red-200:#873f3e; --red-300:#9b4544; --red-400:#b24d49; --red-500:#c452= +4f; --red-600:#d25d5d; --red-700:#de7176; --red-800:#e7929a; --red-900:#f2c= +1c7; --gold:#ffcc01; --gold-lighter:#5e553c; --gold-darker:#bc8f03; --silve= +r:#b4b8bc; --silver-lighter:#424242; --silver-darker:#7b7c7e; --bronze:#caa= +789; --bronze-lighter:#4d433b; --bronze-darker:#8b684a; --fc-dark:var(--bla= +ck-900); --fc-medium:var(--black-700); --fc-light:var(--black-500); --focus= +-ring:rgba(55,138,211,0.15); --focus-ring-success:rgba(72,116,85,0.4); --fo= +cus-ring-warning:rgba(158,136,59,0.4); --focus-ring-error:rgba(196,82,79,0.= +3); --focus-ring-muted:rgba(231,232,235,0.1); --bs-sm:0 1px 2px rgba(0,0,0,= +0.1), 0 1px 4px rgba(0, 0, 0, 0.1), 0 2px 8px rgba(0, 0, 0, 0.1); --bs-md:0= + 1px 3px rgba(0,0,0,0.11), 0 2px 6px rgba(0, 0, 0, 0.11), 0 3px 8px rgba(0,= + 0, 0, 0.14); --bs-lg:0 1px 4px rgba(0,0,0,0.14), 0 3px 8px rgba(0, 0, 0, 0= +.14), 0 4px 13px rgba(0, 0, 0, 0.18); --scrollbar:rgba(255,255,255,0.2); } + +.ba { border-style: solid !important; border-width: 1px !important; } + +.bt { border-top-style: solid !important; border-top-width: 1px !important;= + } + +.br { border-right-style: solid !important; border-right-width: 1px !import= +ant; } + +.bb { border-bottom-style: solid !important; border-bottom-width: 1px !impo= +rtant; } + +.bl { border-left-style: solid !important; border-left-width: 1px !importan= +t; } + +.bx { border-left-style: solid !important; border-right-style: solid !impor= +tant; border-right-width: 1px !important; border-left-width: 1px !important= +; } + +.by { border-top-style: solid !important; border-bottom-style: solid !impor= +tant; border-top-width: 1px !important; border-bottom-width: 1px !important= +; } + +.baw0 { border-width: 0px !important; } + +.baw1 { border-width: 1px !important; } + +.baw2 { border-width: 2px !important; } + +.baw3 { border-width: 4px !important; } + +.btw0 { border-top-width: 0px !important; } + +.btw1 { border-top-width: 1px !important; } + +.btw2 { border-top-width: 2px !important; } + +.btw3 { border-top-width: 4px !important; } + +.brw0 { border-right-width: 0px !important; } + +.brw1 { border-right-width: 1px !important; } + +.brw2 { border-right-width: 2px !important; } + +.brw3 { border-right-width: 4px !important; } + +.bbw0 { border-bottom-width: 0px !important; } + +.bbw1 { border-bottom-width: 1px !important; } + +.bbw2 { border-bottom-width: 2px !important; } + +.bbw3 { border-bottom-width: 4px !important; } + +.blw0 { border-left-width: 0px !important; } + +.blw0 { border-left-width: 0px !important; } + +.blw1 { border-left-width: 1px !important; } + +.blw2 { border-left-width: 2px !important; } + +.blw3 { border-left-width: 4px !important; } + +.byw0 { border-top-width: 0px !important; border-bottom-width: 0px !importa= +nt; } + +.byw1 { border-top-width: 1px !important; border-bottom-width: 1px !importa= +nt; } + +.byw2 { border-top-width: 2px !important; border-bottom-width: 2px !importa= +nt; } + +.byw3 { border-top-width: 4px !important; border-bottom-width: 4px !importa= +nt; } + +.bxw0 { border-right-width: 0px !important; border-left-width: 0px !importa= +nt; } + +.bxw1 { border-right-width: 1px !important; border-left-width: 1px !importa= +nt; } + +.bxw2 { border-right-width: 2px !important; border-left-width: 2px !importa= +nt; } + +.bxw3 { border-right-width: 4px !important; border-left-width: 4px !importa= +nt; } + +.bas-solid { border-style: solid !important; } + +.bas-dashed { border-style: dashed !important; } + +.bts-solid { border-top-style: solid !important; } + +.bts-dashed { border-top-style: dashed !important; } + +.brs-solid { border-right-style: solid !important; } + +.brs-dashed { border-right-style: dashed !important; } + +.bbs-solid { border-bottom-style: solid !important; } + +.bbs-dashed { border-bottom-style: dashed !important; } + +.bls-solid { border-left-style: solid !important; } + +.bls-dashed { border-left-style: dashed !important; } + +.bar-sm { border-radius: 3px !important; } + +.bar-md { border-radius: 5px !important; } + +.bar-lg { border-radius: 7px !important; } + +.bar-circle { border-radius: 100% !important; } + +.bar-pill { border-radius: 1000px !important; } + +.btlr0 { border-top-left-radius: 0px !important; } + +.btlr-sm { border-top-left-radius: 3px !important; } + +.btlr-md { border-top-left-radius: 5px !important; } + +.btlr-lg { border-top-left-radius: 7px !important; } + +.btrr0 { border-top-right-radius: 0px !important; } + +.btrr-sm { border-top-right-radius: 3px !important; } + +.btrr-md { border-top-right-radius: 5px !important; } + +.btrr-lg { border-top-right-radius: 7px !important; } + +.bblr0 { border-bottom-left-radius: 0px !important; } + +.bblr-sm { border-bottom-left-radius: 3px !important; } + +.bblr-md { border-bottom-left-radius: 5px !important; } + +.bblr-lg { border-bottom-left-radius: 7px !important; } + +.bbrr0 { border-bottom-right-radius: 0px !important; } + +.bbrr-sm { border-bottom-right-radius: 3px !important; } + +.bbrr-md { border-bottom-right-radius: 5px !important; } + +.bbrr-lg { border-bottom-right-radius: 7px !important; } + +.btr0 { border-top-left-radius: 0px !important; border-top-right-radius: 0p= +x !important; } + +.btr-sm { border-top-left-radius: 3px !important; border-top-right-radius: = +3px !important; } + +.btr-md { border-top-left-radius: 5px !important; border-top-right-radius: = +5px !important; } + +.btr-lg { border-top-left-radius: 7px !important; border-top-right-radius: = +7px !important; } + +.brr0 { border-top-right-radius: 0px !important; border-bottom-right-radius= +: 0px !important; } + +.brr-sm { border-top-right-radius: 3px !important; border-bottom-right-radi= +us: 3px !important; } + +.brr-md { border-top-right-radius: 5px !important; border-bottom-right-radi= +us: 5px !important; } + +.brr-lg { border-top-right-radius: 7px !important; border-bottom-right-radi= +us: 7px !important; } + +.bbr0 { border-bottom-left-radius: 0px !important; border-bottom-right-radi= +us: 0px !important; } + +.bbr-sm { border-bottom-left-radius: 3px !important; border-bottom-right-ra= +dius: 3px !important; } + +.bbr-md { border-bottom-left-radius: 5px !important; border-bottom-right-ra= +dius: 5px !important; } + +.bbr-lg { border-bottom-left-radius: 7px !important; border-bottom-right-ra= +dius: 7px !important; } + +.blr0 { border-top-left-radius: 0px !important; border-bottom-left-radius: = +0px !important; } + +.blr-sm { border-top-left-radius: 3px !important; border-bottom-left-radius= +: 3px !important; } + +.blr-md { border-top-left-radius: 5px !important; border-bottom-left-radius= +: 5px !important; } + +.blr-lg { border-top-left-radius: 7px !important; border-bottom-left-radius= +: 7px !important; } + +.bar0 { border-radius: 0px !important; } + +.bc-white-1 { border-color: var(--black-500) !important; } + +.bc-white-2 { border-color: var(--black-300) !important; } + +.bc-white-3, .bc-white { border-color: var(--white) !important; } + +.bc-black-1 { border-color: var(--black-050) !important; } + +.bc-black-2 { border-color: var(--black-075) !important; } + +.bc-black-3 { border-color: var(--black-100) !important; } + +.bc-black-4 { border-color: var(--black-200) !important; } + +.bc-black-5 { border-color: var(--black-300) !important; } + +.bc-black-6 { border-color: var(--black-400) !important; } + +.bc-black-7 { border-color: var(--black-500) !important; } + +.bc-black-8 { border-color: var(--black-700) !important; } + +.bc-black-9 { border-color: var(--black-800) !important; } + +.bc-black-10 { border-color: var(--black-900) !important; } + +.bc-orange-1 { border-color: var(--orange-100) !important; } + +.bc-orange-2 { border-color: var(--orange-400) !important; } + +.bc-orange-3 { border-color: var(--orange-600) !important; } + +.bc-blue-1 { border-color: var(--blue-100) !important; } + +.bc-blue-2 { border-color: var(--blue-400) !important; } + +.bc-blue-3 { border-color: var(--blue-600) !important; } + +.bc-powder-1 { border-color: var(--powder-100) !important; } + +.bc-powder-2 { border-color: var(--powder-400) !important; } + +.bc-powder-3 { border-color: var(--powder-600) !important; } + +.bc-green-1 { border-color: var(--green-100) !important; } + +.bc-green-2, .bc-success { border-color: var(--green-400) !important; } + +.bc-green-3 { border-color: var(--green-600) !important; } + +.bc-red-1 { border-color: var(--red-100) !important; } + +.bc-red-2, .bc-danger, .bc-error { border-color: var(--red-400) !important= +; } + +.bc-red-3 { border-color: var(--red-600) !important; } + +.bc-yellow-1 { border-color: var(--yellow-200) !important; } + +.bc-yellow-2 { border-color: var(--yellow-400) !important; } + +.bc-yellow-3, .bc-warning { border-color: var(--yellow-600) !important; } + +.bc-transparent { border-color: transparent !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bc-transparent { border-color: transparent !importa= +nt; } +} + +body.has-darkmode__forced .d\:bc-transparent { border-color: transparent !i= +mportant; } + +.fc-black-900, .h\:fc-black-900:hover, .f\:fc-black-900:focus { color: var(= +--black-900) !important; } + +.f\:fc-black-900:focus-within { color: var(--black-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-900 { color: var(--black-900) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-900 { color: var(--black-900) !impo= +rtant; } + +.bg-black-900, .h\:bg-black-900:hover, .f\:bg-black-900:focus { background-= +color: var(--black-900) !important; } + +.f\:bg-black-900:focus-within { background-color: var(--black-900) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-900 { background-color: var(--black-900) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-900 { background-color: var(--black-= +900) !important; } + +.fc-black-800, .h\:fc-black-800:hover, .f\:fc-black-800:focus { color: var(= +--black-800) !important; } + +.f\:fc-black-800:focus-within { color: var(--black-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-800 { color: var(--black-800) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-800 { color: var(--black-800) !impo= +rtant; } + +.bg-black-800, .h\:bg-black-800:hover, .f\:bg-black-800:focus { background-= +color: var(--black-800) !important; } + +.f\:bg-black-800:focus-within { background-color: var(--black-800) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-800 { background-color: var(--black-800) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-800 { background-color: var(--black-= +800) !important; } + +.fc-black-700, .h\:fc-black-700:hover, .f\:fc-black-700:focus { color: var(= +--black-700) !important; } + +.f\:fc-black-700:focus-within { color: var(--black-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-700 { color: var(--black-700) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-700 { color: var(--black-700) !impo= +rtant; } + +.bg-black-700, .h\:bg-black-700:hover, .f\:bg-black-700:focus { background-= +color: var(--black-700) !important; } + +.f\:bg-black-700:focus-within { background-color: var(--black-700) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-700 { background-color: var(--black-700) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-700 { background-color: var(--black-= +700) !important; } + +.fc-black-600, .h\:fc-black-600:hover, .f\:fc-black-600:focus { color: var(= +--black-600) !important; } + +.f\:fc-black-600:focus-within { color: var(--black-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-600 { color: var(--black-600) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-600 { color: var(--black-600) !impo= +rtant; } + +.bg-black-600, .h\:bg-black-600:hover, .f\:bg-black-600:focus { background-= +color: var(--black-600) !important; } + +.f\:bg-black-600:focus-within { background-color: var(--black-600) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-600 { background-color: var(--black-600) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-600 { background-color: var(--black-= +600) !important; } + +.fc-black-500, .h\:fc-black-500:hover, .f\:fc-black-500:focus { color: var(= +--black-500) !important; } + +.f\:fc-black-500:focus-within { color: var(--black-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-500 { color: var(--black-500) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-500 { color: var(--black-500) !impo= +rtant; } + +.bg-black-500, .h\:bg-black-500:hover, .f\:bg-black-500:focus { background-= +color: var(--black-500) !important; } + +.f\:bg-black-500:focus-within { background-color: var(--black-500) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-500 { background-color: var(--black-500) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-500 { background-color: var(--black-= +500) !important; } + +.fc-black-400, .h\:fc-black-400:hover, .f\:fc-black-400:focus { color: var(= +--black-400) !important; } + +.f\:fc-black-400:focus-within { color: var(--black-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-400 { color: var(--black-400) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-400 { color: var(--black-400) !impo= +rtant; } + +.bg-black-400, .h\:bg-black-400:hover, .f\:bg-black-400:focus { background-= +color: var(--black-400) !important; } + +.f\:bg-black-400:focus-within { background-color: var(--black-400) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-400 { background-color: var(--black-400) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-400 { background-color: var(--black-= +400) !important; } + +.fc-black-300, .h\:fc-black-300:hover, .f\:fc-black-300:focus { color: var(= +--black-300) !important; } + +.f\:fc-black-300:focus-within { color: var(--black-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-300 { color: var(--black-300) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-300 { color: var(--black-300) !impo= +rtant; } + +.bg-black-300, .h\:bg-black-300:hover, .f\:bg-black-300:focus { background-= +color: var(--black-300) !important; } + +.f\:bg-black-300:focus-within { background-color: var(--black-300) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-300 { background-color: var(--black-300) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-300 { background-color: var(--black-= +300) !important; } + +.fc-black-200, .h\:fc-black-200:hover, .f\:fc-black-200:focus { color: var(= +--black-200) !important; } + +.f\:fc-black-200:focus-within { color: var(--black-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-200 { color: var(--black-200) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-200 { color: var(--black-200) !impo= +rtant; } + +.bg-black-200, .h\:bg-black-200:hover, .f\:bg-black-200:focus { background-= +color: var(--black-200) !important; } + +.f\:bg-black-200:focus-within { background-color: var(--black-200) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-200 { background-color: var(--black-200) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-200 { background-color: var(--black-= +200) !important; } + +.fc-black-100, .h\:fc-black-100:hover, .f\:fc-black-100:focus { color: var(= +--black-100) !important; } + +.f\:fc-black-100:focus-within { color: var(--black-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-100 { color: var(--black-100) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-100 { color: var(--black-100) !impo= +rtant; } + +.bg-black-100, .h\:bg-black-100:hover, .f\:bg-black-100:focus { background-= +color: var(--black-100) !important; } + +.f\:bg-black-100:focus-within { background-color: var(--black-100) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-100 { background-color: var(--black-100) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-100 { background-color: var(--black-= +100) !important; } + +.fc-black-050, .h\:fc-black-050:hover, .f\:fc-black-050:focus { color: var(= +--black-050) !important; } + +.f\:fc-black-050:focus-within { color: var(--black-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-050 { color: var(--black-050) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-050 { color: var(--black-050) !impo= +rtant; } + +.bg-black-050, .h\:bg-black-050:hover, .f\:bg-black-050:focus { background-= +color: var(--black-050) !important; } + +.f\:bg-black-050:focus-within { background-color: var(--black-050) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-050 { background-color: var(--black-050) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-050 { background-color: var(--black-= +050) !important; } + +.fc-orange-900, .h\:fc-orange-900:hover, .f\:fc-orange-900:focus { color: v= +ar(--orange-900) !important; } + +.f\:fc-orange-900:focus-within { color: var(--orange-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-900 { color: var(--orange-900) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-900 { color: var(--orange-900) !im= +portant; } + +.bg-orange-900, .h\:bg-orange-900:hover, .f\:bg-orange-900:focus { backgrou= +nd-color: var(--orange-900) !important; } + +.f\:bg-orange-900:focus-within { background-color: var(--orange-900) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-900 { background-color: var(--orange-900)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-900 { background-color: var(--orang= +e-900) !important; } + +.fc-orange-800, .h\:fc-orange-800:hover, .f\:fc-orange-800:focus { color: v= +ar(--orange-800) !important; } + +.f\:fc-orange-800:focus-within { color: var(--orange-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-800 { color: var(--orange-800) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-800 { color: var(--orange-800) !im= +portant; } + +.bg-orange-800, .h\:bg-orange-800:hover, .f\:bg-orange-800:focus { backgrou= +nd-color: var(--orange-800) !important; } + +.f\:bg-orange-800:focus-within { background-color: var(--orange-800) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-800 { background-color: var(--orange-800)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-800 { background-color: var(--orang= +e-800) !important; } + +.fc-orange-700, .h\:fc-orange-700:hover, .f\:fc-orange-700:focus { color: v= +ar(--orange-700) !important; } + +.f\:fc-orange-700:focus-within { color: var(--orange-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-700 { color: var(--orange-700) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-700 { color: var(--orange-700) !im= +portant; } + +.bg-orange-700, .h\:bg-orange-700:hover, .f\:bg-orange-700:focus { backgrou= +nd-color: var(--orange-700) !important; } + +.f\:bg-orange-700:focus-within { background-color: var(--orange-700) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-700 { background-color: var(--orange-700)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-700 { background-color: var(--orang= +e-700) !important; } + +.fc-orange-600, .h\:fc-orange-600:hover, .f\:fc-orange-600:focus { color: v= +ar(--orange-600) !important; } + +.f\:fc-orange-600:focus-within { color: var(--orange-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-600 { color: var(--orange-600) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-600 { color: var(--orange-600) !im= +portant; } + +.bg-orange-600, .h\:bg-orange-600:hover, .f\:bg-orange-600:focus { backgrou= +nd-color: var(--orange-600) !important; } + +.f\:bg-orange-600:focus-within { background-color: var(--orange-600) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-600 { background-color: var(--orange-600)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-600 { background-color: var(--orang= +e-600) !important; } + +.fc-orange-500, .h\:fc-orange-500:hover, .f\:fc-orange-500:focus { color: v= +ar(--orange-500) !important; } + +.f\:fc-orange-500:focus-within { color: var(--orange-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-500 { color: var(--orange-500) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-500 { color: var(--orange-500) !im= +portant; } + +.bg-orange-500, .h\:bg-orange-500:hover, .f\:bg-orange-500:focus { backgrou= +nd-color: var(--orange-500) !important; } + +.f\:bg-orange-500:focus-within { background-color: var(--orange-500) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-500 { background-color: var(--orange-500)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-500 { background-color: var(--orang= +e-500) !important; } + +.fc-orange-400, .h\:fc-orange-400:hover, .f\:fc-orange-400:focus { color: v= +ar(--orange-400) !important; } + +.f\:fc-orange-400:focus-within { color: var(--orange-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-400 { color: var(--orange-400) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-400 { color: var(--orange-400) !im= +portant; } + +.bg-orange-400, .h\:bg-orange-400:hover, .f\:bg-orange-400:focus { backgrou= +nd-color: var(--orange-400) !important; } + +.f\:bg-orange-400:focus-within { background-color: var(--orange-400) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-400 { background-color: var(--orange-400)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-400 { background-color: var(--orang= +e-400) !important; } + +.fc-orange-300, .h\:fc-orange-300:hover, .f\:fc-orange-300:focus { color: v= +ar(--orange-300) !important; } + +.f\:fc-orange-300:focus-within { color: var(--orange-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-300 { color: var(--orange-300) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-300 { color: var(--orange-300) !im= +portant; } + +.bg-orange-300, .h\:bg-orange-300:hover, .f\:bg-orange-300:focus { backgrou= +nd-color: var(--orange-300) !important; } + +.f\:bg-orange-300:focus-within { background-color: var(--orange-300) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-300 { background-color: var(--orange-300)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-300 { background-color: var(--orang= +e-300) !important; } + +.fc-orange-200, .h\:fc-orange-200:hover, .f\:fc-orange-200:focus { color: v= +ar(--orange-200) !important; } + +.f\:fc-orange-200:focus-within { color: var(--orange-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-200 { color: var(--orange-200) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-200 { color: var(--orange-200) !im= +portant; } + +.bg-orange-200, .h\:bg-orange-200:hover, .f\:bg-orange-200:focus { backgrou= +nd-color: var(--orange-200) !important; } + +.f\:bg-orange-200:focus-within { background-color: var(--orange-200) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-200 { background-color: var(--orange-200)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-200 { background-color: var(--orang= +e-200) !important; } + +.fc-orange-100, .h\:fc-orange-100:hover, .f\:fc-orange-100:focus { color: v= +ar(--orange-100) !important; } + +.f\:fc-orange-100:focus-within { color: var(--orange-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-100 { color: var(--orange-100) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-100 { color: var(--orange-100) !im= +portant; } + +.bg-orange-100, .h\:bg-orange-100:hover, .f\:bg-orange-100:focus { backgrou= +nd-color: var(--orange-100) !important; } + +.f\:bg-orange-100:focus-within { background-color: var(--orange-100) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-100 { background-color: var(--orange-100)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-100 { background-color: var(--orang= +e-100) !important; } + +.fc-orange-050, .h\:fc-orange-050:hover, .f\:fc-orange-050:focus { color: v= +ar(--orange-050) !important; } + +.f\:fc-orange-050:focus-within { color: var(--orange-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-orange-050 { color: var(--orange-050) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-orange-050 { color: var(--orange-050) !im= +portant; } + +.bg-orange-050, .h\:bg-orange-050:hover, .f\:bg-orange-050:focus { backgrou= +nd-color: var(--orange-050) !important; } + +.f\:bg-orange-050:focus-within { background-color: var(--orange-050) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-orange-050 { background-color: var(--orange-050)= + !important; } +} + +body.has-darkmode__forced .d\:bg-orange-050 { background-color: var(--orang= +e-050) !important; } + +.fc-blue-900, .h\:fc-blue-900:hover, .f\:fc-blue-900:focus { color: var(--b= +lue-900) !important; } + +.f\:fc-blue-900:focus-within { color: var(--blue-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-900 { color: var(--blue-900) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-900 { color: var(--blue-900) !import= +ant; } + +.bg-blue-900, .h\:bg-blue-900:hover, .f\:bg-blue-900:focus { background-col= +or: var(--blue-900) !important; } + +.f\:bg-blue-900:focus-within { background-color: var(--blue-900) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-900 { background-color: var(--blue-900) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-900 { background-color: var(--blue-90= +0) !important; } + +.fc-blue-800, .h\:fc-blue-800:hover, .f\:fc-blue-800:focus { color: var(--b= +lue-800) !important; } + +.f\:fc-blue-800:focus-within { color: var(--blue-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-800 { color: var(--blue-800) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-800 { color: var(--blue-800) !import= +ant; } + +.bg-blue-800, .h\:bg-blue-800:hover, .f\:bg-blue-800:focus { background-col= +or: var(--blue-800) !important; } + +.f\:bg-blue-800:focus-within { background-color: var(--blue-800) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-800 { background-color: var(--blue-800) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-800 { background-color: var(--blue-80= +0) !important; } + +.fc-blue-700, .h\:fc-blue-700:hover, .f\:fc-blue-700:focus { color: var(--b= +lue-700) !important; } + +.f\:fc-blue-700:focus-within { color: var(--blue-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-700 { color: var(--blue-700) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-700 { color: var(--blue-700) !import= +ant; } + +.bg-blue-700, .h\:bg-blue-700:hover, .f\:bg-blue-700:focus { background-col= +or: var(--blue-700) !important; } + +.f\:bg-blue-700:focus-within { background-color: var(--blue-700) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-700 { background-color: var(--blue-700) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-700 { background-color: var(--blue-70= +0) !important; } + +.fc-blue-600, .h\:fc-blue-600:hover, .f\:fc-blue-600:focus { color: var(--b= +lue-600) !important; } + +.f\:fc-blue-600:focus-within { color: var(--blue-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-600 { color: var(--blue-600) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-600 { color: var(--blue-600) !import= +ant; } + +.bg-blue-600, .h\:bg-blue-600:hover, .f\:bg-blue-600:focus { background-col= +or: var(--blue-600) !important; } + +.f\:bg-blue-600:focus-within { background-color: var(--blue-600) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-600 { background-color: var(--blue-600) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-600 { background-color: var(--blue-60= +0) !important; } + +.fc-blue-500, .h\:fc-blue-500:hover, .f\:fc-blue-500:focus { color: var(--b= +lue-500) !important; } + +.f\:fc-blue-500:focus-within { color: var(--blue-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-500 { color: var(--blue-500) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-500 { color: var(--blue-500) !import= +ant; } + +.bg-blue-500, .h\:bg-blue-500:hover, .f\:bg-blue-500:focus { background-col= +or: var(--blue-500) !important; } + +.f\:bg-blue-500:focus-within { background-color: var(--blue-500) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-500 { background-color: var(--blue-500) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-500 { background-color: var(--blue-50= +0) !important; } + +.fc-blue-400, .h\:fc-blue-400:hover, .f\:fc-blue-400:focus { color: var(--b= +lue-400) !important; } + +.f\:fc-blue-400:focus-within { color: var(--blue-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-400 { color: var(--blue-400) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-400 { color: var(--blue-400) !import= +ant; } + +.bg-blue-400, .h\:bg-blue-400:hover, .f\:bg-blue-400:focus { background-col= +or: var(--blue-400) !important; } + +.f\:bg-blue-400:focus-within { background-color: var(--blue-400) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-400 { background-color: var(--blue-400) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-400 { background-color: var(--blue-40= +0) !important; } + +.fc-blue-300, .h\:fc-blue-300:hover, .f\:fc-blue-300:focus { color: var(--b= +lue-300) !important; } + +.f\:fc-blue-300:focus-within { color: var(--blue-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-300 { color: var(--blue-300) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-300 { color: var(--blue-300) !import= +ant; } + +.bg-blue-300, .h\:bg-blue-300:hover, .f\:bg-blue-300:focus { background-col= +or: var(--blue-300) !important; } + +.f\:bg-blue-300:focus-within { background-color: var(--blue-300) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-300 { background-color: var(--blue-300) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-300 { background-color: var(--blue-30= +0) !important; } + +.fc-blue-200, .h\:fc-blue-200:hover, .f\:fc-blue-200:focus { color: var(--b= +lue-200) !important; } + +.f\:fc-blue-200:focus-within { color: var(--blue-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-200 { color: var(--blue-200) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-200 { color: var(--blue-200) !import= +ant; } + +.bg-blue-200, .h\:bg-blue-200:hover, .f\:bg-blue-200:focus { background-col= +or: var(--blue-200) !important; } + +.f\:bg-blue-200:focus-within { background-color: var(--blue-200) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-200 { background-color: var(--blue-200) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-200 { background-color: var(--blue-20= +0) !important; } + +.fc-blue-100, .h\:fc-blue-100:hover, .f\:fc-blue-100:focus { color: var(--b= +lue-100) !important; } + +.f\:fc-blue-100:focus-within { color: var(--blue-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-100 { color: var(--blue-100) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-100 { color: var(--blue-100) !import= +ant; } + +.bg-blue-100, .h\:bg-blue-100:hover, .f\:bg-blue-100:focus { background-col= +or: var(--blue-100) !important; } + +.f\:bg-blue-100:focus-within { background-color: var(--blue-100) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-100 { background-color: var(--blue-100) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-100 { background-color: var(--blue-10= +0) !important; } + +.fc-blue-050, .h\:fc-blue-050:hover, .f\:fc-blue-050:focus { color: var(--b= +lue-050) !important; } + +.f\:fc-blue-050:focus-within { color: var(--blue-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-blue-050 { color: var(--blue-050) !important; } +} + +body.has-darkmode__forced .d\:fc-blue-050 { color: var(--blue-050) !import= +ant; } + +.bg-blue-050, .h\:bg-blue-050:hover, .f\:bg-blue-050:focus { background-col= +or: var(--blue-050) !important; } + +.f\:bg-blue-050:focus-within { background-color: var(--blue-050) !importan= +t; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-blue-050 { background-color: var(--blue-050) !i= +mportant; } +} + +body.has-darkmode__forced .d\:bg-blue-050 { background-color: var(--blue-05= +0) !important; } + +.fc-powder-900, .h\:fc-powder-900:hover, .f\:fc-powder-900:focus { color: v= +ar(--powder-900) !important; } + +.f\:fc-powder-900:focus-within { color: var(--powder-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-900 { color: var(--powder-900) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-900 { color: var(--powder-900) !im= +portant; } + +.bg-powder-900, .h\:bg-powder-900:hover, .f\:bg-powder-900:focus { backgrou= +nd-color: var(--powder-900) !important; } + +.f\:bg-powder-900:focus-within { background-color: var(--powder-900) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-900 { background-color: var(--powder-900)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-900 { background-color: var(--powde= +r-900) !important; } + +.fc-powder-800, .h\:fc-powder-800:hover, .f\:fc-powder-800:focus { color: v= +ar(--powder-800) !important; } + +.f\:fc-powder-800:focus-within { color: var(--powder-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-800 { color: var(--powder-800) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-800 { color: var(--powder-800) !im= +portant; } + +.bg-powder-800, .h\:bg-powder-800:hover, .f\:bg-powder-800:focus { backgrou= +nd-color: var(--powder-800) !important; } + +.f\:bg-powder-800:focus-within { background-color: var(--powder-800) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-800 { background-color: var(--powder-800)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-800 { background-color: var(--powde= +r-800) !important; } + +.fc-powder-700, .h\:fc-powder-700:hover, .f\:fc-powder-700:focus { color: v= +ar(--powder-700) !important; } + +.f\:fc-powder-700:focus-within { color: var(--powder-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-700 { color: var(--powder-700) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-700 { color: var(--powder-700) !im= +portant; } + +.bg-powder-700, .h\:bg-powder-700:hover, .f\:bg-powder-700:focus { backgrou= +nd-color: var(--powder-700) !important; } + +.f\:bg-powder-700:focus-within { background-color: var(--powder-700) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-700 { background-color: var(--powder-700)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-700 { background-color: var(--powde= +r-700) !important; } + +.fc-powder-600, .h\:fc-powder-600:hover, .f\:fc-powder-600:focus { color: v= +ar(--powder-600) !important; } + +.f\:fc-powder-600:focus-within { color: var(--powder-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-600 { color: var(--powder-600) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-600 { color: var(--powder-600) !im= +portant; } + +.bg-powder-600, .h\:bg-powder-600:hover, .f\:bg-powder-600:focus { backgrou= +nd-color: var(--powder-600) !important; } + +.f\:bg-powder-600:focus-within { background-color: var(--powder-600) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-600 { background-color: var(--powder-600)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-600 { background-color: var(--powde= +r-600) !important; } + +.fc-powder-500, .h\:fc-powder-500:hover, .f\:fc-powder-500:focus { color: v= +ar(--powder-500) !important; } + +.f\:fc-powder-500:focus-within { color: var(--powder-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-500 { color: var(--powder-500) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-500 { color: var(--powder-500) !im= +portant; } + +.bg-powder-500, .h\:bg-powder-500:hover, .f\:bg-powder-500:focus { backgrou= +nd-color: var(--powder-500) !important; } + +.f\:bg-powder-500:focus-within { background-color: var(--powder-500) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-500 { background-color: var(--powder-500)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-500 { background-color: var(--powde= +r-500) !important; } + +.fc-powder-400, .h\:fc-powder-400:hover, .f\:fc-powder-400:focus { color: v= +ar(--powder-400) !important; } + +.f\:fc-powder-400:focus-within { color: var(--powder-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-400 { color: var(--powder-400) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-400 { color: var(--powder-400) !im= +portant; } + +.bg-powder-400, .h\:bg-powder-400:hover, .f\:bg-powder-400:focus { backgrou= +nd-color: var(--powder-400) !important; } + +.f\:bg-powder-400:focus-within { background-color: var(--powder-400) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-400 { background-color: var(--powder-400)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-400 { background-color: var(--powde= +r-400) !important; } + +.fc-powder-300, .h\:fc-powder-300:hover, .f\:fc-powder-300:focus { color: v= +ar(--powder-300) !important; } + +.f\:fc-powder-300:focus-within { color: var(--powder-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-300 { color: var(--powder-300) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-300 { color: var(--powder-300) !im= +portant; } + +.bg-powder-300, .h\:bg-powder-300:hover, .f\:bg-powder-300:focus { backgrou= +nd-color: var(--powder-300) !important; } + +.f\:bg-powder-300:focus-within { background-color: var(--powder-300) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-300 { background-color: var(--powder-300)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-300 { background-color: var(--powde= +r-300) !important; } + +.fc-powder-200, .h\:fc-powder-200:hover, .f\:fc-powder-200:focus { color: v= +ar(--powder-200) !important; } + +.f\:fc-powder-200:focus-within { color: var(--powder-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-200 { color: var(--powder-200) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-200 { color: var(--powder-200) !im= +portant; } + +.bg-powder-200, .h\:bg-powder-200:hover, .f\:bg-powder-200:focus { backgrou= +nd-color: var(--powder-200) !important; } + +.f\:bg-powder-200:focus-within { background-color: var(--powder-200) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-200 { background-color: var(--powder-200)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-200 { background-color: var(--powde= +r-200) !important; } + +.fc-powder-100, .h\:fc-powder-100:hover, .f\:fc-powder-100:focus { color: v= +ar(--powder-100) !important; } + +.f\:fc-powder-100:focus-within { color: var(--powder-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-100 { color: var(--powder-100) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-100 { color: var(--powder-100) !im= +portant; } + +.bg-powder-100, .h\:bg-powder-100:hover, .f\:bg-powder-100:focus { backgrou= +nd-color: var(--powder-100) !important; } + +.f\:bg-powder-100:focus-within { background-color: var(--powder-100) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-100 { background-color: var(--powder-100)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-100 { background-color: var(--powde= +r-100) !important; } + +.fc-powder-050, .h\:fc-powder-050:hover, .f\:fc-powder-050:focus { color: v= +ar(--powder-050) !important; } + +.f\:fc-powder-050:focus-within { color: var(--powder-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-powder-050 { color: var(--powder-050) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-powder-050 { color: var(--powder-050) !im= +portant; } + +.bg-powder-050, .h\:bg-powder-050:hover, .f\:bg-powder-050:focus { backgrou= +nd-color: var(--powder-050) !important; } + +.f\:bg-powder-050:focus-within { background-color: var(--powder-050) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-powder-050 { background-color: var(--powder-050)= + !important; } +} + +body.has-darkmode__forced .d\:bg-powder-050 { background-color: var(--powde= +r-050) !important; } + +.fc-green-900, .h\:fc-green-900:hover, .f\:fc-green-900:focus { color: var(= +--green-900) !important; } + +.f\:fc-green-900:focus-within { color: var(--green-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-900 { color: var(--green-900) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-900 { color: var(--green-900) !impo= +rtant; } + +.bg-green-900, .h\:bg-green-900:hover, .f\:bg-green-900:focus { background-= +color: var(--green-900) !important; } + +.f\:bg-green-900:focus-within { background-color: var(--green-900) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-900 { background-color: var(--green-900) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-900 { background-color: var(--green-= +900) !important; } + +.fc-green-800, .h\:fc-green-800:hover, .f\:fc-green-800:focus { color: var(= +--green-800) !important; } + +.f\:fc-green-800:focus-within { color: var(--green-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-800 { color: var(--green-800) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-800 { color: var(--green-800) !impo= +rtant; } + +.bg-green-800, .h\:bg-green-800:hover, .f\:bg-green-800:focus { background-= +color: var(--green-800) !important; } + +.f\:bg-green-800:focus-within { background-color: var(--green-800) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-800 { background-color: var(--green-800) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-800 { background-color: var(--green-= +800) !important; } + +.fc-green-700, .h\:fc-green-700:hover, .f\:fc-green-700:focus { color: var(= +--green-700) !important; } + +.f\:fc-green-700:focus-within { color: var(--green-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-700 { color: var(--green-700) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-700 { color: var(--green-700) !impo= +rtant; } + +.bg-green-700, .h\:bg-green-700:hover, .f\:bg-green-700:focus { background-= +color: var(--green-700) !important; } + +.f\:bg-green-700:focus-within { background-color: var(--green-700) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-700 { background-color: var(--green-700) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-700 { background-color: var(--green-= +700) !important; } + +.fc-green-600, .h\:fc-green-600:hover, .f\:fc-green-600:focus, .fc-success = +{ color: var(--green-600) !important; } + +.f\:fc-green-600:focus-within { color: var(--green-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-600 { color: var(--green-600) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-600 { color: var(--green-600) !impo= +rtant; } + +.bg-green-600, .h\:bg-green-600:hover, .f\:bg-green-600:focus { background-= +color: var(--green-600) !important; } + +.f\:bg-green-600:focus-within { background-color: var(--green-600) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-600 { background-color: var(--green-600) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-600 { background-color: var(--green-= +600) !important; } + +.fc-green-500, .h\:fc-green-500:hover, .f\:fc-green-500:focus { color: var(= +--green-500) !important; } + +.f\:fc-green-500:focus-within { color: var(--green-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-500 { color: var(--green-500) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-500 { color: var(--green-500) !impo= +rtant; } + +.bg-green-500, .h\:bg-green-500:hover, .f\:bg-green-500:focus, .bg-success = +{ background-color: var(--green-500) !important; } + +.f\:bg-green-500:focus-within { background-color: var(--green-500) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-500 { background-color: var(--green-500) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-500 { background-color: var(--green-= +500) !important; } + +.fc-green-400, .h\:fc-green-400:hover, .f\:fc-green-400:focus { color: var(= +--green-400) !important; } + +.f\:fc-green-400:focus-within { color: var(--green-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-400 { color: var(--green-400) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-400 { color: var(--green-400) !impo= +rtant; } + +.bg-green-400, .h\:bg-green-400:hover, .f\:bg-green-400:focus { background-= +color: var(--green-400) !important; } + +.f\:bg-green-400:focus-within { background-color: var(--green-400) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-400 { background-color: var(--green-400) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-400 { background-color: var(--green-= +400) !important; } + +.fc-green-300, .h\:fc-green-300:hover, .f\:fc-green-300:focus { color: var(= +--green-300) !important; } + +.f\:fc-green-300:focus-within { color: var(--green-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-300 { color: var(--green-300) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-300 { color: var(--green-300) !impo= +rtant; } + +.bg-green-300, .h\:bg-green-300:hover, .f\:bg-green-300:focus { background-= +color: var(--green-300) !important; } + +.f\:bg-green-300:focus-within { background-color: var(--green-300) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-300 { background-color: var(--green-300) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-300 { background-color: var(--green-= +300) !important; } + +.fc-green-200, .h\:fc-green-200:hover, .f\:fc-green-200:focus { color: var(= +--green-200) !important; } + +.f\:fc-green-200:focus-within { color: var(--green-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-200 { color: var(--green-200) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-200 { color: var(--green-200) !impo= +rtant; } + +.bg-green-200, .h\:bg-green-200:hover, .f\:bg-green-200:focus { background-= +color: var(--green-200) !important; } + +.f\:bg-green-200:focus-within { background-color: var(--green-200) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-200 { background-color: var(--green-200) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-200 { background-color: var(--green-= +200) !important; } + +.fc-green-100, .h\:fc-green-100:hover, .f\:fc-green-100:focus { color: var(= +--green-100) !important; } + +.f\:fc-green-100:focus-within { color: var(--green-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-100 { color: var(--green-100) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-100 { color: var(--green-100) !impo= +rtant; } + +.bg-green-100, .h\:bg-green-100:hover, .f\:bg-green-100:focus { background-= +color: var(--green-100) !important; } + +.f\:bg-green-100:focus-within { background-color: var(--green-100) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-100 { background-color: var(--green-100) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-100 { background-color: var(--green-= +100) !important; } + +.fc-green-050, .h\:fc-green-050:hover, .f\:fc-green-050:focus { color: var(= +--green-050) !important; } + +.f\:fc-green-050:focus-within { color: var(--green-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-050 { color: var(--green-050) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-050 { color: var(--green-050) !impo= +rtant; } + +.bg-green-050, .h\:bg-green-050:hover, .f\:bg-green-050:focus { background-= +color: var(--green-050) !important; } + +.f\:bg-green-050:focus-within { background-color: var(--green-050) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-050 { background-color: var(--green-050) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-050 { background-color: var(--green-= +050) !important; } + +.fc-yellow-900, .h\:fc-yellow-900:hover, .f\:fc-yellow-900:focus { color: v= +ar(--yellow-900) !important; } + +.f\:fc-yellow-900:focus-within { color: var(--yellow-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-900 { color: var(--yellow-900) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-900 { color: var(--yellow-900) !im= +portant; } + +.bg-yellow-900, .h\:bg-yellow-900:hover, .f\:bg-yellow-900:focus { backgrou= +nd-color: var(--yellow-900) !important; } + +.f\:bg-yellow-900:focus-within { background-color: var(--yellow-900) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-900 { background-color: var(--yellow-900)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-900 { background-color: var(--yello= +w-900) !important; } + +.fc-yellow-800, .h\:fc-yellow-800:hover, .f\:fc-yellow-800:focus { color: v= +ar(--yellow-800) !important; } + +.f\:fc-yellow-800:focus-within { color: var(--yellow-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-800 { color: var(--yellow-800) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-800 { color: var(--yellow-800) !im= +portant; } + +.bg-yellow-800, .h\:bg-yellow-800:hover, .f\:bg-yellow-800:focus { backgrou= +nd-color: var(--yellow-800) !important; } + +.f\:bg-yellow-800:focus-within { background-color: var(--yellow-800) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-800 { background-color: var(--yellow-800)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-800 { background-color: var(--yello= +w-800) !important; } + +.fc-yellow-700, .h\:fc-yellow-700:hover, .f\:fc-yellow-700:focus { color: v= +ar(--yellow-700) !important; } + +.f\:fc-yellow-700:focus-within { color: var(--yellow-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-700 { color: var(--yellow-700) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-700 { color: var(--yellow-700) !im= +portant; } + +.bg-yellow-700, .h\:bg-yellow-700:hover, .f\:bg-yellow-700:focus { backgrou= +nd-color: var(--yellow-700) !important; } + +.f\:bg-yellow-700:focus-within { background-color: var(--yellow-700) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-700 { background-color: var(--yellow-700)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-700 { background-color: var(--yello= +w-700) !important; } + +.fc-yellow-600, .h\:fc-yellow-600:hover, .f\:fc-yellow-600:focus, .fc-warni= +ng { color: var(--yellow-600) !important; } + +.f\:fc-yellow-600:focus-within { color: var(--yellow-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-600 { color: var(--yellow-600) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-600 { color: var(--yellow-600) !im= +portant; } + +.bg-yellow-600, .h\:bg-yellow-600:hover, .f\:bg-yellow-600:focus, .bg-warni= +ng { background-color: var(--yellow-600) !important; } + +.f\:bg-yellow-600:focus-within { background-color: var(--yellow-600) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-600 { background-color: var(--yellow-600)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-600 { background-color: var(--yello= +w-600) !important; } + +.fc-yellow-500, .h\:fc-yellow-500:hover, .f\:fc-yellow-500:focus { color: v= +ar(--yellow-500) !important; } + +.f\:fc-yellow-500:focus-within { color: var(--yellow-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-500 { color: var(--yellow-500) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-500 { color: var(--yellow-500) !im= +portant; } + +.bg-yellow-500, .h\:bg-yellow-500:hover, .f\:bg-yellow-500:focus { backgrou= +nd-color: var(--yellow-500) !important; } + +.f\:bg-yellow-500:focus-within { background-color: var(--yellow-500) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-500 { background-color: var(--yellow-500)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-500 { background-color: var(--yello= +w-500) !important; } + +.fc-yellow-400, .h\:fc-yellow-400:hover, .f\:fc-yellow-400:focus { color: v= +ar(--yellow-400) !important; } + +.f\:fc-yellow-400:focus-within { color: var(--yellow-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-400 { color: var(--yellow-400) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-400 { color: var(--yellow-400) !im= +portant; } + +.bg-yellow-400, .h\:bg-yellow-400:hover, .f\:bg-yellow-400:focus { backgrou= +nd-color: var(--yellow-400) !important; } + +.f\:bg-yellow-400:focus-within { background-color: var(--yellow-400) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-400 { background-color: var(--yellow-400)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-400 { background-color: var(--yello= +w-400) !important; } + +.fc-yellow-300, .h\:fc-yellow-300:hover, .f\:fc-yellow-300:focus { color: v= +ar(--yellow-300) !important; } + +.f\:fc-yellow-300:focus-within { color: var(--yellow-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-300 { color: var(--yellow-300) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-300 { color: var(--yellow-300) !im= +portant; } + +.bg-yellow-300, .h\:bg-yellow-300:hover, .f\:bg-yellow-300:focus { backgrou= +nd-color: var(--yellow-300) !important; } + +.f\:bg-yellow-300:focus-within { background-color: var(--yellow-300) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-300 { background-color: var(--yellow-300)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-300 { background-color: var(--yello= +w-300) !important; } + +.fc-yellow-200, .h\:fc-yellow-200:hover, .f\:fc-yellow-200:focus { color: v= +ar(--yellow-200) !important; } + +.f\:fc-yellow-200:focus-within { color: var(--yellow-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-200 { color: var(--yellow-200) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-200 { color: var(--yellow-200) !im= +portant; } + +.bg-yellow-200, .h\:bg-yellow-200:hover, .f\:bg-yellow-200:focus { backgrou= +nd-color: var(--yellow-200) !important; } + +.f\:bg-yellow-200:focus-within { background-color: var(--yellow-200) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-200 { background-color: var(--yellow-200)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-200 { background-color: var(--yello= +w-200) !important; } + +.fc-yellow-100, .h\:fc-yellow-100:hover, .f\:fc-yellow-100:focus { color: v= +ar(--yellow-100) !important; } + +.f\:fc-yellow-100:focus-within { color: var(--yellow-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-100 { color: var(--yellow-100) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-100 { color: var(--yellow-100) !im= +portant; } + +.bg-yellow-100, .h\:bg-yellow-100:hover, .f\:bg-yellow-100:focus { backgrou= +nd-color: var(--yellow-100) !important; } + +.f\:bg-yellow-100:focus-within { background-color: var(--yellow-100) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-100 { background-color: var(--yellow-100)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-100 { background-color: var(--yello= +w-100) !important; } + +.fc-yellow-050, .h\:fc-yellow-050:hover, .f\:fc-yellow-050:focus { color: v= +ar(--yellow-050) !important; } + +.f\:fc-yellow-050:focus-within { color: var(--yellow-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-yellow-050 { color: var(--yellow-050) !importan= +t; } +} + +body.has-darkmode__forced .d\:fc-yellow-050 { color: var(--yellow-050) !im= +portant; } + +.bg-yellow-050, .h\:bg-yellow-050:hover, .f\:bg-yellow-050:focus { backgrou= +nd-color: var(--yellow-050) !important; } + +.f\:bg-yellow-050:focus-within { background-color: var(--yellow-050) !impo= +rtant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-yellow-050 { background-color: var(--yellow-050)= + !important; } +} + +body.has-darkmode__forced .d\:bg-yellow-050 { background-color: var(--yello= +w-050) !important; } + +.fc-red-900, .h\:fc-red-900:hover, .f\:fc-red-900:focus { color: var(--red-= +900) !important; } + +.f\:fc-red-900:focus-within { color: var(--red-900) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-900 { color: var(--red-900) !important; } +} + +body.has-darkmode__forced .d\:fc-red-900 { color: var(--red-900) !importan= +t; } + +.bg-red-900, .h\:bg-red-900:hover, .f\:bg-red-900:focus { background-color:= + var(--red-900) !important; } + +.f\:bg-red-900:focus-within { background-color: var(--red-900) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-900 { background-color: var(--red-900) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-900 { background-color: var(--red-900)= + !important; } + +.fc-red-800, .h\:fc-red-800:hover, .f\:fc-red-800:focus { color: var(--red-= +800) !important; } + +.f\:fc-red-800:focus-within { color: var(--red-800) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-800 { color: var(--red-800) !important; } +} + +body.has-darkmode__forced .d\:fc-red-800 { color: var(--red-800) !importan= +t; } + +.bg-red-800, .h\:bg-red-800:hover, .f\:bg-red-800:focus { background-color:= + var(--red-800) !important; } + +.f\:bg-red-800:focus-within { background-color: var(--red-800) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-800 { background-color: var(--red-800) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-800 { background-color: var(--red-800)= + !important; } + +.fc-red-700, .h\:fc-red-700:hover, .f\:fc-red-700:focus { color: var(--red-= +700) !important; } + +.f\:fc-red-700:focus-within { color: var(--red-700) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-700 { color: var(--red-700) !important; } +} + +body.has-darkmode__forced .d\:fc-red-700 { color: var(--red-700) !importan= +t; } + +.bg-red-700, .h\:bg-red-700:hover, .f\:bg-red-700:focus { background-color:= + var(--red-700) !important; } + +.f\:bg-red-700:focus-within { background-color: var(--red-700) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-700 { background-color: var(--red-700) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-700 { background-color: var(--red-700)= + !important; } + +.fc-red-600, .h\:fc-red-600:hover, .f\:fc-red-600:focus { color: var(--red-= +600) !important; } + +.f\:fc-red-600:focus-within { color: var(--red-600) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-600 { color: var(--red-600) !important; } +} + +body.has-darkmode__forced .d\:fc-red-600 { color: var(--red-600) !importan= +t; } + +.bg-red-600, .h\:bg-red-600:hover, .f\:bg-red-600:focus { background-color:= + var(--red-600) !important; } + +.f\:bg-red-600:focus-within { background-color: var(--red-600) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-600 { background-color: var(--red-600) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-600 { background-color: var(--red-600)= + !important; } + +.fc-red-500, .h\:fc-red-500:hover, .f\:fc-red-500:focus, .fc-error, .fc-dan= +ger { color: var(--red-500) !important; } + +.f\:fc-red-500:focus-within { color: var(--red-500) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-500 { color: var(--red-500) !important; } +} + +body.has-darkmode__forced .d\:fc-red-500 { color: var(--red-500) !importan= +t; } + +.bg-red-500, .h\:bg-red-500:hover, .f\:bg-red-500:focus, .bg-error, .bg-dan= +ger { background-color: var(--red-500) !important; } + +.f\:bg-red-500:focus-within { background-color: var(--red-500) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-500 { background-color: var(--red-500) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-500 { background-color: var(--red-500)= + !important; } + +.fc-red-400, .h\:fc-red-400:hover, .f\:fc-red-400:focus { color: var(--red-= +400) !important; } + +.f\:fc-red-400:focus-within { color: var(--red-400) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-400 { color: var(--red-400) !important; } +} + +body.has-darkmode__forced .d\:fc-red-400 { color: var(--red-400) !importan= +t; } + +.bg-red-400, .h\:bg-red-400:hover, .f\:bg-red-400:focus { background-color:= + var(--red-400) !important; } + +.f\:bg-red-400:focus-within { background-color: var(--red-400) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-400 { background-color: var(--red-400) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-400 { background-color: var(--red-400)= + !important; } + +.fc-red-300, .h\:fc-red-300:hover, .f\:fc-red-300:focus { color: var(--red-= +300) !important; } + +.f\:fc-red-300:focus-within { color: var(--red-300) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-300 { color: var(--red-300) !important; } +} + +body.has-darkmode__forced .d\:fc-red-300 { color: var(--red-300) !importan= +t; } + +.bg-red-300, .h\:bg-red-300:hover, .f\:bg-red-300:focus { background-color:= + var(--red-300) !important; } + +.f\:bg-red-300:focus-within { background-color: var(--red-300) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-300 { background-color: var(--red-300) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-300 { background-color: var(--red-300)= + !important; } + +.fc-red-200, .h\:fc-red-200:hover, .f\:fc-red-200:focus { color: var(--red-= +200) !important; } + +.f\:fc-red-200:focus-within { color: var(--red-200) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-200 { color: var(--red-200) !important; } +} + +body.has-darkmode__forced .d\:fc-red-200 { color: var(--red-200) !importan= +t; } + +.bg-red-200, .h\:bg-red-200:hover, .f\:bg-red-200:focus { background-color:= + var(--red-200) !important; } + +.f\:bg-red-200:focus-within { background-color: var(--red-200) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-200 { background-color: var(--red-200) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-200 { background-color: var(--red-200)= + !important; } + +.fc-red-100, .h\:fc-red-100:hover, .f\:fc-red-100:focus { color: var(--red-= +100) !important; } + +.f\:fc-red-100:focus-within { color: var(--red-100) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-100 { color: var(--red-100) !important; } +} + +body.has-darkmode__forced .d\:fc-red-100 { color: var(--red-100) !importan= +t; } + +.bg-red-100, .h\:bg-red-100:hover, .f\:bg-red-100:focus { background-color:= + var(--red-100) !important; } + +.f\:bg-red-100:focus-within { background-color: var(--red-100) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-100 { background-color: var(--red-100) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-100 { background-color: var(--red-100)= + !important; } + +.fc-red-050, .h\:fc-red-050:hover, .f\:fc-red-050:focus { color: var(--red-= +050) !important; } + +.f\:fc-red-050:focus-within { color: var(--red-050) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-red-050 { color: var(--red-050) !important; } +} + +body.has-darkmode__forced .d\:fc-red-050 { color: var(--red-050) !importan= +t; } + +.bg-red-050, .h\:bg-red-050:hover, .f\:bg-red-050:focus { background-color:= + var(--red-050) !important; } + +.f\:bg-red-050:focus-within { background-color: var(--red-050) !important;= + } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-red-050 { background-color: var(--red-050) !imp= +ortant; } +} + +body.has-darkmode__forced .d\:bg-red-050 { background-color: var(--red-050)= + !important; } + +.fc-white, .h\:fc-white:hover, .f\:fc-white:focus { color: var(--white) !i= +mportant; } + +.f\:fc-white:focus-within { color: var(--white) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-white { color: var(--white) !important; } +} + +body.has-darkmode__forced .d\:fc-white { color: var(--white) !important; } + +.bg-white, .h\:bg-white:hover, .f\:bg-white:focus { background-color: var(-= +-white) !important; } + +.f\:bg-white:focus-within { background-color: var(--white) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-white { background-color: var(--white) !importa= +nt; } +} + +body.has-darkmode__forced .d\:bg-white { background-color: var(--white) !i= +mportant; } + +.fc-black-750, .h\:fc-black-750:hover, .f\:fc-black-750:focus { color: var(= +--black-750) !important; } + +.f\:fc-black-750:focus-within { color: var(--black-750) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-750 { color: var(--black-750) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-750 { color: var(--black-750) !impo= +rtant; } + +.bg-black-750, .h\:bg-black-750:hover, .f\:bg-black-750:focus { background-= +color: var(--black-750) !important; } + +.f\:bg-black-750:focus-within { background-color: var(--black-750) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-750 { background-color: var(--black-750) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-750 { background-color: var(--black-= +750) !important; } + +.fc-black-350, .h\:fc-black-350:hover, .f\:fc-black-350:focus { color: var(= +--black-350) !important; } + +.f\:fc-black-350:focus-within { color: var(--black-350) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-350 { color: var(--black-350) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-350 { color: var(--black-350) !impo= +rtant; } + +.bg-black-350, .h\:bg-black-350:hover, .f\:bg-black-350:focus { background-= +color: var(--black-350) !important; } + +.f\:bg-black-350:focus-within { background-color: var(--black-350) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-350 { background-color: var(--black-350) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-350 { background-color: var(--black-= +350) !important; } + +.fc-black-150, .h\:fc-black-150:hover, .f\:fc-black-150:focus { color: var(= +--black-150) !important; } + +.f\:fc-black-150:focus-within { color: var(--black-150) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-150 { color: var(--black-150) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-150 { color: var(--black-150) !impo= +rtant; } + +.bg-black-150, .h\:bg-black-150:hover, .f\:bg-black-150:focus { background-= +color: var(--black-150) !important; } + +.f\:bg-black-150:focus-within { background-color: var(--black-150) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-150 { background-color: var(--black-150) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-150 { background-color: var(--black-= +150) !important; } + +.fc-black-075, .h\:fc-black-075:hover, .f\:fc-black-075:focus { color: var(= +--black-075) !important; } + +.f\:fc-black-075:focus-within { color: var(--black-075) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-075 { color: var(--black-075) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-075 { color: var(--black-075) !impo= +rtant; } + +.bg-black-075, .h\:bg-black-075:hover, .f\:bg-black-075:focus { background-= +color: var(--black-075) !important; } + +.f\:bg-black-075:focus-within { background-color: var(--black-075) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-075 { background-color: var(--black-075) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-075 { background-color: var(--black-= +075) !important; } + +.fc-black-025, .h\:fc-black-025:hover, .f\:fc-black-025:focus { color: var(= +--black-025) !important; } + +.f\:fc-black-025:focus-within { color: var(--black-025) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-black-025 { color: var(--black-025) !important;= + } +} + +body.has-darkmode__forced .d\:fc-black-025 { color: var(--black-025) !impo= +rtant; } + +.bg-black-025, .h\:bg-black-025:hover, .f\:bg-black-025:focus { background-= +color: var(--black-025) !important; } + +.f\:bg-black-025:focus-within { background-color: var(--black-025) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-black-025 { background-color: var(--black-025) = +!important; } +} + +body.has-darkmode__forced .d\:bg-black-025 { background-color: var(--black-= +025) !important; } + +.fc-green-025, .h\:fc-green-025:hover, .f\:fc-green-025:focus { color: var(= +--green-025) !important; } + +.f\:fc-green-025:focus-within { color: var(--green-025) !important; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:fc-green-025 { color: var(--green-025) !important;= + } +} + +body.has-darkmode__forced .d\:fc-green-025 { color: var(--green-025) !impo= +rtant; } + +.bg-green-025, .h\:bg-green-025:hover, .f\:bg-green-025:focus { background-= +color: var(--green-025) !important; } + +.f\:bg-green-025:focus-within { background-color: var(--green-025) !import= +ant; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .d\:bg-green-025 { background-color: var(--green-025) = +!important; } +} + +body.has-darkmode__forced .d\:bg-green-025 { background-color: var(--green-= +025) !important; } + +.bg-transparent { background-color: transparent !important; background-imag= +e: none !important; } + +.fd-row { flex-direction: row !important; } + +.fd-row-reverse { flex-direction: row-reverse !important; } + +.fd-column { flex-direction: column !important; } + +.fd-column-reverse { flex-direction: column-reverse !important; } + +.fw-wrap { flex-wrap: wrap !important; } + +.fw-reverse { flex-wrap: wrap-reverse !important; } + +.fw-nowrap { flex-wrap: nowrap !important; } + +.ff-row-wrap { flex-flow: row wrap !important; } + +.ff-row-nowrap { flex-flow: row nowrap !important; } + +.ff-row-reverse-wrap { flex-flow: row-reverse wrap !important; } + +.ff-row-reverse-nowrap { flex-flow: row-reverse nowrap !important; } + +.ff-column-wrap { flex-flow: column wrap !important; } + +.ff-column-nowrap { flex-flow: column nowrap !important; } + +.ff-column-reverse-wrap { flex-flow: column-reverse wrap !important; } + +.ff-column-reverse-nowrap { flex-flow: column-reverse nowrap !important; } + +.jc-center { justify-content: center !important; } + +.jc-end { justify-content: flex-end !important; } + +.jc-space-around { justify-content: space-around !important; } + +.jc-space-between { justify-content: space-between !important; } + +.jc-space-evenly { justify-content: space-evenly !important; } + +.jc-start { justify-content: flex-start !important; } + +.ac-center { align-content: center !important; } + +.ac-end { align-content: flex-end !important; } + +.ac-space-around { align-content: space-around !important; } + +.ac-space-between { align-content: space-between !important; } + +.ac-start { align-content: flex-start !important; } + +.ac-stretch { align-content: stretch !important; } + +.ai-baseline { align-items: baseline !important; } + +.ai-center { align-items: center !important; } + +.ai-end { align-items: flex-end !important; } + +.ai-start { align-items: flex-start !important; } + +.ai-stretch { align-items: stretch !important; } + +.grid__center { justify-content: center !important; align-items: center !im= +portant; } + +.as-auto { align-self: auto !important; } + +.as-baseline { align-self: baseline !important; } + +.as-center { align-self: center !important; } + +.as-end { align-self: flex-end !important; } + +.as-start { align-self: flex-start !important; } + +.as-stretch { align-self: stretch !important; } + +.fl0 { flex: 0 1 auto !important; } + +.fl1 { flex: 1 1 auto !important; } + +.fl2 { flex: 2 1 auto !important; } + +.fl3 { flex: 3 1 auto !important; } + +.fl4 { flex: 4 1 auto !important; } + +.fl5 { flex: 5 1 auto !important; } + +.fl-shrink0 { flex-shrink: 0; } + +.fl-shrink1 { flex-shrink: 1; } + +.fl-shrink2 { flex-shrink: 2; } + +.fl-shrink3 { flex-shrink: 3; } + +.fl-shrink4 { flex-shrink: 4; } + +.fl-shrink5 { flex-shrink: 5; } + +.fl-grow0 { flex-grow: 0; } + +.fl-grow1 { flex-grow: 1; } + +.fl-grow2 { flex-grow: 2; } + +.fl-grow3 { flex-grow: 3; } + +.fl-grow4 { flex-grow: 4; } + +.fl-grow5 { flex-grow: 5; } + +.fl-equal { flex: 1 1 0px; } + +.order-first { order: -1 !important; } + +.order-last { order: 1 !important; } + +.grid { display: flex; } + +.grid__fl0, .grid__fl0 > .grid, .grid__fl0 > .grid--cell { flex: 0 1 auto; = +} + +.grid__fl1, .grid__fl1 > .grid, .grid__fl1 > .grid--cell { flex: 1 1 auto; = +} + +.grid--cell1 { flex-basis: 8.33333%; } + +.grid--cell2 { flex-basis: 16.6667%; } + +.grid--cell3 { flex-basis: 25%; } + +.grid--cell4 { flex-basis: 33.3333%; } + +.grid--cell5 { flex-basis: 41.6667%; } + +.grid--cell6 { flex-basis: 50%; } + +.grid--cell7 { flex-basis: 58.3333%; } + +.grid--cell8 { flex-basis: 66.6667%; } + +.grid--cell9 { flex-basis: 75%; } + +.grid--cell10 { flex-basis: 83.3333%; } + +.grid--cell11 { flex-basis: 91.6667%; } + +.grid--cell12 { flex-basis: 100%; } + +.grid__allcells1 > .grid, .grid__allcells1 > .grid--cell { flex-basis: 8.33= +333%; } + +.grid__allcells2 > .grid, .grid__allcells2 > .grid--cell { flex-basis: 16.6= +667%; } + +.grid__allcells3 > .grid, .grid__allcells3 > .grid--cell { flex-basis: 25%;= + } + +.grid__allcells4 > .grid, .grid__allcells4 > .grid--cell { flex-basis: 33.3= +333%; } + +.grid__allcells5 > .grid, .grid__allcells5 > .grid--cell { flex-basis: 41.6= +667%; } + +.grid__allcells6 > .grid, .grid__allcells6 > .grid--cell { flex-basis: 50%;= + } + +.grid__allcells7 > .grid, .grid__allcells7 > .grid--cell { flex-basis: 58.3= +333%; } + +.grid__allcells8 > .grid, .grid__allcells8 > .grid--cell { flex-basis: 66.6= +667%; } + +.grid__allcells9 > .grid, .grid__allcells9 > .grid--cell { flex-basis: 75%;= + } + +.grid__allcells10 > .grid, .grid__allcells10 > .grid--cell { flex-basis: 83= +.3333%; } + +.grid__allcells11 > .grid, .grid__allcells11 > .grid--cell { flex-basis: 91= +.6667%; } + +.grid__allcells12 > .grid, .grid__allcells12 > .grid--cell { flex-basis: 10= +0%; } + +.gs2 { margin: -1px; } + +.gs2 > .grid, .gs2 > .grid--cell { margin: 1px; } + +.gs2 > .grid--cell1 { margin: 1px; } + +.gs2 > .grid--cell1, .gs2.grid__allcells1 > .grid, .gs2.grid__allcells1 > .= +grid--cell { flex-basis: calc(8.33333% - 2px); } + +.gs2 > .grid--cell2 { margin: 1px; } + +.gs2 > .grid--cell2, .gs2.grid__allcells2 > .grid, .gs2.grid__allcells2 > .= +grid--cell { flex-basis: calc(16.6667% - 2px); } + +.gs2 > .grid--cell3 { margin: 1px; } + +.gs2 > .grid--cell3, .gs2.grid__allcells3 > .grid, .gs2.grid__allcells3 > .= +grid--cell { flex-basis: calc(25% - 2px); } + +.gs2 > .grid--cell4 { margin: 1px; } + +.gs2 > .grid--cell4, .gs2.grid__allcells4 > .grid, .gs2.grid__allcells4 > .= +grid--cell { flex-basis: calc(33.3333% - 2px); } + +.gs2 > .grid--cell5 { margin: 1px; } + +.gs2 > .grid--cell5, .gs2.grid__allcells5 > .grid, .gs2.grid__allcells5 > .= +grid--cell { flex-basis: calc(41.6667% - 2px); } + +.gs2 > .grid--cell6 { margin: 1px; } + +.gs2 > .grid--cell6, .gs2.grid__allcells6 > .grid, .gs2.grid__allcells6 > .= +grid--cell { flex-basis: calc(50% - 2px); } + +.gs2 > .grid--cell7 { margin: 1px; } + +.gs2 > .grid--cell7, .gs2.grid__allcells7 > .grid, .gs2.grid__allcells7 > .= +grid--cell { flex-basis: calc(58.3333% - 2px); } + +.gs2 > .grid--cell8 { margin: 1px; } + +.gs2 > .grid--cell8, .gs2.grid__allcells8 > .grid, .gs2.grid__allcells8 > .= +grid--cell { flex-basis: calc(66.6667% - 2px); } + +.gs2 > .grid--cell9 { margin: 1px; } + +.gs2 > .grid--cell9, .gs2.grid__allcells9 > .grid, .gs2.grid__allcells9 > .= +grid--cell { flex-basis: calc(75% - 2px); } + +.gs2 > .grid--cell10 { margin: 1px; } + +.gs2 > .grid--cell10, .gs2.grid__allcells10 > .grid, .gs2.grid__allcells10 = +> .grid--cell { flex-basis: calc(83.3333% - 2px); } + +.gs2 > .grid--cell11 { margin: 1px; } + +.gs2 > .grid--cell11, .gs2.grid__allcells11 > .grid, .gs2.grid__allcells11 = +> .grid--cell { flex-basis: calc(91.6667% - 2px); } + +.gs2 > .grid--cell12 { margin: 1px; } + +.gs2 > .grid--cell12, .gs2.grid__allcells12 > .grid, .gs2.grid__allcells12 = +> .grid--cell { flex-basis: calc(100% - 2px); } + +.gs4 { margin: -2px; } + +.gs4 > .grid, .gs4 > .grid--cell { margin: 2px; } + +.gs4 > .grid--cell1 { margin: 2px; } + +.gs4 > .grid--cell1, .gs4.grid__allcells1 > .grid, .gs4.grid__allcells1 > .= +grid--cell { flex-basis: calc(8.33333% - 4px); } + +.gs4 > .grid--cell2 { margin: 2px; } + +.gs4 > .grid--cell2, .gs4.grid__allcells2 > .grid, .gs4.grid__allcells2 > .= +grid--cell { flex-basis: calc(16.6667% - 4px); } + +.gs4 > .grid--cell3 { margin: 2px; } + +.gs4 > .grid--cell3, .gs4.grid__allcells3 > .grid, .gs4.grid__allcells3 > .= +grid--cell { flex-basis: calc(25% - 4px); } + +.gs4 > .grid--cell4 { margin: 2px; } + +.gs4 > .grid--cell4, .gs4.grid__allcells4 > .grid, .gs4.grid__allcells4 > .= +grid--cell { flex-basis: calc(33.3333% - 4px); } + +.gs4 > .grid--cell5 { margin: 2px; } + +.gs4 > .grid--cell5, .gs4.grid__allcells5 > .grid, .gs4.grid__allcells5 > .= +grid--cell { flex-basis: calc(41.6667% - 4px); } + +.gs4 > .grid--cell6 { margin: 2px; } + +.gs4 > .grid--cell6, .gs4.grid__allcells6 > .grid, .gs4.grid__allcells6 > .= +grid--cell { flex-basis: calc(50% - 4px); } + +.gs4 > .grid--cell7 { margin: 2px; } + +.gs4 > .grid--cell7, .gs4.grid__allcells7 > .grid, .gs4.grid__allcells7 > .= +grid--cell { flex-basis: calc(58.3333% - 4px); } + +.gs4 > .grid--cell8 { margin: 2px; } + +.gs4 > .grid--cell8, .gs4.grid__allcells8 > .grid, .gs4.grid__allcells8 > .= +grid--cell { flex-basis: calc(66.6667% - 4px); } + +.gs4 > .grid--cell9 { margin: 2px; } + +.gs4 > .grid--cell9, .gs4.grid__allcells9 > .grid, .gs4.grid__allcells9 > .= +grid--cell { flex-basis: calc(75% - 4px); } + +.gs4 > .grid--cell10 { margin: 2px; } + +.gs4 > .grid--cell10, .gs4.grid__allcells10 > .grid, .gs4.grid__allcells10 = +> .grid--cell { flex-basis: calc(83.3333% - 4px); } + +.gs4 > .grid--cell11 { margin: 2px; } + +.gs4 > .grid--cell11, .gs4.grid__allcells11 > .grid, .gs4.grid__allcells11 = +> .grid--cell { flex-basis: calc(91.6667% - 4px); } + +.gs4 > .grid--cell12 { margin: 2px; } + +.gs4 > .grid--cell12, .gs4.grid__allcells12 > .grid, .gs4.grid__allcells12 = +> .grid--cell { flex-basis: calc(100% - 4px); } + +.gs8 { margin: -4px; } + +.gs8 > .grid, .gs8 > .grid--cell { margin: 4px; } + +.gs8 > .grid--cell1 { margin: 4px; } + +.gs8 > .grid--cell1, .gs8.grid__allcells1 > .grid, .gs8.grid__allcells1 > .= +grid--cell { flex-basis: calc(8.33333% - 8px); } + +.gs8 > .grid--cell2 { margin: 4px; } + +.gs8 > .grid--cell2, .gs8.grid__allcells2 > .grid, .gs8.grid__allcells2 > .= +grid--cell { flex-basis: calc(16.6667% - 8px); } + +.gs8 > .grid--cell3 { margin: 4px; } + +.gs8 > .grid--cell3, .gs8.grid__allcells3 > .grid, .gs8.grid__allcells3 > .= +grid--cell { flex-basis: calc(25% - 8px); } + +.gs8 > .grid--cell4 { margin: 4px; } + +.gs8 > .grid--cell4, .gs8.grid__allcells4 > .grid, .gs8.grid__allcells4 > .= +grid--cell { flex-basis: calc(33.3333% - 8px); } + +.gs8 > .grid--cell5 { margin: 4px; } + +.gs8 > .grid--cell5, .gs8.grid__allcells5 > .grid, .gs8.grid__allcells5 > .= +grid--cell { flex-basis: calc(41.6667% - 8px); } + +.gs8 > .grid--cell6 { margin: 4px; } + +.gs8 > .grid--cell6, .gs8.grid__allcells6 > .grid, .gs8.grid__allcells6 > .= +grid--cell { flex-basis: calc(50% - 8px); } + +.gs8 > .grid--cell7 { margin: 4px; } + +.gs8 > .grid--cell7, .gs8.grid__allcells7 > .grid, .gs8.grid__allcells7 > .= +grid--cell { flex-basis: calc(58.3333% - 8px); } + +.gs8 > .grid--cell8 { margin: 4px; } + +.gs8 > .grid--cell8, .gs8.grid__allcells8 > .grid, .gs8.grid__allcells8 > .= +grid--cell { flex-basis: calc(66.6667% - 8px); } + +.gs8 > .grid--cell9 { margin: 4px; } + +.gs8 > .grid--cell9, .gs8.grid__allcells9 > .grid, .gs8.grid__allcells9 > .= +grid--cell { flex-basis: calc(75% - 8px); } + +.gs8 > .grid--cell10 { margin: 4px; } + +.gs8 > .grid--cell10, .gs8.grid__allcells10 > .grid, .gs8.grid__allcells10 = +> .grid--cell { flex-basis: calc(83.3333% - 8px); } + +.gs8 > .grid--cell11 { margin: 4px; } + +.gs8 > .grid--cell11, .gs8.grid__allcells11 > .grid, .gs8.grid__allcells11 = +> .grid--cell { flex-basis: calc(91.6667% - 8px); } + +.gs8 > .grid--cell12 { margin: 4px; } + +.gs8 > .grid--cell12, .gs8.grid__allcells12 > .grid, .gs8.grid__allcells12 = +> .grid--cell { flex-basis: calc(100% - 8px); } + +.gs12 { margin: -6px; } + +.gs12 > .grid, .gs12 > .grid--cell { margin: 6px; } + +.gs12 > .grid--cell1 { margin: 6px; } + +.gs12 > .grid--cell1, .gs12.grid__allcells1 > .grid, .gs12.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 12px); } + +.gs12 > .grid--cell2 { margin: 6px; } + +.gs12 > .grid--cell2, .gs12.grid__allcells2 > .grid, .gs12.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 12px); } + +.gs12 > .grid--cell3 { margin: 6px; } + +.gs12 > .grid--cell3, .gs12.grid__allcells3 > .grid, .gs12.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 12px); } + +.gs12 > .grid--cell4 { margin: 6px; } + +.gs12 > .grid--cell4, .gs12.grid__allcells4 > .grid, .gs12.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 12px); } + +.gs12 > .grid--cell5 { margin: 6px; } + +.gs12 > .grid--cell5, .gs12.grid__allcells5 > .grid, .gs12.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 12px); } + +.gs12 > .grid--cell6 { margin: 6px; } + +.gs12 > .grid--cell6, .gs12.grid__allcells6 > .grid, .gs12.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 12px); } + +.gs12 > .grid--cell7 { margin: 6px; } + +.gs12 > .grid--cell7, .gs12.grid__allcells7 > .grid, .gs12.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 12px); } + +.gs12 > .grid--cell8 { margin: 6px; } + +.gs12 > .grid--cell8, .gs12.grid__allcells8 > .grid, .gs12.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 12px); } + +.gs12 > .grid--cell9 { margin: 6px; } + +.gs12 > .grid--cell9, .gs12.grid__allcells9 > .grid, .gs12.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 12px); } + +.gs12 > .grid--cell10 { margin: 6px; } + +.gs12 > .grid--cell10, .gs12.grid__allcells10 > .grid, .gs12.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 12px); } + +.gs12 > .grid--cell11 { margin: 6px; } + +.gs12 > .grid--cell11, .gs12.grid__allcells11 > .grid, .gs12.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 12px); } + +.gs12 > .grid--cell12 { margin: 6px; } + +.gs12 > .grid--cell12, .gs12.grid__allcells12 > .grid, .gs12.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 12px); } + +.gs16 { margin: -8px; } + +.gs16 > .grid, .gs16 > .grid--cell { margin: 8px; } + +.gs16 > .grid--cell1 { margin: 8px; } + +.gs16 > .grid--cell1, .gs16.grid__allcells1 > .grid, .gs16.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 16px); } + +.gs16 > .grid--cell2 { margin: 8px; } + +.gs16 > .grid--cell2, .gs16.grid__allcells2 > .grid, .gs16.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 16px); } + +.gs16 > .grid--cell3 { margin: 8px; } + +.gs16 > .grid--cell3, .gs16.grid__allcells3 > .grid, .gs16.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 16px); } + +.gs16 > .grid--cell4 { margin: 8px; } + +.gs16 > .grid--cell4, .gs16.grid__allcells4 > .grid, .gs16.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 16px); } + +.gs16 > .grid--cell5 { margin: 8px; } + +.gs16 > .grid--cell5, .gs16.grid__allcells5 > .grid, .gs16.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 16px); } + +.gs16 > .grid--cell6 { margin: 8px; } + +.gs16 > .grid--cell6, .gs16.grid__allcells6 > .grid, .gs16.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 16px); } + +.gs16 > .grid--cell7 { margin: 8px; } + +.gs16 > .grid--cell7, .gs16.grid__allcells7 > .grid, .gs16.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 16px); } + +.gs16 > .grid--cell8 { margin: 8px; } + +.gs16 > .grid--cell8, .gs16.grid__allcells8 > .grid, .gs16.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 16px); } + +.gs16 > .grid--cell9 { margin: 8px; } + +.gs16 > .grid--cell9, .gs16.grid__allcells9 > .grid, .gs16.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 16px); } + +.gs16 > .grid--cell10 { margin: 8px; } + +.gs16 > .grid--cell10, .gs16.grid__allcells10 > .grid, .gs16.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 16px); } + +.gs16 > .grid--cell11 { margin: 8px; } + +.gs16 > .grid--cell11, .gs16.grid__allcells11 > .grid, .gs16.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 16px); } + +.gs16 > .grid--cell12 { margin: 8px; } + +.gs16 > .grid--cell12, .gs16.grid__allcells12 > .grid, .gs16.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 16px); } + +.gs24 { margin: -12px; } + +.gs24 > .grid, .gs24 > .grid--cell { margin: 12px; } + +.gs24 > .grid--cell1 { margin: 12px; } + +.gs24 > .grid--cell1, .gs24.grid__allcells1 > .grid, .gs24.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 24px); } + +.gs24 > .grid--cell2 { margin: 12px; } + +.gs24 > .grid--cell2, .gs24.grid__allcells2 > .grid, .gs24.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 24px); } + +.gs24 > .grid--cell3 { margin: 12px; } + +.gs24 > .grid--cell3, .gs24.grid__allcells3 > .grid, .gs24.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 24px); } + +.gs24 > .grid--cell4 { margin: 12px; } + +.gs24 > .grid--cell4, .gs24.grid__allcells4 > .grid, .gs24.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 24px); } + +.gs24 > .grid--cell5 { margin: 12px; } + +.gs24 > .grid--cell5, .gs24.grid__allcells5 > .grid, .gs24.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 24px); } + +.gs24 > .grid--cell6 { margin: 12px; } + +.gs24 > .grid--cell6, .gs24.grid__allcells6 > .grid, .gs24.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 24px); } + +.gs24 > .grid--cell7 { margin: 12px; } + +.gs24 > .grid--cell7, .gs24.grid__allcells7 > .grid, .gs24.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 24px); } + +.gs24 > .grid--cell8 { margin: 12px; } + +.gs24 > .grid--cell8, .gs24.grid__allcells8 > .grid, .gs24.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 24px); } + +.gs24 > .grid--cell9 { margin: 12px; } + +.gs24 > .grid--cell9, .gs24.grid__allcells9 > .grid, .gs24.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 24px); } + +.gs24 > .grid--cell10 { margin: 12px; } + +.gs24 > .grid--cell10, .gs24.grid__allcells10 > .grid, .gs24.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 24px); } + +.gs24 > .grid--cell11 { margin: 12px; } + +.gs24 > .grid--cell11, .gs24.grid__allcells11 > .grid, .gs24.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 24px); } + +.gs24 > .grid--cell12 { margin: 12px; } + +.gs24 > .grid--cell12, .gs24.grid__allcells12 > .grid, .gs24.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 24px); } + +.gs32 { margin: -16px; } + +.gs32 > .grid, .gs32 > .grid--cell { margin: 16px; } + +.gs32 > .grid--cell1 { margin: 16px; } + +.gs32 > .grid--cell1, .gs32.grid__allcells1 > .grid, .gs32.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 32px); } + +.gs32 > .grid--cell2 { margin: 16px; } + +.gs32 > .grid--cell2, .gs32.grid__allcells2 > .grid, .gs32.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 32px); } + +.gs32 > .grid--cell3 { margin: 16px; } + +.gs32 > .grid--cell3, .gs32.grid__allcells3 > .grid, .gs32.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 32px); } + +.gs32 > .grid--cell4 { margin: 16px; } + +.gs32 > .grid--cell4, .gs32.grid__allcells4 > .grid, .gs32.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 32px); } + +.gs32 > .grid--cell5 { margin: 16px; } + +.gs32 > .grid--cell5, .gs32.grid__allcells5 > .grid, .gs32.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 32px); } + +.gs32 > .grid--cell6 { margin: 16px; } + +.gs32 > .grid--cell6, .gs32.grid__allcells6 > .grid, .gs32.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 32px); } + +.gs32 > .grid--cell7 { margin: 16px; } + +.gs32 > .grid--cell7, .gs32.grid__allcells7 > .grid, .gs32.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 32px); } + +.gs32 > .grid--cell8 { margin: 16px; } + +.gs32 > .grid--cell8, .gs32.grid__allcells8 > .grid, .gs32.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 32px); } + +.gs32 > .grid--cell9 { margin: 16px; } + +.gs32 > .grid--cell9, .gs32.grid__allcells9 > .grid, .gs32.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 32px); } + +.gs32 > .grid--cell10 { margin: 16px; } + +.gs32 > .grid--cell10, .gs32.grid__allcells10 > .grid, .gs32.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 32px); } + +.gs32 > .grid--cell11 { margin: 16px; } + +.gs32 > .grid--cell11, .gs32.grid__allcells11 > .grid, .gs32.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 32px); } + +.gs32 > .grid--cell12 { margin: 16px; } + +.gs32 > .grid--cell12, .gs32.grid__allcells12 > .grid, .gs32.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 32px); } + +.gs48 { margin: -24px; } + +.gs48 > .grid, .gs48 > .grid--cell { margin: 24px; } + +.gs48 > .grid--cell1 { margin: 24px; } + +.gs48 > .grid--cell1, .gs48.grid__allcells1 > .grid, .gs48.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 48px); } + +.gs48 > .grid--cell2 { margin: 24px; } + +.gs48 > .grid--cell2, .gs48.grid__allcells2 > .grid, .gs48.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 48px); } + +.gs48 > .grid--cell3 { margin: 24px; } + +.gs48 > .grid--cell3, .gs48.grid__allcells3 > .grid, .gs48.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 48px); } + +.gs48 > .grid--cell4 { margin: 24px; } + +.gs48 > .grid--cell4, .gs48.grid__allcells4 > .grid, .gs48.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 48px); } + +.gs48 > .grid--cell5 { margin: 24px; } + +.gs48 > .grid--cell5, .gs48.grid__allcells5 > .grid, .gs48.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 48px); } + +.gs48 > .grid--cell6 { margin: 24px; } + +.gs48 > .grid--cell6, .gs48.grid__allcells6 > .grid, .gs48.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 48px); } + +.gs48 > .grid--cell7 { margin: 24px; } + +.gs48 > .grid--cell7, .gs48.grid__allcells7 > .grid, .gs48.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 48px); } + +.gs48 > .grid--cell8 { margin: 24px; } + +.gs48 > .grid--cell8, .gs48.grid__allcells8 > .grid, .gs48.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 48px); } + +.gs48 > .grid--cell9 { margin: 24px; } + +.gs48 > .grid--cell9, .gs48.grid__allcells9 > .grid, .gs48.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 48px); } + +.gs48 > .grid--cell10 { margin: 24px; } + +.gs48 > .grid--cell10, .gs48.grid__allcells10 > .grid, .gs48.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 48px); } + +.gs48 > .grid--cell11 { margin: 24px; } + +.gs48 > .grid--cell11, .gs48.grid__allcells11 > .grid, .gs48.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 48px); } + +.gs48 > .grid--cell12 { margin: 24px; } + +.gs48 > .grid--cell12, .gs48.grid__allcells12 > .grid, .gs48.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 48px); } + +.gs64 { margin: -32px; } + +.gs64 > .grid, .gs64 > .grid--cell { margin: 32px; } + +.gs64 > .grid--cell1 { margin: 32px; } + +.gs64 > .grid--cell1, .gs64.grid__allcells1 > .grid, .gs64.grid__allcells1 = +> .grid--cell { flex-basis: calc(8.33333% - 64px); } + +.gs64 > .grid--cell2 { margin: 32px; } + +.gs64 > .grid--cell2, .gs64.grid__allcells2 > .grid, .gs64.grid__allcells2 = +> .grid--cell { flex-basis: calc(16.6667% - 64px); } + +.gs64 > .grid--cell3 { margin: 32px; } + +.gs64 > .grid--cell3, .gs64.grid__allcells3 > .grid, .gs64.grid__allcells3 = +> .grid--cell { flex-basis: calc(25% - 64px); } + +.gs64 > .grid--cell4 { margin: 32px; } + +.gs64 > .grid--cell4, .gs64.grid__allcells4 > .grid, .gs64.grid__allcells4 = +> .grid--cell { flex-basis: calc(33.3333% - 64px); } + +.gs64 > .grid--cell5 { margin: 32px; } + +.gs64 > .grid--cell5, .gs64.grid__allcells5 > .grid, .gs64.grid__allcells5 = +> .grid--cell { flex-basis: calc(41.6667% - 64px); } + +.gs64 > .grid--cell6 { margin: 32px; } + +.gs64 > .grid--cell6, .gs64.grid__allcells6 > .grid, .gs64.grid__allcells6 = +> .grid--cell { flex-basis: calc(50% - 64px); } + +.gs64 > .grid--cell7 { margin: 32px; } + +.gs64 > .grid--cell7, .gs64.grid__allcells7 > .grid, .gs64.grid__allcells7 = +> .grid--cell { flex-basis: calc(58.3333% - 64px); } + +.gs64 > .grid--cell8 { margin: 32px; } + +.gs64 > .grid--cell8, .gs64.grid__allcells8 > .grid, .gs64.grid__allcells8 = +> .grid--cell { flex-basis: calc(66.6667% - 64px); } + +.gs64 > .grid--cell9 { margin: 32px; } + +.gs64 > .grid--cell9, .gs64.grid__allcells9 > .grid, .gs64.grid__allcells9 = +> .grid--cell { flex-basis: calc(75% - 64px); } + +.gs64 > .grid--cell10 { margin: 32px; } + +.gs64 > .grid--cell10, .gs64.grid__allcells10 > .grid, .gs64.grid__allcells= +10 > .grid--cell { flex-basis: calc(83.3333% - 64px); } + +.gs64 > .grid--cell11 { margin: 32px; } + +.gs64 > .grid--cell11, .gs64.grid__allcells11 > .grid, .gs64.grid__allcells= +11 > .grid--cell { flex-basis: calc(91.6667% - 64px); } + +.gs64 > .grid--cell12 { margin: 32px; } + +.gs64 > .grid--cell12, .gs64.grid__allcells12 > .grid, .gs64.grid__allcells= +12 > .grid--cell { flex-basis: calc(100% - 64px); } + +.gsx, .gsx > .grid, .gsx > [class*=3D"grid--cell"] { margin-top: 0px; margi= +n-bottom: 0px; } + +.gsy, .gsy > .grid, .gsy > [class*=3D"grid--cell"] { margin-right: 0px; mar= +gin-left: 0px; } + +.m0 { margin: 0px !important; } + +.m2 { margin: 2px !important; } + +.m4 { margin: 4px !important; } + +.m6 { margin: 6px !important; } + +.m8 { margin: 8px !important; } + +.m12 { margin: 12px !important; } + +.m16 { margin: 16px !important; } + +.m24 { margin: 24px !important; } + +.m32 { margin: 32px !important; } + +.m48 { margin: 48px !important; } + +.m64 { margin: 64px !important; } + +.m96 { margin: 96px !important; } + +.m128 { margin: 128px !important; } + +.m-auto { margin: auto !important; } + +.mn2 { margin: -2px !important; } + +.mn4 { margin: -4px !important; } + +.mn6 { margin: -6px !important; } + +.mn8 { margin: -8px !important; } + +.mn12 { margin: -12px !important; } + +.mn16 { margin: -16px !important; } + +.mn24 { margin: -24px !important; } + +.mn32 { margin: -32px !important; } + +.mn48 { margin: -48px !important; } + +.mn64 { margin: -64px !important; } + +.mn96 { margin: -96px !important; } + +.mn128 { margin: -128px !important; } + +.mt0 { margin-top: 0px !important; } + +.mt2 { margin-top: 2px !important; } + +.mt4 { margin-top: 4px !important; } + +.mt6 { margin-top: 6px !important; } + +.mt8 { margin-top: 8px !important; } + +.mt12 { margin-top: 12px !important; } + +.mt16 { margin-top: 16px !important; } + +.mt24 { margin-top: 24px !important; } + +.mt32 { margin-top: 32px !important; } + +.mt48 { margin-top: 48px !important; } + +.mt64 { margin-top: 64px !important; } + +.mt96 { margin-top: 96px !important; } + +.mt128 { margin-top: 128px !important; } + +.mt-auto { margin-top: auto !important; } + +.mtn1 { margin-top: -1px !important; } + +.mtn2 { margin-top: -2px !important; } + +.mtn4 { margin-top: -4px !important; } + +.mtn6 { margin-top: -6px !important; } + +.mtn8 { margin-top: -8px !important; } + +.mtn12 { margin-top: -12px !important; } + +.mtn16 { margin-top: -16px !important; } + +.mtn24 { margin-top: -24px !important; } + +.mtn32 { margin-top: -32px !important; } + +.mtn48 { margin-top: -48px !important; } + +.mtn64 { margin-top: -64px !important; } + +.mtn96 { margin-top: -96px !important; } + +.mtn128 { margin-top: -128px !important; } + +.mr0 { margin-right: 0px !important; } + +.mr2 { margin-right: 2px !important; } + +.mr4 { margin-right: 4px !important; } + +.mr6 { margin-right: 6px !important; } + +.mr8 { margin-right: 8px !important; } + +.mr12 { margin-right: 12px !important; } + +.mr16 { margin-right: 16px !important; } + +.mr24 { margin-right: 24px !important; } + +.mr32 { margin-right: 32px !important; } + +.mr48 { margin-right: 48px !important; } + +.mr64 { margin-right: 64px !important; } + +.mr96 { margin-right: 96px !important; } + +.mr128 { margin-right: 128px !important; } + +.mr-auto { margin-right: auto !important; } + +.mrn1 { margin-right: -1px !important; } + +.mrn2 { margin-right: -2px !important; } + +.mrn4 { margin-right: -4px !important; } + +.mrn6 { margin-right: -6px !important; } + +.mrn8 { margin-right: -8px !important; } + +.mrn12 { margin-right: -12px !important; } + +.mrn16 { margin-right: -16px !important; } + +.mrn24 { margin-right: -24px !important; } + +.mrn32 { margin-right: -32px !important; } + +.mrn48 { margin-right: -48px !important; } + +.mrn64 { margin-right: -64px !important; } + +.mrn96 { margin-right: -96px !important; } + +.mrn128 { margin-right: -128px !important; } + +.mb0 { margin-bottom: 0px !important; } + +.mb2 { margin-bottom: 2px !important; } + +.mb4 { margin-bottom: 4px !important; } + +.mb6 { margin-bottom: 6px !important; } + +.mb8 { margin-bottom: 8px !important; } + +.mb12 { margin-bottom: 12px !important; } + +.mb16 { margin-bottom: 16px !important; } + +.mb24 { margin-bottom: 24px !important; } + +.mb32 { margin-bottom: 32px !important; } + +.mb48 { margin-bottom: 48px !important; } + +.mb64 { margin-bottom: 64px !important; } + +.mb96 { margin-bottom: 96px !important; } + +.mb128 { margin-bottom: 128px !important; } + +.mb-auto { margin-bottom: auto !important; } + +.mbn1 { margin-bottom: -1px !important; } + +.mbn2 { margin-bottom: -2px !important; } + +.mbn4 { margin-bottom: -4px !important; } + +.mbn6 { margin-bottom: -6px !important; } + +.mbn8 { margin-bottom: -8px !important; } + +.mbn12 { margin-bottom: -12px !important; } + +.mbn16 { margin-bottom: -16px !important; } + +.mbn24 { margin-bottom: -24px !important; } + +.mbn32 { margin-bottom: -32px !important; } + +.mbn48 { margin-bottom: -48px !important; } + +.mbn64 { margin-bottom: -64px !important; } + +.mbn96 { margin-bottom: -96px !important; } + +.mbn128 { margin-bottom: -128px !important; } + +.ml0 { margin-left: 0px !important; } + +.ml2 { margin-left: 2px !important; } + +.ml4 { margin-left: 4px !important; } + +.ml6 { margin-left: 6px !important; } + +.ml8 { margin-left: 8px !important; } + +.ml12 { margin-left: 12px !important; } + +.ml16 { margin-left: 16px !important; } + +.ml24 { margin-left: 24px !important; } + +.ml32 { margin-left: 32px !important; } + +.ml48 { margin-left: 48px !important; } + +.ml64 { margin-left: 64px !important; } + +.ml96 { margin-left: 96px !important; } + +.ml128 { margin-left: 128px !important; } + +.ml-auto { margin-left: auto !important; } + +.mln1 { margin-left: -1px !important; } + +.mln2 { margin-left: -2px !important; } + +.mln4 { margin-left: -4px !important; } + +.mln6 { margin-left: -6px !important; } + +.mln8 { margin-left: -8px !important; } + +.mln12 { margin-left: -12px !important; } + +.mln16 { margin-left: -16px !important; } + +.mln24 { margin-left: -24px !important; } + +.mln32 { margin-left: -32px !important; } + +.mln48 { margin-left: -48px !important; } + +.mln64 { margin-left: -64px !important; } + +.mln96 { margin-left: -96px !important; } + +.mln128 { margin-left: -128px !important; } + +.mx0 { margin-left: 0px !important; margin-right: 0px !important; } + +.mx2 { margin-left: 2px !important; margin-right: 2px !important; } + +.mx4 { margin-left: 4px !important; margin-right: 4px !important; } + +.mx6 { margin-left: 6px !important; margin-right: 6px !important; } + +.mx8 { margin-left: 8px !important; margin-right: 8px !important; } + +.mx12 { margin-left: 12px !important; margin-right: 12px !important; } + +.mx16 { margin-left: 16px !important; margin-right: 16px !important; } + +.mx24 { margin-left: 24px !important; margin-right: 24px !important; } + +.mx32 { margin-left: 32px !important; margin-right: 32px !important; } + +.mx48 { margin-left: 48px !important; margin-right: 48px !important; } + +.mx64 { margin-left: 64px !important; margin-right: 64px !important; } + +.mx96 { margin-left: 96px !important; margin-right: 96px !important; } + +.mx128 { margin-left: 128px !important; margin-right: 128px !important; } + +.mx-auto { margin-left: auto !important; margin-right: auto !important; } + +.mxn1 { margin-left: -1px !important; margin-right: -1px !important; } + +.mxn2 { margin-left: -2px !important; margin-right: -2px !important; } + +.mxn4 { margin-left: -4px !important; margin-right: -4px !important; } + +.mxn8 { margin-left: -8px !important; margin-right: -8px !important; } + +.mxn12 { margin-left: -12px !important; margin-right: -12px !important; } + +.mxn16 { margin-left: -16px !important; margin-right: -16px !important; } + +.mxn24 { margin-left: -24px !important; margin-right: -24px !important; } + +.mxn32 { margin-left: -32px !important; margin-right: -32px !important; } + +.mxn48 { margin-left: -48px !important; margin-right: -48px !important; } + +.mxn64 { margin-left: -64px !important; margin-right: -64px !important; } + +.mxn96 { margin-left: -96px !important; margin-right: -96px !important; } + +.mxn128 { margin-left: -128px !important; margin-right: -128px !important; = +} + +.my0 { margin-top: 0px !important; margin-bottom: 0px !important; } + +.my2 { margin-top: 2px !important; margin-bottom: 2px !important; } + +.my4 { margin-top: 4px !important; margin-bottom: 4px !important; } + +.my6 { margin-top: 6px !important; margin-bottom: 6px !important; } + +.my8 { margin-top: 8px !important; margin-bottom: 8px !important; } + +.my12 { margin-top: 12px !important; margin-bottom: 12px !important; } + +.my16 { margin-top: 16px !important; margin-bottom: 16px !important; } + +.my24 { margin-top: 24px !important; margin-bottom: 24px !important; } + +.my32 { margin-top: 32px !important; margin-bottom: 32px !important; } + +.my48 { margin-top: 48px !important; margin-bottom: 48px !important; } + +.my64 { margin-top: 64px !important; margin-bottom: 64px !important; } + +.my96 { margin-top: 96px !important; margin-bottom: 96px !important; } + +.my128 { margin-top: 128px !important; margin-bottom: 128px !important; } + +.my-auto { margin-top: auto !important; margin-bottom: auto !important; } + +.myn1 { margin-top: -1px !important; margin-bottom: -1px !important; } + +.myn2 { margin-top: -2px !important; margin-bottom: -2px !important; } + +.myn4 { margin-top: -4px !important; margin-bottom: -4px !important; } + +.myn8 { margin-top: -8px !important; margin-bottom: -8px !important; } + +.myn12 { margin-top: -12px !important; margin-bottom: -12px !important; } + +.myn16 { margin-top: -16px !important; margin-bottom: -16px !important; } + +.myn24 { margin-top: -24px !important; margin-bottom: -24px !important; } + +.myn32 { margin-top: -32px !important; margin-bottom: -32px !important; } + +.myn48 { margin-top: -48px !important; margin-bottom: -48px !important; } + +.myn64 { margin-top: -64px !important; margin-bottom: -64px !important; } + +.myn96 { margin-top: -96px !important; margin-bottom: -96px !important; } + +.myn128 { margin-top: -128px !important; margin-bottom: -128px !important; = +} + +.p0 { padding: 0px !important; } + +.p2 { padding: 2px !important; } + +.p4 { padding: 4px !important; } + +.p6 { padding: 6px !important; } + +.p8 { padding: 8px !important; } + +.p12 { padding: 12px !important; } + +.p16 { padding: 16px !important; } + +.p24 { padding: 24px !important; } + +.p32 { padding: 32px !important; } + +.p48 { padding: 48px !important; } + +.p64 { padding: 64px !important; } + +.p96 { padding: 96px !important; } + +.p128 { padding: 128px !important; } + +.pt0 { padding-top: 0px !important; } + +.pt2 { padding-top: 2px !important; } + +.pt4 { padding-top: 4px !important; } + +.pt6 { padding-top: 6px !important; } + +.pt8 { padding-top: 8px !important; } + +.pt12 { padding-top: 12px !important; } + +.pt16 { padding-top: 16px !important; } + +.pt24 { padding-top: 24px !important; } + +.pt32 { padding-top: 32px !important; } + +.pt48 { padding-top: 48px !important; } + +.pt64 { padding-top: 64px !important; } + +.pt96 { padding-top: 96px !important; } + +.pt128 { padding-top: 128px !important; } + +.pr0 { padding-right: 0px !important; } + +.pr2 { padding-right: 2px !important; } + +.pr4 { padding-right: 4px !important; } + +.pr6 { padding-right: 6px !important; } + +.pr8 { padding-right: 8px !important; } + +.pr12 { padding-right: 12px !important; } + +.pr16 { padding-right: 16px !important; } + +.pr24 { padding-right: 24px !important; } + +.pr32 { padding-right: 32px !important; } + +.pr48 { padding-right: 48px !important; } + +.pr64 { padding-right: 64px !important; } + +.pr96 { padding-right: 96px !important; } + +.pr128 { padding-right: 128px !important; } + +.pb0 { padding-bottom: 0px !important; } + +.pb2 { padding-bottom: 2px !important; } + +.pb4 { padding-bottom: 4px !important; } + +.pb6 { padding-bottom: 6px !important; } + +.pb8 { padding-bottom: 8px !important; } + +.pb12 { padding-bottom: 12px !important; } + +.pb16 { padding-bottom: 16px !important; } + +.pb24 { padding-bottom: 24px !important; } + +.pb32 { padding-bottom: 32px !important; } + +.pb48 { padding-bottom: 48px !important; } + +.pb64 { padding-bottom: 64px !important; } + +.pb96 { padding-bottom: 96px !important; } + +.pb128 { padding-bottom: 128px !important; } + +.pl0 { padding-left: 0px !important; } + +.pl2 { padding-left: 2px !important; } + +.pl4 { padding-left: 4px !important; } + +.pl6 { padding-left: 6px !important; } + +.pl8 { padding-left: 8px !important; } + +.pl12 { padding-left: 12px !important; } + +.pl16 { padding-left: 16px !important; } + +.pl24 { padding-left: 24px !important; } + +.pl32 { padding-left: 32px !important; } + +.pl48 { padding-left: 48px !important; } + +.pl64 { padding-left: 64px !important; } + +.pl96 { padding-left: 96px !important; } + +.pl128 { padding-left: 128px !important; } + +.px0 { padding-left: 0px !important; padding-right: 0px !important; } + +.px2 { padding-left: 2px !important; padding-right: 2px !important; } + +.px4 { padding-left: 4px !important; padding-right: 4px !important; } + +.px6 { padding-left: 6px !important; padding-right: 6px !important; } + +.px8 { padding-left: 8px !important; padding-right: 8px !important; } + +.px12 { padding-left: 12px !important; padding-right: 12px !important; } + +.px16 { padding-left: 16px !important; padding-right: 16px !important; } + +.px24 { padding-left: 24px !important; padding-right: 24px !important; } + +.px32 { padding-left: 32px !important; padding-right: 32px !important; } + +.px48 { padding-left: 48px !important; padding-right: 48px !important; } + +.px64 { padding-left: 64px !important; padding-right: 64px !important; } + +.px96 { padding-left: 96px !important; padding-right: 96px !important; } + +.px128 { padding-left: 128px !important; padding-right: 128px !important; } + +.py0 { padding-top: 0px !important; padding-bottom: 0px !important; } + +.py2 { padding-top: 2px !important; padding-bottom: 2px !important; } + +.py4 { padding-top: 4px !important; padding-bottom: 4px !important; } + +.py6 { padding-top: 6px !important; padding-bottom: 6px !important; } + +.py8 { padding-top: 8px !important; padding-bottom: 8px !important; } + +.py12 { padding-top: 12px !important; padding-bottom: 12px !important; } + +.py16 { padding-top: 16px !important; padding-bottom: 16px !important; } + +.py24 { padding-top: 24px !important; padding-bottom: 24px !important; } + +.py32 { padding-top: 32px !important; padding-bottom: 32px !important; } + +.py48 { padding-top: 48px !important; padding-bottom: 48px !important; } + +.py64 { padding-top: 64px !important; padding-bottom: 64px !important; } + +.py96 { padding-top: 96px !important; padding-bottom: 96px !important; } + +.py128 { padding-top: 128px !important; padding-bottom: 128px !important; } + +.t0 { top: 0px !important; } + +.t2 { top: 2px !important; } + +.tn2 { top: -2px !important; } + +.t4 { top: 4px !important; } + +.tn4 { top: -4px !important; } + +.t6 { top: 6px !important; } + +.tn6 { top: -6px !important; } + +.t8 { top: 8px !important; } + +.tn8 { top: -8px !important; } + +.t12 { top: 12px !important; } + +.tn12 { top: -12px !important; } + +.t16 { top: 16px !important; } + +.tn16 { top: -16px !important; } + +.t24 { top: 24px !important; } + +.tn24 { top: -24px !important; } + +.t32 { top: 32px !important; } + +.tn32 { top: -32px !important; } + +.t48 { top: 48px !important; } + +.tn48 { top: -48px !important; } + +.t64 { top: 64px !important; } + +.tn64 { top: -64px !important; } + +.t96 { top: 96px !important; } + +.tn96 { top: -96px !important; } + +.t128 { top: 128px !important; } + +.tn128 { top: -128px !important; } + +.t100 { top: 100% !important; } + +.tn100 { top: -100% !important; } + +.r0 { right: 0px !important; } + +.r2 { right: 2px !important; } + +.rn2 { right: -2px !important; } + +.r4 { right: 4px !important; } + +.rn4 { right: -4px !important; } + +.r6 { right: 6px !important; } + +.rn6 { right: -6px !important; } + +.r8 { right: 8px !important; } + +.rn8 { right: -8px !important; } + +.r12 { right: 12px !important; } + +.rn12 { right: -12px !important; } + +.r16 { right: 16px !important; } + +.rn16 { right: -16px !important; } + +.r24 { right: 24px !important; } + +.rn24 { right: -24px !important; } + +.r32 { right: 32px !important; } + +.rn32 { right: -32px !important; } + +.r48 { right: 48px !important; } + +.rn48 { right: -48px !important; } + +.r64 { right: 64px !important; } + +.rn64 { right: -64px !important; } + +.r96 { right: 96px !important; } + +.rn96 { right: -96px !important; } + +.r128 { right: 128px !important; } + +.rn128 { right: -128px !important; } + +.r100 { right: 100% !important; } + +.rn100 { right: -100% !important; } + +.b0 { bottom: 0px !important; } + +.b2 { bottom: 2px !important; } + +.bn2 { bottom: -2px !important; } + +.b4 { bottom: 4px !important; } + +.bn4 { bottom: -4px !important; } + +.b6 { bottom: 6px !important; } + +.bn6 { bottom: -6px !important; } + +.b8 { bottom: 8px !important; } + +.bn8 { bottom: -8px !important; } + +.b12 { bottom: 12px !important; } + +.bn12 { bottom: -12px !important; } + +.b16 { bottom: 16px !important; } + +.bn16 { bottom: -16px !important; } + +.b24 { bottom: 24px !important; } + +.bn24 { bottom: -24px !important; } + +.b32 { bottom: 32px !important; } + +.bn32 { bottom: -32px !important; } + +.b48 { bottom: 48px !important; } + +.bn48 { bottom: -48px !important; } + +.b64 { bottom: 64px !important; } + +.bn64 { bottom: -64px !important; } + +.b96 { bottom: 96px !important; } + +.bn96 { bottom: -96px !important; } + +.b128 { bottom: 128px !important; } + +.bn128 { bottom: -128px !important; } + +.b100 { bottom: 100% !important; } + +.bn100 { bottom: -100% !important; } + +.l0 { left: 0px !important; } + +.l2 { left: 2px !important; } + +.ln2 { left: -2px !important; } + +.l4 { left: 4px !important; } + +.ln4 { left: -4px !important; } + +.l6 { left: 6px !important; } + +.ln6 { left: -6px !important; } + +.l8 { left: 8px !important; } + +.ln8 { left: -8px !important; } + +.l12 { left: 12px !important; } + +.ln12 { left: -12px !important; } + +.l16 { left: 16px !important; } + +.ln16 { left: -16px !important; } + +.l24 { left: 24px !important; } + +.ln24 { left: -24px !important; } + +.l32 { left: 32px !important; } + +.ln32 { left: -32px !important; } + +.l48 { left: 48px !important; } + +.ln48 { left: -48px !important; } + +.l64 { left: 64px !important; } + +.ln64 { left: -64px !important; } + +.l96 { left: 96px !important; } + +.ln96 { left: -96px !important; } + +.l128 { left: 128px !important; } + +.ln128 { left: -128px !important; } + +.l100 { left: 100% !important; } + +.ln100 { left: -100% !important; } + +h1, h2, h3, h4, h5, h6, p { margin-top: 0px; } + +.fs-display4 { font-size: 7.61538rem !important; } + +.fs-display3 { font-size: 5.30769rem !important; } + +.fs-display2 { font-size: 4.23077rem !important; } + +.fs-display1 { font-size: 3.30769rem !important; } + +.fs-headline2 { font-size: 2.61538rem !important; } + +.fs-headline1 { font-size: 2.07692rem !important; } + +.fs-title { font-size: 1.61538rem !important; } + +.fs-subheading { font-size: 1.46154rem !important; } + +.fs-body3 { font-size: 1.30769rem !important; } + +.fs-body2 { font-size: 1.15385rem !important; } + +.fs-body1 { font-size: 13px !important; } + +.fs-caption, .fs-category { font-size: 12px !important; } + +.fs-fine { font-size: 11px !important; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .fs-display4 { font-si= +ze: 3.8rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-display3 { font-si= +ze: 3.3rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-display2 { font-si= +ze: 3rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-display1 { font-si= +ze: 2.6rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-headline2 { font-s= +ize: 2.3rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-headline1 { font-s= +ize: 2rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-title { font-size:= + 1.8rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-subheading { font-= +size: 1.6rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-body3 { font-size:= + 1.4rem !important; } + html.html__responsive:not(.html__unpinned-leftnav) .fs-body2 { font-size:= + 1.3rem !important; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .fs-display4 { font-size: 3.= +8rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-display3 { font-size: 3.= +3rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-display2 { font-size: 3r= +em !important; } + html.html__responsive.html__unpinned-leftnav .fs-display1 { font-size: 2.= +6rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-headline2 { font-size: 2= +.3rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-headline1 { font-size: 2= +rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-title { font-size: 1.8re= +m !important; } + html.html__responsive.html__unpinned-leftnav .fs-subheading { font-size: = +1.6rem !important; } + html.html__responsive.html__unpinned-leftnav .fs-body3 { font-size: 1.4re= +m !important; } + html.html__responsive.html__unpinned-leftnav .fs-body2 { font-size: 1.3re= +m !important; } +} + +.fs-category { font-weight: 700; text-transform: uppercase; } + +.fs-category.has-border { width: 100%; padding: 4px 0px; border-top: 1px so= +lid var(--black-100); } + +.fc-dark { color: var(--fc-dark) !important; } + +.fc-medium { color: var(--fc-medium) !important; } + +.fc-light { color: var(--fc-light) !important; } + +.lh-xs { line-height: 1 !important; } + +.lh-sm { line-height: 1.15385 !important; } + +.lh-md { line-height: 1.30769 !important; } + +.lh-lg { line-height: 1.61538 !important; } + +.lh-xl { line-height: 1.92308 !important; } + +.lh-xxl { line-height: 2 !important; } + +.lh-unset { line-height: initial !important; } + +.ff-sans { font-family: Arial, "Helvetica Neue", Helvetica, sans-serif !imp= +ortant; } + +.ff-serif { font-family: Georgia, "Times New Roman", Times, serif !importan= +t; } + +.ff-mono { font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberat= +ion Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", m= +onospace, sans-serif !important; } + +.ff-inherit { font-family: inherit !important; } + +.fw-normal { font-weight: 400 !important; } + +.fw-bold { font-weight: 700 !important; } + +.fs-normal { font-style: normal !important; } + +.fs-italic { font-style: italic !important; } + +.fs-unset { font-style: unset !important; } + +.ta-left { text-align: left !important; } + +.ta-center { text-align: center !important; } + +.ta-right { text-align: right !important; } + +.ta-justify { text-align: justify !important; } + +.ta-unset { text-align: unset !important; } + +.td-none { text-decoration: none !important; } + +.td-underline { text-decoration: underline !important; } + +.tt-capitalize { text-transform: capitalize !important; } + +.tt-lowercase { text-transform: lowercase !important; } + +.tt-uppercase { text-transform: uppercase !important; } + +.tt-none { text-transform: none !important; } + +.tt-unset { text-transform: unset !important; } + +.truncate { overflow: hidden; max-width: 100%; white-space: nowrap; text-ov= +erflow: ellipsis !important; } + +.ws-normal { white-space: normal !important; } + +.ws-nowrap { white-space: nowrap !important; } + +.ws-pre { white-space: pre !important; } + +.ws-pre-wrap { white-space: pre-wrap !important; } + +.ws-pre-line { white-space: pre-line !important; } + +.ws-unset { white-space: unset !important; } + +.wb-normal { word-break: normal !important; } + +.wb-break-all { word-break: break-all !important; } + +.wb-keep-all { word-break: keep-all !important; } + +.wb-inherit { word-break: inherit !important; } + +.wb-initial { word-break: initial !important; } + +.wb-unset { word-break: unset !important; } + +.ow-normal { overflow-wrap: normal !important; } + +.ow-break-word { overflow-wrap: break-word !important; } + +.ow-inherit { overflow-wrap: inherit !important; } + +.ow-initial { overflow-wrap: initial !important; } + +.ow-unset { overflow-wrap: unset !important; } + +.ww-break-word { overflow-wrap: break-word !important; } + +.list-reset { list-style: none; margin: 0px; padding: 0px; } + +.list-ls-none { list-style: none !important; } + +.list-ls-disc { list-style-type: disc !important; } + +.list-ls-decimal { list-style-type: decimal !important; } + +.list-ls-unset { list-style-type: unset !important; } + +.list-inside { list-style-position: inside !important; } + +.list-outside { list-style-position: outside !important; } + +.d-block { display: block !important; } + +@media print { + .print\:d-block { display: block !important; } +} + +.d-flex { display: flex !important; } + +.d-inline-flex { display: inline-flex !important; } + +.d-inline { display: inline !important; } + +.d-inline-block { display: inline-block !important; } + +.d-table { display: table !important; } + +.d-table-cell { display: table-cell !important; } + +.d-none { display: none !important; } + +@media print { + .print\:d-none { display: none !important; } +} + +.d-unset { display: unset !important; } + +.bg-bottom { background-position: center bottom !important; } + +.bg-center { background-position: center center !important; } + +.bg-left { background-position: left center !important; } + +.bg-left-bottom { background-position: left bottom !important; } + +.bg-left-top { background-position: left top !important; } + +.bg-right { background-position: right center !important; } + +.bg-right-bottom { background-position: right bottom !important; } + +.bg-right-top { background-position: right top !important; } + +.bg-top { background-position: center top !important; } + +.bg-repeat { background-repeat: repeat !important; } + +.bg-no-repeat { background-repeat: no-repeat !important; } + +.bg-repeat-x { background-repeat: repeat-x !important; } + +.bg-repeat-y { background-repeat: repeat-y !important; } + +.bg-auto { background-size: auto !important; } + +.bg-cover { background-size: cover !important; } + +.bg-contain { background-size: contain !important; } + +.bg-fixed { background-attachment: fixed !important; } + +.bg-local { background-attachment: local !important; } + +.bg-scroll { background-attachment: scroll !important; } + +.c-auto { cursor: auto !important; } + +.c-default { cursor: default !important; } + +.c-pointer { cursor: pointer !important; } + +.c-wait { cursor: wait !important; } + +.c-move { cursor: move !important; } + +.c-not-allowed { cursor: not-allowed !important; } + +.c-help { cursor: help !important; } + +.pe-auto { pointer-events: auto !important; } + +.pe-none { pointer-events: none !important; } + +.us-auto { user-select: auto !important; } + +.us-none { user-select: none !important; } + +.ud-auto { -webkit-user-drag: auto !important; } + +.ud-none { -webkit-user-drag: none !important; } + +.v-visible { visibility: visible !important; } + +.v-hidden { visibility: hidden !important; } + +.v-visible-sr { border: 0px; clip: rect(1px, 1px, 1px, 1px); clip-path: ins= +et(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; positio= +n: absolute; width: 1px; overflow-wrap: normal; } + +.float-left { float: left !important; } + +.float-right { float: right !important; } + +.float-none { float: none !important; } + +.clearfix::before, .clearfix::after { content: ""; display: table; } + +.clearfix::after { clear: both; } + +.clear-left { clear: left !important; } + +.clear-right { clear: right !important; } + +.clear-both { clear: both !important; } + +.clear-none { clear: none !important; } + +.box-content { box-sizing: content-box !important; } + +.box-border { box-sizing: border-box !important; } + +.box-unset { box-sizing: unset !important; } + +.va-baseline { vertical-align: baseline !important; } + +.va-bottom { vertical-align: bottom !important; } + +.va-middle { vertical-align: middle !important; } + +.va-sub { vertical-align: sub !important; } + +.va-super { vertical-align: super !important; } + +.va-text-bottom { vertical-align: text-bottom !important; } + +.va-text-top { vertical-align: text-top !important; } + +.va-top { vertical-align: top !important; } + +.va-unset { vertical-align: unset !important; } + +.ps-absolute { position: absolute !important; } + +.ps-fixed { position: fixed !important; } + +.ps-relative { position: relative !important; } + +.ps-static { position: static !important; } + +.ps-sticky { position: sticky !important; } + +.ps-unset { position: unset !important; } + +.overflow-auto { overflow: auto !important; } + +.overflow-auto::-webkit-scrollbar { width: 8px; height: 8px; background-col= +or: transparent; } + +.overflow-auto::-webkit-scrollbar-track { border-radius: 8px; background-co= +lor: transparent; } + +.overflow-auto::-webkit-scrollbar-thumb { border-radius: 8px; background-co= +lor: var(--scrollbar); } + +.overflow-auto::-webkit-scrollbar-corner { background-color: transparent; b= +order-color: transparent; } + +.overflow-x-auto { overflow-x: auto !important; } + +.overflow-x-auto::-webkit-scrollbar { width: 8px; height: 8px; background-c= +olor: transparent; } + +.overflow-x-auto::-webkit-scrollbar-track { border-radius: 8px; background-= +color: transparent; } + +.overflow-x-auto::-webkit-scrollbar-thumb { border-radius: 8px; background-= +color: var(--scrollbar); } + +.overflow-x-auto::-webkit-scrollbar-corner { background-color: transparent;= + border-color: transparent; } + +.overflow-y-auto { overflow-y: auto !important; } + +.overflow-y-auto::-webkit-scrollbar { width: 8px; height: 8px; background-c= +olor: transparent; } + +.overflow-y-auto::-webkit-scrollbar-track { border-radius: 8px; background-= +color: transparent; } + +.overflow-y-auto::-webkit-scrollbar-thumb { border-radius: 8px; background-= +color: var(--scrollbar); } + +.overflow-y-auto::-webkit-scrollbar-corner { background-color: transparent;= + border-color: transparent; } + +.overflow-hidden { overflow: hidden !important; } + +.overflow-hidden::-webkit-scrollbar { width: 8px; height: 8px; background-c= +olor: transparent; } + +.overflow-hidden::-webkit-scrollbar-track { border-radius: 8px; background-= +color: transparent; } + +.overflow-hidden::-webkit-scrollbar-thumb { border-radius: 8px; background-= +color: var(--scrollbar); } + +.overflow-hidden::-webkit-scrollbar-corner { background-color: transparent;= + border-color: transparent; } + +.overflow-x-hidden { overflow-x: hidden !important; } + +.overflow-x-hidden::-webkit-scrollbar { width: 8px; height: 8px; background= +-color: transparent; } + +.overflow-x-hidden::-webkit-scrollbar-track { border-radius: 8px; backgroun= +d-color: transparent; } + +.overflow-x-hidden::-webkit-scrollbar-thumb { border-radius: 8px; backgroun= +d-color: var(--scrollbar); } + +.overflow-x-hidden::-webkit-scrollbar-corner { background-color: transparen= +t; border-color: transparent; } + +.overflow-y-hidden { overflow-y: hidden !important; } + +.overflow-y-hidden::-webkit-scrollbar { width: 8px; height: 8px; background= +-color: transparent; } + +.overflow-y-hidden::-webkit-scrollbar-track { border-radius: 8px; backgroun= +d-color: transparent; } + +.overflow-y-hidden::-webkit-scrollbar-thumb { border-radius: 8px; backgroun= +d-color: var(--scrollbar); } + +.overflow-y-hidden::-webkit-scrollbar-corner { background-color: transparen= +t; border-color: transparent; } + +.overflow-scroll { overflow: scroll !important; } + +.overflow-scroll::-webkit-scrollbar { width: 8px; height: 8px; background-c= +olor: transparent; } + +.overflow-scroll::-webkit-scrollbar-track { border-radius: 8px; background-= +color: transparent; } + +.overflow-scroll::-webkit-scrollbar-thumb { border-radius: 8px; background-= +color: var(--scrollbar); } + +.overflow-scroll::-webkit-scrollbar-corner { background-color: transparent;= + border-color: transparent; } + +.overflow-x-scroll { overflow-x: scroll !important; } + +.overflow-x-scroll::-webkit-scrollbar { width: 8px; height: 8px; background= +-color: transparent; } + +.overflow-x-scroll::-webkit-scrollbar-track { border-radius: 8px; backgroun= +d-color: transparent; } + +.overflow-x-scroll::-webkit-scrollbar-thumb { border-radius: 8px; backgroun= +d-color: var(--scrollbar); } + +.overflow-x-scroll::-webkit-scrollbar-corner { background-color: transparen= +t; border-color: transparent; } + +.overflow-y-scroll { overflow-y: scroll !important; } + +.overflow-y-scroll::-webkit-scrollbar { width: 8px; height: 8px; background= +-color: transparent; } + +.overflow-y-scroll::-webkit-scrollbar-track { border-radius: 8px; backgroun= +d-color: transparent; } + +.overflow-y-scroll::-webkit-scrollbar-thumb { border-radius: 8px; backgroun= +d-color: var(--scrollbar); } + +.overflow-y-scroll::-webkit-scrollbar-corner { background-color: transparen= +t; border-color: transparent; } + +.overflow-visible { overflow: visible !important; } + +.o0 { opacity: 0 !important; } + +.h\:o0:hover { opacity: 0 !important; } + +.o5 { opacity: 0.05 !important; } + +.h\:o5:hover { opacity: 0.05 !important; } + +.o10 { opacity: 0.1 !important; } + +.o20 { opacity: 0.2 !important; } + +.o30 { opacity: 0.3 !important; } + +.o40 { opacity: 0.4 !important; } + +.o50 { opacity: 0.5 !important; } + +.h\:o50:hover { opacity: 0.5 !important; } + +.o60 { opacity: 0.6 !important; } + +.o70 { opacity: 0.7 !important; } + +.o80 { opacity: 0.8 !important; } + +.h\:o80:hover { opacity: 0.8 !important; } + +.o90 { opacity: 0.9 !important; } + +.o100 { opacity: 1 !important; } + +.h\:o100:hover { opacity: 1 !important; } + +.f\:o100:focus, .f\:o100:focus-within { opacity: 1 !important; } + +.z-hide { z-index: -1 !important; } + +.z-base { z-index: 0 !important; } + +.z-active { z-index: 30 !important; } + +.z-selected { z-index: 25 !important; } + +.z-dropdown { z-index: 1000 !important; } + +.z-popover { z-index: 2000 !important; } + +.z-tooltip { z-index: 3000 !important; } + +.z-banner { z-index: 4000 !important; } + +.z-nav { z-index: 5000 !important; } + +.z-nav-fixed { z-index: 5050 !important; } + +.z-modal { z-index: 9000 !important; } + +.z-modal-bg { z-index: 8950 !important; } + +.outline-none { outline: 0px !important; } + +.outline-ring { outline: solid 4px var(--focus-ring); } + +.f\:outline-ring:focus, .f\:outline-ring:focus-within { outline: solid 4px = +var(--focus-ring); } + +.fill-current { fill: currentcolor !important; } + +.stroke-current { stroke: currentcolor !important; } + +.bs-none { box-shadow: none !important; } + +.bs-sm { box-shadow: var(--bs-sm) !important; } + +.h\:bs-sm:hover { box-shadow: var(--bs-sm) !important; } + +.bs-md { box-shadow: var(--bs-md) !important; } + +.h\:bs-md:hover { box-shadow: var(--bs-md) !important; } + +.bs-lg { box-shadow: var(--bs-lg) !important; } + +.h\:bs-lg:hover { box-shadow: var(--bs-lg) !important; } + +.bs-ring { box-shadow: 0 0 0 4px var(--focus-ring); } + +.h\:bs-ring:hover { box-shadow: 0 0 0 4px var(--focus-ring); } + +.f\:bs-ring:focus, .f\:bs-ring:focus-within { box-shadow: 0 0 0 4px var(--f= +ocus-ring); } + +.bs-sm.bs-hover:hover { box-shadow: rgb(239, 240, 241) 0px 2px 8px !importa= +nt; } + +.bs-md.bs-hover:hover { box-shadow: rgb(214, 217, 220) 0px 4px 8px !importa= +nt; } + +.bs-lg.bs-hover:hover { box-shadow: rgba(159, 166, 173, 0.7) 0px 4px 12px != +important; } + +.bs-i-sm.bs-hover:hover { box-shadow: rgba(187, 192, 196, 0.75) 0px 1px 8px= + 0px inset !important; } + +.bs-i-md.bs-hover:hover { box-shadow: rgba(145, 153, 161, 0.8) 0px 1px 8px = +0px inset !important; } + +.bs-i-lg.bs-hover:hover { box-shadow: rgb(145, 153, 161) 0px 1px 12px 0px i= +nset !important; } + +.t { transition: all 0.1s cubic-bezier(0.47, 0, 0.745, 0.715) 0s; } + +.t-slow { transition-duration: 0.25s !important; } + +.t-fast { transition-duration: 0.05s !important; } + +.t-unset { transition-property: none !important; } + +.t-bg { transition-property: background-color !important; } + +.t-opacity { transition-property: opacity !important; } + +.t-shadow { transition-property: box-shadow !important; } + +.t-delay { transition-delay: 0.25s !important; } + +.t-delay-unset { transition-delay: 0s !important; } + +.w0 { width: 0px !important; } + +.w10 { width: 10% !important; } + +.w20 { width: 20% !important; } + +.w25 { width: 25% !important; } + +.w30 { width: 30% !important; } + +.w33 { width: 33.3333% !important; } + +.w40 { width: 40% !important; } + +.w50 { width: 50% !important; } + +.w60 { width: 60% !important; } + +.w66 { width: 66.6667% !important; } + +.w70 { width: 70% !important; } + +.w75 { width: 75% !important; } + +.w80 { width: 80% !important; } + +.w90 { width: 90% !important; } + +.w100 { width: 100% !important; } + +.w-auto { width: auto !important; } + +.ws0, .w0 { width: 0px !important; } + +.ws1 { width: 8.10256rem !important; } + +.ws2 { width: 16.2051rem !important; } + +.ws3 { width: 24.3077rem !important; } + +.ws4 { width: 32.4103rem !important; } + +.ws5 { width: 40.5128rem !important; } + +.ws6 { width: 48.6154rem !important; } + +.ws7 { width: 56.7179rem !important; } + +.ws8 { width: 64.8205rem !important; } + +.ws9 { width: 72.9231rem !important; } + +.ws10 { width: 81.0256rem !important; } + +.ws11 { width: 89.1282rem !important; } + +.ws12 { width: 97.2308rem !important; } + +.w2 { width: 2px !important; } + +.w4 { width: 4px !important; } + +.w6 { width: 6px !important; } + +.w8 { width: 8px !important; } + +.w12 { width: 12px !important; } + +.w16 { width: 16px !important; } + +.w24 { width: 24px !important; } + +.w32 { width: 32px !important; } + +.w48 { width: 48px !important; } + +.w64 { width: 64px !important; } + +.w96 { width: 96px !important; } + +.w128 { width: 128px !important; } + +.wmx0 { max-width: 0px !important; } + +.wmx1 { max-width: 8.10256rem !important; } + +.wmx2 { max-width: 16.2051rem !important; } + +.wmx25 { max-width: 25% !important; } + +.wmx3 { max-width: 24.3077rem !important; } + +.wmx4 { max-width: 32.4103rem !important; } + +.wmx5 { max-width: 40.5128rem !important; } + +.wmx50 { max-width: 50% !important; } + +.wmx6 { max-width: 48.6154rem !important; } + +.wmx7 { max-width: 56.7179rem !important; } + +.wmx75 { max-width: 75% !important; } + +.wmx8 { max-width: 64.8205rem !important; } + +.wmx9 { max-width: 72.9231rem !important; } + +.wmx10 { max-width: 81.0256rem !important; } + +.wmx11 { max-width: 89.1282rem !important; } + +.wmx12 { max-width: 97.2308rem !important; } + +.wmx100 { max-width: 100% !important; } + +.wmx-initial { max-width: initial !important; } + +.wmn0 { min-width: 0px !important; } + +.wmn1 { min-width: 8.10256rem !important; } + +.wmn2 { min-width: 16.2051rem !important; } + +.wmn25 { min-width: 25% !important; } + +.wmn3 { min-width: 24.3077rem !important; } + +.wmn4 { min-width: 32.4103rem !important; } + +.wmn5 { min-width: 40.5128rem !important; } + +.wmn50 { min-width: 50% !important; } + +.wmn6 { min-width: 48.6154rem !important; } + +.wmn7 { min-width: 56.7179rem !important; } + +.wmn75 { min-width: 75% !important; } + +.wmn8 { min-width: 64.8205rem !important; } + +.wmn9 { min-width: 72.9231rem !important; } + +.wmn10 { min-width: 81.0256rem !important; } + +.wmn11 { min-width: 89.1282rem !important; } + +.wmn12 { min-width: 97.2308rem !important; } + +.wmn100 { min-width: 100% !important; } + +.wmn-initial { min-width: initial !important; } + +.h0 { height: 0px !important; } + +.h100 { height: 100% !important; } + +.h-auto { height: auto !important; } + +.hs0, .h0 { height: 0px !important; } + +.hs1 { height: 8.10256rem !important; } + +.hs2 { height: 16.2051rem !important; } + +.hs3 { height: 24.3077rem !important; } + +.hs4 { height: 32.4103rem !important; } + +.hs5 { height: 40.5128rem !important; } + +.hs6 { height: 48.6154rem !important; } + +.hs7 { height: 56.7179rem !important; } + +.hs8 { height: 64.8205rem !important; } + +.hs9 { height: 72.9231rem !important; } + +.hs10 { height: 81.0256rem !important; } + +.hs11 { height: 89.1282rem !important; } + +.hs12 { height: 97.2308rem !important; } + +.h2 { height: 2px !important; } + +.h4 { height: 4px !important; } + +.h6 { height: 6px !important; } + +.h8 { height: 8px !important; } + +.h12 { height: 12px !important; } + +.h16 { height: 16px !important; } + +.h24 { height: 24px !important; } + +.h32 { height: 32px !important; } + +.h48 { height: 48px !important; } + +.h64 { height: 64px !important; } + +.h96 { height: 96px !important; } + +.h128 { height: 128px !important; } + +.hmx0 { max-height: 0px !important; } + +.hmx1 { max-height: 8.10256rem !important; } + +.hmx2 { max-height: 16.2051rem !important; } + +.hmx3 { max-height: 24.3077rem !important; } + +.hmx4 { max-height: 32.4103rem !important; } + +.hmx5 { max-height: 40.5128rem !important; } + +.hmx6 { max-height: 48.6154rem !important; } + +.hmx7 { max-height: 56.7179rem !important; } + +.hmx8 { max-height: 64.8205rem !important; } + +.hmx9 { max-height: 72.9231rem !important; } + +.hmx10 { max-height: 81.0256rem !important; } + +.hmx11 { max-height: 89.1282rem !important; } + +.hmx12 { max-height: 97.2308rem !important; } + +.hmx100 { max-height: 100% !important; } + +.hmx-initial { max-height: initial !important; } + +.hmn0 { min-height: 0px !important; } + +.hmn1 { min-height: 8.10256rem !important; } + +.hmn2 { min-height: 16.2051rem !important; } + +.hmn3 { min-height: 24.3077rem !important; } + +.hmn4 { min-height: 32.4103rem !important; } + +.hmn5 { min-height: 40.5128rem !important; } + +.hmn6 { min-height: 48.6154rem !important; } + +.hmn7 { min-height: 56.7179rem !important; } + +.hmn8 { min-height: 64.8205rem !important; } + +.hmn9 { min-height: 72.9231rem !important; } + +.hmn10 { min-height: 81.0256rem !important; } + +.hmn11 { min-height: 89.1282rem !important; } + +.hmn12 { min-height: 97.2308rem !important; } + +.hmn100 { min-height: 100% !important; } + +.hmn-initial { min-height: initial !important; } + +@media (max-width: 1264px) { + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ba { border-style= +: solid !important; border-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:bt { border-top-s= +tyle: solid !important; border-top-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:br { border-right= +-style: solid !important; border-right-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:bb { border-botto= +m-style: solid !important; border-bottom-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:bl { border-left-= +style: solid !important; border-left-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:bar0 { border-rad= +ius: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fd-row { flex-dir= +ection: row !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fd-row-reverse { = +flex-direction: row-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fd-column { flex-= +direction: column !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fd-column-reverse= + { flex-direction: column-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fw-wrap { flex-wr= +ap: wrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fw-reverse { flex= +-wrap: wrap-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:fw-nowrap { flex-= +wrap: nowrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-center { justi= +fy-content: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-end { justify-= +content: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-space-around {= + justify-content: space-around !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-space-between = +{ justify-content: space-between !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-space-evenly {= + justify-content: space-evenly !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:jc-start { justif= +y-content: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ai-baseline { ali= +gn-items: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ai-center { align= +-items: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ai-end { align-it= +ems: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ai-start { align-= +items: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ai-stretch { alig= +n-items: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-auto { align-s= +elf: auto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-baseline { ali= +gn-self: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-center { align= +-self: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-end { align-se= +lf: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-start { align-= +self: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:as-stretch { alig= +n-self: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:order-first { ord= +er: -1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:order-last { orde= +r: 1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt0 { margin-top:= + 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt2 { margin-top:= + 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt4 { margin-top:= + 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt6 { margin-top:= + 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt8 { margin-top:= + 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt12 { margin-top= +: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt16 { margin-top= +: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt24 { margin-top= +: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt32 { margin-top= +: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt48 { margin-top= +: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt64 { margin-top= +: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt96 { margin-top= +: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mt128 { margin-to= +p: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr0 { margin-righ= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr2 { margin-righ= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr4 { margin-righ= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr6 { margin-righ= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr8 { margin-righ= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr12 { margin-rig= +ht: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr16 { margin-rig= +ht: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr24 { margin-rig= +ht: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr32 { margin-rig= +ht: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr48 { margin-rig= +ht: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr64 { margin-rig= +ht: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr96 { margin-rig= +ht: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mr128 { margin-ri= +ght: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb0 { margin-bott= +om: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb2 { margin-bott= +om: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb4 { margin-bott= +om: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb6 { margin-bott= +om: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb8 { margin-bott= +om: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb12 { margin-bot= +tom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb16 { margin-bot= +tom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb24 { margin-bot= +tom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb32 { margin-bot= +tom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb48 { margin-bot= +tom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb64 { margin-bot= +tom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb96 { margin-bot= +tom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:mb128 { margin-bo= +ttom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml0 { margin-left= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml2 { margin-left= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml4 { margin-left= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml6 { margin-left= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml8 { margin-left= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml12 { margin-lef= +t: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml16 { margin-lef= +t: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml24 { margin-lef= +t: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml32 { margin-lef= +t: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml48 { margin-lef= +t: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml64 { margin-lef= +t: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml96 { margin-lef= +t: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ml128 { margin-le= +ft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt0 { padding-top= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt2 { padding-top= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt4 { padding-top= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt6 { padding-top= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt8 { padding-top= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt12 { padding-to= +p: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt16 { padding-to= +p: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt24 { padding-to= +p: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt32 { padding-to= +p: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt48 { padding-to= +p: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt64 { padding-to= +p: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt96 { padding-to= +p: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pt128 { padding-t= +op: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr0 { padding-rig= +ht: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr2 { padding-rig= +ht: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr4 { padding-rig= +ht: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr6 { padding-rig= +ht: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr8 { padding-rig= +ht: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr12 { padding-ri= +ght: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr16 { padding-ri= +ght: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr24 { padding-ri= +ght: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr32 { padding-ri= +ght: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr48 { padding-ri= +ght: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr64 { padding-ri= +ght: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr96 { padding-ri= +ght: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pr128 { padding-r= +ight: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb0 { padding-bot= +tom: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb2 { padding-bot= +tom: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb4 { padding-bot= +tom: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb6 { padding-bot= +tom: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb8 { padding-bot= +tom: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb12 { padding-bo= +ttom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb16 { padding-bo= +ttom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb24 { padding-bo= +ttom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb32 { padding-bo= +ttom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb48 { padding-bo= +ttom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb64 { padding-bo= +ttom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb96 { padding-bo= +ttom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pb128 { padding-b= +ottom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl0 { padding-lef= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl2 { padding-lef= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl4 { padding-lef= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl6 { padding-lef= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl8 { padding-lef= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl12 { padding-le= +ft: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl16 { padding-le= +ft: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl24 { padding-le= +ft: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl32 { padding-le= +ft: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl48 { padding-le= +ft: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl64 { padding-le= +ft: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl96 { padding-le= +ft: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:pl128 { padding-l= +eft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ta-left { text-al= +ign: left !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ta-center { text-= +align: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ta-right { text-a= +lign: right !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:d-block { display= +: block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:d-inline { displa= +y: inline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:d-inline-block { = +display: inline-block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:d-none { display:= + none !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ps-absolute { pos= +ition: absolute !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ps-fixed { positi= +on: fixed !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ps-relative { pos= +ition: relative !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ps-static { posit= +ion: static !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:ps-sticky { posit= +ion: sticky !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w25 { width: 25% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w33 { width: 33.3= +333% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w50 { width: 50% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w66 { width: 66.6= +667% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w75 { width: 75% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w100 { width: 100= +% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:w-auto { width: a= +uto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:wmx100 { max-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:wmx-initial { max= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:wmn100 { min-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:wmn-initial { min= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:hmx100 { max-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:hmx-initial { max= +-height: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:hmn100 { min-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .lg\:hmn-initial { min= +-height: initial !important; } +} + +@media (max-width: 1100px) { + html.html__responsive.html__unpinned-leftnav .lg\:ba { border-style: soli= +d !important; border-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:bt { border-top-style: = +solid !important; border-top-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:br { border-right-style= +: solid !important; border-right-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:bb { border-bottom-styl= +e: solid !important; border-bottom-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:bl { border-left-style:= + solid !important; border-left-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:bar0 { border-radius: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fd-row { flex-direction= +: row !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fd-row-reverse { flex-d= +irection: row-reverse !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fd-column { flex-direct= +ion: column !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fd-column-reverse { fle= +x-direction: column-reverse !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fw-wrap { flex-wrap: wr= +ap !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fw-reverse { flex-wrap:= + wrap-reverse !important; } + html.html__responsive.html__unpinned-leftnav .lg\:fw-nowrap { flex-wrap: = +nowrap !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-center { justify-con= +tent: center !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-end { justify-conten= +t: flex-end !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-space-around { justi= +fy-content: space-around !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-space-between { just= +ify-content: space-between !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-space-evenly { justi= +fy-content: space-evenly !important; } + html.html__responsive.html__unpinned-leftnav .lg\:jc-start { justify-cont= +ent: flex-start !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ai-baseline { align-ite= +ms: baseline !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ai-center { align-items= +: center !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ai-end { align-items: f= +lex-end !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ai-start { align-items:= + flex-start !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ai-stretch { align-item= +s: stretch !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-auto { align-self: a= +uto !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-baseline { align-sel= +f: baseline !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-center { align-self:= + center !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-end { align-self: fl= +ex-end !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-start { align-self: = +flex-start !important; } + html.html__responsive.html__unpinned-leftnav .lg\:as-stretch { align-self= +: stretch !important; } + html.html__responsive.html__unpinned-leftnav .lg\:order-first { order: -1= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:order-last { order: 1 != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt0 { margin-top: 0px != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt2 { margin-top: 2px != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt4 { margin-top: 4px != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt6 { margin-top: 6px != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt8 { margin-top: 8px != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt12 { margin-top: 12px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt16 { margin-top: 16px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt24 { margin-top: 24px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt32 { margin-top: 32px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt48 { margin-top: 48px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt64 { margin-top: 64px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt96 { margin-top: 96px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mt128 { margin-top: 128= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr0 { margin-right: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr2 { margin-right: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr4 { margin-right: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr6 { margin-right: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr8 { margin-right: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr12 { margin-right: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr16 { margin-right: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr24 { margin-right: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr32 { margin-right: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr48 { margin-right: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr64 { margin-right: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr96 { margin-right: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mr128 { margin-right: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb0 { margin-bottom: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb2 { margin-bottom: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb4 { margin-bottom: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb6 { margin-bottom: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb8 { margin-bottom: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb12 { margin-bottom: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb16 { margin-bottom: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb24 { margin-bottom: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb32 { margin-bottom: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb48 { margin-bottom: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb64 { margin-bottom: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb96 { margin-bottom: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:mb128 { margin-bottom: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml0 { margin-left: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml2 { margin-left: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml4 { margin-left: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml6 { margin-left: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml8 { margin-left: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml12 { margin-left: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml16 { margin-left: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml24 { margin-left: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml32 { margin-left: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml48 { margin-left: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml64 { margin-left: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml96 { margin-left: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ml128 { margin-left: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt0 { padding-top: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt2 { padding-top: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt4 { padding-top: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt6 { padding-top: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt8 { padding-top: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt12 { padding-top: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt16 { padding-top: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt24 { padding-top: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt32 { padding-top: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt48 { padding-top: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt64 { padding-top: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt96 { padding-top: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pt128 { padding-top: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr0 { padding-right: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr2 { padding-right: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr4 { padding-right: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr6 { padding-right: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr8 { padding-right: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr12 { padding-right: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr16 { padding-right: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr24 { padding-right: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr32 { padding-right: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr48 { padding-right: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr64 { padding-right: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr96 { padding-right: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pr128 { padding-right: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb0 { padding-bottom: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb2 { padding-bottom: 2= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb4 { padding-bottom: 4= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb6 { padding-bottom: 6= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb8 { padding-bottom: 8= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb12 { padding-bottom: = +12px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb16 { padding-bottom: = +16px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb24 { padding-bottom: = +24px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb32 { padding-bottom: = +32px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb48 { padding-bottom: = +48px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb64 { padding-bottom: = +64px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb96 { padding-bottom: = +96px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pb128 { padding-bottom:= + 128px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl0 { padding-left: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl2 { padding-left: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl4 { padding-left: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl6 { padding-left: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl8 { padding-left: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl12 { padding-left: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl16 { padding-left: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl24 { padding-left: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl32 { padding-left: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl48 { padding-left: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl64 { padding-left: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl96 { padding-left: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:pl128 { padding-left: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ta-left { text-align: l= +eft !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ta-center { text-align:= + center !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ta-right { text-align: = +right !important; } + html.html__responsive.html__unpinned-leftnav .lg\:d-block { display: bloc= +k !important; } + html.html__responsive.html__unpinned-leftnav .lg\:d-inline { display: inl= +ine !important; } + html.html__responsive.html__unpinned-leftnav .lg\:d-inline-block { displa= +y: inline-block !important; } + html.html__responsive.html__unpinned-leftnav .lg\:d-none { display: none = +!important; } + html.html__responsive.html__unpinned-leftnav .lg\:ps-absolute { position:= + absolute !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ps-fixed { position: fi= +xed !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ps-relative { position:= + relative !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ps-static { position: s= +tatic !important; } + html.html__responsive.html__unpinned-leftnav .lg\:ps-sticky { position: s= +ticky !important; } + html.html__responsive.html__unpinned-leftnav .lg\:w25 { width: 25% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .lg\:w33 { width: 33.3333% != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:w50 { width: 50% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .lg\:w66 { width: 66.6667% != +important; } + html.html__responsive.html__unpinned-leftnav .lg\:w75 { width: 75% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .lg\:w100 { width: 100% !imp= +ortant; } + html.html__responsive.html__unpinned-leftnav .lg\:w-auto { width: auto !i= +mportant; } + html.html__responsive.html__unpinned-leftnav .lg\:wmx100 { max-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .lg\:wmx-initial { max-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .lg\:wmn100 { min-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .lg\:wmn-initial { min-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .lg\:hmx100 { max-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .lg\:hmx-initial { max-heigh= +t: initial !important; } + html.html__responsive.html__unpinned-leftnav .lg\:hmn100 { min-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .lg\:hmn-initial { min-heigh= +t: initial !important; } +} + +@media (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .md\:ba { border-style= +: solid !important; border-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:bt { border-top-s= +tyle: solid !important; border-top-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:br { border-right= +-style: solid !important; border-right-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:bb { border-botto= +m-style: solid !important; border-bottom-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:bl { border-left-= +style: solid !important; border-left-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:bar0 { border-rad= +ius: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fd-row { flex-dir= +ection: row !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fd-row-reverse { = +flex-direction: row-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fd-column { flex-= +direction: column !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fd-column-reverse= + { flex-direction: column-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fw-wrap { flex-wr= +ap: wrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fw-reverse { flex= +-wrap: wrap-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:fw-nowrap { flex-= +wrap: nowrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-center { justi= +fy-content: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-end { justify-= +content: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-space-around {= + justify-content: space-around !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-space-between = +{ justify-content: space-between !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-space-evenly {= + justify-content: space-evenly !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:jc-start { justif= +y-content: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ai-baseline { ali= +gn-items: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ai-center { align= +-items: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ai-end { align-it= +ems: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ai-start { align-= +items: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ai-stretch { alig= +n-items: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-auto { align-s= +elf: auto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-baseline { ali= +gn-self: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-center { align= +-self: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-end { align-se= +lf: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-start { align-= +self: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:as-stretch { alig= +n-self: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:order-first { ord= +er: -1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:order-last { orde= +r: 1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt0 { margin-top:= + 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt2 { margin-top:= + 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt4 { margin-top:= + 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt6 { margin-top:= + 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt8 { margin-top:= + 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt12 { margin-top= +: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt16 { margin-top= +: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt24 { margin-top= +: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt32 { margin-top= +: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt48 { margin-top= +: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt64 { margin-top= +: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt96 { margin-top= +: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mt128 { margin-to= +p: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr0 { margin-righ= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr2 { margin-righ= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr4 { margin-righ= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr6 { margin-righ= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr8 { margin-righ= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr12 { margin-rig= +ht: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr16 { margin-rig= +ht: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr24 { margin-rig= +ht: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr32 { margin-rig= +ht: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr48 { margin-rig= +ht: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr64 { margin-rig= +ht: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr96 { margin-rig= +ht: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mr128 { margin-ri= +ght: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb0 { margin-bott= +om: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb2 { margin-bott= +om: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb4 { margin-bott= +om: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb6 { margin-bott= +om: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb8 { margin-bott= +om: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb12 { margin-bot= +tom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb16 { margin-bot= +tom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb24 { margin-bot= +tom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb32 { margin-bot= +tom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb48 { margin-bot= +tom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb64 { margin-bot= +tom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb96 { margin-bot= +tom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:mb128 { margin-bo= +ttom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml0 { margin-left= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml2 { margin-left= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml4 { margin-left= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml6 { margin-left= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml8 { margin-left= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml12 { margin-lef= +t: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml16 { margin-lef= +t: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml24 { margin-lef= +t: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml32 { margin-lef= +t: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml48 { margin-lef= +t: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml64 { margin-lef= +t: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml96 { margin-lef= +t: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ml128 { margin-le= +ft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt0 { padding-top= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt2 { padding-top= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt4 { padding-top= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt6 { padding-top= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt8 { padding-top= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt12 { padding-to= +p: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt16 { padding-to= +p: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt24 { padding-to= +p: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt32 { padding-to= +p: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt48 { padding-to= +p: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt64 { padding-to= +p: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt96 { padding-to= +p: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pt128 { padding-t= +op: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr0 { padding-rig= +ht: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr2 { padding-rig= +ht: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr4 { padding-rig= +ht: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr6 { padding-rig= +ht: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr8 { padding-rig= +ht: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr12 { padding-ri= +ght: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr16 { padding-ri= +ght: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr24 { padding-ri= +ght: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr32 { padding-ri= +ght: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr48 { padding-ri= +ght: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr64 { padding-ri= +ght: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr96 { padding-ri= +ght: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pr128 { padding-r= +ight: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb0 { padding-bot= +tom: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb2 { padding-bot= +tom: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb4 { padding-bot= +tom: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb6 { padding-bot= +tom: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb8 { padding-bot= +tom: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb12 { padding-bo= +ttom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb16 { padding-bo= +ttom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb24 { padding-bo= +ttom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb32 { padding-bo= +ttom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb48 { padding-bo= +ttom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb64 { padding-bo= +ttom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb96 { padding-bo= +ttom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pb128 { padding-b= +ottom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl0 { padding-lef= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl2 { padding-lef= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl4 { padding-lef= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl6 { padding-lef= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl8 { padding-lef= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl12 { padding-le= +ft: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl16 { padding-le= +ft: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl24 { padding-le= +ft: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl32 { padding-le= +ft: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl48 { padding-le= +ft: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl64 { padding-le= +ft: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl96 { padding-le= +ft: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:pl128 { padding-l= +eft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ta-left { text-al= +ign: left !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ta-center { text-= +align: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ta-right { text-a= +lign: right !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:d-block { display= +: block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:d-inline { displa= +y: inline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:d-inline-block { = +display: inline-block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:d-none { display:= + none !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ps-absolute { pos= +ition: absolute !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ps-fixed { positi= +on: fixed !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ps-relative { pos= +ition: relative !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ps-static { posit= +ion: static !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:ps-sticky { posit= +ion: sticky !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w25 { width: 25% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w33 { width: 33.3= +333% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w50 { width: 50% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w66 { width: 66.6= +667% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w75 { width: 75% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w100 { width: 100= +% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:w-auto { width: a= +uto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:wmx100 { max-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:wmx-initial { max= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:wmn100 { min-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:wmn-initial { min= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:hmx100 { max-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:hmx-initial { max= +-height: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:hmn100 { min-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .md\:hmn-initial { min= +-height: initial !important; } +} + +@media (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .md\:ba { border-style: soli= +d !important; border-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .md\:bt { border-top-style: = +solid !important; border-top-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .md\:br { border-right-style= +: solid !important; border-right-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .md\:bb { border-bottom-styl= +e: solid !important; border-bottom-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .md\:bl { border-left-style:= + solid !important; border-left-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .md\:bar0 { border-radius: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:fd-row { flex-direction= +: row !important; } + html.html__responsive.html__unpinned-leftnav .md\:fd-row-reverse { flex-d= +irection: row-reverse !important; } + html.html__responsive.html__unpinned-leftnav .md\:fd-column { flex-direct= +ion: column !important; } + html.html__responsive.html__unpinned-leftnav .md\:fd-column-reverse { fle= +x-direction: column-reverse !important; } + html.html__responsive.html__unpinned-leftnav .md\:fw-wrap { flex-wrap: wr= +ap !important; } + html.html__responsive.html__unpinned-leftnav .md\:fw-reverse { flex-wrap:= + wrap-reverse !important; } + html.html__responsive.html__unpinned-leftnav .md\:fw-nowrap { flex-wrap: = +nowrap !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-center { justify-con= +tent: center !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-end { justify-conten= +t: flex-end !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-space-around { justi= +fy-content: space-around !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-space-between { just= +ify-content: space-between !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-space-evenly { justi= +fy-content: space-evenly !important; } + html.html__responsive.html__unpinned-leftnav .md\:jc-start { justify-cont= +ent: flex-start !important; } + html.html__responsive.html__unpinned-leftnav .md\:ai-baseline { align-ite= +ms: baseline !important; } + html.html__responsive.html__unpinned-leftnav .md\:ai-center { align-items= +: center !important; } + html.html__responsive.html__unpinned-leftnav .md\:ai-end { align-items: f= +lex-end !important; } + html.html__responsive.html__unpinned-leftnav .md\:ai-start { align-items:= + flex-start !important; } + html.html__responsive.html__unpinned-leftnav .md\:ai-stretch { align-item= +s: stretch !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-auto { align-self: a= +uto !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-baseline { align-sel= +f: baseline !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-center { align-self:= + center !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-end { align-self: fl= +ex-end !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-start { align-self: = +flex-start !important; } + html.html__responsive.html__unpinned-leftnav .md\:as-stretch { align-self= +: stretch !important; } + html.html__responsive.html__unpinned-leftnav .md\:order-first { order: -1= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:order-last { order: 1 != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt0 { margin-top: 0px != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt2 { margin-top: 2px != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt4 { margin-top: 4px != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt6 { margin-top: 6px != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt8 { margin-top: 8px != +important; } + html.html__responsive.html__unpinned-leftnav .md\:mt12 { margin-top: 12px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt16 { margin-top: 16px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt24 { margin-top: 24px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt32 { margin-top: 32px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt48 { margin-top: 48px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt64 { margin-top: 64px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt96 { margin-top: 96px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mt128 { margin-top: 128= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr0 { margin-right: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr2 { margin-right: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr4 { margin-right: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr6 { margin-right: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr8 { margin-right: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr12 { margin-right: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr16 { margin-right: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr24 { margin-right: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr32 { margin-right: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr48 { margin-right: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr64 { margin-right: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr96 { margin-right: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mr128 { margin-right: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb0 { margin-bottom: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb2 { margin-bottom: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb4 { margin-bottom: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb6 { margin-bottom: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb8 { margin-bottom: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb12 { margin-bottom: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb16 { margin-bottom: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb24 { margin-bottom: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb32 { margin-bottom: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb48 { margin-bottom: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb64 { margin-bottom: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb96 { margin-bottom: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .md\:mb128 { margin-bottom: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml0 { margin-left: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ml2 { margin-left: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ml4 { margin-left: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ml6 { margin-left: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ml8 { margin-left: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ml12 { margin-left: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml16 { margin-left: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml24 { margin-left: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml32 { margin-left: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml48 { margin-left: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml64 { margin-left: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml96 { margin-left: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:ml128 { margin-left: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt0 { padding-top: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:pt2 { padding-top: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:pt4 { padding-top: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:pt6 { padding-top: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:pt8 { padding-top: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:pt12 { padding-top: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt16 { padding-top: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt24 { padding-top: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt32 { padding-top: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt48 { padding-top: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt64 { padding-top: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt96 { padding-top: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pt128 { padding-top: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr0 { padding-right: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr2 { padding-right: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr4 { padding-right: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr6 { padding-right: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr8 { padding-right: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr12 { padding-right: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr16 { padding-right: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr24 { padding-right: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr32 { padding-right: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr48 { padding-right: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr64 { padding-right: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr96 { padding-right: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pr128 { padding-right: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb0 { padding-bottom: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb2 { padding-bottom: 2= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb4 { padding-bottom: 4= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb6 { padding-bottom: 6= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb8 { padding-bottom: 8= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb12 { padding-bottom: = +12px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb16 { padding-bottom: = +16px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb24 { padding-bottom: = +24px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb32 { padding-bottom: = +32px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb48 { padding-bottom: = +48px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb64 { padding-bottom: = +64px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb96 { padding-bottom: = +96px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pb128 { padding-bottom:= + 128px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl0 { padding-left: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl2 { padding-left: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl4 { padding-left: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl6 { padding-left: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl8 { padding-left: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl12 { padding-left: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl16 { padding-left: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl24 { padding-left: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl32 { padding-left: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl48 { padding-left: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl64 { padding-left: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl96 { padding-left: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .md\:pl128 { padding-left: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .md\:ta-left { text-align: l= +eft !important; } + html.html__responsive.html__unpinned-leftnav .md\:ta-center { text-align:= + center !important; } + html.html__responsive.html__unpinned-leftnav .md\:ta-right { text-align: = +right !important; } + html.html__responsive.html__unpinned-leftnav .md\:d-block { display: bloc= +k !important; } + html.html__responsive.html__unpinned-leftnav .md\:d-inline { display: inl= +ine !important; } + html.html__responsive.html__unpinned-leftnav .md\:d-inline-block { displa= +y: inline-block !important; } + html.html__responsive.html__unpinned-leftnav .md\:d-none { display: none = +!important; } + html.html__responsive.html__unpinned-leftnav .md\:ps-absolute { position:= + absolute !important; } + html.html__responsive.html__unpinned-leftnav .md\:ps-fixed { position: fi= +xed !important; } + html.html__responsive.html__unpinned-leftnav .md\:ps-relative { position:= + relative !important; } + html.html__responsive.html__unpinned-leftnav .md\:ps-static { position: s= +tatic !important; } + html.html__responsive.html__unpinned-leftnav .md\:ps-sticky { position: s= +ticky !important; } + html.html__responsive.html__unpinned-leftnav .md\:w25 { width: 25% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .md\:w33 { width: 33.3333% != +important; } + html.html__responsive.html__unpinned-leftnav .md\:w50 { width: 50% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .md\:w66 { width: 66.6667% != +important; } + html.html__responsive.html__unpinned-leftnav .md\:w75 { width: 75% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .md\:w100 { width: 100% !imp= +ortant; } + html.html__responsive.html__unpinned-leftnav .md\:w-auto { width: auto !i= +mportant; } + html.html__responsive.html__unpinned-leftnav .md\:wmx100 { max-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .md\:wmx-initial { max-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .md\:wmn100 { min-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .md\:wmn-initial { min-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .md\:hmx100 { max-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .md\:hmx-initial { max-heigh= +t: initial !important; } + html.html__responsive.html__unpinned-leftnav .md\:hmn100 { min-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .md\:hmn-initial { min-heigh= +t: initial !important; } +} + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ba { border-style= +: solid !important; border-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:bt { border-top-s= +tyle: solid !important; border-top-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:br { border-right= +-style: solid !important; border-right-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:bb { border-botto= +m-style: solid !important; border-bottom-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:bl { border-left-= +style: solid !important; border-left-width: 1px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:bar0 { border-rad= +ius: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fd-row { flex-dir= +ection: row !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fd-row-reverse { = +flex-direction: row-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fd-column { flex-= +direction: column !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fd-column-reverse= + { flex-direction: column-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fw-wrap { flex-wr= +ap: wrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fw-reverse { flex= +-wrap: wrap-reverse !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:fw-nowrap { flex-= +wrap: nowrap !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-center { justi= +fy-content: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-end { justify-= +content: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-space-around {= + justify-content: space-around !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-space-between = +{ justify-content: space-between !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-space-evenly {= + justify-content: space-evenly !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:jc-start { justif= +y-content: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ai-baseline { ali= +gn-items: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ai-center { align= +-items: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ai-end { align-it= +ems: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ai-start { align-= +items: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ai-stretch { alig= +n-items: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-auto { align-s= +elf: auto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-baseline { ali= +gn-self: baseline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-center { align= +-self: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-end { align-se= +lf: flex-end !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-start { align-= +self: flex-start !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:as-stretch { alig= +n-self: stretch !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:order-first { ord= +er: -1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:order-last { orde= +r: 1 !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt0 { margin-top:= + 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt2 { margin-top:= + 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt4 { margin-top:= + 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt6 { margin-top:= + 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt8 { margin-top:= + 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt12 { margin-top= +: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt16 { margin-top= +: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt24 { margin-top= +: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt32 { margin-top= +: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt48 { margin-top= +: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt64 { margin-top= +: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt96 { margin-top= +: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mt128 { margin-to= +p: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr0 { margin-righ= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr2 { margin-righ= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr4 { margin-righ= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr6 { margin-righ= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr8 { margin-righ= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr12 { margin-rig= +ht: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr16 { margin-rig= +ht: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr24 { margin-rig= +ht: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr32 { margin-rig= +ht: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr48 { margin-rig= +ht: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr64 { margin-rig= +ht: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr96 { margin-rig= +ht: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mr128 { margin-ri= +ght: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb0 { margin-bott= +om: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb2 { margin-bott= +om: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb4 { margin-bott= +om: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb6 { margin-bott= +om: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb8 { margin-bott= +om: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb12 { margin-bot= +tom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb16 { margin-bot= +tom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb24 { margin-bot= +tom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb32 { margin-bot= +tom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb48 { margin-bot= +tom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb64 { margin-bot= +tom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb96 { margin-bot= +tom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:mb128 { margin-bo= +ttom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml0 { margin-left= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml2 { margin-left= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml4 { margin-left= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml6 { margin-left= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml8 { margin-left= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml12 { margin-lef= +t: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml16 { margin-lef= +t: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml24 { margin-lef= +t: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml32 { margin-lef= +t: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml48 { margin-lef= +t: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml64 { margin-lef= +t: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml96 { margin-lef= +t: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ml128 { margin-le= +ft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt0 { padding-top= +: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt2 { padding-top= +: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt4 { padding-top= +: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt6 { padding-top= +: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt8 { padding-top= +: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt12 { padding-to= +p: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt16 { padding-to= +p: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt24 { padding-to= +p: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt32 { padding-to= +p: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt48 { padding-to= +p: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt64 { padding-to= +p: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt96 { padding-to= +p: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pt128 { padding-t= +op: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr0 { padding-rig= +ht: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr2 { padding-rig= +ht: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr4 { padding-rig= +ht: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr6 { padding-rig= +ht: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr8 { padding-rig= +ht: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr12 { padding-ri= +ght: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr16 { padding-ri= +ght: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr24 { padding-ri= +ght: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr32 { padding-ri= +ght: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr48 { padding-ri= +ght: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr64 { padding-ri= +ght: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr96 { padding-ri= +ght: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pr128 { padding-r= +ight: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb0 { padding-bot= +tom: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb2 { padding-bot= +tom: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb4 { padding-bot= +tom: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb6 { padding-bot= +tom: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb8 { padding-bot= +tom: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb12 { padding-bo= +ttom: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb16 { padding-bo= +ttom: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb24 { padding-bo= +ttom: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb32 { padding-bo= +ttom: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb48 { padding-bo= +ttom: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb64 { padding-bo= +ttom: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb96 { padding-bo= +ttom: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pb128 { padding-b= +ottom: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl0 { padding-lef= +t: 0px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl2 { padding-lef= +t: 2px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl4 { padding-lef= +t: 4px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl6 { padding-lef= +t: 6px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl8 { padding-lef= +t: 8px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl12 { padding-le= +ft: 12px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl16 { padding-le= +ft: 16px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl24 { padding-le= +ft: 24px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl32 { padding-le= +ft: 32px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl48 { padding-le= +ft: 48px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl64 { padding-le= +ft: 64px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl96 { padding-le= +ft: 96px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:pl128 { padding-l= +eft: 128px !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ta-left { text-al= +ign: left !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ta-center { text-= +align: center !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ta-right { text-a= +lign: right !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:d-block { display= +: block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:d-inline { displa= +y: inline !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:d-inline-block { = +display: inline-block !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:d-none { display:= + none !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ps-absolute { pos= +ition: absolute !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ps-fixed { positi= +on: fixed !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ps-relative { pos= +ition: relative !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ps-static { posit= +ion: static !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:ps-sticky { posit= +ion: sticky !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w25 { width: 25% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w33 { width: 33.3= +333% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w50 { width: 50% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w66 { width: 66.6= +667% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w75 { width: 75% = +!important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w100 { width: 100= +% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:w-auto { width: a= +uto !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:wmx100 { max-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:wmx-initial { max= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:wmn100 { min-widt= +h: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:wmn-initial { min= +-width: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:hmx100 { max-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:hmx-initial { max= +-height: initial !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:hmn100 { min-heig= +ht: 100% !important; } + html.html__responsive:not(.html__unpinned-leftnav) .sm\:hmn-initial { min= +-height: initial !important; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav .sm\:ba { border-style: soli= +d !important; border-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:bt { border-top-style: = +solid !important; border-top-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:br { border-right-style= +: solid !important; border-right-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:bb { border-bottom-styl= +e: solid !important; border-bottom-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:bl { border-left-style:= + solid !important; border-left-width: 1px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:bar0 { border-radius: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fd-row { flex-direction= +: row !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fd-row-reverse { flex-d= +irection: row-reverse !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fd-column { flex-direct= +ion: column !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fd-column-reverse { fle= +x-direction: column-reverse !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fw-wrap { flex-wrap: wr= +ap !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fw-reverse { flex-wrap:= + wrap-reverse !important; } + html.html__responsive.html__unpinned-leftnav .sm\:fw-nowrap { flex-wrap: = +nowrap !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-center { justify-con= +tent: center !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-end { justify-conten= +t: flex-end !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-space-around { justi= +fy-content: space-around !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-space-between { just= +ify-content: space-between !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-space-evenly { justi= +fy-content: space-evenly !important; } + html.html__responsive.html__unpinned-leftnav .sm\:jc-start { justify-cont= +ent: flex-start !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ai-baseline { align-ite= +ms: baseline !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ai-center { align-items= +: center !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ai-end { align-items: f= +lex-end !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ai-start { align-items:= + flex-start !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ai-stretch { align-item= +s: stretch !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-auto { align-self: a= +uto !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-baseline { align-sel= +f: baseline !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-center { align-self:= + center !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-end { align-self: fl= +ex-end !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-start { align-self: = +flex-start !important; } + html.html__responsive.html__unpinned-leftnav .sm\:as-stretch { align-self= +: stretch !important; } + html.html__responsive.html__unpinned-leftnav .sm\:order-first { order: -1= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:order-last { order: 1 != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt0 { margin-top: 0px != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt2 { margin-top: 2px != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt4 { margin-top: 4px != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt6 { margin-top: 6px != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt8 { margin-top: 8px != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt12 { margin-top: 12px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt16 { margin-top: 16px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt24 { margin-top: 24px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt32 { margin-top: 32px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt48 { margin-top: 48px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt64 { margin-top: 64px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt96 { margin-top: 96px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mt128 { margin-top: 128= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr0 { margin-right: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr2 { margin-right: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr4 { margin-right: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr6 { margin-right: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr8 { margin-right: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr12 { margin-right: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr16 { margin-right: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr24 { margin-right: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr32 { margin-right: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr48 { margin-right: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr64 { margin-right: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr96 { margin-right: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mr128 { margin-right: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb0 { margin-bottom: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb2 { margin-bottom: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb4 { margin-bottom: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb6 { margin-bottom: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb8 { margin-bottom: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb12 { margin-bottom: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb16 { margin-bottom: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb24 { margin-bottom: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb32 { margin-bottom: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb48 { margin-bottom: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb64 { margin-bottom: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb96 { margin-bottom: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:mb128 { margin-bottom: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml0 { margin-left: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml2 { margin-left: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml4 { margin-left: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml6 { margin-left: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml8 { margin-left: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml12 { margin-left: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml16 { margin-left: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml24 { margin-left: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml32 { margin-left: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml48 { margin-left: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml64 { margin-left: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml96 { margin-left: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ml128 { margin-left: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt0 { padding-top: 0px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt2 { padding-top: 2px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt4 { padding-top: 4px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt6 { padding-top: 6px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt8 { padding-top: 8px = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt12 { padding-top: 12p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt16 { padding-top: 16p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt24 { padding-top: 24p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt32 { padding-top: 32p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt48 { padding-top: 48p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt64 { padding-top: 64p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt96 { padding-top: 96p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pt128 { padding-top: 12= +8px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr0 { padding-right: 0p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr2 { padding-right: 2p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr4 { padding-right: 4p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr6 { padding-right: 6p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr8 { padding-right: 8p= +x !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr12 { padding-right: 1= +2px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr16 { padding-right: 1= +6px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr24 { padding-right: 2= +4px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr32 { padding-right: 3= +2px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr48 { padding-right: 4= +8px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr64 { padding-right: 6= +4px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr96 { padding-right: 9= +6px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pr128 { padding-right: = +128px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb0 { padding-bottom: 0= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb2 { padding-bottom: 2= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb4 { padding-bottom: 4= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb6 { padding-bottom: 6= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb8 { padding-bottom: 8= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb12 { padding-bottom: = +12px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb16 { padding-bottom: = +16px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb24 { padding-bottom: = +24px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb32 { padding-bottom: = +32px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb48 { padding-bottom: = +48px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb64 { padding-bottom: = +64px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb96 { padding-bottom: = +96px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pb128 { padding-bottom:= + 128px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl0 { padding-left: 0px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl2 { padding-left: 2px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl4 { padding-left: 4px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl6 { padding-left: 6px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl8 { padding-left: 8px= + !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl12 { padding-left: 12= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl16 { padding-left: 16= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl24 { padding-left: 24= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl32 { padding-left: 32= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl48 { padding-left: 48= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl64 { padding-left: 64= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl96 { padding-left: 96= +px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:pl128 { padding-left: 1= +28px !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ta-left { text-align: l= +eft !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ta-center { text-align:= + center !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ta-right { text-align: = +right !important; } + html.html__responsive.html__unpinned-leftnav .sm\:d-block { display: bloc= +k !important; } + html.html__responsive.html__unpinned-leftnav .sm\:d-inline { display: inl= +ine !important; } + html.html__responsive.html__unpinned-leftnav .sm\:d-inline-block { displa= +y: inline-block !important; } + html.html__responsive.html__unpinned-leftnav .sm\:d-none { display: none = +!important; } + html.html__responsive.html__unpinned-leftnav .sm\:ps-absolute { position:= + absolute !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ps-fixed { position: fi= +xed !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ps-relative { position:= + relative !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ps-static { position: s= +tatic !important; } + html.html__responsive.html__unpinned-leftnav .sm\:ps-sticky { position: s= +ticky !important; } + html.html__responsive.html__unpinned-leftnav .sm\:w25 { width: 25% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .sm\:w33 { width: 33.3333% != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:w50 { width: 50% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .sm\:w66 { width: 66.6667% != +important; } + html.html__responsive.html__unpinned-leftnav .sm\:w75 { width: 75% !impor= +tant; } + html.html__responsive.html__unpinned-leftnav .sm\:w100 { width: 100% !imp= +ortant; } + html.html__responsive.html__unpinned-leftnav .sm\:w-auto { width: auto !i= +mportant; } + html.html__responsive.html__unpinned-leftnav .sm\:wmx100 { max-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .sm\:wmx-initial { max-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .sm\:wmn100 { min-width: 100= +% !important; } + html.html__responsive.html__unpinned-leftnav .sm\:wmn-initial { min-width= +: initial !important; } + html.html__responsive.html__unpinned-leftnav .sm\:hmx100 { max-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .sm\:hmx-initial { max-heigh= +t: initial !important; } + html.html__responsive.html__unpinned-leftnav .sm\:hmn100 { min-height: 10= +0% !important; } + html.html__responsive.html__unpinned-leftnav .sm\:hmn-initial { min-heigh= +t: initial !important; } +} +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=383b076f13b6 + +@charset "utf-8"; + +html, body { color: var(--black-800); font-family: Arial, "Helvetica Neue",= + Helvetica, sans-serif; font-size: 13px; line-height: 1.30769; } + +@media (max-width: 640px) { + html.html__responsive:not(.html__unpinned-leftnav), html.html__responsive= +:not(.html__unpinned-leftnav) body { font-size: 11px; } +} + +@media (max-width: 640px) { + html.html__responsive.html__unpinned-leftnav, html.html__responsive.html_= +_unpinned-leftnav body { font-size: 11px; } +} + +body { box-sizing: border-box; min-height: 100%; background-color: var(--wh= +ite); } + +body *, body ::before, body ::after { box-sizing: inherit; } + +.s-banner__body-pt { padding-top: 93px; } + +.s-banner { position: fixed; z-index: 5049; top: 0px; right: 0px; left: 0px= +; width: 100%; padding: 12px; border-top: 1px solid transparent; border-bot= +tom: 1px solid transparent; border-radius: 0px; box-shadow: none; color: va= +r(--fc-medium); font-size: 13px; } + +.s-banner[aria-hidden=3D"true"] { visibility: hidden; opacity: 0; transform= +: translate3d(0px, -50px, 0px); } + +.s-banner[aria-hidden=3D"false"] { visibility: visible; opacity: 1; transfo= +rm: translate3d(0px, 49px, 0px); } + +.s-banner.is-pinned { z-index: 5051; transform: translate3d(0px, 0px, 0px);= + } + +.s-banner.s-banner__important { border-color: transparent; color: var(--whi= +te); } + +.s-banner--container { position: relative; width: 100%; max-width: 1060px; = +margin: 0px auto; } + +.s-btn { position: relative; display: inline-block; padding: 0.8em; border:= + 1px solid transparent; border-radius: 3px; background-color: transparent; = +outline: none; font-family: inherit; font-size: 13px; font-weight: normal; = +line-height: 1.15385; text-align: center; text-decoration: none; cursor: po= +inter; color: rgb(0, 119, 204); } + +.s-btn.grid { display: flex; } + +.s-btn:hover, .s-btn:focus, .s-btn:active { color: rgb(0, 100, 189); backgr= +ound: rgb(242, 249, 255); text-decoration: none; } + +.s-btn:active { background: rgb(207, 234, 254); } + +.s-btn:focus { outline: none; box-shadow: 0 0 0 4px var(--focus-ring); } + +.s-btn[disabled] { opacity: 1; cursor: default; pointer-events: none; color= +: var(--black-300); background-color: var(--black-050); box-shadow: none; } + +.s-btn.is-selected { color: rgb(0, 68, 135); background: rgb(173, 218, 252)= +; box-shadow: none; } + +.s-btn.is-selected:focus { box-shadow: 0 0 0 4px var(--focus-ring); } + +.s-btn.s-btn__dropdown { padding-right: 2em; } + +.s-btn.s-btn__dropdown::after { content: ""; position: absolute; z-index: 3= +0; top: calc(50% - 2px); right: 0.8em; border-style: solid; border-width: 4= +px 4px 0px; border-color: currentcolor transparent; pointer-events: none; } + +.s-btn.s-btn__xs { padding: 0.6em; font-size: 11px; } + +.s-btn.s-btn__xs.s-btn__dropdown { padding-right: 1.5em; } + +.s-btn.s-btn__xs.s-btn__dropdown::after { top: calc(50% - 2px); right: 0.6e= +m; border-width: 3px 3px 0px; } + +.s-btn.s-btn__sm { font-size: 12px; } + +.s-btn.s-btn__sm.s-btn__dropdown { padding-right: 2.05em; } + +.s-btn.s-btn__md { padding: 0.7em; border-radius: 4px; font-size: 1.30769re= +m; } + +.s-btn.s-btn__md.s-btn__dropdown { padding-right: 1.8em; } + +.s-btn.s-btn__md.s-btn__dropdown::after { top: calc(50% - 2px); right: 0.7e= +m; border-width: 5px 5px 0px; } + +.s-btn.s-btn__lg { padding: 0.6em; border-radius: 4px; font-size: 2.07692re= +m; } + +.s-btn.s-btn__lg.s-btn__dropdown { padding-right: 1.5em; } + +.s-btn.s-btn__lg.s-btn__dropdown::after { top: calc(50% - 2px); right: 0.6e= +m; border-width: 6px 6px 0px; } + +.s-btn.s-btn__xl { padding: 0.5em; border-radius: 6px; font-size: 2.61538re= +m; } + +.s-btn.s-btn__xl.s-btn__dropdown { padding-right: 1.3em; } + +.s-btn.s-btn__xl.s-btn__dropdown::after { top: calc(50% - 4px); right: 0.5e= +m; border-width: 7px 7px 0px; } + +.s-btn .s-btn--badge { opacity: 0.5; display: inline-block; border-radius: = +3px; padding: 2px 3px; font-size: 12px; line-height: 1; background-color: c= +urrentcolor; } + +.s-btn .s-btn--number { color: var(--white); } + +.s-btn__outlined { border-color: rgb(55, 159, 239); } + +.s-btn__outlined.is-selected { border-color: rgb(0, 119, 204); } + +.s-btn__outlined[disabled] { color: var(--black-200); border-color: var(--b= +lack-100); background-color: transparent; } + +.s-btn__filled { color: rgb(57, 115, 157); background-color: rgb(225, 236, = +244); border-color: rgb(122, 167, 199); box-shadow: rgba(255, 255, 255, 0.7= +) 0px 1px 0px 0px inset; } + +.s-btn__filled:hover, .s-btn__filled:focus, .s-btn__filled:active { color: = +rgb(44, 87, 119); background-color: rgb(179, 211, 234); } + +.s-btn__filled:active { background-color: rgb(160, 199, 228); border-color:= + rgb(91, 141, 177); box-shadow: none; } + +.s-btn__filled[disabled] { background-color: var(--black-075); border-color= +: var(--black-150); box-shadow: none; } + +.s-btn__filled.is-selected { color: rgb(30, 60, 82); background-color: rgb(= +122, 167, 199); border-color: rgb(57, 115, 157); box-shadow: none; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-btn__filled { box-shadow: none; } +} + +body.has-darkmode__forced .s-btn__filled { box-shadow: none; } + +.s-btn__muted { color: var(--black-500); } + +.s-btn__muted:hover, .s-btn__muted:focus, .s-btn__muted:active { color: var= +(--black-600); background-color: var(--black-025); } + +.s-btn__muted:active { background: var(--black-050); } + +.s-btn__muted:focus { box-shadow: 0 0 0 4px var(--focus-ring-muted); } + +.s-btn__muted.is-selected { color: var(--black-700); background-color: var(= +--black-075); } + +.s-btn__muted.is-selected:focus { box-shadow: 0 0 0 4px var(--focus-ring-mu= +ted); } + +.s-btn__muted.s-btn__outlined { border-color: var(--black-300); } + +.s-btn__muted.s-btn__outlined.is-selected { border-color: var(--black-400);= + } + +.s-btn__muted.s-btn__outlined[disabled] { border-color: var(--black-100); } + +.s-btn__muted.s-btn__filled { color: var(--black-700); background-color: va= +r(--black-100); border-color: transparent; box-shadow: rgba(255, 255, 255, = +0.4) 0px 1px 0px 0px inset; } + +.s-btn__muted.s-btn__filled:hover, .s-btn__muted.s-btn__filled:focus, .s-bt= +n__muted.s-btn__filled:active { color: var(--black-700); background-color: = +var(--black-150); } + +.s-btn__muted.s-btn__filled:active { background-color: var(--black-200); bo= +x-shadow: none; } + +.s-btn__muted.s-btn__filled:focus { box-shadow: 0 0 0 4px var(--focus-ring-= +muted); } + +.s-btn__muted.s-btn__filled.is-selected { color: var(--black-800); backgrou= +nd-color: var(--black-350); box-shadow: none; } + +.s-btn__muted.s-btn__filled.is-selected:focus { box-shadow: 0 0 0 4px var(-= +-focus-ring-muted); } + +.s-btn__muted.s-btn__filled[disabled] { color: var(--black-300); box-shadow= +: none; } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-btn__muted.s-btn__filled { box-shadow: none; } +} + +body.has-darkmode__forced .s-btn__muted.s-btn__filled { box-shadow: none; } + +.s-btn__danger { color: var(--red-600); } + +.s-btn__danger:hover, .s-btn__danger:focus, .s-btn__danger:active { color: = +var(--red-700); background-color: var(--red-050); } + +.s-btn__danger:active { background-color: var(--red-100); } + +.s-btn__danger:focus { box-shadow: 0 0 0 4px var(--focus-ring-error); } + +.s-btn__danger.is-selected { color: var(--red-900); background-color: var(-= +-red-200); } + +.s-btn__danger.is-selected:focus { box-shadow: 0 0 0 4px var(--focus-ring-e= +rror); } + +.s-btn__danger.s-btn__outlined { border-color: var(--red-500); } + +.s-btn__danger.s-btn__outlined.is-selected { border-color: var(--red-600); = +} + +.s-btn__danger.s-btn__outlined[disabled] { border-color: var(--black-200); = +} + +.s-btn__danger.s-btn__filled { color: var(--white); background-color: var(-= +-red-500); border-color: transparent; box-shadow: rgba(255, 255, 255, 0.4) = +0px 1px 0px 0px inset; } + +.s-btn__danger.s-btn__filled:hover, .s-btn__danger.s-btn__filled:focus, .s-= +btn__danger.s-btn__filled:active { color: var(--white); background-color: v= +ar(--red-600); } + +.s-btn__danger.s-btn__filled:active { background-color: var(--red-700); box= +-shadow: none; } + +.s-btn__danger.s-btn__filled:focus { box-shadow: 0 0 0 4px var(--focus-ring= +-error); } + +.s-btn__danger.s-btn__filled.is-selected { color: var(--white); background-= +color: var(--red-800); box-shadow: none; } + +.s-btn__danger.s-btn__filled.is-selected:focus { box-shadow: 0 0 0 4px var(= +--focus-ring-error); } + +.s-btn__danger.s-btn__filled .s-btn--number { color: var(--black-900); } + +.s-btn__danger.s-btn__filled[disabled] { color: var(--white); background-co= +lor: var(--black-200); box-shadow: none; } + +.s-btn__danger.s-btn__filled[disabled] .s-btn--number { color: var(--black-= +300); } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-btn__danger.s-btn__filled { box-shadow: none; } +} + +body.has-darkmode__forced .s-btn__danger.s-btn__filled { box-shadow: none; = +} + +.s-btn__primary { color: var(--white); background-color: rgb(0, 149, 255); = +box-shadow: rgba(255, 255, 255, 0.4) 0px 1px 0px 0px inset; } + +.s-btn__primary:hover, .s-btn__primary:focus, .s-btn__primary:active { colo= +r: var(--white); background-color: rgb(0, 119, 204); } + +.s-btn__primary:active { background-color: rgb(0, 100, 189); box-shadow: no= +ne; } + +.s-btn__primary.is-selected { color: var(--white); background-color: rgb(0,= + 84, 163); } + +.s-btn__primary .s-btn--number { color: var(--black-900); } + +.s-btn__primary[disabled] { color: var(--white); background-color: var(--bl= +ack-200); } + +.s-btn__primary[disabled] .s-btn--number { color: var(--black-300); } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-btn__primary { box-shadow: none; } +} + +body.has-darkmode__forced .s-btn__primary { box-shadow: none; } + +.s-btn__google { border-color: var(--black-100); background-color: var(--wh= +ite); color: var(--black-700); } + +.s-btn__google:hover, .s-btn__google:focus { border-color: var(--black-150)= +; background-color: var(--black-025); color: var(--black-800); } + +.s-btn__google:active { border-color: var(--black-200); background-color: v= +ar(--black-050); color: var(--black-900); } + +.s-btn__facebook { border-color: transparent; background-color: rgb(56, 84,= + 153); color: rgb(255, 255, 255); } + +.s-btn__facebook:hover, .s-btn__facebook:focus { background-color: rgb(49, = +74, 134); color: rgb(255, 255, 255); } + +.s-btn__facebook:active { background-color: rgb(42, 64, 116); color: rgb(25= +5, 255, 255); } + +.s-btn__github { background-color: var(--black-750); color: var(--white); } + +.s-btn__github:hover, .s-btn__github:focus { background-color: var(--black-= +800); color: var(--white); } + +.s-btn__github:active { background-color: var(--black-900); color: var(--wh= +ite); } + +.s-btn__unset, .s-btn__unset:hover, .s-btn__unset:active { padding: 0px; bo= +rder: none; outline: none; font: unset; border-radius: 0px; color: unset; b= +ackground: none; box-shadow: none; cursor: default; } + +.s-btn__unset:focus { color: unset; } + +.s-btn__link { padding: 0px; border: none; border-radius: 0px; outline: non= +e; font: inherit; background: none; box-shadow: none; text-decoration: none= +; color: var(--blue-600); cursor: pointer; } + +.s-btn__link.s-link__visited:visited { color: var(--blue-700); text-decorat= +ion: none; } + +.s-btn__link:hover, .s-btn__link.s-link__visited:hover, .s-btn__link:active= +, .s-btn__link.s-link__visited:active { color: rgb(0, 149, 255); text-decor= +ation: none; } + +.s-btn__link.s-link__grayscale { color: var(--black-800); } + +.s-btn__link.s-link__grayscale.s-link__visited:visited { color: var(--black= +-700); } + +.s-btn__link.s-link__grayscale:hover, .s-btn__link.s-link__grayscale.s-link= +__visited:hover, .s-btn__link.s-link__grayscale:active, .s-btn__link.s-link= +__grayscale.s-link__visited:active { color: var(--black-900); } + +.s-btn__link.s-link__muted { color: var(--black-500); } + +.s-btn__link.s-link__muted.s-link__visited:visited { color: var(--black-700= +); } + +.s-btn__link.s-link__muted:hover, .s-btn__link.s-link__muted.s-link__visite= +d:hover, .s-btn__link.s-link__muted:active, .s-btn__link.s-link__muted.s-li= +nk__visited:active { color: var(--black-600); } + +.s-btn__link.s-link__danger { color: var(--red-500); } + +.s-btn__link.s-link__danger.s-link__visited:visited { color: var(--red-600)= +; } + +.s-btn__link.s-link__danger:hover, .s-btn__link.s-link__danger.s-link__visi= +ted:hover, .s-btn__link.s-link__danger:active, .s-btn__link.s-link__danger.= +s-link__visited:active { color: var(--red-400); } + +.s-btn__link.s-link__inherit { color: inherit !important; } + +.s-btn__link.s-link__inherit:hover, .s-btn__link.s-link__inherit:active, .s= +-btn__link.s-link__inherit.s-link__visited:visited { color: inherit !import= +ant; } + +.s-btn__link.s-link__underlined { text-decoration: underline !important; } + +.s-btn__link:hover, .s-btn__link:active, .s-btn__link:focus { background: n= +one; } + +.s-btn__icon .svg-icon { vertical-align: baseline; margin-top: -0.3em; marg= +in-bottom: -0.3em; transition: opacity 200ms cubic-bezier(0.165, 0.84, 0.44= +, 1) 0s; } + +.s-btn.is-loading { padding-left: 2.2em; } + +.s-btn.is-loading::before { content: ""; position: absolute; opacity: 0.3; = +left: 0.6em; top: calc(50% - 0.6em); width: 1.23077em; height: 1.23077em; b= +order-width: 2px; border-style: solid; border-color: currentcolor; border-r= +adius: 50%; } + +.s-btn.is-loading::after { content: ""; position: absolute; left: 0.6em; to= +p: calc(50% - 0.6em); width: 1.23077em; height: 1.23077em; border-width: 2p= +x; border-style: solid; border-color: transparent transparent transparent c= +urrentcolor; border-radius: 50%; animation: 0.9s cubic-bezier(0.5, 0.1, 0.5= +, 0.9) 0s infinite normal none running s-spinner-rotate; filter: invert(0);= + transform-origin: 50% 50% 1px; } + +.s-btn.is-loading .svg-icon:first-child { margin-left: -23px; opacity: 0; } + +.s-btn.is-loading.s-btn__lg::before, .s-btn.is-loading.s-btn__lg::after { b= +order-width: 3px; } + +.s-btn.is-loading.s-btn__xl::before, .s-btn.is-loading.s-btn__xl::after { b= +order-width: 4px; } + +a, .s-link { text-decoration: none; color: var(--blue-600); cursor: pointer= +; } + +a.s-link__visited:visited, .s-link.s-link__visited:visited { color: var(--b= +lue-700); text-decoration: none; } + +a:hover, .s-link:hover, a.s-link__visited:hover, .s-link.s-link__visited:ho= +ver, a:active, .s-link:active, a.s-link__visited:active, .s-link.s-link__vi= +sited:active { color: rgb(0, 149, 255); text-decoration: none; } + +a.s-link__grayscale, .s-link.s-link__grayscale { color: var(--black-800); } + +a.s-link__grayscale.s-link__visited:visited, .s-link.s-link__grayscale.s-li= +nk__visited:visited { color: var(--black-700); } + +a.s-link__grayscale:hover, .s-link.s-link__grayscale:hover, a.s-link__grays= +cale.s-link__visited:hover, .s-link.s-link__grayscale.s-link__visited:hover= +, a.s-link__grayscale:active, .s-link.s-link__grayscale:active, a.s-link__g= +rayscale.s-link__visited:active, .s-link.s-link__grayscale.s-link__visited:= +active { color: var(--black-900); } + +a.s-link__muted, .s-link.s-link__muted { color: var(--black-500); } + +a.s-link__muted.s-link__visited:visited, .s-link.s-link__muted.s-link__visi= +ted:visited { color: var(--black-700); } + +a.s-link__muted:hover, .s-link.s-link__muted:hover, a.s-link__muted.s-link_= +_visited:hover, .s-link.s-link__muted.s-link__visited:hover, a.s-link__mute= +d:active, .s-link.s-link__muted:active, a.s-link__muted.s-link__visited:act= +ive, .s-link.s-link__muted.s-link__visited:active { color: var(--black-600)= +; } + +a.s-link__danger, .s-link.s-link__danger { color: var(--red-500); } + +a.s-link__danger.s-link__visited:visited, .s-link.s-link__danger.s-link__vi= +sited:visited { color: var(--red-600); } + +a.s-link__danger:hover, .s-link.s-link__danger:hover, a.s-link__danger.s-li= +nk__visited:hover, .s-link.s-link__danger.s-link__visited:hover, a.s-link__= +danger:active, .s-link.s-link__danger:active, a.s-link__danger.s-link__visi= +ted:active, .s-link.s-link__danger.s-link__visited:active { color: var(--re= +d-400); } + +a.s-link__inherit, .s-link.s-link__inherit { color: inherit !important; } + +a.s-link__inherit:hover, .s-link.s-link__inherit:hover, a.s-link__inherit:a= +ctive, .s-link.s-link__inherit:active, a.s-link__inherit.s-link__visited:vi= +sited, .s-link.s-link__inherit.s-link__visited:visited { color: inherit !im= +portant; } + +a.s-link__underlined, .s-link.s-link__underlined { text-decoration: underli= +ne !important; } + +button.s-link { -webkit-appearance: none; background: transparent; border: = +0px; padding: 0px; line-height: inherit; } + +button.s-link:focus { outline: none; } + +.s-anchors.s-anchors__underlined a:not(.s-link) { text-decoration: underlin= +e; } + +.s-anchors.s-anchors__default a:not(.s-link), .s-anchors .s-anchors.s-ancho= +rs__default a:not(.s-link) { color: var(--blue-600); } + +.s-anchors.s-anchors__default a:not(.s-link):hover, .s-anchors .s-anchors.s= +-anchors__default a:not(.s-link):hover, .s-anchors.s-anchors__default a:not= +(.s-link):active, .s-anchors .s-anchors.s-anchors__default a:not(.s-link):a= +ctive { color: rgb(0, 149, 255); } + +.s-anchors.s-anchors__default a:not(.s-link):visited, .s-anchors .s-anchors= +.s-anchors__default a:not(.s-link):visited { color: var(--blue-700); } + +.s-anchors.s-anchors__grayscale a:not(.s-link), .s-anchors .s-anchors.s-anc= +hors__grayscale a:not(.s-link) { color: var(--black-700); } + +.s-anchors.s-anchors__grayscale a:not(.s-link):hover, .s-anchors .s-anchors= +.s-anchors__grayscale a:not(.s-link):hover, .s-anchors.s-anchors__grayscale= + a:not(.s-link):active, .s-anchors .s-anchors.s-anchors__grayscale a:not(.s= +-link):active { color: var(--black-600); } + +.s-anchors.s-anchors__grayscale a:not(.s-link):visited, .s-anchors .s-ancho= +rs.s-anchors__grayscale a:not(.s-link):visited { color: var(--black-900); } + +.s-anchors.s-anchors__inherit a:not(.s-link), .s-anchors .s-anchors.s-ancho= +rs__inherit a:not(.s-link) { color: inherit; } + +.s-anchors.s-anchors__inherit a:not(.s-link):hover, .s-anchors .s-anchors.s= +-anchors__inherit a:not(.s-link):hover, .s-anchors.s-anchors__inherit a:not= +(.s-link):active, .s-anchors .s-anchors.s-anchors__inherit a:not(.s-link):a= +ctive { color: inherit; } + +.s-anchors.s-anchors__inherit a:not(.s-link):visited, .s-anchors .s-anchors= +.s-anchors__inherit a:not(.s-link):visited { color: inherit; } + +.s-anchors.s-anchors__muted a:not(.s-link), .s-anchors .s-anchors.s-anchors= +__muted a:not(.s-link) { color: var(--black-500); } + +.s-anchors.s-anchors__muted a:not(.s-link):hover, .s-anchors .s-anchors.s-a= +nchors__muted a:not(.s-link):hover, .s-anchors.s-anchors__muted a:not(.s-li= +nk):active, .s-anchors .s-anchors.s-anchors__muted a:not(.s-link):active { = +color: var(--black-400); } + +.s-anchors.s-anchors__muted a:not(.s-link):visited, .s-anchors .s-anchors.s= +-anchors__muted a:not(.s-link):visited { color: var(--black-600); } + +.s-anchors.s-anchors__danger a:not(.s-link), .s-anchors .s-anchors.s-anchor= +s__danger a:not(.s-link) { color: var(--red-500); } + +.s-anchors.s-anchors__danger a:not(.s-link):hover, .s-anchors .s-anchors.s-= +anchors__danger a:not(.s-link):hover, .s-anchors.s-anchors__danger a:not(.s= +-link):active, .s-anchors .s-anchors.s-anchors__danger a:not(.s-link):activ= +e { color: var(--red-400); } + +.s-anchors.s-anchors__danger a:not(.s-link):visited, .s-anchors .s-anchors.= +s-anchors__danger a:not(.s-link):visited { color: var(--red-600); } + +.s-block-link { display: block; color: var(--black-600); padding: 6px 8px; = +} + +.s-block-link:hover, .s-block-link:active { color: var(--black-800); } + +.s-block-link.is-selected { color: var(--black-800); font-weight: bold; bac= +kground-color: var(--black-050); } + +.s-block-link.is-selected.s-block-link__right { border-right: 3px solid rgb= +(244, 128, 36); } + +.s-block-link.is-selected.s-block-link__left { border-left: 3px solid rgb(2= +44, 128, 36); } + +.s-navigation { display: flex; margin: -2px; padding: 2px 0px; flex-wrap: w= +rap; } + +.s-navigation.s-navigation__scroll { overflow-x: auto; flex-wrap: nowrap; } + +.s-navigation.s-navigation__scroll::-webkit-scrollbar { width: 8px; height:= + 8px; background-color: transparent; } + +.s-navigation.s-navigation__scroll::-webkit-scrollbar-track { border-radius= +: 8px; background-color: transparent; } + +.s-navigation.s-navigation__scroll::-webkit-scrollbar-thumb { border-radius= +: 8px; background-color: var(--scrollbar); } + +.s-navigation.s-navigation__scroll::-webkit-scrollbar-corner { background-c= +olor: transparent; border-color: transparent; } + +.s-navigation .s-navigation--item { padding: 6px 16px; border-radius: 1000p= +x; margin: 2px; color: var(--black-600); } + +.s-navigation .s-navigation--item:hover, .s-navigation .s-navigation--item:= +active { background: var(--black-100); color: var(--black-600); } + +.s-navigation .s-navigation--item.is-selected { background: rgb(244, 128, 3= +6); color: var(--white); } + +.s-navigation.s-navigation__muted .s-navigation--item.is-selected { backgro= +und: var(--black-050); color: var(--black-800); } + +.s-notice { padding: 16px; border: 1px solid transparent; border-radius: 3p= +x; color: var(--fc-medium); font-size: 13px; } + +.s-toast .s-notice { max-width: 44rem; width: 100%; padding-top: 8px; paddi= +ng-bottom: 8px; box-shadow: var(--bs-sm); pointer-events: all; } + +.s-notice__info, .s-banner__info { border-color: var(--powder-400); backgro= +und-color: var(--powder-100); } + +.s-notice__info.s-notice__important, .s-banner__info.s-notice__important, .= +s-notice__info.s-banner__important, .s-banner__info.s-banner__important { b= +ackground-color: var(--blue-500); } + +.s-notice__success, .s-banner__success { border-color: var(--green-200); ba= +ckground-color: var(--green-050); } + +.s-notice__success.s-notice__important, .s-banner__success.s-notice__import= +ant, .s-notice__success.s-banner__important, .s-banner__success.s-banner__i= +mportant { background-color: var(--green-400); color: var(--black-900); } + +.s-notice__warning, .s-banner__warning { border-color: var(--yellow-300); b= +ackground-color: var(--yellow-050); } + +.s-notice__warning.s-notice__important, .s-banner__warning.s-notice__import= +ant, .s-notice__warning.s-banner__important, .s-banner__warning.s-banner__i= +mportant { background-color: var(--yellow-400); color: var(--black-900); } + +.s-notice__danger, .s-banner__danger { border-color: var(--red-200); backgr= +ound-color: var(--red-050); } + +.s-notice__danger.s-notice__important, .s-banner__danger.s-notice__importan= +t, .s-notice__danger.s-banner__important, .s-banner__danger.s-banner__impor= +tant { background-color: var(--red-400); } + +.s-notice__important { border-color: transparent; background-color: var(--b= +lack-700); color: var(--white); } + +@media (prefers-color-scheme: dark) { + body.has-darkmode .s-notice__info, body.has-darkmode .s-notice__success, = +body.has-darkmode .s-notice__warning, body.has-darkmode .s-notice__danger {= + border-color: transparent; } +} + +body.has-darkmode__forced .s-notice__info, body.has-darkmode__forced .s-not= +ice__success, body.has-darkmode__forced .s-notice__warning, body.has-darkmo= +de__forced .s-notice__danger { border-color: transparent; } + +.s-toast { visibility: hidden; position: fixed; display: flex; justify-cont= +ent: center; top: 16px; left: 8px; right: 8px; opacity: 0; z-index: 9001; t= +ransform: translate3d(0px, -66px, 0px); transition: transform 100ms cubic-b= +ezier(0.25, 0.46, 0.45, 0.94) 0s, opacity 60ms cubic-bezier(0.25, 0.46, 0.4= +5, 0.94) 0ms, visibility 0s ease 150ms; pointer-events: none; } + +.s-toast[aria-hidden=3D"false"] { visibility: visible; opacity: 1; transfor= +m: translate3d(0px, 0px, 0px); transition: visibility 0s ease 0s, opacity 1= +00ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s, transform 100ms cubic-bezier(0.= +165, 0.84, 0.44, 1) 0s; } + +.s-tag { display: inline-flex; place-content: center; min-width: 0px; paddi= +ng-left: 4px; padding-right: 4px; border-style: solid; border-width: 1px; b= +order-radius: 3px; font-size: 12px; line-height: 1.84615; text-decoration: = +none; vertical-align: middle; white-space: nowrap; border-color: transparen= +t; background-color: var(--powder-100); color: var(--powder-700); } + +.s-tag .s-tag--dismiss { color: inherit; background-color: transparent; } + +.s-tag .s-tag--dismiss:hover { color: rgb(255, 255, 255); background-color:= + var(--powder-700); } + +.s-tag.s-tag__sm { font-size: 12px; line-height: 1.5; } + +.s-tag.s-tag__md { padding-left: 6px; padding-right: 6px; font-size: 1.1538= +5rem; line-height: 1.73333; } + +.s-tag.s-tag__lg { padding-left: 6px; padding-right: 6px; border-radius: 4p= +x; font-size: 1.46154rem; line-height: 1.68421; } + +a.s-tag:hover, a.s-tag:focus, a.s-tag:active { border-color: transparent; b= +ackground-color: var(--powder-200); color: var(--powder-800); } + +.s-tag--dismiss { display: flex; place-content: center; align-self: center;= + width: 16px; height: 16px; margin-left: 4px; padding: 1px; border-radius: = +3px; cursor: pointer; } + +.s-tag--dismiss:hover { color: var(--white); } + +.s-tag--sponsor { display: inline-flex; align-self: center; margin: -3px 4p= +x -2px -2px; max-width: 18px; border-radius: 2px; } + +.s-tag__required { border-color: var(--black-200); background-color: var(--= +black-075); color: var(--black-700); } + +.s-tag__required .s-tag--dismiss { color: inherit; background-color: transp= +arent; } + +.s-tag__required .s-tag--dismiss:hover { color: rgb(255, 255, 255); backgro= +und-color: var(--black-700); } + +a.s-tag__required:hover, a.s-tag__required:focus, a.s-tag__required:active = +{ border-color: var(--black-300); background-color: var(--black-100); color= +: var(--black-800); } + +.s-tag__moderator { border-color: var(--red-100); background-color: var(--r= +ed-050); color: var(--red-600); } + +.s-tag__moderator .s-tag--dismiss { color: inherit; background-color: trans= +parent; } + +.s-tag__moderator .s-tag--dismiss:hover { color: rgb(255, 255, 255); backgr= +ound-color: var(--red-600); } + +a.s-tag__moderator:hover, a.s-tag__moderator:focus, a.s-tag__moderator:acti= +ve { border-color: var(--red-200); background-color: var(--red-100); color:= + var(--red-700); } + +.s-tag__muted { border-color: transparent; background-color: var(--black-07= +5); color: var(--black-700); } + +.s-tag__muted .s-tag--dismiss { color: inherit; background-color: transpare= +nt; } + +.s-tag__muted .s-tag--dismiss:hover { color: rgb(255, 255, 255); background= +-color: var(--black-700); } + +a.s-tag__muted:hover, a.s-tag__muted:focus, a.s-tag__muted:active { border-= +color: transparent; background-color: var(--black-100); color: var(--black-= +800); } + +.s-pagination { display: flex; flex-wrap: wrap; margin-left: -2px; margin-r= +ight: -2px; } + +.s-pagination--item { margin-left: 2px; margin-right: 2px; padding: 0px 8px= +; background-color: transparent; border-radius: 3px; border: 1px solid var(= +--black-100); font-size: 13px; line-height: 1.92308; color: var(--fc-medium= +); } + +.s-pagination--item:hover { border-color: var(--black-200); background-colo= +r: var(--black-100); color: var(--fc-dark); } + +.s-pagination--item.is-selected { border-color: transparent; background-col= +or: var(--orange-500); color: var(--white); } + +.s-pagination--item.s-pagination--item__clear, .s-pagination--item.s-pagina= +tion--item__clear:hover { border-color: transparent; background-color: tran= +sparent; } + +.s-sidebarwidget--item[aria-current=3D"true"]::before, .s-sidebarwidget--it= +em > :first-child[aria-current=3D"true"]::before, .s-sidebarwidget--item[ar= +ia-current=3D"page"]::before, .s-sidebarwidget--item > :first-child[aria-cu= +rrent=3D"page"]::before { border-left-color: rgb(244, 128, 36); } + +.s-sidebarwidget--subnav li[aria-current=3D"true"], .s-sidebarwidget--subna= +v li[aria-current=3D"page"] { background-image: url("data:image/svg+xml,%3C= +?xml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22?%3E%3Csvg%20version%3D%= +221.1%22%20viewBox%3D%220%200%207%2010%22%20xmlns%3D%22http%3A//www.w3.org/= +2000/svg%22%3E%3Cpath%20d%3D%22m0.72153%200.68446%204.1336%204.3077-4.1336%= +204.3077%22%20fill%3D%22none%22%20stroke%3D%22%23f48024%22%20stroke-width%3= +D%222%22/%3E%3C/svg%3E"); } + +.row { max-width: 1080px; width: 100%; } + +.row::before, .row::after { display: table; content: " "; } + +.row::after { clear: both; } + +.col-1 { width: 8.33333%; float: left; } + +.col-1.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-1.with-padding:first-child { padding-left: 0px; } + +.col-1.with-padding:last-child { padding-right: 0px; } + +.col-1.col-centered { margin: 0px auto; float: none; } + +.col-2 { width: 16.6667%; float: left; } + +.col-2.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-2.with-padding:first-child { padding-left: 0px; } + +.col-2.with-padding:last-child { padding-right: 0px; } + +.col-2.col-centered { margin: 0px auto; float: none; } + +.col-3 { width: 25%; float: left; } + +.col-3.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-3.with-padding:first-child { padding-left: 0px; } + +.col-3.with-padding:last-child { padding-right: 0px; } + +.col-3.col-centered { margin: 0px auto; float: none; } + +.col-4 { width: 33.3333%; float: left; } + +.col-4.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-4.with-padding:first-child { padding-left: 0px; } + +.col-4.with-padding:last-child { padding-right: 0px; } + +.col-4.col-centered { margin: 0px auto; float: none; } + +.col-5 { width: 41.6667%; float: left; } + +.col-5.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-5.with-padding:first-child { padding-left: 0px; } + +.col-5.with-padding:last-child { padding-right: 0px; } + +.col-5.col-centered { margin: 0px auto; float: none; } + +.col-6 { width: 50%; float: left; } + +.col-6.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-6.with-padding:first-child { padding-left: 0px; } + +.col-6.with-padding:last-child { padding-right: 0px; } + +.col-6.col-centered { margin: 0px auto; float: none; } + +.col-7 { width: 58.3333%; float: left; } + +.col-7.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-7.with-padding:first-child { padding-left: 0px; } + +.col-7.with-padding:last-child { padding-right: 0px; } + +.col-7.col-centered { margin: 0px auto; float: none; } + +.col-8 { width: 66.6667%; float: left; } + +.col-8.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-8.with-padding:first-child { padding-left: 0px; } + +.col-8.with-padding:last-child { padding-right: 0px; } + +.col-8.col-centered { margin: 0px auto; float: none; } + +.col-9 { width: 75%; float: left; } + +.col-9.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-9.with-padding:first-child { padding-left: 0px; } + +.col-9.with-padding:last-child { padding-right: 0px; } + +.col-9.col-centered { margin: 0px auto; float: none; } + +.col-10 { width: 83.3333%; float: left; } + +.col-10.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-10.with-padding:first-child { padding-left: 0px; } + +.col-10.with-padding:last-child { padding-right: 0px; } + +.col-10.col-centered { margin: 0px auto; float: none; } + +.col-11 { width: 91.6667%; float: left; } + +.col-11.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-11.with-padding:first-child { padding-left: 0px; } + +.col-11.with-padding:last-child { padding-right: 0px; } + +.col-11.col-centered { margin: 0px auto; float: none; } + +.col-12 { width: 100%; float: left; } + +.col-12.with-padding { padding-left: 10px; padding-right: 10px; } + +.col-12.with-padding:first-child { padding-left: 0px; } + +.col-12.with-padding:last-child { padding-right: 0px; } + +.col-12.col-centered { margin: 0px auto; float: none; } + +.g-row, .g-column { position: relative; display: flex; } + +.g-row { flex: 1 1 auto; flex-flow: row nowrap; } + +.g-column { flex: 1 0 auto; flex-flow: column nowrap; } + +.g-row._gutters { margin-left: -2px; margin-right: -2px; } + +.g-row._gutters > .g-col { margin-left: 2px; margin-right: 2px; } + +.g-row._gutters > .g-col1 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(8.33333% - 4px); max-width: calc(8.33333% - 4px); } + +.g-row._gutters > .g-col2 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(16.6667% - 4px); max-width: calc(16.6667% - 4px); } + +.g-row._gutters > .g-col3 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(25% - 4px); max-width: calc(25% - 4px); } + +.g-row._gutters > .g-col4 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(33.3333% - 4px); max-width: calc(33.3333% - 4px); } + +.g-row._gutters > .g-col5 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(41.6667% - 4px); max-width: calc(41.6667% - 4px); } + +.g-row._gutters > .g-col6 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(50% - 4px); max-width: calc(50% - 4px); } + +.g-row._gutters > .g-col7 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(58.3333% - 4px); max-width: calc(58.3333% - 4px); } + +.g-row._gutters > .g-col8 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(66.6667% - 4px); max-width: calc(66.6667% - 4px); } + +.g-row._gutters > .g-col9 { margin-left: 2px; margin-right: 2px; flex-basis= +: calc(75% - 4px); max-width: calc(75% - 4px); } + +.g-row._gutters > .g-col10 { margin-left: 2px; margin-right: 2px; flex-basi= +s: calc(83.3333% - 4px); max-width: calc(83.3333% - 4px); } + +.g-row._gutters > .g-col11 { margin-left: 2px; margin-right: 2px; flex-basi= +s: calc(91.6667% - 4px); max-width: calc(91.6667% - 4px); } + +.g-row._gutters > .g-col12 { margin-left: 2px; margin-right: 2px; flex-basi= +s: calc(100% - 4px); max-width: calc(100% - 4px); } + +.g-row._gutters-8 { margin-left: -4px; margin-right: -4px; } + +.g-row._gutters-8 > .g-col { margin-left: 4px; margin-right: 4px; } + +.g-row._gutters-8 > .g-col1 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(8.33333% - 8px); max-width: calc(8.33333% - 8px); } + +.g-row._gutters-8 > .g-col2 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(16.6667% - 8px); max-width: calc(16.6667% - 8px); } + +.g-row._gutters-8 > .g-col3 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(25% - 8px); max-width: calc(25% - 8px); } + +.g-row._gutters-8 > .g-col4 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(33.3333% - 8px); max-width: calc(33.3333% - 8px); } + +.g-row._gutters-8 > .g-col5 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(41.6667% - 8px); max-width: calc(41.6667% - 8px); } + +.g-row._gutters-8 > .g-col6 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(50% - 8px); max-width: calc(50% - 8px); } + +.g-row._gutters-8 > .g-col7 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(58.3333% - 8px); max-width: calc(58.3333% - 8px); } + +.g-row._gutters-8 > .g-col8 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(66.6667% - 8px); max-width: calc(66.6667% - 8px); } + +.g-row._gutters-8 > .g-col9 { margin-left: 4px; margin-right: 4px; flex-bas= +is: calc(75% - 8px); max-width: calc(75% - 8px); } + +.g-row._gutters-8 > .g-col10 { margin-left: 4px; margin-right: 4px; flex-ba= +sis: calc(83.3333% - 8px); max-width: calc(83.3333% - 8px); } + +.g-row._gutters-8 > .g-col11 { margin-left: 4px; margin-right: 4px; flex-ba= +sis: calc(91.6667% - 8px); max-width: calc(91.6667% - 8px); } + +.g-row._gutters-8 > .g-col12 { margin-left: 4px; margin-right: 4px; flex-ba= +sis: calc(100% - 8px); max-width: calc(100% - 8px); } + +.g-row._gutters-12 { margin-left: -6px; margin-right: -6px; } + +.g-row._gutters-12 > .g-col { margin-left: 6px; margin-right: 6px; } + +.g-row._gutters-12 > .g-col1 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(8.33333% - 12px); max-width: calc(8.33333% - 12px); } + +.g-row._gutters-12 > .g-col2 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(16.6667% - 12px); max-width: calc(16.6667% - 12px); } + +.g-row._gutters-12 > .g-col3 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(25% - 12px); max-width: calc(25% - 12px); } + +.g-row._gutters-12 > .g-col4 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(33.3333% - 12px); max-width: calc(33.3333% - 12px); } + +.g-row._gutters-12 > .g-col5 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(41.6667% - 12px); max-width: calc(41.6667% - 12px); } + +.g-row._gutters-12 > .g-col6 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(50% - 12px); max-width: calc(50% - 12px); } + +.g-row._gutters-12 > .g-col7 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(58.3333% - 12px); max-width: calc(58.3333% - 12px); } + +.g-row._gutters-12 > .g-col8 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(66.6667% - 12px); max-width: calc(66.6667% - 12px); } + +.g-row._gutters-12 > .g-col9 { margin-left: 6px; margin-right: 6px; flex-ba= +sis: calc(75% - 12px); max-width: calc(75% - 12px); } + +.g-row._gutters-12 > .g-col10 { margin-left: 6px; margin-right: 6px; flex-b= +asis: calc(83.3333% - 12px); max-width: calc(83.3333% - 12px); } + +.g-row._gutters-12 > .g-col11 { margin-left: 6px; margin-right: 6px; flex-b= +asis: calc(91.6667% - 12px); max-width: calc(91.6667% - 12px); } + +.g-row._gutters-12 > .g-col12 { margin-left: 6px; margin-right: 6px; flex-b= +asis: calc(100% - 12px); max-width: calc(100% - 12px); } + +.g-row._gutters-16 { margin-left: -8px; margin-right: -8px; } + +.g-row._gutters-16 > .g-col { margin-left: 8px; margin-right: 8px; } + +.g-row._gutters-16 > .g-col1 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(8.33333% - 16px); max-width: calc(8.33333% - 16px); } + +.g-row._gutters-16 > .g-col2 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(16.6667% - 16px); max-width: calc(16.6667% - 16px); } + +.g-row._gutters-16 > .g-col3 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(25% - 16px); max-width: calc(25% - 16px); } + +.g-row._gutters-16 > .g-col4 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(33.3333% - 16px); max-width: calc(33.3333% - 16px); } + +.g-row._gutters-16 > .g-col5 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(41.6667% - 16px); max-width: calc(41.6667% - 16px); } + +.g-row._gutters-16 > .g-col6 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(50% - 16px); max-width: calc(50% - 16px); } + +.g-row._gutters-16 > .g-col7 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(58.3333% - 16px); max-width: calc(58.3333% - 16px); } + +.g-row._gutters-16 > .g-col8 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(66.6667% - 16px); max-width: calc(66.6667% - 16px); } + +.g-row._gutters-16 > .g-col9 { margin-left: 8px; margin-right: 8px; flex-ba= +sis: calc(75% - 16px); max-width: calc(75% - 16px); } + +.g-row._gutters-16 > .g-col10 { margin-left: 8px; margin-right: 8px; flex-b= +asis: calc(83.3333% - 16px); max-width: calc(83.3333% - 16px); } + +.g-row._gutters-16 > .g-col11 { margin-left: 8px; margin-right: 8px; flex-b= +asis: calc(91.6667% - 16px); max-width: calc(91.6667% - 16px); } + +.g-row._gutters-16 > .g-col12 { margin-left: 8px; margin-right: 8px; flex-b= +asis: calc(100% - 16px); max-width: calc(100% - 16px); } + +.g-row._gutters-24 { margin-left: -12px; margin-right: -12px; } + +.g-row._gutters-24 > .g-col { margin-left: 12px; margin-right: 12px; } + +.g-row._gutters-24 > .g-col1 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(8.33333% - 24px); max-width: calc(8.33333% - 24px); } + +.g-row._gutters-24 > .g-col2 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(16.6667% - 24px); max-width: calc(16.6667% - 24px); } + +.g-row._gutters-24 > .g-col3 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(25% - 24px); max-width: calc(25% - 24px); } + +.g-row._gutters-24 > .g-col4 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(33.3333% - 24px); max-width: calc(33.3333% - 24px); } + +.g-row._gutters-24 > .g-col5 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(41.6667% - 24px); max-width: calc(41.6667% - 24px); } + +.g-row._gutters-24 > .g-col6 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(50% - 24px); max-width: calc(50% - 24px); } + +.g-row._gutters-24 > .g-col7 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(58.3333% - 24px); max-width: calc(58.3333% - 24px); } + +.g-row._gutters-24 > .g-col8 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(66.6667% - 24px); max-width: calc(66.6667% - 24px); } + +.g-row._gutters-24 > .g-col9 { margin-left: 12px; margin-right: 12px; flex-= +basis: calc(75% - 24px); max-width: calc(75% - 24px); } + +.g-row._gutters-24 > .g-col10 { margin-left: 12px; margin-right: 12px; flex= +-basis: calc(83.3333% - 24px); max-width: calc(83.3333% - 24px); } + +.g-row._gutters-24 > .g-col11 { margin-left: 12px; margin-right: 12px; flex= +-basis: calc(91.6667% - 24px); max-width: calc(91.6667% - 24px); } + +.g-row._gutters-24 > .g-col12 { margin-left: 12px; margin-right: 12px; flex= +-basis: calc(100% - 24px); max-width: calc(100% - 24px); } + +.g-row._gutters-32 { margin-left: -16px; margin-right: -16px; } + +.g-row._gutters-32 > .g-col { margin-left: 16px; margin-right: 16px; } + +.g-row._gutters-32 > .g-col1 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(8.33333% - 32px); max-width: calc(8.33333% - 32px); } + +.g-row._gutters-32 > .g-col2 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(16.6667% - 32px); max-width: calc(16.6667% - 32px); } + +.g-row._gutters-32 > .g-col3 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(25% - 32px); max-width: calc(25% - 32px); } + +.g-row._gutters-32 > .g-col4 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(33.3333% - 32px); max-width: calc(33.3333% - 32px); } + +.g-row._gutters-32 > .g-col5 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(41.6667% - 32px); max-width: calc(41.6667% - 32px); } + +.g-row._gutters-32 > .g-col6 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(50% - 32px); max-width: calc(50% - 32px); } + +.g-row._gutters-32 > .g-col7 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(58.3333% - 32px); max-width: calc(58.3333% - 32px); } + +.g-row._gutters-32 > .g-col8 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(66.6667% - 32px); max-width: calc(66.6667% - 32px); } + +.g-row._gutters-32 > .g-col9 { margin-left: 16px; margin-right: 16px; flex-= +basis: calc(75% - 32px); max-width: calc(75% - 32px); } + +.g-row._gutters-32 > .g-col10 { margin-left: 16px; margin-right: 16px; flex= +-basis: calc(83.3333% - 32px); max-width: calc(83.3333% - 32px); } + +.g-row._gutters-32 > .g-col11 { margin-left: 16px; margin-right: 16px; flex= +-basis: calc(91.6667% - 32px); max-width: calc(91.6667% - 32px); } + +.g-row._gutters-32 > .g-col12 { margin-left: 16px; margin-right: 16px; flex= +-basis: calc(100% - 32px); max-width: calc(100% - 32px); } + +.g-row._gutters-48 { margin-left: -24px; margin-right: -24px; } + +.g-row._gutters-48 > .g-col { margin-left: 24px; margin-right: 24px; } + +.g-row._gutters-48 > .g-col1 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(8.33333% - 48px); max-width: calc(8.33333% - 48px); } + +.g-row._gutters-48 > .g-col2 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(16.6667% - 48px); max-width: calc(16.6667% - 48px); } + +.g-row._gutters-48 > .g-col3 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(25% - 48px); max-width: calc(25% - 48px); } + +.g-row._gutters-48 > .g-col4 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(33.3333% - 48px); max-width: calc(33.3333% - 48px); } + +.g-row._gutters-48 > .g-col5 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(41.6667% - 48px); max-width: calc(41.6667% - 48px); } + +.g-row._gutters-48 > .g-col6 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(50% - 48px); max-width: calc(50% - 48px); } + +.g-row._gutters-48 > .g-col7 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(58.3333% - 48px); max-width: calc(58.3333% - 48px); } + +.g-row._gutters-48 > .g-col8 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(66.6667% - 48px); max-width: calc(66.6667% - 48px); } + +.g-row._gutters-48 > .g-col9 { margin-left: 24px; margin-right: 24px; flex-= +basis: calc(75% - 48px); max-width: calc(75% - 48px); } + +.g-row._gutters-48 > .g-col10 { margin-left: 24px; margin-right: 24px; flex= +-basis: calc(83.3333% - 48px); max-width: calc(83.3333% - 48px); } + +.g-row._gutters-48 > .g-col11 { margin-left: 24px; margin-right: 24px; flex= +-basis: calc(91.6667% - 48px); max-width: calc(91.6667% - 48px); } + +.g-row._gutters-48 > .g-col12 { margin-left: 24px; margin-right: 24px; flex= +-basis: calc(100% - 48px); max-width: calc(100% - 48px); } + +.g-row._gutters-64 { margin-left: -32px; margin-right: -32px; } + +.g-row._gutters-64 > .g-col { margin-left: 32px; margin-right: 32px; } + +.g-row._gutters-64 > .g-col1 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(8.33333% - 64px); max-width: calc(8.33333% - 64px); } + +.g-row._gutters-64 > .g-col2 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(16.6667% - 64px); max-width: calc(16.6667% - 64px); } + +.g-row._gutters-64 > .g-col3 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(25% - 64px); max-width: calc(25% - 64px); } + +.g-row._gutters-64 > .g-col4 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(33.3333% - 64px); max-width: calc(33.3333% - 64px); } + +.g-row._gutters-64 > .g-col5 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(41.6667% - 64px); max-width: calc(41.6667% - 64px); } + +.g-row._gutters-64 > .g-col6 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(50% - 64px); max-width: calc(50% - 64px); } + +.g-row._gutters-64 > .g-col7 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(58.3333% - 64px); max-width: calc(58.3333% - 64px); } + +.g-row._gutters-64 > .g-col8 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(66.6667% - 64px); max-width: calc(66.6667% - 64px); } + +.g-row._gutters-64 > .g-col9 { margin-left: 32px; margin-right: 32px; flex-= +basis: calc(75% - 64px); max-width: calc(75% - 64px); } + +.g-row._gutters-64 > .g-col10 { margin-left: 32px; margin-right: 32px; flex= +-basis: calc(83.3333% - 64px); max-width: calc(83.3333% - 64px); } + +.g-row._gutters-64 > .g-col11 { margin-left: 32px; margin-right: 32px; flex= +-basis: calc(91.6667% - 64px); max-width: calc(91.6667% - 64px); } + +.g-row._gutters-64 > .g-col12 { margin-left: 32px; margin-right: 32px; flex= +-basis: calc(100% - 64px); max-width: calc(100% - 64px); } + +.g-column._gutters { margin-top: -2px; margin-bottom: -2px; } + +.g-column._gutters > .g-col { margin-top: 2px; margin-bottom: 2px; } + +.g-column._gutters > .g-col1 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(8.33333% - 4px); max-width: calc(8.33333% - 4px); } + +.g-column._gutters > .g-col2 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(16.6667% - 4px); max-width: calc(16.6667% - 4px); } + +.g-column._gutters > .g-col3 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(25% - 4px); max-width: calc(25% - 4px); } + +.g-column._gutters > .g-col4 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(33.3333% - 4px); max-width: calc(33.3333% - 4px); } + +.g-column._gutters > .g-col5 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(41.6667% - 4px); max-width: calc(41.6667% - 4px); } + +.g-column._gutters > .g-col6 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(50% - 4px); max-width: calc(50% - 4px); } + +.g-column._gutters > .g-col7 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(58.3333% - 4px); max-width: calc(58.3333% - 4px); } + +.g-column._gutters > .g-col8 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(66.6667% - 4px); max-width: calc(66.6667% - 4px); } + +.g-column._gutters > .g-col9 { margin-top: 2px; margin-bottom: 2px; flex-ba= +sis: calc(75% - 4px); max-width: calc(75% - 4px); } + +.g-column._gutters > .g-col10 { margin-top: 2px; margin-bottom: 2px; flex-b= +asis: calc(83.3333% - 4px); max-width: calc(83.3333% - 4px); } + +.g-column._gutters > .g-col11 { margin-top: 2px; margin-bottom: 2px; flex-b= +asis: calc(91.6667% - 4px); max-width: calc(91.6667% - 4px); } + +.g-column._gutters > .g-col12 { margin-top: 2px; margin-bottom: 2px; flex-b= +asis: calc(100% - 4px); max-width: calc(100% - 4px); } + +.g-column._gutters-8 { margin-top: -4px; margin-bottom: -4px; } + +.g-column._gutters-8 > .g-col { margin-top: 4px; margin-bottom: 4px; } + +.g-column._gutters-8 > .g-col1 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(8.33333% - 8px); max-width: calc(8.33333% - 8px); } + +.g-column._gutters-8 > .g-col2 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(16.6667% - 8px); max-width: calc(16.6667% - 8px); } + +.g-column._gutters-8 > .g-col3 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(25% - 8px); max-width: calc(25% - 8px); } + +.g-column._gutters-8 > .g-col4 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(33.3333% - 8px); max-width: calc(33.3333% - 8px); } + +.g-column._gutters-8 > .g-col5 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(41.6667% - 8px); max-width: calc(41.6667% - 8px); } + +.g-column._gutters-8 > .g-col6 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(50% - 8px); max-width: calc(50% - 8px); } + +.g-column._gutters-8 > .g-col7 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(58.3333% - 8px); max-width: calc(58.3333% - 8px); } + +.g-column._gutters-8 > .g-col8 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(66.6667% - 8px); max-width: calc(66.6667% - 8px); } + +.g-column._gutters-8 > .g-col9 { margin-top: 4px; margin-bottom: 4px; flex-= +basis: calc(75% - 8px); max-width: calc(75% - 8px); } + +.g-column._gutters-8 > .g-col10 { margin-top: 4px; margin-bottom: 4px; flex= +-basis: calc(83.3333% - 8px); max-width: calc(83.3333% - 8px); } + +.g-column._gutters-8 > .g-col11 { margin-top: 4px; margin-bottom: 4px; flex= +-basis: calc(91.6667% - 8px); max-width: calc(91.6667% - 8px); } + +.g-column._gutters-8 > .g-col12 { margin-top: 4px; margin-bottom: 4px; flex= +-basis: calc(100% - 8px); max-width: calc(100% - 8px); } + +.g-column._gutters-12 { margin-top: -6px; margin-bottom: -6px; } + +.g-column._gutters-12 > .g-col { margin-top: 6px; margin-bottom: 6px; } + +.g-column._gutters-12 > .g-col1 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(8.33333% - 12px); max-width: calc(8.33333% - 12px); } + +.g-column._gutters-12 > .g-col2 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(16.6667% - 12px); max-width: calc(16.6667% - 12px); } + +.g-column._gutters-12 > .g-col3 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(25% - 12px); max-width: calc(25% - 12px); } + +.g-column._gutters-12 > .g-col4 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(33.3333% - 12px); max-width: calc(33.3333% - 12px); } + +.g-column._gutters-12 > .g-col5 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(41.6667% - 12px); max-width: calc(41.6667% - 12px); } + +.g-column._gutters-12 > .g-col6 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(50% - 12px); max-width: calc(50% - 12px); } + +.g-column._gutters-12 > .g-col7 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(58.3333% - 12px); max-width: calc(58.3333% - 12px); } + +.g-column._gutters-12 > .g-col8 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(66.6667% - 12px); max-width: calc(66.6667% - 12px); } + +.g-column._gutters-12 > .g-col9 { margin-top: 6px; margin-bottom: 6px; flex= +-basis: calc(75% - 12px); max-width: calc(75% - 12px); } + +.g-column._gutters-12 > .g-col10 { margin-top: 6px; margin-bottom: 6px; fle= +x-basis: calc(83.3333% - 12px); max-width: calc(83.3333% - 12px); } + +.g-column._gutters-12 > .g-col11 { margin-top: 6px; margin-bottom: 6px; fle= +x-basis: calc(91.6667% - 12px); max-width: calc(91.6667% - 12px); } + +.g-column._gutters-12 > .g-col12 { margin-top: 6px; margin-bottom: 6px; fle= +x-basis: calc(100% - 12px); max-width: calc(100% - 12px); } + +.g-column._gutters-16 { margin-top: -8px; margin-bottom: -8px; } + +.g-column._gutters-16 > .g-col { margin-top: 8px; margin-bottom: 8px; } + +.g-column._gutters-16 > .g-col1 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(8.33333% - 16px); max-width: calc(8.33333% - 16px); } + +.g-column._gutters-16 > .g-col2 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(16.6667% - 16px); max-width: calc(16.6667% - 16px); } + +.g-column._gutters-16 > .g-col3 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(25% - 16px); max-width: calc(25% - 16px); } + +.g-column._gutters-16 > .g-col4 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(33.3333% - 16px); max-width: calc(33.3333% - 16px); } + +.g-column._gutters-16 > .g-col5 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(41.6667% - 16px); max-width: calc(41.6667% - 16px); } + +.g-column._gutters-16 > .g-col6 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(50% - 16px); max-width: calc(50% - 16px); } + +.g-column._gutters-16 > .g-col7 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(58.3333% - 16px); max-width: calc(58.3333% - 16px); } + +.g-column._gutters-16 > .g-col8 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(66.6667% - 16px); max-width: calc(66.6667% - 16px); } + +.g-column._gutters-16 > .g-col9 { margin-top: 8px; margin-bottom: 8px; flex= +-basis: calc(75% - 16px); max-width: calc(75% - 16px); } + +.g-column._gutters-16 > .g-col10 { margin-top: 8px; margin-bottom: 8px; fle= +x-basis: calc(83.3333% - 16px); max-width: calc(83.3333% - 16px); } + +.g-column._gutters-16 > .g-col11 { margin-top: 8px; margin-bottom: 8px; fle= +x-basis: calc(91.6667% - 16px); max-width: calc(91.6667% - 16px); } + +.g-column._gutters-16 > .g-col12 { margin-top: 8px; margin-bottom: 8px; fle= +x-basis: calc(100% - 16px); max-width: calc(100% - 16px); } + +.g-column._gutters-24 { margin-top: -12px; margin-bottom: -12px; } + +.g-column._gutters-24 > .g-col { margin-top: 12px; margin-bottom: 12px; } + +.g-column._gutters-24 > .g-col1 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(8.33333% - 24px); max-width: calc(8.33333% - 24px); } + +.g-column._gutters-24 > .g-col2 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(16.6667% - 24px); max-width: calc(16.6667% - 24px); } + +.g-column._gutters-24 > .g-col3 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(25% - 24px); max-width: calc(25% - 24px); } + +.g-column._gutters-24 > .g-col4 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(33.3333% - 24px); max-width: calc(33.3333% - 24px); } + +.g-column._gutters-24 > .g-col5 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(41.6667% - 24px); max-width: calc(41.6667% - 24px); } + +.g-column._gutters-24 > .g-col6 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(50% - 24px); max-width: calc(50% - 24px); } + +.g-column._gutters-24 > .g-col7 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(58.3333% - 24px); max-width: calc(58.3333% - 24px); } + +.g-column._gutters-24 > .g-col8 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(66.6667% - 24px); max-width: calc(66.6667% - 24px); } + +.g-column._gutters-24 > .g-col9 { margin-top: 12px; margin-bottom: 12px; fl= +ex-basis: calc(75% - 24px); max-width: calc(75% - 24px); } + +.g-column._gutters-24 > .g-col10 { margin-top: 12px; margin-bottom: 12px; f= +lex-basis: calc(83.3333% - 24px); max-width: calc(83.3333% - 24px); } + +.g-column._gutters-24 > .g-col11 { margin-top: 12px; margin-bottom: 12px; f= +lex-basis: calc(91.6667% - 24px); max-width: calc(91.6667% - 24px); } + +.g-column._gutters-24 > .g-col12 { margin-top: 12px; margin-bottom: 12px; f= +lex-basis: calc(100% - 24px); max-width: calc(100% - 24px); } + +.g-column._gutters-32 { margin-top: -16px; margin-bottom: -16px; } + +.g-column._gutters-32 > .g-col { margin-top: 16px; margin-bottom: 16px; } + +.g-column._gutters-32 > .g-col1 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(8.33333% - 32px); max-width: calc(8.33333% - 32px); } + +.g-column._gutters-32 > .g-col2 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(16.6667% - 32px); max-width: calc(16.6667% - 32px); } + +.g-column._gutters-32 > .g-col3 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(25% - 32px); max-width: calc(25% - 32px); } + +.g-column._gutters-32 > .g-col4 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(33.3333% - 32px); max-width: calc(33.3333% - 32px); } + +.g-column._gutters-32 > .g-col5 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(41.6667% - 32px); max-width: calc(41.6667% - 32px); } + +.g-column._gutters-32 > .g-col6 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(50% - 32px); max-width: calc(50% - 32px); } + +.g-column._gutters-32 > .g-col7 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(58.3333% - 32px); max-width: calc(58.3333% - 32px); } + +.g-column._gutters-32 > .g-col8 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(66.6667% - 32px); max-width: calc(66.6667% - 32px); } + +.g-column._gutters-32 > .g-col9 { margin-top: 16px; margin-bottom: 16px; fl= +ex-basis: calc(75% - 32px); max-width: calc(75% - 32px); } + +.g-column._gutters-32 > .g-col10 { margin-top: 16px; margin-bottom: 16px; f= +lex-basis: calc(83.3333% - 32px); max-width: calc(83.3333% - 32px); } + +.g-column._gutters-32 > .g-col11 { margin-top: 16px; margin-bottom: 16px; f= +lex-basis: calc(91.6667% - 32px); max-width: calc(91.6667% - 32px); } + +.g-column._gutters-32 > .g-col12 { margin-top: 16px; margin-bottom: 16px; f= +lex-basis: calc(100% - 32px); max-width: calc(100% - 32px); } + +.g-column._gutters-48 { margin-top: -24px; margin-bottom: -24px; } + +.g-column._gutters-48 > .g-col { margin-top: 24px; margin-bottom: 24px; } + +.g-column._gutters-48 > .g-col1 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(8.33333% - 48px); max-width: calc(8.33333% - 48px); } + +.g-column._gutters-48 > .g-col2 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(16.6667% - 48px); max-width: calc(16.6667% - 48px); } + +.g-column._gutters-48 > .g-col3 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(25% - 48px); max-width: calc(25% - 48px); } + +.g-column._gutters-48 > .g-col4 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(33.3333% - 48px); max-width: calc(33.3333% - 48px); } + +.g-column._gutters-48 > .g-col5 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(41.6667% - 48px); max-width: calc(41.6667% - 48px); } + +.g-column._gutters-48 > .g-col6 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(50% - 48px); max-width: calc(50% - 48px); } + +.g-column._gutters-48 > .g-col7 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(58.3333% - 48px); max-width: calc(58.3333% - 48px); } + +.g-column._gutters-48 > .g-col8 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(66.6667% - 48px); max-width: calc(66.6667% - 48px); } + +.g-column._gutters-48 > .g-col9 { margin-top: 24px; margin-bottom: 24px; fl= +ex-basis: calc(75% - 48px); max-width: calc(75% - 48px); } + +.g-column._gutters-48 > .g-col10 { margin-top: 24px; margin-bottom: 24px; f= +lex-basis: calc(83.3333% - 48px); max-width: calc(83.3333% - 48px); } + +.g-column._gutters-48 > .g-col11 { margin-top: 24px; margin-bottom: 24px; f= +lex-basis: calc(91.6667% - 48px); max-width: calc(91.6667% - 48px); } + +.g-column._gutters-48 > .g-col12 { margin-top: 24px; margin-bottom: 24px; f= +lex-basis: calc(100% - 48px); max-width: calc(100% - 48px); } + +.g-column._gutters-64 { margin-top: -32px; margin-bottom: -32px; } + +.g-column._gutters-64 > .g-col { margin-top: 32px; margin-bottom: 32px; } + +.g-column._gutters-64 > .g-col1 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(8.33333% - 64px); max-width: calc(8.33333% - 64px); } + +.g-column._gutters-64 > .g-col2 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(16.6667% - 64px); max-width: calc(16.6667% - 64px); } + +.g-column._gutters-64 > .g-col3 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(25% - 64px); max-width: calc(25% - 64px); } + +.g-column._gutters-64 > .g-col4 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(33.3333% - 64px); max-width: calc(33.3333% - 64px); } + +.g-column._gutters-64 > .g-col5 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(41.6667% - 64px); max-width: calc(41.6667% - 64px); } + +.g-column._gutters-64 > .g-col6 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(50% - 64px); max-width: calc(50% - 64px); } + +.g-column._gutters-64 > .g-col7 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(58.3333% - 64px); max-width: calc(58.3333% - 64px); } + +.g-column._gutters-64 > .g-col8 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(66.6667% - 64px); max-width: calc(66.6667% - 64px); } + +.g-column._gutters-64 > .g-col9 { margin-top: 32px; margin-bottom: 32px; fl= +ex-basis: calc(75% - 64px); max-width: calc(75% - 64px); } + +.g-column._gutters-64 > .g-col10 { margin-top: 32px; margin-bottom: 32px; f= +lex-basis: calc(83.3333% - 64px); max-width: calc(83.3333% - 64px); } + +.g-column._gutters-64 > .g-col11 { margin-top: 32px; margin-bottom: 32px; f= +lex-basis: calc(91.6667% - 64px); max-width: calc(91.6667% - 64px); } + +.g-column._gutters-64 > .g-col12 { margin-top: 32px; margin-bottom: 32px; f= +lex-basis: calc(100% - 64px); max-width: calc(100% - 64px); } + +.g-col { flex: 1 1 auto; max-width: 100%; } + +.g-col._right { justify-content: flex-end; margin-left: auto; } + +[class^=3D"g-col"] { display: inline-flex; position: relative; } + +.g-col1 { flex: 0 0 8.33333%; max-width: 8.33333%; } + +.g-col-push1 { margin-left: 8.33333%; } + +.g-col-pull1 { margin-left: -8.33333%; } + +.g-col2 { flex: 0 0 16.6667%; max-width: 16.6667%; } + +.g-col-push2 { margin-left: 16.6667%; } + +.g-col-pull2 { margin-left: -16.6667%; } + +.g-col3 { flex: 0 0 25%; max-width: 25%; } + +.g-col-push3 { margin-left: 25%; } + +.g-col-pull3 { margin-left: -25%; } + +.g-col4 { flex: 0 0 33.3333%; max-width: 33.3333%; } + +.g-col-push4 { margin-left: 33.3333%; } + +.g-col-pull4 { margin-left: -33.3333%; } + +.g-col5 { flex: 0 0 41.6667%; max-width: 41.6667%; } + +.g-col-push5 { margin-left: 41.6667%; } + +.g-col-pull5 { margin-left: -41.6667%; } + +.g-col6 { flex: 0 0 50%; max-width: 50%; } + +.g-col-push6 { margin-left: 50%; } + +.g-col-pull6 { margin-left: -50%; } + +.g-col7 { flex: 0 0 58.3333%; max-width: 58.3333%; } + +.g-col-push7 { margin-left: 58.3333%; } + +.g-col-pull7 { margin-left: -58.3333%; } + +.g-col8 { flex: 0 0 66.6667%; max-width: 66.6667%; } + +.g-col-push8 { margin-left: 66.6667%; } + +.g-col-pull8 { margin-left: -66.6667%; } + +.g-col9 { flex: 0 0 75%; max-width: 75%; } + +.g-col-push9 { margin-left: 75%; } + +.g-col-pull9 { margin-left: -75%; } + +.g-col10 { flex: 0 0 83.3333%; max-width: 83.3333%; } + +.g-col-push10 { margin-left: 83.3333%; } + +.g-col-pull10 { margin-left: -83.3333%; } + +.g-col11 { flex: 0 0 91.6667%; max-width: 91.6667%; } + +.g-col-push11 { margin-left: 91.6667%; } + +.g-col-pull11 { margin-left: -91.6667%; } + +.g-col12 { flex: 0 0 100%; max-width: 100%; } + +.g-col-push12 { margin-left: 100%; } + +.g-col-pull12 { margin-left: -100%; } + +.g-center { display: inline-flex; justify-content: center; align-items: cen= +ter; } + +.g-row.jc-end, .g-column.jc-end, [class^=3D"g-col"].jc-end { justify-conten= +t: flex-end; } + +.g-row.jc-center, .g-column.jc-center, [class^=3D"g-col"].jc-center { justi= +fy-content: center; } + +.g-row.jc-sp-between, .g-column.jc-sp-between, [class^=3D"g-col"].jc-sp-bet= +ween { justify-content: space-between; } + +.g-row.jc-sp-around, .g-column.jc-sp-around, [class^=3D"g-col"].jc-sp-aroun= +d { justify-content: space-around; } + +.g-row.ai-start, .g-column.ai-start, [class^=3D"g-col"].ai-start { align-it= +ems: flex-start; } + +.g-row.ai-end, .g-column.ai-end, [class^=3D"g-col"].ai-end { align-items: f= +lex-end; } + +.g-row.ai-center, .g-column.ai-center, [class^=3D"g-col"].ai-center { align= +-items: center; } + +.g-row.ai-right, .g-column.ai-right, [class^=3D"g-col"].ai-right { } + +.g-row.fw-wrap, .g-column.fw-wrap, [class^=3D"g-col"].fw-wrap { flex-wrap: = +wrap; } + +.g-row.ff-row-wrap, .g-column.ff-row-wrap, [class^=3D"g-col"].ff-row-wrap {= + flex-flow: row wrap; } + +.g-row.ff-column, .g-column.ff-column, [class^=3D"g-col"].ff-column { flex-= +flow: column nowrap; } + +.g-row.fl-none, .g-column.fl-none, [class^=3D"g-col"].fl-none { flex: 0 0 a= +uto; } + +.svg-icon { vertical-align: bottom; } + +.svg-icon:not(.native) * { fill: currentcolor; } + +.icon-imgur-white, .icon-imgur-black { background-image: url("../../img/img= +-upload.svg?v=3D16d9e4614ece"), none; background-position: 0px -130px; disp= +lay: inline-block; width: 50px; height: 18px; vertical-align: middle; } + +.icon-imgur-black { background-position: 0px -105px; } + +.icon-pencil, .icon-bubble, .icon-trophy, .icon-up-down { background-image:= + url("../../img/share-sprite-new.svg?v=3D0e11bfd41fbc"), none; display: inl= +ine-block; width: 14px; height: 14px; vertical-align: middle; } + +.icon-pencil { background-position: -123px 0px; } + +.icon-bubble { background-position: -103px -2px; width: 13px; height: 13px;= + } + +.icon-trophy { background-position: -62px -1px; width: 15px; } + +.icon-up-down { background-position: -80px -2px; width: 18px; height: 12px;= + } + +.icon-site, .icon-location, .icon-github, .icon-twitter, .icon-time, .icon-= +calendar, .icon-eye, .icon-se, .icon-q, .icon-a, .icon-q-small, .icon-a-sma= +ll, .icon-ppl-helped, .icon-helpful-edit, .icon-vote-cast, .icon-lock, .ico= +n-so-gray, .icon-external-link, .icon-helpful-flags, .icon-history, .icon-s= +ettings, .icon-settings-off, .icon-arrow-bottom, .icon-user-dark { backgrou= +nd-image: url("../../img/user-profile-sprite.svg?v=3Dd88bb7069e3d"), none; = +display: inline-block; width: 12px; height: 14px; vertical-align: middle; } + +.icon-site { background-position: 0px -80px; } + +.icon-location { background-position: 0px -97px; } + +.icon-github { background-position: 0px -114px; } + +.icon-twitter { background-position: 0px -131px; } + +.icon-time { background-position: 0px -147px; } + +.icon-calendar { background-position: 0px -163px; } + +.icon-eye { background-position: 0px -182px; } + +.icon-se { background-position: 0px -200px; position: relative; top: -1px; = +} + +.icon-envelope-fill-gray { content: " "; color: transparent; background-ima= +ge: url("../../img/icon-envelope-fill-gray.svg?v=3Db3da0246cfcc"), none; ba= +ckground-repeat: no-repeat; background-position: 0px 2px; background-size: = +12px 12px; display: inline-block; width: 12px; height: 12px; opacity: 0.6; = +text-indent: -10000px; } + +.icon-user-dark { width: 13px; height: 13px; background-position: -46px -10= +6px; } + +.icon-arrow-bottom { width: 10px; height: 6px; background-position: -84px -= +411px; } + +.icon-settings-off { height: 12px; width: 11px; background-position: 0px -3= +55px; } + +.icon-settings-off.hover:hover { background-position: 0px -370px; } + +.icon-settings { height: 11px; width: 11px; background-position: 0px -370px= +; } + +.icon-q { background-position: 1px 0px; width: 19px; height: 22px; } + +.icon-q.accepted { background-position: -49px 0px; } + +.icon-a { background-position: 1px -28px; width: 19px; height: 22px; } + +.icon-a.accepted { background-position: -49px -28px; } + +.icon-q-small { background-position: -28px 0px; width: 11px; height: 13px; = +} + +.icon-a-small { background-position: -28px -28px; width: 11px; height: 13px= +; } + +.icon-ppl-helped { background-position: -28px -106px; width: 13px; height: = +13px; } + +.icon-helpful-edit { background-position: -28px -81px; width: 13px; height:= + 13px; } + +.icon-helpful-flags { background-position: -28px -61px; width: 13px; height= +: 13px; } + +.icon-history { background-position: 0px -63px; width: 12px; height: 10px; = +} + +.icon-vote-cast { background-position: -28px -134px; width: 13px; height: 8= +px; } + +.icon-lock { background-position: -28px -151px; width: 13px; height: 13px; = +} + +.icon-so-gray { background-position: -56px -80px; width: 11px; height: 14px= +; } + +.icon-external-link { width: 14px; height: 14px; background-position: -49px= + -369px; } + +.input-icon { position: relative; } + +.input-icon .svg-icon { position: absolute; top: 8px; left: 8px; z-index: 9= +9; pointer-events: none; } + +.input-icon .icon { position: absolute; z-index: 99; pointer-events: none; = +top: 50%; margin-top: -7px; left: 12px; } + +.input-icon input { padding-left: 30px !important; } + +.icon-check-on, .icon-check-off, .item-select-table .item input[type=3D"che= +ckbox"]:checked + .check, .item-select-table .item .check { background-imag= +e: url("../../img/developer-story/timeline.svg?v=3Dd0477cf4f5f4"), none; wi= +dth: 16px; height: 16px; display: inline-block; } + +.icon-check-off, .item-select-table .item .check { background-position: -51= +px -58px; } + +.icon-check-on, .item-select-table .item input[type=3D"checkbox"]:checked += + .check { background-position: -74px -58px; } + +.icon-check-small-on, .icon-check-small-off { background-image: url("../../= +img/developer-story/timeline.svg?v=3Dd0477cf4f5f4"), none; width: 13px; hei= +ght: 10px; display: inline-block; } + +.icon-check-small-on { background-position: -51px -40px; } + +.icon-check-small-off { background-position: -74px -40px; } + +.icon-lock-on, .icon-lock-off { background-image: url("../../img/user-profi= +le-sprite.svg?v=3Dd88bb7069e3d"), none; width: 10px; height: 13px; display:= + inline-block; } + +.icon-lock-off { background-position: -50px -151px; } + +.icon-lock-on { background-position: -28px -151px; } + +.icon-bitbucket, .icon-gitlab, .icon-googlecode, .icon-codeplex, .icon-sour= +ceforge { background-image: url("../../img/developer-story/timeline.svg?v= +=3Dd0477cf4f5f4"), none; background-repeat: no-repeat; width: 13px; height:= + 13px; display: inline-block; } + +.icon-bitbucket { background-position: 0px -224px; } + +.icon-gitlab { background-position: 0px -244px; } + +.icon-googlecode { background-position: 0px -265px; } + +.icon-codeplex { background-position: 0px -304px; } + +.icon-sourceforge { background-position: 0px -285px; } + +.icon-privacy-public, .icon-privacy-private, .icon-privacy-public-btn, .ico= +n-privacy-private-btn { background-image: url("../../img/developer-story/ti= +meline.svg?v=3Dd0477cf4f5f4"), none; width: 11px; height: 11px; display: in= +line-block; } + +.icon-privacy-public { background-position: -52px 0px; } + +.icon-privacy-private { background-position: -76px 0px; } + +.icon-privacy-public-btn { background-position: -52px -20px; } + +.icon-privacy-private-btn { background-position: -76px -20px; } + +.icon-job-big, .icon-project-opensource-big, .icon-project-apps-big, .icon-= +achievement-big, .icon-education-big, .icon-certification-big, .icon-artifa= +ct-big, .icon-generic-assessment-big, .icon-generic-big { background-image:= + url("../../img/developer-story/timeline.svg?v=3Dd0477cf4f5f4"), none; widt= +h: 22px; height: 22px; display: inline-block; } + +.icon-job-big { background-position: -120px -125px; } + +.icon-project-opensource-big { background-position: -120px -75px; } + +.icon-project-apps-big { background-position: -120px 0px; } + +.icon-achievement-big { background-position: -120px -23px; } + +.icon-education-big { background-position: -120px -101px; } + +.icon-certification-big { background-position: -120px -155px; } + +.icon-artifact-big { background-position: -120px -46px; } + +.icon-generic-big { background-position: -120px -184px; } + +.icon-generic-assessment-big { background-position: -48.5px -200px; } + +.icon-i, .icon-i-blue, .icon-i-orange { background-image: url("../../img/de= +veloper-story/timeline.svg?v=3Dd0477cf4f5f4"), none; width: 14px; height: 1= +4px; display: inline-block; background-position: -54px -94px; } + +.icon-i-orange { background-position: -54px -134px; width: 12px; height: 12= +px; } + +.icon-warning-orange, .icon-warning-gray, .icon-warning-label::before { bac= +kground-image: url("../../img/developer-story/timeline.svg?v=3Dd0477cf4f5f4= +"), none; width: 13px; height: 11px; display: inline-block; } + +.icon-warning-orange, .icon-warning-label::before { background-position: -5= +5px -114px; } + +.icon-warning-gray { background-position: -55px -152px; } + +.icon-warning-label { display: inline-block; background: rgb(250, 238, 214)= +; border-radius: 3px; padding: 2px 4px; cursor: pointer; } + +.icon-warning-label::before { content: ""; } + +#location-home-item, .needs-visa { position: relative; padding-left: 1.8em = +!important; } + +#location-home-item .visa-icon, .needs-visa .visa-icon, #location-home-item= + .home-icon, .needs-visa .home-icon { position: absolute; left: 0.4em; top:= + 50%; transform: translate(0%, -50%); } + +.home-icon { background-image: url("../../img/developer-story/timeline.svg?= +v=3Dd0477cf4f5f4"), none; width: 12px; height: 12px; display: inline-block;= + background-position: -76px -132px; } + +.visa-icon { background-image: url("../../img/developer-story/timeline.svg?= +v=3Dd0477cf4f5f4"), none; width: 12px; height: 12px; display: inline-block;= + background-position: -76px -114px; } + +.geo-tag .visa-icon { display: none; } + +.geo-tag.needs-visa .visa-icon { display: inline-block; } + +.icon-image-upload { background-image: url("../../img/developer-story/timel= +ine.svg?v=3Dd0477cf4f5f4"), none; width: 20px; height: 19px; display: inlin= +e-block; background-position: 0px -360px; } + +.icon-external-link { background-image: url("../../img/developer-story/time= +line.svg?v=3Dd0477cf4f5f4"), none; width: 12px; height: 10px; display: inli= +ne-block; background-position: 0px -430px; } + +.icon-play-white { background-image: url("../../img/share-sprite-new.svg?v= +=3D0e11bfd41fbc"), none; width: 12px; height: 12px; display: inline-block; = +background-position: 0px -258px; } + +.btn .icon-play-white { position: relative; top: 1px; } + +.icon-indent { background-image: url("../../img/share-sprite-new.svg?v=3D0e= +11bfd41fbc"), none; width: 12px; height: 12px; display: inline-block; backg= +round-position: 0px -278px; } + +.icon-indent._hover:hover, a:hover .icon-indent._hover { background-positio= +n: -20px -278px; } + +.icon-cancel { background-image: url("../../img/share-sprite-new.svg?v=3D0e= +11bfd41fbc"), none; width: 12px; height: 12px; display: inline-block; backg= +round-position: 0px -238px; } + +.icon-cancel._hover:hover, a:hover .icon-cancel._hover { background-positio= +n: -20px -238px; } + +a .icon-cancel, a .icon-indent { position: relative; top: 1px; } + +.icon-print { background-image: url("../../img/developer-story/timeline.svg= +?v=3Dd0477cf4f5f4"), none; width: 12px; height: 11px; display: inline-block= +; background-position: 0px -488px; } + +.badge, .badge-tag { transition: background-color 0.15s ease-in-out 0s, bor= +der 0.15s ease-in-out 0s, color 0.15s ease-in-out 0s; padding: 0.4em 0.8em = +0.4em 0.4em; margin: 0px 3px 3px 0px; color: rgb(255, 255, 255); line-heigh= +t: 1; text-decoration: none; white-space: nowrap; font-size: 12px; backgrou= +nd-color: rgb(47, 51, 55); border: 1px solid transparent; display: inline-b= +lock; border-radius: 4px; } + +.badge:hover, .badge-tag:hover { color: rgb(255, 255, 255); text-decoration= +: none; background-color: rgb(12, 13, 14); } + +.badge-tag { color: rgb(83, 90, 96); background-color: rgb(239, 240, 241); = +border-color: rgb(214, 217, 220); } + +.badge-tag:hover { color: rgb(71, 77, 82); background-color: rgb(214, 217, = +220); border-color: rgb(200, 204, 208); } + +.badgecount { font-size: 12px; font-weight: bold; padding-left: 2px; color:= + rgb(132, 141, 149); } + +.badge1, .badge2, .badge3 { display: inline-block; overflow: hidden; line-h= +eight: inherit; vertical-align: text-bottom; width: 14px; height: 14px; } + +.badge1 { background-position: -97px -398px; } + +.badge2 { background-position: -77px -398px; } + +.badge3 { background-position: -57px -398px; } + +.badge1-alternate, .badge2-alternate, .badge3-alternate, .badge-how-to { pa= +dding: 4px 8px; border: 1px solid transparent; border-radius: 2px; } + +.badge1-alternate .-total, .badge2-alternate .-total, .badge3-alternate .-t= +otal, .badge-how-to .-total { font-weight: 700; color: rgb(83, 90, 96); } + +.badge1-alternate { background-color: rgb(255, 250, 230); border-color: rgb= +(236, 229, 198); } + +.badge2-alternate, .badge-how-to { background-color: rgb(234, 235, 236); bo= +rder-color: rgb(221, 222, 224); } + +.badge3-alternate { background-color: rgb(248, 233, 221); border-color: rgb= +(240, 222, 203); } + +a.badge1-alternate:hover, a.badge2-alternate:hover, a.badge3-alternate:hove= +r { background-color: rgb(83, 90, 96); border-color: transparent; } + +input[type=3D"submit"]:not(.s-btn), input[type=3D"button"]:not(.s-btn), but= +ton:not(.s-btn), .button, .btn { display: inline-block; position: relative;= + padding: 0.615385em 1em; vertical-align: middle; min-height: 2.46154em; bo= +x-sizing: border-box; font-weight: 400; font-family: inherit; line-height: = +1; text-align: center; text-decoration: none; background-color: transparent= +; border-radius: 2px; border: 1px solid transparent; cursor: pointer; outli= +ne: none; touch-action: manipulation; transition: color 0.1s ease-in 0s, ba= +ckground-color 0.1s ease-in 0s, border-color 0.1s ease-in 0s, box-shadow 0.= +1s ease-in 0s; } + +input[type=3D"submit"]:not(.s-btn):hover, input[type=3D"button"]:not(.s-btn= +):hover, button:not(.s-btn):hover, .button:hover, .btn:hover, input[type=3D= +"submit"]:not(.s-btn):focus, input[type=3D"button"]:not(.s-btn):focus, butt= +on:not(.s-btn):focus, .button:focus, .btn:focus { text-decoration: none; tr= +ansition: color 0.1s ease-in-out 0s, background-color 0.1s ease-in-out 0s, = +border-color 0.1s ease-in-out 0s, box-shadow 0.1s ease-in-out 0s; outline: = +none; } + +input[type=3D"submit"]:not(.s-btn)[disabled], input[type=3D"button"]:not(.s= +-btn)[disabled], button:not(.s-btn)[disabled], .button[disabled], .btn[disa= +bled], input[type=3D"submit"]:not(.s-btn)._disabled, input[type=3D"button"]= +:not(.s-btn)._disabled, button:not(.s-btn)._disabled, .button._disabled, .b= +tn._disabled { cursor: default; pointer-events: none; box-shadow: none; opa= +city: 1; } + +input[type=3D"submit"]:not(.s-btn)[disabled]:hover, input[type=3D"button"]:= +not(.s-btn)[disabled]:hover, button:not(.s-btn)[disabled]:hover, .button[di= +sabled]:hover, .btn[disabled]:hover, input[type=3D"submit"]:not(.s-btn)._di= +sabled:hover, input[type=3D"button"]:not(.s-btn)._disabled:hover, button:no= +t(.s-btn)._disabled:hover, .button._disabled:hover, .btn._disabled:hover { = +cursor: default; box-shadow: none; } + +input[type=3D"submit"]:not(.s-btn).btn__with-icon .svg-icon, input[type=3D"= +button"]:not(.s-btn).btn__with-icon .svg-icon, button:not(.s-btn).btn__with= +-icon .svg-icon, .button.btn__with-icon .svg-icon, .btn.btn__with-icon .svg= +-icon { margin: -3px 4px -2px -4px; } + +input[type=3D"submit"]:not(.s-btn), input[type=3D"button"]:not(.s-btn), but= +ton:not(.s-btn), .button, a.button, a.button:visited, .btn { color: rgb(255= +, 255, 255); background-color: rgb(0, 149, 255); border-color: rgb(0, 119, = +204); box-shadow: rgb(102, 191, 255) 0px 1px 0px inset; } + +input[type=3D"submit"]:not(.s-btn):visited, input[type=3D"button"]:not(.s-b= +tn):visited, button:not(.s-btn):visited, .button:visited, a.button:visited,= + a.button:visited:visited, .btn:visited { color: rgb(255, 255, 255); } + +input[type=3D"submit"]:not(.s-btn):hover, input[type=3D"button"]:not(.s-btn= +):hover, button:not(.s-btn):hover, .button:hover, a.button:hover, a.button:= +visited:hover, .btn:hover, input[type=3D"submit"]:not(.s-btn):focus, input[= +type=3D"button"]:not(.s-btn):focus, button:not(.s-btn):focus, .button:focus= +, a.button:focus, a.button:visited:focus, .btn:focus { color: rgba(255, 255= +, 255, 0.9); background-color: rgb(0, 119, 204); border-color: rgb(0, 89, 1= +53); box-shadow: rgb(51, 170, 255) 0px 1px 0px inset; } + +input[type=3D"submit"]:not(.s-btn)[disabled], input[type=3D"button"]:not(.s= +-btn)[disabled], button:not(.s-btn)[disabled], .button[disabled], a.button[= +disabled], a.button:visited[disabled], .btn[disabled], input[type=3D"submit= +"]:not(.s-btn)._disabled, input[type=3D"button"]:not(.s-btn)._disabled, but= +ton:not(.s-btn)._disabled, .button._disabled, a.button._disabled, a.button:= +visited._disabled, .btn._disabled { color: rgb(255, 255, 255); background-c= +olor: rgb(205, 219, 228); border-color: rgb(189, 207, 219); } + +input[type=3D"submit"].loading, input[type=3D"button"].loading, button.load= +ing, .button.loading, a.button.loading, a.button:visited.loading, .btn.load= +ing, .btn:visited.loading { pointer-events: none; } + +input[type=3D"submit"].loading::before, input[type=3D"button"].loading::bef= +ore, button.loading::before, .button.loading::before, a.button.loading::bef= +ore, a.button:visited.loading::before, .btn.loading::before, .btn:visited.l= +oading::before { float: left; left: -4px; content: ""; } + +input[type=3D"submit"]._block, input[type=3D"button"]._block, button._block= +, .button._block, .btn._block, [class*=3D"btn-"]._block { display: block; m= +argin-bottom: 0.5em; width: 100%; } + +input[type=3D"submit"]._block + input[type=3D"submit"]._block, input[type= +=3D"submit"]._block + input[type=3D"button"]._block, input[type=3D"submit"]= +._block + button._block, input[type=3D"submit"]._block + .button._block, in= +put[type=3D"submit"]._block + .btn._block, input[type=3D"submit"]._block + = +[class*=3D"btn-"]._block, input[type=3D"button"]._block + input[type=3D"sub= +mit"]._block, input[type=3D"button"]._block + input[type=3D"button"]._block= +, input[type=3D"button"]._block + button._block, input[type=3D"button"]._bl= +ock + .button._block, input[type=3D"button"]._block + .btn._block, input[ty= +pe=3D"button"]._block + [class*=3D"btn-"]._block, button._block + input[typ= +e=3D"submit"]._block, button._block + input[type=3D"button"]._block, button= +._block + button._block, button._block + .button._block, button._block + .b= +tn._block, button._block + [class*=3D"btn-"]._block, .button._block + input= +[type=3D"submit"]._block, .button._block + input[type=3D"button"]._block, .= +button._block + button._block, .button._block + .button._block, .button._bl= +ock + .btn._block, .button._block + [class*=3D"btn-"]._block, .btn._block += + input[type=3D"submit"]._block, .btn._block + input[type=3D"button"]._block= +, .btn._block + button._block, .btn._block + .button._block, .btn._block + = +.btn._block, .btn._block + [class*=3D"btn-"]._block, [class*=3D"btn-"]._blo= +ck + input[type=3D"submit"]._block, [class*=3D"btn-"]._block + input[type= +=3D"button"]._block, [class*=3D"btn-"]._block + button._block, [class*=3D"b= +tn-"]._block + .button._block, [class*=3D"btn-"]._block + .btn._block, [cla= +ss*=3D"btn-"]._block + [class*=3D"btn-"]._block { margin-left: 0px; } + +input[type=3D"submit"]._hide, input[type=3D"button"]._hide, button._hide, .= +button._hide, .btn._hide, [class*=3D"btn-"]._hide { display: none; } + +input[type=3D"submit"]._show, input[type=3D"button"]._show, button._show, .= +button._show, .btn._show, [class*=3D"btn-"]._show { display: inline-block; = +} + +input[type=3D"submit"]._xlarge, input[type=3D"button"]._xlarge, button._xla= +rge, .button._xlarge, .btn._xlarge, [class*=3D"btn-"]._xlarge { font-size: = +24px; } + +input[type=3D"submit"]._large, input[type=3D"button"]._large, button._large= +, .button._large, .btn._large, [class*=3D"btn-"]._large { padding-left: 2em= +; padding-right: 2em; font-size: 18px; } + +input[type=3D"submit"]._medium, input[type=3D"button"]._medium, button._med= +ium, .button._medium, .btn._medium, [class*=3D"btn-"]._medium { font-size: = +15px; } + +input[type=3D"submit"]._small, input[type=3D"button"]._small, button._small= +, .button._small, .btn._small, [class*=3D"btn-"]._small { font-size: 12px; = +} + +input[type=3D"submit"]._left, input[type=3D"button"]._left, button._left, .= +button._left, .btn._left, [class*=3D"btn-"]._left { float: left; } + +input[type=3D"submit"]._right, input[type=3D"button"]._right, button._right= +, .button._right, .btn._right, [class*=3D"btn-"]._right { float: right; mar= +gin-right: 2px; } + +input[type=3D"submit"]._right:first-of-type, input[type=3D"button"]._right:= +first-of-type, button._right:first-of-type, .button._right:first-of-type, .= +btn._right:first-of-type, [class*=3D"btn-"]._right:first-of-type { margin-r= +ight: 0px; } + +select, input, button, .button, a.button:link, .btn, [class*=3D"btn-"] { fo= +nt-size: 100%; } + +input[type=3D"text"]:not(.s-input), input[type=3D"password"]:not(.s-input),= + input[type=3D"number"]:not(.s-input), input[type=3D"email"]:not(.s-input),= + input[type=3D"url"]:not(.s-input), input[type=3D"search"]:not(.s-input), i= +nput[type=3D"tel"]:not(.s-input), input[type=3D"datetime"]:not(.s-input), i= +nput[type=3D"datetime-local"]:not(.s-input), input[type=3D"date"]:not(.s-in= +put), textarea:not(.s-input) { padding: 8px 10px; font-family: Arial, "Helv= +etica Neue", Helvetica, sans-serif; font-size: 14px; color: rgb(60, 65, 70)= +; background: rgb(255, 255, 255); border: 1px solid rgb(200, 204, 208); } + +input[type=3D"text"]:not(.s-input)[disabled], input[type=3D"password"]:not(= +.s-input)[disabled], input[type=3D"number"]:not(.s-input)[disabled], input[= +type=3D"email"]:not(.s-input)[disabled], input[type=3D"url"]:not(.s-input)[= +disabled], input[type=3D"search"]:not(.s-input)[disabled], input[type=3D"te= +l"]:not(.s-input)[disabled], input[type=3D"datetime"]:not(.s-input)[disable= +d], input[type=3D"datetime-local"]:not(.s-input)[disabled], input[type=3D"d= +ate"]:not(.s-input)[disabled], textarea:not(.s-input)[disabled] { backgroun= +d: rgba(159, 166, 173, 0.1); cursor: not-allowed; } + +input[type=3D"text"]:not(.s-input)::-webkit-input-placeholder, input[type= +=3D"password"]:not(.s-input)::-webkit-input-placeholder, input[type=3D"numb= +er"]:not(.s-input)::-webkit-input-placeholder, input[type=3D"email"]:not(.s= +-input)::-webkit-input-placeholder, input[type=3D"url"]:not(.s-input)::-web= +kit-input-placeholder, input[type=3D"search"]:not(.s-input)::-webkit-input-= +placeholder, input[type=3D"tel"]:not(.s-input)::-webkit-input-placeholder, = +input[type=3D"datetime"]:not(.s-input)::-webkit-input-placeholder, input[ty= +pe=3D"datetime-local"]:not(.s-input)::-webkit-input-placeholder, input[type= +=3D"date"]:not(.s-input)::-webkit-input-placeholder, textarea:not(.s-input)= +::-webkit-input-placeholder { color: rgb(159, 166, 173); } + +input[type=3D"text"]:not(.s-input)::placeholder, input[type=3D"password"]:n= +ot(.s-input)::placeholder, input[type=3D"number"]:not(.s-input)::placeholde= +r, input[type=3D"email"]:not(.s-input)::placeholder, input[type=3D"url"]:no= +t(.s-input)::placeholder, input[type=3D"search"]:not(.s-input)::placeholder= +, input[type=3D"tel"]:not(.s-input)::placeholder, input[type=3D"datetime"]:= +not(.s-input)::placeholder, input[type=3D"datetime-local"]:not(.s-input)::p= +laceholder, input[type=3D"date"]:not(.s-input)::placeholder, textarea:not(.= +s-input)::placeholder { color: rgb(159, 166, 173); } + +textarea.custom-reason-text { width: 600px; } + +input { margin: 5px 0px; } + +input[type=3D"checkbox"]:not(.s-checkbox), input[type=3D"radio"]:not(.s-rad= +io) { border: none; margin-right: 5px; } + +.form-submit { display: block; padding: 10px 0px 15px; } + +.form-submit input:hover { cursor: pointer; } + +.form-submit input:active { position: relative; top: 1px; } + +.privacy-wrapper { position: relative; } + +.privacy-wrapper .privacy-checkbox { display: none; width: auto; padding: 3= +px 6px; border-radius: 3px 3px 0px 0px; position: absolute; top: -8px; righ= +t: 0px; font-size: 11px; color: white; background: rgb(0, 149, 255); } + +.privacy-wrapper .privacy-checkbox input[type=3D"checkbox"] { position: rel= +ative; z-index: 1; margin-right: 8px; } + +.privacy-wrapper .privacy-checkbox:focus { outline: 0px; } + +.privacy-wrapper .privacy-checkbox::before { content: ""; display: inline-b= +lock; position: absolute; left: 0px; top: 0px; bottom: 0px; width: 24px; ba= +ckground: rgb(0, 113, 194); z-index: 0; border-radius: 3px 0px 0px; } + +.has-error .textarea-with-counter textarea:not(:focus) { border-top-color: = +rgb(222, 83, 94); border-right-color: rgb(222, 83, 94); border-left-color: = +rgb(222, 83, 94); border-bottom: 0px; } + +.has-error .textarea-with-counter textarea:not(:focus) + .-counter { border= +-color: rgb(222, 83, 94); } + +.textarea-with-counter { margin: 5px 0px; } + +.textarea-with-counter + .help-text { display: block; margin-bottom: 5px !i= +mportant; } + +.textarea-with-counter textarea { border-bottom: 0px; display: block; margi= +n: 0px !important; } + +.textarea-with-counter textarea:focus { border-bottom: 0px; } + +.textarea-with-counter textarea:focus + .-counter { border-color: rgb(0, 14= +9, 255); } + +.textarea-with-counter .-counter { display: flex; align-items: center; back= +ground: rgb(246, 248, 249); padding: 4px; color: rgb(132, 141, 149); font-s= +ize: 11px; border-bottom: 1px solid rgb(200, 204, 208); border-left: 1px so= +lid rgb(200, 204, 208); border-right: 1px solid rgb(200, 204, 208); } + +.textarea-with-counter .-counter.-fail .-dot, .textarea-with-counter .-coun= +ter.-success .-dot { display: inline-block; } + +.textarea-with-counter .-counter.-fail .-dot { background: rgb(247, 170, 10= +9); } + +.textarea-with-counter .-counter.-success { color: rgb(94, 186, 125); } + +.textarea-with-counter .-counter.-success .-dot { background: rgb(130, 202,= + 154); } + +.textarea-with-counter .-dot { display: none; width: 8px; height: 8px; marg= +in-right: 4px; border-radius: 50%; } + +.label-required { display: inline-block; margin-left: 2px; color: rgb(132, = +141, 149); } + +.double-input::before, .double-input::after { content: ""; display: table; = +} + +.double-input::after { clear: both; } + +.double-input input[type=3D"text"], .double-input input[type=3D"password"],= + .double-input input[type=3D"email"], .double-input .separator { float: lef= +t; display: inline-block; width: auto; max-width: 155px; } + +.double-input .separator { background: rgb(239, 240, 241); color: rgb(132, = +141, 149); font-size: 13px; padding: 8px 10px; margin: 5px 0px; border-top:= + 1px solid rgb(200, 204, 208); border-bottom: 1px solid rgb(200, 204, 208);= + min-width: 12px; text-align: center; } + +.double-input.disabled { pointer-events: none; cursor: not-allowed; opacity= +: 0.4; } + +.double-input.flex { display: flex; margin-bottom: 18px; } + +.double-input.flex .separator { float: none; flex-shrink: 0; margin: 5px 0p= +x 0px; } + +.double-input.flex input[type=3D"text"], .double-input.flex input[type=3D"p= +assword"], .double-input.flex input[type=3D"email"] { float: none; flex-gro= +w: 1; max-width: none; margin-bottom: 0px !important; } + +.radio-box { display: inline-block; background: rgb(255, 255, 255); border:= + 1px solid rgb(228, 230, 232); border-radius: 3px; padding: 14px 14px 14px = +50px; position: relative; text-align: left; } + +.radio-box:hover { border-color: rgb(189, 205, 215); } + +.radio-box::before { content: ""; display: block; position: absolute; top: = +0px; bottom: 0px; left: 0px; z-index: 0; background: rgb(225, 237, 245); wi= +dth: 40px; } + +.radio-box input[type=3D"radio"] { margin-right: 20px; position: absolute; = +z-index: 1; top: 50%; margin-top: -6px; left: 14px; } + +.switcher { margin: 5px auto 8px; display: inline-block; border: 1px solid = +rgb(228, 230, 232); border-radius: 3px; overflow: hidden; } + +.switcher::before, .switcher::after { content: ""; display: table; } + +.switcher::after { clear: both; } + +.switcher input[type=3D"radio"] { display: none; } + +.switcher label { background: rgb(255, 255, 255); transition: background 30= +0ms ease 0s; text-align: center; color: rgb(106, 115, 124); display: inline= +-block; padding: 10px 8px; min-width: 98px; float: left; cursor: pointer; b= +order-right: 1px solid rgb(228, 230, 232); margin-top: 0px; } + +.switcher label:last-of-type { border-right: 0px; } + +.switcher label:hover { background: rgb(244, 248, 251); } + +.switcher input[type=3D"radio"]:checked + label { background: rgb(225, 236,= + 244); color: rgb(60, 65, 70); pointer-events: none; } + +.switcher.three-choices label { width: 30.5%; } + +.switcher.flex { display: flex; overflow: inherit; } + +.switcher.flex label { min-width: 0px; flex-grow: 1; } + +.switcher.flex.three label { width: 34%; } + +.switcher.flex .informative-tooltip { width: 200px; } + +.disabled-area { opacity: 0.5; pointer-events: none; } + +label.block, input.block, textarea.block { display: block; width: 100%; } + +.inline-field { display: flex; align-items: center; justify-content: space-= +between; } + +.inline-field .inline-label { text-align: left; padding-right: 10px; } + +.inline-field.full-width .inline-label { padding-right: 20px; } + +.inline-field.full-width .inline-column { width: 100%; } + +.input-options { margin-bottom: 20px; } + +label > input[type=3D"checkbox"] { vertical-align: middle; margin: 0px 3px = +3px 0px; } + +label > input[type=3D"radio"] { margin: 0px 3px 4px 0px; } + +input[type=3D"radio"], input[type=3D"checkbox"] { vertical-align: middle; } + +.container .chosen-container .chosen-choices { border: 1px solid rgb(200, 2= +04, 208); box-shadow: rgba(12, 13, 14, 0.1) 0px 1px 2px inset; background: = +rgb(255, 255, 255); } + +.input-loader { position: relative; } + +.input-loader.loading::before { content: ""; top: 50%; margin-top: -7px; ri= +ght: 7px; position: absolute !important; } + +.f-label, label.f-label { display: inline-flex; margin: 0px; font-size: 13p= +x; line-height: 1.46154; font-weight: 700; color: rgb(60, 65, 70); cursor: = +pointer; } + +.f-label._muted, label.f-label._muted { color: rgb(132, 141, 149); } + +.f-label._small, label.f-label._small { font-size: 11px; } + +.f-label._medium, label.f-label._medium { font-size: 17px; } + +.f-label._large, label.f-label._large { font-size: 21px; } + +.f-label._medium, label.f-label._medium, .f-label._large, label.f-label._la= +rge { font-weight: 400; } + +.f-label .is-required, label.f-label .is-required, .f-label .is-optional, l= +abel.f-label .is-optional { display: inline-flex; align-self: flex-end; mar= +gin-bottom: 2px; margin-left: 8px; font-size: 86%; font-style: italic; font= +-weight: 400; } + +p.is-required, span.is-required { color: rgb(222, 83, 94); } + +p.is-optional, span.is-optional { color: rgb(106, 115, 124); } + +.t-help { margin-top: 6px; margin-bottom: 12px; color: rgb(132, 141, 149); = +font-size: 11px; line-height: 1.26667; } + +.t-help._medium { font-size: 13px; } + +.f-input, textarea.f-input, input[type=3D"text"].f-input, input[type=3D"pas= +sword"].f-input, input[type=3D"number"].f-input, input[type=3D"email"].f-in= +put, input[type=3D"url"].f-input, input[type=3D"search"].f-input, input[typ= +e=3D"tel"].f-input, input[type=3D"datetime"].f-input { box-sizing: border-b= +ox; flex: 1 1 auto; margin: 0px; padding: 8px 16px; min-height: auto; verti= +cal-align: middle; border: 1px solid rgb(200, 204, 208); border-radius: 0px= +; box-shadow: rgba(145, 153, 161, 0.2) 0px 0px 1px inset, rgba(255, 255, 25= +5, 0) 0px 0px 0px; font-size: 13px; line-height: 1.46154; color: rgb(60, 65= +, 70); background-color: rgb(255, 255, 255); transition: all 600ms cubic-be= +zier(0.165, 0.84, 0.44, 1) 0s; } + +.f-input::-webkit-input-placeholder, textarea.f-input::-webkit-input-placeh= +older, input[type=3D"text"].f-input::-webkit-input-placeholder, input[type= +=3D"password"].f-input::-webkit-input-placeholder, input[type=3D"number"].f= +-input::-webkit-input-placeholder, input[type=3D"email"].f-input::-webkit-i= +nput-placeholder, input[type=3D"url"].f-input::-webkit-input-placeholder, i= +nput[type=3D"search"].f-input::-webkit-input-placeholder, input[type=3D"tel= +"].f-input::-webkit-input-placeholder, input[type=3D"datetime"].f-input::-w= +ebkit-input-placeholder { color: rgb(200, 204, 208); } + +.f-input::placeholder, textarea.f-input::placeholder, input[type=3D"text"].= +f-input::placeholder, input[type=3D"password"].f-input::placeholder, input[= +type=3D"number"].f-input::placeholder, input[type=3D"email"].f-input::place= +holder, input[type=3D"url"].f-input::placeholder, input[type=3D"search"].f-= +input::placeholder, input[type=3D"tel"].f-input::placeholder, input[type=3D= +"datetime"].f-input::placeholder { color: rgb(200, 204, 208); } + +.f-input:hover, textarea.f-input:hover, input[type=3D"text"].f-input:hover,= + input[type=3D"password"].f-input:hover, input[type=3D"number"].f-input:hov= +er, input[type=3D"email"].f-input:hover, input[type=3D"url"].f-input:hover,= + input[type=3D"search"].f-input:hover, input[type=3D"tel"].f-input:hover, i= +nput[type=3D"datetime"].f-input:hover { border-color: rgba(0, 149, 255, 0.5= +); box-shadow: rgb(212, 215, 217) 0px 0px 2px inset, rgba(0, 149, 255, 0.2)= + 0px 0px 2px; } + +.f-input:focus, textarea.f-input:focus, input[type=3D"text"].f-input:focus,= + input[type=3D"password"].f-input:focus, input[type=3D"number"].f-input:foc= +us, input[type=3D"email"].f-input:focus, input[type=3D"url"].f-input:focus,= + input[type=3D"search"].f-input:focus, input[type=3D"tel"].f-input:focus, i= +nput[type=3D"datetime"].f-input:focus { border-color: rgb(0, 149, 255); box= +-shadow: rgb(239, 240, 241) 0px 0px 4px inset, rgba(0, 149, 255, 0.5) 0px 0= +px 5px; outline: 0px; } + +.f-input[disabled], textarea.f-input[disabled], input[type=3D"text"].f-inpu= +t[disabled], input[type=3D"password"].f-input[disabled], input[type=3D"numb= +er"].f-input[disabled], input[type=3D"email"].f-input[disabled], input[type= +=3D"url"].f-input[disabled], input[type=3D"search"].f-input[disabled], inpu= +t[type=3D"tel"].f-input[disabled], input[type=3D"datetime"].f-input[disable= +d], .f-input.is-disabled, textarea.f-input.is-disabled, input[type=3D"text"= +].f-input.is-disabled, input[type=3D"password"].f-input.is-disabled, input[= +type=3D"number"].f-input.is-disabled, input[type=3D"email"].f-input.is-disa= +bled, input[type=3D"url"].f-input.is-disabled, input[type=3D"search"].f-inp= +ut.is-disabled, input[type=3D"tel"].f-input.is-disabled, input[type=3D"date= +time"].f-input.is-disabled, .f-input[read-only], textarea.f-input[read-only= +], input[type=3D"text"].f-input[read-only], input[type=3D"password"].f-inpu= +t[read-only], input[type=3D"number"].f-input[read-only], input[type=3D"emai= +l"].f-input[read-only], input[type=3D"url"].f-input[read-only], input[type= +=3D"search"].f-input[read-only], input[type=3D"tel"].f-input[read-only], in= +put[type=3D"datetime"].f-input[read-only], .f-input.is-readonly, textarea.f= +-input.is-readonly, input[type=3D"text"].f-input.is-readonly, input[type=3D= +"password"].f-input.is-readonly, input[type=3D"number"].f-input.is-readonly= +, input[type=3D"email"].f-input.is-readonly, input[type=3D"url"].f-input.is= +-readonly, input[type=3D"search"].f-input.is-readonly, input[type=3D"tel"].= +f-input.is-readonly, input[type=3D"datetime"].f-input.is-readonly { border-= +color: rgb(228, 230, 232); box-shadow: rgba(145, 153, 161, 0.1) 0px 0px 3px= + inset; background-color: rgb(239, 240, 241); color: rgb(132, 141, 149); } + +.f-input[disabled], textarea.f-input[disabled], input[type=3D"text"].f-inpu= +t[disabled], input[type=3D"password"].f-input[disabled], input[type=3D"numb= +er"].f-input[disabled], input[type=3D"email"].f-input[disabled], input[type= +=3D"url"].f-input[disabled], input[type=3D"search"].f-input[disabled], inpu= +t[type=3D"tel"].f-input[disabled], input[type=3D"datetime"].f-input[disable= +d], .f-input.is-disabled, textarea.f-input.is-disabled, input[type=3D"text"= +].f-input.is-disabled, input[type=3D"password"].f-input.is-disabled, input[= +type=3D"number"].f-input.is-disabled, input[type=3D"email"].f-input.is-disa= +bled, input[type=3D"url"].f-input.is-disabled, input[type=3D"search"].f-inp= +ut.is-disabled, input[type=3D"tel"].f-input.is-disabled, input[type=3D"date= +time"].f-input.is-disabled { background-image: url("../../Img/forms/icon-di= +sabled.svg?v=3D363cfdd5fd7d"), none; background-repeat: no-repeat; backgrou= +nd-position: right 12px center; cursor: not-allowed; } + +.f-input._large, textarea.f-input._large, input[type=3D"text"].f-input._lar= +ge, input[type=3D"password"].f-input._large, input[type=3D"number"].f-input= +._large, input[type=3D"email"].f-input._large, input[type=3D"url"].f-input.= +_large, input[type=3D"search"].f-input._large, input[type=3D"tel"].f-input.= +_large, input[type=3D"datetime"].f-input._large { padding-top: 16px; paddin= +g-bottom: 16px; font-size: 24px; } + +.f-input._medium, textarea.f-input._medium, input[type=3D"text"].f-input._m= +edium, input[type=3D"password"].f-input._medium, input[type=3D"number"].f-i= +nput._medium, input[type=3D"email"].f-input._medium, input[type=3D"url"].f-= +input._medium, input[type=3D"search"].f-input._medium, input[type=3D"tel"].= +f-input._medium, input[type=3D"datetime"].f-input._medium { font-size: 17px= +; } + +.f-input._small, textarea.f-input._small, input[type=3D"text"].f-input._sma= +ll, input[type=3D"password"].f-input._small, input[type=3D"number"].f-input= +._small, input[type=3D"email"].f-input._small, input[type=3D"url"].f-input.= +_small, input[type=3D"search"].f-input._small, input[type=3D"tel"].f-input.= +_small, input[type=3D"datetime"].f-input._small { padding-left: 12px; paddi= +ng-right: 12px; font-size: 11px; } + +textarea.f-input { padding: 12px; height: auto; resize: vertical; } + +.f-select { position: relative; color: rgb(60, 65, 70); } + +.f-select::before, .f-select::after { content: ""; position: absolute; righ= +t: 0.75em; pointer-events: none; border-width: 3px; border-style: solid; bo= +rder-color: currentcolor transparent; } + +.f-select::before { top: calc(50% - 6px); border-top-width: 0px; border-bot= +tom-width: 5px; } + +.f-select::after { top: calc(50% + 1px); border-top-width: 5px; border-bott= +om-width: 0px; } + +.f-select > select { -webkit-appearance: none; flex: 1 1 auto; padding: 8px= + 32px 8px 16px; font-size: 13px; font-family: Arial, "Helvetica Neue", Helv= +etica, sans-serif; line-height: 1.46154; color: inherit; background-color: = +rgb(255, 255, 255); border: 1px solid rgb(200, 204, 208); border-radius: 2p= +x; transition: color 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s, border-co= +lor 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s, box-shadow 600ms cubic-bez= +ier(0.165, 0.84, 0.44, 1) 0s, background-color 600ms cubic-bezier(0.165, 0.= +84, 0.44, 1) 0s; } + +.f-select > select:hover { border-color: rgba(0, 149, 255, 0.5); box-shadow= +: rgb(212, 215, 217) 0px 0px 2px inset, rgba(0, 149, 255, 0.2) 0px 0px 2px;= + } + +.f-select > select:focus { border-color: rgb(0, 149, 255); box-shadow: rgb(= +239, 240, 241) 0px 0px 4px inset, rgba(0, 149, 255, 0.5) 0px 0px 5px; outli= +ne: 0px; } + +.f-select.is-disabled::before, .f-select.is-disabled::after { opacity: 0.3;= + } + +.f-select.is-disabled select { color: rgb(174, 180, 186); background-color:= + rgb(239, 240, 241); border-color: rgb(227, 230, 232); } + +.f-select.is-disabled select:hover { border-color: rgb(227, 230, 232); box-= +shadow: none; } + +.f-input-file { display: block; margin: 0px; padding: 8px 0px; font-size: 1= +1px; } + +.f-checkbox input[type=3D"radio"], .f-radio input[type=3D"radio"], .f-check= +box input[type=3D"checkbox"], .f-radio input[type=3D"checkbox"] { margin: 0= +px; } + +.f-checkbox .g-col, .f-radio .g-col { flex-flow: column nowrap; } + +.f-checkbox > .-input, .f-radio > .-input { flex: 0 0 auto; padding-right: = +8px; } + +.f-checkbox > .-input > input, .f-radio > .-input > input { margin: 0px; } + +.f-checkbox > .-input > input[type=3D"checkbox"], .f-radio > .-input > inpu= +t[type=3D"checkbox"] { margin-top: 2px; } + +.f-checkbox > .-input > input:focus, .f-radio > .-input > input:focus { out= +line: 0px; } + +.f-checkbox .f-label, .f-radio .f-label { font-weight: 400; } + +.f-checkbox .t-help, .f-radio .t-help { margin: 2px 0px; padding-right: 1em= +; } + +.f-checkbox + .f-checkbox, .f-checkbox + .f-radio, .f-radio + .f-checkbox, = +.f-radio + .f-radio { margin-top: 8px; } + +.f-checkbox._end .g-col, .f-radio._end .g-col { flex: 0 1 auto; } + +.f-checkbox.is-disabled, .f-radio.is-disabled { opacity: 0.5; } + +.f-checkbox.is-disabled, .f-radio.is-disabled, .f-checkbox.is-disabled labe= +l, .f-radio.is-disabled label, .f-checkbox.is-disabled .label, .f-radio.is-= +disabled .label { cursor: not-allowed; } + +.input-group { box-sizing: border-box; } + +.input-group .message { display: block; margin-bottom: 0px; padding-top: 8p= +x; padding-bottom: 8px; } + +.input-group.has-warning .f-input, .input-group.has-error .f-input, .input-= +group.is-success .f-input, .input-group.has-warning .tag-editor, .input-gro= +up.has-error .tag-editor, .input-group.is-success .tag-editor, .input-group= +.has-warning .autocomplete input, .input-group.has-error .autocomplete inpu= +t, .input-group.is-success .autocomplete input, .input-group.has-warning .f= +-select select, .input-group.has-error .f-select select, .input-group.is-su= +ccess .f-select select { background-position: right 12px center; background= +-repeat: no-repeat; } + +.input-group.has-warning .f-select select, .input-group.has-error .f-select= + select, .input-group.is-success .f-select select { background-position: ri= +ght 24px center; } + +.input-group.has-warning .f-input, .input-group.has-warning .f-select selec= +t { border-color: rgb(220, 143, 24); background-image: url("../../Img/forms= +/icon-warning.svg?v=3D982eba4202d6"), none; } + +.input-group.has-warning .f-input:hover, .input-group.has-warning .f-select= + select:hover { border-color: rgb(234, 166, 60); box-shadow: rgb(214, 217, = +220) 0px 0px 1px inset, rgb(241, 229, 188) 0px 0px 2px; } + +.input-group.has-warning .f-input:focus, .input-group.has-warning .f-select= + select:focus { border-color: rgb(232, 145, 11); box-shadow: rgb(239, 240, = +241) 0px 0px 4px inset, rgb(241, 229, 188) 0px 0px 4px; } + +.input-group.has-warning .message { color: rgb(220, 143, 24); } + +.input-group.has-error .f-input, .input-group.has-error .tag-editor, .input= +-group.has-error .autocomplete input, .input-group.has-error .f-select sele= +ct { border-color: rgb(222, 83, 94); background-image: url("../../Img/forms= +/icon-error.svg?v=3D7912aa2ddbe0"), none; } + +.input-group.has-error .f-input:hover, .input-group.has-error .tag-editor:h= +over, .input-group.has-error .autocomplete input:hover, .input-group.has-er= +ror .f-select select:hover { border-color: rgb(232, 124, 135); box-shadow: = +rgb(214, 217, 220) 0px 0px 1px inset, rgb(249, 211, 215) 0px 0px 2px; } + +.input-group.has-error .f-input:focus, .input-group.has-error .tag-editor:f= +ocus, .input-group.has-error .autocomplete input:focus, .input-group.has-er= +ror .f-select select:focus { border-color: rgb(209, 56, 61); box-shadow: rg= +b(239, 240, 241) 0px 0px 4px inset, rgb(244, 180, 187) 0px 0px 4px; } + +.input-group.has-error .message { color: rgb(209, 56, 61); } + +.input-group.is-success .f-input, .input-group.is-success .f-select select = +{ border-color: rgb(94, 186, 125); background-image: url("../../Img/forms/i= +con-success.svg?v=3D4012387047df"), none; } + +.input-group.is-success .f-input:hover, .input-group.is-success .f-select s= +elect:hover { border-color: rgb(130, 202, 154); box-shadow: rgb(214, 217, 2= +20) 0px 0px 1px inset, rgb(202, 232, 212) 0px 0px 2px; } + +.input-group.is-success .f-input:focus, .input-group.is-success .f-select s= +elect:focus { border-color: rgb(72, 168, 104); box-shadow: rgb(239, 240, 24= +1) 0px 0px 4px inset, rgb(166, 217, 183) 0px 0px 4px; } + +.input-group.is-success .message { color: rgb(64, 150, 93); } + +.input-group.is-disabled { opacity: 0.5; cursor: not-allowed; } + +.input-group, .button-group { position: relative; display: flex; } + +.input-group *, .button-group *, .input-group ::before, .button-group ::bef= +ore, .input-group ::after, .button-group ::after { box-sizing: border-box; = +} + +.input-group { flex-flow: column nowrap; margin-bottom: 24px; } + +.input-group > .input-group { margin-bottom: 0px; } + +.input-group > .f-label + * { margin-top: 6px; } + +.input-group > .f-label + .t-help { margin-top: 2px; } + +.input-group > .f-label + .input-group { margin-top: 16px; } + +.input-group._clusters .g-row + .g-row { margin-top: 8px; } + +.input-group._clusters .input-group { margin-bottom: 0px; } + +.input-group._clusters .input-group .f-label { font-weight: 400; } + +.input-group .-fill { flex: 0 0 auto; align-items: center; padding: 8px 16p= +x; color: rgb(83, 90, 96); background-color: rgb(239, 240, 241); border-wid= +th: 1px 0px; border-style: solid; border-color: rgb(200, 204, 208); border-= +image: initial; } + +.input-group .-fill > label { font-size: inherit; line-height: inherit; } + +.input-group .-fill._clean { border-color: transparent; background-color: t= +ransparent; } + +.input-group .-fill.is-first { order: -1; border-left-width: 1px; } + +.input-group .-fill.is-last { order: 99; border-right-width: 1px; } + +.input-group [class^=3D"btn"].is-last { order: 100; margin-left: -1px; bord= +er-top-left-radius: 0px; border-bottom-left-radius: 0px; } + +.button-group [class^=3D"btn"] + [class^=3D"btn"] { margin-left: 2px; } + +.button-group.g-column [class^=3D"btn"] + [class^=3D"btn"] { margin-top: 8p= +x; margin-left: 0px; } + +.button-group .t-help { margin-top: 12px; margin-bottom: 0px; } + +.button-group.has-border { padding-top: 24px; border-top: 1px solid rgb(214= +, 217, 220); } + +.f-radio-toggle .f-label { flex: 1 1 auto; justify-content: center; padding= +: 8px 16px; margin-left: -1px; margin-right: -1px; border: 1px solid rgb(20= +0, 204, 208); background-color: rgb(255, 255, 255); font-weight: 400; line-= +height: 1.46154; color: rgb(60, 65, 70); text-align: center; transition: al= +l 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; cursor: pointer; } + +.f-radio-toggle .f-label:hover, .f-radio-toggle .f-label:focus, .f-radio-to= +ggle .f-label:active { color: rgb(36, 39, 43); background-color: rgb(242, 2= +49, 255); border-color: rgb(173, 218, 252); z-index: 1; } + +.f-radio-toggle input[type=3D"radio"] { position: absolute; left: -9999em; = +opacity: 0; } + +.f-radio-toggle input[type=3D"radio"]:checked + .f-label { color: rgb(255, = +255, 255); background-color: rgb(0, 149, 255); border-color: rgb(0, 149, 25= +5); pointer-events: none; position: relative; z-index: 2; } + +.f-radio-toggle .g-col:first-of-type .f-label { margin-left: 0px; border-ra= +dius: 2px 0px 0px 2px; } + +.f-radio-toggle .g-col:last-of-type .f-label { border-radius: 0px 2px 2px 0= +px; } + +.f-radio-toggle._muted .f-label { border: 1px solid rgb(200, 204, 208); bac= +kground-color: rgb(255, 255, 255); color: rgb(132, 141, 149); } + +.f-radio-toggle._muted .f-label:hover, .f-radio-toggle._muted .f-label:focu= +s, .f-radio-toggle._muted .f-label:active { color: rgb(60, 65, 70); backgro= +und-color: rgb(239, 240, 241); border-color: rgb(187, 192, 196); } + +.f-radio-toggle._muted input[type=3D"radio"]:checked + .f-label { color: rg= +b(255, 255, 255); background-color: rgb(94, 186, 125); border-color: rgb(94= +, 186, 125); } + +.f-radio-toggle._muted input[type=3D"radio"]._off:checked + .f-label { colo= +r: rgb(106, 115, 124); background-color: rgb(214, 217, 220); border-color: = +rgb(187, 192, 196); } + +.container .chosen-container { margin-top: 0px; } + +.container .chosen-container.chosen-container-active { border-width: 0px; } + +.container .chosen-container.chosen-container-active .chosen-choices { bord= +er-color: rgb(0, 149, 255); box-shadow: rgb(239, 240, 241) 0px 0px 4px inse= +t, rgba(0, 149, 255, 0.5) 0px 0px 5px; } + +.container .chosen-container .chosen-choices { display: flex; padding: 0px = +1px; min-height: 38px; background-image: none; border-radius: 2px; border-c= +olor: rgb(200, 204, 208); } + +.container .chosen-container .chosen-choices:hover { border-color: rgba(0, = +149, 255, 0.5); box-shadow: rgb(212, 215, 217) 0px 0px 2px inset, rgba(0, 1= +49, 255, 0.2) 0px 0px 2px; } + +.container .chosen-container .chosen-choices li.search-choice, .container .= +chosen-container .chosen-choices li.search-field { display: inline-flex; al= +ign-items: center; margin: 4px 1px; padding: 2px 6px; } + +.container .chosen-container .chosen-choices li.search-choice { float: none= +; box-shadow: none; background-image: none; font-family: Arial, "Helvetica = +Neue", Helvetica, sans-serif; font-size: 12px; color: rgb(91, 141, 177); ba= +ckground-color: rgb(225, 236, 244); border-color: transparent; border-radiu= +s: 2px; } + +.container .chosen-container .chosen-choices li.search-choice:first-child {= + margin-left: 3px; } + +.container .chosen-container .chosen-choices li.search-choice .search-choic= +e-close { position: relative; top: 0px; right: -1px; margin-left: 4px; tran= +sition: none 0s ease 0s; } + +.container .chosen-container li.search-field > input[type=3D"text"] { paddi= +ng: 0px; margin: 0px; } + +ul, ol, li { margin: 0px; padding: 0px; } + +ul, ol { margin-left: 30px; margin-bottom: 1em; } + +ul ul, ol ul, ul ol, ol ol { margin-bottom: 0px; } + +ul { list-style-type: disc; } + +ol { list-style-type: decimal; } + +.caption { padding-top: 13px; padding-bottom: 13px; text-align: left; } + +table { border-spacing: 0px; border-collapse: collapse; } + +.table { margin-bottom: 15px; width: 100%; max-width: 100%; background-colo= +r: transparent; border-width: 0px; } + +.table th { text-align: left; } + +.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > t= +h, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr = +> td { padding: 13px 13px 13px 0px; vertical-align: top; } + +.table > thead > tr > th small, .table > tbody > tr > th small, .table > tf= +oot > tr > th small, .table > thead > tr > td small, .table > tbody > tr > = +td small, .table > tfoot > tr > td small { font-size: 11px; } + +.table > thead > tr > th { vertical-align: bottom; } + +.table > tfoot > tr > td { vertical-align: top; } + +.table > caption + thead > tr:first-child > th, .table > .caption + thead >= + tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .tab= +le > .colgroup + thead > tr:first-child > th, .table > thead:first-child > = +tr:first-child > th, .table > caption + thead > tr:first-child > td, .table= + > .caption + thead > tr:first-child > td, .table > colgroup + thead > tr:f= +irst-child > td, .table > .colgroup + thead > tr:first-child > td, .table >= + thead:first-child > tr:first-child > td { border-top: 0px; } + +.table ._textLeft { text-align: left; } + +.table ._textCenter { text-align: center; } + +.table ._textRight { text-align: right; } + +.table col[class*=3D"-col"] { position: static; float: none; display: table= +-column; } + +.table td[class*=3D"-col"], .table th[class*=3D"-col"] { position: static; = +float: none; display: table-cell; } + +.table td.-col1, .table th.-col1 { width: 8.33333%; } + +.table td.-col2, .table th.-col2 { width: 16.6667%; } + +.table td.-col3, .table th.-col3 { width: 25%; } + +.table td.-col4, .table th.-col4 { width: 33.3333%; } + +.table td.-col5, .table th.-col5 { width: 41.6667%; } + +.table td.-col6, .table th.-col6 { width: 50%; } + +.table td.-col7, .table th.-col7 { width: 58.3333%; } + +.table td.-col8, .table th.-col8 { width: 66.6667%; } + +.table td.-col9, .table th.-col9 { width: 75%; } + +.table td.-col10, .table th.-col10 { width: 83.3333%; } + +.table td.-col11, .table th.-col11 { width: 91.6667%; } + +.table td.-col12, .table th.-col12 { width: 100%; } + +.table._hover > tbody > tr:hover { background-color: rgb(247, 247, 247); } + +.table._hover > tbody > tr:hover > td { box-shadow: rgb(255, 255, 255) 0px = +2px 0px inset, rgb(255, 255, 255) 0px -2px 0px inset; } + +.table._condensed > thead > tr > th, .table._condensed > tbody > tr > th, .= +table._condensed > tfoot > tr > th, .table._condensed > thead > tr > td, .t= +able._condensed > tbody > tr > td, .table._condensed > tfoot > tr > td { pa= +dding: 7px 7px 7px 0px; } + +.table._condensed input[type=3D"radio"], .table._condensed input[type=3D"ch= +eckbox"] { margin-top: 0px; } + +.table._borders > thead > tr > th, .table._borders > tbody > tr > th, .tabl= +e._borders > tfoot > tr > th, .table._borders > thead > tr > td, .table._bo= +rders > tbody > tr > td, .table._borders > tfoot > tr > td { border-top: 1p= +x solid var(--black-075); } + +.table._borders > thead > tr > th { border-bottom: 1px solid var(--black-07= +5); } + +.table._borders > tbody + tbody { border-top: 2px solid var(--black-075); } + +.table tfoot.-totals > tr > td { font-size: 18px; } + +.table tfoot.-totals:hover { background-color: transparent; transition: non= +e 0s ease 0s; } + +.table .js-tableToggle { display: none; } + +.table._whiteBg { background: rgb(255, 255, 255); } + +.table._whiteBg > thead > tr > th, .table._whiteBg > tbody > tr > th, .tabl= +e._whiteBg > tfoot > tr > th, .table._whiteBg > thead > tr > td, .table._wh= +iteBg > tbody > tr > td, .table._whiteBg > tfoot > tr > td { padding: 10px;= + } + +.table._verticalCenter > thead > tr > th, .table._verticalCenter > tbody > = +tr > th, .table._verticalCenter > tfoot > tr > th, .table._verticalCenter >= + thead > tr > td, .table._verticalCenter > tbody > tr > td, .table._vertica= +lCenter > tfoot > tr > td { vertical-align: middle; } + +.table .firstColPadding { padding-left: 13px; } + +.table th.-checkbox, .table td.-checkbox { width: 2em; } + +.data-table-referrers thead th { background-color: rgb(255, 255, 255); } + +.data-table-referrers tr.data-more { display: none; } + +.l-dt-col-sm { width: 15%; } + +.l-dt-col-med { width: 25%; } + +.table td.empty, .table .no-referrer { font-style: italic; opacity: 0.75; } + +.edit-table { border: 1px solid rgba(12, 13, 14, 0.15); margin-top: 5px; } + +.edit-table._short { max-height: 150px; overflow-y: auto; } + +.edit-table._medium { max-height: 250px; overflow-y: auto; } + +.edit-table > table, .edit-table > .table { margin-bottom: 0px; } + +.item-select-table { display: flex; justify-content: flex-start; flex-wrap:= + wrap; background: rgb(255, 255, 255); border-right: 1px solid rgb(214, 217= +, 220); border-bottom: 1px solid rgb(214, 217, 220); margin-bottom: 20px; } + +.item-select-table.limit-height-300 { max-height: 300px; overflow: hidden a= +uto; } + +.item-select-table.columns-3 .item { width: 33.3%; } + +.item-select-table.tag-table .item { display: flex; align-items: center; } + +.item-select-table.tag-table .post-tag { max-width: 110px; white-space: now= +rap; overflow: hidden; text-overflow: ellipsis; margin-right: 4px; } + +.item-select-table label.item { cursor: pointer; } + +.item-select-table .item { border: 1px solid rgb(214, 217, 220); padding: 1= +0px; position: relative; flex-grow: 1; text-align: center; margin-right: -1= +px; margin-bottom: -1px; } + +.item-select-table .item:hover { background: rgb(239, 240, 241); } + +.item-select-table .item input[type=3D"checkbox"] { display: none; } + +.item-select-table .item .check { position: absolute; top: 4px; right: 4px;= + } + +table.sorter { margin: 10px 0pt 15px; text-align: left; border-bottom: 1px = +solid rgb(214, 217, 220); } + +table.sorter > thead > tr .headerSortDown, table.sorter > thead > tr .heade= +rSortUp { background-color: rgb(255, 153, 0); color: rgb(255, 255, 255); } + +table.sorter > thead > tr .headerSortUp span::after { content: "=E2=96=B4";= + } + +table.sorter > thead > tr .headerSortDown span::after { content: "=E2=96=BE= +"; } + +table.sorter > thead > tr .header { background-repeat: no-repeat; backgroun= +d-position: right center; cursor: pointer; } + +table.sorter > thead > tr span::after { padding-left: 5px; } + +table.sorter > thead > tr > th { text-align: center; } + +table.sorter > thead > tr > th, table.sorter > tfoot > tr > td { background= +-color: rgb(106, 115, 124); color: rgb(255, 255, 255); border: 1px solid rg= +b(255, 255, 255); font-size: 110%; padding: 5px; } + +table.sorter > tbody > tr > td { padding: 5px 10px; background-color: rgb(2= +55, 255, 255); vertical-align: top; } + +table.sorter > tbody > tr.odd > td { background-color: rgb(239, 240, 241); = +} + +table.sorter > tbody > tr > td.mod-ip-banned { background-color: rgb(249, 2= +11, 215); } + +table.sorter > tbody > tr > td.mod-ip-hobbled { background-color: rgb(254, = +227, 207); } + +table.sorter > tbody .row-data { text-align: right; } + +.post-tag, .moderator-tag, .required-tag, .disliked-tag, .company-tag, .geo= +-tag, .geo-tag, .container .chosen-choices .search-choice, .container .chos= +en-container-multi .chosen-choices li.search-choice { display: inline-block= +; padding: 0.4em 0.5em; margin: 2px 2px 2px 0px; font-size: 11px; line-heig= +ht: 1; white-space: nowrap; text-decoration: none; text-align: center; bord= +er-width: 1px; border-style: solid; border-radius: 3px; transition: all 0.1= +5s ease-in-out 0s; } + +.post-tag:hover, .moderator-tag:hover, .required-tag:hover, .disliked-tag:h= +over, .company-tag:hover, .geo-tag:hover { text-decoration: none; } + +.post-tag img, .moderator-tag img, .required-tag img, .disliked-tag img, .c= +ompany-tag img, .geo-tag img { margin-bottom: 0px; } + +.post-tag img.sponsor-tag-img, .moderator-tag img.sponsor-tag-img, .require= +d-tag img.sponsor-tag-img, .disliked-tag img.sponsor-tag-img, .company-tag = +img.sponsor-tag-img, .geo-tag img.sponsor-tag-img { margin-top: -2px; margi= +n-bottom: -2px; } + +.post-tag, .geo-tag, .container .chosen-choices .search-choice, .container = +.chosen-container-multi .chosen-choices li.search-choice { color: rgb(57, 1= +15, 157); background-color: rgb(225, 236, 244); border-color: rgb(225, 236,= + 244); } + +.post-tag:hover { color: rgb(50, 101, 138); background-color: rgb(206, 224,= + 237); border-color: rgb(206, 224, 237); } + +.moderator-tag { color: rgb(209, 56, 61); background-color: rgb(253, 243, 2= +44); border-color: rgb(249, 211, 215); } + +.moderator-tag:hover { color: rgb(195, 45, 50); background-color: rgb(249, = +221, 224); border-color: rgb(246, 189, 195); } + +.required-tag { color: rgb(60, 65, 70); background-color: rgb(228, 230, 232= +); border-color: rgb(159, 166, 173); } + +.required-tag:hover { color: rgb(48, 52, 56); background-color: rgb(214, 21= +7, 220); border-color: rgb(145, 153, 161); } + +.disliked-tag { color: rgb(106, 115, 124); background-color: rgb(228, 230, = +232); border-color: transparent; } + +.disliked-tag:hover { color: rgb(94, 102, 110); background-color: rgb(214, = +217, 220); border-color: rgba(0, 0, 0, 0); } + +.company-tag { color: rgb(12, 13, 14); font-size: 12px; text-align: left; b= +ackground-color: rgb(239, 240, 241); border-radius: 0px; border-color: tran= +sparent transparent transparent rgb(244, 128, 36); border-left-width: 2px; = +border-left-style: solid; } + +.company-tag:hover { background-color: rgb(236, 234, 234); color: rgb(36, 3= +9, 41); } + +.company-tag img { margin-bottom: auto; padding-right: 4px; max-height: 20p= +x; width: auto; vertical-align: middle; } + +.autocomplete .company-tag { line-height: 1.5em; } + +.geo-tag .delete-location { margin: -2px 0px 0px 3px; vertical-align: middl= +e; width: 14px; height: 13px; line-height: 26px; } + +.geo-tag .icon-visa-show[value=3D"false"] ~ .icon-visa { display: none; } + +.container .chosen-choices .search-choice, .container .chosen-container-mul= +ti .chosen-choices li.search-choice { background-image: none; box-shadow: n= +one; border-color: rgb(225, 236, 244); padding-right: 1.75em; padding-top: = +0.5em; margin: 4px 4px 0px 0px !important; } + +.container .chosen-choices .search-choice .search-choice-close, .container = +.chosen-container-multi .chosen-choices li.search-choice .search-choice-clo= +se { margin: 0px !important; } + +a { color: rgb(0, 119, 204); text-decoration: none; cursor: pointer; } + +a:hover, a:active { color: rgb(0, 149, 255); text-decoration: none; } + +a.comment-user { white-space: nowrap; padding: 0px; } + +a.comment-user.owner { padding: 1px 5px; } + +.post-text a:not(.post-tag):not(.badge-tag), .comment-copy a, .wmd-preview = +a:not(.post-tag):not(.badge-tag) { text-decoration: underline; } + +.post-text a:not(.post-tag):not(.badge-tag):visited, .comment-copy a:visite= +d, .wmd-preview a:not(.post-tag):not(.badge-tag):visited { color: rgb(0, 10= +0, 189); } + +a .mathjax { width: 115px; height: 55px; background-image: url("../../img/s= +hare-sprite.png?v=3D0734e5a54af0"); background-position: -190px 5px; } + +.external { position: relative; display: inline-block; padding-left: 20px; = +} + +.external > .-icon { position: relative; display: inline-block; width: 9px;= + height: 9px; overflow: hidden; background-image: url("../../img/share-spri= +te-new.svg?v=3D0e11bfd41fbc"), none; background-position: 0px -220px; backg= +round-repeat: no-repeat; } + +.external:visited { color: rgb(0, 119, 204); } + +.external:hover, .external:active { text-decoration: none; } + +.external:hover > .-icon, .external:active > .-icon { background-position: = +-13px -220px; } + +.question-hyperlink { font-size: 16px; font-weight: 400; } + +.question-hyperlink, .answer-hyperlink { color: rgb(0, 119, 204); line-heig= +ht: 1.3; margin-bottom: 1.2em; } + +.question-hyperlink:hover, .answer-hyperlink:hover, .question-hyperlink:act= +ive, .answer-hyperlink:active { color: rgb(0, 149, 255); } + +.question-hyperlink:visited, .answer-hyperlink:visited { color: rgb(0, 100,= + 189); } + +.gray-link, .gray-link:visited { color: rgb(132, 141, 149); cursor: pointer= +; } + +.gray-link:hover, .gray-link:visited:hover, .gray-link:focus, .gray-link:vi= +sited:focus, .gray-link:active, .gray-link:visited:active { color: rgb(60, = +65, 70); } + +b, strong { font-weight: bold; } + +i, em { font-style: italic; } + +sup, sub { font-size: 80%; } + +ins { text-decoration: none; } + +del, s { text-decoration: line-through; } + +del .post-tag, s .post-tag, del .required-tag, s .required-tag, del .modera= +tor-tag, s .moderator-tag { text-decoration: line-through !important; } + +kbd { display: inline-block; margin: 0px 0.1em; padding: 0.1em 0.6em; font-= +family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 11px; li= +ne-height: 1.4; color: rgb(36, 39, 41); text-shadow: rgb(255, 255, 255) 0px= + 1px 0px; background-color: rgb(225, 227, 229); border: 1px solid rgb(173, = +179, 184); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0p= +x, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; } + +.text-muted { color: rgb(145, 153, 161); } + +.placeholder-text { color: rgb(159, 166, 173); } + +.help-text { color: rgb(94, 102, 110); font-size: 11px; } + +.mute-text { color: rgb(106, 115, 124); } + +.txt-underline { text-decoration: underline !important; } + +.txt-align-center { text-align: center !important; } + +p { clear: both; margin-bottom: 1em; margin-top: 0px; } + +p code { padding: 1px 5px; } + +p.lead { font-size: 1.3em; line-height: 1.5em; } + +p.lead small { display: block; font-size: 13px; color: rgb(94, 102, 110); } + +code { font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation = +Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monos= +pace, sans-serif; background-color: rgb(239, 240, 241); } + +pre { margin-bottom: 1em; padding: 12px 8px; width: auto; max-height: 600px= +; overflow: auto; font-family: Consolas, Menlo, Monaco, "Lucida Console", "= +Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier = +New", monospace, sans-serif; font-size: 13px; background-color: rgb(239, 24= +0, 241); border-radius: 3px; } + +li pre { margin: 0.5em 0px 1em; } + +h1, h2, h3 { line-height: 1.3; margin: 0px 0px 1em; } + +h1 { font-size: 22px; } + +h2 { font-size: 18px; } + +h3 { font-size: 15px; } + +h1.lead, h2.lead { font-weight: 400; } + +h1.lead { font-size: 2.6em; margin-bottom: 0.3em; } + +h2.lead { font-size: 1.7em; } + +.post-text h1, .post-text h2, .post-text h3, .post-text h4, .post-text h5, = +.post-text h6 { overflow-wrap: break-word; } + +.post-text ul p:last-of-type, .wmd-preview ul p:last-of-type, .post-text ol= + p:last-of-type, .wmd-preview ol p:last-of-type { margin-bottom: 0px; } + +.post-text li > ul, .wmd-preview li > ul, .post-text li > ol, .wmd-preview = +li > ol { padding-top: 0.5em; } + +.post-text, .wmd-preview, .comment-copy, .question-status, .excerpt { font-= +family: Arial, "Helvetica Neue", Helvetica, sans-serif; } + +blockquote, q { quotes: none; } + +blockquote::before, q::before, blockquote::after, q::after { content: none;= + } + +blockquote { margin-bottom: 10px; padding: 10px; background-color: rgb(251,= + 242, 212); border-left: 2px solid rgb(255, 235, 142); } + +blockquote :last-child { margin-bottom: 0px; } + +li blockquote { margin: 0.5em 0px 1em; } + +.s-dl__wip dt { font-weight: bold; } + +.str, .lit, .tag { color: rgb(125, 39, 39); } + +.kwd, .dec { color: rgb(16, 16, 148); } + +.com { color: rgb(133, 140, 147); } + +.typ { color: rgb(43, 145, 175); } + +.pun, .pln { color: rgb(48, 51, 54); } + +.atn { color: rgb(230, 67, 32); } + +.atv { color: rgb(15, 116, 189); } + +.prettyprint { display: block; color: rgb(57, 51, 24); } + +@media print { + .kwd, .typ, .tag { font-weight: bold; } + .str, .atv { color: rgb(0, 102, 0); } + .kwd { color: rgb(0, 0, 102); } + .typ, .atn { color: rgb(68, 0, 68); } + .lit { color: rgb(0, 68, 68); } + .pun { color: rgb(68, 68, 0); } + .pln { color: rgb(12, 13, 14); } + .tag { color: rgb(0, 0, 102); } + .com { color: rgb(102, 0, 0); font-style: italic; } +} + +.blink { animation-name: blinking; animation-duration: 3.5s; } + +@keyframes blinking {=20 + 0% { background: rgb(244, 168, 61); } + 100% { background: rgba(244, 168, 61, 0); } +} + +@keyframes opacity-in {=20 + 0% { opacity: 0; } + 100% { opacity: 1; } +} + +.favicon { width: 16px; height: 16px; background-color: transparent; backgr= +ound-repeat: no-repeat; background-image: url("../../img/favicons-sprite16.= +png?v=3Df4ca183292f8"); } + +div.favicon { display: inline-block; } + +@media not all, not all, only screen and (-webkit-min-device-pixel-ratio: 1= +.5), not all { + .favicon { background-image: url("../../img/favicons-sprite32.png?v=3D52e= +ed61a7b5d"); } +} + +@media not all, not all, only screen and (-webkit-min-device-pixel-ratio: 1= +.5), not all { + .favicon { background-size: 16px 6786px; } +} + +.favicon-3dprinting { background-position: 0px 0px; } + +.favicon-3dprintingmeta { background-position: 0px -18px; } + +.favicon-academia { background-position: 0px -36px; } + +.favicon-academiameta { background-position: 0px -54px; } + +.favicon-ai { background-position: 0px -72px; } + +.favicon-aimeta { background-position: 0px -90px; } + +.favicon-alcohol { background-position: 0px -108px; } + +.favicon-alcoholmeta { background-position: 0px -126px; } + +.favicon-android { background-position: 0px -144px; } + +.favicon-androidmeta { background-position: 0px -162px; } + +.favicon-anime { background-position: 0px -180px; } + +.favicon-animemeta { background-position: 0px -198px; } + +.favicon-apple { background-position: 0px -216px; } + +.favicon-applemeta { background-position: 0px -234px; } + +.favicon-arabic { background-position: 0px -252px; } + +.favicon-arabicmeta { background-position: 0px -270px; } + +.favicon-arduino { background-position: 0px -288px; } + +.favicon-arduinometa { background-position: 0px -306px; } + +.favicon-area51 { background-position: 0px -324px; } + +.favicon-area51discuss { background-position: 0px -342px; } + +.favicon-askubuntu { background-position: 0px -360px; } + +.favicon-askubuntumeta { background-position: 0px -378px; } + +.favicon-astronomy { background-position: 0px -396px; } + +.favicon-astronomymeta { background-position: 0px -414px; } + +.favicon-augur { background-position: 0px -432px; } + +.favicon-augurmeta { background-position: 0px -450px; } + +.favicon-aviation { background-position: 0px -468px; } + +.favicon-aviationmeta { background-position: 0px -486px; } + +.favicon-avp { background-position: 0px -504px; } + +.favicon-avpmeta { background-position: 0px -522px; } + +.favicon-beta { background-position: 0px -540px; } + +.favicon-betameta { background-position: 0px -558px; } + +.favicon-bicycles { background-position: 0px -576px; } + +.favicon-bicyclesmeta { background-position: 0px -594px; } + +.favicon-bioinformatics { background-position: 0px -612px; } + +.favicon-bioinformaticsmeta { background-position: 0px -630px; } + +.favicon-biology { background-position: 0px -648px; } + +.favicon-biologymeta { background-position: 0px -666px; } + +.favicon-bitcoin { background-position: 0px -684px; } + +.favicon-bitcoinmeta { background-position: 0px -702px; } + +.favicon-blender { background-position: 0px -720px; } + +.favicon-blendermeta { background-position: 0px -738px; } + +.favicon-boardgames { background-position: 0px -756px; } + +.favicon-boardgamesmeta { background-position: 0px -774px; } + +.favicon-br { background-position: 0px -792px; } + +.favicon-bricks { background-position: 0px -810px; } + +.favicon-bricksmeta { background-position: 0px -828px; } + +.favicon-brmeta { background-position: 0px -846px; } + +.favicon-buddhism { background-position: 0px -864px; } + +.favicon-buddhismmeta { background-position: 0px -882px; } + +.favicon-careers { background-position: 0px -900px; } + +.favicon-channels { background-position: 0px -918px; } + +.favicon-chemistry { background-position: 0px -936px; } + +.favicon-chemistrymeta { background-position: 0px -954px; } + +.favicon-chess { background-position: 0px -972px; } + +.favicon-chessmeta { background-position: 0px -990px; } + +.favicon-chinese { background-position: 0px -1008px; } + +.favicon-chinesemeta { background-position: 0px -1026px; } + +.favicon-christianity { background-position: 0px -1044px; } + +.favicon-christianitymeta { background-position: 0px -1062px; } + +.favicon-civicrm { background-position: 0px -1080px; } + +.favicon-civicrmmeta { background-position: 0px -1098px; } + +.favicon-codegolf { background-position: 0px -1116px; } + +.favicon-codegolfmeta { background-position: 0px -1134px; } + +.favicon-codereview { background-position: 0px -1152px; } + +.favicon-codereviewmeta { background-position: 0px -1170px; } + +.favicon-coffee { background-position: 0px -1188px; } + +.favicon-coffeemeta { background-position: 0px -1206px; } + +.favicon-communitybuilding { background-position: 0px -1224px; } + +.favicon-communitybuildingmeta { background-position: 0px -1242px; } + +.favicon-computergraphics { background-position: 0px -1260px; } + +.favicon-computergraphicsmeta { background-position: 0px -1278px; } + +.favicon-conlang { background-position: 0px -1296px; } + +.favicon-conlangmeta { background-position: 0px -1314px; } + +.favicon-cooking { background-position: 0px -1332px; } + +.favicon-cookingmeta { background-position: 0px -1350px; } + +.favicon-craftcms { background-position: 0px -1368px; } + +.favicon-craftcmsmeta { background-position: 0px -1386px; } + +.favicon-crafts { background-position: 0px -1404px; } + +.favicon-craftsmeta { background-position: 0px -1422px; } + +.favicon-crypto { background-position: 0px -1440px; } + +.favicon-cryptometa { background-position: 0px -1458px; } + +.favicon-cs { background-position: 0px -1476px; } + +.favicon-cs50 { background-position: 0px -1494px; } + +.favicon-cs50meta { background-position: 0px -1512px; } + +.favicon-cseducators { background-position: 0px -1530px; } + +.favicon-cseducatorsmeta { background-position: 0px -1548px; } + +.favicon-csmeta { background-position: 0px -1566px; } + +.favicon-cstheory { background-position: 0px -1584px; } + +.favicon-cstheorymeta { background-position: 0px -1602px; } + +.favicon-datascience { background-position: 0px -1620px; } + +.favicon-datasciencemeta { background-position: 0px -1638px; } + +.favicon-dba { background-position: 0px -1656px; } + +.favicon-dbameta { background-position: 0px -1674px; } + +.favicon-deepweb { background-position: 0px -1692px; } + +.favicon-deepwebmeta { background-position: 0px -1710px; } + +.favicon-devops { background-position: 0px -1728px; } + +.favicon-devopsmeta { background-position: 0px -1746px; } + +.favicon-diy { background-position: 0px -1764px; } + +.favicon-diymeta { background-position: 0px -1782px; } + +.favicon-drupal { background-position: 0px -1800px; } + +.favicon-drupalmeta { background-position: 0px -1818px; } + +.favicon-dsp { background-position: 0px -1836px; } + +.favicon-dspmeta { background-position: 0px -1854px; } + +.favicon-earthscience { background-position: 0px -1872px; } + +.favicon-earthsciencemeta { background-position: 0px -1890px; } + +.favicon-ebooks { background-position: 0px -1908px; } + +.favicon-ebooksmeta { background-position: 0px -1926px; } + +.favicon-economics { background-position: 0px -1944px; } + +.favicon-economicsmeta { background-position: 0px -1962px; } + +.favicon-edx-cs169-1x { background-position: 0px -1980px; } + +.favicon-edx-cs169-1xmeta { background-position: 0px -1998px; } + +.favicon-electronics { background-position: 0px -2016px; } + +.favicon-electronicsmeta { background-position: 0px -2034px; } + +.favicon-elementaryos { background-position: 0px -2052px; } + +.favicon-elementaryosmeta { background-position: 0px -2070px; } + +.favicon-ell { background-position: 0px -2088px; } + +.favicon-ellmeta { background-position: 0px -2106px; } + +.favicon-emacs { background-position: 0px -2124px; } + +.favicon-emacsmeta { background-position: 0px -2142px; } + +.favicon-embedded { background-position: 0px -2160px; } + +.favicon-embeddedmeta { background-position: 0px -2178px; } + +.favicon-engineering { background-position: 0px -2196px; } + +.favicon-engineeringmeta { background-position: 0px -2214px; } + +.favicon-english { background-position: 0px -2232px; } + +.favicon-englishmeta { background-position: 0px -2250px; } + +.favicon-eosio { background-position: 0px -2268px; } + +.favicon-eosiometa { background-position: 0px -2286px; } + +.favicon-es { background-position: 0px -2304px; } + +.favicon-esmeta { background-position: 0px -2322px; } + +.favicon-esperanto { background-position: 0px -2340px; } + +.favicon-esperantometa { background-position: 0px -2358px; } + +.favicon-ethereum { background-position: 0px -2376px; } + +.favicon-ethereummeta { background-position: 0px -2394px; } + +.favicon-expatriates { background-position: 0px -2412px; } + +.favicon-expatriatesmeta { background-position: 0px -2430px; } + +.favicon-expressionengine { background-position: 0px -2448px; } + +.favicon-expressionenginemeta { background-position: 0px -2466px; } + +.favicon-fitness { background-position: 0px -2484px; } + +.favicon-fitnessmeta { background-position: 0px -2502px; } + +.favicon-freelancing { background-position: 0px -2520px; } + +.favicon-freelancingmeta { background-position: 0px -2538px; } + +.favicon-french { background-position: 0px -2556px; } + +.favicon-frenchmeta { background-position: 0px -2574px; } + +.favicon-gamedev { background-position: 0px -2592px; } + +.favicon-gamedevmeta { background-position: 0px -2610px; } + +.favicon-gamification { background-position: 0px -2628px; } + +.favicon-gamificationmeta { background-position: 0px -2646px; } + +.favicon-gaming { background-position: 0px -2664px; } + +.favicon-gamingmeta { background-position: 0px -2682px; } + +.favicon-gardening { background-position: 0px -2700px; } + +.favicon-gardeningmeta { background-position: 0px -2718px; } + +.favicon-genealogy { background-position: 0px -2736px; } + +.favicon-genealogymeta { background-position: 0px -2754px; } + +.favicon-german { background-position: 0px -2772px; } + +.favicon-germanmeta { background-position: 0px -2790px; } + +.favicon-gis { background-position: 0px -2808px; } + +.favicon-gismeta { background-position: 0px -2826px; } + +.favicon-graphicdesign { background-position: 0px -2844px; } + +.favicon-graphicdesignmeta { background-position: 0px -2862px; } + +.favicon-ham { background-position: 0px -2880px; } + +.favicon-hammeta { background-position: 0px -2898px; } + +.favicon-hardwarerecs { background-position: 0px -2916px; } + +.favicon-hardwarerecsmeta { background-position: 0px -2934px; } + +.favicon-hermeneutics { background-position: 0px -2952px; } + +.favicon-hermeneuticsmeta { background-position: 0px -2970px; } + +.favicon-hinduism { background-position: 0px -2988px; } + +.favicon-hinduismmeta { background-position: 0px -3006px; } + +.favicon-history { background-position: 0px -3024px; } + +.favicon-historymeta { background-position: 0px -3042px; } + +.favicon-homebrew { background-position: 0px -3060px; } + +.favicon-homebrewmeta { background-position: 0px -3078px; } + +.favicon-hsm { background-position: 0px -3096px; } + +.favicon-hsmmeta { background-position: 0px -3114px; } + +.favicon-i2p { background-position: 0px -3132px; } + +.favicon-i2pmeta { background-position: 0px -3150px; } + +.favicon-interpersonal { background-position: 0px -3168px; } + +.favicon-interpersonalmeta { background-position: 0px -3186px; } + +.favicon-iot { background-position: 0px -3204px; } + +.favicon-iota { background-position: 0px -3222px; } + +.favicon-iotameta { background-position: 0px -3240px; } + +.favicon-iotmeta { background-position: 0px -3258px; } + +.favicon-islam { background-position: 0px -3276px; } + +.favicon-islammeta { background-position: 0px -3294px; } + +.favicon-italian { background-position: 0px -3312px; } + +.favicon-italianmeta { background-position: 0px -3330px; } + +.favicon-ja { background-position: 0px -3348px; } + +.favicon-jameta { background-position: 0px -3366px; } + +.favicon-japanese { background-position: 0px -3384px; } + +.favicon-japanesemeta { background-position: 0px -3402px; } + +.favicon-joomla { background-position: 0px -3420px; } + +.favicon-joomlameta { background-position: 0px -3438px; } + +.favicon-judaism { background-position: 0px -3456px; } + +.favicon-judaismmeta { background-position: 0px -3474px; } + +.favicon-korean { background-position: 0px -3492px; } + +.favicon-koreanmeta { background-position: 0px -3510px; } + +.favicon-languagelearning { background-position: 0px -3528px; } + +.favicon-languagelearningmeta { background-position: 0px -3546px; } + +.favicon-latin { background-position: 0px -3564px; } + +.favicon-latinmeta { background-position: 0px -3582px; } + +.favicon-law { background-position: 0px -3600px; } + +.favicon-lawmeta { background-position: 0px -3618px; } + +.favicon-lifehacks { background-position: 0px -3636px; } + +.favicon-lifehacksmeta { background-position: 0px -3654px; } + +.favicon-linguistics { background-position: 0px -3672px; } + +.favicon-linguisticsmeta { background-position: 0px -3690px; } + +.favicon-literature { background-position: 0px -3708px; } + +.favicon-literaturemeta { background-position: 0px -3726px; } + +.favicon-magento { background-position: 0px -3744px; } + +.favicon-magentometa { background-position: 0px -3762px; } + +.favicon-martialarts { background-position: 0px -3780px; } + +.favicon-martialartsmeta { background-position: 0px -3798px; } + +.favicon-math { background-position: 0px -3816px; } + +.favicon-matheducators { background-position: 0px -3834px; } + +.favicon-matheducatorsmeta { background-position: 0px -3852px; } + +.favicon-mathematica { background-position: 0px -3870px; } + +.favicon-mathematicameta { background-position: 0px -3888px; } + +.favicon-mathmeta { background-position: 0px -3906px; } + +.favicon-mathoverflow { background-position: 0px -3924px; } + +.favicon-mathoverflowmeta { background-position: 0px -3942px; } + +.favicon-mechanics { background-position: 0px -3960px; } + +.favicon-mechanicsmeta { background-position: 0px -3978px; } + +.favicon-medicalsciences { background-position: 0px -3996px; } + +.favicon-medicalsciencesmeta { background-position: 0px -4014px; } + +.favicon-monero { background-position: 0px -4032px; } + +.favicon-monerometa { background-position: 0px -4050px; } + +.favicon-money { background-position: 0px -4068px; } + +.favicon-moneymeta { background-position: 0px -4086px; } + +.favicon-movies { background-position: 0px -4104px; } + +.favicon-moviesmeta { background-position: 0px -4122px; } + +.favicon-music { background-position: 0px -4140px; } + +.favicon-musicfans { background-position: 0px -4158px; } + +.favicon-musicfansmeta { background-position: 0px -4176px; } + +.favicon-musicmeta { background-position: 0px -4194px; } + +.favicon-mythology { background-position: 0px -4212px; } + +.favicon-mythologymeta { background-position: 0px -4230px; } + +.favicon-neo { background-position: 0px -4248px; } + +.favicon-neometa { background-position: 0px -4266px; } + +.favicon-networkengineering { background-position: 0px -4284px; } + +.favicon-networkengineeringmeta { background-position: 0px -4302px; } + +.favicon-opendata { background-position: 0px -4320px; } + +.favicon-opendatameta { background-position: 0px -4338px; } + +.favicon-openscience { background-position: 0px -4356px; } + +.favicon-opensciencemeta { background-position: 0px -4374px; } + +.favicon-opensource { background-position: 0px -4392px; } + +.favicon-opensourcemeta { background-position: 0px -4410px; } + +.favicon-or { background-position: 0px -4428px; } + +.favicon-ormeta { background-position: 0px -4446px; } + +.favicon-outdoors { background-position: 0px -4464px; } + +.favicon-outdoorsmeta { background-position: 0px -4482px; } + +.favicon-parenting { background-position: 0px -4500px; } + +.favicon-parentingmeta { background-position: 0px -4518px; } + +.favicon-patents { background-position: 0px -4536px; } + +.favicon-patentsmeta { background-position: 0px -4554px; } + +.favicon-pets { background-position: 0px -4572px; } + +.favicon-petsmeta { background-position: 0px -4590px; } + +.favicon-philosophy { background-position: 0px -4608px; } + +.favicon-philosophymeta { background-position: 0px -4626px; } + +.favicon-photo { background-position: 0px -4644px; } + +.favicon-photometa { background-position: 0px -4662px; } + +.favicon-physics { background-position: 0px -4680px; } + +.favicon-physicsmeta { background-position: 0px -4698px; } + +.favicon-pm { background-position: 0px -4716px; } + +.favicon-pmmeta { background-position: 0px -4734px; } + +.favicon-poker { background-position: 0px -4752px; } + +.favicon-pokermeta { background-position: 0px -4770px; } + +.favicon-politics { background-position: 0px -4788px; } + +.favicon-politicsmeta { background-position: 0px -4806px; } + +.favicon-portuguese { background-position: 0px -4824px; } + +.favicon-portuguesemeta { background-position: 0px -4842px; } + +.favicon-productivity { background-position: 0px -4860px; } + +.favicon-productivitymeta { background-position: 0px -4878px; } + +.favicon-psychology { background-position: 0px -4896px; } + +.favicon-psychologymeta { background-position: 0px -4914px; } + +.favicon-puzzling { background-position: 0px -4932px; } + +.favicon-puzzlingmeta { background-position: 0px -4950px; } + +.favicon-quant { background-position: 0px -4968px; } + +.favicon-quantmeta { background-position: 0px -4986px; } + +.favicon-quantumcomputing { background-position: 0px -5004px; } + +.favicon-quantumcomputingmeta { background-position: 0px -5022px; } + +.favicon-raspberrypi { background-position: 0px -5040px; } + +.favicon-raspberrypimeta { background-position: 0px -5058px; } + +.favicon-retrocomputing { background-position: 0px -5076px; } + +.favicon-retrocomputingmeta { background-position: 0px -5094px; } + +.favicon-reverseengineering { background-position: 0px -5112px; } + +.favicon-reverseengineeringmeta { background-position: 0px -5130px; } + +.favicon-robotics { background-position: 0px -5148px; } + +.favicon-roboticsmeta { background-position: 0px -5166px; } + +.favicon-rpg { background-position: 0px -5184px; } + +.favicon-rpgmeta { background-position: 0px -5202px; } + +.favicon-ru { background-position: 0px -5220px; } + +.favicon-rumeta { background-position: 0px -5238px; } + +.favicon-rus { background-position: 0px -5256px; } + +.favicon-rusmeta { background-position: 0px -5274px; } + +.favicon-russian { background-position: 0px -5292px; } + +.favicon-russianmeta { background-position: 0px -5310px; } + +.favicon-salesforce { background-position: 0px -5328px; } + +.favicon-salesforcemeta { background-position: 0px -5346px; } + +.favicon-scicomp { background-position: 0px -5364px; } + +.favicon-scicompmeta { background-position: 0px -5382px; } + +.favicon-scifi { background-position: 0px -5400px; } + +.favicon-scifimeta { background-position: 0px -5418px; } + +.favicon-security { background-position: 0px -5436px; } + +.favicon-securitymeta { background-position: 0px -5454px; } + +.favicon-serverfault { background-position: 0px -5472px; } + +.favicon-serverfaultmeta { background-position: 0px -5490px; } + +.favicon-sharepoint { background-position: 0px -5508px; } + +.favicon-sharepointmeta { background-position: 0px -5526px; } + +.favicon-sitecore { background-position: 0px -5544px; } + +.favicon-sitecoremeta { background-position: 0px -5562px; } + +.favicon-skeptics { background-position: 0px -5580px; } + +.favicon-skepticsmeta { background-position: 0px -5598px; } + +.favicon-softwareengineering { background-position: 0px -5616px; } + +.favicon-softwareengineeringmeta { background-position: 0px -5634px; } + +.favicon-softwarerecs { background-position: 0px -5652px; } + +.favicon-softwarerecsmeta { background-position: 0px -5670px; } + +.favicon-sound { background-position: 0px -5688px; } + +.favicon-soundmeta { background-position: 0px -5706px; } + +.favicon-space { background-position: 0px -5724px; } + +.favicon-spacemeta { background-position: 0px -5742px; } + +.favicon-spanish { background-position: 0px -5760px; } + +.favicon-spanishmeta { background-position: 0px -5778px; } + +.favicon-sports { background-position: 0px -5796px; } + +.favicon-sportsmeta { background-position: 0px -5814px; } + +.favicon-sqa { background-position: 0px -5832px; } + +.favicon-sqameta { background-position: 0px -5850px; } + +.favicon-stackapps { background-position: 0px -5868px; } + +.favicon-stackexchange { background-position: 0px -5886px; } + +.favicon-stackexchangemeta { background-position: 0px -5904px; } + +.favicon-stackoverflow { background-position: 0px -5922px; } + +.favicon-stackoverflowmeta { background-position: 0px -5940px; } + +.favicon-stats { background-position: 0px -5958px; } + +.favicon-statsmeta { background-position: 0px -5976px; } + +.favicon-stellar { background-position: 0px -5994px; } + +.favicon-stellarmeta { background-position: 0px -6012px; } + +.favicon-superuser { background-position: 0px -6030px; } + +.favicon-superusermeta { background-position: 0px -6048px; } + +.favicon-sustainability { background-position: 0px -6066px; } + +.favicon-sustainabilitymeta { background-position: 0px -6084px; } + +.favicon-techcomm { background-position: 0px -6102px; } + +.favicon-techcommmeta { background-position: 0px -6120px; } + +.favicon-tex { background-position: 0px -6138px; } + +.favicon-texmeta { background-position: 0px -6156px; } + +.favicon-tezos { background-position: 0px -6174px; } + +.favicon-tezosmeta { background-position: 0px -6192px; } + +.favicon-tor { background-position: 0px -6210px; } + +.favicon-tormeta { background-position: 0px -6228px; } + +.favicon-travel { background-position: 0px -6246px; } + +.favicon-travelmeta { background-position: 0px -6264px; } + +.favicon-tridion { background-position: 0px -6282px; } + +.favicon-tridionmeta { background-position: 0px -6300px; } + +.favicon-ukrainian { background-position: 0px -6318px; } + +.favicon-ukrainianmeta { background-position: 0px -6336px; } + +.favicon-unix { background-position: 0px -6354px; } + +.favicon-unixmeta { background-position: 0px -6372px; } + +.favicon-ux { background-position: 0px -6390px; } + +.favicon-uxmeta { background-position: 0px -6408px; } + +.favicon-vegetarianism { background-position: 0px -6426px; } + +.favicon-vegetarianismmeta { background-position: 0px -6444px; } + +.favicon-vi { background-position: 0px -6462px; } + +.favicon-vimeta { background-position: 0px -6480px; } + +.favicon-webapps { background-position: 0px -6498px; } + +.favicon-webappsmeta { background-position: 0px -6516px; } + +.favicon-webmasters { background-position: 0px -6534px; } + +.favicon-webmastersmeta { background-position: 0px -6552px; } + +.favicon-windowsphone { background-position: 0px -6570px; } + +.favicon-windowsphonemeta { background-position: 0px -6588px; } + +.favicon-woodworking { background-position: 0px -6606px; } + +.favicon-woodworkingmeta { background-position: 0px -6624px; } + +.favicon-wordpress { background-position: 0px -6642px; } + +.favicon-wordpressmeta { background-position: 0px -6660px; } + +.favicon-workplace { background-position: 0px -6678px; } + +.favicon-workplacemeta { background-position: 0px -6696px; } + +.favicon-worldbuilding { background-position: 0px -6714px; } + +.favicon-worldbuildingmeta { background-position: 0px -6732px; } + +.favicon-writing { background-position: 0px -6750px; } + +.favicon-writingmeta { background-position: 0px -6768px; } + +.autocomplete { position: relative; } + +.autocomplete .autocomplete-suggestions-list { background: rgb(255, 255, 25= +5); border: 1px solid rgb(200, 204, 208); color: rgb(106, 115, 124); positi= +on: absolute; z-index: 999; bottom: 6px; left: 0px; right: 0px; transform: = +translate(0px, 100%); box-shadow: rgba(12, 13, 14, 0.1) 0px 6px 6px; max-he= +ight: 350px; overflow: auto; } + +.autocomplete .autocomplete-suggestions-list a { color: rgb(106, 115, 124);= + } + +.autocomplete .autocomplete-suggestions-list .autocomplete-category-name, .= +autocomplete .autocomplete-suggestions-list .autocomplete-suggestion, .auto= +complete .autocomplete-suggestions-list .autocomplete-default, .autocomplet= +e .autocomplete-suggestions-list .autocomplete-default { padding: 10px; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-category-name { = +background: rgb(246, 246, 247); font-size: 11px; text-transform: uppercase;= + } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion { cur= +sor: pointer; display: flex; align-items: center; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion.child= + { padding-left: 26px; margin-top: -5px; position: relative; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion.child= +::before { content: ""; display: inline-block; width: 12px; height: 12px; b= +order-left: 1px solid rgb(185, 193, 197); border-bottom: 1px solid rgb(185,= + 193, 197); position: relative; top: -6px; left: -6px; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion:hover= +, .autocomplete .autocomplete-suggestions-list .autocomplete-default:hover = +{ background: rgb(238, 238, 240); color: rgb(12, 13, 14); } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-item = +{ max-width: 90%; overflow-wrap: break-word; overflow: hidden; flex-grow: 1= +; margin-left: 6px; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-image= + { width: 20px; height: 20px; overflow: hidden; flex-shrink: 0; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-image= + img { max-width: 100%; height: auto; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-match= + { color: rgb(12, 13, 14); font-weight: 700; } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-url {= + font-size: 11px; color: rgb(187, 192, 196); } + +.autocomplete .autocomplete-suggestions-list .autocomplete-suggestion-count= + { font-size: 13px; color: rgb(145, 153, 161); } + +.autocomplete .autocomplete-suggestions-list .autocomplete-default { border= +-top: 1px solid rgb(200, 204, 208); display: block; } + +#tabs, .tabs { float: right; } + +#tabs a, .tabs a { float: left; margin-right: 8px; padding: 12px 8px 14px; = +color: rgb(132, 141, 149); line-height: 1; text-decoration: none; border-bo= +ttom: 2px solid transparent; transition: all 0.1s ease-in-out 0s; } + +#tabs a:last-child, .tabs a:last-child { margin-right: 0px; } + +#tabs a:focus, .tabs a:focus { outline: none; } + +#tabs a:hover, .tabs a:hover { color: rgb(83, 90, 96); border-bottom-color:= + rgba(83, 90, 96, 0.5); } + +#tabs a.youarehere, .tabs a.youarehere { font-weight: 700; color: rgb(36, 3= +9, 41); border-bottom-color: rgb(36, 39, 41); } + +#tabs a.youarehere:hover, .tabs a.youarehere:hover { color: rgb(12, 13, 14)= +; border-bottom-color: rgb(12, 13, 14); } + +#tabs .mod-flag-indicator, .tabs .mod-flag-indicator { margin-left: -4px; } + +#tabs .bounty-indicator-tab, .tabs .bounty-indicator-tab { margin-right: 0p= +x; padding: 0.4em 0.5em 0.3em; vertical-align: middle; line-height: 1; } + +.subtabs, .filter { box-sizing: border-box; float: right; margin: 0px; } + +.subtabs a, .filter a { display: block; margin: 0px 0px 0px 2px; padding: 8= +px; border-bottom: 1px solid transparent; color: rgb(106, 115, 124); font-s= +ize: 12px; line-height: 1.53333; text-decoration: none; transition: all 150= +ms cubic-bezier(0.19, 1, 0.22, 1) 0s; } + +.subtabs a.youarehere, .filter a.youarehere, .subtabs a.active, .filter a.a= +ctive, .subtabs a:hover, .filter a:hover { border-color: rgba(244, 128, 36,= + 0.5); color: rgb(60, 65, 70); text-decoration: none; } + +.subtabs a.youarehere, .filter a.youarehere, .subtabs a.active, .filter a.a= +ctive { border-color: rgb(244, 128, 36); font-weight: 700; } + +.subtabs a.youarehere:hover, .filter a.youarehere:hover, .subtabs a.active:= +hover, .filter a.active:hover { border-color: rgb(255, 127, 25); color: rgb= +(13, 14, 15); } + +.subtabs a { float: right; } + +.subtabs.filters.tag-synonyms { width: auto; } + +.filter { margin: 0px; } + +.filter a { display: inline-flex; padding-left: 4px; padding-right: 4px; bo= +rder-bottom-width: 2px; } + +[class*=3D"gravatar-wrapper-"] { padding: 0px; overflow: hidden; } + +[class*=3D"gravatar-wrapper-"] img { margin: 0px auto; } + +.gravatar-wrapper-256, .gravatar-wrapper-164, .gravatar-wrapper-128, .grava= +tar-wrapper-256 img, .gravatar-wrapper-164 img, .gravatar-wrapper-128 img {= + border-radius: 4px; } + +.gravatar-wrapper-64, .gravatar-wrapper-50, .gravatar-wrapper-48, .gravatar= +-wrapper-64 img, .gravatar-wrapper-50 img, .gravatar-wrapper-48 img { borde= +r-radius: 2px; } + +.gravatar-wrapper-256, .gravatar-wrapper-256 img { width: 256px; height: 25= +6px; } + +.gravatar-wrapper-164, .gravatar-wrapper-164 img { width: 164px; height: 16= +4px; } + +.gravatar-wrapper-128, .gravatar-wrapper-128 img { width: 128px; height: 12= +8px; } + +.gravatar-wrapper-64, .gravatar-wrapper-64 img { width: 64px; height: 64px;= + } + +.gravatar-wrapper-50, .gravatar-wrapper-50 img { width: 50px; height: 50px;= + } + +.gravatar-wrapper-48, .gravatar-wrapper-48 img { width: 48px; height: 48px;= + } + +.gravatar-wrapper-42, .gravatar-wrapper-42 img { width: 42px; height: 42px;= + } + +.gravatar-wrapper-40, .gravatar-wrapper-40 img { width: 40px; height: 40px;= + } + +.gravatar-wrapper-32, .gravatar-wrapper-32 img { width: 32px; height: 32px;= + } + +.gravatar-wrapper-25, .gravatar-wrapper-25 img { width: 25px; height: 25px;= + } + +.dropdown.left::before { left: 4px; } + +.dropdown.right::before { right: 4px; } + +.dropdown { top: 25px; z-index: 100; box-shadow: rgba(12, 13, 14, 0.3) 0px = +2px 5px; border-radius: 2px; background-color: rgb(255, 255, 255); margin: = +0px; position: absolute !important; } + +.dropdown::before { position: absolute; z-index: 101; content: ""; width: 1= +6px; height: 16px; top: -11px; right: 4px; background: url("../../img/filte= +r-sprites.svg?v=3Dd1e85fbf5198") -16px 0px no-repeat; } + +.dropdown ul { margin: 0px; } + +.dropdown li { text-align: left; white-space: nowrap; position: relative; b= +order-bottom: 1px solid rgb(239, 240, 241); line-height: 12px; display: blo= +ck; background-color: rgb(255, 255, 255); height: auto; margin-bottom: 0px;= + transition: all 0.2s ease 0s; } + +.dropdown li:hover { background-color: rgb(250, 250, 251); } + +.dropdown li:active { background-color: rgb(239, 240, 241); } + +.dropdown li a.selected { background-color: rgb(239, 240, 241); color: rgb(= +145, 153, 161); } + +.dropdown li:first-child { border-top: 1px solid rgb(239, 240, 241); } + +.dropdown li .bounty-indicator-tab { margin-left: 10px; } + +.dropdown li .bounty-indicator-tab a:hover { text-decoration: none; } + +.dropdown li a { box-sizing: border-box; width: 100%; padding: 10px; displa= +y: inline-block; } + +.dropdown li a#edit-favorite-tags { width: auto; font-size: 11px; } + +.segmented-dropdown { position: relative; padding-left: 40px; } + +.segmented-dropdown .-icon-a { position: absolute; top: 0px; bottom: 0px; l= +eft: 0px; padding: 0px; display: block; width: 40px; text-align: center; bo= +rder-right: 1px solid rgb(228, 230, 232); } + +.segmented-dropdown .-icon-a .-icon { position: relative; top: 12px; color:= + rgb(187, 192, 196); } + +.segmented-dropdown .-icon-a:hover ._toggle-star, .segmented-dropdown .-ico= +n-a:focus ._toggle-star, .segmented-dropdown .-icon-a:active ._toggle-star = +{ color: rgb(159, 166, 173); } + +.segmented-dropdown .-icon-a.-is-favorited ._toggle-star { color: rgb(221, = +182, 36); } + +.segmented-dropdown .-label { display: inline-block; position: relative; fo= +nt-size: 13px; color: rgb(83, 90, 96); padding: 12px; cursor: pointer; } + +.segmented-dropdown .-label .-icon { position: absolute; right: -4px; top: = +50%; transform: translateY(-50%); color: rgb(106, 115, 124); } + +.segmented-dropdown .-label:hover, .segmented-dropdown .-label:focus, .segm= +ented-dropdown .-label:active { color: rgb(36, 39, 41); } + +.segmented-dropdown .-label:hover .-icon, .segmented-dropdown .-label:focus= + .-icon, .segmented-dropdown .-label:active .-icon { color: rgb(60, 65, 70)= +; } + +.-segmented-dropdown-menu { position: absolute; top: 38px; overflow: hidden= +; max-height: 0px; } + +.-segmented-dropdown-menu .-close { position: absolute; z-index: 1; top: 0p= +x; right: 0px; padding: 8px; line-height: 1; color: rgb(187, 192, 196); cur= +sor: pointer; } + +.-segmented-dropdown-menu .-close:hover, .-segmented-dropdown-menu .-close:= +focus, .-segmented-dropdown-menu .-close:active { color: rgb(83, 90, 96); } + +.-segmented-dropdown-menu .-close svg { height: 16px; width: 16px; } + +.-segmented-dropdown-menu .-item { background-color: rgb(255, 255, 255); cu= +rsor: pointer; padding: 12px 8px 12px 0px; border-bottom: 1px solid rgb(239= +, 240, 241); border-left: 1px solid rgb(187, 192, 196); border-right: 1px s= +olid rgb(187, 192, 196); } + +.-segmented-dropdown-menu .-item:last-child { border-bottom-color: rgb(187,= + 192, 196); } + +.-segmented-dropdown-menu .-item:hover, .-segmented-dropdown-menu .-item:fo= +cus, .-segmented-dropdown-menu .-item:active { background-color: rgb(250, 2= +50, 251); } + +.-segmented-dropdown-menu .-item .-checkmark { width: 40px; flex-shrink: 0;= + color: rgb(94, 186, 125); text-align: center; line-height: 1; margin-top: = +-2px; visibility: hidden; } + +.-segmented-dropdown-menu .-item .-checkmark.selected { visibility: visible= +; } + +.-segmented-dropdown-menu .-item .-desc { flex-grow: 1; } + +.-segmented-dropdown-menu .-item .-desc .-title { font-weight: bold; color:= + rgb(36, 39, 41); font-size: 13px; } + +.-segmented-dropdown-menu .-item .-desc .-note { color: rgb(106, 115, 124);= + font-size: 12px; } + +.-is-active .-frequency-menu { max-height: 40em; } + +@keyframes spinnerRotate {=20 + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +a.loading::before { content: ""; position: relative; display: inline-block;= + top: 1px; left: -4px; width: 8px; height: 8px; border-radius: 50%; border-= +width: 2px; border-style: solid; border-color: rgb(209, 229, 241) rgb(209, = +229, 241) rgb(209, 229, 241) rgb(160, 199, 228); border-image: initial; tra= +nsform: translateZ(0px); animation: 0.8s linear 0s infinite normal none run= +ning spinnerRotate; } + +.hero-background { background-image: url("../../img/hero/anonymousHeroBackg= +round.svg?v=3Db7f6054406b5"); background-size: contain; background-repeat: = +no-repeat; background-position: center center; } + +.old-hero { color: rgb(255, 255, 255); background-color: rgb(17, 123, 243);= + background-image: url("../../img/hero/pattern.svg?v=3D13ca42e6c21d"), line= +ar-gradient(to right, rgb(18, 108, 250) 0%, rgb(16, 138, 236) 100%); backgr= +ound-position: right center, center center; background-repeat: no-repeat, n= +o-repeat; } + +.old-hero .-link { color: rgb(255, 255, 255); } + +.old-hero .-link:hover { text-decoration: underline; } + +.old-hero._orange { color: rgb(255, 255, 255); background-color: rgb(222, 1= +04, 10); background-image: linear-gradient(to right, rgb(228, 87, 14) 0%, r= +gb(215, 120, 6) 100%); } + +.old-hero._orange .-link { color: rgb(255, 255, 255); } + +.old-hero._orange .-link:hover { text-decoration: underline; } + +.old-hero._photo { background-size: cover; background-position: center cent= +er; background-repeat: no-repeat; } + +.hero-box { background: rgb(67, 125, 204); margin: 40px 0px; color: rgb(255= +, 255, 255); text-align: center; position: relative; } + +.hero-box .hero-content { padding: 30px; } + +.hero-box .hidden { display: none; } + +.hero-box .hero-title { font-size: 18px; font-weight: 400; margin-bottom: 3= +0px; } + +.hero-box .hero-title small { display: block; font-size: 16px; padding-top:= + 4px; } + +.hero-box .subtitle { font-size: 15px; } + +.hero-box input[type=3D"text"] { box-shadow: none; } + +.hero-box input[type=3D"text"][disabled], .hero-box input[type=3D"text"].di= +sabled { background-color: rgb(255, 255, 255); } + +.hero-box .btn { background: rgb(244, 128, 36); border-color: rgb(155, 97, = +20); box-shadow: rgb(255, 194, 114) 0px 1px 0px inset; } + +.hero-box .btn.loading { color: white; } + +.hero-box .btn:hover { background: rgb(218, 103, 11); } + +.hero-box .tag-suggestions { color: rgb(12, 13, 14); } + +.modal { max-width: 700px; max-height: 900px; min-width: 400px; background:= + rgb(255, 255, 255); border-radius: 3px; z-index: 9999; overflow: hidden; p= +osition: fixed !important; } + +.modal * { box-sizing: border-box; } + +.modal.size-medium { max-width: 500px; } + +.modal.auto-center { transform: translate(-50%, -50%); left: 50% !important= +; top: 50% !important; } + +.modal.wmd-prompt-dialog { padding: 0px; border: 0px; } + +.modal:focus { outline: none; } + +.modal .modal-close { position: absolute; top: 4px; right: 4px; z-index: 2;= + font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; color: rgb(18= +5, 187, 196); font-size: 17px; font-weight: 600; line-height: 1; width: 30p= +x; height: 30px; text-align: center; padding-top: 7px; border-radius: 50%; = +cursor: pointer; } + +.modal .modal-close:hover { color: rgb(83, 90, 96); background: rgb(239, 24= +0, 241); } + +.modal .modal-header { text-align: center; } + +.modal .modal-content, .modal .modal-footer { padding: 30px; } + +.modal .modal-footer { background: rgb(63, 74, 89); } + +.modal .modal-footer::before, .modal .modal-footer::after { content: ""; di= +splay: table; } + +.modal .modal-footer::after { clear: both; } + +.modal .modal-footer p { font-size: 10px; color: rgb(179, 191, 207); margin= +-bottom: 0px; } + +.modal .modal-footer p a:not(.btn) { color: inherit; text-decoration: under= +line; } + +.modal .modal-footer p a:not(.btn):hover { color: rgb(255, 255, 255); } + +.modal .modal-footer .modal-notice { float: left; } + +.modal .modal-footer .modal-cta { float: right; } + +.modal .modal-footer .modal-ctas { display: flex; justify-content: space-be= +tween; } + +.modal-overlay { position: fixed; top: 0px; right: 0px; bottom: 0px; left: = +0px; background: rgba(12, 13, 14, 0.5); z-index: 1001; } + +.modal.image-upload .modal-content { text-align: center; } + +.modal.image-upload .modal-options { padding: 24px 0px 9px; color: rgb(60, = +65, 70); } + +.modal.image-upload .modal-options p { margin-bottom: 0px; } + +.modal.image-upload .modal-options .ajax-loader { margin-left: 10px; } + +.modal.image-upload .modal-input-url, .modal.image-upload .modal-options-se= +parator { margin: 0px 6px; } + +.modal.image-upload .modal-dropzone-default, .modal.image-upload .modal-dro= +pzone-preview { border: 2px dashed rgb(222, 227, 231); height: 246px; borde= +r-radius: 3px; padding: 15px; width: 620px; position: relative; } + +.modal.image-upload .modal-dropzone-default { background: rgb(240, 242, 244= +); cursor: pointer; transition: background 300ms ease 0s, border 300ms ease= + 0s; } + +.modal.image-upload .modal-dropzone-default:hover, .modal.image-upload .mod= +al-dropzone-default.hover { background: rgb(231, 234, 238); border-color: r= +gb(192, 202, 210); } + +.modal.image-upload .modal-dropzone-default:hover .modal-dropzone-img::befo= +re, .modal.image-upload .modal-dropzone-default.hover .modal-dropzone-img::= +before { top: -50px; } + +.modal.image-upload .modal-dropzone-default:hover .modal-dropzone-img::afte= +r, .modal.image-upload .modal-dropzone-default.hover .modal-dropzone-img::a= +fter { top: -76px; } + +.modal.image-upload .modal-dropzone-default > * { pointer-events: none; } + +.modal.image-upload .modal-dropzone-default .modal-dropzone-img { backgroun= +d-image: url("../../img/img-upload.svg?v=3D16d9e4614ece"), none; background= +-position: 0px 0px; width: 86px; height: 78px; position: absolute; top: 88p= +x; left: 50%; margin-left: -43px; } + +.modal.image-upload .modal-dropzone-default .modal-dropzone-img::before, .m= +odal.image-upload .modal-dropzone-default .modal-dropzone-img::after { posi= +tion: absolute; background-image: url("../../img/img-upload.svg?v=3D16d9e46= +14ece"), none; display: block; content: ""; transition: all 0.15s ease 0s; = +} + +.modal.image-upload .modal-dropzone-default .modal-dropzone-img::before { b= +ackground-position: -120px -21px; width: 156px; height: 65px; top: -44px; l= +eft: -33px; } + +.modal.image-upload .modal-dropzone-default .modal-dropzone-img::after { ba= +ckground-position: -130px -90px; width: 53px; height: 61px; top: -66px; lef= +t: 18px; } + +.modal.image-upload .modal-dropzone-default p { margin-top: 166px; margin-b= +ottom: 0px; color: rgb(132, 149, 164); font-size: 16px; } + +.modal.image-upload .modal-dropzone-default p b { font-size: 28px; color: r= +gb(103, 118, 131); font-weight: 700; display: block; margin-bottom: 10px; } + +.modal.image-upload .modal-input-file { display: none; } + +.modal.image-upload .modal-input-url { width: 250px; } + +.modal.image-upload .modal-options-error-message { color: red; font-weight:= + bold; } + +.modal.image-upload .modal-footer p { padding-top: 12px; } + +.modal.image-upload .modal-footer .icon-imgur-white { margin-right: 8px; ma= +rgin-left: 2px; } + +.modal.wmd-prompt-dialog.insert-link { padding: 20px; width: 470px; overflo= +w: visible; } + +.modal.wmd-prompt-dialog.insert-link .tabs { margin-bottom: 20px; float: le= +ft; width: 100%; height: 41px; border-bottom: 1px solid rgb(234, 235, 236);= + } + +.modal.wmd-prompt-dialog.insert-link .notes { padding: 5px; } + +.modal.wmd-prompt-dialog.insert-link form { padding: 0px; margin: 0px; floa= +t: left; width: 100%; position: relative; } + +.modal.wmd-prompt-dialog.insert-link form input[type=3D"text"] { display: b= +lock; width: 100%; margin: 0px auto; } + +.modal.wmd-prompt-dialog.insert-link form input[type=3D"button"] { margin: = +20px 10px 0px 0px; display: inline; } + +.modal.wmd-prompt-dialog.insert-link form input[type=3D"button"].insert-hyp= +erlink { width: 5em; } + +.popup { z-index: 2000; display: none; position: absolute; padding: 16px; b= +ox-shadow: rgba(36, 39, 41, 0.3) 0px 2px 4px; background-color: rgb(255, 25= +5, 255); border: 1px solid rgb(159, 166, 173); } + +.popup .already-flagged { display: inline-block; margin-left: 23px; margin-= +top: 8px; color: maroon; font-weight: 700; } + +.popup .disabled-action { cursor: default !important; } + +.popup .disabled-action .action-desc, .popup .disabled-action .action-name = +{ opacity: 0.6; cursor: default !important; } + +.popup textarea { width: 100%; } + +.popup .subheader { margin-bottom: 10px !important; margin-top: 25px !impor= +tant; } + +.popup .popup-title-container { margin-bottom: 10px; } + +.popup .popup-title-container .popup-breadcrumbs .breadcrumb .arrow { paddi= +ng: 0px 6px; } + +.popup #search-text, .popup .close-as-duplicate-pane .actual-edit-overlay {= + width: 755px !important; } + +.popup .question-summary { border: 0px; } + +.message.message-config, .contributor-dropdown, .ask-confirmation-popup { b= +order-radius: 5px; border: 0px; box-shadow: rgba(36, 39, 41, 0.2) 0px 2px 1= +0px 0px; } + +.message.message-config .message-close, .contributor-dropdown .message-clos= +e, .ask-confirmation-popup .message-close, .message.message-config .popup-c= +lose a, .contributor-dropdown .popup-close a, .ask-confirmation-popup .popu= +p-close a { margin: 0px; padding: 0px; position: absolute; z-index: 2; top:= + 11px; right: 10px; border: 0px; font-size: 17px; cursor: pointer; font-wei= +ght: 600; color: rgb(185, 187, 196) !important; } + +.message.message-config .message-close:hover, .contributor-dropdown .messag= +e-close:hover, .ask-confirmation-popup .message-close:hover, .message.messa= +ge-config .popup-close a:hover, .contributor-dropdown .popup-close a:hover,= + .ask-confirmation-popup .popup-close a:hover { color: rgb(83, 90, 96) !imp= +ortant; } + +.message.message-config .popup-close a, .contributor-dropdown .popup-close = +a, .ask-confirmation-popup .popup-close a { background: none; right: 22px; = +} + +.ask-confirmation-popup .popup-close a { top: 16px; right: 16px; } + +.ask-confirmation-popup .popup-title { padding-right: 32px; } + +.ask-confirmation-popup .popup-actions { display: flex; justify-content: ce= +nter; align-items: center; margin-top: 8px; } + +.ask-confirmation-popup .popup-actions-cancel { margin-right: 16px; } + +.message.message-config .message-tip .popup-title { font-weight: 700 !impor= +tant; } + +.message.message-config .message-tip.message-tip-top-right::before, .messag= +e.message-config .message-tip.message-tip-top-left::before { width: 0px; he= +ight: 0px; border-left: 6px solid transparent; border-right: 6px solid tran= +sparent; border-bottom: 6px solid rgb(255, 255, 255); top: -12px; } + +.message.message-config .message-tip.message-tip-top-right::before { right:= + 12px; } + +.message.message-config .message-tip.message-tip-top-left::before { left: 1= +2px; } + +.message.message-config h1, .message.message-config h2, .message.message-co= +nfig h3, .message.message-config h4 { color: rgb(12, 13, 14); margin-bottom= +: 1em; } + +.message.message-config h4 { text-align: left; letter-spacing: 0px; margin-= +right: 16px; } + +.message.message-config h4.popup-nav-title { text-align: center; margin: 0p= +x 15px 15px 10px; } + +.message.message-config .actions { margin: 20px -20px -20px; padding: 0px 1= +5px; background: rgb(63, 74, 89); height: 48px; border-radius: 0px 0px 3px = +3px; } + +.message.message-config .actions::before, .message.message-config .actions:= +:after { content: ""; display: table; } + +.message.message-config .actions::after { clear: both; } + +.message.message-config .actions .rep-number, .message.message-config .acti= +ons .button { text-align: center; font-size: 12px; } + +.message.message-config .actions .rep-number { float: left; display: inline= +-block; color: rgb(255, 255, 255); font-weight: 700; padding-top: 16px; } + +.message.message-config .actions .button { float: right; padding: 8px 16px;= + margin-top: 10px; text-decoration: none; display: inline-block; font-weigh= +t: 600; background: rgb(82, 165, 236); border: 0px; border-radius: 3px; col= +or: rgb(255, 255, 255) !important; box-shadow: none !important; } + +.message.message-config .actions .button:hover { background: rgb(0, 119, 20= +4); } + +.message.message-config .actions .button::after { content: " "; display: in= +line-block; background-image: url("../../img/user-profile-sprite.svg?v=3Dd8= +8bb7069e3d"), none; background-position: -15px -409px; width: 7px; height: = +10px; position: relative; top: 2px; left: 4px; } + +.message.message-config .message-text { border-radius: 6px; position: relat= +ive; z-index: 1; padding: 20px !important; } + +.message.message-config .message-text .question-hyperlink, .message.message= +-config .message-text .answer-hyperlink { font-size: 13px; text-decoration:= + none; color: rgb(0, 119, 204); } + +.message.message-config .message-text .question-hyperlink:hover, .message.m= +essage-config .message-text .answer-hyperlink:hover { color: rgb(0, 149, 25= +5); } + +.message.message-config .popup-nav { list-style: none; margin: 0px -20px -2= +0px; padding: 0px; text-align: center; } + +.message.message-config .popup-nav li { margin: 0px; padding: 0px; border-b= +ottom: 1px solid rgb(239, 240, 241); } + +.message.message-config .popup-nav li:last-child { border-bottom: 0px; } + +.message.message-config .popup-nav li:first-child { border-top: 1px solid r= +gb(239, 240, 241); } + +.message.message-config .popup-nav li a { transition: color 0.3s ease 0s, b= +ackground 0.3s ease 0s; text-decoration: none; color: rgb(106, 115, 124); f= +ont-size: 13px; display: block; padding: 10px 15px; } + +.message.message-config .popup-nav li a:hover, .message.message-config .pop= +up-nav li a.active, .message.message-config .popup-nav li a.youarehere { ba= +ckground: rgb(0, 119, 204); color: rgb(255, 255, 255); } + +.message.message-config .unstyled { padding: 0px; list-style: none; text-al= +ign: center; margin: 0px -20px -20px; } + +.message.message-config .unstyled li { border-bottom: 1px solid rgb(239, 24= +0, 241); padding: 10px; } + +.message.message-config .unstyled li .badge { text-decoration: none; } + +.message.message-config .unstyled li:first-child { border-top: 1px solid rg= +b(239, 240, 241); } + +.message.message-config .unstyled li:last-child { border-bottom: 0px; } + +.message.message-config.tooltip { border-radius: 3px; pointer-events: none;= + } + +.message.message-config.tooltip .message-inner::before { display: none; } + +.message.message-config.tooltip .message-text { font-weight: 500; font-size= +: 11px; color: rgb(12, 13, 14); border-radius: 3px; padding: 3px 8px !impor= +tant; } + +.message.message-config .no-cta p { margin-bottom: 0px; } + +.message.message-config .no-cta .bars-wrapper { margin-top: 10px; } + +.popup._badge-selection { display: block; margin: 0px; border-color: rgb(25= +5, 255, 255); height: 500px; width: 960px; } + +.popup._badge-selection .popup-close .-link { clear: right; display: flex; = +justify-content: center; align-items: center; position: absolute; top: 8px;= + right: 8px; width: 32px; height: 32px; z-index: 1; background-color: rgb(2= +55, 255, 255); transition: all 300ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s;= + color: rgb(83, 90, 96) !important; } + +.popup._badge-selection .popup-close .-link:hover { background-color: rgb(2= +39, 240, 241); color: rgb(36, 39, 41) !important; } + +.popup._badge-selection .-header { padding-top: 8px; padding-bottom: 16px; = +} + +.popup._badge-selection .-header .-title { margin-bottom: 0px; font-size: 2= +4px; line-height: 1.13333; } + +.popup._badge-selection .-navigation { padding-top: 8px; padding-bottom: 24= +px; } + +.popup._badge-selection .subtabs a { border-bottom-width: 2px; } + +.popup._badge-selection .-search { margin-bottom: 0px; padding-left: 16px; = +} + +.popup._badge-selection .-search .f-input { margin: 0px; } + +.popup._badge-selection .-badge-list { padding-top: 2px; padding-left: 2px;= + height: 75%; overflow: hidden auto; } + +.popup._badge-selection .-list-item { margin-left: -1px; margin-top: -1px; = +padding: 12px; min-height: 64px; max-height: 128px; background-color: rgb(2= +55, 255, 255); border: 1px solid rgb(228, 230, 232); transition: all 600ms = +cubic-bezier(0.19, 1, 0.22, 1) 0s; cursor: pointer; } + +.popup._badge-selection .-list-item .-flag-recommend { position: absolute; = +top: 1px; right: 1px; padding: 4px 8px; background-color: rgb(94, 186, 125)= +; z-index: 10; font-size: 11px; line-height: 1.46154; color: rgb(255, 255, = +255); } + +.popup._badge-selection .-list-item .s-progress-bar._badge .-bar { backgrou= +nd-color: rgb(255, 255, 255); } + +.popup._badge-selection .-list-item .-badge-progress { padding-top: 12px; } + +.popup._badge-selection .-list-item .-description { margin-bottom: 0px; pad= +ding: 16px 0px 12px; font-size: 12px; line-height: 1.13333; color: rgb(83, = +90, 96); } + +.popup._badge-selection .-list-item:hover { z-index: 1; background-color: r= +gb(250, 250, 251); box-shadow: rgba(36, 39, 41, 0.15) 0px 2px 12px; } + +.popup._badge-selection .-list-item.is-completed { background-color: rgb(23= +9, 240, 241); } + +.popup._badge-selection .-list-item.is-completed .-description { color: rgb= +(36, 39, 41); } + +.popup._badge-selection .-list-item.is-completed .-icon { color: rgb(94, 18= +6, 125); } + +.popup-badges .limited-badges-notice { clear: both; display: table; margin:= + 0px auto; padding: 15px 0px 0px; font-size: 13px; color: rgb(106, 115, 124= +); } + +.envelope-on, .envelope-off, .vote-up-off, .vote-up-on, .vote-down-off, .vo= +te-down-on, .star-on, .star-off, .feed-icon, .vote-accepted-off, .vote-acce= +pted-on, .vote-accepted-bounty, .badge-earned-check, .delete-tag, .grippie,= + .expander-arrow-hide, .expander-arrow-show, .expander-arrow-small-hide, .e= +xpander-arrow-small-show, .anonymous-gravatar, .badge1, .badge2, .badge3 { = +background-image: url("../../Img/unified/sprites.svg?v=3De5e58ae7df45"), no= +ne; background-size: initial; background-repeat: no-repeat; overflow: hidde= +n; } + +.vote-up-off, .vote-up-on, .vote-down-off, .vote-down-on, .star-on, .star-o= +ff, .vote-accepted-off, .vote-accepted-on { display: block; margin: 0px aut= +o 2px; text-indent: -999em; width: 40px; height: 40px; } + +.vote-up-off, .vote-down-off, .vote-accepted-off, .star-off { cursor: point= +er; } + +.vote-up-off, .vote-up-on, .vote-down-off, .vote-down-on, .star-on, .star-o= +ff, .vote-accepted-off, .vote-accepted-on { text-indent: -9999em; font-size= +: 1px; } + +.vote-up-off { background-position: 0px -170px; } + +.vote-up-on { background-position: -40px -170px; } + +.vote-down-off { background-position: 0px -220px; margin-bottom: 8px; } + +.vote-down-on { background-position: -40px -220px; margin-bottom: 8px; } + +.star-off { background-position: 0px -120px; } + +.star-on { background-position: -40px -120px; } + +.vote-accepted-off { background-position: 0px -270px; } + +.vote-accepted-on { background-position: -40px -270px; } + +.migrated.to, .migrated.from { background-repeat: no-repeat; overflow: hidd= +en; background-color: transparent; background-image: url("../../Img/unified= +/sprites.png?v=3D0786b22b9381") !important; } + +.informative-tooltip { position: absolute; padding: 0.8em; max-width: 200px= +; z-index: 3000; border-radius: 3px; background: rgb(71, 71, 71); font-size= +: 12px; color: rgb(255, 255, 255); } + +.informative-tooltip.arrow::before { position: absolute; content: ""; width= +: 0px; height: 0px; } + +.informative-tooltip.arrow.up-left::before, .informative-tooltip.arrow.up-c= +enter::before, .informative-tooltip.arrow.up-right::before { top: -4px; bor= +der-left: 5px solid transparent; border-right: 5px solid transparent; borde= +r-bottom: 5px solid rgb(71, 71, 71); } + +.informative-tooltip.arrow.up-center::before { left: 50%; margin-left: -5px= +; } + +.informative-tooltip.arrow.up-left::before { left: 10px; } + +.informative-tooltip.arrow.up-right::before { right: 10px; } + +.informative-tooltip.arrow.down-left::before, .informative-tooltip.arrow.do= +wn-center::before, .informative-tooltip.arrow.down-right::before { bottom: = +-4px; border-left: 5px solid transparent; border-right: 5px solid transpare= +nt; border-top: 5px solid rgb(71, 71, 71); } + +.informative-tooltip.arrow.down-center::before { left: 50%; margin-left: -5= +px; } + +.informative-tooltip.arrow.down-left::before { left: 10px; } + +.informative-tooltip.arrow.down-right::before { right: 10px; } + +.informative-tooltip.arrow.left-top::before, .informative-tooltip.arrow.lef= +t-center::before, .informative-tooltip.arrow.left-bottom::before { left: -4= +px; border-top: 5px solid transparent; border-bottom: 5px solid transparent= +; border-right: 5px solid rgb(71, 71, 71); } + +.informative-tooltip.arrow.left-center::before { top: 50%; margin-top: -5px= +; } + +.informative-tooltip.arrow.left-top::before { top: 10px; } + +.informative-tooltip.arrow.left-bottom::before { bottom: 10px; } + +.informative-tooltip.arrow.right-top::before, .informative-tooltip.arrow.ri= +ght-center::before, .informative-tooltip.arrow.right-bottom::before { right= +: -4px; border-top: 5px solid transparent; border-bottom: 5px solid transpa= +rent; border-left: 5px solid rgb(71, 71, 71); } + +.informative-tooltip.arrow.right-center::before { top: 50%; margin-top: -5p= +x; } + +.informative-tooltip.arrow.right-top::before { top: 10px; } + +.informative-tooltip.arrow.right-bottom::before { bottom: 10px; } + +.informative-tooltip.error { background: rgb(222, 83, 94); color: white; } + +.informative-tooltip.display-above, .informative-tooltip.display-right { to= +p: 0px; max-width: none; } + +.informative-tooltip.display-above::before, .informative-tooltip.display-ri= +ght::before { content: ""; position: absolute; width: 0px; height: 0px; bor= +der-width: 5px; border-style: solid; border-color: transparent; } + +.informative-tooltip.display-above.size-200, .informative-tooltip.display-r= +ight.size-200 { width: 200px; } + +.informative-tooltip.display-above.error::before, .informative-tooltip.disp= +lay-right.error::before { border-top-color: rgb(222, 83, 94); } + +.informative-tooltip.display-above { left: 50%; transform: translate(-50%, = +-110%); } + +.informative-tooltip.display-above::before { bottom: -4px; left: 50%; margi= +n-left: -5px; border-bottom-width: 0px; border-top-color: rgb(71, 71, 71); = +} + +.informative-tooltip.display-right { right: 50%; transform: translate(115%,= + 0%); } + +.informative-tooltip.display-right::before { left: -4px; top: 50%; margin-t= +op: -5px; border-left-width: 0px; border-right-color: rgb(71, 71, 71); } + +.has-tooltip { position: relative; } + +.has-tooltip .informative-tooltip { opacity: 0; visibility: hidden; transit= +ion: opacity 300ms ease 0s, transform 300ms ease 0s; } + +.has-tooltip:hover .informative-tooltip { opacity: 1; visibility: visible; = +} + +.has-tooltip.on-hover .tooltip-above.arrow.down-right { right: -6px; top: -= +10px; transform: translate(0px, -80%); } + +.has-tooltip.on-hover:hover .tooltip-above.arrow.down-right { transform: tr= +anslate(0px, -100%); } + +.has-tooltip .informative-tooltip.display-above { transform: translate(-50%= +, -80%); } + +.has-tooltip:hover .informative-tooltip.display-above { transform: translat= +e(-50%, -110%); } + +.has-tooltip .informative-tooltip.display-right { transform: translate(120%= +, 0%); } + +.has-tooltip:hover .informative-tooltip.display-right { transform: translat= +e(115%, 0%); } + +.css-tooltip { position: relative; } + +.css-tooltip[data-title]:hover::after { content: attr(data-title); backgrou= +nd: rgb(71, 71, 71); padding: 0.8em; margin-left: 5px; max-width: 200px; co= +lor: rgb(255, 255, 255); font-size: 12px; border-radius: 3px; position: abs= +olute; z-index: 1031; left: 0px; top: 100%; } + +.definition-tooltip { color: rgb(0, 119, 204); cursor: pointer; } + +.tooltip-new-feature { position: absolute; bottom: -24px; background: rgb(2= +44, 128, 36); color: rgb(255, 255, 255); border-radius: 3px; padding: 3px 6= +px; display: inline-block; } + +.tooltip-new-feature::before { content: ""; display: block; width: 0px; hei= +ght: 0px; position: absolute; border-left: 5px solid transparent; border-ri= +ght: 5px solid transparent; border-bottom: 5px solid rgb(244, 128, 36); top= +: 0px; left: 10px; margin-top: -5px; } + +.users-grid { margin-bottom: 30px; display: flex; flex-wrap: wrap; } + +.users-grid .-user { border: 1px solid rgb(239, 240, 241); border-radius: 3= +px; padding: 20px 10px 20px 20px; margin: 0px 20px 20px 0px; width: calc(33= +.3333% - 13.3333px); display: flex; flex-wrap: nowrap; align-items: center;= + } + +.users-grid .-user .-details { padding-left: 15px; max-width: calc(100% - 6= +4px); flex-grow: 2; } + +.users-grid .-user .-details > :not(:last-child) { margin-bottom: 4px; } + +.users-grid .-user .-details h3, .users-grid .-user .-details p { max-width= +: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + +.users-grid .-user .-details h3 { font-weight: 400; font-size: 16px; } + +.users-grid .-user .-details p { margin-bottom: 0px; color: rgb(132, 141, 1= +49); } + +.users-grid .-user .-details p:last-child { margin-bottom: 0px; } + +.users-grid .-user:nth-child(3n) { margin-right: 0px; } + +.users-grid .-user .-avatar { width: 64px; height: 64px; } + +.users-grid .-user .-avatar img { max-width: 100%; height: auto; } + +.users-grid .-user.-private .-avatar { background: url("../../img/user.svg?= +v=3D20c64bb67fc9") center center / 50% no-repeat rgb(228, 234, 237); } + +.users-grid .-user.-private .-details h3 { margin-bottom: 0px; } + +.list-card { position: absolute; z-index: 3000; background: rgb(255, 255, 2= +55); width: 395px; padding: 20px; border-radius: 3px; box-shadow: rgba(0, 0= +, 0, 0.15) 0px 1px 25px; transform: translate(0%, -110%); align-items: cent= +er; border: 1px solid rgb(236, 236, 236); } + +.list-card::before { content: ""; width: 0px; height: 0px; border-left: 12p= +x solid transparent; border-right: 12px solid transparent; border-top: 9px = +solid rgb(255, 255, 255); position: absolute; bottom: -7px; left: 20px; } + +.list-card .-avatar { width: 100px; height: 100px; align-self: flex-start; = +background: rgb(255, 255, 255); padding: 6px; border: 1px solid var(--black= +-075); border-radius: 3px; display: flex; align-items: center; margin-right= +: 15px; flex: 0 0 auto; } + +.list-card .-avatar img { border-radius: 3px; max-width: 100%; height: auto= +; width: 100%; } + +.list-card .-avatar .logo-blank { background-color: rgb(239, 240, 241); col= +or: rgb(159, 166, 173); max-width: 100%; width: 100%; height: 100%; border-= +radius: 3px; } + +.list-card .-details { color: rgb(106, 115, 124); font-weight: 400; font-si= +ze: 13px; width: 100%; } + +.list-card .-details .-name { color: rgb(60, 65, 70); font-weight: 700; fon= +t-size: 16px; margin-bottom: 0px; } + +.list-card .-details .-users-list { display: flex; flex-wrap: wrap; margin:= + 5px 0px; } + +.list-card .-details .-users-list .-user:not(:last-child) { margin-right: 4= +px; } + +.list-card .-details .-users-list .avatar { width: 26px; height: 26px; over= +flow: hidden; } + +.list-card .-details .-users-list .avatar img { max-width: 100%; height: au= +to; width: 100%; } + +.list-card .-details .-users-list .avatar.-private { background: url("../..= +/img/user.svg?v=3D20c64bb67fc9") center center / 50% no-repeat rgb(228, 234= +, 237); } + +.list-card .-details .more { display: inline-block; margin-top: 2px; } + +.topbar .profile-me { position: relative; } + +.new-feature-wrapper { position: absolute; z-index: 99; } + +.new-feature-wrapper .new-feature { background: rgb(255, 153, 0); color: rg= +b(255, 255, 255); text-align: center; padding: 6px; border-radius: 3px; } + +.new-feature-wrapper .new-feature .title { font-size: 11px; text-transform:= + uppercase; font-weight: 700; margin-bottom: 6px; } + +.new-feature-wrapper .new-feature p { font-size: 12px; margin-bottom: 0px; = +} + +.html__unpinned-leftnav .new-feature-wrapper { display: none; } + +.topbar .profile-me .new-feature-wrapper { top: 34px; left: -82px; width: 2= +00px; } + +.topbar .profile-me .new-feature-wrapper .new-feature { margin: 0px auto; p= +osition: relative; top: 6px; height: 11px; width: 100px; } + +.topbar .profile-me .new-feature-wrapper .new-feature::before { content: ""= +; display: block; width: 0px; height: 0px; border-left: 6px solid transpare= +nt; border-right: 6px solid transparent; border-bottom: 4px solid rgb(255, = +153, 0); position: absolute; top: -4px; left: 50%; margin-left: -3px; } + +.topbar .profile-me .new-feature-wrapper .new-feature p { opacity: 0; margi= +n: 0px auto; visibility: hidden; } + +.topbar .profile-me .new-feature-wrapper .new-feature .close-btn { display:= + block; position: absolute; top: 0px; right: 0px; background: rgb(235, 105,= + 0); line-height: 16px; font-size: 11px; height: 18px; width: 18px; border-= +radius: 0px 3px; opacity: 0; } + +.topbar .profile-me:hover .new-feature, .topbar .profile-me .new-feature-wr= +apper:hover .new-feature { animation: 0.3s cubic-bezier(0.175, 0.885, 0.32,= + 1.275) 0s 1 normal forwards running new-profile-box; } + +.topbar .profile-me:hover .new-feature .close-btn, .topbar .profile-me .new= +-feature-wrapper:hover .new-feature .close-btn, .topbar .profile-me:hover .= +new-feature p, .topbar .profile-me .new-feature-wrapper:hover .new-feature = +p { visibility: visible; animation: 0.3s ease 0.25s 1 normal forwards runni= +ng opacity-in; } + +@keyframes new-profile-box {=20 + 0% { width: 100px; height: 11px; } + 100% { width: 164px; height: 56px; } +} + +.modal.auto-center.snippet-modal { position: fixed; right: 0px; bottom: 0px= +; display: flex; justify-content: center; align-items: center; pointer-even= +ts: none; transform: translateZ(0px) !important; width: 100% !important; he= +ight: 100% !important; top: 0px !important; left: 0px !important; backgroun= +d: none !important; } + +.modal.auto-center.snippet-modal .snippet-holder { background: rgb(255, 255= +, 255); border-radius: 3px; width: 95%; height: 95%; overflow: hidden; poin= +ter-events: auto; } + +.snippet-modal * { box-sizing: border-box; } + +.snippet-modal.modal { max-width: none; max-height: none; } + +.snippet-box-edit { box-sizing: border-box; position: absolute; top: 0px; l= +eft: 0px; width: 100%; height: 100%; border: 0px; margin: 0px; resize: none= +; background: rgb(255, 255, 255); overflow: auto; } + +textarea.snippet-box-edit { background-color: rgb(254, 255, 255); backgroun= +d-image: linear-gradient(rgb(255, 255, 255) 0%, rgb(255, 249, 252) 69%, rgb= +(249, 244, 246) 100%); } + +.snippet-box-label { position: absolute; top: 10px; right: 20px; padding: 3= +px; border: 1px solid rgb(145, 153, 161); font-size: 10px; color: rgb(106, = +115, 124); } + +.snippet-footer { text-align: center; padding: 5px; } + +.snippet-code { border: 1px solid var(--black-075); padding: 10px; } + +.snippet-code .snippet-ctas { font-size: 13px; } + +.snippet-code .snippet-ctas > :not(:last-child) { margin-right: 6px; } + +.snippet-code .snippet-ctas .icon-play-white { position: relative; top: 1px= +; margin-right: 2px; } + +.snippet-code .hideResults::before { content: ""; display: inline-block; ba= +ckground: url("../../img/share-sprite-new.svg?v=3D0e11bfd41fbc") 0px -238px= + no-repeat; width: 12px; height: 12px; margin-right: 6px; position: relativ= +e; top: 1px; } + +.snippet-code .snippet-result .snippet-result-code { padding-top: 20px; mar= +gin-top: 20px; border-top: 1px solid var(--black-075); height: 200px; posit= +ion: relative; } + +.snippet-code .popin, .snippet-code .popout, .snippet-code .popout-code { f= +ont-size: 13px; right: 0px; } + +.snippet-code .popout { position: absolute; top: -48px; } + +.ask-mainbar .snippet-code .popout { top: -43px; } + +.snippet-code .popout-code { display: inline; margin-left: 10px; } + +.snippet-code .popout::before, .snippet-code .popout-code::before { content= +: ""; display: inline-block; background: url("../../img/share-sprite-new.sv= +g?v=3D0e11bfd41fbc") 0px -220px no-repeat; width: 9px; height: 9px; margin-= +right: 6px; } + +.snippet-code .popin { position: fixed; background: rgb(246, 248, 249); pad= +ding: 4px 6px; right: 0px; top: 0px; z-index: 9001; } + +div.snippet-hidden div.snippet-currently-hidden { display: none; } + +a.snippet-show-link-chevron, a.snippet-show-link-chevron:hover { border-bot= +tom: 0px; text-decoration: none; } + +.expanded-snippet { position: absolute; top: 0px; left: 0px; margin: 5px; w= +idth: 99%; z-index: 900; } + +.CodeMirror { font-family: monospace; color: black; top: 0px; left: 0px; wi= +dth: 100%; height: 100%; position: absolute !important; } + +.CodeMirror-lines { padding: 4px 0px; } + +.CodeMirror pre { padding: 0px 4px; } + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color:= + rgb(255, 255, 255); } + +.CodeMirror-gutters { border-right: 1px solid rgb(214, 217, 220); backgroun= +d-color: rgb(250, 250, 251); white-space: nowrap; } + +.CodeMirror-linenumber { padding: 0px 3px 0px 5px; min-width: 20px; text-al= +ign: right; color: rgb(145, 153, 161); white-space: nowrap; } + +.CodeMirror-guttermarker { color: rgb(12, 13, 14); } + +.CodeMirror-guttermarker-subtle { color: rgb(145, 153, 161); } + +.CodeMirror-cursor { border-left: 1px solid rgb(12, 13, 14); border-right: = +none; width: 0px; } + +.CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver;= + } + +.cm-fat-cursor .CodeMirror-cursor { width: auto; background: rgb(119, 238, = +119); border: 0px !important; } + +.cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } + +.cm-animate-fat-cursor { width: auto; border: 0px; animation: 1.06s steps(1= +) 0s infinite normal none running blink; background-color: rgb(119, 238, 11= +9); } + +@keyframes blink {=20 + 50% { background-color: transparent; } +} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { position: absolute; left: 0px; right: 0px; top: -50px;= + bottom: -20px; overflow: hidden; } + +.CodeMirror-ruler { border-left: 1px solid rgb(200, 204, 208); top: 0px; bo= +ttom: 0px; position: absolute; } + +.cm-s-default .cm-header { color: blue; } + +.cm-s-default .cm-quote { color: rgb(0, 153, 0); } + +.cm-negative { color: rgb(221, 68, 68); } + +.cm-positive { color: rgb(34, 153, 34); } + +.cm-header, .cm-strong { font-weight: bold; } + +.cm-em { font-style: italic; } + +.cm-link { text-decoration: underline; } + +.cm-strikethrough { text-decoration: line-through; } + +.cm-s-default .cm-keyword { color: rgb(119, 0, 136); } + +.cm-s-default .cm-atom { color: rgb(34, 17, 153); } + +.cm-s-default .cm-number { color: rgb(17, 102, 68); } + +.cm-s-default .cm-def { color: rgb(0, 0, 255); } + +.cm-s-default .cm-variable-2 { color: rgb(0, 85, 170); } + +.cm-s-default .cm-variable-3 { color: rgb(0, 136, 85); } + +.cm-s-default .cm-comment { color: rgb(170, 85, 0); } + +.cm-s-default .cm-string { color: rgb(170, 17, 17); } + +.cm-s-default .cm-string-2 { color: rgb(255, 85, 0); } + +.cm-s-default .cm-meta { color: rgb(85, 85, 85); } + +.cm-s-default .cm-qualifier { color: rgb(85, 85, 85); } + +.cm-s-default .cm-builtin { color: rgb(51, 0, 170); } + +.cm-s-default .cm-bracket { color: rgb(153, 153, 119); } + +.cm-s-default .cm-tag { color: rgb(17, 119, 0); } + +.cm-s-default .cm-attribute { color: rgb(0, 0, 204); } + +.cm-s-default .cm-hr { color: rgb(153, 153, 153); } + +.cm-s-default .cm-link { color: rgb(0, 0, 204); } + +.cm-s-default .cm-error { color: rgb(255, 0, 0); } + +.cm-invalidchar { color: rgb(255, 0, 0); } + +.CodeMirror-composing { border-bottom: 2px solid; } + +div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); } + +div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34)= +; } + +.CodeMirror-matchingtag { background: rgba(255, 150, 0, 0.3); } + +.CodeMirror-activeline-background { background: rgb(232, 242, 255); } + +.CodeMirror { position: relative; overflow: hidden; background: rgb(255, 25= +5, 255); } + +.CodeMirror-scroll { margin-bottom: -30px; margin-right: -30px; padding-bot= +tom: 30px; height: 100%; outline: none; position: relative; overflow: scrol= +l !important; } + +.CodeMirror-sizer { position: relative; border-right: 30px solid transparen= +t; } + +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-fille= +r, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: non= +e; } + +.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden scroll; } + +.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: scroll hidden; } + +.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; } + +.CodeMirror-gutter-filler { left: 0px; bottom: 0px; } + +.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; min-height: = +100%; z-index: 3; padding-bottom: 30px; } + +.CodeMirror-gutter { white-space: normal; height: 100%; display: inline-blo= +ck; vertical-align: top; margin-bottom: -30px; } + +.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: no= +ne !important; border: none !important; } + +.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; = +z-index: 4; } + +.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } + +.CodeMirror-gutter-wrapper { user-select: none; } + +.CodeMirror-lines { cursor: text; min-height: 1px; } + +.CodeMirror pre { border-radius: 0px; border-width: 0px; background: transp= +arent; font-family: inherit; font-size: inherit; margin: 0px; white-space: = +pre; overflow-wrap: normal; line-height: inherit; color: inherit; z-index: = +2; position: relative; overflow: visible; -webkit-tap-highlight-color: tran= +sparent; font-variant-ligatures: none; } + +.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; wo= +rd-break: normal; } + +.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top= +: 0px; bottom: 0px; z-index: 0; } + +.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } + +.CodeMirror-code { outline: none; } + +.CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutt= +ers, .CodeMirror-linenumber { box-sizing: content-box; } + +.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflo= +w: hidden; visibility: hidden; } + +.CodeMirror-cursor { position: absolute; pointer-events: none; } + +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3= +; } + +div.CodeMirror-dragcursors { visibility: visible; } + +.CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } + +.CodeMirror-selected { background: rgb(214, 217, 220); } + +.CodeMirror-focused .CodeMirror-selected { background: rgb(215, 212, 240); = +} + +.CodeMirror-crosshair { cursor: crosshair; } + +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirro= +r-line > span > span::selection { background: rgb(215, 212, 240); } + +.cm-searching { background: rgba(255, 255, 0, 0.4); } + +.cm-force-border { padding-right: 0.1px; } + +@media print { + .CodeMirror div.CodeMirror-cursors { visibility: hidden; } +} + +.cm-tab-wrap-hack::after { content: ""; } + +span.CodeMirror-selectedtext { background: none; } + +.post-layout { display: grid; grid-template-columns: max-content 1fr; } + +.post-layout--left { grid-column: 1 / auto; width: auto; } + +.post-layout--left, .post-layout--left.votecell { width: auto; padding-righ= +t: 15px; } + +.post-layout--right { grid-column: 2 / auto; width: auto; min-width: 0px; } + +.post-layout--right .post-text, .post-layout--right .comments { width: 100%= +; } + +.post-layout--full { grid-column: 1 / 3; } + +.grid-layout { display: grid; gap: 8px; grid-template-columns: repeat(auto-= +fill, minmax(250px, 1fr)); } + +.wmd-container { width: 100%; box-sizing: border-box; } + +.wmd-button-bar { clear: both; background-color: transparent; margin: 10px = +0px 0px; padding: 0px; width: 100%; border-width: 1px 1px 0px; border-top-s= +tyle: solid; border-right-style: solid; border-left-style: solid; border-to= +p-color: rgb(200, 204, 208); border-right-color: rgb(200, 204, 208); border= +-left-color: rgb(200, 204, 208); border-image: initial; border-bottom-style= +: initial; border-bottom-color: initial; min-height: 44px; overflow: hidden= +; z-index: 2; position: relative; } + +textarea.wmd-input, textarea#wmd-input { padding: 10px; margin: -1px 0px 0p= +x; height: 200px; line-height: 1.3; width: 100%; font-family: Consolas, Men= +lo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitst= +ream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 14px= +; tab-size: 4; } + +.wmd-button-row { padding: 0px 4px 0px 8px; margin: 0px; display: flex; lis= +t-style: none; flex-wrap: wrap; justify-content: flex-end; height: 44px; bo= +rder-bottom: 1px solid rgb(200, 204, 208); } + +.wmd-spacer { height: 44px; flex: 1 0 4px; max-width: 27px; display: flex; = +flex-wrap: wrap; overflow: hidden; position: relative; left: 4px; } + +.wmd-spacer::before, .wmd-spacer::after { flex: 0 0 auto; justify-content: = +center; content: ""; position: relative; top: -44px; background: green; } + +.wmd-spacer::before { width: 9px; height: 44px; } + +.wmd-spacer::after { background: rgb(200, 204, 208); width: 1px; height: 43= +px; margin-top: 1px; } + +.wmd-spacer-max { max-width: none; } + +.wmd-button { max-width: 28px; height: 44px; flex: 10 0 23px; padding: 12px= + 0px 0px; text-align: center; cursor: pointer; } + +.wmd-button > span { background-repeat: no-repeat; background-position: 0px= + 0px; width: 20px; height: 20px; display: inline-block; } + +.wmd-prompt-background { background-color: rgb(12, 13, 14); z-index: 8950; = +} + +.wmd-prompt-dialog { padding: 15px; box-shadow: rgba(12, 13, 14, 0.3) 0px 2= +px 5px; background-color: rgb(255, 255, 255); border: 1px solid rgb(159, 16= +6, 173); } + +.wmd-button > span { background-image: url("../../Img/unified/wmd-buttons.s= +vg?v=3D8b134e4f9bb0"), none; background-size: initial !important; } + +@media not all, not all, only screen and (-webkit-min-device-pixel-ratio: 1= +.5), not all { + .wmd-button > span { background-image: url("../../Img/unified/wmd-buttons= +.svg?v=3D8b134e4f9bb0"), none; } +} + +.wmd-snippet-button span { background-image: url("../../Img/unified/wmd-but= +tons.svg?v=3D8b134e4f9bb0"), none !important; background-position: -260px 0= +px !important; } + +.wmd-snippet-button span:hover { background-position: -260px -40px !importa= +nt; } + +.wmd-inline-dialog { border-right: 1px solid rgb(200, 204, 208); border-bot= +tom: 1px solid rgb(200, 204, 208); border-left: 1px solid rgb(200, 204, 208= +); border-image: initial; border-top: none; position: absolute; width: 100%= +; z-index: 1; padding: 16px; background-color: rgb(255, 255, 255); box-shad= +ow: rgba(60, 65, 70, 0.1) 0px 2px 8px; } + +.wmd-button__active { border-left: 1px solid rgb(200, 204, 208); border-rig= +ht: 1px solid rgb(200, 204, 208); border-bottom: 1px solid rgb(255, 255, 25= +5); background-color: rgb(255, 255, 255); } + +.wmd-button__active > span { background-position-y: -40px !important; } + +.wmd-button-bar.has-active-button .wmd-button:not(.wmd-button__active) { cu= +rsor: not-allowed; pointer-events: none; opacity: 0.3; } + +.wmd-help-button.active-help { background-color: rgb(255, 247, 229); } + +.mdhelp { background-color: rgb(255, 247, 229); color: rgb(12, 13, 14); bor= +der-right: 1px solid rgb(200, 204, 208); border-left: 1px solid rgb(200, 20= +4, 208); } + +.mdhelp-tabs { background-color: rgb(255, 247, 229); list-style-type: none;= + margin: 0px; padding: 3px 0px 0px 3px; overflow: hidden; } + +.mdhelp-tabs li { display: inline-block; padding: 3px 6px 6px; margin: 0px = +2px; cursor: pointer; } + +.mdhelp-tabs li.selected { background-color: rgb(254, 250, 226); } + +.mdhelp-tab { padding: 10px; display: none; line-height: 1.2; } + +.mdhelp-tab .spaces { background-color: rgb(255, 255, 255); } + +.mdhelp-tab pre { background-color: rgb(243, 238, 213); border: none !impor= +tant; } + +.mdhelp-tab--content { display: flex; flex-wrap: wrap; justify-content: spa= +ce-between; margin-left: -2%; } + +.mdhelp-tab--content .col1, .mdhelp-tab--content .col2 { min-width: 150px; = +flex-grow: 1; } + +.mdhelp-tab--content > :not(ol) { margin-left: 2%; } + +.mdhelp-tab--content > p, .mdhelp-tab--content > pre { width: 100%; } + +.grippie { background-position: calc(50% + 34px) -364px; border-style: soli= +d; border-color: rgb(214, 217, 220); border-image: initial; border-width: 0= +px 1px 1px; cursor: s-resize; height: 9px; overflow: hidden; background-col= +or: rgb(239, 240, 241); } + +.wmd-button-bar.btr-sm ~ .grippie { border-bottom-left-radius: 3px; border-= +bottom-right-radius: 3px; } + +.user-page .grippie { margin-bottom: 3px; } + +.grippie { margin-top: -4px; } + +.wmd-preview { padding: 10px 0px; border-top: 1px dotted rgb(200, 204, 208)= +; border-bottom: 1px dotted rgb(200, 204, 208); clear: both; width: 100%; } + +.wmd-preview pre { overflow-wrap: normal; } + +.uql-nav .uql-nav--collapsed-item { display: none !important; } + +@media screen and (max-width: 1111px) and (min-width: 980.1px) { + html.html__responsive:not(.html__unpinned-leftnav) .uql-nav .uql-nav--exp= +anded-item { display: none !important; } + html.html__responsive:not(.html__unpinned-leftnav) .uql-nav .uql-nav--col= +lapsed-item { display: flex !important; } +} + +@media screen and (max-width: 947px) and (min-width: 816.1px) { + html.html__responsive.html__unpinned-leftnav .uql-nav .uql-nav--expanded-= +item { display: none !important; } + html.html__responsive.html__unpinned-leftnav .uql-nav .uql-nav--collapsed= +-item { display: flex !important; } +} + +@media screen and (max-width: 771px) and (min-width: 640.1px) { + html.html__responsive:not(.html__unpinned-leftnav) .uql-nav .uql-nav--exp= +anded-item { display: none !important; } + html.html__responsive:not(.html__unpinned-leftnav) .uql-nav .uql-nav--col= +lapsed-item { display: flex !important; } +} + +@media screen and (max-width: 607px) and (min-width: 640.1px) { + html.html__responsive.html__unpinned-leftnav .uql-nav .uql-nav--expanded-= +item { display: none !important; } + html.html__responsive.html__unpinned-leftnav .uql-nav .uql-nav--collapsed= +-item { display: flex !important; } +} + +@media screen and (max-width: 607px) { + html.html__responsive .uql-nav .uql-nav--expanded-item { display: none !i= +mportant; } + html.html__responsive .uql-nav .uql-nav--collapsed-item { display: flex != +important; } +} + +@media print { + .uql-nav .uql-nav--expanded-item { display: none !important; } + .uql-nav .uql-nav--collapsed-item { display: flex !important; } +} + +.uql-nav .uql-item { margin: 8px 0px; display: flex; } + +.uql-nav .uql-item.uql-item__separator { height: 1px; margin-left: -12px; m= +argin-right: -12px; background-color: rgb(228, 230, 232); } + +.topbar-dialog { color: rgb(47, 51, 55); font-size: 12px; background-color:= + rgb(255, 255, 255); box-shadow: rgba(12, 13, 14, 0.2) 0px 2px 2px; z-index= +: 999; position: absolute; text-align: left; border-left: 1px solid rgb(228= +, 230, 232); border-right: 1px solid rgb(228, 230, 232); border-bottom: 1px= + solid rgb(228, 230, 232); font-family: Arial, "Helvetica Neue", Helvetica,= + sans-serif !important; } + +.topbar-dialog .child-content-loading { text-align: center; padding-top: 10= +px; } + +.topbar-dialog a:not(.s-btn):not(.nav-links--link) { color: var(--blue-600)= +; text-decoration: none; } + +.topbar-dialog a:not(.s-btn):not(.nav-links--link):visited { color: var(--b= +lue-600); } + +.topbar-dialog a:not(.s-btn):not(.nav-links--link):hover { color: var(--blu= +e-500); text-decoration: none; } + +.topbar-dialog .button { color: rgb(255, 255, 255); } + +.topbar-dialog .related-links { color: rgb(132, 141, 149); white-space: now= +rap; } + +.topbar-dialog .related-links a, .topbar-dialog .related-links a:visited { = +margin-left: 10px; color: var(--blue-600); } + +.topbar-dialog.siteSwitcher-dialog { width: 375px; overflow: hidden scroll;= + min-height: 390px; max-height: 390px; } + +.topbar-dialog.siteSwitcher-dialog .call-to-login { padding: 7px 0px; text-= +align: center; line-height: 1.3; } + +.topbar-dialog.siteSwitcher-dialog .modal-content { padding: 0px; } + +.topbar-dialog.siteSwitcher-dialog .modal-content li:first-child { padding-= +top: 2px; } + +.topbar-dialog.siteSwitcher-dialog .modal-content li:last-child { padding-b= +ottom: 2px; } + +.topbar-dialog.siteSwitcher-dialog .modal-content li { padding-left: 7px; p= +adding-right: 7px; } + +.topbar-dialog.siteSwitcher-dialog .modal-content .pinned-site-candidate { = +height: 20px; padding-top: 5px; } + +.topbar-dialog.siteSwitcher-dialog .modal-content#your-communities-section = +{ max-height: none; } + +.topbar-dialog.siteSwitcher-dialog .other-sites { min-height: 345px; } + +.topbar-dialog.siteSwitcher-dialog .other-sites .other-site-link { display:= + inline-block; width: 100%; } + +.topbar-dialog.siteSwitcher-dialog .current-site-container { background-col= +or: rgb(246, 252, 255); border-left: 3px solid rgb(47, 150, 232); } + +.topbar-dialog.siteSwitcher-dialog .current-site .current-site-link { font-= +weight: bold; } + +.topbar-dialog.siteSwitcher-dialog .current-site li { border: none; } + +.topbar-dialog.siteSwitcher-dialog .current-site li:hover { background-colo= +r: rgb(232, 243, 250); } + +.topbar-dialog.siteSwitcher-dialog .site-desc { margin-bottom: 0px; margin-= +left: 25px; color: rgb(159, 166, 173); font-size: 12px; padding-right: 4px;= + } + +.topbar-dialog.siteSwitcher-dialog .L-shaped-icon-container { float: left; = +padding: 0px; margin: 8px 6px 0px 5px; } + +.topbar-dialog.siteSwitcher-dialog .L-shaped-icon { width: 10px; height: 10= +px; border-style: solid; border-color: rgb(185, 193, 197); border-image: in= +itial; border-width: 0px 0px 1px 1px; display: inline-block; } + +.topbar-dialog.inbox-dialog .modal-content .message-text, .topbar-dialog.mo= +dInbox-dialog .modal-content .message-text { width: 313px; } + +.topbar-dialog.inbox-dialog, .topbar-dialog.modInbox-dialog, .topbar-dialog= +.achievements-dialog { width: 375px; max-height: 505px; } + +.topbar-dialog.inbox-dialog .modal-content, .topbar-dialog.modInbox-dialog = +.modal-content, .topbar-dialog.achievements-dialog .modal-content { min-hei= +ght: 390px; max-height: 390px; overflow: hidden auto; } + +.topbar-dialog.inbox-dialog .modal-content .timestamp, .topbar-dialog.modIn= +box-dialog .modal-content .timestamp, .topbar-dialog.achievements-dialog .m= +odal-content .timestamp { color: rgb(145, 153, 161); } + +.topbar-dialog.inbox-dialog .inbox-item .item-content .item-header, .topbar= +-dialog.modInbox-dialog .inbox-item .item-content .item-header, .topbar-dia= +log.achievements-dialog .inbox-item .item-content .item-header { color: rgb= +(132, 141, 149); } + +.topbar-dialog.inbox-dialog .inbox-item .item-content .item-creation, .topb= +ar-dialog.modInbox-dialog .inbox-item .item-content .item-creation, .topbar= +-dialog.achievements-dialog .inbox-item .item-content .item-creation { floa= +t: right; } + +.topbar-dialog.inbox-dialog .inbox-item .item-content .item-location, .topb= +ar-dialog.modInbox-dialog .inbox-item .item-content .item-location, .topbar= +-dialog.achievements-dialog .inbox-item .item-content .item-location { marg= +in: 4px 0px; } + +.topbar-dialog.inbox-dialog .inbox-item .item-content .item-summary, .topba= +r-dialog.modInbox-dialog .inbox-item .item-content .item-summary, .topbar-d= +ialog.achievements-dialog .inbox-item .item-content .item-summary { color: = +rgb(47, 51, 55); } + +.topbar-dialog.inbox-dialog .inbox-item.inbox-se-link, .topbar-dialog.modIn= +box-dialog .inbox-item.inbox-se-link, .topbar-dialog.achievements-dialog .i= +nbox-item.inbox-se-link { text-align: center; } + +.topbar-dialog.inbox-dialog.anon, .topbar-dialog.achievements-dialog.anon {= + width: 275px; } + +.topbar-dialog.inbox-dialog.anon .modal-content, .topbar-dialog.achievement= +s-dialog.anon .modal-content { min-height: 200px; padding: 13px 20px; } + +.topbar-dialog.inbox-dialog.anon .huge-button-container, .topbar-dialog.ach= +ievements-dialog.anon .huge-button-container { text-align: center; } + +.topbar-dialog.inbox-dialog.anon .huge-button, .topbar-dialog.achievements-= +dialog.anon .huge-button { width: 35%; padding: 3% 0px; } + +.topbar-dialog.help-dialog { width: 215px; } + +.topbar-dialog.help-dialog .modal-content { max-height: none; } + +.topbar-dialog.help-dialog .item-summary { display: block; color: rgb(47, 5= +1, 55); margin-top: 4px; } + +.topbar-dialog.help-dialog a { display: block; } + +.topbar-dialog.review-dialog { width: 215px; } + +.topbar-dialog.review-dialog.review-dialog-mod { width: 265px; } + +.topbar-dialog.review-dialog .modal-content { max-height: none; } + +.topbar-dialog.review-dialog .modal-content li { display: block; } + +.topbar-dialog.review-dialog .modal-content li > a { display: flex; align-i= +tems: center; flex-flow: row nowrap; } + +.topbar-dialog.review-dialog .modal-content li > a:visited { color: rgb(0, = +119, 204); } + +.topbar-dialog.review-dialog .modal-content li > a .-title { flex-grow: 2; = +} + +.topbar-dialog.review-dialog .modal-content li > a .-indicator { font-size:= + 11px; display: inline-block; padding: 3px 5px; background: rgba(12, 13, 14= +, 0.05); color: rgb(132, 141, 149); border-radius: 2px; } + +.topbar-dialog.feature-notice-dialog { width: 300px; border: 1px solid rgb(= +187, 192, 196); border-radius: 4px; font-size: 13px; box-shadow: rgba(0, 0,= + 0, 0.15) 0px 1px 4px, rgba(0, 0, 0, 0.1) 0px 6px 30px; } + +.topbar-dialog.feature-notice-dialog::before { content: ""; left: 17px; top= +: -6px; background: rgb(255, 255, 255); position: absolute; border: 1px sol= +id rgb(187, 192, 196); width: 16px; height: 16px; z-index: -1; transform: r= +otate(45deg); } + +.topbar-dialog.feature-notice-dialog .dialog-content { padding: 16px 48px 1= +6px 16px; background: rgb(255, 255, 255); border-radius: 4px; } + +.topbar-dialog.feature-notice-dialog h4 { margin-bottom: 12px; } + +.topbar-dialog.feature-notice-dialog .icon-close { position: absolute; top:= + 16px; right: 16px; display: block; width: 18px; height: 18px; border-radiu= +s: 2px; background: rgb(12, 13, 14); color: rgb(255, 255, 255); opacity: 0.= +2; transition: opacity 0.2s ease-in-out 0s; } + +.topbar-dialog.feature-notice-dialog .icon-close:hover { opacity: 0.5; } + +.topbar-dialog.network-logo-dialog { width: 320px; border: 1px solid rgb(18= +7, 192, 196); border-radius: 2px; font-size: 13px; box-shadow: rgba(0, 0, 0= +, 0.15) 0px 1px 4px, rgba(0, 0, 0, 0.1) 0px 6px 30px; } + +.topbar-dialog.network-logo-dialog .dialog-content { padding: 16px; backgro= +und: rgb(255, 255, 255); border-radius: 4px; } + +.topbar-dialog.network-logo-dialog h4 { margin-bottom: 12px; } + +.topbar-dialog.network-logo-dialog a { font-weight: normal; } + +.topbar-dialog.network-logo-dialog .icon-close { position: absolute; top: 1= +6px; right: 16px; display: block; width: 18px; height: 18px; border-radius:= + 2px; color: rgb(209, 209, 209); transition: opacity 0.2s ease-in-out 0s; } + +.topbar-dialog.network-logo-dialog .icon-close:hover { opacity: 0.5; } + +.topbar-dialog ul { padding-left: 0px; margin-left: 0px; margin-bottom: 0px= +; } + +.topbar-dialog ul li { list-style: none; margin-left: 0px; line-height: 1.3= +; } + +.topbar-dialog .header { background-color: rgb(239, 240, 241); width: 100%;= + box-sizing: border-box; position: relative; clear: both; display: flex; ju= +stify-content: space-between; align-items: center; padding: 8px 10px; } + +.topbar-dialog .header h3 { color: rgb(106, 115, 124); font-weight: bold; t= +ext-transform: uppercase; font-size: 11px; margin-bottom: 0px; display: inl= +ine-block; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif !imp= +ortant; } + +.topbar-dialog .header h3 a { font-size: inherit; color: inherit; font-fami= +ly: Arial, "Helvetica Neue", Helvetica, sans-serif !important; } + +.topbar-dialog .header .-right { color: rgb(159, 166, 173); } + +.topbar-dialog .header .-right a { color: rgb(0, 119, 204); } + +.topbar-dialog #edit-pinned-sites, .topbar-dialog #cancel-pinned-sites { fl= +oat: right; } + +.topbar-dialog .modal-content { width: 100%; box-sizing: border-box; paddin= +g: 10px 7px; max-height: 300px; margin: 1px 0px; position: relative; } + +.topbar-dialog .modal-content li { border-bottom: 1px solid rgb(239, 240, 2= +41); margin-bottom: 0px; } + +.topbar-dialog .modal-content li .rep-score { float: right; color: rgb(132,= + 141, 149); font-size: 12px; } + +.topbar-dialog .modal-content li:hover { background-color: rgb(247, 247, 24= +9); } + +.topbar-dialog .modal-content li > * { padding: 7px 3px; } + +.topbar-dialog .modal-content li > a > * { white-space: normal; } + +.topbar-dialog .modal-content li > a.pinned-site-link { display: inline-blo= +ck; } + +.topbar-dialog .modal-content li:last-child { border-bottom: none; } + +.topbar-dialog .modal-content .message-text { display: inline-block; } + +.topbar-dialog .modal-content .message-text h4 { margin-bottom: 0px; font-s= +ize: 100%; font-weight: normal; color: inherit; font-family: Arial, "Helvet= +ica Neue", Helvetica, sans-serif !important; } + +.topbar-dialog .unread-item { background-color: rgb(225, 236, 244); padding= +-bottom: 8px; padding-top: 8px; } + +.topbar-dialog .unread-item .unread-bold { font-weight: bold; color: rgb(0,= + 100, 189); } + +.topbar-dialog .unread-item:hover { background-color: rgb(247, 247, 249); } + +.topbar-dialog .site-icon { width: 16px; height: 16px; vertical-align: top;= + flex: 0 0 auto; } + +.topbar-dialog .site-title, .topbar-dialog .site-title:visited { color: rgb= +(47, 51, 55); } + +.topbar-dialog .site-filter-container { width: 100%; padding: 0px 10px; box= +-sizing: border-box; } + +.topbar-dialog .site-filter-input { font-size: 13px; width: 100%; height: 2= +6px; box-sizing: border-box; padding-top: 3px; padding-right: 3px; padding-= +bottom: 3px; background-image: url("../../img/share-sprite-new.svg?v=3D0e11= +bfd41fbc"), none; background-repeat: no-repeat; background-color: rgb(255, = +255, 255); color: rgb(159, 166, 173); border: 1px solid rgb(200, 204, 208);= + box-shadow: rgb(239, 240, 241) 0px 1px 2px inset, rgb(255, 255, 255) 0px 0= +px 0px; transition: all 0.15s ease-in-out 0s; font-family: Arial, "Helvetic= +a Neue", Helvetica, sans-serif !important; background-position: -267px -90p= +x !important; padding-left: 24px !important; } + +.topbar-dialog .site-filter-input:hover { border-color: rgba(0, 149, 255, 0= +.5); box-shadow: rgb(228, 230, 232) 0px 1px 2px inset, rgba(0, 119, 204, 0.= +1) 0px 0px 2px; } + +.topbar-dialog .site-filter-input:focus { outline: 0px; color: rgb(60, 65, = +70); border-color: rgb(0, 149, 255); box-shadow: rgb(250, 250, 251) 0px 2px= + 2px inset, rgba(0, 119, 204, 0.5) 0px 0px 5px; } + +.topbar-dialog .pinned-site-editor-container { width: 100%; } + +.topbar-dialog .pinned-site-editor-container input[type=3D"submit"] { paddi= +ng: 0.3em 0.6em; box-shadow: rgba(12, 13, 14, 0.3) 0px 2px 1px, rgba(255, 2= +55, 255, 0.4) 0px 1px 0px inset; background-image: none; background-color: = +rgb(47, 51, 55); color: rgb(255, 255, 255); border-radius: 3px; text-decora= +tion: none; font-weight: normal; text-shadow: none; margin: 0px; border: 1p= +x solid rgb(12, 13, 14) !important; font-family: Arial, "Helvetica Neue", H= +elvetica, sans-serif !important; font-size: 100% !important; } + +.topbar-dialog .pinned-site-editor-container .site-filter-input { width: 27= +5px; margin-left: 10px; color: rgb(12, 13, 14); } + +.topbar-dialog .pinned-site-editor-container #save-pinned-sites-btn { float= +: right; margin-right: 7px; margin-bottom: 5px; } + +.topbar-dialog .pinned-site-editor-container #reset-pinned-sites { float: r= +ight; margin-right: 10px; line-height: 25px; } + +.topbar-dialog .pinned-site-editor-container .found-sites { position: absol= +ute; left: 10px; width: 275px; background-color: rgb(255, 255, 255); z-inde= +x: 1200; max-height: 200px; overflow-y: auto; border: 1px solid rgb(228, 23= +0, 232); } + +.topbar-dialog .pinned-site-editor-container .found-sites li:hover { font-w= +eight: bold; cursor: pointer; } + +.topbar-dialog .pinned-site-editor-container .found-sites li.already-pinned= +-site { font-weight: normal; background-color: rgb(246, 252, 255); cursor: = +default; } + +.topbar-dialog .pinned-site-editor-container .remove-pinned-site-link { flo= +at: right; } + +.topbar-dialog .pinned-site-editor-container .remove-pinned-site-link a { p= +adding: 0px 5px 2px; font-weight: bold; color: rgb(145, 153, 161); backgrou= +nd-color: rgb(239, 240, 241); line-height: 1; border-radius: 15px; font-fam= +ily: Arial, "Helvetica Neue", Helvetica, sans-serif !important; } + +.topbar-dialog .pinned-site-editor-container .remove-pinned-site-link a:hov= +er { color: rgb(255, 255, 255); background-color: rgb(132, 141, 149); } + +.topbar-dialog .pinned-site-editor-container .sortable li { cursor: move; } + +.topbar-dialog .pinned-site-editor-container .siteSwitcher-drag-handle-cont= +ainer { float: left; padding: 0px; margin: 3px 5px 0px 0px; } + +.topbar-dialog .pinned-site-editor-container .siteSwitcher-drag-handle-cont= +ainer .siteSwitcher-drag-handle { width: 1px; height: 20px; display: inline= +-block; border: 1px dotted rgb(145, 153, 161); } + +.achievements-dialog { width: 450px; max-height: 505px; font-size: 12px; } + +.achievements-dialog .utc-clock { color: rgb(145, 153, 161); font-size: 11p= +x; font-weight: normal; display: inline-block; padding-left: 5px; font-vari= +ant: small-caps; } + +.achievements-dialog .date-group .date-group-toggle-row { cursor: pointer; = +} + +.achievements-dialog .date-group .date-group-toggle { display: inline-block= +; width: 10px; height: 10px; background-position: 2px -94px; } + +.achievements-dialog .date-group .date-group-toggle.toggle-hidden { backgro= +und-position: -17px -94px; } + +.achievements-dialog ul { margin-bottom: 10px; } + +.achievements-dialog .rep-change { vertical-align: top; text-align: right; = +font-size: 11px; display: inline-block; white-space: nowrap; } + +.achievements-dialog .rep-up { color: rgb(51, 160, 48); } + +.achievements-dialog .rep-down { color: rgb(233, 113, 113); } + +.achievements-dialog .rep-site-container { margin: 10px 0px; width: 100%; c= +ursor: default; } + +.achievements-dialog .rep-site-container .rep-site { width: 30px; display: = +inline-block; text-align: center; } + +.achievements-dialog .rep-site-container .rep-site img { display: block; ma= +rgin: 0px auto 4px; } + +.achievements-dialog .date-header, .achievements-dialog .single-rep-site-co= +ntainer { font-weight: bold; margin: 3px 0px 4px; display: inline-block; fo= +nt-size: 12px; } + +.achievements-dialog .date-header .rep-change, .achievements-dialog .single= +-rep-site-container .rep-change { font-size: 12px; } + +.achievements-dialog .date-header { color: rgb(132, 141, 149); } + +.achievements-dialog .single-rep-site-container { margin-left: 2px; } + +.achievements-dialog .message-text { margin-left: 2px; width: 278px; } + +.achievements-dialog .achievements-badge { text-align: right; } + +.achievements-dialog .achievements-privilege-category .icon { vertical-alig= +n: top; margin: 0px; width: 18px; } + +.achievements-dialog .modal-content.short { min-height: 297px; max-height: = +297px; } + +.achievements-dialog .modal-content.tiny { min-height: 197px; max-height: 1= +97px; } + +.self-actions { width: 200px; max-height: 505px; left: 535px; } + +.top-bar ~ .container, .top-bar ~ #announcement-banner { margin-top: 50px; = +} + +.top-bar ~ #announcement-banner ~ .container { margin-top: 0px; } + +.top-bar { position: absolute; top: 0px; left: 0px; width: 100%; z-index: 5= +050; background-color: rgb(250, 250, 251); transition: box-shadow 0.25s cub= +ic-bezier(0.165, 0.84, 0.44, 1) 0s; height: 50px; box-sizing: border-box; f= +ont-family: Arial, "Helvetica Neue", Helvetica, sans-serif; border-top: 3px= + solid rgb(244, 128, 36); } + +.top-bar input[type=3D"text"] { font-family: Arial, "Helvetica Neue", Helve= +tica, sans-serif; } + +.top-bar._fixed { position: fixed; min-width: auto; box-shadow: rgba(12, 13= +, 14, 0.1) 0px 1px 0px, rgba(60, 65, 70, 0.1) 0px 1px 6px; } + +.top-bar .-container { max-width: 1264px; width: 100%; height: 100%; margin= +: 0px auto; position: relative; box-sizing: content-box; display: flex; fle= +x-flow: row nowrap; align-items: center; } + +.top-bar .-main { height: 100%; flex-shrink: 0; display: flex; flex-flow: r= +ow nowrap; align-items: center; } + +.top-bar .-logo { box-sizing: content-box; padding: 0px 12px; height: 100%;= + flex: 1 0 auto; display: flex; align-items: center; background-color: tran= +sparent; transition: background-color 0.25s cubic-bezier(0.165, 0.84, 0.44,= + 1) 0s; } + +.top-bar .-logo .-img { display: inline-block; text-indent: -9999em; height= +: 30px; width: 150px; margin-top: -4px; margin-left: 0px; background-positi= +on: 0px -500px; } + +.top-bar .-logo .-img._glyph { height: 30px; width: 25px; margin-top: 0px; = +margin-left: 0px; } + +.top-bar a.-logo:hover { background-color: rgba(239, 240, 241, 0.75); } + +.top-bar a.-logo.topbar-icon-on { background-color: rgba(239, 240, 241, 0.7= +5); } + +.top-bar .-feature-notice { text-decoration: none; height: 100%; display: i= +nline-flex; align-items: center; margin: 0px 4px 0px 0px; } + +.top-bar .-feature-notice span { border-radius: 2px; background-color: rgb(= +132, 141, 149); color: rgb(255, 255, 255); font-weight: bold; font-size: 11= +px; text-transform: uppercase; padding: 4px 8px; margin: 0px 8px; } + +.top-bar .-feature-notice:hover, .top-bar .-feature-notice.topbar-icon-on {= + background-color: rgba(239, 240, 241, 0.75); } + +.top-bar .-feature-notice:hover span, .top-bar .-feature-notice.topbar-icon= +-on span { background-color: rgb(60, 65, 70); } + +.top-bar .-feature-notice.unread-feature-notice span { background-color: rg= +b(244, 128, 36) !important; } + +.top-bar .left-sidebar-toggle:hover { color: rgb(60, 65, 70); background-co= +lor: rgb(239, 240, 241); } + +.top-bar .left-sidebar-toggle.topbar-icon-on { color: rgb(60, 65, 70); back= +ground-color: rgb(239, 240, 241); } + +.top-bar * { box-sizing: border-box; } + +.top-bar .navigation { font-size: 14px; height: 100%; max-width: 500px; opa= +city: 1; transform-origin: left center; transition: opacity 0.3s ease-in 0s= +, max-width 0.3s ease-in 0s; flex: 1 0 auto; } + +.top-bar .navigation .-list { list-style: none; margin: 0px; padding: 0px; = +display: flex; flex-flow: row nowrap; height: 100%; } + +.top-bar .navigation .-item { display: inline-flex; line-height: 1; } + +.top-bar .navigation .-item._current .-link { color: rgb(12, 13, 14); font-= +weight: bold; } + +.top-bar .navigation .-link { display: inline-flex; align-items: center; pa= +dding: 0px 12px; color: rgb(83, 90, 96); text-decoration: none; white-space= +: nowrap; position: relative; } + +.top-bar .navigation .-link:hover, .top-bar .navigation .-link:focus { back= +ground-color: rgb(239, 240, 241); color: rgb(36, 39, 41); text-decoration: = +none; outline: none; } + +.top-bar .navigation .new-badge { background-color: rgb(244, 128, 36); colo= +r: rgb(255, 255, 255); font-size: 11px; padding: 2px 4px; text-transform: u= +ppercase; border-radius: 0px 0px 2px 2px; line-height: 1; position: absolut= +e; right: 12px; top: 0px; } + +.top-bar .navigation .beta-badge { color: rgb(187, 192, 196); font-size: 10= +px; padding: 2px 0px; text-transform: uppercase; border-radius: 0px 0px 2px= + 2px; line-height: 1; position: absolute; right: 12px; top: 35px; } + +.top-bar .-marketing-link { display: inline-block; padding: 6px 16px; borde= +r-radius: 1000px; color: rgb(83, 90, 96); white-space: nowrap; } + +@media screen and (max-width: 640px) { + html.html__responsive .top-bar .-marketing-link { padding-left: 8px; padd= +ing-right: 8px; } +} + +@media print { + .top-bar .-marketing-link { padding-left: 8px; padding-right: 8px; } +} + +.top-bar .-marketing-link:hover, .top-bar .-marketing-link:focus { backgrou= +nd-color: rgb(228, 230, 232); color: rgb(12, 13, 14); text-decoration: none= +; outline: none; } + +.top-bar .-marketing-link.is-selected { background-color: rgb(244, 128, 36)= +; color: rgb(255, 255, 255); } + +.top-bar .-marketing-link.is-selected:hover, .top-bar .-marketing-link.is-s= +elected:focus { background-color: rgb(218, 103, 11); color: rgb(255, 255, 2= +55); text-decoration: none; outline: none; } + +.top-bar .-secondary .-ctas { padding-left: 4px; padding-right: 8px; white-= +space: nowrap; } + +.top-bar .-secondary .-item { position: relative; flex-shrink: 0; display: = +inline-flex; padding-bottom: 0px; height: 100%; } + +.top-bar .-secondary .-item .-link:hover { color: rgb(60, 65, 70); backgrou= +nd-color: rgb(239, 240, 241); text-decoration: none; } + +.top-bar .-secondary .-item .-link:hover .indicator-badge { border-color: r= +gb(239, 240, 241); top: 4px; } + +.top-bar .-secondary .-item._active, .top-bar .-secondary .-item .-link.top= +bar-icon-on, .top-bar .-secondary .-item .-link.topbar-icon-on:hover { colo= +r: rgb(60, 65, 70); background-color: rgb(239, 240, 241); text-decoration: = +none; } + +.top-bar .-secondary .-item._active .indicator-badge, .top-bar .-secondary = +.-item .-link.topbar-icon-on .indicator-badge, .top-bar .-secondary .-item = +.-link.topbar-icon-on:hover .indicator-badge { border-color: rgb(239, 240, = +241); top: 4px; } + +.top-bar .-secondary .-item .-link.topbar-icon-on { background-color: rgb(2= +39, 240, 241); } + +.top-bar .-secondary .-item .-link.topbar-icon-on .indicator-badge { border= +-color: rgb(239, 240, 241); } + +.top-bar .-secondary .-item._has-divider { border-left: 1px solid rgba(132,= + 141, 149, 0.2); } + +.top-bar .-secondary .-item.searchbar-trigger { display: none; } + +@media screen and (max-width: 816px) { + .top-bar .-secondary .-item.searchbar-trigger { display: inline-flex; } +} + +.top-bar .-secondary .-link { color: rgb(132, 141, 149); display: inline-fl= +ex; align-items: center; padding: 0px 10px; text-decoration: none; white-sp= +ace: nowrap; position: relative; } + +.top-bar .-secondary .-link .svg-icon { vertical-align: text-top; } + +.top-bar .-secondary .-link .indicator-badge:not(._regular) { position: abs= +olute; top: 8px; right: 2px; transition: top 0.15s cubic-bezier(0.165, 0.84= +, 0.44, 1) 0s; } + +.top-bar .-secondary .-link._highlighted-positive, .top-bar .-secondary .-l= +ink._highlighted-positive:hover, .top-bar .-secondary .-link._highlighted-p= +ositive.topbar-icon-on { color: rgb(94, 186, 125); } + +.top-bar .-secondary .-link._highlighted-mod, .top-bar .-secondary .-link._= +highlighted-mod:hover, .top-bar .-secondary .-link._highlighted-mod.topbar-= +icon-on { color: rgb(0, 119, 204); } + +.top-bar .-secondary .-link._highlighted-reviews, .top-bar .-secondary .-li= +nk._highlighted-reviews:hover, .top-bar .-secondary .-link._highlighted-rev= +iews.topbar-icon-on { color: rgb(218, 103, 11); } + +.top-bar .-secondary .-link._highlighted-announcement, .top-bar .-secondary= + .-link._highlighted-announcement:hover, .top-bar .-secondary .-link._highl= +ighted-announcement.topbar-icon-on { color: rgb(244, 128, 36); } + +.top-bar .-secondary .-link._text-only { padding: 0px 4px; } + +.top-bar .-secondary .-link._danger-indicator::after { content: ""; width: = +10px; height: 10px; border-radius: 50%; position: absolute; right: 2px; top= +: 10px; box-sizing: content-box; background: rgb(209, 56, 61); z-index: 2; = +border: 2px solid rgb(250, 250, 251); transition: top 0.15s cubic-bezier(0.= +165, 0.84, 0.44, 1) 0s; } + +.top-bar .-secondary .-link._danger-indicator:hover::after { top: 6px; bord= +er-color: rgb(239, 240, 241); } + +.top-bar .-secondary .tour-bubble { top: 55px; right: -19px; } + +.top-bar .indicator-badge { background-color: rgb(0, 119, 204); color: rgb(= +255, 255, 255); font-size: 10px; line-height: 1; padding: 2px 3px; border-r= +adius: 4px; background-clip: padding-box; display: inline-block; min-width:= + 18px; text-align: center; border: 2px solid rgb(250, 250, 251); } + +.top-bar .indicator-badge._regular { font-size: 12px; padding: 4px; } + +.top-bar .indicator-badge._positive { background-color: rgb(94, 186, 125); = +} + +.top-bar .indicator-badge._important { background-color: rgb(209, 56, 61); = +} + +.top-bar .indicator-badge._reviews { background-color: rgb(218, 103, 11); } + +.top-bar .indicator-badge._mod { background-color: rgb(0, 119, 204); } + +.top-bar .indicator-badge._announcement { background-color: rgb(244, 128, 3= +6); } + +.top-bar .my-profile { padding: 0px 12px; height: 100%; font-size: 12px; co= +lor: rgb(60, 65, 70); white-space: nowrap; display: flex; flex-flow: row no= +wrap; align-items: center; } + +.top-bar .my-profile:hover { background-color: rgb(239, 240, 241); color: r= +gb(60, 65, 70); text-decoration: none; } + +.top-bar .my-profile .gravatar-wrapper-24 .-avatar { border-radius: 2px; ve= +rtical-align: middle; } + +.top-bar .my-profile .-rep { padding-left: 8px; font-weight: bold; color: r= +gb(83, 90, 96); } + +.top-bar .my-profile .-badges { color: rgb(239, 240, 241); } + +.top-bar .my-profile .-badges > span { padding-left: 6px; } + +.top-bar .my-profile .-badges .badge1, .top-bar .my-profile .-badges .badge= +2, .top-bar .my-profile .-badges .badge3 { text-indent: -9999em; } + +.top-bar .my-profile .-badges .badgecount { font-weight: normal; } + +.top-bar .my-profile .-badges .badge1 + .badgecount { color: rgb(205, 164, = +0); } + +.top-bar .my-profile .-badges .badge2 + .badgecount { color: rgb(140, 146, = +152); } + +.top-bar .my-profile .-badges .badge3 + .badgecount { color: rgb(195, 139, = +95); } + +.top-bar .searchbar { transform: translate3d(0px, 0px, 0px); flex-shrink: 1= +0000; } + +.top-bar .searchbar .s-input { border-color: rgb(187, 192, 196); background= +-color: rgb(255, 255, 255); box-shadow: none; color: rgb(60, 65, 70); } + +.top-bar .searchbar .s-input:focus { border-color: rgb(108, 187, 247); box-= +shadow: rgba(0, 149, 255, 0.15) 0px 0px 0px 4px; } + +.top-bar .searchbar .s-input::-webkit-input-placeholder { color: rgb(187, 1= +92, 196); font-style: normal; } + +.top-bar .searchbar .s-input::placeholder { color: rgb(187, 192, 196); font= +-style: normal; } + +.top-bar .searchbar .s-select::before, .top-bar .searchbar .s-select::after= + { border-color: rgb(60, 65, 70) transparent; z-index: 30; } + +.top-bar .searchbar .s-select > select { border-color: rgb(187, 192, 196); = +background-color: rgb(239, 240, 241); color: rgb(60, 65, 70); } + +.top-bar .searchbar .s-select > select:focus { border-color: rgb(108, 187, = +247); box-shadow: rgba(0, 149, 255, 0.15) 0px 0px 0px 4px; z-index: 25; } + +@media screen and (max-width: 816px) { + .top-bar .searchbar { display: none; position: absolute; left: 0px; top: = +100%; right: 0px; max-width: 100%; padding: 8px 12px; background: rgb(239, = +240, 241); } + .top-bar .searchbar.searchbar__open { display: block; max-width: none; } + .top-bar .searchbar .s-input { border-color: rgb(187, 192, 196); backgrou= +nd-color: rgb(255, 255, 255); color: rgb(60, 65, 70); } + .top-bar .searchbar .s-input:focus { border-color: rgb(108, 187, 247); bo= +x-shadow: rgba(0, 149, 255, 0.15) 0px 0px 0px 4px; } + .top-bar .searchbar .s-input::-webkit-input-placeholder { color: rgb(187,= + 192, 196); font-style: normal; } + .top-bar .searchbar .s-input::placeholder { color: rgb(187, 192, 196); fo= +nt-style: normal; } + .top-bar .searchbar .s-select::before, .top-bar .searchbar .s-select::aft= +er { border-color: rgb(60, 65, 70) transparent; } + .top-bar .searchbar .s-select > select { border-color: rgb(187, 192, 196)= +; background-color: rgb(239, 240, 241); color: rgb(60, 65, 70); } + .top-bar .searchbar .s-select > select:focus { border-color: rgb(108, 187= +, 247); box-shadow: rgba(0, 149, 255, 0.15) 0px 0px 0px 4px; } +} + +.top-bar-for-debug .top-bar { position: absolute; top: auto; } + +.top-bar-for-debug.topbar-for-debug { margin-top: 85px; } + +.top-bar-for-debug .cache-info { top: 145px; } + +@media screen and (max-width: 1090px) { + .top-bar .-container { margin: 0px; max-width: calc(100vw - 24px); } + .top-bar .navigation .-link { padding: 0px 8px; } + .top-bar .navigation .beta-badge { right: 8px; } + .top-bar .my-profile { padding-left: 5px; padding-right: 5px; } +} + +@media screen and (max-width: 980px) { + .top-bar .navigation { font-size: 12px; } + .top-bar .my-profile .-badges, .top-bar .my-profile .-rep { display: none= +; } +} + +.top-bar { min-width: auto; } + +.top-bar .-container { max-width: 1264px; box-sizing: border-box; } + +.top-bar .-logo { padding: 0px 8px; } + +.top-bar .-logo .-img._glyph { width: 150px; height: 30px; margin-top: -4px= +; } + +@media screen and (max-width: 640px) { + html.html__responsive .top-bar .-logo .-img._glyph { width: 25px; margin-= +top: 0px; } +} + +@media print { + .top-bar .-logo .-img._glyph { width: 25px; margin-top: 0px; } +} + +@media screen and (max-width: 640px) { + html.html__responsive .top-bar .-logo.network-logo { width: 25px; overflo= +w: hidden; display: block; } + html.html__responsive .top-bar .-logo.network-logo .svg-icon { transform:= + scale(2); transform-origin: 0px -10px; } +} + +@media print { + .top-bar .-logo.network-logo { width: 25px; overflow: hidden; display: bl= +ock; } + .top-bar .-logo.network-logo .svg-icon { transform: scale(2); transform-o= +rigin: 0px -10px; } +} + +.top-bar .topbar-dialog.leftnav-dialog { width: auto; right: auto; } + +.top-bar .topbar-dialog.leftnav-dialog .left-sidebar:not(:empty) { width: 2= +40px; } + +@media screen and (max-width: 640px) { + html.html__responsive .topbar-dialog, html.html__responsive .topbar-dialo= +g.review-dialog.review-dialog-mod { width: 100%; left: 0px; right: 0px; } + html.html__responsive .topbar-dialog.feature-notice-dialog::before { left= +: 103px; } +} + +@media print { + .topbar-dialog, .topbar-dialog.review-dialog.review-dialog-mod { width: 1= +00%; left: 0px; right: 0px; } + .topbar-dialog.feature-notice-dialog::before { left: 103px; } +} + +.question-list-layout { margin: 0px; right: -332px; top: 38px; } + +.top-bar._fixed ~ .container.topic-page .workbench.sticky, .top-bar._fixed = +~ .container .sticky:not(.sticky-bottom).job-requirements-form { top: 50px;= + } + +.top-bar._fixed ~ .container .sticky-menu-wrapper._sticky { top: 50px; } + +.jobdetail #hed .sticky-detail-header-block { z-index: 5051 !important; } + +.animated-flash-message { top: 65px !important; } + +.danger-dialog .-item a { padding-left: 32px; position: relative; } + +.danger-dialog .-item a::before { content: ""; width: 10px; height: 10px; p= +osition: absolute; left: 10px; top: 50%; margin-top: -5px; border-radius: 5= +0%; background: transparent; } + +.danger-dialog .-item.danger-urgent .-title { font-weight: bold; } + +.danger-dialog .-item.danger-urgent a::before { background: rgb(209, 56, 61= +); box-shadow: rgba(209, 56, 61, 0.2) 0px 0px 5px; } + +.danger-dialog .-item.danger-active a::before { background: rgb(214, 217, 2= +20); } + +.site-footer, .site-footer *, .site-footer ::before, .site-footer ::after {= + box-sizing: border-box; } + +.site-footer .-list { margin: 0px; list-style: none; } + +.site-footer .-item { padding-bottom: 0px; } + +.site-footer .-link { color: rgb(132, 141, 149); padding: 4px 0px; line-hei= +ght: 1.30769; display: inline-block; text-decoration: none; } + +.site-footer .-link:hover { color: rgb(187, 192, 196); } + +.site-footer .-link._active { font-weight: bold; color: rgb(244, 128, 36); = +} + +.site-footer .-link._expandable { position: relative; padding-right: 18px; = +} + +.site-footer .-link._expandable::before, .site-footer .-link._expandable::a= +fter { content: ""; position: absolute; overflow: hidden; pointer-events: n= +one; } + +.site-footer .-link._expandable::before { right: 0px; top: 50%; margin-top:= + -6px; max-width: 12px; width: 12px; height: 12px; background-color: rgba(1= +32, 141, 149, 0.35); opacity: 0.5; border-radius: 3px; } + +.site-footer .-link._expandable::after { right: 5px; top: 50%; margin-top: = +-2px; z-index: 2; width: 4px; height: 4px; max-width: 4px; transform: rotat= +e(45deg); border-top: 1px solid rgba(132, 141, 149, 0.8); border-right: 1px= + solid rgba(132, 141, 149, 0.8); border-bottom-color: rgba(132, 141, 149, 0= +.8); border-left-color: rgba(132, 141, 149, 0.8); border-bottom-right-radiu= +s: 1px; } + +.site-footer .-link._expandable:hover::before { opacity: 1; background-colo= +r: rgba(132, 141, 149, 0.25); } + +.site-footer .-link._expandable:hover::after { border-color: rgb(132, 141, = +149); } + +.site-footer .-title { text-transform: uppercase; font-weight: bold; margin= +-bottom: 12px; color: rgb(187, 192, 196); line-height: 1.30769; max-width: = +230px; } + +.site-footer .-title a { color: rgb(187, 192, 196); text-decoration: none; = +} + +.site-footer .-title a:hover { color: rgb(242, 243, 243); } + +.site-footer--back { display: none; align-items: center; justify-content: c= +enter; height: 32px; width: 32px; border-radius: 2px; margin-top: -4px; mar= +gin-right: 12px; background-color: rgba(132, 141, 149, 0.25); color: rgb(13= +2, 141, 149); opacity: 0.85; } + +.site-footer--back:hover { opacity: 1; color: rgb(187, 192, 196); } + +.site-footer { background-color: rgb(36, 39, 41); background-image: none; b= +ackground-position: left top; background-repeat: no-repeat; border-top: 0px= +; background-size: auto; color: rgb(106, 115, 124); padding-top: 0px; paddi= +ng-bottom: 0px; } + +.site-footer--container, .site-footer--extra { max-width: 1264px; width: 10= +0%; margin: 0px auto; padding: 32px 12px 12px; display: flex; flex-flow: ro= +w wrap; } + +@media screen and (max-width: 640px) { + .site-footer--container, .site-footer--extra { padding: 24px 12px; } +} + +.site-footer--extra { padding: 32px 12px; border-top: 1px solid rgba(187, 1= +92, 196, 0.15); } + +.site-footer--logo { flex: 0 0 64px; margin: -12px 0px 32px; } + +@media screen and (max-width: 640px) { + .site-footer--logo { display: none; } +} + +.site-footer--nav { display: flex; flex: 2 1 auto; flex-wrap: wrap; } + +.site-footer--col { display: none; padding: 0px 12px 24px 0px; flex: 1 0 au= +to; } + +.site-footer--col__visible { display: block; } + +.site-footer--categories { display: none; flex-grow: 1; } + +@supports (display: grid) { + .site-footer--categories { grid-template-columns: repeat(auto-fit, minmax= +(130px, 1fr)); } +} + +.site-footer--categories-nav { padding-right: 32px; position: relative; fle= +x: 0 1 230px; } + +@media screen and (max-width: 640px) { + .site-footer--categories-nav { padding-right: 12px; } +} + +.site-footer--categories-nav::after { display: none; content: ""; border-ri= +ght: 1px solid rgba(187, 192, 196, 0.15); position: absolute; top: -32px; b= +ottom: -12px; right: 16px; } + +@media screen and (max-width: 640px) { + .site-footer--category { padding-left: 44px; } +} + +.site-footer--copyright { flex: 1 1 150px; display: flex; flex-direction: c= +olumn; } + +.site-footer--copyright ul { display: flex; list-style: none; margin: 0px; = +padding: 0px; } + +.site-footer--copyright ul li + li { margin-left: 12px; } + +.site-footer--copyright p { margin-top: auto; margin-bottom: 24px; } + +.site-footer--copyright p a, .site-footer--copyright p a:visited { line-hei= +ght: inherit; color: rgb(132, 141, 149); padding: 0px; } + +.site-footer__open .site-footer--logo, .site-footer__open .site-footer--cop= +yright { display: none; } + +.site-footer__open .site-footer--back { display: inline-flex; } + +.site-footer__open .site-footer--categories { display: flex; } + +@supports (display: grid) { + .site-footer__open .site-footer--categories { display: grid; } +} + +.site-footer__open .site-footer--categories-nav { display: flex; } + +.site-footer__open .site-footer--categories-nav::after { display: inline-bl= +ock; } + +@media screen and (max-width: 640px) { + .site-footer__open .site-footer--categories-nav::after { display: none; } +} + +#footer-flair { float: right; margin: -40px 0px 0px; padding: 0px; text-ali= +gn: right; } + +#footer-flair a { display: inline-block; vertical-align: top; text-indent: = +-999999em; } + +.message.error, .message.success, .message.regular, .message.incomplete, .m= +essage.gray { display: inline-block; padding: 12px; margin: 10px 0px; borde= +r-radius: 3px; } + +.message.error.text-only, .message.success.text-only, .message.regular.text= +-only, .message.incomplete.text-only, .message.gray.text-only { background:= + none; border: 0px; padding: 0px; margin: 0px 0px 10px; color: rgb(106, 115= +, 124); } + +.message.error.text-only i[class^=3D"icon-"], .message.success.text-only i[= +class^=3D"icon-"], .message.regular.text-only i[class^=3D"icon-"], .message= +.incomplete.text-only i[class^=3D"icon-"], .message.gray.text-only i[class^= +=3D"icon-"], .message.error.text-only span[class^=3D"icon-"], .message.succ= +ess.text-only span[class^=3D"icon-"], .message.regular.text-only span[class= +^=3D"icon-"], .message.incomplete.text-only span[class^=3D"icon-"], .messag= +e.gray.text-only span[class^=3D"icon-"] { margin-right: 4px; } + +.message.error.centered, .message.success.centered, .message.regular.center= +ed, .message.incomplete.centered, .message.gray.centered { text-align: cent= +er; } + +.message.error.centered-block, .message.success.centered-block, .message.re= +gular.centered-block, .message.incomplete.centered-block, .message.gray.cen= +tered-block { display: block; margin: 10px auto; } + +.message.error.left-block, .message.success.left-block, .message.regular.le= +ft-block, .message.incomplete.left-block, .message.gray.left-block { displa= +y: block; margin: 10px auto; } + +.message.error .message-ctas, .message.success .message-ctas, .message.regu= +lar .message-ctas, .message.incomplete .message-ctas, .message.gray .messag= +e-ctas { display: flex; justify-content: space-between; align-items: center= +; margin-top: 10px; } + +.message.error .message-cta, .message.success .message-cta, .message.regula= +r .message-cta, .message.incomplete .message-cta, .message.gray .message-ct= +a { margin-top: 10px; } + +.message.error .message-title, .message.success .message-title, .message.re= +gular .message-title, .message.incomplete .message-title, .message.gray .me= +ssage-title { text-align: center; font-weight: 700; padding: 10px 0px; marg= +in: -12px -12px 10px; border-radius: 3px 3px 0px 0px; } + +.message.error .message-title [class^=3D"icon"], .message.success .message-= +title [class^=3D"icon"], .message.regular .message-title [class^=3D"icon"],= + .message.incomplete .message-title [class^=3D"icon"], .message.gray .messa= +ge-title [class^=3D"icon"] { margin-right: 4px; vertical-align: middle; } + +.message.error .message-title [class*=3D"icon-warning"], .message.success .= +message-title [class*=3D"icon-warning"], .message.regular .message-title [c= +lass*=3D"icon-warning"], .message.incomplete .message-title [class*=3D"icon= +-warning"], .message.gray .message-title [class*=3D"icon-warning"] { positi= +on: relative; top: -1px; } + +.message.inline-message { display: block; } + +.message.inline-message::before, .message.inline-message::after { content: = +""; display: table; } + +.message.inline-message::after { clear: both; } + +.message.inline-message .message-title { display: inline-block; margin: 0px= + 12px 0px 0px; color: rgb(244, 128, 36); } + +.message.inline-message .inline-message-cta { float: right; } + +.message.regular { background: rgb(255, 248, 220); color: rgb(204, 149, 69)= +; border: 1px solid rgb(250, 238, 214); } + +.message.error { color: rgb(172, 101, 103); background: rgb(251, 226, 226);= + border: 1px solid rgb(236, 205, 206); } + +.message.error.text-only { color: rgb(192, 72, 72); } + +.message.error.text-only::before { top: 3px; background-position: -72px -33= +0px; } + +.message.success { color: rgb(102, 159, 97); background: rgb(244, 252, 238)= +; border: 1px solid rgb(144, 227, 88); } + +.message.success.text-only { color: rgb(24, 187, 156); } + +.message.success.text-only::before { background-position: -95px -330px; } + +.message.incomplete { color: rgb(12, 13, 14); background: rgb(255, 245, 238= +); border: 1px solid rgb(255, 140, 0); } + +.message.incomplete .message-title { color: rgb(244, 128, 36); background: = +rgb(255, 230, 213); padding: 10px 0px; margin: -12px -12px 10px; } + +.message.gray { background: rgb(246, 246, 247); color: rgb(12, 13, 14); bor= +der: 1px solid rgb(228, 230, 232); } + +.message.gray .message-title { background: rgb(228, 230, 232); padding: 10p= +x 0px; } + +.job-requirements { padding: 15px; } + +.job-requirements input[type=3D"submit"].dno { display: none; } + +.message.job-improve .message-title { background: rgb(228, 230, 232); paddi= +ng: 10px 0px; } + +.message.label.regular { font-size: 12px; padding: 6px; margin: 0px; } + +.message.label.regular.has-tooltip { cursor: default; } + +h1 .message.label, h2 .message.label, h3 .message.label { position: relativ= +e; top: -1px; } + +.message.message-config.message-dismissable.message-takeover { position: ab= +solute; width: 480px; top: 260px; left: calc(50% - 240px); z-index: 10000; = +} + +.message.message-config.message-dismissable.message-takeover h1 { margin-bo= +ttom: 10px; } + +.message.message-config.message-dismissable.message-ask-survey { position: = +absolute; width: 480px; top: 260px; left: calc(50% - 240px); z-index: 10000= +; } + +.message.message-config.message-dismissable.message-ask-survey h1 { margin-= +bottom: 10px; } + +.top-notification { background: rgb(0, 149, 255); color: rgb(255, 255, 255)= +; font-size: 12px; margin-bottom: 20px; padding: 10px 20px; } + +.top-notification .container { width: 100%; max-width: 1050px; margin: 0px = +auto; min-height: 30px; align-items: center; } + +.top-notification a { color: rgb(255, 255, 255); } + +.top-notification .-content p:last-child { margin-bottom: 0px; } + +.top-notification .-content .btn { background: rgb(244, 128, 36); box-shado= +w: rgba(255, 255, 255, 0.4) 0px 1px 0px inset; margin-left: 10px; } + +.top-notification .-actions { text-align: right; } + +.comments { width: 660px; padding-bottom: 10px; } + +.comments > table { width: 100%; } + +.comments-link { padding: 0px 3px 2px; } + +a.comments-link:hover { padding: 0px 3px 2px; text-decoration: none; } + +tr.comment > td { padding: 6px 6px 6px 0px; vertical-align: top; line-heigh= +t: 1.3; border-bottom: 1px solid rgb(239, 240, 241); } + +.comment img { vertical-align: middle; } + +.comment:not([style*=3D"background-color"]) { transition: background-color = +2s linear 0s; } + +.comment-actions { padding-left: 3px; width: 15px; } + +.comment-score span { font-size: 13px; font-weight: normal; padding-right: = +4px; } + +.comment-text, .comment-form { padding: 0px 6px 0px 7px; vertical-align: te= +xt-top; } + +.comment-text code { padding: 1px 5px; white-space: normal; } + +.comment-text .comment-edited { margin-top: 3px; margin-left: 2px; vertical= +-align: top; } + +.comment-form > form textarea, .comment-form > form div[contenteditable=3D"= +true"] { margin-bottom: 4px; height: 5em; width: 100%; resize: vertical; } + +.comment-date { color: rgb(132, 141, 149); } + +.text-counter { margin-right: 20px; } + +.comment-text .hover-only-label { visibility: hidden; } + +.comment-text:hover .hover-only-label { visibility: visible; } + +.comment-text:focus-within .hover-only-label { visibility: visible; } + +.comment-text button:focus .hover-only-label { visibility: visible; } + +@media (hover: none) { + .comment-text .hover-only-label { visibility: visible; } +} + +.comment__highlight:not([style*=3D"background-color"]) { transition: none 0= +s ease 0s; background-color: rgb(244, 168, 61); } + +table.comment-edit-history { max-width: 850px; } + +table.comment-edit-history th:first-child { padding-right: 6px; } + +table.comment-edit-history td:first-child { text-align: center; } + +table.comment-edit-history th, table.comment-edit-history td { font-size: 1= +2px; } + +table.comment-edit-history td:not(.comment-text) { white-space: nowrap; } + +.no-comment-edit-history { padding-right: 20px; } + +.so-reaction { padding: 4px 2px; margin-right: 8px; background: transparent= +; white-space: nowrap; color: rgb(132, 141, 149); } + +.so-reaction .svg-icon { vertical-align: text-bottom; margin-right: 4px; } + +.so-reaction[aria-pressed=3D"true"] { color: rgb(0, 119, 204); } + +.comments-add-link { font-weight: bold; } + +.comments-link-annotation { color: rgb(106, 115, 124); } + +ul.comments-list { list-style-type: none; margin: 0px; } + +ul.comments-list .comment { display: flex; } + +ul.comments-list .comment-score { width: 2ch; padding-right: 4px; } + +ul.comments-list .comment-score > span { float: right; padding-right: 0px; = +min-width: 2ch; } + +ul.comments-list .comment-text { flex-grow: 1; } + +ul.comments-list .comment-voting, ul.comments-list .comment-flagging { widt= +h: 20px; } + +ul.comments-list .comment > * { border-bottom: 1px solid rgb(239, 240, 241)= +; } + +ul.comments-list .comment-text, ul.comments-list comment-form, ul.comments-= +list .comment-actions { padding: 6px 0px; } + +ul.comments-list .comment-text { min-width: 0px; flex-basis: 0px; padding-l= +eft: 6px; padding-right: 6px; } + +ul.comments-list .comment-body { overflow-wrap: break-word; } + +ul.comments-list .comment-actions { padding-right: 2px; } + +ul.comments-list .comment-text, ul.comments-list .comment-actions { transit= +ion: background-color 2s linear 0s; } + +ul.comments-list .deleted-comment { background-color: transparent; } + +ul.comments-list .deleted-comment .comment-text, ul.comments-list .deleted-= +comment .comment-actions { background-color: rgb(244, 234, 234); } + +ul.comments-list .comment__highlight { background-color: transparent; } + +ul.comments-list .comment__highlight .comment-text { transition: none 0s ea= +se 0s; background-color: rgb(244, 168, 61); } + +ul.comments-list .comment-actions { width: 38px; flex-shrink: 0; } + +ul.comments-list .comment-score { display: inline-block; } + +ul.comments-list .comment-voting, ul.comments-list .comment-flagging { floa= +t: right; } + +@supports (display: grid) { + ul.comments-list .comment-actions { display: grid; grid-template-columns:= + repeat(2, max-content); align-content: flex-start; width: calc(2ch + 16px = ++ 4px + 2px); } + ul.comments-list .comment-flagging:nth-child(3) { grid-column: 2 / auto; = +} +} + +@supports (display: grid) and (display: contents) and (not (-apple-trailing= +-word: auto)) { + body:not(.no-grid-comments) ul.comments-list { display: grid; grid-templa= +te-columns: max-content 1fr; } + body:not(.no-grid-comments) ul.comments-list .comment-score { width: auto= +; min-width: 16px; } + body:not(.no-grid-comments) ul.comments-list .comment-score > span { min-= +width: 0px; float: none; } + body:not(.no-grid-comments) ul.comments-list .comment-actions { width: au= +to; } + body:not(.no-grid-comments) ul.comments-list .comment { display: contents= +; } + body:not(.no-grid-comments) ul.comments-list .comment__highlight .comment= +-actions { transition: none 0s ease 0s; background-color: rgb(244, 168, 61)= +; } +} + +.message.message-config.unsubscribe-all-popup { z-index: 2000; } + +body.user-page #content * { box-sizing: border-box; } + +.user-page .popup #tabs > a { margin-top: -1px; } + +.l-col-primary, .l-col-secondary { float: left; } + +.l-col-primary { margin-left: 40px; width: 720px; } + +.l-col-secondary { width: 220px; } + +.col-6.with-padding:first-child { padding-right: 10px; } + +.col-6.with-padding:last-child { padding-left: 10px; } + +#main-content::before, #main-content::after { content: ""; display: table; = +} + +#main-content::after { clear: both; } + +.profile-section-title { font-weight: 700; color: rgb(12, 13, 14); } + +.profile-section-title span { font-weight: 400; color: rgb(106, 115, 124); = +} + +#mod-content { margin-top: 25px; } + +#mod-content .mod-sidebar { padding-right: 30px; } + +#mod-content .mod-sidebar .account-details { margin-bottom: 20px; } + +.mod-quick-links { margin-bottom: 30px; } + +.mod-links li { margin-bottom: 5px; } + +.account-info .row.mod-section { padding-bottom: 20px; margin-bottom: 20px;= + border-bottom: 1px solid rgb(239, 240, 241); } + +#mod-content .row h3 { margin-bottom: 10px; } + +.row.mod-credentials { margin-top: 20px; margin-bottom: 0px; } + +.account-info dl { float: right; font-size: 0.8em; } + +.account-info dl dt { display: inline-block; font-weight: bold; } + +.account-info dl dd { display: inline-block; font-style: italic; } + +.block { display: block; } + +.w-100 { width: 100%; } + +.inline-block { display: inline-block; } + +.float-left, .fl { float: left !important; } + +.float-right, .fr { float: right !important; } + +.vt { vertical-align: top; } + +.vm { vertical-align: middle; } + +.fw { margin-bottom: 4px; width: 100%; } + +.relative { position: relative; } + +.cp { cursor: pointer; } + +.ar { text-align: right !important; } + +.al { text-align: left !important; } + +.help-text { color: rgb(106, 115, 124); } + +.bold { font-weight: 700; } + +.help-text.has-icon, .message.text-only.has-icon { display: flex; } + +.help-text.has-icon [class^=3D"icon"], .message.text-only.has-icon [class^= +=3D"icon"], .help-text.has-icon .svg-icon, .message.text-only.has-icon .svg= +-icon { flex-shrink: 0; margin-top: -3px; margin-right: 5px; } + +.help-text.has-icon .icon-i-orange, .message.text-only.has-icon .icon-i-ora= +nge { position: relative; top: 2px; } + +.success-text { color: rgb(72, 168, 104); } + +.error-text { color: rgb(209, 56, 61); } + +.text-left { text-align: left; } + +.text-right { text-align: right; } + +.text-centered { text-align: center; } + +.hidden, .dno, ._hidden { display: none; } + +.hidden-important { display: none !important; } + +@media print { + .hide-for-print { display: none; } +} + +.show-for-print { display: none; } + +@media print { + .show-for-print { display: block; } +} + +.stop-scrolling { height: 100%; overflow: hidden; } + +.stop-scrolling-mobile { height: 100%; overflow: hidden; position: fixed; } + +._blocked { overflow: hidden; position: fixed; } + +html { height: 100%; min-width: 1264px; } + +body { min-height: 100%; display: flex; flex-direction: column; background-= +color: var(--white); background-image: none; background-position: left top;= + background-repeat: repeat; background-size: auto; min-width: 1279px; } + +body.read-only .askquestion, body.read-only .login-link, body.read-only .st= +ar-off, body.read-only .vote-down-off, body.read-only .vote-up-off { opacit= +y: 0.3; } + +body.read-only .star-off, body.read-only .vote-down-off, body.read-only .vo= +te-up-off { cursor: not-allowed; } + +.container { position: relative; width: 100%; flex: 1 0 auto; margin: 0px a= +uto; text-align: left; } + +#content { box-sizing: content-box; margin: 0px auto; padding: 15px; width:= + 1264px; background-color: rgb(255, 255, 255); } + +#content::before, #content::after { content: ""; display: table; } + +#content::after { clear: both; } + +.ask-page:not(.wizard) #content { min-height: 750px; overflow: visible; } + +body:not(.unified-theme) .container._full #content { padding: 0px; width: 1= +00%; } + +body:not(.unified-theme) .container._full #content .inner-content { box-siz= +ing: content-box; margin: 0px auto; padding: 15px; width: 1264px; } + +body:not(.unified-theme) .container._full #content .inner-content::before, = +body:not(.unified-theme) .container._full #content .inner-content::after { = +content: ""; display: table; } + +body:not(.unified-theme) .container._full #content .inner-content::after { = +clear: both; } + +.main-columns { display: flex; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .main-columns { flex-d= +irection: column; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .main-columns { flex-directi= +on: column; } +} + +@media print { + .main-columns { flex-direction: column; } +} + +.main-columns #mainbar, .main-columns .mainbar { float: none; } + +.main-columns #sidebar, .main-columns .sidebar { float: none; margin-left: = +24px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .main-columns #sidebar= +, html.html__responsive:not(.html__unpinned-leftnav) .main-columns .sidebar= + { margin-left: auto; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .main-columns #sidebar, html= +.html__responsive.html__unpinned-leftnav .main-columns .sidebar { margin-le= +ft: auto; } +} + +@media print { + .main-columns #sidebar, .main-columns .sidebar { margin-left: auto; } +} + +.container__full { max-width: 100%; } + +.container__full .left-sidebar { display: none; } + +.container__full #content { padding: 0px; max-width: 100%; width: 100%; } + +.container .container--inner { max-width: 1264px; padding: 0px 24px; margin= +: 0px auto; } + +#header { margin: 0px auto; width: 1264px; height: 96px; padding: 0px 15px;= + box-sizing: content-box; position: relative; } + +#questions, #answers { clear: both; width: 728px; } + +#questions { float: left; margin-bottom: 20px; } + +#question-header .question-hyperlink { font-size: 2.07692rem; font-family: = +Arial, "Helvetica Neue", Helvetica, sans-serif; line-height: 1.35; font-wei= +ght: normal; margin-bottom: 0px; } + +.question-summary { overflow: hidden; padding: 15px 0px; float: left; width= +: 728px; border-bottom: 1px solid var(--black-050); } + +.question-summary .question-summary-scroll { border-bottom: none; } + +.question-summary .question-hyperlink { font-family: Arial, "Helvetica Neue= +", Helvetica, sans-serif; } + +.stats { margin: 0px; width: 58px; } + +.statscontainer { width: 78px; float: left; margin-right: 8px; margin-left:= + 8px; color: rgb(106, 115, 124); font-size: 11px; } + +.statscontainer .views { width: 58px; } + +.statscontainer .status { padding: 7px 0px 5px; border-radius: 3px; } + +.statscontainer .status strong { font-size: 20px; font-weight: normal; } + +.narrow .status { display: inline-block; margin: 0px 3px 0px 0px; min-width= +: 44px; height: auto; font-size: 11px; padding: 6px; border: 1px solid tran= +sparent; border-radius: 3px; } + +.narrow .started { width: auto; line-height: inherit; padding-top: 4px; whi= +te-space: nowrap; } + +.narrow .votes { display: inline-block; height: 38px; min-width: 38px; marg= +in: 0px 3px 0px 0px; font-size: 11px; color: rgb(132, 141, 149); padding: 7= +px 6px; } + +.narrow .stats { background: none; margin: 0px 0px 0px 7px; padding: 0px; w= +idth: auto; height: 48px; display: inline-block; } + +.narrow .views { display: inline-block; height: 38px; min-width: 40px; marg= +in: 0px 7px 0px 0px; font-size: 11px; color: rgb(132, 141, 149); padding: 7= +px 6px; } + +.narrow .summary { width: 530px; padding: 0px; float: left; } + +.narrow .summary h3 { margin-bottom: 0.35em; line-height: 1.3; } + +.narrow .cp { vertical-align: top; float: left; margin-right: 10px; } + +.narrow .mini-counts { font-size: 17px; font-weight: 300; color: rgb(106, 1= +15, 124); margin-bottom: 4px; } + +.votes { padding: 0px; margin-bottom: 8px; text-align: center; } + +.vote-count-post { display: block; font-size: 20px; } + +.vote-count-post strong { font-weight: normal; } + +.status { padding: 0px; margin-bottom: 8px; text-align: center; } + +.status strong { display: block; } + +.vote-count-separator { border-top: 1px solid silver; width: 36px; margin-t= +op: 5px; margin-bottom: 5px; } + +.views { padding-top: 4px; text-align: center; } + +.views strong { display: block; } + +#question-suggestions { overflow: hidden; padding-bottom: 2px; font-size: 1= +4px; } + +#question-suggestions .answer-hyperlink, #question-suggestions .question-hy= +perlink { font-size: 13px; } + +#question-suggestions .answer-votes { font-size: 11px; line-height: 1.3; pa= +dding: 1px 0px 2px; font-weight: normal; } + +#question-suggestions label { margin: 10px 0px; } + +#question-suggestions .answer-summary { overflow: auto; display: flex; } + +.question-originals-of-duplicate.question-status { width: auto; margin: 10p= +x 0px; padding: 10px; background-image: none; } + +.question-originals-of-duplicate p { margin: 0px; font-weight: bold; } + +.question-originals-of-duplicate ul { margin: 0px; } + +.question-originals-of-duplicate ul li { list-style-type: none; margin: 0px= +; } + +.question-originals-of-duplicate .question-originals-answer-count { font-st= +yle: italic; padding-left: 5px; } + +.question-originals-of-duplicate #edit-or-approve-duplicate { margin: 15px = +0px 5px; } + +.question-originals-of-duplicate #edit-or-approve-duplicate #got-my-answer = +{ margin: 0px; } + +.question-originals-of-duplicate #edit-or-approve-duplicate > div { line-he= +ight: 33px; } + +.question-status { margin-top: 15px; margin-bottom: 10px; padding: 15px 8px= + 1px 60px; background-color: rgb(255, 247, 229); border: 1px solid rgba(83,= + 90, 96, 0.1); clear: both; } + +.question-status h2 { font-size: 15px; line-height: 18px; margin-bottom: 10= +px; } + +.question-status p { font-size: 13px; overflow-wrap: break-word; } + +.question-status .close-as-off-topic-status-list { margin-bottom: 0px; } + +.question-status .close-status-suffix { display: block; margin-top: 10px; } + +.question-status .voter-history .badge1 { vertical-align: middle; } + +#answers { padding-top: 10px; } + +#answers-header { margin-top: 10px; width: 728px; } + +.question { clear: both; } + +.question .postcell { vertical-align: top; } + +.question-page #answers .answer { border-bottom: 1px solid var(--black-075)= +; } + +hr { border: 0px; color: rgb(159, 166, 173); background-color: rgb(159, 166= +, 173); height: 1px; margin-bottom: 20px; } + +.date { text-align: right; width: 70px; white-space: nowrap; color: rgb(200= +, 204, 208); height: 35px; font-size: 18px; } + +.date_brick { float: right; width: 45px; color: rgb(145, 153, 161); text-al= +ign: center; line-height: 1.4; font-size: 13px; margin-left: 10px; padding-= +top: 5px; letter-spacing: 0px; overflow: hidden; } + +.revcell1 { width: 25px; cursor: pointer; text-align: right; } + +.revcell2 { width: 50px; cursor: pointer; font-size: 250%; font-weight: bol= +d; color: rgb(106, 115, 124); text-align: left; } + +.revcell3 { vertical-align: middle; width: 660px; padding-top: 8px; padding= +-bottom: 5px; } + +.revcell4 { padding: 5px; width: 185px; } + +.revcell5 { margin-top: 10px; margin-left: 10px; } + +.unanswered .mini-counts span { color: rgb(36, 39, 41); } + +.votecell { vertical-align: top; padding-right: 15px; } + +.votecell .vote-count-post { margin: 8px 0px; } + +.votecell .vote { min-width: 46px; } + +#scroller { margin-top: 5px; } + +.answer { padding-bottom: 20px; padding-top: 20px; width: 728px; } + +.answer .signup-prompt { text-align: right; color: rgb(132, 141, 149); padd= +ing: 5px 0px; } + +.post-signature { text-align: left; vertical-align: top; width: 200px; } + +.accept-rate { margin-left: 37px; margin-top: 3px; margin-bottom: 6px; } + +.owner { border-radius: 3px; background-color: rgb(225, 236, 244); } + +.new-contributor-indicator { background-color: rgb(206, 224, 237); } + +.downvoted-answer .comment-body, .downvoted-answer .post-signature, .downvo= +ted-answer .post-text, .downvoted-answer .vote > * { opacity: 0.5; transiti= +on: opacity 0.5s ease 0s; } + +.downvoted-answer .vote .message { opacity: 1; } + +.downvoted-answer:hover .comment-body, .downvoted-answer:hover .post-signat= +ure, .downvoted-answer:hover .post-text, .downvoted-answer:hover .vote > * = +{ opacity: 1; } + +.item-multiplier { margin-right: 4px; color: rgb(132, 141, 149); } + +.reputation-score { font-weight: bold; font-size: 12px; margin-right: 2px; = +} + +.relativetime { text-decoration: none; } + +#notify-container { font-size: 16px; text-align: center; position: fixed; l= +eft: 0px; top: 0px; width: 100%; height: 0px; z-index: 5051; } + +#notify-container span.notify-close { float: right; margin-right: 20px; tex= +t-decoration: none; display: block; cursor: pointer; } + +#notify-container span.notify-close a { text-decoration: none; font-size: 1= +6px; font-weight: bold; color: rgb(255, 255, 255); } + +#notify-container div { color: rgb(255, 255, 255); padding: 9px 0px; backgr= +ound: rgb(255, 153, 0); } + +.summaryinfo { color: rgb(106, 115, 124); text-align: center; } + +.summarycount { text-align: center; font-size: 26px; line-height: 1; } + +.summarycount + p { margin-bottom: 0px; } + +.lsep { margin: 0px 2px; color: rgb(27, 64, 114); font-size: 1px; visibilit= +y: hidden; } + +.post-taglist { margin-bottom: 10px; clear: both; } + +.post-menu { padding-top: 2px; } + +.post-menu > a { padding: 0px 4px 2px; color: rgb(132, 141, 149); } + +.post-menu > a:hover { color: rgb(60, 65, 70); text-decoration: none; } + +.post-menu .lsep { margin: 0px; padding: 0px; } + +.post-menu > :not(.s-popover) { display: inline-block; } + +.edit-tags-wrapper { padding-right: 40px; } + +.edit-tags-wrapper > a.post-tag { margin-right: 6px; } + +.inline-tag-edit-link { padding: 0px 3px 2px; color: rgb(132, 141, 149); } + +.inline-tag-edit-link:hover { color: rgb(60, 65, 70); text-decoration: none= +; } + +.accept-answer-link { font-weight: bold; color: rgb(80, 136, 80) !important= +; } + +.deleted-post { color: rgb(182, 84, 84) !important; font-weight: bold !impo= +rtant; } + +.deleted-post:hover { color: rgb(255, 255, 255) !important; background-colo= +r: rgb(182, 84, 84) !important; } + +.search-highlight { color: rgb(47, 51, 55); background-color: rgb(255, 255,= + 204); font-weight: bold; } + +.page-description { font-size: 14px; margin: 10px 0px; line-height: 18px; } + +.content-page { padding: 20px 0px; } + +.content-page h2 { margin-bottom: 10px; font-size: 140%; font-weight: bold;= + } + +.content-page h3 { margin-bottom: 10px; font-size: 120%; font-weight: bold;= + } + +.user-list { margin-right: 10px; width: 225px; height: 21px; float: left; t= +ext-align: left; white-space: nowrap; overflow: hidden; } + +.user-flair { float: left; } + +.user-info { box-sizing: border-box; padding: 5px 6px 7px 7px; color: rgb(1= +06, 115, 124); } + +.user-info::before, .user-info::after { content: ""; display: table; } + +.user-info::after { clear: both; } + +.user-info .user-gravatar32 { float: left; width: 32px; height: 32px; borde= +r-radius: 1px; } + +.user-info .user-gravatar32 img { border-radius: 1px; } + +.user-info .user-gravatar32 + .user-details { margin-left: 8px; width: calc= +(100% - 40px); } + +.user-info .user-gravatar48 + .user-details { margin-left: 8px; width: calc= +(100% - 48px); } + +.user-info .user-gravatar64 + .user-details { margin-left: 8px; width: calc= +(100% - 64px); } + +.user-info .user-action-time { margin-top: 1px; margin-bottom: 4px; font-si= +ze: 12px; white-space: nowrap; } + +.user-info .user-details { float: left; width: 100%; } + +.user-info .-flair { display: block; } + +.user-info-td .user-info { padding: 0px; } + +.user-details { line-height: 17px; overflow-wrap: break-word; } + +.user-details .badgecount { font-weight: 400; font-size: 12px; } + +.user-details td { color: rgb(12, 13, 14); padding: 4px 0px; } + +#revisions { margin-top: 20px; margin-left: 20px; } + +.revision td { background-color: rgb(239, 240, 241); } + +.vote-revision td { background-color: rgb(214, 217, 220); } + +.owner-revision td { background-color: rgb(224, 234, 241); } + +.revision-comment { color: rgb(47, 51, 55); padding: 0px; } + +.answer-votes { color: rgb(83, 90, 96); text-align: center; float: left; pa= +dding: 3px; min-width: 36px; min-height: 15px; text-decoration: none; borde= +r-radius: 2px; } + +#mainbar h2, .mainbar h2, #mainbar h3, .mainbar h3, #mainbar h4, .mainbar h= +4 { font-weight: 400; } + +.answer-link { float: left; width: 700px; padding-left: 10px; color: rgb(83= +, 90, 96); } + +.answer-summary { padding: 3px; clear: both; } + +.bounty-indicator { float: left; color: rgb(255, 255, 255); font-size: 11px= +; padding: 0.2em 0.5em 0.25em; line-height: 1.3; background-color: rgb(0, 1= +19, 221); margin-right: 5px; border-radius: 2px; } + +.bounty-indicator-tab { color: rgb(255, 255, 255); display: inline; backgro= +und-color: rgb(0, 119, 221); padding: 0.2em 0.5em 0.25em; margin-right: 5px= +; font-size: 10px; line-height: 1.3; border-radius: 2px; } + +.bounty p { margin-top: 10px; } + +.bounty-stats { overflow: auto; margin-bottom: 5px; border-bottom: 1px soli= +d rgb(239, 240, 241); } + +.bounty-award { display: inline-block; line-height: 1.3; font-weight: norma= +l; padding: 4px; font-size: 0.8em; border-radius: 3px; background-color: rg= +b(0, 119, 221); color: rgb(255, 255, 255) !important; } + +.bounty-award.disabled { background-color: rgb(132, 141, 149); } + +.bounty-vote-off { display: inline-block; font-weight: bold; line-height: 1= +.3; background-color: rgb(150, 202, 245); } + +.bounty-vote-off.disabled { background-color: rgb(187, 192, 196); } + +.bounty-vote { cursor: pointer; } + +#bounty-submit { box-shadow: rgb(187, 192, 196) 2px 2px 3px; background-col= +or: rgb(178, 55, 55); border-color: rgb(229, 113, 113) rgb(124, 21, 21) rgb= +(124, 21, 21) rgb(229, 113, 113); border-style: solid; border-width: 1px 2p= +x 2px 1px; color: rgb(255, 255, 255); font-size: 14px; font-weight: bold; m= +argin: 3px; padding: 4px; } + +.history-table { line-height: 180%; } + +.history-table .answer-hyperlink, .history-table .question-hyperlink { font= +-size: 13px; } + +.history-table span.revision-comment { line-height: 180%; } + +.history-table .comments { border-top: none; } + +.history-table p { margin-bottom: 10px; margin-top: 3px; } + +#noscript-warning { font-family: sans-serif; position: fixed; top: 0px; lef= +t: 0px; width: 100%; z-index: 5050; text-align: center; font-weight: bold; = +font-size: 120%; color: rgb(255, 255, 255); background-color: rgb(174, 0, 0= +); padding: 5px 0px; } + +#system-message { background-color: rgb(255, 247, 227); clear: both; width:= + 1264px; padding: 15px; margin: 10px auto; border: 0px; line-height: 1.3; f= +ont-size: 12px; box-sizing: border-box; } + +.nav ul { margin: 0px; } + +.nav ul li { display: inline-block; margin-left: 15px; } + +.nav ul li a { text-decoration: none; display: block; } + +.top-banner-message-container { width: 1264px; margin: 0px auto 14px; paddi= +ng: 0px; box-sizing: content-box; position: relative; } + +.top-banner-message-container .message { width: 100%; } + +#sidebar, .sidebar { float: right; width: 300px; margin: 0px 0px 15px; } + +#sidebar .badge, .sidebar .badge, #sidebar .badge-tag, .sidebar .badge-tag,= + #sidebar .moderator-tag, .sidebar .moderator-tag, #sidebar .post-tag, .sid= +ebar .post-tag, #sidebar .required-tag, .sidebar .required-tag { margin-bot= +tom: 0.5em; } + +#sidebar h4, .sidebar h4 { margin-bottom: 1em; } + +#sidebar.ask-sidebar { width: 365px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) #sidebar.ask-sidebar {= + width: 300px; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav #sidebar.ask-sidebar { width= +: 300px; } +} + +@media print { + #sidebar.ask-sidebar { width: 300px; } +} + +#mainbar, .mainbar { float: left; width: 728px; margin: 0px; padding: 0px; = +} + +#mainbar-full, .mainbar-full { width: 100%; padding: 0px; } + +#mainbar-full::before, .mainbar-full::before, #mainbar-full::after, .mainba= +r-full::after { content: ""; display: table; } + +#mainbar-full::after, .mainbar-full::after { clear: both; } + +div.form-error { color: rgb(153, 0, 0); font-weight: bold; font-size: 130%;= + } + +.user-stats-table { margin-left: 15px !important; } + +.subheader { clear: both; margin-bottom: 10px; height: 40px; border-bottom:= + 1px solid var(--black-075); } + +.subheader h1, .subheader h2 { float: left; margin-bottom: 0px; font-weight= +: normal; } + +.subheader h1 { color: rgb(36, 39, 41); font-size: 18px; line-height: 2.22;= + } + +.subheader h2 { color: rgb(60, 65, 70); font-size: 18px; } + +.subheader.tools-rev { margin-bottom: 10px; } + +.subheader a.link { color: rgb(0, 119, 204); } + +body.home-page .subheader, body.questions-page .subheader { margin-bottom: = +0px; } + +.vote-up, .vote-down { display: block; margin: 0px auto; } + +.cool, .mini-counts.cool { color: rgb(145, 153, 161); } + +.coolbg { background-color: rgb(145, 153, 161); color: rgb(255, 255, 255) != +important; } + +.mini-counts.warm, .warm { color: rgb(155, 118, 79); } + +.hot, .mini-counts.hot { color: rgb(207, 119, 33); } + +.hotbg { background-color: rgb(207, 119, 33); color: rgb(255, 255, 255) !im= +portant; } + +.mini-counts.supernova, .supernova { color: rgb(244, 128, 36); } + +.supernovabg { background: rgb(244, 128, 36); } + +.answered { background-color: transparent; } + +.answered, .answered .mini-counts, .answered strong { color: rgb(72, 168, 1= +04); } + +.answered strong { font-weight: normal; font-size: 20px; } + +.answered-accepted { background-color: rgb(94, 186, 125); } + +.answered-accepted, .answered-accepted .mini-counts, .answered-accepted .mi= +nicounts span { color: rgb(255, 255, 255); } + +.summary { float: left; width: 630px; } + +.summary h3 { font-size: 15px; line-height: 1.4; margin-bottom: 0.5em; } + +.excerpt { padding: 0px 0px 5px; margin: 0px; } + +.excerpt .started { float: right; width: 185px; height: 55px; margin-top: 5= +px; } + +.excerpt p { margin-bottom: 3px; } + +.excerpt .tags { width: 410px; margin-top: 5px; } + +.tags { line-height: 18px; float: left; } + +.tags a:hover { text-decoration: none; } + +.started { width: 200px; float: right; line-height: 18px; } + +.started img { vertical-align: baseline; } + +.started .user-action-time { margin-bottom: 2px; } + +.started .reputation-score, .started .user-info { color: rgb(132, 141, 149)= +; } + +.started .mod-flair, .started a:not(.started-link) { font-size: 12px; color= +: rgb(0, 119, 204); } + +.started .mod-flair:hover, .started a:not(.started-link):hover { color: rgb= +(0, 149, 255); } + +.started-link { font-size: 12px; color: rgb(145, 153, 161); } + +.started-link:hover { color: rgb(0, 119, 204); } + +.mod-flair { color: rgb(0, 119, 204); margin-left: 3px; font-weight: bold; = +font-size: 15px; line-height: 1; } + +.module { margin-bottom: 1.5em; } + +.module:not(.s-sidebarwidget) .spacer { margin-bottom: 8px; } + +.module:not(.s-sidebarwidget) ul { margin-left: 15px; list-style-type: squa= +re; margin-right: 30px; line-height: 120%; } + +.module:not(.s-sidebarwidget) li { margin-bottom: 4px; } + +.module:not(.s-sidebarwidget) h4 { font-size: 14px; color: rgb(60, 65, 70);= + font-weight: normal; } + +.newuser { padding: 15px 15px 10px; background-color: rgb(255, 248, 220); b= +order: 1px solid rgb(224, 220, 191); font-size: 14px; } + +.vote { text-align: center; } + +.vote span { display: block; color: rgb(106, 115, 124); } + +.favoritecount { text-align: center; } + +.favoritecount b { color: rgb(106, 115, 124); font-weight: normal; } + +.star-on + .favoritecount b { font-weight: normal; color: rgb(212, 168, 73)= + !important; } + +.favorites-count { text-align: center; color: rgb(212, 168, 73); float: lef= +t; } + +.favorites-count-off { text-align: center; color: rgb(145, 153, 161); float= +: left; } + +.post-text { width: 660px; } + +.post-text, .wmd-preview { margin-bottom: 5px; overflow-wrap: break-word; f= +ont-size: 15px; line-height: 1.3; } + +.post-text pre, .wmd-preview pre { overflow-wrap: normal; } + +.post-text code, .wmd-preview code { font-size: 13px; } + +.post-text hr, .wmd-preview hr { background-color: rgb(214, 217, 220); colo= +r: rgb(214, 217, 220); } + +.post-text li, .wmd-preview li { overflow-wrap: break-word; } + +.post-text li pre, .wmd-preview li pre { overflow-wrap: normal; } + +.post-text h1, .wmd-preview h1, .post-text h2, .wmd-preview h2, .post-text = +h3, .wmd-preview h3, .post-text h4, .wmd-preview h4, .post-text h5, .wmd-pr= +eview h5, .post-text h6, .wmd-preview h6 { font-weight: bold !important; } + +.post-text h1 code, .wmd-preview h1 code, .post-text h2 code, .wmd-preview = +h2 code, .post-text h3 code, .wmd-preview h3 code, .post-text h4 code, .wmd= +-preview h4 code, .post-text h5 code, .wmd-preview h5 code, .post-text h6 c= +ode, .wmd-preview h6 code { margin-bottom: 0.5em; } + +.post-text h1, .wmd-preview h1, .post-text h1 code, .wmd-preview h1 code { = +font-size: 21px; } + +.post-text h2, .wmd-preview h2, .post-text h2 code, .wmd-preview h2 code { = +font-size: 19px; } + +.post-text h3, .wmd-preview h3, .post-text h3 code, .wmd-preview h3 code { = +font-size: 17px; } + +.post-text h4, .wmd-preview h4, .post-text h4 code, .wmd-preview h4 code { = +font-size: 15px; } + +.post-text img, .wmd-preview img { max-width: 100%; margin-bottom: 0.5em; } + +.post-text blockquote img, .wmd-preview blockquote img, .post-text li img, = +.wmd-preview li img, .post-text p img, .wmd-preview p img { margin-bottom: = +0px; } + +.post-text ol li, .wmd-preview ol li, .post-text ul li, .wmd-preview ul li = +{ margin-bottom: 0.5em; } + +.post-text ol li:last-child, .wmd-preview ol li:last-child, .post-text ul l= +i:last-child, .wmd-preview ul li:last-child { margin-bottom: 0px; } + +.post-text .youtube-embed, .wmd-preview .youtube-embed { width: 100%; max-w= +idth: 640px; position: relative; } + +.post-text .youtube-embed > div, .wmd-preview .youtube-embed > div { width:= + 100%; height: 35px; padding-bottom: 56.25%; position: relative; } + +.post-text .youtube-embed > div iframe, .wmd-preview .youtube-embed > div i= +frame { position: absolute; width: 100%; height: 100%; } + +.post-text .soundcloud-embed iframe, .wmd-preview .soundcloud-embed iframe = +{ width: 100%; max-width: 640px; height: 116px; } + +.post-text .post-tag, .wmd-preview .post-tag { margin-bottom: 0px !importan= +t; } + +.mb { margin: 15px; } + +@media screen { + .spoiler { transition: color 0.5s ease-in 0s; } + .spoiler > * { transition: opacity 0.5s ease-in 0s; } + .spoiler:not(:hover) { color: rgba(251, 242, 212, 0); } + .spoiler:not(:hover) > * { opacity: 0; } + .diffs .spoiler:not(:hover), .body-diffs .spoiler:not(:hover) { color: rg= +ba(251, 242, 212, 0.004); } + .diffs .spoiler:not(:hover) > *, .body-diffs .spoiler:not(:hover) > * { o= +pacity: 0.3; } +} + +.form-item { padding: 10px 0px 15px; } + +.form-item label:not(.s-label) { display: block; font-weight: bold; padding= +-bottom: 3px; } + +span.feed-icon { display: inline-block; text-decoration: none; vertical-ali= +gn: middle; background-position: -79px -320px; width: 24px; height: 16px; } + +span.form-error { color: rgb(153, 0, 0); font-weight: bold; margin-left: 5p= +x; font-size: 90%; } + +.post-editor { margin-top: 10px; width: 660px; box-sizing: border-box; } + +.community-option { float: right; color: rgb(132, 141, 149); font-weight: n= +ormal; height: 32px; padding-right: 4px; font-size: 10px; position: relativ= +e; top: -2px; } + +.community-option input { vertical-align: middle; } + +.community-option label { vertical-align: middle; } + +.edit-block { display: none; } + +.page-sizer, .pager { margin: 20px 0px; } + +.page-sizer a, .pager a, .page-sizer a:hover, .pager a:hover { text-decorat= +ion: none; } + +.page-numbers { display: inline-block; padding: 4px 8px; font-size: 12px; c= +olor: rgb(132, 141, 149); border: 1px solid rgb(228, 230, 232); border-radi= +us: 3px; background-color: transparent; } + +.page-numbers.desc, .page-numbers.dots, .page-numbers.desc:hover, .page-num= +bers.dots:hover { color: rgb(132, 141, 149); background-color: transparent;= + border-color: transparent; box-shadow: none; } + +.page-numbers, .page-numbers:hover { text-decoration: none; } + +.page-numbers:hover { color: rgb(255, 255, 255); background-color: rgb(244,= + 128, 36); border-color: transparent; } + +.page-numbers.current { color: rgb(255, 255, 255); background-color: rgb(24= +4, 128, 36); border-color: transparent; } + +.leftcol { width: 390px; padding-top: 20px; } + +.rightcol { padding-top: 20px; } + +.system-alert { padding: 10px; font-weight: bold; margin-bottom: 10px; marg= +in-top: 5px; border: 1px dotted rgb(174, 0, 0); } + +#popup-flag-post textarea { width: 590px; max-width: 100%; } + +#start-bounty-popup { width: 500px; } + +#start-bounty-popup textarea { width: 550px; max-width: 100%; } + +.edit-tags { padding: 5px 0px 0px 15px; } + +.flag-menu { width: 22em; cursor: default; } + +.flag-reasons { padding: 10px 0px 15px 15px; } + +.flag-reasons input { border: none; cursor: pointer; } + +.flag-reasons label { margin-left: 0.5em; cursor: pointer; } + +.flag-reasons textarea { margin-top: 4px; margin-bottom: 4px; } + +.close-reasons input { border: none; cursor: pointer; } + +.close-reasons li { list-style-type: none; } + +.close-reasons li td.close-desc { color: rgb(106, 115, 124); padding-top: 2= +px; padding-bottom: 8px; line-height: 130%; } + +.close-reasons tr td:last-child { cursor: pointer; padding-left: 0.5em; } + +.close-reasons span.close-reason { font-weight: bold; } + +.flag-comment { margin-top: 15px; display: none; } + +.flag-submit { float: right; } + +.item-multiplier-count { font-size: 11px; color: rgb(106, 115, 124); } + +span.diff-delete { text-decoration: line-through; color: rgb(168, 36, 0); b= +ackground-color: rgb(229, 189, 178); } + +img.diff-delete { border: 2px solid red; opacity: 0.5; } + +span.diff-add { background: rgb(209, 225, 173); color: rgb(64, 90, 4); } + +img.diff-add { border: 2px solid rgb(72, 168, 104); } + +img.sponsor-tag-img { border: none; opacity: 1; width: 18px; height: 16px; = +vertical-align: top; padding-right: 4px; margin-top: -2px; box-sizing: cont= +ent-box !important; } + +.tagged-ignored { opacity: 0.35; background: transparent; } + +p#tag-subscriptions { text-align: left; } + +.tagged-ignored-hidden { display: none !important; } + +.tagged-interesting { background-color: rgb(253, 247, 227); } + +#interestingTag { font-size: 12px; margin-right: 5px; } + +#ignoredTag { font-size: 12px; margin-right: 5px; } + +.everyonelovesstackoverflow { margin-bottom: 10px; } + +.everyoneloves__top-leaderboard, .everyoneloves__mid-leaderboard, .everyone= +loves__bot-mid-leaderboard, .everyoneloves__tag-sponsorship { margin-left: = +auto; margin-right: auto; width: 728px; } + +.everyoneloves__mid-leaderboard, .everyoneloves__bot-mid-leaderboard { marg= +in-top: 10px; } + +.everyoneloves__inline-sidebar { display: none; } + +.welovestackoverflow { padding: 10px; line-height: 1.3; overflow: hidden; m= +argin-bottom: 8px; border: 2px solid var(--black-075); } + +.welovestackoverflow a { color: rgb(0, 119, 204); } + +.tagged { margin-top: 5px; } + +.related { line-height: 1.3; font-size: 12px; } + +.related a { font-size: 12px; font-weight: normal; } + +.linked { line-height: 1.3; font-size: 12px; } + +.linked a { font-size: 12px; font-weight: normal; } + +.cbt { clear: both; } + +.space { padding-top: 20px; } + +.label-key { color: rgb(145, 153, 161); font-size: 14px; } + +.label-key b, .label-key strong { color: rgb(60, 65, 70); font-weight: norm= +al; } + +.bottom-notice { margin-top: 15px; font-weight: normal; padding: 0px 10px 0= +px 0px; line-height: 1.4; font-size: 16px; } + +#question-mini-list { overflow: auto; margin-bottom: 30px; } + +.tag-col { width: 184px; } + +.accept-reminder { clear: both; text-align: center; margin: 0px 0px 8px; co= +lor: maroon; } + +.favorite-cell { height: 45px; float: left; width: 40px; } + +.pager-answers { padding-top: 10px; overflow: hidden; clear: both; } + +.ac_results { padding: 0px; border: 1px solid rgb(106, 115, 124); backgroun= +d-color: rgb(255, 255, 255); overflow: hidden; z-index: 10000; text-align: = +left; } + +.ac_results ul { width: 100%; list-style: none; padding: 0px; margin: 0px; = +} + +.ac_results li { margin: 0px; padding: 2px 5px; cursor: default; display: b= +lock; line-height: 16px; overflow: hidden; } + +.ac_highlight { font-weight: bold; text-decoration: underline; } + +.ac_loading { background: url("../../Img/progress-dots.gif?v=3D679ddd617b7d= +") right center no-repeat rgb(255, 255, 255); } + +.ac_over { color: rgb(255, 255, 255); background-color: rgb(244, 128, 36); = +} + +@media print { + * { position: relative; } + .site-footer, #header, #hlinks, #hmenus, #nav, #sidebar, #system-message,= + #tabs, #feed-link, .bounty-link, .comments-link, .notify, .post-comments, = +.post-menu, .top-bar, .tabs, div.vote, form, h2.bottom-notice, td.votecell = +{ display: none; } + .container, body { height: auto; font-size: 10pt !important; overflow: vi= +sible !important; } + .container { width: 710px; } + #answers, #content, #mainbar, #question-header, .container, .post-text, .= +question { width: 100%; float: none !important; overflow: visible !importan= +t; } + pre { max-height: none; display: block; width: 600px; height: auto; overf= +low-x: auto; white-space: pre-wrap; overflow-wrap: break-word; clear: both;= + } + code, pre { font-size: 9pt !important; } + #answers-header { clear: both; break-after: avoid; } + .comments { font-size: 9pt; width: 650px; } + #mainbar { margin: 0px; } + .post-text { width: 90%; } + #content { width: auto; height: 100%; overflow: auto; border: none; } + .answer { width: 700px; overflow-y: auto; } +} + +.comment-up-off, .comment-flag-off { color: rgba(12, 13, 14, 0.15); cursor:= + pointer; } + +.comment-up-off:hover, .comment-up-on { color: rgb(244, 128, 36); cursor: p= +ointer; } + +.comment-flag-on, .comment-flag:hover, .flag-on { color: rgb(209, 56, 61); = +} + +.delete-tag { width: 14px; height: 14px; vertical-align: middle; display: i= +nline-block; background-position: -40px -319px; cursor: pointer; margin-lef= +t: 3px; margin-top: -2px; margin-bottom: -1px; } + +.delete-tag-active, .delete-tag:hover { background-position: -40px -340px; = +} + +.badge-earned-check { width: 20px; display: inline-block; background-positi= +on: -20px -322px; height: 10px; position: relative; top: 1px; } + +.vote-accepted-bounty, .vote-accepted-off, .vote-accepted-on { display: blo= +ck; margin: 0px auto; } + +.expander-arrow-hide { display: inline-block; width: 20px; height: 15px; ba= +ckground-position: 0px -380px; } + +.expander-arrow-show { display: inline-block; width: 20px; height: 15px; ba= +ckground-position: -20px -380px; } + +.expander-arrow-small-hide { display: inline-block; width: 8px; height: 13p= +x; background-position: 0px -380px; } + +.expander-arrow-small-show { display: inline-block; width: 13px; height: 8p= +x; background-position: -20px -383px; } + +.anonymous-gravatar { display: inline-block; width: 32px; height: 32px; bac= +kground-position: 0px -400px; } + +.vcard { margin-top: 10px; } + +.mod-flag-indicator { color: rgb(255, 255, 255); display: inline; margin-ri= +ght: 5px; font-size: 10px; line-height: 1; border-radius: 2px; padding: 0.2= +em 0.5em 0.25em !important; } + +.tag-popup { width: 340px; padding: 12px; } + +.tag-popup .-container { position: relative; background-color: rgb(255, 255= +, 255); border: 1px solid rgb(187, 192, 196); border-radius: 5px; padding: = +16px; font-size: 13px; box-shadow: rgba(0, 0, 0, 0.06) 0px 1px 3px, rgba(0,= + 0, 0, 0.06) 0px 2px 6px, rgba(0, 0, 0, 0.09) 0px 3px 8px; } + +.tag-popup .-arrow { position: absolute; display: none; left: 50%; } + +.tag-popup .-arrow::before { position: absolute; content: ""; background: r= +gb(255, 255, 255); border-top: 1px solid rgb(187, 192, 196); border-left: 1= +px solid rgb(187, 192, 196); border-image: initial; border-bottom: none; bo= +rder-right: none; top: -6px; left: -6px; width: 12px; height: 12px; } + +.tag-popup .-arrow.-top { display: block; transform: rotate(45deg); top: -1= +px; } + +.tag-popup .-arrow.-bottom { display: block; transform: rotate(225deg); bot= +tom: -1px; } + +#user-menu { border-radius: 2px; border: 1px solid rgb(36, 39, 41); backgro= +und-color: rgb(83, 90, 96); color: rgb(228, 230, 232); text-align: left; pa= +dding: 10px; box-shadow: rgba(12, 13, 14, 0.3) 0px 1px 3px; font-family: Ar= +ial, "Helvetica Neue", Helvetica, sans-serif; z-index: 320; position: relat= +ive; width: 300px; font-size: 11px; line-height: 1.2; } + +#user-menu .um-gravatar { float: left; margin-right: 0.8em; margin-bottom: = +0.75em; } + +#user-menu .um-header-info .mod-flair, #user-menu .um-header-info .um-user-= +link { font-size: 18px; color: rgb(228, 230, 232) !important; } + +#user-menu .um-header-info .um-flair .badgecount, #user-menu .um-header-inf= +o .um-flair .reputation-score { color: rgb(228, 230, 232); } + +#user-menu .um-about-me { clear: both; font-size: 11px; margin: 5px 0px; ov= +erflow: hidden; } + +#user-menu .um-links a { margin-right: 8px; font-size: 11px; } + +#user-menu a, #user-menu a:visited { color: rgb(180, 212, 236); text-decora= +tion: none; } + +#user-menu a:hover { color: rgb(220, 236, 247); } + +.ask-mainbar, #mainbar.ask-mainbar { width: 665px; } + +.ask-mainbar #excerpt, #mainbar.ask-mainbar #excerpt { box-sizing: border-b= +ox; width: 660px; } + +td.post-cell { padding-left: 10px; vertical-align: top; } + +td.answercell { vertical-align: top; } + +.flag-quality-warning { background-color: rgb(244, 234, 234); padding: 5px;= + } + +.flag-quality-warning pre, .flag-quality-warning pre code { background-colo= +r: inherit; } + +.flag-quality-warning .hidden-deleted-answer a, .flag-quality-warning .hidd= +en-deleted-question a { font-weight: bold; text-decoration: underline; } + +.flag-quality-warning .comments .comment:hover { background-color: rgb(244,= + 234, 234); } + +.flag-quality-warning .comments .deleted-comment, .flag-quality-warning .co= +mments .deleted-comment:hover { background-color: rgb(232, 221, 220); } + +.flag-quality-warning .comments .deleted-comment .deleted-comment-info, .fl= +ag-quality-warning .comments .deleted-comment:hover .deleted-comment-info {= + color: rgb(170, 71, 70); } + +.flag-quality-warning .comments .deleted-comment .undelete-comment, .flag-q= +uality-warning .comments .deleted-comment:hover .undelete-comment { display= +: none; } + +.nowrap { white-space: nowrap; } + +code { white-space: pre-wrap; padding: 1px 5px; } + +pre code { white-space: inherit; padding: 0px; } + +.user-timeline-deleted-action { display: block; color: rgb(106, 115, 124); = +font-size: 11px; } + +.expandable-question-summary { float: none; } + +.expandable-question-summary:not(.is-expanded) { position: relative; } + +.expandable-question-summary:not(.is-expanded) .expandable-question-summary= +__body { height: 100px; overflow: hidden; position: relative; } + +.expandable-question-summary:not(.is-expanded) .expandable-question-summary= +__body::after { content: ""; display: block; position: absolute; height: 50= +%; left: 0px; bottom: 0px; right: 0px; background: linear-gradient(rgba(255= +, 255, 255, 0), rgb(255, 255, 255)) left center repeat; } + +.tag-sponsorship { height: 135px; overflow: hidden; width: 100%; padding-bo= +ttom: 5px; } + +.disabled-link { color: rgb(132, 141, 149); opacity: 0.6; padding: 0px 3px = +2px; } + +.disabled-button { opacity: 0.6; cursor: default !important; } + +.show-votes .sidebar-linked .spacer, .show-votes .sidebar-related .spacer {= + margin-bottom: 12px; display: flex; } + +.show-votes .sidebar-linked .spacer > a:first-child, .show-votes .sidebar-r= +elated .spacer > a:first-child { padding-right: 10px; } + +.show-votes .sidebar-linked .spacer > a:first-child .answer-votes, .show-vo= +tes .sidebar-related .spacer > a:first-child .answer-votes { padding: 3px 0= +px; white-space: nowrap; width: 38px; text-align: center; box-sizing: borde= +r-box; height: auto; float: none; border-radius: 2px; font-size: 90%; backg= +round-color: rgb(239, 240, 241); color: rgb(60, 65, 70); transform: transla= +teY(-1px); } + +.show-votes .sidebar-linked .spacer > a:first-child .answer-votes.answered-= +accepted, .show-votes .sidebar-related .spacer > a:first-child .answer-vote= +s.answered-accepted { color: rgb(255, 255, 255); background-color: rgb(94, = +186, 125); } + +.show-votes .sidebar-linked .spacer > a:first-child .answer-votes.extra-lar= +ge, .show-votes .sidebar-related .spacer > a:first-child .answer-votes.extr= +a-large, .show-votes .sidebar-linked .spacer > a:first-child .answer-votes.= +large, .show-votes .sidebar-related .spacer > a:first-child .answer-votes.l= +arge { padding: 3px 0px; min-width: 16px; } + +.show-votes .sidebar-linked .spacer > a.question-hyperlink, .show-votes .si= +debar-related .spacer > a.question-hyperlink { display: inline-block; paddi= +ng-top: 2px; width: calc(100% - 48px); margin-bottom: 0px; } + +.comments .deleted-comment, .comments .deleted-comment:hover { background-c= +olor: rgb(244, 234, 234); } + +.comments .deleted-comment .deleted-comment-info { color: rgb(182, 84, 84);= + display: block; text-align: right; } + +.comments .deleted-comment .deleted-comment-info a { text-decoration: none;= + border-bottom: 0px; } + +.deleted-answer { background-color: rgb(244, 234, 234); } + +.deleted-answer pre, .deleted-answer pre code { background-color: inherit; = +} + +.deleted-answer .hidden-deleted-answer a, .deleted-answer .hidden-deleted-q= +uestion a { font-weight: bold; text-decoration: underline; } + +.deleted-answer .comments .comment:hover { background-color: rgb(244, 234, = +234); } + +.deleted-answer .comments .deleted-comment, .deleted-answer .comments .dele= +ted-comment:hover { background-color: rgb(232, 221, 220); } + +.deleted-answer .comments .deleted-comment .deleted-comment-info, .deleted-= +answer .comments .deleted-comment:hover .deleted-comment-info { color: rgb(= +170, 71, 70); } + +.deleted-answer .comments .deleted-comment .undelete-comment, .deleted-answ= +er .comments .deleted-comment:hover .undelete-comment { display: none; } + +.deleted-answer-info { color: rgb(182, 84, 84); margin-top: 10px; margin-le= +ft: 3px; } + +.comment-date, .comment-date > a, .comment-date > a:hover { border-bottom: = +none; color: rgb(145, 153, 161); } + +.existing-flag-count::before { content: "("; } + +.existing-flag-count::after { content: ")"; } + +.popup-submit { float: right; } + +.popup-cancel { float: left; } + +.popup-close { float: right; } + +.popup-close a { padding: 3px 6px 2px; font-size: 16px; font-weight: normal= +; background-color: rgb(12, 13, 14); font-family: Arial, Helvetica, sans-se= +rif; line-height: 1; color: rgb(255, 255, 255) !important; } + +.popup-close a:hover { text-decoration: none; } + +#popup-close-question { width: 800px; } + +#popup-close-question #close-question-form { overflow: hidden; } + +#popup-close-question #close-question-form.close-question-voted label span = +{ cursor: default !important; } + +#popup-close-question #close-question-form.close-question-voted input[type= +=3D"submit"] { visibility: hidden; } + +#popup-close-question .action-list > li { width: auto; } + +#popup-close-question .popup-pane, #popup-close-question .popup-subpane { m= +in-height: 430px; } + +#popup-close-question .bounty-indicator-tab { margin-left: 3px; } + +#popup-close-question .popup-actions { text-align: right; margin-bottom: 2p= +x; } + +#popup-close-question .popup-actions .last-flag-details, #popup-close-quest= +ion .popup-actions .remaining-votes { padding-right: 30px; } + +#popup-close-question .popup-actions .last-flag-details { display: inline-b= +lock; line-height: 17px; text-align: left; } + +#popup-close-question .popup-actions .popup-submit { float: none; } + +.close-as-duplicate-pane .search-prompt { font-weight: bold; } + +.close-as-duplicate-pane .search-errors { color: rgb(153, 0, 0); text-align= +: left; font-weight: bold; font-size: 13px; height: 13px; margin: 4px 0px; = +} + +.close-as-duplicate-pane .original-display { margin: 13px 0px; } + +.close-as-duplicate-pane .original-display .navi-container { font-weight: b= +old; color: rgb(47, 51, 55); margin-bottom: 7px; } + +.close-as-duplicate-pane .original-display .navi-container .navi { display:= + inline-block; margin-right: 5px; } + +.close-as-duplicate-pane .original-display .preview { height: 310px; overfl= +ow-y: auto; border: 1px solid rgb(159, 166, 173); padding: 7px 0px; } + +.close-as-duplicate-pane .original-display .preview .show-original .show-ti= +tle { font-size: 16px; margin: 3px 0px 10px; } + +.close-as-duplicate-pane .original-display .preview .show-original .answer-= +count { font-size: 14px; font-weight: bold; border-bottom: 1px solid var(--= +black-300); padding: 5px; margin: 0px 3px 0px 5px; } + +.close-as-duplicate-pane .original-display .preview .show-original .answer = +{ border-bottom-color: var(--black-150); } + +.close-as-duplicate-pane .original-display .list-originals { height: 310px;= + overflow-y: auto; border: 1px solid rgb(159, 166, 173); padding: 7px 0px; = +} + +.close-as-duplicate-pane .original-display .list-originals .list { padding:= + 0px 8px; } + +.close-as-duplicate-pane .original-display .list-originals .list .item { fl= +oat: left; padding: 9px 5px 9px 0px; border-bottom: 1px solid var(--black-1= +00); cursor: pointer; } + +.close-as-duplicate-pane .original-display .list-originals .list .item:last= +-child { border-bottom: 0px; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .sta= +ts { float: left; margin: 0px 10px 0px 0px; background: rgb(239, 240, 241);= + padding: 4px 7px 6px; width: 58px; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .sum= +mary { width: 605px; float: left; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .pos= +t-link { font-weight: bold; font-size: 14px; margin-bottom: 5px; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .pos= +t-link a:hover { border-bottom: 0px; text-decoration: none !important; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .bou= +nty-indicator-tab { margin-left: 3px; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .pos= +t-type-abbr { font-weight: bold; } + +.close-as-duplicate-pane .original-display .list-originals .list .item .vot= +es-and-usages { color: rgb(145, 153, 161); } + +.close-as-duplicate-pane .original-display .list-originals .list .item .bod= +y-summary { line-height: 15px; color: rgb(47, 51, 55); } + +.close-as-duplicate-pane .original-display .list-originals .list .item.hove= +r { background-color: rgb(228, 230, 232); } + +.close-as-duplicate-pane .original-display .list-originals .list .item.hove= +r .stats { background-color: rgb(228, 230, 232); } + +.close-as-off-topic-pane .action-name { display: inline-block; width: 650px= +; max-width: 100%; vertical-align: top; font-weight: normal !important; } + +.close-as-off-topic-pane .action-name a { vertical-align: top; } + +.close-as-off-topic-pane .edit-link { font-size: 11px; display: block; marg= +in-top: 20px; } + +.close-as-off-topic-pane .off-topic-other-comment-container { display: none= +; margin-top: 15px; } + +.close-as-off-topic-pane .off-topic-other-comment-container > div { display= +: inline-block; } + +.close-as-off-topic-pane .off-topic-other-comment-container > div:first-chi= +ld { margin: 0px 5px 0px 21px; vertical-align: top; } + +.close-as-off-topic-pane .off-topic-other-comment-container textarea { marg= +in-bottom: 4px; height: 5em; width: 470px; max-width: 100%; resize: vertica= +l; } + +.close-as-off-topic-pane .off-topic-other-comment-container .text-counter {= + display: block; margin-bottom: 9px; } + +.migration-pane .migration-targets td { vertical-align: middle; } + +.migration-pane .migration-targets .target-icon { min-width: 58px; min-heig= +ht: 58px; } + +.migration-pane .migration-targets .target-icon img { width: 58px; height: = +58px; } + +.popup-tab-content { clear: both; } + +.action-list:not(.popup-condensed) { margin-right: 5px; margin-left: 5px !i= +mportant; margin-bottom: 10px !important; } + +.action-list:not(.popup-condensed) > li { width: 650px; max-width: 100%; } + +.action-list:not(.popup-condensed) li { list-style-type: none; padding: 6px= +; } + +.action-list:not(.popup-condensed) li > label { display: block; margin: 5px= + 0px; } + +.popup._hidden-descriptions .action-list:not(.popup-condensed) li > label {= + margin: 0px; } + +.action-list:not(.popup-condensed) input[type=3D"radio"] { margin-right: 1p= +x; margin-top: 1px; } + +.action-list:not(.popup-condensed) .action-desc, .action-list:not(.popup-co= +ndensed) .action-name { cursor: pointer; margin-left: 5px; } + +.action-list:not(.popup-condensed) .action-disabled-reason-muted { color: r= +gb(106, 115, 124); margin-left: 18px; } + +.action-list:not(.popup-condensed) .action-name { font-weight: bold; font-s= +ize: 105%; vertical-align: top; } + +.action-list:not(.popup-condensed) .action-desc { display: block; color: rg= +b(106, 115, 124); line-height: 115%; padding: 0px 0px 0px 18px; margin-top:= + -17px; } + +.action-list:not(.popup-condensed) .action-desc p:last-child { margin-botto= +m: 0px; } + +.action-list:not(.popup-condensed) .action-subform p:last-child { margin-bo= +ttom: 1em; } + +.action-list:not(.popup-condensed) .action-name ~ .action-desc { padding-to= +p: 23px; } + +.action-list:not(.popup-condensed) .action-disabled span { color: rgb(145, = +153, 161); font-weight: normal; cursor: default !important; } + +.action-list:not(.popup-condensed) .action-selected { background-color: rgb= +(228, 230, 232); } + +.action-list:not(.popup-condensed) .action-subform { display: none; margin:= + 15px auto; width: 535px; max-width: 100%; } + +.action-list:not(.popup-condensed) .action-subform .wide { width: 400px; } + +.action-list:not(.popup-condensed) h4 { margin-bottom: 5px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .responsively-horizont= +ally-centered-legacy-popup { width: 800px; margin: 0px auto; max-width: 90v= +w !important; left: 0px !important; right: 0px !important; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .responsively-horizontally-c= +entered-legacy-popup { width: 800px; margin: 0px auto; max-width: 90vw !imp= +ortant; left: 0px !important; right: 0px !important; } +} + +@media print { + .responsively-horizontally-centered-legacy-popup { width: 800px; margin: = +0px auto; max-width: 90vw !important; left: 0px !important; right: 0px !imp= +ortant; } +} + +.special-status { padding-bottom: 10px; } + +.wide-tag-col { width: 230px; } + +#tags-table .answer-votes { margin-right: 5px; width: 25px; margin-top: 2px= +; display: inline-block; float: none; } + +#tags-browser { width: 100%; } + +#overlay-header { opacity: 0; display: none; background: rgba(255, 255, 255= +, 0.95); font-size: 16px; font-weight: normal; text-align: center; left: 0p= +x; padding: 0.5em 10%; position: fixed; top: 0px; width: 100%; z-index: 505= +2; box-shadow: rgba(12, 13, 14, 0.3) 0px 1px 5px; } + +#overlay-header .close-overlay { color: rgb(145, 153, 161); cursor: pointer= +; font-size: 12px; font-weight: normal; } + +.mod-post-actions { padding: 2px; line-height: 20px; } + +.bounty-indicator-tab.flagbg { background-color: red !important; } + +.timeline-answers { color: rgb(83, 90, 96); } + +.answer-votes { cursor: pointer; } + +.answer-votes.large { font-size: 90%; padding-top: 4px; padding-bottom: 2px= +; } + +.answer-votes.extra-large { font-size: 90%; padding-top: 4px; padding-botto= +m: 2px; min-width: 32px; } + +.quality-score { font-size: 80%; margin-right: 10px; } + +table.full-diff td { border: none; vertical-align: top; } + +.revision-comment.blur { color: rgb(145, 153, 161); } + +.revision-comment { line-height: 20px; } + +.suggested-edit { width: 960px; } + +.suggested-edit .summary { width: 910px; } + +.suggested-edit .score { display: block; background: rgb(239, 240, 241); pa= +dding: 8px 8px 6px; color: rgb(83, 90, 96); font-size: 120%; font-weight: b= +old; margin-bottom: 30px; text-decoration: none; text-align: center; width:= + 15px; } + +.suggested-edit .revision { display: block; margin-bottom: 8px; } + +.suggested-edit .revision-comment { padding-right: 8px; } + +.suggested-edit .diff-choices { margin-top: 0px; margin-bottom: 20px; } + +.suggested-edit .body-diffs { margin-top: 18px; } + +.suggested-edit .body-diffs td { vertical-align: top; } + +.suggested-edit .body-diffs table { table-layout: fixed; width: 900px; } + +.suggested-edit .body-diffs .full-diff .content { font-family: Consolas, Me= +nlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bits= +tream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 12p= +x; } + +.suggested-edit .body-diffs .full-diff td { margin-right: 5px; border-left:= + 4px solid rgb(255, 255, 255); border-right: 4px solid rgb(255, 255, 255); = +} + +.suggested-edit .body-diffs .full-diff td.content { width: 435px; max-width= +: 435px; overflow-wrap: break-word; white-space: pre-wrap; color: rgb(145, = +153, 161); } + +.suggested-edit .body-diffs .full-diff .deleted > div { background-color: r= +gb(255, 244, 244); } + +.suggested-edit .body-diffs .full-diff .inserted > div { background-color: = +rgb(249, 255, 225); } + +.suggested-edit .body-diffs .full-diff td.content.deleted, .suggested-edit = +.body-diffs .full-diff td.content.inserted { background-color: transparent;= + color: inherit; } + +.suggested-edit .body-diffs .full-diff .skip { text-align: center; padding:= + 10px; background-color: rgb(239, 240, 241); color: rgb(159, 166, 173); bor= +der-top: 4px solid rgb(255, 255, 255); border-bottom: 4px solid rgb(255, 25= +5, 255); } + +.suggested-edit .body-diffs .full-html-diff .post-text { width: 435px; max-= +width: 435px; overflow-wrap: break-word; } + +.suggested-edit .body-diffs .full-html-diff .post-text img { max-width: 430= +px; } + +.suggested-edit .body-diffs .full-html-diff .gutter { width: 30px; max-widt= +h: 30px; } + +.suggested-edit .body-diffs .full-html-diff th { color: rgb(145, 153, 161);= + padding: 6px 0px 4px; } + +.suggested-edit .user-info-actions { width: 900px; } + +.suggested-edit .user-info-actions .started { float: none !important; } + +.suggested-edit .user-info-actions .current-owner { width: 445px; } + +.suggested-edit .user-info-actions .gutter { width: 7px; } + +.suggested-edit .user-info-actions .actions { text-align: right; } + +.suggested-edit .user-info-actions .form-error { padding: 15px 0px 5px; dis= +play: none; } + +.popup-suggested-edit { padding-top: 5px; } + +.popup-suggested-edit .popup-controls { text-align: right; } + +.popup-suggested-edit .handle { display: inline-block; width: 965px; height= +: 20px; } + +.popup-suggested-edit .popup-close { float: none; display: inline-block; } + +.popup-suggested-edit .suggested-edit-container { overflow: auto; width: 99= +0px; } + +.lightbox { display: none; background: rgb(12, 13, 14); opacity: 0.7; posit= +ion: absolute; top: 0px; left: 0px; min-width: 100%; z-index: 8950; } + +.lightbox-panel { display: none; z-index: 1001; border: 0px !important; } + +.comment-help { background-color: rgb(254, 250, 226); border: 1px solid rgb= +(243, 238, 213); } + +.comment-help { margin-top: 5px; padding: 5px; max-width: 465px; } + +.comment-help p:last-child { margin-bottom: 0px; } + +.comment-help { color: rgb(12, 13, 14); } + +table.flagged-posts tr.messageDivider > td { border-top: 1px solid rgb(159,= + 166, 173); padding: 10px 5px; } + +table.flagged-posts tr.messageDivider > td > div > div, table.flagged-posts= + tr.messageDivider > td > div > div > div, table.flagged-posts tr.messageDi= +vider > td > div { padding-top: 0px; padding-bottom: 3px; } + +table.flagged-posts tr.messageDivider > td div.mod-audit-user-info { paddin= +g: 3px; } + +table.flagged-posts .delete-options > input:hover { cursor: pointer; } + +table.flagged-posts .mod-message td { padding: 4px 5px; } + +table.flagged-posts .mod-message .post-list li { list-style: none; } + +table.flagged-posts .messageDivider > .tagged-ignored:hover { opacity: 1; } + +table.flagged-posts tr.loaded-body > td { border-top: 1px dotted rgb(159, 1= +66, 173); } + +table.flagged-posts .comments .flagcell { width: 28px; text-align: center; = +} + +table.flagged-posts .comments tr.message-divider > td { padding-top: 4px; } + +table.flagged-posts .comments .bounty-indicator-tab { margin-right: 0px; } + +table.flagged-posts .comments .comment-score span { padding-right: 0px; } + +table.flagged-posts tr.loaded-body > td:empty, table.flagged-posts tr.messa= +geDivider:first-child > td { border-top: 0px none transparent; } + +table.flagged-posts .answer-summary { padding-left: 0px; } + +table.flagged-posts .answer-link { margin-top: 0px; padding-left: 0px; } + +table.flagged-posts .bounty-indicator-tab { line-height: 17px; margin-left:= + 0px; } + +table.flagged-posts td.messageTime { width: 100px; } + +table.flagged-posts .relativetime { color: rgb(132, 141, 149); font-weight:= + normal; } + +table.flagged-posts .relativetime.old { color: rgb(12, 13, 14); } + +table.flagged-posts .flag-issue { vertical-align: top; } + +table.flagged-posts td.flag-issue { padding-left: 0px; } + +table.flagged-posts div.flag-issue { text-align: left; } + +table.flagged-posts .popup { background: rgb(255, 255, 255); } + +table.flagged-posts .post-text { width: auto; } + +table.flagged-posts div.post-header .answer-link { width: auto; } + +table.flagged-posts .answer-votes.default, table.flagged-posts .answer-vote= +s.large { padding-bottom: 3px; padding-top: 2px; } + +table.flagged-posts .fullhide { display: none; } + +table.flagged-posts .delete-options { float: right; padding-right: 10px; } + +table.flagged-posts .dismiss-options { float: left; } + +table.flagged-posts .dismiss-options, table.flagged-posts .post-options { p= +adding-top: 0px !important; padding-bottom: 0px !important; } + +table.flagged-posts .spacer { clear: left; } + +table.flagged-posts .answer, table.flagged-posts .question-summary { border= +-bottom: none; width: auto; } + +table.flagged-posts .mod-audit { width: 193px; padding-left: 8px; } + +table.flagged-posts .mod-audit .mod-post-actions { display: inline-block; } + +table.flagged-posts .mod-post-actions { background-color: maroon; color: rg= +b(255, 255, 255); } + +table.flagged-posts .mod-message { line-height: 17px; } + +table.flagged-posts .mod-message, table.flagged-posts .mod-post-header, tab= +le.flagged-posts div.post-header, table.flagged-posts div.post-summary { ov= +erflow-wrap: break-word; } + +table.flagged-posts .mod-post-header { margin: 0px; padding: 0px 0px 8px; w= +idth: 100%; } + +table.flagged-posts .mod-post-header .post-detail, table.flagged-posts .mod= +-post-header .post-header, table.flagged-posts .mod-post-header .post-summa= +ry { max-width: 715px; } + +table.flagged-posts .post-text pre { width: 650px; } + +table.flagged-posts .post-summary-body { width: 500px; line-height: 16px; o= +verflow-wrap: break-word; } + +div.form-field-error.form-error { font-size: 12px; display: block; margin-t= +op: -15px; } + +#hot-network-questions h4 a { font-weight: inherit; font-size: inherit; wid= +th: inherit; } + +#hot-network-questions ul { margin: 0px; } + +#hot-network-questions li { list-style-type: none; white-space: nowrap; mar= +gin-bottom: 10px; margin-left: 0px; } + +#hot-network-questions .favicon, #hot-network-questions a, #hot-network-que= +stions img { display: inline-block; vertical-align: top; } + +#hot-network-questions .favicon, #hot-network-questions img { margin: 2px 6= +px 0px 0px; } + +#hot-network-questions a { font-weight: normal; font-size: 12px; white-spac= +e: normal; width: 90%; } + +#hot-network-questions .show-more { margin-left: 22px; } + +.questions-page .show-more, .tagged-questions-page .show-more, .tags-page .= +show-more { display: block; margin: 5px 0px; } + +.more-arrow { display: block; margin-top: 5px; } + +.tag-editor { cursor: text; background-color: rgb(255, 255, 255); position:= + relative; overflow: hidden; white-space: normal; height: auto !important; = +min-height: 37px !important; padding-top: 2px !important; padding-bottom: 2= +px !important; } + +.tag-editor .rendered-element { margin: 2px; font-size: 12px; } + +.tag-editor input { margin: 0px 3px; height: 25px; border: none !important;= + box-shadow: none !important; outline: 0px !important; padding: 0px !import= +ant; background-color: transparent !important; } + +.tag-editor input[type=3D"text"] { margin: 0px; height: 29px; box-sizing: c= +ontent-box; } + +.tag-editor input[type=3D"text"]:not([placeholder=3D""]) { min-width: 100%;= + font-size: 13px; } + +.tag-editor:not(.s-input) { border: 1px solid rgb(200, 204, 208); } + +.tag-editor:not(.s-input) span:not(:empty) + input { padding-left: 4px !imp= +ortant; } + +.tag-editor.s-input { padding-left: 2px !important; } + +.tag-editor.s-input input { padding-left: calc(0.7em - 2px) !important; } + +.tag-editor.s-input span:not(:empty) + input { padding-left: 4px !important= +; } + +#tagnames { width: 100%; } + +.tag-suggestions { background-color: rgb(255, 255, 255); border: 1px solid = +rgb(106, 115, 124); padding: 5px; z-index: 300; } + +.tag-suggestions > div { padding: 5px; width: 200px; overflow: hidden; floa= +t: left; position: relative; cursor: pointer; } + +.tag-suggestions > div:focus { background-color: rgb(252, 223, 200); } + +.tag-suggestions > div:focus .more-info { background-color: rgb(252, 223, 2= +00); } + +.tag-suggestions > div:hover { background-color: rgb(253, 236, 222); } + +.tag-suggestions > div:hover .more-info { background-color: rgb(253, 236, 2= +22); } + +.tag-suggestions > div p { font-size: 11px; line-height: 1.15385; } + +.tag-suggestions > div p.more-info { visibility: hidden; position: absolute= +; margin-bottom: 0px; right: 5px; top: 7px; padding: 3px; } + +.tag-suggestions > div p.more-info a { text-indent: -9999em; width: 16px; h= +eight: 16px; border: 1px solid rgb(132, 141, 149); box-sizing: border-box; = +border-radius: 50%; display: inline-block; position: relative; transition: = +none 0s ease 0s; } + +.tag-suggestions > div p.more-info a::after, .tag-suggestions > div p.more-= +info a::before { content: ""; width: 2px; height: 2px; position: absolute; = +left: 6px; top: 3px; display: inline-block; background-color: rgb(132, 141,= + 149); } + +.tag-suggestions > div p.more-info a::after { top: 6px; height: 5px; } + +.tag-suggestions > div p.more-info a:hover { border-color: rgb(0, 119, 204)= +; } + +.tag-suggestions > div p.more-info a:hover::after, .tag-suggestions > div p= +.more-info a:hover::before { background-color: rgb(0, 119, 204); } + +.tag-suggestions > div:focus p.more-info, .tag-suggestions > div:hover p.mo= +re-info { visibility: visible; } + +.tag-suggestions .match { font-weight: bold; text-decoration: underline; } + +.search-prompt { padding-right: 3px; } + +.tools-rev-dim-link { color: rgb(159, 166, 173) !important; } + +.tools-rev h1 .lsep { color: rgb(214, 217, 220); visibility: visible; font-= +size: 100%; margin-left: 5px; margin-right: 5px; } + +.diff-skipped > div { border-bottom: 2px dotted rgb(208, 208, 208); } + +.diff-skipped { padding: 4px 0px 8px; cursor: pointer; } + +.diff-choices { margin: 15px 0px; overflow: hidden; } + +.diff-choices a { float: left; height: 26px; display: block; border: 1px so= +lid rgb(255, 255, 255); background-position: 2px 4px; padding-top: 5px; pad= +ding-right: 6px; margin-right: 20px; } + +.diff-choices a.selected, .diff-choices a.selected:hover { border: 1px soli= +d rgb(200, 204, 208); background-color: rgb(239, 240, 241); } + +.diff-choices a:hover { border: 1px solid rgb(214, 217, 220); background-co= +lor: rgb(228, 230, 232); } + +.diff-choices a { background-repeat: no-repeat; } + +.diff-choices a.selected, .diff-choices a.selected:hover { border: 1px soli= +d rgb(200, 204, 208); background-color: rgb(228, 230, 232); } + +.diff-choices a:hover { border: 1px solid rgb(214, 217, 220); background-co= +lor: rgb(239, 240, 241); } + +.diff-choices .inline-html-diff { background-image: url("../../Img/diff-ico= +ns/inline-html.png?v=3D104a656237a9"); padding-left: 23px; } + +.diff-choices .sidebyside-html-diff { background-image: url("../../Img/diff= +-icons/sidebyside-html.png?v=3D724bc8e2771d"); padding-left: 37px; } + +.diff-choices .sidebyside-markdown-diff { background-image: url("../../Img/= +diff-icons/sidebyside-markdown.png?v=3D9565c3d3b581"); padding-left: 37px; = +} + +a.bounty-link { padding: 0px 3px 2px; } + +.comment-form form { position: relative; } + +#tabcomplete { position: absolute; top: -17px; margin-left: 5px; } + +#tabcomplete li { display: inline; background-color: rgb(255, 255, 255); co= +lor: rgb(12, 13, 14); padding: 2px; margin-right: 5px; border: 1px solid rg= +b(132, 141, 149); cursor: pointer; } + +#tabcomplete li.chosen { font-weight: bold; } + +.comments { -webkit-tap-highlight-color: rgba(255, 255, 255, 0); } + +span.highlight { background-color: rgb(255, 255, 119); } + +textarea { resize: none; } + +.new-post-activity, .new-answer-activity { background-color: rgba(12, 13, 1= +4, 0.05); } + +.post-section-title { font-weight: bold; font-size: 120%; } + +.ask-advice-search-container .search-title { width: 85%; } + +.similar-questions { height: 200px; } + +#tags-legend { margin-top: 20px; } + +#tags-legend span { padding-left: 4px; } + +#tags-legend a.post-tag { cursor: default; } + +#tags-legend a.tag-synonym-link { font-weight: bold; } + +.title-search-float { border: 1px solid rgb(12, 13, 14); z-index: 99; backg= +round: rgb(255, 255, 255); } + +.title-search-container { max-height: 150px; overflow: hidden scroll; } + +.title-float-selected { background-color: rgb(0, 255, 255); height: 24px; } + +.title-loading { background-image: url("../../img/progress-dots.gif?v=3D679= +ddd617b7d"); background-repeat: no-repeat; background-position: right cente= +r; } + +#show-editor-button { margin-bottom: 8px; } + +.ask-page .privacy-policy-agreement, .question-page .privacy-policy-agreeme= +nt { margin-top: 15px; } + +@media screen and (min-width: 1050px) { + .wide\:bg-image-ask-v2 { background-image: url("../../img/ask/background.= +svg?v=3D2e9a8205b368"); } + .wide\:h-ask-v2-background { height: 130px; } +} + +.newsletter-popup .privacy-policy-agreement { margin-top: 15px; font-size: = +90%; } + +.privacy-policy-agreement { font-style: italic; } + +body.read-only .login-link { opacity: 0.3; } + +body.read-only #question-header .btn, body.read-only #questions-count .btn,= + body.read-only .askquestion { opacity: 0.3; } + +body.read-only .star-off, body.read-only .vote-down-off, body.read-only .vo= +te-up-off { opacity: 0.3; cursor: not-allowed; } + +.text-description { color: rgb(106, 115, 124); font-size: 13px; } + +.review-bar-container { margin-top: 15px; } + +.review-bar-container .review-bar { display: flex; flex-wrap: wrap; border:= + 1px solid rgb(200, 204, 208); padding: 5px 0px; margin-bottom: 25px; backg= +round-color: rgba(255, 255, 255, 0.95); box-shadow: rgba(200, 204, 208, 0.8= +) 1px 1px 1px; z-index: 10; } + +.review-bar-container .review-bar .review-summary { margin-top: 10px; flex:= + 0 1 50%; } + +.review-bar-container .review-bar .review-summary .review-instructions, .re= +view-bar-container .review-bar .review-summary .review-summary-toggle { mar= +gin-left: 8px; } + +.review-bar-container .review-bar .review-instructions, .review-bar-contain= +er .review-bar .review-more-instructions { line-height: 1.3em; } + +.review-bar-container .review-bar .review-results .relativetime { font-weig= +ht: normal; } + +.review-bar-container .review-bar .review-actions-container { flex: 0 10 50= +%; text-align: right; } + +.review-bar-container .review-bar .review-actions-container .review-actions= + { margin-right: 10px; } + +.review-bar-container .review-bar .review-actions-container .review-actions= + input { margin-left: 10px; } + +.review-bar-container .review-bar .review-more-instructions { border-top: 1= +px solid rgb(200, 204, 208); margin-top: 5px; padding: 10px 10px 0px; flex:= + 0 1 100%; } + +.review-bar-container .review-bar .review-instructions-reason { margin-bott= +om: 10px; padding: 10px; background-color: rgb(239, 240, 241); } + +.review-bar-container .review-bar .rejection-reason { margin: 6px 0px 10px = +10px; } + +.review-bar-container .review-bar .review-status { margin-bottom: 5px; } + +.review-post-author-guidance { background: rgb(255, 247, 229); border: 1px = +solid rgba(83, 90, 96, 0.1); padding: 10px; } + +.review-post-author-guidance p:last-child { margin-bottom: 0px; } + +.facebook-login, .facebook-login:hover { color: rgb(255, 255, 255); backgro= +und-color: rgb(57, 86, 151); } + +.auth-shadow { box-shadow: rgba(0, 0, 0, 0.05) 0px 10px 25px, rgba(0, 0, 0,= + 0.05) 0px 20px 48px, rgba(0, 0, 0, 0.1) 0px 1px 4px; } + +.module { overflow-wrap: break-word; } + +.module p.took-ms { font-size: 0.9em; } + +.module p.side-desc { margin-bottom: 0.1em; } + +#tag-suggestions { min-height: 30px; margin-bottom: 10px; } + +#tag-suggestions .post-tag { margin-right: 6px; } + +#tag-suggestions span.post-tag { opacity: 0.5; } + +.general-error { color: rgb(192, 72, 72); font-weight: bold; margin-bottom:= + 10px; } + +.general-success { color: rgb(68, 180, 73); font-weight: bold; margin-botto= +m: 10px; } + +.validation-error { border-color: rgb(192, 72, 72) !important; } + +.val-message { margin: 24px auto; padding: 32px; width: 100%; max-width: 64= +0px; border: 1px solid transparent; color: rgb(36, 39, 41); text-align: cen= +ter; } + +.val-message p { margin-bottom: 0.5em; padding-left: 12px; padding-right: 1= +2px; font-size: 15px; line-height: 1.26667; } + +.val-message p:last-of-type { margin-bottom: 0px; } + +.val-message .val--title { margin-bottom: 0.57em; font-size: 21px; line-hei= +ght: 1.26667; } + +.val-message .val--icon { width: 36px; height: 36px; color: rgb(72, 168, 10= +4); } + +.val-textemphasis { font-weight: 700; margin-top: 12px; } + +.val-success { background-color: rgb(238, 248, 241); border-color: rgb(130,= + 202, 154); } + +.val-success .val--title { color: rgb(72, 168, 104); } + +.val-error { background-color: rgb(253, 243, 244); border-color: rgb(222, 8= +3, 94); } + +.val-info { background-color: rgb(253, 247, 227); border-color: rgb(221, 18= +2, 36); } + +.message.message-error { z-index: 3000; display: none; color: rgb(249, 236,= + 237); background-color: rgb(192, 72, 72); text-align: left; width: auto; f= +ont-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 13px= +; line-height: 1.26667; } + +.message.message-error.message-dismissable { cursor: pointer; } + +.message.message-error a:not(.badge-tag):not(.button):not(.btn):not(.post-t= +ag) { color: rgb(255, 255, 255); text-decoration: underline; } + +.message.message-error ul { margin: 0px 0px 0px 15px; padding: 0px; } + +.message.message-error ul li { margin: 0px 0px 5px; padding: 0px; } + +.message.message-error ul li:last-child { margin-bottom: 0px; } + +.message.message-error code { background: transparent; } + +.message.message-error .message-inner { position: relative; } + +.message.message-error .message-tip::before { content: ""; position: absolu= +te; border-width: 9px; border-style: solid; border-color: transparent; } + +.message.message-error .message-tip-top-center::before { top: -9px; left: 5= +0%; border-top-width: 0px; border-bottom-color: rgb(192, 72, 72); } + +.message.message-error .message-tip-left-top::before { top: 0px; left: -9px= +; border-bottom-width: 0px; border-right-width: 0px; border-top-color: rgb(= +192, 72, 72); } + +.message.message-error .message-tip-top-left::before { top: -9px; left: 0px= +; border-bottom-width: 0px; border-right-width: 0px; border-left-color: rgb= +(192, 72, 72); } + +.message.message-error .message-tip-left-bottom::before { bottom: 0px; left= +: -9px; border-bottom-width: 0px; border-left-width: 0px; border-right-colo= +r: rgb(192, 72, 72); } + +.message.message-error .message-tip-bottom-left::before { top: 100%; left: = +0px; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rg= +b(192, 72, 72); } + +.message.message-error .message-tip-right-top::before { top: 0px; left: 100= +%; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rgb(= +192, 72, 72); } + +.message.message-error .message-tip-top-right::before { top: -9px; right: 0= +px; border-bottom-width: 0px; border-left-width: 0px; border-right-color: r= +gb(192, 72, 72); } + +.message.message-error .message-tip-right-bottom::before { bottom: 0px; lef= +t: 100%; border-bottom-width: 0px; border-right-width: 0px; border-left-col= +or: rgb(192, 72, 72); } + +.message.message-error .message-tip-bottom-right::before { top: 100%; right= +: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-color:= + rgb(192, 72, 72); } + +.message.message-error .message-tip-bottom-center::before { top: 100%; left= +: 50%; border-bottom-width: 0px; border-top-color: rgb(192, 72, 72); } + +.message.message-error .message-text { padding: 12px; } + +.message.message-error .message-close { box-sizing: border-box; float: righ= +t; margin-top: 8px; margin-right: 8px; width: 24px; height: 24px; border: 1= +px solid rgba(255, 255, 255, 0.5); background-color: rgba(255, 255, 255, 0)= +; text-align: center; font-family: Arial, "Helvetica Neue", Helvetica, sans= +-serif; font-size: 16px; line-height: 24px; font-weight: 700; transition: a= +ll 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(255, 255, 255) != +important; } + +.message.message-error .message-close:hover { background-color: rgb(255, 25= +5, 255); border-color: rgb(255, 255, 255); color: rgb(192, 72, 72) !importa= +nt; } + +.message.message-error .popup-title-award { text-overflow: ellipsis; overfl= +ow: hidden; display: block; } + +.message.message-info { z-index: 3000; display: none; color: rgb(230, 244, = +255); background-color: rgb(0, 119, 221); text-align: left; width: auto; fo= +nt-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 13px;= + line-height: 1.26667; } + +.message.message-info.message-dismissable { cursor: pointer; } + +.message.message-info a:not(.badge-tag):not(.button):not(.btn):not(.post-ta= +g) { color: rgb(255, 255, 255); text-decoration: underline; } + +.message.message-info ul { margin: 0px 0px 0px 15px; padding: 0px; } + +.message.message-info ul li { margin: 0px 0px 5px; padding: 0px; } + +.message.message-info ul li:last-child { margin-bottom: 0px; } + +.message.message-info code { background: transparent; } + +.message.message-info .message-inner { position: relative; } + +.message.message-info .message-tip::before { content: ""; position: absolut= +e; border-width: 9px; border-style: solid; border-color: transparent; } + +.message.message-info .message-tip-top-center::before { top: -9px; left: 50= +%; border-top-width: 0px; border-bottom-color: rgb(0, 119, 221); } + +.message.message-info .message-tip-left-top::before { top: 0px; left: -9px;= + border-bottom-width: 0px; border-right-width: 0px; border-top-color: rgb(0= +, 119, 221); } + +.message.message-info .message-tip-top-left::before { top: -9px; left: 0px;= + border-bottom-width: 0px; border-right-width: 0px; border-left-color: rgb(= +0, 119, 221); } + +.message.message-info .message-tip-left-bottom::before { bottom: 0px; left:= + -9px; border-bottom-width: 0px; border-left-width: 0px; border-right-color= +: rgb(0, 119, 221); } + +.message.message-info .message-tip-bottom-left::before { top: 100%; left: 0= +px; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rgb= +(0, 119, 221); } + +.message.message-info .message-tip-right-top::before { top: 0px; left: 100%= +; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rgb(0= +, 119, 221); } + +.message.message-info .message-tip-top-right::before { top: -9px; right: 0p= +x; border-bottom-width: 0px; border-left-width: 0px; border-right-color: rg= +b(0, 119, 221); } + +.message.message-info .message-tip-right-bottom::before { bottom: 0px; left= +: 100%; border-bottom-width: 0px; border-right-width: 0px; border-left-colo= +r: rgb(0, 119, 221); } + +.message.message-info .message-tip-bottom-right::before { top: 100%; right:= + 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-color: = +rgb(0, 119, 221); } + +.message.message-info .message-tip-bottom-center::before { top: 100%; left:= + 50%; border-bottom-width: 0px; border-top-color: rgb(0, 119, 221); } + +.message.message-info .message-text { padding: 12px; } + +.message.message-info .message-close { box-sizing: border-box; float: right= +; margin-top: 8px; margin-right: 8px; width: 24px; height: 24px; border: 1p= +x solid rgba(255, 255, 255, 0.5); background-color: rgba(255, 255, 255, 0);= + text-align: center; font-family: Arial, "Helvetica Neue", Helvetica, sans-= +serif; font-size: 16px; line-height: 24px; font-weight: 700; transition: al= +l 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(255, 255, 255) !i= +mportant; } + +.message.message-info .message-close:hover { background-color: rgb(255, 255= +, 255); border-color: rgb(255, 255, 255); color: rgb(0, 119, 221) !importan= +t; } + +.message.message-info .popup-title-award { text-overflow: ellipsis; overflo= +w: hidden; display: block; } + +.message.message-warning { z-index: 3000; display: none; color: rgb(85, 74,= + 47); background-color: rgb(253, 214, 108); text-align: left; width: auto; = +font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 13p= +x; line-height: 1.26667; } + +.message.message-warning.message-dismissable { cursor: pointer; } + +.message.message-warning a:not(.badge-tag):not(.button):not(.btn):not(.post= +-tag) { color: rgb(0, 119, 204); text-decoration: underline; } + +.message.message-warning ul { margin: 0px 0px 0px 15px; padding: 0px; } + +.message.message-warning ul li { margin: 0px 0px 5px; padding: 0px; } + +.message.message-warning ul li:last-child { margin-bottom: 0px; } + +.message.message-warning code { background: transparent; } + +.message.message-warning .message-inner { position: relative; } + +.message.message-warning .message-tip::before { content: ""; position: abso= +lute; border-width: 9px; border-style: solid; border-color: transparent; } + +.message.message-warning .message-tip-top-center::before { top: -9px; left:= + 50%; border-top-width: 0px; border-bottom-color: rgb(253, 214, 108); } + +.message.message-warning .message-tip-left-top::before { top: 0px; left: -9= +px; border-bottom-width: 0px; border-right-width: 0px; border-top-color: rg= +b(253, 214, 108); } + +.message.message-warning .message-tip-top-left::before { top: -9px; left: 0= +px; border-bottom-width: 0px; border-right-width: 0px; border-left-color: r= +gb(253, 214, 108); } + +.message.message-warning .message-tip-left-bottom::before { bottom: 0px; le= +ft: -9px; border-bottom-width: 0px; border-left-width: 0px; border-right-co= +lor: rgb(253, 214, 108); } + +.message.message-warning .message-tip-bottom-left::before { top: 100%; left= +: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-color: = +rgb(253, 214, 108); } + +.message.message-warning .message-tip-right-top::before { top: 0px; left: 1= +00%; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rg= +b(253, 214, 108); } + +.message.message-warning .message-tip-top-right::before { top: -9px; right:= + 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-color:= + rgb(253, 214, 108); } + +.message.message-warning .message-tip-right-bottom::before { bottom: 0px; l= +eft: 100%; border-bottom-width: 0px; border-right-width: 0px; border-left-c= +olor: rgb(253, 214, 108); } + +.message.message-warning .message-tip-bottom-right::before { top: 100%; rig= +ht: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-colo= +r: rgb(253, 214, 108); } + +.message.message-warning .message-tip-bottom-center::before { top: 100%; le= +ft: 50%; border-bottom-width: 0px; border-top-color: rgb(253, 214, 108); } + +.message.message-warning .message-text { padding: 12px; } + +.message.message-warning .message-close { box-sizing: border-box; float: ri= +ght; margin-top: 8px; margin-right: 8px; width: 24px; height: 24px; border:= + 1px solid rgba(0, 119, 204, 0.5); background-color: rgba(0, 119, 204, 0); = +text-align: center; font-family: Arial, "Helvetica Neue", Helvetica, sans-s= +erif; font-size: 16px; line-height: 24px; font-weight: 700; transition: all= + 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(0, 119, 204) !impo= +rtant; } + +.message.message-warning .message-close:hover { background-color: rgb(0, 11= +9, 204); border-color: rgb(0, 119, 204); color: rgb(253, 214, 108) !importa= +nt; } + +.message.message-warning .popup-title-award { text-overflow: ellipsis; over= +flow: hidden; display: block; } + +.message.message-config { z-index: 3000; display: none; color: rgb(83, 90, = +96); background-color: rgb(255, 255, 255); text-align: left; width: auto; f= +ont-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 13px= +; line-height: 1.26667; } + +.message.message-config.message-dismissable { cursor: pointer; } + +.message.message-config a:not(.badge-tag):not(.button):not(.btn):not(.post-= +tag) { color: rgb(36, 39, 41); text-decoration: underline; } + +.message.message-config ul { margin: 0px 0px 0px 15px; padding: 0px; } + +.message.message-config ul li { margin: 0px 0px 5px; padding: 0px; } + +.message.message-config ul li:last-child { margin-bottom: 0px; } + +.message.message-config code { background: transparent; } + +.message.message-config .message-inner { position: relative; } + +.message.message-config .message-tip::before { content: ""; position: absol= +ute; border-width: 9px; border-style: solid; border-color: transparent; } + +.message.message-config .message-tip-top-center::before { top: -9px; left: = +50%; border-top-width: 0px; border-bottom-color: rgb(255, 255, 255); } + +.message.message-config .message-tip-left-top::before { top: 0px; left: -9p= +x; border-bottom-width: 0px; border-right-width: 0px; border-top-color: rgb= +(255, 255, 255); } + +.message.message-config .message-tip-top-left::before { top: -9px; left: 0p= +x; border-bottom-width: 0px; border-right-width: 0px; border-left-color: rg= +b(255, 255, 255); } + +.message.message-config .message-tip-left-bottom::before { bottom: 0px; lef= +t: -9px; border-bottom-width: 0px; border-left-width: 0px; border-right-col= +or: rgb(255, 255, 255); } + +.message.message-config .message-tip-bottom-left::before { top: 100%; left:= + 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-color: r= +gb(255, 255, 255); } + +.message.message-config .message-tip-right-top::before { top: 0px; left: 10= +0%; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rgb= +(255, 255, 255); } + +.message.message-config .message-tip-top-right::before { top: -9px; right: = +0px; border-bottom-width: 0px; border-left-width: 0px; border-right-color: = +rgb(255, 255, 255); } + +.message.message-config .message-tip-right-bottom::before { bottom: 0px; le= +ft: 100%; border-bottom-width: 0px; border-right-width: 0px; border-left-co= +lor: rgb(255, 255, 255); } + +.message.message-config .message-tip-bottom-right::before { top: 100%; righ= +t: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-color= +: rgb(255, 255, 255); } + +.message.message-config .message-tip-bottom-center::before { top: 100%; lef= +t: 50%; border-bottom-width: 0px; border-top-color: rgb(255, 255, 255); } + +.message.message-config .message-text { padding: 12px; } + +.message.message-config .message-close { box-sizing: border-box; float: rig= +ht; margin-top: 8px; margin-right: 8px; width: 24px; height: 24px; border: = +1px solid rgba(36, 39, 41, 0.5); background-color: rgba(36, 39, 41, 0); tex= +t-align: center; font-family: Arial, "Helvetica Neue", Helvetica, sans-seri= +f; font-size: 16px; line-height: 24px; font-weight: 700; transition: all 60= +0ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(36, 39, 41) !importan= +t; } + +.message.message-config .message-close:hover { background-color: rgb(36, 39= +, 41); border-color: rgb(36, 39, 41); color: rgb(255, 255, 255) !important;= + } + +.message.message-config .popup-title-award { text-overflow: ellipsis; overf= +low: hidden; display: block; } + +.message.message-config .message-close { margin-top: 2px; margin-right: 2px= +; } + +.message.message-success { z-index: 3000; display: none; color: rgb(232, 24= +4, 236); background-color: rgb(72, 168, 104); text-align: left; width: auto= +; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-size: 1= +3px; line-height: 1.26667; } + +.message.message-success.message-dismissable { cursor: pointer; } + +.message.message-success a:not(.badge-tag):not(.button):not(.btn):not(.post= +-tag) { color: rgb(255, 255, 255); text-decoration: underline; } + +.message.message-success ul { margin: 0px 0px 0px 15px; padding: 0px; } + +.message.message-success ul li { margin: 0px 0px 5px; padding: 0px; } + +.message.message-success ul li:last-child { margin-bottom: 0px; } + +.message.message-success code { background: transparent; } + +.message.message-success .message-inner { position: relative; } + +.message.message-success .message-tip::before { content: ""; position: abso= +lute; border-width: 9px; border-style: solid; border-color: transparent; } + +.message.message-success .message-tip-top-center::before { top: -9px; left:= + 50%; border-top-width: 0px; border-bottom-color: rgb(72, 168, 104); } + +.message.message-success .message-tip-left-top::before { top: 0px; left: -9= +px; border-bottom-width: 0px; border-right-width: 0px; border-top-color: rg= +b(72, 168, 104); } + +.message.message-success .message-tip-top-left::before { top: -9px; left: 0= +px; border-bottom-width: 0px; border-right-width: 0px; border-left-color: r= +gb(72, 168, 104); } + +.message.message-success .message-tip-left-bottom::before { bottom: 0px; le= +ft: -9px; border-bottom-width: 0px; border-left-width: 0px; border-right-co= +lor: rgb(72, 168, 104); } + +.message.message-success .message-tip-bottom-left::before { top: 100%; left= +: 0px; border-bottom-width: 0px; border-left-width: 0px; border-top-color: = +rgb(72, 168, 104); } + +.message.message-success .message-tip-right-top::before { top: 0px; left: 1= +00%; border-bottom-width: 0px; border-left-width: 0px; border-top-color: rg= +b(72, 168, 104); } + +.message.message-success .message-tip-top-right::before { top: -9px; right:= + 0px; border-bottom-width: 0px; border-left-width: 0px; border-right-color:= + rgb(72, 168, 104); } + +.message.message-success .message-tip-right-bottom::before { bottom: 0px; l= +eft: 100%; border-bottom-width: 0px; border-right-width: 0px; border-left-c= +olor: rgb(72, 168, 104); } + +.message.message-success .message-tip-bottom-right::before { top: 100%; rig= +ht: 0px; border-bottom-width: 0px; border-right-width: 0px; border-top-colo= +r: rgb(72, 168, 104); } + +.message.message-success .message-tip-bottom-center::before { top: 100%; le= +ft: 50%; border-bottom-width: 0px; border-top-color: rgb(72, 168, 104); } + +.message.message-success .message-text { padding: 12px; } + +.message.message-success .message-close { box-sizing: border-box; float: ri= +ght; margin-top: 8px; margin-right: 8px; width: 24px; height: 24px; border:= + 1px solid rgba(255, 255, 255, 0.5); background-color: rgba(255, 255, 255, = +0); text-align: center; font-family: Arial, "Helvetica Neue", Helvetica, sa= +ns-serif; font-size: 16px; line-height: 24px; font-weight: 700; transition:= + all 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(255, 255, 255)= + !important; } + +.message.message-success .message-close:hover { background-color: rgb(255, = +255, 255); border-color: rgb(255, 255, 255); color: rgb(72, 168, 104) !impo= +rtant; } + +.message.message-success .popup-title-award { text-overflow: ellipsis; over= +flow: hidden; display: block; } + +.message.message-info.contributor-dropdown { z-index: 3000; display: none; = +color: rgb(83, 90, 96); background-color: rgb(255, 255, 255); text-align: l= +eft; width: auto; font-family: Arial, "Helvetica Neue", Helvetica, sans-ser= +if; font-size: 13px; line-height: 1.26667; } + +.message.message-info.contributor-dropdown.message-dismissable { cursor: po= +inter; } + +.message.message-info.contributor-dropdown a:not(.badge-tag):not(.button):n= +ot(.btn):not(.post-tag) { color: rgb(36, 39, 41); text-decoration: underlin= +e; } + +.message.message-info.contributor-dropdown ul { margin: 0px 0px 0px 15px; p= +adding: 0px; } + +.message.message-info.contributor-dropdown ul li { margin: 0px 0px 5px; pad= +ding: 0px; } + +.message.message-info.contributor-dropdown ul li:last-child { margin-bottom= +: 0px; } + +.message.message-info.contributor-dropdown code { background: transparent; = +} + +.message.message-info.contributor-dropdown .message-inner { position: relat= +ive; } + +.message.message-info.contributor-dropdown .message-tip::before { content: = +""; position: absolute; border-width: 9px; border-style: solid; border-colo= +r: transparent; } + +.message.message-info.contributor-dropdown .message-tip-top-center::before = +{ top: -9px; left: 50%; border-top-width: 0px; border-bottom-color: rgb(255= +, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-left-top::before { = +top: 0px; left: -9px; border-bottom-width: 0px; border-right-width: 0px; bo= +rder-top-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-top-left::before { = +top: -9px; left: 0px; border-bottom-width: 0px; border-right-width: 0px; bo= +rder-left-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-left-bottom::before= + { bottom: 0px; left: -9px; border-bottom-width: 0px; border-left-width: 0p= +x; border-right-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-bottom-left::before= + { top: 100%; left: 0px; border-bottom-width: 0px; border-left-width: 0px; = +border-top-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-right-top::before {= + top: 0px; left: 100%; border-bottom-width: 0px; border-left-width: 0px; bo= +rder-top-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-top-right::before {= + top: -9px; right: 0px; border-bottom-width: 0px; border-left-width: 0px; b= +order-right-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-right-bottom::befor= +e { bottom: 0px; left: 100%; border-bottom-width: 0px; border-right-width: = +0px; border-left-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-bottom-right::befor= +e { top: 100%; right: 0px; border-bottom-width: 0px; border-right-width: 0p= +x; border-top-color: rgb(255, 255, 255); } + +.message.message-info.contributor-dropdown .message-tip-bottom-center::befo= +re { top: 100%; left: 50%; border-bottom-width: 0px; border-top-color: rgb(= +255, 255, 255); } + +.message.message-info.contributor-dropdown .message-text { padding: 12px; } + +.message.message-info.contributor-dropdown .message-close { box-sizing: bor= +der-box; float: right; margin-top: 8px; margin-right: 8px; width: 24px; hei= +ght: 24px; border: 1px solid rgba(36, 39, 41, 0.5); background-color: rgba(= +36, 39, 41, 0); text-align: center; font-family: Arial, "Helvetica Neue", H= +elvetica, sans-serif; font-size: 16px; line-height: 24px; font-weight: 700;= + transition: all 600ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; color: rgb(36= +, 39, 41) !important; } + +.message.message-info.contributor-dropdown .message-close:hover { backgroun= +d-color: rgb(36, 39, 41); border-color: rgb(36, 39, 41); color: rgb(255, 25= +5, 255) !important; } + +.message.message-info.contributor-dropdown .popup-title-award { text-overfl= +ow: ellipsis; overflow: hidden; display: block; } + +.message.message-info.contributor-dropdown .message-close { margin-top: 2px= +; margin-right: 2px; } + +.message.toast { position: fixed; top: 20px; right: 30px; z-index: 5051; } + +.anon-vote-popup { width: 275px; min-height: 315px; text-align: left; line-= +height: 115%; } + +.anon-vote-popup .anon-vote-left, .anon-vote-popup .anon-vote-right { float= +: left; width: 310px; } + +.anon-vote-popup .anon-vote-left { margin-right: 30px; border-right: 1px so= +lid rgb(200, 204, 208); min-height: 230px; } + +.anon-vote-popup .anon-vote-left .huge-button { width: 50%; padding: 7% 0px= +; text-align: center; margin-bottom: 25px; } + +.anon-vote-popup.anon-vote-newsletter { width: 655px; } + +.anon-vote-popup .anon-vote-blurb { min-height: 70px; } + +.anon-vote-popup .anon-newsletter-email { width: 200px; } + +#newsletter-ad ul { margin: 1em 0px 1em 1.5em; } + +#newsletter-ad ul li { margin-bottom: 5px; } + +#newsletter-email-input { width: 200px; } + +.post-text h1, .post-text h2, .post-text h3, .post-text h4, .post-text h5, = +.post-text h6 { overflow-wrap: break-word; } + +#custom-header { display: none; } + +.recently-deleted { padding-top: 10px; } + +.privilege-icon { display: inline-block; width: 20px; height: 16px; backgro= +und-image: url("../../img/share-sprite-new.svg?v=3D0e11bfd41fbc"), none; ba= +ckground-repeat: no-repeat; background-color: transparent; overflow: hidden= +; text-indent: -999em; outline: none; background-position-x: 50px; margin-b= +ottom: -3px; margin-right: 6px; } + +.privilege-icon.icon-milestone { background-position: -60px 0px; } + +.privilege-icon.icon-moderation { background-position: -80px 0px; } + +.privilege-icon.icon-communication { background-position: -100px 0px; } + +.privilege-icon.icon-creation { background-position: -120px 0px; } + +.privilege-icon.icon-documentation { background-position: -140px 0px; } + +div.meter { height: 12px; width: 100%; background-color: rgb(239, 240, 241)= +; border: 1px solid rgb(239, 240, 241); } + +div.meter div { height: 100%; background-color: rgb(130, 202, 154); } + +a.mathjax { width: 115px; height: 55px; background-image: url("../../img/sh= +are-sprite.png?v=3D0734e5a54af0"); background-position: -190px 5px; } + +.review-audit-subtabs { width: 400px; } + +.tools-index-subtabs { width: 600px; } + +.info-box { margin-top: 1em; padding: 0.5em; font-size: 14px; text-align: c= +enter; } + +.info-box p { margin-bottom: 0.5em; } + +.migrated.to { width: 48px; height: 48px; background-image: url("../../img/= +fatarrows.png?v=3Dae7d0b13a3f3"); display: inline-block; background-repeat:= + no-repeat; overflow: hidden; background-position: -48px 0px; } + +.login-success, .recovery-success, .signup-success { background-image: url(= +"../../img/open-graph/checkmark.png?v=3D334e396767b9"); background-repeat: = +no-repeat; padding-left: 100px; display: inline-block; height: 90px; paddin= +g-top: 30px; } + +#mainbar-full h2.title { margin: 20px 0px; } + +#popup-fancy-delete-question { width: 700px; } + +#popup-fancy-delete-question .popup-title-container { margin-bottom: 15px; = +} + +#popup-fancy-delete-question #pane-main { margin-right: 25px; line-height: = +115%; } + +#popup-fancy-delete-question .cancel-delete { margin-left: 5px; } + +#rep-page-container #master-graph rect { stroke: none; } + +sub sub sub sub, sup sup sup sup { font-size: 101%; position: initial; } + +.quality-warning { font-weight: bold; padding-top: 15px; } + +.tm-links .review-indicator span { color: rgb(255, 255, 255); font-size: 11= +px; padding: 0.2em 0.5em 0.25em; line-height: 1.3; border-radius: 2px; floa= +t: right; background-color: rgb(207, 119, 33); margin-right: 0px; } + +.review-indicator span { color: rgb(255, 255, 255); display: inline; paddin= +g: 0.2em 0.5em 0.25em; font-size: 10px; line-height: 1.3; border-radius: 2p= +x; background-color: rgb(207, 119, 33); margin: 0px; } + +.migrated.from { background-position: 0px -464px !important; } + +.migrated.to { background-position: -34px -464px !important; } + +.migrated.from, .migrated.to { margin-right: 15px; width: 30px !important; = +height: 28px !important; } + +.mod-page #tabs-interval { width: 400px; } + +h4#h-linked { margin-top: 15px; } + +.flagged-post .answer-link { width: 650px; } + +#additional-notices { clear: both; } + +#large-user-info::after { content: ""; display: table; clear: both; } + +.tools.close-stats h1 { padding-top: 15px; } + +.tools.close-stats .header { font-weight: bold; } + +.tools.close-stats .row { padding: 3px 0px; } + +.tools.close-stats .row .col-4 { width: 30%; padding-right: 10px; } + +.tools.close-stats .close-reasons .inactive, .tools.close-stats .close-reas= +ons .inactive a { opacity: 0.5; } + +.tools.close-stats .closure-stats .row:nth-child(2n+1), .tools.close-stats = +.custom-reasons .row:nth-child(2n+1) { background-color: rgb(250, 250, 251)= +; } + +.container.edit-tag-wiki .input-section { margin-bottom: 15px; } + +.container.edit-tag-wiki .input-section h3 { margin-bottom: 8px; } + +.container.edit-tag-wiki .input-section .text-counter { display: block; hei= +ght: 15px; margin-top: 5px; } + +.convert-image-to-link { width: 250px; } + +.home-page #qlist-wrapper { clear: both; } + +.dupe-hammer-message-hover { margin-left: 4px; cursor: pointer; } + +.dupe-hammer-message-hover .badge-tag { vertical-align: middle; } + +.dupe-hammer-message { display: block; max-width: 430px; line-height: 22px;= + } + +.realtime-post-deleted-notification { z-index: 100; text-align: center; } + +.realtime-post-deleted-notification p { margin-top: 30px; padding: 15px; fo= +nt-size: 15px; background-color: rgb(244, 234, 234); } + +.upload-image-warning { text-align: center; background-color: rgb(252, 248,= + 227); padding: 10px 10px 5px; border: 1px solid rgb(251, 238, 213); margin= +-bottom: 15px; border-radius: 3px; color: rgb(192, 152, 83); font-size: 13p= +x; line-height: 1.3; } + +.tooltip-message { cursor: auto !important; } + +.tooltip-message .message-text { max-width: 270px; } + +.tooltip-message .user-tooltip-controls { position: relative; padding-top: = +10px; } + +.tooltip-message .user-tooltip-done, .tooltip-message .user-tooltip-next { = +position: absolute; right: 0px; } + +.tooltip-message .user-tooltip-message { line-height: 1.3; } + +.tooltip-message .message-close { cursor: pointer !important; } + +.originals-of-duplicate .originals-list .g-row { padding: 7px 3px; border-b= +ottom: 1px solid rgb(239, 240, 241); } + +.originals-of-duplicate .originals-list .g-row h2 { margin-bottom: 0px; } + +.originals-of-duplicate .originals-list .g-row:hover { background-color: rg= +b(247, 247, 249); } + +.originals-of-duplicate ul { list-style: none; margin: 0px; } + +.originals-of-duplicate li { cursor: move; } + +.originals-of-duplicate .drag-handle { width: 0px; height: 34px; display: i= +nline-block; border: 1px dotted rgb(145, 153, 161); margin-right: 5px; } + +.originals-of-duplicate .dupe-actions { margin-top: 10px; } + +.oauth-authorizebody { background: rgb(239, 240, 241); } + +.oauth-authorize.app-has-icon .app-icon-container { margin-top: 18px; } + +.oauth-authorize.app-has-icon .icons-container { margin-bottom: 4px !import= +ant; } + +.oauth-authorize .root { text-align: center; padding: 40px; } + +.oauth-authorize .root .app-authorization { display: inline-block; margin: = +auto; text-align: left; padding: 40px; border: 1px solid rgb(214, 216, 219)= +; border-radius: 2px; background: rgb(255, 255, 255); } + +.oauth-authorize .root .app-authorization .icons-container { margin-bottom:= + 25px; position: relative; } + +.oauth-authorize .root .app-authorization .icons-container .enterprise-sub-= +icon { position: absolute; bottom: -7px; left: 29px; } + +.oauth-authorize .root .app-authorization .icons-container .app-icon-contai= +ner { display: flex; flex-direction: row; justify-content: flex-start; } + +.oauth-authorize .root .app-authorization .icons-container .app-icon-contai= +ner .app-icon-large { height: 50px; vertical-align: top; } + +.oauth-authorize .root .app-authorization .icons-container .app-icon-contai= +ner .no-icon { visibility: hidden; } + +.oauth-authorize .root .app-authorization .authorize-text { font-size: 17px= +; margin-bottom: 0.5em; } + +.oauth-authorize .root .app-authorization .authorize-text .app-name { font-= +weight: bold; } + +.oauth-authorize .root .app-authorization .authorizing-scopes { margin-bott= +om: 0px; font-size: 15px; } + +.oauth-authorize .root .app-authorization .authorizing-scopes li { margin: = +12px 0px; } + +.oauth-authorize .root .app-authorization .authorizing-scopes li .channel-n= +ame { text-decoration: underline; } + +.oauth-authorize .root .app-authorization .auth-buttons { margin-top: 20px;= + } + +.dropdown-questions-filters { top: 42px; right: 6px; } + +.MathJax_SVG_Display, .MathJax_Display { overflow: auto hidden; } + +.vote-up-off, .vote-up-on, .vote-down-off, .vote-down-on, .star-on, .star-o= +ff { height: 30px; } + +.vote-down-off, .vote-down-on { margin-bottom: 10px; } + +.top-bar { box-shadow: rgba(12, 13, 14, 0.15) 0px 1px 0px; } + +.top-bar .-logo .-img { background-image: url("../../Img/unified/sprites.sv= +g?v=3De5e58ae7df45"); } + +.top-bar .navigation .-item._current .-link { font-weight: normal; } + +.top-bar .navigation .-item._current .-link::after { content: ""; position:= + absolute; height: 2px; width: 100%; left: 0px; bottom: -1px; background-co= +lor: rgb(244, 128, 36); font-weight: normal; } + +#tabs a, .tabs a { position: relative; padding: 13px 10px; background-color= +: var(--white); border: 1px solid transparent; font-size: 12px; } + +#tabs a::before, .tabs a::before { content: ""; position: absolute; top: -1= +px; left: -1px; right: -1px; height: 2px; background-color: transparent; } + +#tabs a:hover, .tabs a:hover { background-color: rgba(132, 141, 149, 0.05);= + border-top-color: ; border-right-color: ; border-left-color: ; border-bott= +om-color: transparent; } + +#tabs a.youarehere, .tabs a.youarehere { padding-bottom: 14px; font-weight:= + 400; border-top-color: ; border-right-color: ; border-left-color: ; border= +-bottom-color: transparent; cursor: default; } + +#tabs a.youarehere::before, .tabs a.youarehere::before { background-color: = +rgb(244, 128, 36); } + +#tabs a.youarehere:hover, .tabs a.youarehere:hover { background-color: rgb(= +255, 255, 255); border-bottom-color: rgb(255, 255, 255); } + +#tabs a.external, .tabs a.external { color: rgb(0, 119, 204); } + +#tabs a.external:hover, .tabs a.external:hover { color: rgb(0, 149, 255); b= +order-color: transparent transparent rgb(244, 128, 36); background-color: r= +gb(247, 248, 248); box-shadow: rgb(255, 255, 255) 0px -1px 0px 0px inset; } + +#tabs #tab-switch { display: inline-block; color: rgb(106, 115, 124); borde= +r: 1px solid rgb(214, 217, 220); font-size: 12px; padding: 3px 6px; border-= +radius: 2px; margin: 7px auto 5px 5px; background-color: transparent; trans= +ition: all 0s ease 0s, all 0.15s ease 0s, all 0s ease 0s; } + +#tabs #tab-switch:hover { border-color: rgb(189, 205, 215); } + +#sidebar h4 { color: rgb(36, 39, 41); font-size: 18px; font-weight: 400; } + +#sidebar .related, #sidebar .linked { font-size: 13px; } + +#sidebar .related a, #sidebar .linked a { font-size: 13px; } + +#sidebar .aside-cta { margin-bottom: 1em; text-align: right; } + +#sidebar #questions-count { display: flex; flex-flow: row nowrap; justify-c= +ontent: space-between; } + +#sidebar #questions-count .-main-cta { padding-left: 20px; } + +#sidebar #questions-count .-main-cta .btn { white-space: nowrap; } + +.post-tag, .geo-tag, .container .chosen-choices .search-choice, .container = +.chosen-container-multi .chosen-choices li.search-choice { font-size: 12px;= + } + +.-flair > span:not(.reputation-score) { margin-right: 3px; margin-left: 2px= +; } + +.badge { transition: background 0.1s ease 0s; } + +.badge1, .badge2, .badge3 { margin-right: 3px; margin-left: 2px; width: 6px= +; } + +.badge1 { background-position: -102px -398px; } + +.badge2 { background-position: -82px -398px; } + +.badge3 { background-position: -62px -398px; } + +.badgecount { padding-left: 0px; color: rgb(106, 115, 124); } + +body:not(.unified-theme) .narrow .mini-counts { margin-bottom: 2px; } + +body:not(.unified-theme) .narrow .votes, body:not(.unified-theme) .narrow .= +status, body:not(.unified-theme) .narrow .views { padding: 8px 5px; line-he= +ight: 1; } + +.narrow .status { color: rgb(132, 141, 149); } + +.answered, .answered-accepted { border: 1px solid transparent; } + +.status.answered { border-color: rgba(72, 168, 104, 0.5); } + +.status.answered, .status.answered .mini-counts, .status.answered strong { = +color: rgb(72, 168, 104); } + +.status.answered-accepted, .status.answered-accepted .mini-counts, .status.= +answered-accepted .minicounts span { color: rgb(255, 255, 255); } + +.status.unanswered .mini-counts span { color: inherit; } + +body:not(.unified-theme) .question-summary { padding: 12px 0px; border-bott= +om: 1px solid var(--black-075); } + +.tagged-interesting { box-shadow: rgba(255, 255, 255, 0.25) 0px 1px 0px ins= +et; } + +#question-header { display: flex; flex-flow: row nowrap; justify-content: s= +pace-between; } + +#question-header .-main-cta { padding-left: 20px; } + +#question-header .-main-cta .btn { white-space: nowrap; } + +#question-header .question-hyperlink { color: rgb(36, 39, 41); } + +.comment-text { font-size: 13px; line-height: 1.3; } + +.displaying-results { margin-top: -12px; } + +input[type=3D"text"]:not(.s-input):focus, input[type=3D"email"]:not(.s-inpu= +t):focus, input[type=3D"password"]:not(.s-input):focus, textarea:not(.s-inp= +ut):focus { outline: 0px; border: 1px solid rgb(108, 187, 247); } + +input[type=3D"text"]:not(.s-input), textarea:not(.wmd-input), input[type=3D= +"url"], input[type=3D"datetime"], input[type=3D"datetime-local"], input[typ= +e=3D"date"], .tag-editor:not(.s-input) { box-shadow: rgba(12, 13, 14, 0.1) = +0px 1px 2px inset; } + +.error-page h1 { margin-bottom: 24px; } + +.error-page p { font-size: 15px; } + +@media (prefers-color-scheme: dark) { +} + +html, body { min-width: 1264px; } + +html.html__unpinned-leftnav, html.html__unpinned-leftnav body { min-width: = +1100px; } + +html.html__responsive, html.html__responsive body { min-width: auto; } + +body { padding-top: 50px; } + +@media print { + body { padding-top: 0px; } +} + +body .top-bar ~ .container, body .top-bar ~ #announcement-banner { margin-t= +op: 0px; } + +body > .container { max-width: 1264px; width: 100%; background: none; displ= +ay: flex; justify-content: space-between; margin: 0px auto; } + +html.html__unpinned-leftnav body > .container { max-width: 1100px; } + +body > .container::after, body > .container::before { display: none; } + +#content { max-width: 1100px; width: calc(100% - 164px); background-color: = +var(--white); border-radius: 0px; border-top-color: ; border-top-style: ; b= +order-right-color: ; border-right-style: ; border-bottom-color: ; border-bo= +ttom-style: ; border-left-color: ; border-left-style: ; border-image-source= +: ; border-image-slice: ; border-image-width: ; border-image-outset: ; bord= +er-image-repeat: ; border-width: 0px 0px 0px 1px; padding: 24px; box-sizing= +: border-box; } + +@media screen and (max-width: 640px) { + html.html__responsive #content { border-left: 0px; border-right: 0px; } +} + +@media print { + #content { border-left: 0px; border-right: 0px; } +} + +html.html__unpinned-leftnav #content { width: 100%; } + +html.html__unpinned-leftnav #content { border-left-width: 0px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) #content { padding-lef= +t: 16px; padding-right: 16px; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav #content { padding-left: 16p= +x; padding-right: 16px; } +} + +@media print { + #content { padding-left: 16px; padding-right: 16px; } +} + +@media screen and (max-width: 640px) { + html.html__responsive #content { padding-left: 12px; padding-right: 12px;= + width: 100%; } +} + +@media print { + #content { padding-left: 12px; padding-right: 12px; width: 100%; } +} + +#sidebar, .sidebar { margin-left: 24px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) #sidebar, html.html__r= +esponsive:not(.html__unpinned-leftnav) .sidebar { float: none; clear: both;= + margin: 0px auto; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav #sidebar, html.html__respons= +ive.html__unpinned-leftnav .sidebar { float: none; clear: both; margin: 0px= + auto; } +} + +@media print { + #sidebar, .sidebar { float: none; clear: both; margin: 0px auto; } +} + +.site-footer--container, .site-footer--extra { max-width: 1264px; } + +body > .container__full { max-width: 100%; } + +body > .container__full .left-sidebar { display: none; } + +body > .container__full #content { padding: 0px; max-width: 100%; } + +body > .container .container--inner { max-width: 1264px; padding: 0px 24px;= + margin: 0px auto; } + +#mainbar, .mainbar { width: calc((100% - 300px) - 24px); } + +#mainbar.ask-mainbar, .mainbar.ask-mainbar { width: calc((100% - 365px) - 2= +4px); } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) #mainbar, html.html__r= +esponsive:not(.html__unpinned-leftnav) .mainbar { width: 100%; float: none;= + } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav #mainbar, html.html__respons= +ive.html__unpinned-leftnav .mainbar { width: 100%; float: none; } +} + +@media print { + #mainbar, .mainbar { width: 100%; float: none; } +} + +#questions, #answers { width: auto; float: none; } + +.answer, .post-editor, #answers-header { width: 100%; } + +.subheader { box-sizing: content-box; } + +.site-header { box-sizing: border-box; background-color: rgb(244, 128, 36);= + background-image: none; background-position: left center; background-repea= +t: repeat; background-size: auto; border-bottom: 0px; } + +.site-header .site-header--container { width: 100%; min-height: 70px; max-w= +idth: 1264px; margin: 0px auto; padding: 0px 8px; display: flex; align-item= +s: center; justify-content: space-between; background-color: transparent; b= +ackground-image: none; background-position: right bottom; background-repeat= +: no-repeat; background-size: auto; } + +html.html__unpinned-leftnav .site-header .site-header--container { max-widt= +h: 1100px; } + +@media screen and (max-width: 640px) { + html.html__responsive .site-header .site-header--container { background-i= +mage: none; } +} + +@media print { + .site-header .site-header--container { background-image: none; } +} + +.site-header .site-header--link { color: rgb(244, 128, 36); } + +.site-header .site-header--sponsored { color: rgba(255, 255, 255, 0.4); fon= +t-size: 10px; } + +.system-message { background-color: rgb(255, 247, 227); border-bottom: 1px = +solid rgb(255, 232, 176); } + +.system-message .-inner { max-width: 1264px; } + +.s-banner button, .s-banner a { text-decoration: underline; } + +.s-banner button:hover, .s-banner a:hover { text-decoration: underline; } + +.s-banner__danger button, .s-banner__danger a { color: white; } + +.s-banner__danger button:hover, .s-banner__danger a:hover { color: white; } + +.left-sidebar { width: 164px; flex-shrink: 0; z-index: 1000; box-shadow: rg= +ba(12, 13, 14, 0.05) 0px 0px 0px; transition: box-shadow 0.1s ease-in-out 0= +s, transform 0.1s ease-in-out 0s; } + +.left-sidebar, .left-sidebar *, .left-sidebar ::after, .left-sidebar ::befo= +re { box-sizing: border-box; } + +.left-sidebar .nav { position: sticky; top: 24px; padding-bottom: 12px; } + +.left-sidebar .-label { font-weight: bold; padding-left: 12px; color: var(-= +-black-400); padding-bottom: 4px; font-size: 12px; } + +.left-sidebar--sticky-container { position: fixed; width: 164px; padding-to= +p: 24px; } + +@supports (position: sticky) or (position: -webkit-sticky) { + .left-sidebar--sticky-container:not(.left-sidebar__fake-sticky) { positio= +n: sticky; width: auto; top: 0px; margin-bottom: 8px; max-height: calc(100v= +h); overflow-y: auto; } + .left-sidebar--sticky-container:not(.left-sidebar__fake-sticky)::-webkit-= +scrollbar { width: 8px; height: 8px; background-color: transparent; } + .left-sidebar--sticky-container:not(.left-sidebar__fake-sticky)::-webkit-= +scrollbar-track { border-radius: 8px; background-color: transparent; } + .left-sidebar--sticky-container:not(.left-sidebar__fake-sticky)::-webkit-= +scrollbar-thumb { border-radius: 8px; background-color: var(--scrollbar); } + .left-sidebar--sticky-container:not(.left-sidebar__fake-sticky)::-webkit-= +scrollbar-corner { background-color: transparent; border-color: transparent= +; } + .top-bar._fixed ~ .container .left-sidebar--sticky-container:not(.left-si= +debar__fake-sticky) { top: 50px; max-height: calc(100vh - 50px); } + html.html__unpinned-leftnav .left-sidebar--sticky-container:not(.left-sid= +ebar__fake-sticky) { max-height: calc(100vh - 50px); } +} + +.leftnav-dialog .left-sidebar--sticky-container { position: static; width: = +auto; } + +html.html__unpinned-leftnav .container .left-sidebar { display: none; } + +.activity-indicator { width: 10px; height: 10px; } + +.nav-links { padding: 0px; margin: 0px 0px 12px; list-style: none; } + +.nav-links .nav-links--link { display: block; padding: 4px 4px 4px 30px; li= +ne-height: 1.8; font-size: 13px; } + +.nav-links .nav-links--link, .nav-links .nav-links--link:visited { color: v= +ar(--black-600); } + +.nav-links .nav-links--link:hover, .nav-links .nav-links--link:focus, .nav-= +links .nav-links--link:active { color: var(--black-900); } + +.nav-links .nav-links--link.-link__with-icon { display: flex; padding: 8px = +6px 8px 0px; } + +.nav-links .nav-links--link.-link__with-icon .svg-icon { flex-shrink: 0; ma= +rgin-top: -1px; margin-right: 4px; color: var(--black-400); } + +.nav-links .nav-links--link.-link__with-icon:hover .svg-icon, .nav-links .n= +av-links--link.-link__with-icon:focus .svg-icon, .nav-links .nav-links--lin= +k.-link__with-icon:active .svg-icon { color: var(--black-900); } + +.nav-links .nav-links--link .-link--channel-name { line-height: 1.30769; } + +.nav-links .youarehere .nav-links--link { font-weight: bold; background: va= +r(--black-050); color: var(--black-900); border-right: 3px solid rgb(244, 1= +28, 36); } + +.nav-links .youarehere .nav-links--link .svg-icon { color: var(--black-900)= +; } + +.nav-links.admin-nav-links .youarehere .nav-links--link { border-right: non= +e; } + +.left-sidebar-improvements .nav-links .nav-links--link { padding-left: 30px= +; } + +.left-sidebar-toggle { display: none; padding-top: 3px; height: 100%; width= +: 44px; flex-shrink: 0; } + +.left-sidebar-toggle span { width: 18px; height: 2px; background-color: var= +(--black-400); } + +.left-sidebar-toggle span::before, .left-sidebar-toggle span::after { posit= +ion: absolute; content: ""; width: 18px; height: 2px; left: 0px; background= +: var(--black-400); top: -5px; transition: all 0.1s ease-in-out 0s; } + +.left-sidebar-toggle span::after { top: 5px; } + +@media screen and (max-width: 640px) { + html.html__responsive .left-sidebar-toggle { display: flex; } +} + +@media print { + .left-sidebar-toggle { display: flex; } +} + +html.html__unpinned-leftnav .left-sidebar-toggle { display: flex; } + +.left-sidebar-toggle.topbar-icon-on span { background-color: transparent; } + +.left-sidebar-toggle.topbar-icon-on span::before, .left-sidebar-toggle.topb= +ar-icon-on span::after { top: 0px; transform: rotate(-45deg); } + +.left-sidebar-toggle.topbar-icon-on span::after { transform: rotate(45deg);= + } + +.flush-left { margin-left: -24px; border-top: 1px solid var(--black-100); } + +.flush-left .question-summary { width: 100%; padding-left: 8px; box-sizing:= + border-box; } + +.flush-left .flush-left, .flush-left .mixed-question-list { border-top: non= +e; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .flush-left { margin-l= +eft: -16px; margin-right: -16px; width: calc(100% + 32px); } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .flush-left { margin-left: -= +16px; margin-right: -16px; width: calc(100% + 32px); } +} + +@media print { + .flush-left { margin-left: -16px; margin-right: -16px; width: calc(100% += + 32px); } +} + +@media screen and (max-width: 640px) { + html.html__responsive .flush-left { margin-left: -12px; margin-right: -12= +px; width: calc(100% + 24px); } +} + +@media print { + .flush-left { margin-left: -12px; margin-right: -12px; width: calc(100% += + 24px); } +} + +.question-summary { display: flex; padding: 12px 8px; float: none; width: 1= +00%; } + +.question-summary .stats, .question-summary .stats + .views { margin-left: = +0px; } + +.question-summary h3, .question-summary .excerpt { overflow-wrap: break-wor= +d; word-break: break-word; } + +.statscontainer { margin-right: 16px; width: 58px; float: none; } + +.summary, .narrow .summary { flex: 1 1 auto; width: auto; float: none; marg= +in: 0px; overflow: hidden; } + +.cp, .narrow .cp { float: none; display: flex; flex-wrap: nowrap; align-ite= +ms: flex-start; margin-right: 0px; padding: 0px 8px 0px 0px; box-sizing: co= +ntent-box; flex-shrink: 0; } + +.narrow .started { white-space: normal; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) #tabs a, html.html__re= +sponsive:not(.html__unpinned-leftnav) .tabs a { margin-right: 0px; padding-= +left: 8px; padding-right: 8px; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav #tabs a, html.html__responsi= +ve.html__unpinned-leftnav .tabs a { margin-right: 0px; padding-left: 8px; p= +adding-right: 8px; } +} + +@media print { + #tabs a, .tabs a { margin-right: 0px; padding-left: 8px; padding-right: 8= +px; } +} + +._with-left-nav ~ .container .col-sidebar { margin-right: 32px; } + +.user-page ._with-left-nav ~ .container .settings-page { margin: 0px 0px 0p= +x 32px !important; } + +#add-login-page, #login-page, #signup-page { box-sizing: content-box; } + +.fc-theme-primary { color: rgb(244, 128, 36) !important; } + +.bg-theme-primary { background-color: rgb(244, 128, 36) !important; } + +.timeline-wrapper .timeline { width: 798px; } + +.timeline-wrapper .timeline-sidebar { margin-left: 24px; } + +.user-page .row { max-width: 1100px; } + +#profile-side { margin-right: 24px; } + +[data-can-be] { display: none; } + +@media screen and (max-width: 640px) { + html.html__responsive [data-is-here-when]:not([data-is-here-when~=3D"sm"]= +) { display: none; } +} + +@media print { + [data-is-here-when]:not([data-is-here-when~=3D"sm"]) { display: none; } +} + +@media screen and (max-width: 980px) and (min-width: 640.1px) { + html.html__responsive:not(.html__unpinned-leftnav) [data-is-here-when]:no= +t([data-is-here-when~=3D"md"]) { display: none; } +} + +@media screen and (max-width: 816px) and (min-width: 640.1px) { + html.html__responsive.html__unpinned-leftnav [data-is-here-when]:not([dat= +a-is-here-when~=3D"md"]) { display: none; } +} + +@media screen and (min-width: 980.1px) { + html.html__responsive:not(.html__unpinned-leftnav) [data-is-here-when]:no= +t([data-is-here-when~=3D"lg"]) { display: none; } +} + +@media screen and (min-width: 816.1px) { + html.html__responsive.html__unpinned-leftnav [data-is-here-when]:not([dat= +a-is-here-when~=3D"lg"]) { display: none; } +} + +@media screen and (max-width: 640px) { + html.html__responsive .statscontainer { margin-left: 0px; margin-right: 1= +2px; } + html.html__responsive .question-summary { padding-left: 12px !important; = +padding-right: 12px !important; } + html.html__responsive .question-summary.narrow { flex-direction: column; = +} + html.html__responsive .narrow .cp { width: 100%; float: none; padding-bot= +tom: 8px !important; padding-left: 0px !important; padding-right: 0px !impo= +rtant; } + html.html__responsive .narrow .votes, html.html__responsive .narrow .stat= +us, html.html__responsive .narrow .views { padding: 4px 0px; line-height: 1= +; box-sizing: border-box; width: auto; height: auto; border-radius: 3px; mi= +n-width: auto; text-align: left; margin: 0px 4px 0px 0px; } + html.html__responsive .narrow .votes > div, html.html__responsive .narrow= + .status > div, html.html__responsive .narrow .views > div { display: inlin= +e-block; font-size: 12px; margin-bottom: 0px; } + html.html__responsive .narrow .votes > div.mini-counts, html.html__respon= +sive .narrow .status > div.mini-counts, html.html__responsive .narrow .view= +s > div.mini-counts { font-weight: bold; } + html.html__responsive .narrow .status { margin-top: -1px; padding: 4px 8p= +x; } + html.html__responsive .narrow .summary { width: 100%; float: none; } +} + +@media print { + .statscontainer { margin-left: 0px; margin-right: 12px; } + .question-summary { padding-left: 12px !important; padding-right: 12px !i= +mportant; } + .question-summary.narrow { flex-direction: column; } + .narrow .cp { width: 100%; float: none; padding-bottom: 8px !important; p= +adding-left: 0px !important; padding-right: 0px !important; } + .narrow .votes, .narrow .status, .narrow .views { padding: 4px 0px; line-= +height: 1; box-sizing: border-box; width: auto; height: auto; border-radius= +: 3px; min-width: auto; text-align: left; margin: 0px 4px 0px 0px; } + .narrow .votes > div, .narrow .status > div, .narrow .views > div { displ= +ay: inline-block; font-size: 12px; margin-bottom: 0px; } + .narrow .votes > div.mini-counts, .narrow .status > div.mini-counts, .nar= +row .views > div.mini-counts { font-weight: bold; } + .narrow .status { margin-top: -1px; padding: 4px 8px; } + .narrow .summary { width: 100%; float: none; } +} + +html.html__responsive .everyoneloves__inline-sidebar { justify-content: cen= +ter; margin-top: 24px; } + +html.html__responsive .everyoneloves__top-leaderboard, html.html__responsiv= +e .everyoneloves__mid-leaderboard, html.html__responsive .everyoneloves__bo= +t-mid-leaderboard, html.html__responsive .everyoneloves__tag-sponsorship { = +margin-left: -16px; margin-right: -16px; display: flex; justify-content: fl= +ex-start; width: auto; overflow: hidden; } + +html.html__responsive .everyoneloves__top-leaderboard > *, html.html__respo= +nsive .everyoneloves__mid-leaderboard > *, html.html__responsive .everyonel= +oves__bot-mid-leaderboard > *, html.html__responsive .everyoneloves__tag-sp= +onsorship > * { flex: 0 0 auto; } + +html.html__responsive .everyoneloves__top-leaderboard::before, html.html__r= +esponsive .everyoneloves__mid-leaderboard::before, html.html__responsive .e= +veryoneloves__bot-mid-leaderboard::before, html.html__responsive .everyonel= +oves__tag-sponsorship::before, html.html__responsive .everyoneloves__top-le= +aderboard::after, html.html__responsive .everyoneloves__mid-leaderboard::af= +ter, html.html__responsive .everyoneloves__bot-mid-leaderboard::after, html= +.html__responsive .everyoneloves__tag-sponsorship::after { content: ""; fle= +x: 0 1 16px; } + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .everyoneloves__inline= +-sidebar { display: flex; } + html.html__responsive:not(.html__unpinned-leftnav) .everyoneloves__top-si= +debar { display: none; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .everyoneloves__inline-sideb= +ar { display: flex; } + html.html__responsive.html__unpinned-leftnav .everyoneloves__top-sidebar = +{ display: none; } +} + +@media print { + .everyoneloves__inline-sidebar { display: flex; } + .everyoneloves__top-sidebar { display: none; } +} + +@media screen and (max-width: 1280px) { + html.html__responsive:not(.html__unpinned-leftnav) .everyoneloves__top-le= +aderboard, html.html__responsive:not(.html__unpinned-leftnav) .everyonelove= +s__mid-leaderboard, html.html__responsive:not(.html__unpinned-leftnav) .eve= +ryoneloves__bot-mid-leaderboard, html.html__responsive:not(.html__unpinned-= +leftnav) .everyoneloves__tag-sponsorship { display: none; } +} + +@media screen and (max-width: 1116px) { + html.html__responsive.html__unpinned-leftnav .everyoneloves__top-leaderbo= +ard, html.html__responsive.html__unpinned-leftnav .everyoneloves__mid-leade= +rboard, html.html__responsive.html__unpinned-leftnav .everyoneloves__bot-mi= +d-leaderboard, html.html__responsive.html__unpinned-leftnav .everyoneloves_= +_tag-sponsorship { display: none; } +} + +@media print { + .everyoneloves__top-leaderboard, .everyoneloves__mid-leaderboard, .everyo= +neloves__bot-mid-leaderboard, .everyoneloves__tag-sponsorship { display: no= +ne; } +} + +@media screen and (max-width: 980px) { + html.html__responsive:not(.html__unpinned-leftnav) .everyoneloves__mid-le= +aderboard, html.html__responsive:not(.html__unpinned-leftnav) .everyonelove= +s__bot-mid-leaderboard, html.html__responsive:not(.html__unpinned-leftnav) = +.everyoneloves__tag-sponsorship { display: flex; } +} + +@media screen and (max-width: 816px) { + html.html__responsive.html__unpinned-leftnav .everyoneloves__mid-leaderbo= +ard, html.html__responsive.html__unpinned-leftnav .everyoneloves__bot-mid-l= +eaderboard, html.html__responsive.html__unpinned-leftnav .everyoneloves__ta= +g-sponsorship { display: flex; } +} + +@media print { + .everyoneloves__mid-leaderboard, .everyoneloves__bot-mid-leaderboard, .ev= +eryoneloves__tag-sponsorship { display: flex; } +} + +@media screen and (max-width: 940px) { + html.html__responsive:not(.html__unpinned-leftnav) .everyoneloves__top-le= +aderboard, html.html__responsive:not(.html__unpinned-leftnav) .everyonelove= +s__mid-leaderboard, html.html__responsive:not(.html__unpinned-leftnav) .eve= +ryoneloves__bot-mid-leaderboard, html.html__responsive:not(.html__unpinned-= +leftnav) .everyoneloves__tag-sponsorship { display: none; } +} + +@media screen and (max-width: 776px) { + html.html__responsive.html__unpinned-leftnav .everyoneloves__top-leaderbo= +ard, html.html__responsive.html__unpinned-leftnav .everyoneloves__mid-leade= +rboard, html.html__responsive.html__unpinned-leftnav .everyoneloves__bot-mi= +d-leaderboard, html.html__responsive.html__unpinned-leftnav .everyoneloves_= +_tag-sponsorship { display: none; } +} + +@media print { + .everyoneloves__top-leaderboard, .everyoneloves__mid-leaderboard, .everyo= +neloves__bot-mid-leaderboard, .everyoneloves__tag-sponsorship { display: no= +ne; } +} +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://cdn.sstatic.net/img/favicons-sprite16.png?v=f4ca183292f8 + +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 +TQjat29Pamoq69atw+v1kpaWRrNmzUJ2pmPuzieeYvGRwgiIJk6SRSE3fR/TTSDR7NuutwoNiUBw +zPexRBWhKVJ64/GDWDSSE0mx+EhhBEQTJ8mikJu+j+kmkGj2bddbhYZEIDjm+1iiitAUKb3x+EEM +kU4kCSklOzw13UtqdHe1JuNbJKj7M1JdW+2znVKCELDdU9PtcKXWNk4VVSkuxZPhdm1xAFyzYM9m +K9PCgR17Bk+VWt8lgjFf5n+lS1AE/Di6S+1OGGEm1FQbSz8FBQXd8/Pzu6SkpBxo3779HiGE3t4l +t/44uos4Y9b20EFpfyisPt8VF8fsN954MKt//08vuOCCD7t167aiZ8+eW2+77bYZiXFO549Has61 +8wR0Ji+K44tPPr7nkYcffvDagQO/nnL11c8lJibKNWvWPPz000/3P7B/Xy89OS3g5TFAg4R4Z+Xi +Rd8MLiwsbJ6/d2/GmWeeqXbp0mV1QkLC5Icffvjjqsoqp3nONbQGUiKSEhOr4uPjWbZ8+dmTJk2a +fuqpp37Tp0+fjwcPHvz7A/l57Up0LS6sACGQN44Y+fecH35u+fHHH583f/787m3atOl+8ODBPiBf +7tShwyw6tsgisFTJ6TN/kafP/EVuOlzzGyklGzdu/O2f/vjHOeecc87+uLg4CcjMnj0OfPT+u9dv +LvT2sfJLKQM10DRNXb/2u5vPPa/PpxkZGRuuvOqqQZ9//vnQ2W+80S8/f5+7qKT0rtPjHJeFNaLT +6az422OPPfHk3//2RFFRkbNr166vXnLJJff369cvr6qqyuFu3mJvsCsHaOBwqvqCTz/vuODTz8e3 +bNVae+ONN9745ZdfugwbNqysT58+G87sO+B9r0+GFyA1jXbt2u0fNmzYumnTpl2xb9++8WlpaeVJ +SUkf//3Jvz+vHNm7xtfslN+EFFCjS/I8lafvzt116qPZkytmzZolunbt2tPn8ynlFRWbv1u/ztu0 +62kUVHg7WX3B3xvtvv3ybztc85u28Z8qtg5lMSzbW3HdXd/s+wjApYqKTTdnJIn/+Zc2wwb79+/v +XllZ6fZ6vfFNmjTZ37Zt2632BRhd11EUhf3793crLS1t63A4qhISEjxt27Y1EOnFF1/cbGwTURg3 +blzP4NUba45FSsmcOXO+sgRmZ2cb55msiZXs7GzRtGnTzQC7d+/uvmTJksGbNm3qW1pa2qG8vLxd +kyZNtmZnZwshBJbxAxxpz54953fs2PE///rXvx7817/+9btDhw6lCSH0Zs2alZ5xxhnLvvrqq6F7 +9+4N0DD4593x5ptv3vPkk08+ePHFF389cODA55KTk+Xy5csffuWVV/rn5ub2io+Pr4tIUhr7jxIS +Eiq/+OKLwWVlZc337duXcc4556jdunVbnZiYOHn8+PEfl5eXO4UIfOG3obJASikSExOrnE4nmzdv +PvuOO+6YnpGR8U2/fv0+Hjt27O937tzZTtf1SIgk5O233/73n376qeWaNWvOW7lyZffvv/++++HD +h/sAL3fu3HlWx44ds+pUwTJKZWVlwvnnn7/q73//+yO33HLLO126dCmoqKjg008/veBvf/vb09u3 +b78+Li6uqo4RrTr5fD510aJFN19yySWfduvWbcO33347aP78+UM/+uijfoWFhW6Px3NXfHx8aEQS +QuByuSr+8pe/PDFx4sQnDh486MzMzHz1qquuur9nz555Pp/P0bJly71W6QF+YCW6XC59zZo1Hdes +WTO+devW2pw5c97Iz8/vcvnll5d17dp1w4ABA943txP5efxVEEKgaRrNmzfff/nll6976aWXrigq +KhrfvHnz8uTk5I//8Y9/PF9UVLQmNTX1N3U0ANA0jQMHDpy+b9++U+++++6KWbNmiczMzJ5er1cp +LS3dvHz5cm/Tpk0pLi7upOt6oAZCCFRVZcGCBW/HxcVd88orr3xq/oRtBGjRogWnnHIKW7duve79 +999/WwiBw+Go8Hfn/2065ioE+IGd1p179hLq3sUypvf6DbOsL1JKQ4Ng74qosq2wOr/O63ufM5HA +C30AJvdevyE7og2OmwbBtgiyw6ze6zeMqSPQrkG0WliF+TUIZnryySfl6tWrQzL26dOHhx9+2F9i +QBWuu+46v6SFCxcGMG7ashWARx7+c0C6H9K6deu2sWPHjixcuLBB7wYBt2Q9//zzDX6xCBhk/e53 +v6s5KgFSSrZu3dp5z549zuuuu06OHj366DRYuHChWLhwoVi8eHFYBimlz/49bG+c+u9/y/N69/Z/ +319wgLy8PUy87z5RR4B5bqnBtHXr1kbwNvffQ6QRI0YskVJmWZ3G/D9m7ty5s6w8xx+RRowYMVEI +McUSZJY6ea7txGlIG/zXEMluB2DWO++88ysh0sSJE+XatWtDMp533nlMmzYtNCKZ6+kArFq1KoDR +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 + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/svg+xml +Content-Transfer-Encoding: quoted-printable +Content-Location: https://cdn.sstatic.net/Img/unified/sprites.svg?v=e5e58ae7df45 + + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://cdn.sstatic.net/clc/styles/clc.min.css?v=308d7ccd0858 + +@charset "utf-8"; + +.clc-preview { pointer-events: none; user-select: none; } + +.clc-tooltip { display: inline-block; position: absolute; background-color:= + rgb(59, 64, 69); color: white; border-radius: 2px; padding: 3px 5px; visib= +ility: hidden; white-space: nowrap; cursor: default; font-size: 12px; box-s= +hadow: rgb(255, 255, 255) 0px 0px 1px, rgba(0, 0, 0, 0.3) 0px 0px 5px; } + +.clc-tooltip::after { content: ""; border: 4px solid transparent; position:= + absolute; } + +.clc-tooltip.above-left { right: 0px; transform: translateY(-100%); top: -5= +px; } + +.clc-tooltip.above-left::after { right: 0px; transform: translateX(-4px); t= +op: 100%; border-top-color: rgb(59, 64, 69); } + +.clc-tooltip.left { top: calc(50% + 2px); transform: translateY(-50%); righ= +t: calc(100% + 4px + 3px); } + +.clc-tooltip.left::after { right: -12px; transform: translateX(-4px); top: = +5px; border-left-color: rgb(59, 64, 69); } + +.clc-dismiss { position: absolute; right: 6px; top: 6px; cursor: pointer; o= +pacity: 0; width: 16px; height: 16px; display: block; background-color: rgb= +(255, 255, 255); box-shadow: rgba(255, 255, 255, 0.75) 0px 0px 1px 1px; bor= +der-radius: 8px; z-index: 2; } + +.clc-dismiss svg { height: 16px; width: 16px; fill: rgb(106, 113, 119); } + +.clc-dismiss.spinner { border-width: 2px; border-style: solid; border-color= +: rgba(255, 255, 255, 0.3) rgba(255, 255, 255, 0.3) rgba(255, 255, 255, 0.3= +) rgb(83, 90, 96); border-image: initial; transform: translateZ(0px); anima= +tion: 0.5s linear 0s infinite normal none running spinnerRotate; border-rad= +ius: 50%; width: 11px; height: 11px; background-image: none; } + +.clc-dismiss.spinner svg { display: none; } + +.clc-dismiss.error { background-image: url("data:image/svg+xml,%3csvg xmlns= +=3D'http://www.w3.org/2000/svg' fill=3D'#a00' viewBox=3D'0 0 13.6 13.6'%3e%= +3cpath d=3D'M6.85.43A6.41 6.41 0 0 0 2.3 11.4c2.5 2.5 6.6 2.5 9.1 0s2.5-6.6= + 0-9.1A6.42 6.42 0 0 0 6.85.43zM5.98 1.9h1.74v4.34l-.17 2.37h-1.4l-.17-2.37= +V1.9zm0 8.22h1.74v1.69H5.98v-1.7z'/%3e%3c/svg%3e"); cursor: default; opacit= +y: 1 !important; } + +.clc-dismiss.error svg { display: none; } + +.clc-dismiss:hover .clc-tooltip { visibility: visible; } + +.clc-dismissable:hover .clc-dismiss { opacity: 0.5; transition: opacity 0.1= +5s ease-in-out 0s; } + +.clc-dismissable:hover .clc-dismiss:hover { opacity: 1; } + +.clc-dismissable:hover .clc-dismiss-icon { opacity: 0.5 !important; } + +.clc-dismissable:hover .clc-dismiss-icon:hover { opacity: 1 !important; } + +.clc-dismiss-icon:hover .clc-tooltip { visibility: visible; } + +.clc-dismiss-icon.spinner { border-width: 2px; border-style: solid; border-= +color: rgba(255, 255, 255, 0.3) rgba(255, 255, 255, 0.3) rgba(255, 255, 255= +, 0.3) rgb(83, 90, 96); border-image: initial; transform: translateZ(0px); = +animation: 0.5s linear 0s infinite normal none running spinnerRotate; borde= +r-radius: 50%; width: 11px; height: 11px; background-image: none; } + +.clc-dismiss-icon.spinner svg { display: none; } + +.clc-dismissed-container { position: relative; } + +.clc-dismissed-overlay { position: absolute; left: 0px; top: 0px; width: 10= +0%; height: 100%; margin: 0px; background-color: rgb(239, 240, 241); transi= +tion: transform 0.2s ease-in-out 0s, opacity 0.2s ease-in-out 0s; opacity: = +1; z-index: 1; font-size: 12px; transform: translateX(0px); display: flex; = +align-items: center; justify-content: center; color: rgb(0, 0, 0); } + +.clc-dismissed-overlay.clc-hidden { transform: translateX(100%); display: f= +lex; opacity: 0; } + +.clc-dismissed-overlay > * { padding: 6px 12px; } + +.clc-dismissed-overlay .clc-spinner { border-width: 2px; border-style: soli= +d; border-color: transparent transparent transparent rgba(0, 0, 0, 0.3); bo= +rder-image: initial; transform: translateZ(0px); animation: 0.5s linear 0s = +infinite normal none running spinnerRotate; border-radius: 50%; width: 11px= +; height: 11px; background-image: none; display: inline-block; position: ab= +solute; right: 24px; } + +.clc-dismissed-overlay .clc-spinner.clc-hidden { display: none; } + +.clc-dismissed-overlay.error { color: rgb(201, 29, 46); } + +.clc-hidden { display: none; } + +@font-face { font-family: "Roboto Slab"; font-style: normal; font-weight: 4= +00; font-display: swap; src: url("https://fonts.gstatic.com/s/robotoslab/v1= +0/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjojISmb2Rm.ttf") format("truetype"); } + +@font-face { font-family: "Roboto Slab"; font-style: normal; font-weight: 7= +00; font-display: swap; src: url("https://fonts.gstatic.com/s/robotoslab/v1= +0/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoa4Omb2Rm.ttf") format("truetype"); } + +div.clc-jobs-multi { color: rgb(51, 51, 51); font-family: Arial, "Helvetica= + Neue", Helvetica, sans-serif; font-size: 12px; text-align: left; line-heig= +ht: 130%; padding: 1px; margin: 12px 0px 1.5em; clear: both; background-rep= +eat: no-repeat; background-position: 0px 0px; box-sizing: border-box; posit= +ion: relative; } + +div.clc-jobs-multi a.top { padding: 8px 8px 8px 12px; max-height: 42px; } + +div.clc-jobs-multi a.top.widen { max-height: 46px; padding-top: 10px; paddi= +ng-bottom: 10px; } + +div.clc-jobs-multi a.top .header-icon-right { z-index: 1; } + +div.clc-jobs-multi a.top .header-icon-right svg { width: 64px; height: 35px= +; } + +div.clc-jobs-multi a.top .header-icon-right .iconLogoGlyph { height: 26px; = +width: 21px; margin-right: 6px; } + +div.clc-jobs-multi a.top .header-icon-left { z-index: 1; margin-right: 6px;= + } + +div.clc-jobs-multi a.top .header-icon-left .iconLogoGlyph { height: 20px; w= +idth: 26px; position: relative; bottom: 2px; } + +div.clc-jobs-multi.blog { background-color: rgb(239, 240, 241); border-colo= +r: rgb(239, 240, 241); } + +div.clc-jobs-multi.blog > .top { background-image: url("../img/so-logo-colo= +red.svg"); background-position: center 3px; background-repeat: no-repeat; b= +ackground-size: auto 80%; height: 42px; } + +div.clc-jobs-multi.blue, div.clc-jobs-multi.blue .slanted-bg { background-i= +mage: linear-gradient(89.81deg, rgb(6, 120, 244) 41.01%, rgb(55, 178, 223) = +99.64%); background-position: center 3px; } + +div.clc-jobs-multi.blue .header-icon-right, div.clc-jobs-multi.blue .slante= +d-bg .header-icon-right { position: relative; top: -2px; } + +div.clc-jobs-multi.blue .header-icon-right svg:not(.iconLogoGlyph), div.clc= +-jobs-multi.blue .slanted-bg .header-icon-right svg:not(.iconLogoGlyph) { p= +osition: relative; width: 64px; height: 39px; } + +div.clc-jobs-multi.blue .work-remotely > span, div.clc-jobs-multi.blue .sla= +nted-bg .work-remotely > span { background-color: rgb(213, 237, 255); } + +div.clc-jobs-multi.blue .job-wrap .clc-post-tag.highlight, div.clc-jobs-mul= +ti.blue .slanted-bg .job-wrap .clc-post-tag.highlight { color: rgb(52, 73, = +105); background-color: rgb(168, 203, 255); border-color: rgb(168, 203, 255= +); } + +div.clc-jobs-multi.orange, div.clc-jobs-multi.orange .slanted-bg { backgrou= +nd-image: linear-gradient(90deg, rgb(241, 103, 32) 0%, rgb(245, 137, 7) 100= +%); background-position: center 3px; } + +div.clc-jobs-multi.orange .header-icon-right, div.clc-jobs-multi.orange .sl= +anted-bg .header-icon-right { position: relative; top: -2px; } + +div.clc-jobs-multi.orange .header-icon-right svg:not(.iconLogoGlyph), div.c= +lc-jobs-multi.orange .slanted-bg .header-icon-right svg:not(.iconLogoGlyph)= + { position: relative; width: 64px; height: 39px; } + +div.clc-jobs-multi.orange .work-remotely > span, div.clc-jobs-multi.orange = +.slanted-bg .work-remotely > span { background-color: rgb(255, 234, 172); } + +div.clc-jobs-multi.orange .job-wrap .clc-post-tag.highlight, div.clc-jobs-m= +ulti.orange .slanted-bg .job-wrap .clc-post-tag.highlight { color: rgb(93, = +82, 69); background-color: rgb(254, 228, 197); border-color: rgb(254, 228, = +197); } + +div.clc-jobs-multi.tag-themed { background-size: contain; } + +div.clc-jobs-multi.tag-themed span.header-tag { font-size: 0.9em; font-weig= +ht: normal; color: rgb(57, 115, 157); background-color: rgb(228, 237, 244);= + padding: 5px 5px 6px 6px; margin-right: 4px; margin-left: 2px; } + +div.clc-jobs-multi.tag-themed > a.top { font-size: 19px; } + +div.clc-jobs-multi.tag-themed.csharp, div.clc-jobs-multi.tag-themed.csharp = +.slanted-bg { background-image: linear-gradient(89.81deg, rgb(0, 98, 213) 0= +.03%, rgb(44, 124, 244) 99.64%); } + +div.clc-jobs-multi.tag-themed.csharp > a.top svg, div.clc-jobs-multi.tag-th= +emed.csharp .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.csharp .header-icon-right svg:not(.iconLogoGl= +yph), div.clc-jobs-multi.tag-themed.csharp .slanted-bg .header-icon-right s= +vg:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.csharp svg .job-wrap span.highlight, div.clc-= +jobs-multi.tag-themed.csharp .slanted-bg svg .job-wrap span.highlight { col= +or: rgb(52, 73, 105); background-color: rgb(168, 203, 255); border-color: r= +gb(168, 203, 255); } + +div.clc-jobs-multi.tag-themed.java, div.clc-jobs-multi.tag-themed.java .sla= +nted-bg { background-image: linear-gradient(89.81deg, rgb(221, 121, 47) 0.0= +3%, rgb(251, 156, 25) 70.33%); } + +div.clc-jobs-multi.tag-themed.java > a.top svg, div.clc-jobs-multi.tag-them= +ed.java .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.java .header-icon-right svg:not(.iconLogoGlyp= +h), div.clc-jobs-multi.tag-themed.java .slanted-bg .header-icon-right svg:n= +ot(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.java .job-wrap span.highlight, div.clc-jobs-m= +ulti.tag-themed.java .slanted-bg .job-wrap span.highlight { color: rgb(101,= + 83, 71); background-color: rgb(252, 210, 180); border-color: rgb(252, 210,= + 180); } + +div.clc-jobs-multi.tag-themed.python, div.clc-jobs-multi.tag-themed.python = +.slanted-bg { background-image: linear-gradient(89.81deg, rgb(255, 206, 58)= + 0.03%, rgb(255, 223, 78) 99.64%); } + +div.clc-jobs-multi.tag-themed.python > a.top, div.clc-jobs-multi.tag-themed= +.python .slanted-bg > a.top { color: rgb(34, 34, 34); } + +div.clc-jobs-multi.tag-themed.python .header-icon-right svg:not(.iconLogoGl= +yph), div.clc-jobs-multi.tag-themed.python .slanted-bg .header-icon-right s= +vg:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.python .job-wrap span.highlight, div.clc-jobs= +-multi.tag-themed.python .slanted-bg .job-wrap span.highlight { color: rgb(= +32, 84, 120); background-color: rgb(249, 237, 160); border-color: rgb(249, = +237, 160); } + +div.clc-jobs-multi.tag-themed.android, div.clc-jobs-multi.tag-themed.androi= +d .slanted-bg { background-image: linear-gradient(89.81deg, rgb(48, 174, 11= +3) 0.03%, rgb(122, 195, 86) 63.84%); } + +div.clc-jobs-multi.tag-themed.android > a.top, div.clc-jobs-multi.tag-theme= +d.android .slanted-bg > a.top { color: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.android .header-icon-right svg:not(.iconLogoG= +lyph), div.clc-jobs-multi.tag-themed.android .slanted-bg .header-icon-right= + svg:not(.iconLogoGlyph) { position: relative; bottom: 6px; left: 4px; heig= +ht: 34px; width: 35px; fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.android .job-wrap span.highlight, div.clc-job= +s-multi.tag-themed.android .slanted-bg .job-wrap span.highlight { color: rg= +b(32, 84, 120); background-color: rgb(209, 225, 159); border-color: rgb(209= +, 225, 159); } + +div.clc-jobs-multi.tag-themed.cpp, div.clc-jobs-multi.tag-themed.cpp .slant= +ed-bg { background-image: linear-gradient(89.81deg, rgb(0, 68, 130) 0.03%, = +rgb(0, 88, 156) 52.95%, rgb(99, 154, 210) 99.12%); } + +div.clc-jobs-multi.tag-themed.cpp > a.top svg, div.clc-jobs-multi.tag-theme= +d.cpp .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.cpp .header-icon-right svg:not(.iconLogoGlyph= +), div.clc-jobs-multi.tag-themed.cpp .slanted-bg .header-icon-right svg:not= +(.iconLogoGlyph) { position: relative; bottom: 6px; left: 15px; } + +div.clc-jobs-multi.tag-themed.cpp .job-wrap span.highlight, div.clc-jobs-mu= +lti.tag-themed.cpp .slanted-bg .job-wrap span.highlight { color: rgb(255, 2= +55, 255); background-color: rgb(137, 157, 175); border-color: rgb(137, 157,= + 175); } + +div.clc-jobs-multi.tag-themed.ios, div.clc-jobs-multi.tag-themed.ios .slant= +ed-bg { background-image: linear-gradient(89.81deg, rgb(7, 7, 7) 0.03%, rgb= +(91, 91, 91) 99.64%); } + +div.clc-jobs-multi.tag-themed.ios > a.top svg, div.clc-jobs-multi.tag-theme= +d.ios .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.ios .header-icon-right svg:not(.iconLogoGlyph= +), div.clc-jobs-multi.tag-themed.ios .slanted-bg .header-icon-right svg:not= +(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.ios .job-wrap span.highlight, div.clc-jobs-mu= +lti.tag-themed.ios .slanted-bg .job-wrap span.highlight { color: rgb(255, 2= +55, 255); background-color: rgb(151, 151, 151); border-color: rgb(151, 151,= + 151); } + +div.clc-jobs-multi.tag-themed.linux, div.clc-jobs-multi.tag-themed.linux .s= +lanted-bg { background-image: linear-gradient(89.81deg, rgb(3, 3, 3) 0.03%,= + rgb(68, 78, 85) 99.64%); } + +div.clc-jobs-multi.tag-themed.linux > a.top, div.clc-jobs-multi.tag-themed.= +linux .slanted-bg > a.top { color: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.linux > a.top svg, div.clc-jobs-multi.tag-the= +med.linux .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.linux .header-icon-right svg:not(.iconLogoGly= +ph), div.clc-jobs-multi.tag-themed.linux .slanted-bg .header-icon-right svg= +:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.linux .job-wrap span.highlight, div.clc-jobs-= +multi.tag-themed.linux .slanted-bg .job-wrap span.highlight { color: rgb(32= +, 84, 120); background-color: rgb(254, 237, 134); border-color: rgb(254, 23= +7, 134); } + +div.clc-jobs-multi.tag-themed.nodejs, div.clc-jobs-multi.tag-themed.nodejs = +.slanted-bg { background-image: linear-gradient(89.81deg, rgb(62, 137, 62) = +0.03%, rgb(116, 188, 85) 70.33%); } + +div.clc-jobs-multi.tag-themed.nodejs > a.top, div.clc-jobs-multi.tag-themed= +.nodejs .slanted-bg > a.top { color: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.nodejs > a.top svg, div.clc-jobs-multi.tag-th= +emed.nodejs .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.nodejs .header-icon-right svg:not(.iconLogoGl= +yph), div.clc-jobs-multi.tag-themed.nodejs .slanted-bg .header-icon-right s= +vg:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.nodejs .job-wrap span.highlight, div.clc-jobs= +-multi.tag-themed.nodejs .slanted-bg .job-wrap span.highlight { color: rgb(= +51, 51, 51); background-color: rgb(213, 237, 182); border-color: rgb(213, 2= +37, 182); } + +div.clc-jobs-multi.tag-themed.php, div.clc-jobs-multi.tag-themed.php .slant= +ed-bg { background-image: linear-gradient(89.81deg, rgb(141, 110, 170) 0.03= +%, rgb(131, 135, 188) 99.64%); } + +div.clc-jobs-multi.tag-themed.php > a.top svg, div.clc-jobs-multi.tag-theme= +d.php .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.php .header-icon-right svg:not(.iconLogoGlyph= +), div.clc-jobs-multi.tag-themed.php .slanted-bg .header-icon-right svg:not= +(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.php .job-wrap span.highlight, div.clc-jobs-mu= +lti.tag-themed.php .slanted-bg .job-wrap span.highlight { color: rgb(32, 84= +, 120); background-color: rgb(176, 192, 220); border-color: rgb(176, 192, 2= +20); } + +div.clc-jobs-multi.tag-themed.rails, div.clc-jobs-multi.tag-themed.rails .s= +lanted-bg { background-image: linear-gradient(89.81deg, rgb(204, 0, 0) 0.03= +%, rgb(195, 0, 77) 99.64%); } + +div.clc-jobs-multi.tag-themed.rails > a.top svg, div.clc-jobs-multi.tag-the= +med.rails .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.rails .header-icon-right svg:not(.iconLogoGly= +ph), div.clc-jobs-multi.tag-themed.rails .slanted-bg .header-icon-right svg= +:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.rails .job-wrap span.highlight, div.clc-jobs-= +multi.tag-themed.rails .slanted-bg .job-wrap span.highlight { color: rgb(63= +, 76, 85); background-color: rgb(229, 182, 187); border-color: rgb(229, 182= +, 187); } + +div.clc-jobs-multi.tag-themed.go, div.clc-jobs-multi.tag-themed.go .slanted= +-bg { background-image: linear-gradient(89.81deg, rgb(0, 151, 211) 0.03%, r= +gb(45, 188, 175) 72.14%); } + +div.clc-jobs-multi.tag-themed.go > a.top svg, div.clc-jobs-multi.tag-themed= +.go .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.go .header-icon-right svg:not(.iconLogoGlyph)= +, div.clc-jobs-multi.tag-themed.go .slanted-bg .header-icon-right svg:not(.= +iconLogoGlyph) { position: relative; bottom: 5px; left: 10px; } + +div.clc-jobs-multi.tag-themed.dotnet, div.clc-jobs-multi.tag-themed.dotnet = +.slanted-bg { background-image: linear-gradient(89.81deg, rgb(0, 136, 213) = +31.16%, rgb(0, 198, 210) 99.12%); } + +div.clc-jobs-multi.tag-themed.dotnet > a.top svg, div.clc-jobs-multi.tag-th= +emed.dotnet .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.dotnet .header-icon-right svg:not(.iconLogoGl= +yph), div.clc-jobs-multi.tag-themed.dotnet .slanted-bg .header-icon-right s= +vg:not(.iconLogoGlyph) { position: relative; bottom: 8px; left: 15px; width= +: 64px; height: 39px; } + +div.clc-jobs-multi.tag-themed.sql, div.clc-jobs-multi.tag-themed.sql .slant= +ed-bg { background-image: linear-gradient(89.81deg, rgb(248, 173, 1) 0.03%,= + rgb(255, 174, 82) 61.77%); } + +div.clc-jobs-multi.tag-themed.sql > a.top, div.clc-jobs-multi.tag-themed.sq= +l .slanted-bg > a.top { color: rgb(34, 34, 34); } + +div.clc-jobs-multi.tag-themed.sql .header-icon-right svg:not(.iconLogoGlyph= +), div.clc-jobs-multi.tag-themed.sql .slanted-bg .header-icon-right svg:not= +(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.javascript, div.clc-jobs-multi.tag-themed.jav= +ascript .slanted-bg { background-image: linear-gradient(89.81deg, rgb(104, = +159, 99) 0.03%, rgb(32, 153, 115) 64.36%); } + +div.clc-jobs-multi.tag-themed.javascript > a.top svg, div.clc-jobs-multi.ta= +g-themed.javascript .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.javascript .header-icon-right, div.clc-jobs-m= +ulti.tag-themed.javascript .slanted-bg .header-icon-right { max-height: 30p= +x; position: absolute; } + +div.clc-jobs-multi.tag-themed.javascript .header-icon-right svg:not(.iconLo= +goGlyph), div.clc-jobs-multi.tag-themed.javascript .slanted-bg .header-icon= +-right svg:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 41p= +x; width: 47px; } + +div.clc-jobs-multi.tag-themed.reactjs, div.clc-jobs-multi.tag-themed.reactj= +s .slanted-bg { background-image: linear-gradient(89.81deg, rgb(0, 210, 248= +) 42.57%, rgb(48, 237, 206) 99.64%); } + +div.clc-jobs-multi.tag-themed.reactjs > a.top, div.clc-jobs-multi.tag-theme= +d.reactjs .slanted-bg > a.top { color: rgb(34, 34, 34); } + +div.clc-jobs-multi.tag-themed.reactjs .header-icon-right svg:not(.iconLogoG= +lyph), div.clc-jobs-multi.tag-themed.reactjs .slanted-bg .header-icon-right= + svg:not(.iconLogoGlyph) { position: relative; bottom: 5px; left: 15px; } + +div.clc-jobs-multi.tag-themed.angular, div.clc-jobs-multi.tag-themed.angula= +r .slanted-bg { background-image: linear-gradient(89.81deg, rgb(221, 3, 48)= + 0.03%, rgb(227, 0, 110) 69.55%); } + +div.clc-jobs-multi.tag-themed.angular > a.top svg, div.clc-jobs-multi.tag-t= +hemed.angular .slanted-bg > a.top svg { fill: rgb(255, 255, 255); } + +div.clc-jobs-multi.tag-themed.angular .header-icon-right, div.clc-jobs-mult= +i.tag-themed.angular .slanted-bg .header-icon-right { height: 28px; } + +div.clc-jobs-multi.tag-themed.angular .header-icon-right svg:not(.iconLogoG= +lyph), div.clc-jobs-multi.tag-themed.angular .slanted-bg .header-icon-right= + svg:not(.iconLogoGlyph) { width: 38px; height: 38px; position: relative; b= +ottom: 9px; left: 3px; } + +div.clc-jobs-multi.tagged { line-height: 140%; position: relative; } + +div.clc-jobs-multi > a.top { width: 100%; display: block; color: rgb(255, 2= +55, 255); font-style: normal; font-family: "Roboto Slab"; font-size: 19px; = +line-height: 25px; text-decoration: none; padding-left: 12px; } + +div.clc-jobs-multi > a.top .s-tag { font-family: sans-serif; } + +div.clc-jobs-multi > a.top:hover { text-decoration: none; } + +div.clc-jobs-multi > .bottom { background-color: rgb(255, 255, 255); text-a= +lign: center; padding: 6px 12px; } + +div.clc-jobs-multi > .bottom a { display: block; color: rgb(0, 119, 204); t= +ext-decoration: none; cursor: pointer; } + +div.clc-jobs-multi > .bottom a:hover { color: rgb(51, 170, 255); } + +div.clc-jobs-multi > .bottom .change-city { font-size: 10px; color: rgb(159= +, 166, 173); } + +div.clc-jobs-multi > .bottom .change-city:hover { color: rgb(51, 170, 255);= + } + +div.clc-jobs-multi .bottom-ux-research { display: block; text-align: center= +; color: rgb(255, 255, 255); font-size: 13px; padding-top: 12px; padding-bo= +ttom: 12px; } + +div.clc-jobs-multi .bottom-ux-research #ux-cta { font-weight: bold; padding= +-bottom: 6px; } + +div.clc-jobs-multi .bottom-ux-research #ux-how { font-weight: normal; font-= +size: 12.5px; text-decoration: underline; } + +div.clc-jobs-multi.python .bottom-ux-research { color: rgb(34, 34, 34); } + +div.clc-jobs-multi.android .bottom-ux-research { color: rgb(34, 34, 34); } + +div.clc-jobs-multi > .middle { background: rgb(255, 255, 255); } + +div.clc-jobs-multi > .middle.nudge-down { padding-top: 15px; } + +div.clc-jobs-multi > .middle > ul { margin: 0px; padding: 0px; list-style: = +none; display: block; } + +div.clc-jobs-multi > .middle > ul > li { position: relative; } + +div.clc-jobs-multi > .middle > ul > li:first-child { border-top: none; } + +div.clc-jobs-multi > .middle > ul > li:hover .title { color: rgb(51, 170, 2= +55); } + +div.clc-jobs-multi > .middle > ul > li:last-of-type .job-wrap { padding-bot= +tom: 0px; } + +div.clc-jobs-multi > .middle > ul .job-wrap { margin: 0px; padding: 6px 12p= +x; position: relative; } + +div.clc-jobs-multi > .middle > ul .job-wrap a.job { display: block; cursor:= + pointer; text-decoration: none; } + +div.clc-jobs-multi > .middle > ul .job-wrap:first-child { border-top: none;= + } + +div.clc-jobs-multi > .middle > ul .job-wrap .job div { margin: 3px 0px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .title { font-weight: bold; fon= +t-size: 13px; display: block; cursor: pointer; text-decoration: none; color= +: rgb(0, 119, 204); padding-right: 12px; word-break: break-word; } + +div.clc-jobs-multi > .middle > ul .job-wrap .company { font-weight: bold; c= +olor: rgb(133, 140, 147); margin-right: 7px; word-break: break-word; } + +div.clc-jobs-multi > .middle > ul .job-wrap .location { color: rgb(133, 140= +, 147); font-style: italic; display: inline-block; word-break: break-word; = +} + +div.clc-jobs-multi > .middle > ul .job-wrap .location > span { display: inl= +ine-block; } + +div.clc-jobs-multi > .middle > ul .job-wrap .location svg { height: 12px; w= +idth: 12px; position: relative; top: 1px; fill: rgb(181, 183, 184); display= +: inline-block; } + +div.clc-jobs-multi > .middle > ul .job-wrap .work-remotely { line-height: 2= +; } + +div.clc-jobs-multi > .middle > ul .job-wrap .work-remotely > span { color: = +rgb(32, 41, 49); border-radius: 2px; font-weight: 700; padding: 3px 6px 3px= + 5px; display: inline-block; line-height: 1.15385; font-size: 10px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts { text-transform: upperca= +se; font-size: 11px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .opt { margin-right: 7px;= + white-space: nowrap; vertical-align: top; position: relative; display: inl= +ine-block; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .opt svg { position: abso= +lute; display: block; top: 50%; left: 0px; transform: translateY(-50%); } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .opt > span { font-weight= +: 700; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .opt > span:last-child:no= +t(:first-child) { padding-left: 16px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .visa { color: rgb(247, 1= +40, 117); } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .visa svg { fill: rgb(247= +, 140, 117); height: 14px; width: 14px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .remote { color: rgb(219,= + 176, 39); } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .remote svg { fill: rgb(2= +19, 176, 39); height: 14px; width: 14px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .relocate { color: rgb(18= +1, 210, 230); } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .relocate svg { fill: rgb= +(181, 210, 230); height: 14px; width: 14px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .opts .salary { font-weight: bo= +ld; font-size: 11px; color: rgb(69, 161, 99); white-space: nowrap; padding-= +left: 0px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .post-tag { text-align: center;= + color: rgb(57, 115, 157); background-color: rgb(225, 236, 244); padding: 0= +.25em 0.5em; text-decoration: none; font-size: 12px; line-height: 1.4; whit= +e-space: nowrap; display: inline-block; border-radius: 0px; border: 1px sol= +id rgb(225, 236, 244); float: none; font-family: Arial, "Helvetica Neue", H= +elvetica, sans-serif; margin: 0px 2px 2px 0px !important; } + +div.clc-jobs-multi > .middle > ul .job-wrap .post-tag::before, div.clc-jobs= +-multi > .middle > ul .job-wrap .post-tag::after { display: none !important= +; } + +div.clc-jobs-multi > .middle > ul .job-wrap .job-badge { display: inline-bl= +ock; line-height: 24px; height: 24px; border: 1px solid rgb(239, 240, 241);= + border-radius: 2px; color: rgb(106, 115, 124); font-size: 12px; padding-le= +ft: 6px; padding-right: 6px; margin-bottom: 6px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .job-badge svg { display: inlin= +e-block; vertical-align: middle; margin-bottom: 2px; width: 14px; height: 1= +4px; margin-right: 3px; fill: rgb(106, 190, 98); } + +div.clc-jobs-multi > .middle > ul .job-wrap .job-badge.job-badge-high-respo= +nse { margin-top: 3px; } + +div.clc-jobs-multi > .middle > ul .job-wrap .job-badge:last-of-type { margi= +n-bottom: 0px; } + +div.clc-jobs-multi .impression { display: none; } + +div.clc-jobs-multi .footer { font-size: 13px; color: rgb(102, 102, 102) !im= +portant; } + +div.clc-jobs-multi .footer .arrow-ico { color: rgb(187, 187, 187); } + +.clc-g-row, .clc-g-column { position: relative; display: flex; } + +.clc-g-row { flex: 1 1 auto; flex-flow: row nowrap; } + +.clc-g-row._gutters { margin-left: -2px; margin-right: -2px; } + +.clc-g-row._gutters > .g-col { margin: 2px; } + +.clc-g-row._gutters-8 { margin-left: -4px; margin-right: -4px; } + +.clc-g-row._gutters-8 > .g-col { margin: 4px; } + +.clc-g-row._gutters-12 { margin-left: -6px; margin-right: -6px; } + +.clc-g-row._gutters-12 > .g-col { margin: 6px; } + +.clc-g-row._gutters-16 { margin-left: -8px; margin-right: -8px; } + +.clc-g-row._gutters-16 > .g-col { margin: 8px; } + +.clc-g-row._gutters-24 { margin-left: -12px; margin-right: -12px; } + +.clc-g-row._gutters-24 > .g-col { margin: 12px; } + +.clc-g-column { flex: 1 0 auto; flex-flow: column nowrap; } + +.clc-g-column._gutters { margin-top: -2px; margin-bottom: -2px; } + +.clc-g-column._gutters > .g-col { margin: 2px; } + +.clc-g-column._gutters-8 { margin-top: -4px; margin-bottom: -4px; } + +.clc-g-column._gutters-8 > .g-col { margin: 4px; } + +.clc-g-column._gutters-12 { margin-top: -6px; margin-bottom: -6px; } + +.clc-g-column._gutters-12 > .g-col { margin: 6px; } + +.clc-g-column._gutters-16 { margin-top: -8px; margin-bottom: -8px; } + +.clc-g-column._gutters-16 > .g-col { margin: 8px; } + +.clc-g-column._gutters-24 { margin-top: -12px; margin-bottom: -12px; } + +.clc-g-column._gutters-24 > .g-col { margin: 12px; } + +.clc-g-col { flex: 1 1 auto; max-width: 100%; } + +.clc-g-col._right { justify-content: flex-end; margin-left: auto; } + +[class^=3D"clc-g-col"] { display: inline-flex; position: relative; } + +.clc-g-col1 { flex: 0 0 8.33333%; max-width: 8.33333%; } + +.clc-g-col-push1 { margin-left: 8.33333%; } + +.clc-g-col-pull1 { margin-left: -8.33333%; } + +.clc-g-col2 { flex: 0 0 16.6667%; max-width: 16.6667%; } + +.clc-g-col-push2 { margin-left: 16.6667%; } + +.clc-g-col-pull2 { margin-left: -16.6667%; } + +.clc-g-col3 { flex: 0 0 25%; max-width: 25%; } + +.clc-g-col-push3 { margin-left: 25%; } + +.clc-g-col-pull3 { margin-left: -25%; } + +.clc-g-col4 { flex: 0 0 33.3333%; max-width: 33.3333%; } + +.clc-g-col-push4 { margin-left: 33.3333%; } + +.clc-g-col-pull4 { margin-left: -33.3333%; } + +.clc-g-col5 { flex: 0 0 41.6667%; max-width: 41.6667%; } + +.clc-g-col-push5 { margin-left: 41.6667%; } + +.clc-g-col-pull5 { margin-left: -41.6667%; } + +.clc-g-col6 { flex: 0 0 50%; max-width: 50%; } + +.clc-g-col-push6 { margin-left: 50%; } + +.clc-g-col-pull6 { margin-left: -50%; } + +.clc-g-col7 { flex: 0 0 58.3333%; max-width: 58.3333%; } + +.clc-g-col-push7 { margin-left: 58.3333%; } + +.clc-g-col-pull7 { margin-left: -58.3333%; } + +.clc-g-col8 { flex: 0 0 66.6667%; max-width: 66.6667%; } + +.clc-g-col-push8 { margin-left: 66.6667%; } + +.clc-g-col-pull8 { margin-left: -66.6667%; } + +.clc-g-col9 { flex: 0 0 75%; max-width: 75%; } + +.clc-g-col-push9 { margin-left: 75%; } + +.clc-g-col-pull9 { margin-left: -75%; } + +.clc-g-col10 { flex: 0 0 83.3333%; max-width: 83.3333%; } + +.clc-g-col-push10 { margin-left: 83.3333%; } + +.clc-g-col-pull10 { margin-left: -83.3333%; } + +.clc-g-col11 { flex: 0 0 91.6667%; max-width: 91.6667%; } + +.clc-g-col-push11 { margin-left: 91.6667%; } + +.clc-g-col-pull11 { margin-left: -91.6667%; } + +.clc-g-col12 { flex: 0 0 100%; max-width: 100%; } + +.clc-g-col-push12 { margin-left: 100%; } + +.clc-g-col-pull12 { margin-left: -100%; } + +.clc-g-center { display: inline-flex; justify-content: center; align-items:= + center; } + +.clc-g-row.jc-end, .clc-g-column.jc-end, [class^=3D"clc-g-col"].jc-end { ju= +stify-content: flex-end; } + +.clc-g-row.jc-center, .clc-g-column.jc-center, [class^=3D"clc-g-col"].jc-ce= +nter { justify-content: center; } + +.clc-g-row.jc-sp-between, .clc-g-column.jc-sp-between, [class^=3D"clc-g-col= +"].jc-sp-between { justify-content: space-between; } + +.clc-g-row.jc-sp-around, .clc-g-column.jc-sp-around, [class^=3D"clc-g-col"]= +.jc-sp-around { justify-content: space-around; } + +.clc-g-row.ai-start, .clc-g-column.ai-start, [class^=3D"clc-g-col"].ai-star= +t { align-items: flex-start; } + +.clc-g-row.ai-end, .clc-g-column.ai-end, [class^=3D"clc-g-col"].ai-end { al= +ign-items: flex-end; } + +.clc-g-row.ai-center, .clc-g-column.ai-center, [class^=3D"clc-g-col"].ai-ce= +nter { align-items: center; } + +.clc-g-row.ai-right, .clc-g-column.ai-right, [class^=3D"clc-g-col"].ai-righ= +t { } + +.clc-g-row.fw-wrap, .clc-g-column.fw-wrap, [class^=3D"clc-g-col"].fw-wrap {= + flex-wrap: wrap; } + +.clc-g-row.ff-column, .clc-g-column.ff-column, [class^=3D"clc-g-col"].ff-co= +lumn { flex-flow: column nowrap; } + +.clc-g-row.fl-none, .clc-g-column.fl-none, [class^=3D"clc-g-col"].fl-none {= + flex: 0 1 auto; } + +.clc-btn-secondary, .clc-btn-outlined, .clc-btn-clear { position: relative;= + padding: 8px; min-height: unset; border-radius: 2px; border-width: 1px; bo= +rder-style: solid; font-weight: 400; font-family: inherit; line-height: 1.4= +; text-decoration: none; cursor: pointer; outline: none; touch-action: mani= +pulation; transition: all 300ms cubic-bezier(0.165, 0.84, 0.44, 1) 0s; } + +.clc-btn-secondary:hover, .clc-btn-outlined:hover, .clc-btn-clear:hover, .c= +lc-btn-secondary:focus, .clc-btn-outlined:focus, .clc-btn-clear:focus { tex= +t-decoration: none; transition: all 0.1s ease-in-out 0s; outline: none; } + +.clc-btn-secondary[disabled], .clc-btn-outlined[disabled], .clc-btn-clear[d= +isabled] { cursor: default; pointer-events: none; box-shadow: none; opacity= +: 1; } + +.clc-btn-secondary[disabled]:hover, .clc-btn-outlined[disabled]:hover, .clc= +-btn-clear[disabled]:hover { cursor: default; box-shadow: none; } + +.clc-btn-secondary { color: rgb(57, 115, 157); background-color: rgb(225, 2= +36, 244); border-color: rgb(150, 189, 217); box-shadow: rgb(244, 248, 251) = +0px 1px 0px inset; } + +.clc-btn-secondary:hover, .clc-btn-secondary:focus { color: rgb(44, 87, 119= +); background-color: rgb(188, 212, 230); border-color: rgb(76, 141, 189); b= +ox-shadow: rgb(225, 236, 244) 0px 1px 0px inset; } + +.clc-btn-secondary[disabled] { color: rgb(157, 173, 185); background-color:= + rgb(246, 247, 249); border-color: rgb(216, 222, 227); } + +.clc-btn-outlined { color: rgb(0, 119, 204); background-color: rgba(0, 119,= + 204, 0); border-color: rgb(0, 149, 255); box-shadow: none; } + +.clc-btn-outlined:hover, .clc-btn-outlined:focus { color: rgb(0, 89, 153); = +background-color: rgb(230, 244, 255); border-color: rgb(0, 119, 204); box-s= +hadow: none; } + +.clc-btn-outlined[disabled] { color: rgb(161, 166, 170); background-color: = +rgb(242, 242, 243); border-color: rgb(215, 216, 219); } + +.clc-btn-clear { color: rgb(78, 130, 194); background-color: rgba(78, 130, = +194, 0); border-color: transparent; box-shadow: none; } + +.clc-btn-clear:hover, .clc-btn-clear:focus { color: rgb(57, 105, 164); back= +ground-color: rgba(78, 130, 194, 0.1); border-color: transparent; box-shado= +w: none; } + +.clc-btn-clear[disabled] { color: rgb(200, 200, 200); background-color: rgb= +(255, 255, 255); border-color: transparent; } + +.smallGrayText { font-size: 11px; color: rgb(83, 90, 96); } + +.smallBlackText { font-size: 12px; color: rgb(36, 39, 41); } + +.basicList { margin: 0px; padding: 0px; list-style-type: none; } + +.smallIcon { width: 16px; height: 16px; display: inline-block; vertical-ali= +gn: middle; background-size: cover; } + +.narrowModule { margin: 8px 16px 12px; } + +.clc-cp-link { position: absolute; top: 0px; left: 0px; right: 0px; bottom:= + 0px; z-index: 1; } + +.benefit-icon { width: 13px; height: 13px; display: inline-block; vertical-= +align: middle; background-size: 11px; background-position: center center; b= +ackground-repeat: no-repeat; padding: 2px; border: 1px solid rgb(214, 217, = +220); border-radius: 2px; box-sizing: content-box; } + +.benefit-icon svg { fill: rgb(185, 189, 193); } + +.clc-cp-lb { width: 726px; height: 90px; margin-bottom: 10px; position: rel= +ative; } + +.clc-cp-lb.blue { background-image: linear-gradient(90deg, rgb(0, 119, 204)= +, rgb(102, 191, 255)); } + +.clc-cp-lb.red { background-image: linear-gradient(90deg, rgb(244, 128, 36)= +, rgb(244, 128, 36)); } + +.clc-cp-lb.blue-and-green { background-image: linear-gradient(90deg, rgb(0,= + 119, 204), rgb(130, 202, 154)); } + +.clc-cp-lb .clc-cp-lb-back-pattern { background-image: url("../img/cp/leade= +rboard-back-pattern.svg"); background-repeat: no-repeat; background-size: 4= +5%; background-position: 470px -115px; } + +.clc-cp-lb .clc-cp-lb-logo { display: inline-block; width: 64px; height: 64= +px; margin: 9px; border: 4px solid rgb(255, 255, 255); vertical-align: top;= + box-sizing: content-box; color: rgb(255, 255, 255); } + +.clc-cp-lb .clc-cp-lb-logo img { height: 64px; width: 64px; background-colo= +r: rgb(255, 255, 255); } + +.clc-cp-lb .clc-cp-lb-tagline { display: inline-block; width: 392px; height= +: 90px; margin-left: 9px; margin-right: 9px; vertical-align: top; color: rg= +b(255, 255, 255); } + +.clc-cp-lb .clc-cp-lb-tagline .clc-cp-lb-openjobs { display: inline-block; = +padding-left: 4px; padding-right: 8px; line-height: 24px; font-size: 11px; = +} + +.clc-cp-lb .clc-cp-lb-tagline .clc-cp-lb-openjobs.blue, .clc-cp-lb .clc-cp-= +lb-tagline .clc-cp-lb-openjobs.blue-and-green { background-color: rgb(0, 11= +9, 204); } + +.clc-cp-lb .clc-cp-lb-tagline .clc-cp-lb-openjobs.red { background-color: r= +gb(242, 59, 20); } + +.clc-cp-lb .clc-cp-lb-tagline .clc-cp-lb-imagine { height: 56px; max-height= +: 56px; line-height: 56px; overflow: hidden; font-size: 19px; } + +.clc-cp-lb .clc-cp-lb-tagline .clc-cp-lb-imagine span { display: inline-blo= +ck; line-height: 28px; vertical-align: middle; } + +.clc-cp-lb .clc-cp-lb-learnmore { display: inline-block; width: 180px; heig= +ht: 88px; margin-left: 18px; margin-right: 18px; vertical-align: top; posit= +ion: relative; color: rgb(255, 255, 255); } + +.clc-cp-lb .clc-cp-lb-learnmore .clc-cp-lb-learnmore-button { width: 180px;= + height: 32px; box-sizing: border-box; border: 1px solid rgb(255, 255, 255)= +; border-radius: 2px; top: 50%; left: 50%; transform: translate(-50%, -50%)= +; position: relative; display: inline-block; padding: 0.6em 1em; z-index: 1= +; background-color: rgb(255, 255, 255); text-align: center; box-shadow: non= +e; transition: all 0.2s ease-in-out 0s; font-size: 13px; font-style: normal= +; font-weight: normal; text-decoration: none; } + +.clc-cp-lb .clc-cp-lb-learnmore .clc-cp-lb-learnmore-button.blue, .clc-cp-l= +b .clc-cp-lb-learnmore .clc-cp-lb-learnmore-button.blue-and-green { color: = +rgb(0, 119, 204); } + +.clc-cp-lb .clc-cp-lb-learnmore .clc-cp-lb-learnmore-button.red { color: rg= +b(242, 59, 20); } + +.clc-cp-lb.blue .clc-cp-lb-learnmore-button:hover { border-color: rgb(229, = +244, 255); box-shadow: rgb(0, 119, 204) 0px 0px 10px; } + +.clc-cp-lb.red .clc-cp-lb-learnmore-button:hover { border-color: rgb(250, 1= +98, 157); box-shadow: rgb(242, 59, 20) 0px 0px 10px; } + +.clc-cp-lb.blue-and-green .clc-cp-lb-learnmore-button:hover { border-color:= + rgb(220, 240, 226); box-shadow: rgb(0, 119, 204) 0px 0px 10px; } + +.clc-cp-sb--tall { position: relative; border: 1px solid rgb(214, 217, 220)= +; margin-bottom: 18px; background-color: rgb(255, 255, 255); } + +.clc-cp-sb--tall .clc-cp-sb-header { border-top-width: 2px; border-top-styl= +e: solid; margin-bottom: 14px; position: relative; } + +.clc-cp-sb--tall .clc-cp-sb-header.blue, .clc-cp-sb--tall .clc-cp-sb-header= +.blue-and-green { border-top-color: rgb(0, 119, 204); } + +.clc-cp-sb--tall .clc-cp-sb-header.red { border-top-color: rgb(242, 59, 20)= +; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image { height: 114px;= + position: relative; margin-bottom: 8px; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-bgcov= +er { height: 88px; overflow: hidden; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-bgcov= +er .clc-cp-sb-bg-image { position: relative; top: -14px; left: -10px; right= +: -18px; width: 340px; height: 110px; z-index: 0; background-size: cover; b= +ackground-position: center center; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-bgcov= +er .clc-cp-sb-bg-image::before { content: ""; position: absolute; top: 0px;= + left: 0px; right: 0px; bottom: 0px; background-color: rgba(12, 13, 14, 0.2= +5); z-index: 1; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-bgcov= +er .clc-cp-sb-bg-image::after { content: ""; position: absolute; top: 75%; = +width: 100%; height: 100%; z-index: 2; background-color: rgb(255, 255, 255)= +; transform: skewY(-6.25deg); } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-logo = +{ width: 50px; height: 50px; position: absolute; left: 121px; top: 56px; } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-image .clc-cp-sb-logo = +img { top: 0px; left: 0px; width: 50px; height: 50px; padding: 4px; positio= +n: relative; box-sizing: content-box; background-color: rgb(255, 255, 255);= + } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-title .clc-cp-sb-compa= +ny-name { margin-bottom: 0px; transition: color 0.25s linear 0s; word-break= +: break-word; text-align: center; font-size: 17px; font-weight: bold; color= +: rgb(36, 39, 41); } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-title .clc-cp-sb-locat= +ion { transition: color 0.25s linear 0s; text-align: center; font-size: 11p= +x; color: rgb(83, 90, 96); } + +.clc-cp-sb--tall .clc-cp-sb-header .clc-cp-sb-header-title .clc-cp-sb-locat= +ion svg { fill: rgb(106, 115, 124); width: 14px; height: 11px; vertical-ali= +gn: text-top; display: inline-block; } + +.clc-cp-sb--tall .clc-cp-sb-overview { padding-top: 16px; border-top: 1px s= +olid rgb(214, 217, 220); margin: 8px 16px 12px; position: relative; } + +.clc-cp-sb--tall .clc-cp-sb-overview div { text-align: center; } + +.clc-cp-sb--tall .clc-cp-sb-overview div .overview-icon { width: 16px; heig= +ht: 16px; display: inline-block; vertical-align: middle; background-size: c= +over; margin-left: 35px; margin-right: 35px; } + +.clc-cp-sb--tall .clc-cp-sb-overview div .overview-icon svg { fill: rgb(106= +, 115, 124); height: 14px; width: 14px; } + +.clc-cp-sb--tall .clc-cp-sb-overview div { text-align: center; } + +.clc-cp-sb--tall .clc-cp-sb-overview div span { width: 86px; display: inlin= +e-block; vertical-align: top; line-height: 13px; margin-top: 3px; text-alig= +n: center; font-size: 11px; color: rgb(83, 90, 96); } + +.clc-cp-sb--tall .clc-cp-sb-core { margin: 8px 16px 12px; position: relativ= +e; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-techstack { text-align: left; m= +argin-top: 12px; padding-top: 16px; border-top: 1px solid rgb(214, 217, 220= +); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-techstack p { font-size: 11px; = +color: rgb(83, 90, 96); margin-bottom: 8px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-techstack ul { margin: 0px; pad= +ding: 0px; list-style-type: none; max-height: 56px; overflow: hidden; text-= +align: center; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-techstack h2 { margin-bottom: 8= +px; font-size: 19px; font-weight: 400; line-height: 1.4; color: rgb(36, 39,= + 41); text-align: center; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list { margin-top: 12p= +x; padding-top: 16px; border-top: 1px solid rgb(214, 217, 220); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list p { font-size: 11= +px; color: rgb(83, 90, 96); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list ul { margin: 0px;= + padding: 0px; list-style-type: none; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list ul li { margin-bo= +ttom: 8px; text-align: left; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list ul li span { padd= +ing-left: 8px; display: inline-flex; position: relative; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-benefits-list h2 { margin-botto= +m: 8px; font-size: 19px; font-weight: 400; line-height: 1.4; color: rgb(36,= + 39, 41); text-align: center; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs { margin-top: 12px; paddin= +g-top: 16px; border-top: 1px solid rgb(214, 217, 220); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs p { font-size: 11px; color= +: rgb(83, 90, 96); margin-top: 0px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul { margin: 0px; padding:= + 0px; list-style-type: none; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li { text-align: left; = +margin-bottom: 20px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li a.clc-cp-job-link { = +display: block; transition: all 0.15s ease-in-out 0s; border-radius: 3px; p= +adding: 5px 8px; margin: -5px -8px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li a.clc-cp-job-link:ho= +ver { background-color: rgb(246, 247, 247); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li .title { font-weight= +: bold; color: rgb(0, 119, 204); font-size: 13px; transition: all 0.15s eas= +e-in-out 0s; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li .salary { font-weigh= +t: bold; color: rgb(95, 186, 125); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p { margin-bottom: 4= +px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .remote { margin-r= +ight: 8px; font-weight: 700; font-size: 11px; color: rgb(220, 176, 0); posi= +tion: relative; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .remote svg { fill= +: rgb(246, 196, 0); display: inline-block; height: 14px; width: 14px; verti= +cal-align: bottom; position: relative; top: -1px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .relocation { marg= +in-right: 8px; font-weight: 700; font-size: 11px; color: rgb(113, 165, 203)= +; position: relative; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .relocation svg { = +fill: rgb(132, 177, 210); display: inline-block; height: 14px; width: 14px;= + vertical-align: bottom; position: relative; top: -1px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .visa { margin-rig= +ht: 8px; font-weight: 700; font-size: 11px; color: rgb(247, 140, 117); posi= +tion: relative; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-jobs ul li p .visa svg { fill: = +rgb(248, 160, 141); display: inline-block; height: 14px; width: 14px; verti= +cal-align: bottom; position: relative; top: -1px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere { margin-top: 12px; p= +adding-top: 16px; border-top: 1px solid rgb(214, 217, 220); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere p { font-size: 11px; = +color: rgb(83, 90, 96); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere h2 { margin-bottom: 8= +px; font-size: 19px; font-weight: 400; line-height: 1.4; color: rgb(36, 39,= + 41); text-align: center; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul { margin: 0px; pad= +ding: 0px; list-style-type: none; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li { margin-bottom= +: 8px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li .clc-cp-sb-work= +shere-image { display: inline-block; vertical-align: top; padding-right: 4p= +x; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li .clc-cp-sb-work= +shere-image img { width: 42px; height: 42px; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li .clc-cp-sb-work= +shere-name-and-tags { display: inline-block; vertical-align: top; } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li .clc-cp-sb-work= +shere-name-and-tags span:first-child { display: block; font-size: 12px; col= +or: rgb(36, 39, 41); } + +.clc-cp-sb--tall .clc-cp-sb-core .clc-cp-sb-workshere ul li .clc-cp-sb-work= +shere-name-and-tags span:first-child.tall { line-height: 42px; } + +.clc-cp-sb--tall .clc-btn-secondary { color: rgb(57, 115, 157); background-= +color: rgb(225, 236, 244); border-color: rgb(150, 189, 217); box-shadow: rg= +b(244, 248, 251) 0px 1px 0px inset; width: 100%; } + +.clc-cp-sb--tall .clc-cp-sb-learnmore-wrap { background-color: rgb(250, 250= +, 251); } + +.clc-cp-sb--tall .clc-cp-sb-learnmore { display: inline-block; width: 266px= +; height: 32px; margin: 16px; vertical-align: top; position: relative; colo= +r: rgb(0, 149, 255); } + +.clc-cp-sb--tall .clc-cp-sb-learnmore .clc-cp-sb-learnmore-button { width: = +266px; height: 32px; box-sizing: border-box; border: 1px solid rgb(0, 149, = +255); border-radius: 2px; position: absolute; top: 50%; left: 50%; transfor= +m: translate(-50%, -50%); color: rgb(0, 149, 255); padding: 0.6em 1em; back= +ground-color: transparent; text-align: center; box-shadow: none; transition= +: background-color 0.1s ease-in-out 0s; } + +.clc-cp-sb--tall .clc-cp-sb-learnmore .clc-cp-sb-learnmore-button:hover { b= +ackground-color: rgba(102, 191, 255, 0.25); } + +.clc-cp-sb-benefits-list .-list .-icon { width: 24px !important; min-width:= + 24px !important; height: 24px !important; min-height: 24px !important; box= +-sizing: border-box !important; padding: 2px !important; } + +.clc-cp-sb-benefits-list .-list .-icon svg { height: 16px; width: 16px; mar= +gin: 1px; } + +.clc-cp-sb--short { margin-top: 16px; margin-bottom: 16px; cursor: default;= + } + +.clc-cp-sb--short *, .clc-cp-sb--short ::before, .clc-cp-sb--short ::after = +{ box-sizing: border-box; } + +.clc-cp-sb--short .-wrapper { padding: 16px; background-color: rgb(255, 255= +, 255); border: 1px solid rgb(200, 204, 208); font-size: 13px; line-height:= + 1.26667; color: rgb(83, 90, 96); } + +.clc-cp-sb--short .-header { flex-flow: row nowrap; padding-bottom: 18px; m= +argin-left: -4px; } + +.clc-cp-sb--short .-content { padding-bottom: 20px; } + +.clc-cp-sb--short .-company-info { justify-content: center; margin-top: 4px= +; padding-left: 8px; } + +.clc-cp-sb--short._benefits.has-image .-header, .clc-cp-sb--short._jobs.has= +-image .-header { flex-flow: column nowrap; } + +.clc-cp-sb--short._benefits.has-image .-header, .clc-cp-sb--short._benefits= +.has-image .-company-info { align-items: center; } + +.clc-cp-sb--short._benefits.has-image .-company-info { padding-left: 0px; } + +.clc-cp-sb--short .-learn-more { width: 100%; } + +.clc-cp-sb--short .-company { margin-bottom: 0px; font-size: 17px; line-hei= +ght: 1.26667; font-weight: 700; color: rgb(36, 39, 41); word-break: break-w= +ord; } + +.clc-cp-sb--short .-meta-info { font-size: 12px; color: rgb(83, 90, 96); } + +.clc-cp-sb--short .-meta-info._muted { color: rgb(145, 153, 161); } + +.clc-cp-sb--short .-headline { margin-bottom: 8px; font-size: 19px; font-we= +ight: 400; line-height: 1.4; color: rgb(36, 39, 41); } + +.clc-cp-sb--short .-title { font-size: 13px; line-height: 1.26667; color: r= +gb(0, 119, 204); word-break: break-word; } + +.clc-cp-sb--short .-info { font-size: 12px; line-height: 1.26667; color: rg= +b(132, 141, 149); display: inline-block; } + +.clc-cp-sb--short .-info._salary { color: rgb(95, 186, 125); font-weight: 7= +00; } + +.clc-cp-sb--short .-info._remote { margin-right: 8px; font-weight: 700; fon= +t-size: 11px; color: rgb(220, 176, 0); position: relative; } + +.clc-cp-sb--short .-info._remote svg { fill: rgb(246, 196, 0); display: inl= +ine-block; height: 14px; width: 14px; vertical-align: bottom; position: rel= +ative; top: -1px; } + +.clc-cp-sb--short .-info._relocation { margin-right: 8px; font-weight: 700;= + font-size: 11px; color: rgb(113, 165, 203); position: relative; } + +.clc-cp-sb--short .-info._relocation svg { fill: rgb(132, 177, 210); displa= +y: inline-block; height: 14px; width: 14px; vertical-align: bottom; positio= +n: relative; top: -1px; } + +.clc-cp-sb--short .-info._visa { margin-right: 8px; font-weight: 700; font-= +size: 11px; color: rgb(247, 140, 117); position: relative; } + +.clc-cp-sb--short .-info._visa svg { fill: rgb(248, 160, 141); display: inl= +ine-block; height: 14px; width: 14px; vertical-align: bottom; position: rel= +ative; top: -1px; } + +.clc-cp-sb--short .-bg-image { position: absolute; top: -14px; left: -10px;= + right: -18px; height: 64px; z-index: 0; background-size: cover; background= +-position: center center; } + +.clc-cp-sb--short .-bg-image::before { content: ""; position: absolute; top= +: 0px; left: 0px; right: 0px; bottom: 0px; background-color: rgba(12, 13, 1= +4, 0.25); z-index: 1; } + +.clc-cp-sb--short .-bg-image::after { content: ""; position: absolute; top:= + 75%; width: 100%; height: 100%; z-index: 2; background-color: rgb(255, 255= +, 255); transform: skewY(-6.25deg); } + +.clc-cp-sb--short .-logo { box-sizing: content-box; width: 48px; height: 48= +px; padding: 4px; background-color: rgb(255, 255, 255); z-index: 0; } + +.clc-cp-sb--short .-logo > img { width: 48px; height: 48px; } + +.clc-cp-sb--short .-list, .clc-cp-sb--short .-list .-item { margin: 0px; pa= +dding: 0px; list-style-type: none; } + +.clc-cp-sb--short .-list .-item { padding-top: 4px; padding-bottom: 4px; } + +.clc-cp-sb--short._benefits .-list .-item { font-size: 12px; text-align: le= +ft; } + +.clc-cp-sb--short._benefits .-list .-more-benefits { padding-left: 32px; } + +.clc-cp-sb--short._benefits .-list .-icon { width: 24px; min-width: 24px; h= +eight: 24px; min-height: 24px; } + +.clc-cp-sb--short._benefits .-list .-icon svg { height: 16px; width: 16px; = +margin: 1px; } + +.clc-cp-sb--short._benefits .-list .-label { padding-left: 8px; } + +.clc-cp-sb--short._jobs .-list .-title, .clc-cp-sb--short._jobs .-list .-jo= +b-items { margin-bottom: 2px; } + +.clc-cp-sb--short._jobs .-list .-item { padding-top: 6px; padding-bottom: 6= +px; text-align: left; } + +.clc-cp-sb--short._jobs .-list .-item:first-of-type { padding-top: 4px; } + +.clc-cp-sb--short._jobs .-list .-item:last-of-type { padding-bottom: 0px; } + +.clc-cp-sb--short._jobs .-list .-item .-info { white-space: nowrap; margin-= +right: 8px; } + +.clc-cp-sb--short._jobs .-list .-item .-info:last-of-type { margin-right: 0= +px; } + +.clc-cp-sb--short._jobs .-list .-tags .clc-cp-tag { font-size: 11px; } + +.clc-cp-container { font-family: Arial, "Helvetica Neue", Helvetica, sans-s= +erif; font-size: 14px; position: relative; } + +.clc-cp-container .clc-cp-tag { display: inline-block; margin: 2px 2px 2px = +0px; padding: 4px; border: 1px solid transparent; background-color: rgb(225= +, 236, 244); white-space: nowrap; font-size: 12px; line-height: 1.26667; te= +xt-decoration: none; text-transform: lowercase; color: rgb(57, 115, 157); } + +.clc-cp-container .clc-cp-tag.highlight { background-color: rgb(57, 115, 15= +7); color: rgb(255, 255, 255); } + +.clc-cp-container a { text-decoration: none; } +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: font/ttf +Content-Transfer-Encoding: base64 +Content-Location: https://fonts.gstatic.com/s/robotoslab/v10/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjojISmb2Rm.ttf + +AAEAAAARAQAABAAQR0RFRgfQAccAAIYgAAAAWkdQT1MQIhvwAACGfAAADr5HU1VCO9lS3gAAlTwA +AAF+T1MvMnNBgiYAAHEQAAAAYGNtYXBj5mDpAABxcAAAAo5jdnQgUSMdkQAAgvAAAACoZnBnbZ42 +FdIAAHQAAAAOFWdhc3AAAAAQAACGGAAAAAhnbHlmkDiaDwAAARwAAGmIaGVhZBkTBlIAAGzAAAAA +NmhoZWEQ3QMqAABw7AAAACRobXR4+wVJiQAAbPgAAAP0bG9jYV1+d30AAGrEAAAB/G1heHADog/3 +AABqpAAAACBuYW1lNC9OnwAAg5gAAAJgcG9zdP9tAGQAAIX4AAAAIHByZXAWWTpjAACCGAAAANYA +AgBGAAAFtwWwAA8AFQA1QDITAQQADg0KCQYBBgECAkwABAACAQQCaAAAAEBNBQMCAQFBAU4AABEQ +AA8ADxMTEwYKGSszNTcBMwEXFSE1NwMhAxcVEyEDJyMHRmwB/akB9Gv+Xm5g/bljbjIBztYMBgx+ +DwUj+t0Pfn4TAQz+9BN+AkICUCEh//8ARgAABbcHPgImAAEAAAEHAOwCYQEmAAmxAgG4ASawNSsA +//8ARgAABbcHPgImAAEAAAEHAO0BpwEmAAmxAgG4ASawNSsA//8ARgAABbcHPgImAAEAAAEHAOkB +nwEmAAmxAgK4ASawNSsA//8ARgAABbcHPgImAAEAAAEHAOsBswEmAAmxAgG4ASawNSsA//8ARgAA +BbcHdwImAAEAAAEHAO4CCwEmAAmxAgK4ASawNSsA//8ARgAABbcHTQImAAEAAAEHAO8BfwEmAAmx +AgG4ASawNSsAAAIAMwAAB94FsAAZAB4AnkAOHAEBAhgXFBMBBQcFAkxLsBBQWEA1AAECAwIBcgAG +CAUFBnIAAwAECgMEZwAKAAgGCghnAAICAF8AAABATQAFBQdgCwkCBwdBB04bQDcAAQIDAgEDgAAG +CAUIBgWAAAMABAoDBGcACgAIBgoIZwACAgBfAAAAQE0ABQUHYAsJAgcHQQdOWUAUAAAbGgAZABkT +ERERERERERMMCh8rMzU3ASERIychEyEVIRMhNzMRITU3JyEHFxUTIQMnBzONAxkDx6gP/gQUAk79 +uBYCChCn+96cCP3UeVKOAb4fBQh+FAUe/r6n/i6b/fKn/r9+G8XSDn4CEQLGAg4AAwBRAAAE5QWw +ABQAHgAnAElARgQBBQANAQMEAQEBAgNMAwEFAgECAksABAADAgQDZwAFBQBfAAAAQE0AAgIBXwYB +AQFBAU4AACclIR8eHBcVABQAEzUHChcrMzU3ESc1MyEyBBUUBgceAhUUBCMlITI2NTQmJiMhNSEy +NjU0JiMhUaOjowHR5AEBe2VYfkX+/N7+tgFKh5U3cVb+mAE/aoOUjP70fhwEexx/xcVhmSUSaZda +yNOahXpWekKae2p2dQABAFD/6wSWBcUAJABFQEIMAQMBIgEABAJMAAIDBQMCBYAABQQDBQR+AAMD +AWEAAQFGTQAEBABhBgEAAEcATgEAISAdGxQSDg0KCAAkASQHChYrBSIkAjU1NBIkMzIWFxEjJy4C +IyIGAhUVFBIWMzI2NzczEQYGAuPb/tuTmgEgyI3qTZ0VIFNlO4/GZm3RlkaGLBaaUuQVwAFO1BXW +AU3AWET+xuYZIhKT/v6pF7f+/YgiG8v+xDM5AP//AFD+TQSWBcUCJgAKAAAABwDxAjcAAAACAFEA +AAULBbAAEAAcADlANgQBAwABAQECAkwDAQMCAQICSwADAwBfAAAAQE0AAgIBXwQBAQFBAU4AABwa +ExEAEAAPNQUKFyszNTcRJzUzITIEEhUVFAIEIyczMjY2NTU0JiYjI1Gjo6MBl8EBH6Ca/uXB3NKK +xmtrxorSfhwEexx/uP6+zx/K/r27mpf9miGf+5L//wBRAAAFCwWwAiYADAAAAQYA8in2AAmxAgG4 +//awNSsAAAEAUQAABKYFsAATAIxAEgQBAgADAQECAgEFBgEBBwUETEuwDFBYQCwAAQIDAgFyAAYE +BQUGcgADAAQGAwRnAAICAF8AAABATQAFBQdgCAEHB0EHThtALgABAgMCAQOAAAYEBQQGBYAAAwAE +BgMEZwACAgBfAAAAQE0ABQUHYAgBBwdBB05ZQBAAAAATABMREREREREVCQodKzM1NxEnNSERIych +ESEVIREhNzMRUaOjBDaeFv3mAhn95wI6Fp1+HAR7HH/+osb+Jpv98cn+o///AFEAAASmBz4CJgAO +AAABBwDsAewBJgAJsQEBuAEmsDUrAP//AFEAAASmBz4CJgAOAAABBwDtATIBJgAJsQEBuAEmsDUr +AP//AFEAAASmBz4CJgAOAAABBwDpASoBJgAJsQECuAEmsDUrAP//AFEAAASmBz4CJgAOAAABBwDr +AT4BJgAJsQEBuAEmsDUrAAABAFEAAASYBbAAEQBwQBEEAQIAAwEBAhAPAgEEBQQDTEuwDFBYQCAA +AQIDAgFyAAMABAUDBGcAAgIAXwAAAEBNBgEFBUEFThtAIQABAgMCAQOAAAMABAUDBGcAAgIAXwAA +AEBNBgEFBUEFTllADgAAABEAEREREREVBwobKzM1NxEnNSERIychESEVIREXFVGjowRHnhb91QIV +/eujfhwEexx//qLF/gib/hYcfgABAFD/6wTKBcUAJQBMQEkMAQMBHgEEBSMBAAQDTAACAwYDAgaA +AAYABQQGBWcAAwMBYQABAUZNAAQEAGEHAQAARwBOAQAiISAfHBoTEQ4NCggAJQElCAoWKwUiJAI1 +NTQSJDMyFhcRIycmJiMiBgIVFRQSFjMyNjcRJTUhEQYGAuLK/tigoQEYsqrtVKIVMY5hfch0a86T +ZIo1/ukB3D/rFbsBTNoY3AFLuk5C/trTICGQ/v+sGq7+/Y8jHAFWCpH9zDtiAAABAFEAAAXZBbAA +HQA/QDwSEQwLCAcEAwgBABwbGBcUEwIBCAMEAkwAAQAEAwEEaAIBAABATQYFAgMDQQNOAAAAHQAd +ExUzExUHChsrMzU3ESc1IRUHESERJzU7AhUHERcVITU3ESERFxVRo6MCC6MCuKOjxaOjo/31o/1I +o34cBHscf38c/gkB9xx/fxz7hRx+fhwB6f4XHH4AAQBRAAACXAWwAAsAJkAjCgkIBwQDAgEIAQAB +TAAAAEBNAgEBAUEBTgAAAAsACxUDChcrMzU3ESc1IRUHERcVUaOjAgujo34cBHscf38c+4UcfgD/ +/wBRAAACfQc+AiYAFgAAAQcA7AC1ASYACbEBAbgBJrA1KwD//wAjAAACiAc+AiYAFgAAAQcA7f/7 +ASYACbEBAbgBJrA1KwD//wAbAAACkQc+AiYAFgAAAQcA6f/zASYACbEBArgBJrA1KwD//wAvAAAC +XAc+AiYAFgAAAQcA6wAHASYACbEBAbgBJrA1KwAAAQA8/+sETAWwABcANEAxExIPDgQBAwFMAAED +AgMBAoAAAwNATQACAgBiBAEAAEcATgEAERAKCAYEABcBFwUKFisFIiYmJzczFhYzMjY2NREnNSEV +BxEUBgYB93nFdwYCvQR/dlNqM8ICKqNjwRVgwpIGk4pHfVEDeBqBfxz8iILEbAAAAwBRAAAFkwWw +AAgAFAAdADlANhwaGRcWExIREA0MCwoHBAIBEQIAAUwBAQAAQE0FAwQDAgJBAk4VFQkJFR0VHQkU +CRQYFQYKGCsBJwE3JzUhFQcBNTcRJzUhFQcRFxUhNTcnATcBFxUBq2kCswRtAdOJ+3ujowILo6MB +UXgB/m1uAg6GAaV6Av8FDn9/GfrofhwEexx/fxz7hRx+fg4BAi+b/UAZfgAAAQBRAAAEagWwAA8A +XkARCgkEAwQCAAIBAQIBAQMBA0xLsApQWEAYAAIAAQECcgAAAEBNAAEBA2AEAQMDQQNOG0AZAAIA +AQACAYAAAABATQABAQNgBAEDA0EDTllADAAAAA8ADxETNQUKGSszNTcRJzU7AhUHESE3MxFRo6Oj +xaOjAgMXl34cBHscf38c+4Lm/oMA//8AUQAABGoFsAImAB0AAAAHAKMC4gAAAAEAXgAAB2AFsAAe +ADpANx0cGRUTEg8ODQwIBAMCAQ8DAAFMAAMAAgADAoABAQAAQE0FBAICAkECTgAAAB4AHhYVEyUG +ChorMzU3ESc1MyEBMwEhFQcRFxUhNTcREScBIwEHExEXFV6jo6MBBwHVBgHGAbejo/31rAX+J4P+ +FwUHsH4cBHscf/uvBFF/HPuFHH5+HAGmAmMB+5AEbgH9n/5aHH4AAQBTAAAF5QWwABcALkArFhUT +EA8LCggEAwIBDAIAAUwBAQAAQE0EAwICAkECTgAAABcAFxMlJQUKGSszNTcRJzUzMwE3ESc1ITMV +BxEjAQcRFxVTo6OjxwLKBrMBaKOjtP0jBrN+HAR7HH/7kQID0hx/fxz66wR1AvwnHH7//wBTAAAF +5QdNAiYAIAAAAQcA7wGZASYACbEBAbgBJrA1KwAAAgBG/+sFAQXFABUAJwAtQCoAAwMBYQABAUZN +BQECAgBhBAEAAEcAThcWAQAgHhYnFycMCgAVARUGChYrBSImJgI1NTQSNjYzMhYWEhUVFAIGBicy +NhI1NTQCJiMiBgIVFRQSFgKjjeCdU1Od4I2V4plOTpnilZGzVFW0j4O2Xl62FWzFAQ6jFaIBD8Zs +bMb+8aIVo/7yxWykkAEDqxeqAQGRkv7/qReq/v2R//8ARv/rBQEHPgImACIAAAEHAOwCAwEmAAmx +AgG4ASawNSsA//8ARv/rBQEHPgImACIAAAEHAO0BSQEmAAmxAgG4ASawNSsA//8ARv/rBQEHPgIm +ACIAAAEHAOkBQQEmAAmxAgK4ASawNSsA//8ARv/rBQEHPgImACIAAAEHAOsBVQEmAAmxAgG4ASaw +NSsA//8ARv+iBQEF7QImACIAAAAGAPxTAP//AEb/6wUBB00CJgAiAAABBwDvASEBJgAJsQIBuAEm +sDUrAAACAEb/6wdPBcUAIQAzAYdLsBdQWEAUDgECASQPAgUCIx4CAwofAQADBEwbS7AsUFhAFA4B +AgQkDwIFAiMeAgMKHwELAwRMG0AaDgECBA8BBQYeAQkKHwELAwRMJAEGIwEJAktZWUuwDFBYQDEA +BQIHAgVyAAoIAwMKcgAHAAgKBwhnBgECAgFhBAEBAUZNCQEDAwBiDQsMAwAARwBOG0uwF1BYQDMA +BQIHAgUHgAAKCAMICgOAAAcACAoHCGcGAQICAWEEAQEBRk0JAQMDAGINCwwDAABHAE4bS7AsUFhA +RwAFAgcCBQeAAAoIAwgKA4AABwAICgcIZwYBAgIBYQABAUZNBgECAgRfAAQEQE0JAQMDC2ANAQsL +QU0JAQMDAGIMAQAARwBOG0BDAAUGBwYFB4AACggJCAoJgAAHAAgKBwhnAAICAWEAAQFGTQAGBgRf +AAQEQE0ACQkLYA0BCwtBTQADAwBhDAEAAEcATllZWUAjIiIBACIzIjMyMTAvLi0sKyopKCcmJRwa +ExEMCgAhASEOChYrBSImJgI1NTQSNjYzMhYXFSYmIyIGAhUVFBIWMzI2NxUGBjc3ESchESMnIREh +FSERITczEQLLmvCmVVWl8JtQtmVSvF2Vx2Njx5Veu1Jltjc3NwPyqRD9wwIt/dMCSRCoFWzFAQ6j +FaIBD8ZsHx3OMDWS/v+pF6r+/ZEzLsocHxWaBHub/qLD/imb/ffD/qMAAgBRAAAE2gWwABMAHAA9 +QDoEAQQAEhECAQQCAQJMAwEEAUsAAwABAgMBZwAEBABfAAAAQE0FAQICQQJOAAAcGhYUABMAEyY1 +BgoYKzM1NxEnNTMhMhYWFRQGBiMhERcVAyEyNjU0JiMhUaOjowH6nNx0dNyc/sujowE1lJOTlP7L +fhwEexx/bcSDhMRs/lIcfgLin3l5ogACAEYAAASmBbAAFQAgAD9APAkIBAMEAQAUEwIBBAMCAkwA +AQAFBAEFaAAEAAIDBAJnAAAAQE0GAQMDQQNOAAAgHhgWABUAFSQjJQcKGSszNTcRJzUhMxUHFSEy +BBUUBCMhFRcVAyEyNjY1NCYmIyFGo6MBaKOjAQ3nAQT+/Of+86OjAQ1hg0JCg2H+834cBHscf38c +iuy9vuufHH4B00h6S0x8SQAAAgBG/wsFRAXFABkAKwAxQC4YAQIAAgFMGQEASQADAwFhAAEBRk0E +AQICAGEAAABHAE4bGiQiGisbKykjBQoYKwUBBgYjIiYmAjU1NBI2NjMyFhYSFRUUAgcFJTI2EjU1 +NAImIyIGAhUVFBIWBNX+oDJqN4zgnVNTnOCNlOKZTl6BAST9Xo20V1W0j4K2X1229QECEBJsxgEO +ohWiAQ7HbGzH/vKiFcX+w2LL8ZABA6sXqgEBkZL+/6kXqv79kQAAAwBRAAAFBQWvABIAGAAhAH9A +EwQBBgAXERACAQUCAQJMAwEGAUtLsCFQWEAiAAMFAQUDcgAFAAECBQFnAAYGAF8AAABATQgEBwMC +AkECThtAIwADBQEFAwGAAAUAAQIFAWcABgYAXwAAAEBNCAQHAwICQQJOWUAXExMAACEfGxkTGBMY +FRQAEgASJiUJChgrMzU3ESc1ITIWFhUUBgYHBREXFSEBNwEXFQEhMjY1NCYjIVGjowKJn9tyb8yM +/rqjAbb+vMUBDWX8tAENpZaQl/7ffhwEexx+X7SCgK5ZAwb+EBx+AtcC/boSgQMlfnlzhgABAHP/ +6wRcBcUAMABFQEIcAQQFAwECAQJMAAQFAQUEAYAAAQIFAQJ+AAUFA2EAAwNGTQACAgBhBgEAAEcA +TgEAIyEeHRoYCggFBAAwATAHChYrBSImJxEzFxYWMzI2NjU0JiYnLgI1NDY2MzIWFxEjJyYmIyIG +BhUUFhYXFhYVFAYGAl6F9nCZIUGYWGSLSkCTf5bPa3nYkJnrTJkhLYZjVIBIQZN75u1+5RVOUQE3 +5SgsPWxIQ2ZNHSN1p2xytGhdQv7d0CQwO2pIP15HHznfpHW1ZgAAAQBgAAAFGgWwAA8AXEAJDg0C +AQQFAQFMS7AMUFhAGgMBAQAFAAFyBAEAAAJfAAICQE0GAQUFQQVOG0AbAwEBAAUAAQWABAEAAAJf +AAICQE0GAQUFQQVOWUAOAAAADwAPERERERMHChsrITU3ESEHIxEhESMnIREXFQG4o/62HZQEupIe +/rajfhwEgcoBX/6hyvt/HH4AAQBG/+sFrAWwAB0AMUAuGRgVFAoJBgUIAgEBTAMBAQFATQACAgBh +BAEAAEcATgEAFxYQDggHAB0BHQUKFisFIiYmNREnNSEVBxEUFhYzMjY2NREnNSEVBxEUBgYC85bs +iKMCC6NTlGFil1WjAgujhfAVdtuZA0Acf38c/MBtlEtKlG4DQBx/fxz8wJ7bcQD//wBG/+sFrAc+ +AiYAMAAAAQcA7AJYASYACbEBAbgBJrA1KwD//wBG/+sFrAc+AiYAMAAAAQcA7QGeASYACbEBAbgB +JrA1KwD//wBG/+sFrAc+AiYAMAAAAQcA6QGWASYACbEBArgBJrA1KwD//wBG/+sFrAc+AiYAMAAA +AQcA6wGqASYACbEBAbgBJrA1KwAAAQBBAAAFowWwABEAJ0AkDwwLCAYFAgcCAAFMAQEAAEBNAwEC +AkECTgAAABEAERkTBAoYKyEBJzUhFQcBFzM3ASc1IRUHAQKd/hh0AcyFAUYiBiQBUpQBy3X+GAUh +EH9/Ffxic3MDnxR/fxD63wABAEgAAAgJBbAAHQAtQCoaFRIRDggGBQIJAwABTAIBAgAAQE0FBAID +A0EDTgAAAB0AHRMXFxMGChorIQEnNSEVBxMXFzcBMwEXMzcTJzUhFQcBIwEnIwcBAhf+rHsB2Je+ +LAY6ASWtASg5BjS8owHQc/66u/7EKAYn/sMFIg9/fxf837sBuwO4/EjGxgMiF39/D/reA/CTk/wQ +AAABAFAAAAWpBbAAGwAyQC8aGRgXFhMRDwwLCgkIBQMBEAIAAUwBAQAAQE0EAwICAkECTgAAABsA +GxYWFgUKGSszNTcBASc1IRUHAQEnNSEVBwEBFxUhNTcBARcVUH4Bw/5efwHYiQFCATKMAduF/nUB +toH+Io3+p/6ohX4WAk8COBZ/fw3+PwHBDX9/Fv3I/bEWfn4NAdn+Jw1+AAABAEEAAAV0BbAAFwAt +QCoWFRQSDw4LCQgFAwIBDQIAAUwBAQAAQE0DAQICQQJOAAAAFwAXGRYEChgrITU3EQEnNSEVBwEX +NzcBJzUhFQcBERcVAdaj/kB4AfamATUVARQBRKwB7H/+SKN+HAF4AwwTf38T/cQnAiUCPBN/fxP9 +A/55HH4A//8AQQAABXQHPgImADgAAAEHAOwCOgEmAAmxAQG4ASawNSsAAAEAWgAABFMFsAANAJ1A +CggBAAIBAQUDAkxLsAxQWEAjAAEABAABcgAEAwMEcAAAAAJfAAICQE0AAwMFYAYBBQVBBU4bS7AO +UFhAJAABAAQAAXIABAMABAN+AAAAAl8AAgJATQADAwVgBgEFBUEFThtAJQABAAQAAQSAAAQDAAQD +fgAAAAJfAAICQE0AAwMFYAYBBQVBBU5ZWUAOAAAADQANERIRERIHChsrMzUBIQcjESEVASE3MxFa +AvX9yhKeA8n9BwJrEp2VBIG8AVaR+3rP/pgAAgBP/+sEHQROACQALwCmS7AXUFhADxIBAgQoIgIG +Bx0BAAYDTBtADxIBAgQoIgIGBx0BBQYDTFlLsBdQWEAoAAMCAQIDAYAAAQAHBgEHZwACAgRhAAQE +SU0JAQYGAGEFCAIAAEcAThtALAADAgECAwGAAAEABwYBB2cAAgIEYQAEBElNAAUFQU0JAQYGAGEI +AQAARwBOWUAbJiUBACspJS8mLx8eFhQREA0LCAYAJAEkCgoWKwUiJjU0NjYzMzU0JiMiBgcHIzU2 +NjMyFhURFBYXFxUhJiYnBgYnMjY3NSMiBhUUFgGoqbBx1pXBd2xEZCkVmEnCdsXgAQJp/uUJCgI5 +q0RioiPIiIhYFaWWZ5lVamJsIR2X+Ds9vK/99xUoFAt+LEYjSWGlXkLEglBHSwD//wBP/+sEHQYY +AiYAOwAAAAcA7AF1AAD//wBP/+sEHQYYAiYAOwAAAAcA7QC7AAD//wBP/+sEHQYYAiYAOwAAAAcA +6QCzAAD//wBP/+sEHQYYAiYAOwAAAAcA6wDHAAD//wBP/+sEHQZRAiYAOwAAAAcA7gEfAAD//wBP +/+sEHQYnAiYAOwAAAAcA7wCTAAAAAwBP/+sGegROADEAQABKAM9LsCxQWEATEgECBBgBAwIvKQIH +BioBAAcETBtAExIBAgQYAQMCLykCCQYqAQAHBExZS7AsUFhALgADAgECAwGADwsCAQoBBgcBBmcM +AQICBGEFAQQESU0OCQIHBwBhCA0CAABHAE4bQDkAAwIBAgMBgA8LAgEKAQYJAQZnDAECAgRhBQEE +BElNDgEJCQBhCA0CAABHTQAHBwBhCA0CAABHAE5ZQClCQTMyAQBHRUFKQko8OTJAM0AuLCclIiEd +GxYUERANCwgGADEBMRAKFisFIiY1NDY2MzM1NCYjIgYHByM1NjYzMhYXPgIzMhYWFRUhBxYWMzI2 +NxcGBiMgJwYGJzI2NjcmJjU1IyIGFRQWASE1NCYjIgYGBwGzr7Vy1ZbBd2xEZCkVmEnCdnqyMStq +e0OPxmj9OgIBnZtohE5EN7yL/vGdRslqRHldGAYFyIiJWAJKAf94gExyQwgVqplmmFRlYmwhHZf4 +Oz1TUjVKJnXbmHcFn8Y3M4otTdNoa6U2WjYxRisBf1BBWQHwH3qaTYhZAAAC//D/6wQvBhgAFQAk +AHpAFQcGAgMCCgEFAyIhAgQFA0wDAQQBS0uwF1BYQB0AAgJCTQAFBQNhAAMDSU0HAQQEAGEBBgIA +AEcAThtAIQACAkJNAAUFA2EAAwNJTQABAUFNBwEEBABhBgEAAEcATllAFxcWAQAfHRYkFyQODAkI +BQQAFQEVCAoWKwUiJicHIxEnNSERNjYzMhYSFRUUBgYnMjY1NTQmJiMiBgcRFhYCiWqcNBKqowFo +M5dlhr1lZb22i4c8el5bfSUlfxVRT4sFfRx//aJITJH++q4VnOqDoMajFX29a1hK/iJLWAAAAQBO +/+sD3AROACMAQUA+DAECAwFMAAIDBQMCBYAABQQDBQR+AAMDAWEAAQFJTQAEBABhBgEAAEcATgEA +Hx4cGhMRDg0KCAAjASMHChYrBSImJjU1NDY2MzIWFxMjJyYmIyIGBhUVFBYWMzI2NzMXDgICM5Pa +eHTal4PFQwWaIiJmRViFSkWBWWSED7ECBWS5FYn0oCqa9I5WS/78vSMqaK5rKnauX25gBl2iYwD/ +/wBO/k0D3AROAiYARAAAAAcA8QGeAAAAAgBO/+sEhAYYABgAJwCaS7AXUFhAFg4NAgECDAEFAR0c +EgMEBRYTAgAEBEwbQBYODQIBAgwBBQEdHBIDBAUWEwIDBARMWUuwF1BYQB0AAgJCTQAFBQFhAAEB +SU0HAQQEAGEDBgIAAEcAThtAIQACAkJNAAUFAWEAAQFJTQADA0FNBwEEBABhBgEAAEcATllAFxoZ +AQAhHxknGicVFBEPCggAGAEYCAoWKwUiJiY1NTQSNjMyFhcRJzUzMxEXFSEnBgYnMjY3ESYmIyIG +BhUVFBYB84S9ZGS+hWCTNKOjxaP+shA1mTNYeCcmelVeejyGFYPqnBWuAQaRR0MBuRx/+oIcfoFK +TKBQSQH2RFBrvX0Vo8YAAgBO/+sENgXtACMANABCQD8LAQMBKgECAwJMHBsaGRYVEhEQDwoBSgAB +AAMCAQNpBQECAgBhBAEAAEcATiUkAQAuLCQ0JTQJBwAjASMGChYrBSImJjU0NjYzMhYXNyYmJwUn +NyYmJzcWFhc3FwcWEhUVFAYGJzI2Nj0CJiYjIgYGFRQWFgI/keF/ft2OU5U0BBRUO/7wTfUkTSo8 +S4g86U3XaHOE5ItZiE0koXVXhElKiRWB3IqY54FANAVioz6bZowXJRCkFkYvhWZ7ef60yGKj+46a +aLZ0ZDI6UGCiY1iYXQAAAgBK/+sD1AROABoAJQBDQEAXAQMCGAEAAwJMBwEEAAIDBAJnAAUFAWEA +AQFJTQADAwBhBgEAAEcAThwbAQAiIBslHCUVEw8OCggAGgEaCAoWKwUiJiY1NTQ2NjMyFhYVFSEH +HgIzMjY3FwYGASE1NCYmIyIGBgcCN5beeX/TfZLFZP1CAwJFgltklzdNOr/+XwHzN21SQmxGCxWJ +9KAsmvONeNmTewVooVw5MoA4TQKeGk57R02EVAD//wBK/+sD1AYYAiYASAAAAAcA7AF3AAD//wBK +/+sD1AYYAiYASAAAAAcA7QC9AAD//wBK/+sD1AYYAiYASAAAAAcA6QC1AAD//wBK/+sD1AYYAiYA +SAAAAAcA6wDJAAAAAQBAAAAC2wYtABsAQEA9DQEDAg4BAQMaGQIBBAYAA0wAAwMCYQACAkhNBQEA +AAFfBAEBAUNNBwEGBkEGTgAAABsAGxETJSMREwgKHCszNTcRIzUzNTQ2MzIWFwcmJiMiBhUVMxUj +ERcVRqOpqbWiIk8qGBI9G1dU7Oy6fhwDDpKJrb0LCpYEBmdiiZL88hx+AAADAE7+SwRtBE4AIAAv +ADMArkuwGVBYQBgzGgIGAyUkAgUGCwECBQQBAQIDAQABBUwbQBgzGgIGBCUkAgUGCwECBQQBAQID +AQABBUxZS7AZUFhAIwAGBgNfBwQCAwNDTQkBBQUCYQACAkdNAAEBAGEIAQAASwBOG0AnBwEEBENN +AAYGA2EAAwNJTQkBBQUCYQACAkdNAAEBAGEIAQAASwBOWUAbIiEBADIxKSchLyIvHBsYFg8NCAYA +IAEgCgoWKwEiJic3FhYzMjY1NQYGIyImJjU1NBI2MzIWFzczERQGBgMyNjcRJiYjIgYGFRUUFgEn +MxUCJU62RTM3lkeEezWUYITAZ2fAhmaaNBKmacmLWXgnJnpWXn0+igIsTfH+SyslmR0mlIlnREaD +65sVrgEGkVBMiPvUjMptAkBRSgHyRVFsvXwVo8YDDqF+AAEAMQAABOcGGAAdADtAOAQDAgEAHBsa +ExIPDgcCAQoCAwJMAAAAQk0AAwMBYQABAUlNBQQCAgJBAk4AAAAdAB0lFSMVBgoaKzM1NxEnNSER +NjYzMhYVERcVITU3ETQmIyIGBxEXFTGjowFoOKJjrsCj/fWjc3JRhSujfhwE4xx//ZJOVtDY/fQc +fn4cAg6GgE1C/XscfgD//wBDAAACTgYYAiYAUQAAAAcA6gC0AAAAAQBDAAACTgQ6AAkAJEAhCAcE +AwIBBgEAAUwAAABDTQIBAQFBAU4AAAAJAAkVAwoXKzM1NxEnNSERFxVDo6MBaKN+HAMFHH/8YBx+ +//8AQwAAAmsGGAImAFEAAAAHAOwAowAA//8AEQAAAnYGGAImAFEAAAAGAO3pAP//AAkAAAJ/BhgC +JgBRAAAABgDp4QD//wAdAAACTgYYAiYAUQAAAAYA6/UA////yP5LAX0GGAImAFcAAAAHAOoAhgAA +AAH/yP5LAX0EOgARAC1AKgwLBAMBAgMBAAECTAACAkNNAAEBAGIDAQAASwBOAQAODQgGABEBEQQK +FisTIiYnNxYWMzI2NREnNSERFAY4IDQcDQ5DEjtFowForP5LCQmWBQhnWgP4HH/7bae1AAMAQAAA +BOAGGAAJABIAGwA/QDwEAwIDABoXFRQRDw4MCwgHAgENAQMCTAAAAEJNAAMDQ00FAgQDAQFBAU4K +CgAAGRgKEgoSAAkACRUGChcrMzU3ESc1IREXFTM1NycBNwEXFQEnATcnNSEVB0CjowFoo6xuA/7H +ZgG1nPy6SQHWBXQB0ot+HATjHH/6ghx+fg0EAZSd/dYYfgE5mwHUBg1/fxoAAQBAAAACSwYYAAkA +JEAhCAcEAwIBBgEAAUwAAABCTQIBAQFBAU4AAAAJAAkVAwoXKzM1NxEnNSERFxVAo6MBaKN+HATj +HH/6ghx+//8AQAAAAwIGGAImAFkAAAAHAKMBnQAAAAEASgAAB3EETgAwAGpAGgQBBAAvLi0mJSIh +IBkYFRQNBwMCAREDBAJMS7AZUFhAFgYBBAQAYQIBAgAAQ00IBwUDAwNBA04bQBoAAABDTQYBBAQB +YQIBAQFJTQgHBQMDA0EDTllAEAAAADAAMCUVJRUkIxUJCh0rMzU3ESc1IRc2NjMyFhc2NjMyFhUR +FxUhNTcRNCYjIgYHERcVITU3ETQmIyIGBxEXFUqjowFUDTSkbGybJzOocKbAo/30o25sZ30Ko/31 +o3FrWnQfo34cAwUcf41NVGRkXGzj5P4THH5+HAHvoIWRbv3rHH5+HAHvmI1KQ/15HH4AAQBKAAAE +/gROAB0AW0AUBAEDABwbGhMSDw4HAwIBCwIDAkxLsBlQWEATAAMDAGEBAQAAQ00FBAICAkECThtA +FwAAAENNAAMDAWEAAQFJTQUEAgICQQJOWUANAAAAHQAdJRUjFQYKGiszNTcRJzUhFzY2MzIWFREX +FSE1NxE0JiMiBgcRFxVKo6MBUw42o2ivwKP99aNxdFWDJ6N+HAMFHH+hVl/N1v3vHH5+HAINj3hS +R/2FHH4A//8ASgAABP4GJwImAFwAAAAHAO8BIAAAAAIATv/rBBYETgARACMALUAqAAMDAWEAAQFJ +TQUBAgIAYQQBAABHAE4TEgEAHBoSIxMjCggAEQERBgoWKwUiJiY1NTQ2NjMyFhYVFRQGBicyNjY1 +NTQmJiMiBgYVFRQWFgIzltl2dtmUltl2dtiVXn9BQYBfXoBAQIEVjfmgFqD5jo74oRah+YyaZ7Ny +FnKzZ2ezchZys2f//wBO/+sEFgYYAiYAXgAAAAcA7AGRAAD//wBO/+sEFgYYAiYAXgAAAAcA7QDX +AAD//wBO/+sEFgYYAiYAXgAAAAcA6QDPAAD//wBO/+sEFgYYAiYAXgAAAAcA6wDjAAD//wBO/30E +FgS9AiYAXgAAAQYA830EAAixAgGwBLA1K///AE7/6wQWBicCJgBeAAAABwDvAK8AAAADAE7/6wbm +BE4AKAA6AEUAWUBWDAEIByYeAgQDHwEABANMDAEIAAMECANnCQEHBwFhAgEBAUlNCwYCBAQAYQUK +AgAARwBOPDsqKQEAQkA7RTxFMzEpOio6IyEbGRUUEA4KCAAoASgNChYrBSImJjU1NDY2MzIWFzY2 +MzIWFhUVIQceAjMyNjY3FwYGIyImJicGBicyNjY1NTQmJiMiBgYVFRQWFgEhNTQmJiMiBgYHAjKV +2nV12ZSCyUBAw22SxWT9QgMCRYFcQ29cJE07vYdYlncrQMeAXoBBQoBfXn9AQIACWwHzN21SQmxG +CxWN+aAWoPmObmNib3jZk3sFaKFcGjAhgDlMMFtAYWqaZ7NyFnKzZ2ezchZys2cCBBpOe0dNhFQA +AgAi/mAEXwROABkAKAB6QBgHBAIFACYlAwMEBRYBAgQYFwIBBAMCBExLsBlQWEAdAAUFAGEBAQAA +Q00HAQQEAmIAAgJHTQYBAwNFA04bQCEAAABDTQAFBQFhAAEBSU0HAQQEAmIAAgJHTQYBAwNFA05Z +QBQbGgAAIyEaKBsoABkAGScjFQgKGSsTNTcRJzUhFzY2MzIWEhUVFAYGIyImJxEXFRMyNjU1NCYm +IyIGBxEWFiyZowFMEjabZoa+ZGW8hGSXNaxHjJBAf19UeCUld/5gfxwEpBx/hEpOkf77rxWc6oND +Qv6LHH8CJcyjFXy9bExC/fFDSQACABn+YARWBhgAGQAoAFNAUAQDAgEABwEFASYlAgQFFgECBBgX +AgEEAwIFTAAAAEJNAAUFAWEAAQFJTQcBBAQCYQACAkdNBgEDA0UDThsaAAAjIRooGygAGQAZJyMV +CAoZKxM1NxEnNSERNjYzMhYSFRUUBgYjIiYnERcVEzI2NTU0JiYjIgYHERYWGaOjAWg1l2KFvmRl +vINkmDWjUYyQQH9fVXglJXj+YH8cBoIcf/2qREiR/vuvFZzqg0ND/oocfwIlzKMVe75sTUP99UNL +AAACAE7+YARvBE4AFwAmAJdLsBlQWEAWEgEFARwbAgQFAwEABBYVAgEEAwAETBtAFhIBBQIcGwIE +BQMBAAQWFQIBBAMABExZS7AZUFhAHQAFBQFhAgEBAUlNBwEEBABiAAAAR00GAQMDRQNOG0AhAAIC +Q00ABQUBYQABAUlNBwEEBABiAAAAR00GAQMDRQNOWUAUGRgAACAeGCYZJgAXABcTJyUIChkrATU3 +EQYGIyImJjU1NBI2MzIWFzczERcVATI2NxEmJiMiBgYVFRQWAm6jNI9bhL1kZL6FX5Q0EKqZ/bZS +cycndE9eejyG/mB/HAFrPT6D6pwVrgEGkUdEd/rBHH8CJUhCAh89SG3AfRWkywAAAQBIAAADKARO +ABYAVEAQCAQDAwIAFRQTAgEFAwICTEuwGVBYQBIAAgIAYQEBAABDTQQBAwNBA04bQBYAAABDTQAC +AgFhAAEBSU0EAQMDQQNOWUAMAAAAFgAWIyQVBQoZKzM1NxEnNSEXFzY2MzIWFwcnJgYHERcVSKOj +AVMRAi6HVx9BDhqJTmodo34cAwUcf4oTU14LBbcIBVFE/ZscfgAAAQBo/+sDpQROACsARUBCGQEF +AwMBAAICTAAEBQEFBAGAAAECBQECfgAFBQNhAAMDSU0AAgIAYQYBAABHAE4BACAeGxoXFQoIBQQA +KwErBwoWKwUiJicDMxcWFjMyNjU0JicmJjU0NjYzMhYXFyMnJiYjIgYVFBYWFxYWFRQGAgBtvmsC +lSU4aT14aGmKxLlmtnl7r0EKlCAjYD5ccyFeW+KzyxUsLgEBmxcVXERAWR8tl35Yi1I4L/eQGhxW +QSY4LRY1pHiJuQABADf/6wTABi0ANwB0S7AXUFhADCAFAgECHwQCAAECTBtADCAFAgECHwQCAwEC +TFlLsBdQWEAXAAICBGEABARITQABAQBhAwUCAABHAE4bQBsAAgIEYQAEBEhNAAMDQU0AAQEAYQUB +AABHAE5ZQBEBACYkHh0aGAkHADcBNwYKFisFIiYmJzcWFjMyNjU0LgM1ND4CNTQmIyIGFREhNTcR +NDY2MzIWFhUUDgIVFB4DFRQGBgM+OHdiGSsqhDxtZUZnZ0YqOCpiTWV7/pmjabl5baZeKDMoRmlo +Rl6tFRMgFJ8cMF5PN2djZm0+MWFlbDpQYp+S+55+HAPIkc1tTJRtTnlgTyMoUltsg1FqkksAAAEA +GP/vAqYFPwAXAD9APBQBBgEVAQAGAkwAAwIDhQUBAQECXwQBAgJDTQAGBgBiBwEAAEcATgEAEhAN +DAsKCQgHBgUEABcBFwgKFisFIiY1ESM1MxEzETMVIxEUFjMyNjcXBgYByHiNq6vF6+s+NCNWGBsr +fRGNmwKRkgEF/vuS/W9OSg0FgQ0UAAEANP/rBJ0EOgAbAHRLsBdQWEAQGRUREA8FBAcCARYBAAIC +TBtAEBkVERAPBQQHAgEWAQQCAkxZS7AXUFhAEwMBAQFDTQACAgBhBAUCAABHAE4bQBcDAQEBQ00A +BARBTQACAgBhBQEAAEcATllAEQEAGBcUEg0LCAYAGwEbBgoWKwUiJjURJzUzMxEUFjMyNjcRJzUz +MxEXFSEnBgYCJrDGfHzFZmxpiSORkcV8/tMNM6EV4u8B4xx//YCtglVOAnEcf/xgHH6gV14A//8A +NP/rBJ0GGAImAG0AAAAHAOwBvQAA//8ANP/rBJ0GGAImAG0AAAAHAO0BAwAA//8ANP/rBJ0GGAIm +AG0AAAAHAOkA+wAA//8ANP/rBJ0GGAImAG0AAAAHAOsBDwAAAAEAGgAABJgEOgARACdAJA8MCwgG +BQIHAgABTAEBAABDTQMBAgJBAk4AAAARABEZEwQKGCshASc1IRUHExczNxMnNSEVBwECC/5/cAHG +jfAcBiDfkQHFcv6SA6wPf38U/ZhXVwJoFH9/D/xUAAEANAAABvEEOgAdAC1AKhoVEhEOCAYFAgkD +AAFMAgECAABDTQUEAgMDQQNOAAAAHQAdExcXEwYKGishASc1IRUHExczNxMzExczNxMnNSEVBwEj +AycHBwMByv7jeQG/hZUiBizrpuAwBi+XiAG1eP7ou9s0BjPrA60Of38W/eWAgAKw/VKYmAIaFX9/ +EfxWAoquAa39dgAAAQAqAAAEiwQ6ABsAMkAvGhkYFxYTEQ8MCwoJCAUDARACAAFMAQEAAENNBAMC +AgJBAk4AAAAbABsWFhYFChkrMzU3AQEnNSEVBxMTJzUhFQcBARcVITU3AwMXFSp4AUP+xGsBqGze +2HQBoW7+2wFRcP41gu3mdX4XAY4BgRd/fwz+7AEVC39/F/6C/m8Xfn4LASH+3wt+AAABABj+SwSU +BDoAHgA1QDIZFhUTERANCwgBAgMBAAECTAMBAgJDTQABAQBiBAEAAEsATgEAGBcPDggEAB4BHgUK +FisBIiYnNxYWMzI2NzcBJzUhFQcTFzMTJzUhFQcBDgIBNRdKFBQRPAs/TyIv/oF0AcaD0zMG+ooB +vXD+Vh5Ve/5LCwWbAgNgU3IDlRB/fxT9440CqhR/fxD7r057RgD//wAY/ksElAYYAiYAdQAAAAcA +7AGzAAD//wAY/ksElAYYAiYAdQAAAAcA6QDxAAAAAQBYAAADwAQ6AA0AcEAKCAEAAgEBBQMCTEuw +DlBYQCMAAQAEAAFyAAQDAwRwAAAAAl8AAgJDTQADAwVgBgEFBUEFThtAJQABAAQAAQSAAAQDAAQD +fgAAAAJfAAICQ00AAwMFYAYBBQVBBU5ZQA4AAAANAA0REhEREgcKGyszNQEhByMRIRUBITczEVgC +Tf5tGZQDNP2tAc0ak4oDGLYBTob84rf+swAAAQAtAAAEpwYtACEARkBDDQEDAg4BAQMgHxwbGBcC +AQgFAANMAAMDAmEAAgJITQYBAAABXwQBAQFDTQgHAgUFQQVOAAAAIQAhExMTJSMREwkKHSszNTcR +IzUzNTQ2MzIWFwcmJiMiBhUVIREXFSE1NxEhERcVM6Opqda9QoRWITV4P3ZnAmmj/fWj/lyjfhwD +DpJ1tsggHaAVHmhsdfxgHH5+HAMO/PIcfgABADMAAAT6Bi0AIgB4QBEVAQEFISAUExAPAgEIBAAC +TEuwGVBYQCMAAwNCTQAFBQJhAAICSE0HAQAAAV8GAQEBQ00JCAIEBEEEThtAIwAFBQJhAAICSE0H +AQAAAV8GAQEBQ00AAwMEXwkIAgQEQQROWUARAAAAIgAiERMlExIjERMKCh4rMzU3ESM1MzU0NjMy +FhczERcVITU3ESYmIyIGFRUzFSMRFxUzo5CQ69BWqG9Zo/31ozp6Pop7+/ujfhwDDpJOydwgHvqr +HH5+HATKDhF8f06S/PIcfgAAAgBqArQDBQXFACAALACwQA8PDgIBAiUBBQYeAQQFA0xLsBpQWEAk +AAEABgUBBmkAAgIDYQADA1BNAAQEUU0IAQUFAGEHAQAAUQBOG0uwKVBYQCcABAUABQQAgAABAAYF +AQZpAAICA2EAAwNQTQgBBQUAYQcBAABRAE4bQCQABAUABQQAgAABAAYFAQZpCAEFBwEABQBlAAIC +A2EAAwNQAk5ZWUAZIiEBACgmISwiLBsaFBIMCgcFACABIAkLFisBIiY1NDYzMzU0JiMiBhUnJyY2 +MzIWFREUFhcjJiYnBgYnMjY2NzUjIgYVFBYBY3eCqKKKOzpDSaMBBqqMhZ0MDq8ICgMhcCMiSToM +iUtUOwK0empueDQ/RDYxDQZigo6G/sYzWCoVMBovPoscKxhuQi4tMAACAHkCswMsBcUADQAbAExL +sCpQWEAXAAMDAWEAAQFQTQUBAgIAYQQBAABRAE4bQBQFAQIEAQACAGUAAwMBYQABAVADTllAEw8O +AQAWFA4bDxsIBgANAQ0GCxYrASImNTU0NjMyFhUVFAYnMjY1NTQmIyIGFRUUFgHUn7y7np68u51T +WFlUVFlYArO5lXWUu7uUdZW5jWpXdVRra1R1WGkAAgB5/+sEGAXFAA0AGwAtQCoAAwMBYQABAUZN +BQECAgBhBAEAAEcATg8OAQAWFA4bDxsIBgANAQ0GChYrBSICEREQEjMyEhEREAInMjY1ETQmIyIG +FREUFgJJ1vr41tf6+NeDh4mDgYiKFQEqARYBWQEWASv+1f7q/qf+6f7XmsC+Aau9v7+9/lW9wQAB +AHUAAAL/BbAACQAnQCQIBwIBBAEAAUwGBQIASgAAAQCFAgEBAUEBTgAAAAkACRMDChcrMzU3EQc1 +JREXFXnh5QGq4H4cBEMEe1z66hx+AAEASQAABBAFxQAgAGy1AQEFAwFMS7AQUFhAJAABAAQAAQSA +AAQDAwRwAAAAAmEAAgJGTQADAwVgBgEFBUEFThtAJQABAAQAAQSAAAQDAAQDfgAAAAJhAAICRk0A +AwMFYAYBBQVBBU5ZQA4AAAAgACARKCQSKAcKGyszNQE+AjU0JiMiBhUjJyY2NjMyFhYVFAYGBwEX +ITczEWEB3VVgJoR7gI+9AgNw1ZOKx2w/eVX+gQICBRCnhwISX4duO22Vmo0Gfsl1abZ2UJ6mXP5f +Baf+vwAAAQBI/+sD4gXFADAATkBLKgEDBAFMAAYFBAUGBIAAAQMCAwECgAAEAAMBBANnAAUFB2EA +BwdGTQACAgBhCAEAAEcATgEAJSMfHhsZFBIRDwsJBgQAMAEwCQoWKwUiJiY3NzMUFhYzMjY1NCYj +IzUzMjY2NTQmIyIGBhUjJyY2NjMyFhUUBgcWFhUUBgYCEoXQdQMDvEB2Un2OfoisrFdqL3x5TXI/ +vQIDb8uGyvBtbYNtd9IVYbN7Bk1wPoiFh4CaO29OfYI9b0sGbrRq18dasy8ruHKFv2cAAgA/AAAE +WgWwAA4AEwA5QDYRAQIBBQEAAg0MAgEEBAADTAUBAgMBAAQCAGgAAQFATQYBBARBBE4AABAPAA4A +DhEREhMHChorITU3NSE1ATMRMxUjFRcVASERJwcCKqP9cgKC0MnJo/zdAbwGFH4ctm8D8fw6mrYc +fgHqAq0CNQABAF7/6wPWBbAAJQCNQAsaAQMHExICAQMCTEuwF1BYQC0ABQYHBgVyAAEDAgMBAoAA +BwADAQcDaQAGBgRfAAQEQE0AAgIAYQgBAABHAE4bQC4ABQYHBgUHgAABAwIDAQKAAAcAAwEHA2kA +BgYEXwAEBEBNAAICAGEIAQAARwBOWUAXAQAfHRkYFxYVFBAOCggGBAAlASUJChYrBSImJjc3MxQW +MzI2NTQmIyIGBycTIREjJyEDPgI3NhYWFRQGBgIKe8NuAwKyiWx9iot7dGkYpFQDAZQT/k0vHkZT +MYbCaGnNFVqxgwZ2hLCZjbNGSBEDH/7gcf5nFyMWAQF33ZaS2nkAAAIAef/rBCsFxQAeAC0AS0BI +DAECAQ0BAwITAQUDKgEEBQRMAAMABQQDBWkAAgIBYQABAUZNBwEEBABhBgEAAEcATiAfAQAnJR8t +IC0YFhEPCggAHgEeCAoWKwUiJgI1NTQSNjMyFhcHJiYjIgYHFzY2MzIWFhUUBgYnMjY2NTQmIyIG +BgcVFBYCZo7fgIv1n0qTMCYvcEiZtQYEOKJegsBpcMyJUXI9kYBDbU8ZqRWLAQq9xOcBO6IiGpMX +HefpBDQ9e9iKl+aCml6iZZC6JUMtdcvaAAABAEwAAAQkBbAAEQBRtAsBAAFLS7AQUFhAGAABAAMA +AXIAAAACXwACAkBNBAEDA0EDThtAGQABAAMAAQOAAAAAAl8AAgJATQQBAwNBA05ZQAwAAAARABER +ERUFChkrITc2EhI3IQcjESEVBgoCBwcBZRAcfsiM/aAPqAPYhKxpPBUQneYBhgFgrKcBQpud/vP+ ++/7krZ0AAAMAXP/rBA8FxQAbACoAOABFQEIVBwIDBAFMCAEEAAMCBANpAAUFAWEAAQFGTQcBAgIA +YQYBAABHAE4sKx0cAQA0Mis4LDglIxwqHSoPDQAbARsJChYrBSImJjU0NjcmJjU0NjYzMhYWFRQG +BxYWFRQGBicyNjY1NCYmIyIGBhUUFhMyNjY1NCYmIyIGFRQWAjaP1XaUfm18bMKBgMRvgG1+l3jV +jFJ9Rkh+UVF8Rpd+RWs8PmtFaYGCFV+5h3u8LCqrcoCzXl6zgHKrKiy8e4e5X5pAd1JQfEZGe1F8 +jQK2PW5KSHFBiXFvhgAAAgBU/+sEAgXFAB4ALQBLQEgiAQQFCgECBAQBAQIDAQABBEwHAQQAAgEE +AmkABQUDYQADA0ZNAAEBAGEGAQAARwBOIB8BACclHy0gLRcVDw0IBgAeAR4IChYrBSImJzcWFjMy +NjcnBgYjIiYmNTQ2NjMyFhYVERQCBgMyNjc1NCYjIgYGFRQWFgH/TJ8/Hj1/UI6lAwQokFqOzm95 +zX2Y3HeA53xtkSCTjUl2RT92FR0elR0Z2fEFQ0h24J+Y6oV/+7r++eP+1pICeV5JmsHEXaRraZtW +AAEAXwAAAYwDLAAFABxAGQQDAgBKAAABAIUCAQEBdgAAAAUABREDBhcrMxEjNSUR3n8BLQKPhhf8 +1AABAHMAAALKAywAHAA/sQZkREA0AQEEAwFMAAEAAwABA4AAAgAAAQIAaQADBAQDVwADAwRfBQEE +AwRPAAAAHAAcJyQSJwYKGiuxBgBEMzUBNjY1NCYjIgYVIycmNjYzMhYVFAYGBwcXIRV6AS5FKzg6 +Q0mhAgRKi16HmCZaTZkCAWmCAQY7SysyPkAyBkJsQYB0NVJcRocGggAAAQBr//UC5AMsACkAUUBO +JQEDBAFMAAYFBAUGBIAAAQMCAwECgAAHAAUGBwVpAAQAAwEEA2kAAgAAAlkAAgIAYQgBAAIAUQEA +IB4bGhgWExEQDgoIBgQAKQEpCQYWKwUiJiY3NzMUFjMyNjU0JiMjNTMyNTQmIyIGFSMnJjYzMhYV +FAYHFhUUBgGeVYxSBAGjS0BIU0hJhYWDSEU4RqICBql/kahHPpK0CzRlSgYuOTswPzh+bSw5MCgG +Xnd3bjdbGjGKb3wAAgBXAAADKAMhAAoADwA7sQZkREAwDQECAQFMAAECBAFXBQECAwEABAIAZwAB +AQRfBgEEAQRPAAAMCwAKAAoRERIRBwoaK7EGAEQhNSEnATMRMxUjFQEzEScHAgD+XwgBpa5+fv5j +8wYNmGYCI/35gpgBGgE2ARYAAQBz//UC9QMhAB8ATEBJFwECBgYEAgEDAkwAAwIBAgMBgAAEAAUG +BAVnAAYAAgMGAmkAAQAAAVkAAQEAYQcBAAEAUQEAGxkWFRQTEhEPDQoIAB8BHwgGFisFIiYmPwIU +FjMyNTQmIyIGBycTIRUhBzY2NzYWFRQGAbBbkVEEAaJSRJpNQ0FDD5Y0AgX+lBkdTyqElp8LMWBH +BgowNodCUSIeCQHHhbkRGQECkYB6kAABAF8AAAKsAyEADwApQCYJAQABSwMBAgAChgABAAABVwAB +AQBfAAABAE8AAAAPAA8RFQQGGCshNTQ2NjchNSEVDgMVFQELSW87/mECTUNeORt/ecyiOIODT3tz +h1t/AAADAHD/9QMHAywAFwAjAC8BV7YSBgIDBAFMS7AKUFhAHgABAAUEAQVpCAEEAAMCBANpBwEC +AgBhBgEAAEEAThtLsAxQWEAeAAEABQQBBWkIAQQAAwIEA2kHAQICAGEGAQAARwBOG0uwEFBYQB4A +AQAFBAEFaQgBBAADAgQDaQcBAgIAYQYBAABBAE4bS7ASUFhAHgABAAUEAQVpCAEEAAMCBANpBwEC +AgBhBgEAAEcAThtLsBRQWEAeAAEABQQBBWkIAQQAAwIEA2kHAQICAGEGAQAAQQBOG0uwF1BYQB4A +AQAFBAEFaQgBBAADAgQDaQcBAgIAYQYBAABHAE4bS7AZUFhAHgABAAUEAQVpCAEEAAMCBANpBwEC +AgBhBgEAAEEAThtAHgABAAUEAQVpCAEEAAMCBANpBwECAgBhBgEAAEcATllZWVlZWVlAGyUkGRgB +ACspJC8lLx8dGCMZIw0LABcBFwkKFisFIiY1NDY3JiY1NDYzMhYVFAYHFhYVFAYnMjY1NCYjIgYV +FBYTMjY1NCYjIgYVFBYBwpLAWE1CSrCIgqxJP0lXuYxBWVtARmFgSDVLSzY9UFILfHA/ZBwaWztp +c3NpO1sbHGM/cHyCPTQzQ0I0ND0BaTkuLTU0Li45AAEAXwKZAYwFxQAFAB5AGwIBAgBKAAABAIUC +AQEBUQFOAAAABQAFEwMLFysBEQUVMxEBjP7TfwKZAywXhv1xAAABAHMCmwLKBccAHAAzQDAbAQAB +SwACAwADAgCAAAMDAWEAAQFQTQAAAARfBQEEBFEETgAAABwAHCIjKBEGCxorATUhJzc+AjU0JiMi +BgYXFzM0NjMyFhUUBgcBFQLK/pcCmU1aJpiHXotKBAKhSUM6OCtF/tICm4IGh0ZcUjV0gEBtQgYy +QD4yK0s7/vqCAAABAGsCjwLkBcYAKQBOQEsXAQEAAUwABgcABwYAgAADAQIBAwKACAEAAAEDAAFp +AAcHBWEABQVQTQACAgRhAAQEUwROAQAmJCIgHhwTEQ0MCggEAgApASkJCxYrASMVMzIWFRQGIyIm +NSMHBhYWMzI2NTQnNjY1NCYjIgYXFzM0NjMyFhUUAaiFhUlIU0hAS6MBBFKMVZK0kj5HqJF/qQYC +okY4RUgEcX44PzA7OS4GSmU0fG+KMRpbN253d14GKDA5LG0AAgBDAjADTwXFAAoADwAyQC8OAQQA +AwEBBAJMAAIBAoYFBgIEAwEBAgQBZwAAAFAATgAADAsACgAKERESEQcLGisBESMBFyEVMzUzNSEh +EzcXArqy/jsEAceslf6//vP6DQYDaQJc/YNguLiBAWAaAQAAAQAqAG4DXgUjAAMABrMCAAEyKzcn +AReXbQLHbW5DBHJD//8AtwAABfQFxAAnAJIBJAAIACcAhwBYApgBBwCIAyoAAAARsQABsAiwNSux +AQG4ApiwNSsA//8AtwAABeIFxAAnAIcAWAKYACcAkgEXAAgBBwCKAroAAAARsQABuAKYsDUrsQEB +sAiwNSsA//8AewAABp8FxwAnAJIBzwAIACcAigN3AAABBwCJABACmwARsQABsAiwNSuxAwG4Apuw +NSsA//8AbP/1BlIFsgAnAIcADQKGACcAkgEHAAABBwCNA0sAAAAJsQABuAKGsDUrAP//AG//9Qbp +BcAAJwCJAAQClAAnAJIBvgAAAQcAjQPiAAAACbEAAbgClLA1KwD//wBv//UHGAWvACcAi//8Ao4A +JwCSAfYAAAEHAI0EEQAAAAmxAAG4Ao6wNSsA//8Aa//1BnIFrwAnAIwADAKOACcAkgE2AAABBwCN +A2sAAAAJsQABuAKOsDUrAAABAJEAAAFWAMoAAwAZQBYAAAABXwIBAQFBAU4AAAADAAMRAwoXKzM1 +MxWRxcrKAAABABf+yQE7AN0ACQAPQAwBAQBJAAAAdhUBChcrEyc2NjU1MxUUBoZvLzDFYv7JSkiW +VJiVYtYA//8AkQAAAVYEOgAmAJoAAAEHAJoAAANwAAmxAQG4A3CwNSsA//8ANf7JAVkEOgAnAJoA +AQNwAQYAmx4AAAmxAAG4A3CwNSsA//8AkgAABLQAygAmAJoBAAAnAJoBuwAAAAcAmgNeAAAAAgCP +AAABVAWwAAMABwAsQCkEAQEBAF8AAABATQACAgNfBQEDA0EDTgQEAAAEBwQHBgUAAwADEQYKFysT +ETMRAzUzFY/FxcUB3gPS/C7+IszM//8Aj/6KAVQEOgFHAJ8AAAQ6QADAAAAJsQACuAQ6sDUrAAAC +AEAAAAN6BcUAIAAkAD1AOgABAAMAAQOABgEDBAADBH4AAAACYQACAkZNAAQEBV8HAQUFQQVOISEA +ACEkISQjIgAgACAkEisIChkrATQ+Ajc+AjU0JiMiBhUjJyY2NjMyFhUUBgYHDgIVAzUzFQFoCh08 +M0dPIXFpW3+8AwJpunjF2jlyViMgCcfNAZpJXkRELkBuaDZqcmNgBmugWMm0Vo2NVyQ7Sz3+ZtDQ +AP//ADr+dgN0BDsBDwChA7QEO8AAAAmxAAK4BDuwNSsA//8AoAJ2AWUDQAEHAJoADwJ2AAmxAAG4 +AnawNSsAAAEAhwIXAiUD4QANAB9AHAABAAABWQABAQBhAgEAAQBRAQAIBgANAQ0DChYrASImNTU0 +NjMyFhUVFAYBVl9wcF5fcXECF21ZPFhwcFg8WW0AAQBCAl8DfQWwAA4AHEAZDg0MCwoHBgUEAwIB +DABJAAAAQABOGAEKFysBAwMnEyU3BQMzAyUXBRMCjbWwhMb+2DEBKAqhCgElMP7SwQJfAR/+6V0B +ElmabwFW/qRunFn+8gACAD8AAASbBbAAGwAfAHpLsBdQWEAoDgkCAQwKAgALAQBnBgEEBEBNDwgC +AgIDXwcFAgMDQ00QDQILC0ELThtAJgcFAgMPCAICAQMCaA4JAgEMCgIACwEAZwYBBARATRANAgsL +QQtOWUAeAAAfHh0cABsAGxoZGBcWFRQTEREREREREREREQofKzMTIzUhEyM1IRMzAzMTMwMzFSMD +MxUjAyMTIQMTIRMh2lDrAQdE/wEbUpdS/1KXUsjjRNz4UJdQ/wBQbAEARP8AAZqMAVyOAaD+YAGg +/mCO/qSM/mYBmv5mAiYBXAAAAQAA/4MDBgWwAAMAGUAWAgEBAAGGAAAAQABOAAAAAwADEQMKFysV +ATMBAmCm/aF9Bi350wAAAQAk/4MDPgWwAAMAGUAWAgEBAAGGAAAAQABOAAAAAwADEQMKFysFATMB +AoT9oLoCYH0GLfnTAAABAHL+MQKKBmQAGQAGswsAATIrASYmAgI1NTQSEjY3FxcOAgIVFRQSFhYX +BwJfV6+QV1eQr1cGJUV6XjY2XXtFJf4xL70BDwFUxgnFAVQBEL4uAXQ2rOr+3K4Nrv7c67A6bAAA +AQAL/jECIwZkABkABrMNAAEyKxMnPgISNTU0AiYmJzczFhYSEhUVFAICBgcwJUR6Xjc5YHlBJQZX +rpFXV5GuV/4xbDWu7QEprg2rASbusTdsLr7+8P6sxQnG/qz+8b0vAAABAD/+lAKfBj0AHgAnQCQX +AQABAUwQDwIBSh4BAEkAAQAAAVkAAQEAYQAAAQBRERYCChgrASYmNTU0JiM1MjY1NTQ2NxcGBhUV +FAYHFhYVFRQWFwJ3w6VmampmpcMobl1UVVVUXW7+lDfwqs1wfZN7cc6r7zd1I7WEzmmgLS6hZ82E +syQAAAEAG/6UAnsGPQAeAClAJggBAQABTBAPAgBKAQEBSQAAAQEAWQAAAAFhAAEAAVEZGBcWAgoW +KxMnNjY1NTQ2NyYmNTU0Jic3FhYVFRQWMxUiBhUVFAZDKGxeWl5eWl5sKMKlZmtrZqX+lHYks4TN +a6ArKaBtzoS1I3U376vOcXuTfXDNqvAAAQCd/sgCHQaAAAcAKEAlAAAAAQIAAWcAAgMDAlcAAgID +XwQBAwIDTwAAAAcABxEREQUKGSsTESEVIxEzFZ0BgLu7/sgHuJv5fpsAAAEAF/7IAZgGgAAHAChA +JQACAAEAAgFnAAADAwBXAAAAA18EAQMAA08AAAAHAAcREREFChkrEzUzESM1IREXvLwBgf7ImwaC +m/hIAAABAJoCGgKDArQAAwAeQBsAAAEBAFcAAAABXwIBAQABTwAAAAMAAxEDChcrEzUhFZoB6QIa +mpoA//8AmgIaAoMCtAIGAK8AAP//AKECiATfAyMARgDP2QBTM0AAAAEApQKIBd0DIwADAB5AGwAA +AQEAVwAAAAFfAgEBAAFPAAAAAwADEQMKFysTNSEVpQU4AoibmwAAAQB3/2YEEQAAAAMAJrEGZERA +GwAAAQEAVwAAAAFfAgEBAAFPAAAAAwADEQMKFyuxBgBEFzUhFXcDmpqamv//ABf+yQE7AN0CBgCb +AAD//wAX/skCbQDdACYAmwAAAAcAmwEyAAD//wBgA/wCygYrACYAuAAAAAcAuAFGAAD//wA6A+EC +nAYYACYAuQ0AAAcAuQFLAAAAAQBgA/wBhAYrAAoAFkATBgUCAEoBAQAAdgAAAAoACgIKFisTNTQ2 +NjcXBgYVFWArUThwMC8D/LBCjoAvSUmVVbMAAQAtA+EBUQYYAAoAEUAOAQEASQAAAEIAThUBChcr +Eyc2NjU1MxUUBgadcC8wxSxRA+FKR5VWu7hDjoD//wA6AHUDQwOSACYAvPbdAQcAvAFE/90AErEA +Abj/3bA1K7EBAbj/3bA1K///AGkAmAN9A7UAJgC9FgAABwC9AW8AAAABAEQAmAH/A7UABgAlQCIF +AQIBAAFMAAABAQBXAAAAAV8CAQEAAU8AAAAGAAYTAwoXKyUBNQEzAxMBa/7ZASeU//+YAYUTAYX+ +cf5yAAABAFMAmAIOA7UABgAlQCIEAQIBAAFMAAABAQBXAAAAAV8CAQEAAU8AAAAGAAYSAwoXKzcT +AzMBFQFT/v6UASf+2ZgBjgGP/nsT/nv//wCmBB8CegYYACYAvwAAAAcAvwE2AAAAAQCmBB8BRAYY +AAUAH0AcBAEBAAFMAgEBAQBfAAAAQgFOAAAABQAFEgMKFysTETUzFQOmnj0EHwEtzN/+5v//AAAA +AAAAAAACBgDBAAAAAQBo/wsD+wUmACoASUBGDQoCAgAQAQECKQECBQMDTAABAgQCAQSAAAQDAgQD +fgAAAAIBAAJpAAMFBQNZAAMDBV8GAQUDBU8AAAAqACoTJyMVGwcKGysFNS4CNTU0NjY3NTMVFhYX +FyMnJiYjIgYGFRUUFhYzMjY2NTMXFgYGBxUB03ehU1Ohd8VoqDoJnSsjbkVnfzo5f2hBcUWyAgNe +omP17RmV3YUqg9yVG+XcDFFA8KoiKmavbCpvr2U4XjsGUpRpEOYAAgBe/+UFUATxACMANwBFQEIb +GRMRBAMBIhwQCgQCAyMJBwEEAAIDTBoSAgFKCAEASQABAAMCAQNpBAECAgBhAAAARwBOJSQvLSQ3 +JTcXFSMFChcrBScGBiMiJicHJzcmJjU0NjcnNxc2NjMyFhc3FwcWFhUUBgcXJTI+AjU0LgIjIg4C +FRQeAgTEhU25ZWW4TYKKijI1OTaSio9Ks2BhskuSjJY0OTUwjv2EVZVxQEBxlVVWlnFAQHGWG4c+ +QkE+hYqMTLVjZrxOlYuSNz0+OJWMmU65ZWKzTI8rRn2kXl2jfEZGfKNdXqR9RgABAFD/MAP0Bp0A +NABFQEIdGgIEAjMBAgUBAkwAAwQABAMAgAAAAQQAAX4AAgAEAwIEaQABBQUBWQABAQVfBgEFAQVP +AAAANAA0IiQfIyUHChsrBTUuAjc3MxQWFjMyNjY1NCYmJy4CNTQ2NzUzFRYWFSMjNCYjIgYVFBYW +Fx4CFRQGBxUB1nKyYgICvkd6S1Z6QTd5Yoa2XL6mnqe5DrZ9cHZ2NHpqiLJYzrTQvwxnvIoFZn45 +OGhIPGBOISl0pXGl0BXd3hjvyYioe2tAX0wkLHOgcazME78AAAEAR//rA80FxQAuAGFAXhYBBQQX +AQMFLAQCCgktAQAKBEwIAQkBSwYBAwcBAgEDAmcIAQEACQoBCWcABQUEYQAEBEZNAAoKAGELAQAA +RwBOAQArKSUkIyIhIB8dGxkUEg4NDAsKCQAuAS4MChYrBSImJic0NDUjNTM1IzUzNTQ2NjMyFhcH +JiYjIgYVFSEVIRUhFSEHBhYWMzI3FwYC3ZjmgwOSkpKSgeeaO3VCFDVxOJKrAev+FQHr/hwCAkuP +YndlFHQVgOmfAwcDfKZ9D6PwhBAPnxATzqwRfaZ8BXCpXSKdHwAAAQBEAAAEUwXFACUAhbQBAQcB +S0uwEFBYQC8AAwQBBAMBgAAIAAcHCHIFAQEGAQAIAQBnAAQEAmEAAgJGTQAHBwlgCgEJCUEJThtA +MAADBAEEAwGAAAgABwAIB4AFAQEGAQAIAQBnAAQEAmEAAgJGTQAHBwlgCgEJCUEJTllAEgAAACUA +JREUERMiIiMRFwsKHyszNTM+AjUnIzUzAzQ2MzIWBwcjNCYjIgYVEyEVIRcUBgchNzMRhAofKxUG +o50K4LzI3AQCvX9iY3QKAaP+YgYfHQInEKeaCWGJRZWbAQ7M6dGsBnZylYX+8puVWqM7p/6/AAEA +OwAABTcFsAAlAEtASBkWFRIQDwwHAwQkIwIBBAoAAkwGAQMHAQIBAwJoCAEBCQEACgEAZwUBBARA +TQsBCgpBCk4AAAAlACUiIRERExkTEREREwwKHyshNTc1ITUhNSE1IQEnNSEVBwEXNzcBJzUhFQcB +IRUhFSEVIRUXFQGwo/6JAXf+iQE3/rOLAbpXAQUWBBIBBVYBuYv+swE4/oEBf/6Bo34crHqnewI6 +FX9/D/4gKQciAeAPf38U/cV7p3qsHH4A//8AKgBuA14FIwIGAJIAAAABAEkAkgQvBLYACwAsQCkA +AgEFAlcDAQEEAQAFAQBnAAICBV8GAQUCBU8AAAALAAsREREREQcKGyslESE1IREzESEVIREB2v5v +AZHFAZD+cJIBy7IBp/5Zsv41AAEAmgKIA90DIwADAB5AGwAAAQEAVwAAAAFfAgEBAAFPAAAAAwAD +EQMKFysTNSEVmgNDAoibmwAAAQBPAOED2AR5AAsABrMEAAEyKzcnAQE3AQEXAQEHAc1+AUf+uX4B +RgFHfv64AUh+/rnhfgFOAU5+/rMBTX7+sv6yfgFMAAMASgC0BDAEsgADAAcACwBAQD0ABAgBBQAE +BWcAAAYBAQIAAWcAAgMDAlcAAgIDXwcBAwIDTwgIBAQAAAgLCAsKCQQHBAcGBQADAAMRCQoXKxM1 +IRUBNTMVAzUzFUoD5v2rxsbGAlW8vP5fy8sDM8vLAAIAkwGXA9UD2wADAAcAL0AsAAAEAQECAAFn +AAIDAwJXAAICA18FAQMCA08EBAAABAcEBwYFAAMAAxEGChcrEzUhFQE1IRWTA0L8vgNCAzekpP5g +pKQAAQB9AFcD1APhAAkABrMHAAEyKzc1JTc1JyU1ARV9AlZUVP2qA1dXxO4RBhTqw/6GlQABAEwA +awN8A/UACQAGswMAATIrJQE1ARUFBxUXBQN8/NADMP3RVVUCL2sBe5UBesnpEgYT5AACAEsABQPf +BPMACwAPADhANQMBAQQBAAUBAGcAAggBBQYCBWcABgYHXwkBBwdBB04MDAAADA8MDw4NAAsACxER +ERERCgobKwERITUhETMRIRUhEQE1IRUBx/6EAXyyAWb+mv4DA0MBIQGdmgGb/mWa/mP+5JubAAAB +AHkBkQTpAyMAGwA/sQZkREA0GBcCAQIKCQIAAwJMAAIAAQMCAWkAAwAAA1kAAwMAYQQBAAMAUQEA +FRMPDQcFABsBGwUKFiuxBgBEASImJyYmIyIGFSc0NjYzMhYXFhYzMjY1FxQGBgO4WZNVPGIxQ1+N +TolYWJZVO18zQmGOUIoBkUJKMDBqSxJblVlFRjMuck0SW5tdAAEAeQF3A7sDIgAFAEZLsApQWEAX +AwECAAACcQABAAABVwABAQBfAAABAE8bQBYDAQIAAoYAAQAAAVcAAQEAXwAAAQBPWUALAAAABQAF +EREEChgrAREhNSERAvb9gwNCAXcBBqX+VQAAAQBHAtkDIgWwAAkAJ7EGZERAHAYBAQABTAAAAQCF +AwICAQF2AAAACQAJEREEChgrsQYARBMBMwEjAycjBwNHASuGASq2phAGEKMC2QLX/SkBo0ZG/l0A +AAEAQv5gBOEEOgAcAGNAEREODQwCAQYBABsVEgMDAQJMS7AXUFhAGAIBAABDTQABAQNhBAEDA0FN +BgEFBUUFThtAHAIBAABDTQADA0FNAAEBBGEABARHTQYBBQVFBU5ZQA4AAAAcABwjExUjIwcKGysT +ESc1MzMRFBYzMjY3ESc1IREXFSEnBgYjIiYnEeWjo8RuZmN6H6MBaKP+rAksgFNIbCj+YAU/HH/9 +kr2KSUcCihx//GAcfm1AQiEj/jEAAAUATf/rBWgFxQADABUAIwA1AEMAWkBXAwICBgcBAQIDAkwL +AQYKAQQBBgRpAAEAAwIBA2kABwcFYQAFBUZNCQECAgBhCAEAAEcATjc2JSQXFgUEPjw2QzdDLiwk +NSU1HhwWIxcjDgwEFQUVDAoWKyUnARcDIiYmNTU0NjYzMhYWFRUUBgYnMjY1NTQmIyIGFRUUFgEi +JiY1NTQ2NjMyFhYVFRQGBicyNjU1NCYjIgYVFRQWAaZtAsdtMVyISkqHW1uIS0qHW0pQUkpKUFH9 +iluIS0qHW1yISkqHW0lRUkpKUFFuQwRyQ/sLT4hVTlSIUE+IVU5ViE96Z0tOSmhoSk5LZwK7T4dV +TVWIUE+JVU1Vh096ZktNSmlpSk1KZwACAEn+OwazBZcAOQBJAPxLsBRQWEAUHwEJBEE9EwMFCTYB +BwI3AQAHBEwbQBQfAQkEQT0TAwgJNgEHAjcBAAcETFlLsBRQWEArAAQACQUECWkABgYBYQABAUBN +CwgCBQUCYQMBAgJHTQAHBwBhCgEAAEsAThtLsChQWEA1AAQACQgECWkABgYBYQABAUBNCwEICAJh +AwECAkdNAAUFAmEDAQICR00ABwcAYQoBAABLAE4bQDMAAQAGBAEGaQAEAAkIBAlpCwEICAJhAwEC +AkdNAAUFAmEDAQICR00ABwcAYQoBAABLAE5ZWUAfOzoBAEVDOkk7STQyLComJB0bFhQRDwkHADkB +OQwKFisBIiQCExISJDMyBBIDDgIjIiYnBiMiJjc2EjYzMhYXFwMGFhYzMjY3EgAhIgQCBwYSBDMy +NjcXBgYDMjY3JjY3EyYmIyIGBwYWA1/9/pu0DQ3YAXb4/QFfrgsGZsWTSWsXY759ihIPc7FtaX9N +AjMGGDMie5MIEf6//rHO/s6wCgyQASPRWLQ+J0TPjT9rLAEBAi8aOR99hBULQv474gGhASABGgGu +8eL+X/7ij+2PU0ue8cStAQGONDYE/bdJVSPjrwF+AavS/oj3+/6UxisjayovAkMyPwwaEAIaDA7a +342VAAMASv/rBNoFxQAnADIAPwCZS7AWUFhAEhkHAgIFLCshGgQEAiUBAAQDTBtAEhkHAgIFLCsh +GgQEAiUBAwQDTFlLsBZQWEAkAAUFAWEAAQFGTQACAgBhAwYCAABHTQcBBAQAYQMGAgAARwBOG0Ah +AAUFAWEAAQFGTQACAgNfAAMDQU0HAQQEAGEGAQAARwBOWUAXKSgBADs5KDIpMiQiHh0SEAAnAScI +ChYrBSImJjU0Njc2NjcmJjU0NjYzMhYWFRQGBwcBNjY1MxQGBxcHIycGBicyNjcBBwYGFRQWEzc2 +NjU0JiMiBhUUFgIkkNV1iIcDBQJOTFikcmqgWmlnbQFUKS6wTkq5AuVVUMJoSIw+/pcoWzuOXYo5 +KWFOUVg2FWm6eni0WwIDAWObUnGdUlSMVmKPS1D+Z0GeWIPgWeAFZjw/mjEuAbMdRHwycZIC9l8m +WTY9XnFSNXMAAAEATgAAA/UFsAASAC1AKg8OAgABERACAQQCAAJMAAAAAV8AAQFATQMBAgJBAk4A +AAASABImIwQKGCshNTcRIyImJjU0NjYzIRUHERcVAeqjU5zcdHXcmwG7o6N+HAFudtOLitN3fxz7 +hRx+AAIAWP4RBHgFxQA7AE8AQEA9RjYYAwEEAUwABAUBBQQBgAABAgUBAn4AAgYBAAIAZQAFBQNh +AAMDRgVOAQApJyQiIB4LCQYEADsBOwcKFisBIiYmPwIUFhYzMjY1NCYmJy4CNTQ2NyYmNTQ2NjMy +BAcHIzQmJiMiBhUUFhYXHgIVFAYHFhYVFAQDNjY1NCYmJyYmJwYGFRQWFhcWFgJhlO2IAwK8WZVa +iJ49l4ifzmRdV0RDed2W6AEFBAO8SIVdkpU3lY2jzmJgWEZG/vYnSVA+mIcwUyRJSDiVjTRM/hFa +vJMGAl97PHdbPVJGKipsnnZbjSkyi2FvpVvfygZPfUh3W0JVQicubJp1XowoM4hirMMC3xRkRD1V +SSoMGg4TZEVDV0UnEBcAAwBc/+sF5wXEABMAJwBFAGmxBmREQF4ABgcJBwYJgAAJCAcJCH4AAQAD +BQEDaQAFAAcGBQdpAAgMAQQCCARpCwECAAACWQsBAgIAYQoBAAIAUSkoFRQBAEJBPz04NjQyMC4o +RSlFHx0UJxUnCwkAEwETDQoWK7EGAEQFIiQmAjU0EjYkMzIEFhIVFAIGBCcyPgI1NC4CIyIOAhUU +HgI3IiY1NTQ2MzIWBwcjNCYjIgYVFRQWMzI2NTMXFgYDIpT+/sJubsIBApSTAQLCbm7D/v+TetWi +W1ui1Xp71qJbW6LWbaC9vaCdsAQCkltaX2ZmX1pakgIErxVzzAERnp4BD8xycsz+8Z6e/u/Mc3lg +rOWEhOOqYF+r44SE5axgttSvd63WnpUGX1eNcnh1jFZiBpedAAAEAFz/6wXnBcQAEwAnAEIASwBv +sQZkREBkMAEFBzcBBgUCTDkBBgFLCwEGBQIFBgKAAAEAAwQBA2kABAAIBwQIaQAHAAUGBwVnCgEC +AAACWQoBAgIAYQkBAAIAUSgoFRQBAEtJRUMoQihCQT8rKR8dFCcVJwsJABMBEwwKFiuxBgBEBSIk +JgI1NBI2JDMyBBYSFRQCBgQnMj4CNTQuAiMiDgIVFB4CJxEhMhYVFAYHFhYVFRQWFxUjJiY1NTQm +IyMRETM2NjU0JiMjAyKU/v7Cbm7CAQKUkwECwm5uw/7/k3rVoltbotV6e9aiW1ui1qsBGJisQj5C +OwcKmQkEQ02fmEFaTmKDFXPMARGengEPzHJyzP7xnp7+78xzeWCs5YSE46pgX6vjhITlrGDYA1KD +fj1fHxpqSzgpQRUQFVEqNkhE/q4B1AE/OEk7AAIAYgOXBFsFsAAPABcAQ0BADQkDAwIFAUwKCAkE +AwUCBQKGBgECAAUFAFcGAQIAAAVfBwEFAAVPEBAAABAXEBcWFRQTEhEADwAPExETEQsGGisBETMT +MxMzESMRJwMjAwcRIREjNSEVIxECMHSgBqNuXgaWM5sG/mWQAYCSA5cCGf56AYb95wFVAv6pAWUB +/pwBx1JS/jkAAgB8A78CeQXFAA8AGwA5sQZkREAuAAEAAwIBA2kFAQIAAAJZBQECAgBhBAEAAgBR +ERABABcVEBsRGwkHAA8BDwYKFiuxBgBEASImJjU0NjYzMhYWFRQGBicyNjU0JiMiBhUUFgF8R3RF +RnRGRXNFRXNFNEdHNDVJSQO/RXRIR3ZISHZHSHRFgkg3N0tLNzdIAP//AKYEHwFEBhgCBgC/AAD/ +/wCmBB8CegYYAAYAvgAAAAEAlv7yATMFsAADABlAFgIBAQABhgAAAEAATgAAAAMAAxEDChcrExEz +EZad/vIGvvlCAAACAJb+8gFbBbAAAwAHAClAJgAABAEBAAFjBQEDAwJfAAICQANOBAQAAAQHBAcG +BQADAAMRBgoXKxMRMxEDETMRlsXFxf7yAxj86APIAvb9CgAABQAj/dUHnghiAAMABwALACcAKwA7 +QDgDAQICBAFMAgEDSgADBQOFAAUEBYUABAIEhQAAAQCGAAIBAQJXAAICAWAAAQIBUCIiKBERGAYG +HCsJBDUzFQMzNSM1MzQ2NzY2NTQmIyIGFxczNjYzMhYVFAYHDgITNTMVA9/8RAO8A7/8SQSDysrK +GihIXqmTiKcDA8IBOys2OzMqNTwZfQT+tAPPA8/8MftSBAQCuKpbNT0aJ4NOgJeCggYzND81Mk0c +JT1MBpEEBP//AC0D4QFRBhgCBgC5AAAAAgAoBUUCngYYAAMABwAysQZkREAnAgEAAQEAVwIBAAAB +XwUDBAMBAAFPBAQAAAQHBAcGBQADAAMRBgoXK7EGAEQBNTMVITUzFQHPz/2KzwVF09PT0wABACgF +RQD3BhgAAwAmsQZkREAbAAABAQBXAAAAAV8CAQEAAU8AAAADAAMRAwoXK7EGAEQTNTMVKM8FRdPT +AAEAKAUIAcgGGAAFABmxBmREQA4AAQABhQAAAHYhIAIKGCuxBgBEASMjATczAcgJiv7zAuYFCAEK +BgABACgFCAHIBhgABQAZsQZkREAOAAABAIUAAQF2EhECChgrsQYARBMTMxcBIyi45gL+84oFCAEQ +Bv72AAABACgFEQKNBhgACAApsQZkREAeBwQBAwEAAUwAAAEAhQMCAgEBdgAAAAgACBISBAoYK7EG +AEQTNTczFxUjJwco9nf4oZORBREa7e4ZlJQAAAIAKATJAcUGUQALABcAObEGZERALgABAAMCAQNp +BQECAAACWQUBAgIAYQQBAAIAUQ0MAQATEQwXDRcHBQALAQsGChYrsQYARBMiJjU0NjMyFhUUBicy +NjU0JiMiBhUUFvhXeXlXVXh4VSo8PCosPT4EyWxWVHJxVVZsWjstLT4+LSs9AAEAKAUZAt0GJwAX +ADyxBmREQDENAQEAAQECAwJMDAEASgABAkkAAQMCAVkAAAADAgADaQABAQJhAAIBAlEiJiIkBAoa +K7EGAEQTJzQ2NjMyFhYzMjY1FxQGBiMiJiYjIgaTazheOi1mXyIpPGw4XzoxZlsiKjsFGRZAakEy +MkEwHEBoPTEyQQABACgFRgL5BdgAAwAmsQZkREAbAAABAQBXAAAAAV8CAQEAAU8AAAADAAMRAwoX +K7EGAEQTNSEVKALRBUaSkgAAAQAo/k0BYQAgAA8AM7EGZERAKAoHAgABAUwAAQABhQAAAgIAWQAA +AAJiAwECAAJSAAAADwAPFhEEChgrsQYARBMnMjY1NCYnNzMHFhYVFAYwB0hXSFgojRRCVp7+TW0w +Ly8kB61aC1BPXnEAAQAoApcCgwMyAAMAJrEGZERAGwAAAQEAVwAAAAFfAgEBAAFPAAAAAwADEQMK +FyuxBgBEEzUhFSgCWwKXm5sAAAEAKP95A0EEuQADAB+xBmREQBQAAAEAhQIBAQF2AAAAAwADEQMK +FyuxBgBEFwEzASgCmIH9aIcFQPrA//8AKAVFAp4GGAAGAOkAAP//ACgFCAHIBhgABgDrAAD//wAo +BQgByAYYAAYA7AAA//8AKAURAo0GGAAGAO0AAP//ACgEyQHFBlEABgDuAAD//wAoBRkC3QYnAAYA +7wAA//8AKAVGAvkF2AAGAPAAAP//ACj+TQFhACAABgDxAAAAAQAo/6IEeQXtAAMALkuwF1BYQAwC +AQEAAYYAAABCAE4bQAoAAAEAhQIBAQF2WUAKAAAAAwADEQMKFysXATMBKAO8lfxEXgZL+bUAAAEA +AAD9AJIAFgBeAAUAAgCMAOoAjQAAAW0OFQADAAYAAAAAAEQAVgBoAHoAjACeALABNQGWAfMB/wJJ +AloCwgLUAuYC+AMKA2EDxAQRBDsETQRfBHEEgwTFBRkFYwVvBcEGAAYSBmgGegaMBp4GsAa7Bs0H +4AgsCH8I3wlYCcMKDgpWCmgKegqMCp4K1QsjC3ELtAvGDDAMyQzVDOEM7Qz5DQUNEQ3kDlsOsg6+ +D0gPuhAXECMQLxA7EEcQkBE2EYIRjhG0EcARyxHWEeER7RIjEnUSmxKnEyMTfxOLE9cT4xPvE/sU +BxQXFCMUtRUxFZoWIxZ0FtgXYBelGAsYFxgjGC8YOxhxGL0ZCRlZGWUZcRnFGhoaiBsiG3IbuBvg +HEocthz2HXgd4x4vHqUfEB8tH3of3SAZIHEgoSGSIbIh+iJcIpUipiLBItwi9yMOIyUjPCNTI2sj +hyOZI6sjuyPkI/UkTCRcJGskkyTEJTglUyVvJaEl0iYVJlgmfiakJsAmyCbSJu4nDScVJyEnLSc5 +J1oneCeOJ5onwSfnJ/MoEigSKBIoGigaKBooGigaKH0o8ylgKdMqTSqwKrgq5isCKyUrXiuJK6Ir +vSv5LEUseSylLQUtlC6LLzkvbzADMJ0xQzGPMdgx4DHoMgIyKzKPMpcywjLhMv4zHDNEM4YzyjPq +NCA0QDReNGY0bjR2NH40hjSONJY0njTEAAEAAAACAAA4xMCoXw889QAPCAAAAAAA14e9WQAAAADZ +7v3H/p391QnbCGIAAAAGAAIAAAAAAAAEDgBkBf0ARgX9AEYF/QBGBf0ARgX9AEYF/QBGBf0ARggw +ADMFKgBRBQoAUAUKAFAFTABRBUwAUQUaAFEFGgBRBRoAUQUaAFEFGgBRBOgAUQVCAFAGKgBRAq0A +UQKtAFECrQAjAq0AGwKtAC8EkQA8Bd0AUQS6AFEEugBRB74AXgY4AFMGOABTBUcARgVHAEYFRwBG +BUcARgVHAEYFRwBGBUcARgfDAEYFEQBRBP0ARgVgAEYFaQBRBLYAcwV+AGAF8gBGBfIARgXyAEYF +8gBGBfIARgXkAEEIUQBIBfkAUAW1AEEFtQBBBK0AWgRsAE8EbABPBGwATwRsAE8EbABPBGwATwRs +AE8GyQBPBHn/8AQrAE4EKwBOBMIATgSnAE4EIwBKBCMASgQjAEoEIwBKBCMASgLVAEAEhQBOBSMA +MQKMAEMCjABDAowAQwKMABECjAAJAowAHQIN/8gCDf/IBQcAQAKNAEACjQBAB7kASgU/AEoFPwBK +BGQATgRkAE4EZABOBGQATgRkAE4EZABOBGQATgc1AE4ErQAiBKQAGQRzAE4DVgBIA/4AaAUIADcC +2gAYBN0ANATdADQE3QA0BN0ANATdADQEtgAaBx8ANASzACoEqAAYBKgAGASoABgECABYBNcALQVG +ADMDfgBqA60AeQSQAHkDTAB1BGsASQRSAEgEowA/BDkAXgR4AHkEaABMBGsAXASCAFQCLgBfA1wA +cwNrAGsDlABXA3sAcwMRAF8DhABwAiMAXwM7AHMDTQBrA48AQwODACoFyAC3BaMAtwaaAHsGbQBs +BwAAbwc1AG8GiwBrAe0AkQGUABcBowCRAagANQVCAJIB4wCPAeMAjwO5AEADegA6AgQAoAKzAIcD +vgBCBN4APwM4AAADSQAkApYAcgKOAAsCvQA/Ar0AGwI9AJ0CKAAXAx0AmgMdAJoFeAChBk0ApQSQ +AHcBlAAXAsYAFwLoAGAC8AA6AaIAYAGiAC0DpwA6A6oAaQJRAEQCUQBTAwIApgHMAKYEFAAAAf0A +AAH9AAABogAAAAAAAAH9AAAAAAAABF4AaAW1AF4EVgBQBCAARwSbAEQFagA7A4MAKgR5AEkEdwCa +BC4ATwR8AEoEZwCTBCQAfQP5AEwEIQBLBWoAeQRiAHkDYABHBSMAQgW0AE0HHQBJBQkASgRCAE4E +0QBYBjsAXAY7AFwE6ABiAvUAfAHMAKYC/QCmAcMAlgHwAJYHuwAjAaIALQAAACgAAAAoAAAAKAAA +ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAsYAKAHwACgB8AAoArUAKAHtACgDBQAoAyEA +KAHWACgAAAAoAAEAAAhi/dUAAAnv/p36aAnbAAEAAAAAAAAAAAAAAAAAAAD9AAQE1wGQAAUAAAUz +BM0AAACaBTMEzQAAAs0AZAKJAAAAAAAAAAAAAAAAAAAAJwAAAEsAAAAgAAAAAEdPT0cAwAAN//0I +Yv3VAAAIYgJqIAABnwAAAAAEOgWwAAAAIAADAAAAAgAAAAMAAAAUAAMAAQAAABQABAJ6AAAAPAAg +AAQAHAANAC8AOQB+AP8BMQFTArwCxgLaAtwgAiAJIAsgFCAaIB4gIiAmIDMgOiBEIHQgrCEiIhIi +Ff7///3//wAAAA0AIAAwADoAoAExAVICvALGAtoC3CACIAkgCyATIBggHCAiICYgMiA5IEQgdCCs +ISIiEiIV/v///f//ALgAAABNAAAAAP8gAAD+LP4x/h7+HeC+4LrgueCeAAAAAOCC4HjgseCD4E7g +HeAe37/evd64AccA6gABAAAAOgAAAFYA3gAAAZoAAAAAAAAAAAAAAAAAAAAAAYwBkAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAMEAnwC+AKYAyQDaANwAvwCpAKoApQDOAJsArwCaAKcAnACdANQA +0gDTAKEA2wABAAkACgAMAA4AEwAUABUAFgAbABwAHQAfACAAIgAqACwALQAuAC8AMAA1ADYANwA4 +ADoArQCoAK4A2ACzAPUAOwBDAEQARgBIAE0ATgBPAFAAVgBYAFkAWwBcAF4AZgBoAGkAagBsAG0A +cgBzAHQAdQB4AKsA5QCsANYAwgCgAMcAywDIAMwA5gDeAPQA3wB7ALoA1wCwAOAA+gDiANUAjwCQ +APYA2QDdAKMA+wCOAHwAuwCUAJMAlQCiAAUAAgADAAcABAAGAAgACwASAA8AEAARABoAFwAYABkA +DQAhACYAIwAkACgAJQDQACcANAAxADIAMwA5ACsAawA/ADwAPQBBAD4AQABCAEUATABJAEoASwBV +AFIAUwBUAEcAXQBiAF8AYABkAGEA0QBjAHEAbgBvAHAAdgBnAHcAKQBlALgAuQC0ALYAtwC1AACw +ACwgsABVWEVZICBLuAAOUUuwBlNaWLA0G7AoWWBmIIpVWLACJWG5CAAIAGNjI2IbISGwAFmwAEMj +RLIAAQBDYEItsAEssCBgZi2wAiwjISMhLbADLCBkswMUFQBCQ7ATQyBgYEKxAhRDQrElA0OwAkNU +eCCwDCOwAkNDYWSwBFB4sgICAkNgQrAhZRwhsAJDQ7IOFQFCHCCwAkMjQrITARNDYEIjsABQWGVZ +shYBAkNgQi2wBCywAyuwFUNYIyEjIbAWQ0MjsABQWGVZGyBkILDAULAEJlqyKAENQ0VjRbAGRVgh +sAMlWVJbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILEBDUNFY0VhZLAoUFghsQENQ0VjRSCw +MFBYIbAwWRsgsMBQWCBmIIqKYSCwClBYYBsgsCBQWCGwCmAbILA2UFghsDZgG2BZWVkbsAIlsAxD +Y7AAUliwAEuwClBYIbAMQxtLsB5QWCGwHkthuBAAY7AMQ2O4BQBiWVlkYVmwAStZWSOwAFBYZVlZ +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 +AAEECQAEACYBBgADAAEECQAFAFYBLAADAAEECQAGACQBggADAAEECQAOAFQBpgBDAG8AcAB5AHIA +aQBnAGgAdAAgADIAMAAxADgAIABUAGgAZQAgAFIAbwBiAG8AdABvACAAUwBsAGEAYgAgAFAAcgBv +AGoAZQBjAHQAIABBAHUAdABoAG8AcgBzACAAKABoAHQAdABwAHMAOgAvAC8AZwBpAHQAaAB1AGIA +LgBjAG8AbQAvAGcAbwBvAGcAbABlAGYAbwBuAHQAcwAvAHIAbwBiAG8AdABvAHMAbABhAGIAKQBS +AG8AYgBvAHQAbwAgAFMAbABhAGIAUgBlAGcAdQBsAGEAcgBHAG8AbwBnAGwAZQA6AFIAbwBiAG8A +dABvACAAUwBsAGEAYgA6ADIAMAAxADgAUgBvAGIAbwB0AG8AIABTAGwAYQBiACAAUgBlAGcAdQBs +AGEAcgBWAGUAcgBzAGkAbwBuACAAMgAuADAAMAAwADsAIAB0AHQAZgBhAHUAdABvAGgAaQBuAHQA +IAAoAHYAMQAuADgALgAxAC4ANAAzAC0AYgAwAGMAOQApAFIAbwBiAG8AdABvAFMAbABhAGIALQBS +AGUAZwB1AGwAYQByAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBhAHAAYQBjAGgAZQAuAG8AcgBnAC8A +bABpAGMAZQBuAHMAZQBzAC8ATABJAEMARQBOAFMARQAtADIALgAwAAMAAAAAAAD/agBkAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAIADgAAACoAAABKAAIABAABAEYAAQBIAFYAAQBYAHgA +AQB5AHoAAgAIAAIAEAAYAAEAAgB5AHoAAQAEAAECbAABAAQAAQKjAAEAAgAAAAwAAAAMAAEAAAAA +AAEAAAAKACQAMgACREZMVAAObGF0bgAOAAQAAAAA//8AAQAAAAFrZXJuAAgAAAABAAAAAQAEAAIA +CAACAAoGWAABAKgABAAAAE8BSgFKAUoBSgFKAUoBSgFYAVgDEAMQAWYBZgFmAWYBZgFwAmIC9AMK +AwoDEAMQAxADEAMQAxADFgMgAzYDSANqA3wDjgOOA8gDzgPOA84DzgPOA84DzgPcA/4FMAR0BOoF +MAUwBTAFOgU6BToFOgU6BToFSAVaBYwF5AWiBeQF5AXkBe4F9AX6BgwGKgZIBkgGSAZIBkgGSAZI +BkgGSAABAE8AAQACAAMABAAFAAYABwAKAAsADAANAA4ADwAQABEAEgATABQAHAAdAB4AIgAjACQA +JQAmACgAKgAsAC0ALwA1ADYAOAA5ADoAOwA8AD0APgA/AEAAQQBGAE0ATwBYAFkAWwBcAF0AXgBf +AGAAYQBiAGQAaQBsAG0AcgBzAHUAdgB3AKcAqACpAKsArQC2ALcAuAC5AL4AvwDjAOQA6AADAGz/ +lQBz/4UAof/DAAMAqv/mAKz/7wCu//QAAgBN/+4Ac//qADwAAf8kAAL+1QAD/tUABP7VAAX+1QAG +/tUAB/7VAAr/zgAL/84AFP/OABv/QgAi/84AI//OACT/zgAl/84AJv/OACf/zgAo/84AKf/OACz/ +zgAvABQAO//eADz/3gA9/94APv/eAD//3gBA/94AQf/eAET/6wBF/+sARv/rAEj/pgBJ/+sASv/r +AEv/6wBM/+sATv/rAF7/pgBf/+sAYP/rAGH/6wBi/+sAZP/rAGX/6wBo/+sAaf/mAG3/6gBu/+oA +b//qAHD/6gBx/+oAcv/oAHX/6AB2/+gAd//oAJr/FgCb/xYAnv8WALT/FgC1/xYAJAAKABkACwAZ +ABQAGQAiABkAIwAZACQAGQAlABkAJgAZACcAGQAoABkAKQAZACwAGQA7AB4APAAeAD0AHgA+AB4A +PwAeAEAAHgBBAB4ARAAeAEUAHgBGAB4ASAAeAEkAHgBKAB4ASwAeAEwAHgBOAB4AXgAeAF8AHgBg +AB4AYQAeAGIAHgBkAB4AZQAeAGgAHgAFAHP/wQCv/8AAsP/AALH/wACy/8AAAQBz/6QAAQAI/98A +AgAI/58AbAAOAAUAL//VADX/5AA2/+wAOP/dADn/3QAEAC//sAA1/7AAOP+cADn/nAAIAAj/TQBC +/44AQwAAAGP/oQBp/7UAc//HALr+uAC7/ygABABp/+IAqgAUAKwAEwCuABEABABp/+sAqgAPAKwA +DgCuAAwADgAI/6AAQv/BAE3/6gBj/8AAaf/YAGz/6gCk/9MApf/PAKoAFACsABMArgASALr/rgC7 +/80A3P/iAAEAc//lAAMAQwAAAGwAAABzAAAACABI//sAXv/7AF//+wBg//sAYf/7AGL/+wBk//sA +bAAAAB0ARP/oAEX/6ABG/+gASP/2AEn/6ABK/+gAS//oAEz/6ABO/+gAXv/2AF//9gBg//YAYf/2 +AGL/9gBk//YAZf/oAGj/6ACqABQArAATAK4AEgC2ABAAtwAQALgAEAC5ABAAvgAQAL8AEADjABAA +5AAQAOgAEAAdADv/7AA8/+wAPf/sAD7/7AA//+wAQP/sAEH/7ABE/+wARf/sAEb/7ABI/8QASf/s +AEr/7ABL/+wATP/sAE7/7ABe/8QAX//EAGD/xABh/8QAYv/EAGT/xABl/+wAaP/sAG3/7ABu/+wA +b//sAHD/7ABx/+wAEQBE//YARf/2AEb/9gBI/+wASf/2AEr/9gBL//YATP/2AE7/9gBe/+wAX//s +AGD/7ABh/+wAYv/sAGT/7ABl//YAaP/2AAIAbP/YAHP/lwADAEMAAABsAAAAc//YAAQATQAPAFAA +AABsACAAcwARAAwASP/sAFAAAABbAAAAXAAAAF0AAABe/+wAX//sAGD/7ABh/+wAYv/sAGT/7ABm +AAAABQByAAAAcwAAAHUAAAB2AAAAdwAAABAASP/sAE//7ABY/+wAWf/sAF7/7ABf/+wAYP/sAGH/ +7ABi/+wAZP/sAGwAFACa/4QAm/+EAJ7/hAC0/4QAtf+EAAIATQANAGwAMgABAKf/IAABAKj/IAAE +ADUAFAA2ABIAOAAWADkAFgAHABv/7AAw/+wAMf/sADL/7AAz/+wANP/sAKwAAAAHABv/7gAw/+4A +Mf/uADL/7gAz/+4ANP/uAK4AAAABAHMACwACBboABAAABjwHMAAdABkAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAA/+QAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAD/xf+V/4j/zv/DAAAAAP/sAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAA/7AAAAAAAAAANwAAAAD/ugAAAAAAAP+aAAAAAAAAAAAAAP+6 +AAAAAP/l/8L/2P/E/+kAAAAAAAAAAP+6/+L/iAAAAAD/4v/EAAAAAP+5AAD/dAAA/wD/7AAA/xD+ +7v8pAAAAAAAAAAAAAAAAAAAAAP+9AAAAAAAAAAAAAAAAAAAAAP/xAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAD/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAACP/7AAAABQAIwAAAAAAAAAAAAD/3f/sAAAAAAAAAAAAAAAAAAAAAAAA/+v/8AAAAAD/7QAA +AAAAAP/tAAAAAAAA/+8AAP/mAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAA/1YAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj/8gAAAA8AHgAAAAAAAAAA +AAD/6QAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAD/9v90AAAAAP/xAAAAAAAA/9gAAP+mAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zAA8AAP/x/+cAAP+VAAAAAAAAAAD/7AAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAACj/4wAAAAAAKAAAAAAAAAAAAAD/7P/2AAAAAAAAAAAAAAAAAAAA +AAAA//H/8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAA +AAD/vwAU/3YAEwAUABT/ygAAAAD/1AAA/3sAAP8RAAAAAP7t/wD/cQAAAAAAAAAAAAAAAP+w/78A +AP8A/7f/dP+g/y3/2P/Z/8z/7AAA/+z/K//wABH/7P/2/+IAAP+U/+n/4gAAAAAAKP/1AAAAFAAZ +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAP+6AAAAAP/l/+gAAAAAAAAAAAAAAAAAAP+I/+YAAAAAAAD/sAAAAAD/6f/p/yD/2AAA +/7oAAAAAAAD/xP/O/9gAAAAAAAAAAAAAABn/8wAA/yT/9f/sAAD+vAAAAAAAAAAPAAD/7P9qAAAA +AP/s/+f/4f/mAAAAAAAAAAD/5P+dAAD/EP+P/5IAAP8m/7H/of8Y/7gAAAAQ/2D/8AAAABAADwAA +AAD/lv+z/8QAAP+//9QAAP7k/9L/iAAA/x8AAP/k/9v/9QAA/+L/KgAAAAD/4v/s/9gAAAAAAAAA +AAAA/8n/4QAA/yf/3/+6AAD/hQAA/+3/xAAAAAD/7P+IAAAADv/i//b/2AAAAAAAAAAAAAD/xP/m +AAAAAAAA/8MAAAAAAAD/6//S/+EAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAP/m/+sAAAANAAAA +AAAAAAAAAP/tAAD/5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/7AAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/tABAAAAAA/+wAAP+FAAAAAAAAABL/ +7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAP/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAIAFQABAAcAAAAJABIABwAVACYAEQAoACgAIwAqACoAJAAvAEEAJQBDAEUAOABI +AEwAOwBOAE8AQABbAGIAQgBkAGQASgBmAGcASwBpAGkATQByAHIATgB0AHgATwCaAJsAVACeAJ4A +VgC0ALkAVwC+AL8AXQDjAOQAXwDoAOgAYQACACgAAQAHAAMACQAJABEACgALAA0ADAANAAIADgAS +AAcAGwAbAAUAHAAcABIAHQAeAA4AIgAmAAIAKAAoAAIAKgAqABMALwAvABQAMAA0AAUANQA1ABUA +NgA2ABYANwA3ABcAOAA5AA8AOgA6ABgAOwBBAAQAQwBDAAwARABFABAASABMAAkATgBOABkATwBP +AAoAWwBdAAoAXgBiAAYAZABkAAYAZgBnAAwAaQBpABoAcgByAAsAdAB0ABsAdQB3AAsAeAB4ABwA +mgCbAAgAngCeAAgAtAC1AAgAtgC5AAEAvgC/AAEA4wDkAAEA6ADoAAEAAgAqAAEABwAEAAoACwAB +ABQAFAABABsAGwAPACIAKQABACwALAABAC4ALgAQAC8ALwARADAANAAHADUANQASADYANgATADcA +NwAUADgAOQAOADoAOgAVADsAQQAFAEQARgACAEgASAAGAEkATAACAE4ATgACAE8ATwANAFAAUAAJ +AFgAWQANAFsAXQAJAF4AYgAGAGQAZAAGAGUAZQACAGYAZgAJAGgAaAACAGoAagAWAG0AcQAKAHIA +cgAMAHQAdAAXAHUAdwAMAHgAeAAYAJoAmwAIAJ4AngAIAK8AsgALALQAtQAIALYAuQADAL4AvwAD +AOMA5AADAOgA6AADAAAAAQAAAAoAPABiAAJERkxUAA5sYXRuABIADgAAAAoAAUNBVCAAFAAA//8A +AgAAAAEAAP//AAMAAAABAAIAA2ZyYWMAFGxpZ2EAGmxvY2wAIAAAAAEAAwAAAAEABAAAAAEAAAAF +AAwARABkAIQA9AAGAAAAAgAKAB4AAwAAAAIAPgAoAAEAPgABAAAAAQADAAAAAgBKABQAAQBKAAEA +AAACAAEAAQCjAAQAAAABAAgAAQAIAAEADgABAAEAWQABAAQAWgACAKMABAAAAAEACAABAAgAAQAO +AAEAAQAdAAEABAAeAAIAowAEAAAAAQAIAAEAXAAEAA4ALgBEAFAAAwAIABAAGACWAAMApwCFAJQA +AwCnAIEAkwADAKcAfwACAAYADgCXAAMApwCFAJUAAwCnAIEAAQAEAJgAAwCnAIUAAQAEAJkAAwCn +AIUAAQAEAH4AgACCAIQABAAAAAEACAABABoAAQAIAAIABgAMAHkAAgBQAHoAAgBZAAEAAQBNAAA= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: font/ttf +Content-Transfer-Encoding: base64 +Content-Location: https://fonts.gstatic.com/s/robotoslab/v10/BngbUXZYTXPIvIBgJJSb6s3BzlRRfKOFbvjoa4Omb2Rm.ttf + +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 +AI0AAAFtDhUAAwAGAAAAAABEAFYAaAB6AIwAngCwATUBlgHyAf4CSAJZAsEC0wLlAvcDCQNgA8IE +EAQ6BEwEXgRwBIIExAUXBWIFbgXBBgEGEwZnBnkGiwadBq8GugbMB98IKgh7CNoJUQm+CgkKUgpk +CnYKiAqaCtELHwtsC64LwAwrDMUM0QzdDOkM9Q0BDQ0N4A5XDq4Oug9FD7cQFBAgECwQOBBEEI0R +NBGAEYwRshG9EcgR0xHeEeoSIBJyEpgSpBMgE3wTiBPUE+AT7BP4FAQUFBQgFLIVLhWXFiAWcRbW +F14XpBgLGBcYIxgvGDsYcRi8GQYZVhliGW4ZwhoXGoUbHxtvG7cb3xxJHLcc+B17HeceMh6oHxQf +MR99H+AgHCB0IKMhlCG0IfsiXSKVIqYiwSLcIvcjDiMlIzwjUyNsI4kjmyOtI70j6SP6JFQkZCRz +JJskzCU+JVoldiWnJdgmGyZeJoQmqibGJs4m2Cb0JxMnGycnJzMnPydgJ34nlCegJ8cn7Sf5KBgo +GCgYKCAoICggKCAoICiEKPopaSnaKlQqtSq9KuwrCCsrK2YrkSurK8csAyxPLIMsry0PLZ4uli9E +L3owEDCqMVAxnTHmMe4x9jIQMjoynjKmMtIy8jMQMy4zVjOZM94z/jQ0NFQ0cjR6NII0ijSSNJo0 +ojSqNLI02AABAAAAAgAAKWK6dl8PPPUADwgAAAAAANeHvVkAAAAA2e79x/6d/dUJ2whiAAEABgAC +AAAAAAAABA4AZAXoACkF6AApBegAKQXoACkF6AApBegAKQXoACkILABCBUAAOAUpADQFKQA0BZIA +OAWSAC0FHAA4BRwAOAUcADgFHAA4BRwAOATxADgFXQAvBkAAOALKADgCygA4Asr//ALK//cCygAW +BLIAIwYJADgEsAA4BLAAOAgSADgGRAA4BkQAOAWmAEEFpgBBBaYAQQWmAEEFpgBBBaYAQQWmAEEH +7QBBBS0AOAULAEMFqQBDBYAAOATfAGEFbQAtBhMAJwYTACcGEwAnBhMAJwYTACcF/wAiCJoAIgXq +ACQF5AAkBeQAJATKAEoEggBKBIIASgSCAEoEggBKBIIASgSCAEoEggBKBrgASgSd/+oEOgBDBDoA +QwS8AEMEwQA8BDYAQwQ2AEMENgBDBDYAQwQ2AEMDHwA7BK4AQwUWACAClQAnApUAJwKVACcClf/m +ApX/4gKVAAECWP/ZAlj/2QUkACACjQAgAo0AIAd9ACUFGwAlBRsAJQSDAEMEgwBDBIMAQwSDAEME +gwBDBIMAQwSDAEMHJABDBNgAKQTRACIEhABDA3YARgQKAGIFKQAnAt8AGQT7ACUE+wAlBPsAJQT7 +ACUE+wAlBN8AFgceACEFJwAeBQUAFgUFABYFBQAWBFMAWAU5ACIFjQAnA2MAXgOSAG0EkgBhA4kA +PgRwADUEWAA2BIYAKAREAEAEeABbBFMAMQRbAEMEdQA/AhwASgM0AF0DSwBRA2oAOgNiAF4C2gBF +A3gAYAIYAGYDNwBhA0EAVAOUADEDcgAVBbEAZgWFAHUGYwBLBmUAYwbwAGEHKwBmBoYAagIKAIEB +9wA6AccAWwHFABwFtQCJAfsAdwH7AGAD2gAnA7EANAIpAJICvwB4A5IAIgSuACcDHP/pA1YADAKt +AFkCyAA9AqEAJwKnACcCVACLAkMAFQMvAIMDLwCDBVwApQY7AKYERgBcAfcAOgNSADoDQQBlA0gA +SQHgAGAB1wA7A7kABAPNAEACOgAsAkAARwMSAIsBwQCLAZAAAAH2AAAB9gAAAKAAAAAAAAAB9gAA +AAAAAAREAFAFmABSBFMANwQnADoEmQA5BXkAKQNyABUESgAxBF8AkQQsAD0EbQA4BGMAewQHAGgD +9AA6BBAAQgUrAGQESgByA3QALQVDADcFlQAxBw4AOAT+AC0EZwA2BNsAVQYeAEoGHgBKBNcATALp +AGoBwQCLAw4AiwGsAIQCAQCGB5EADQHXADsAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAA +KAAAACgAAAAoAAAAKAMsACgCTgAoAk4AKAMjACgCIQAoAz0AKAMrACgB9AAoAAAAKAABAAAIYv3V +AAAJ7/6d+mgJ2wABAAAAAAAAAAAAAAAAAAAA/QAEBNcCvAAFAAAFMwTNAAAAmgUzBM0AAALNAGQC +iQAAAAAAAAAAAAAAAAAAACcAAABLAAAAIAAAAABHT09HAKAADf/9CGL91QAACGICaiAAAZ8AAAAA +BDoFsAAAACAAAwAAAAIAAAADAAAAFAADAAEAAAAUAAQCegAAADwAIAAEABwADQAvADkAfgD/ATEB +UwK8AsYC2gLcIAIgCSALIBQgGiAeICIgJiAzIDogRCB0IKwhIiISIhX+///9//8AAAANACAAMAA6 +AKABMQFSArwCxgLaAtwgAiAJIAsgEyAYIBwgIiAmIDIgOSBEIHQgrCEiIhIiFf7///3//wC4AAAA +TQAAAAD/IAAA/iz+Mf4e/h3gvuC64LngngAAAADgguB44LHgg+BO4B3gHt+/3r3euAHHAOoAAQAA +ADoAAABWAN4AAAGaAAAAAAAAAAAAAAAAAAAAAAGMAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AADBAJ8AvgCmAMkA2gDcAL8AqQCqAKUAzgCbAK8AmgCnAJwAnQDUANIA0wChANsAAQAJAAoADAAO +ABMAFAAVABYAGwAcAB0AHwAgACIAKgAsAC0ALgAvADAANQA2ADcAOAA6AK0AqACuANgAswD1ADsA +QwBEAEYASABNAE4ATwBQAFYAWABZAFsAXABeAGYAaABpAGoAbABtAHIAcwB0AHUAeACrAOUArADW +AMIAoADHAMsAyADMAOYA3gD0AN8AewC6ANcAsADgAPoA4gDVAI8AkAD2ANkA3QCjAPsAjgB8ALsA +lACTAJUAogAFAAIAAwAHAAQABgAIAAsAEgAPABAAEQAaABcAGAAZAA0AIQAmACMAJAAoACUA0AAn +ADQAMQAyADMAOQArAGsAPwA8AD0AQQA+AEAAQgBFAEwASQBKAEsAVQBSAFMAVABHAF0AYgBfAGAA +ZABhANEAYwBxAG4AbwBwAHYAZwB3ACkAZQC4ALkAtAC2ALcAtQAAsAAsILAAVVhFWSAgS7gADlFL +sAZTWliwNBuwKFlgZiCKVViwAiVhuQgACABjYyNiGyEhsABZsABDI0SyAAEAQ2BCLbABLLAgYGYt +sAIsIyEjIS2wAywgZLMDFBUAQkOwE0MgYGBCsQIUQ0KxJQNDsAJDVHggsAwjsAJDQ2FksARQeLIC +AgJDYEKwIWUcIbACQ0OyDhUBQhwgsAJDI0KyEwETQ2BCI7AAUFhlWbIWAQJDYEItsAQssAMrsBVD +WCMhIyGwFkNDI7AAUFhlWRsgZCCwwFCwBCZasigBDUNFY0WwBkVYIbADJVlSW1ghIyEbilggsFBQ +WCGwQFkbILA4UFghsDhZWSCxAQ1DRWNFYWSwKFBYIbEBDUNFY0UgsDBQWCGwMFkbILDAUFggZiCK +imEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7ACJbAMQ2OwAFJYsABLsApQWCGwDEMb +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 +AAAAAwABBAkAAQAWALQAAwABBAkAAgAIAMoAAwABBAkAAwAuANIAAwABBAkABAAgAQAAAwABBAkA +BQBWASAAAwABBAkABgAeAXYAAwABBAkADgBUAZQAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQA4 +ACAAVABoAGUAIABSAG8AYgBvAHQAbwAgAFMAbABhAGIAIABQAHIAbwBqAGUAYwB0ACAAQQB1AHQA +aABvAHIAcwAgACgAaAB0AHQAcABzADoALwAvAGcAaQB0AGgAdQBiAC4AYwBvAG0ALwBnAG8AbwBn +AGwAZQBmAG8AbgB0AHMALwByAG8AYgBvAHQAbwBzAGwAYQBiACkAUgBvAGIAbwB0AG8AIABTAGwA +YQBiAEIAbwBsAGQARwBvAG8AZwBsAGUAOgBSAG8AYgBvAHQAbwAgAFMAbABhAGIAOgAyADAAMQA4 +AFIAbwBiAG8AdABvACAAUwBsAGEAYgAgAEIAbwBsAGQAVgBlAHIAcwBpAG8AbgAgADIALgAwADAA +MAA7ACAAdAB0AGYAYQB1AHQAbwBoAGkAbgB0ACAAKAB2ADEALgA4AC4AMQAuADQAMwAtAGIAMABj +ADkAKQBSAG8AYgBvAHQAbwBTAGwAYQBiAC0AQgBvAGwAZABoAHQAdABwADoALwAvAHcAdwB3AC4A +YQBwAGEAYwBoAGUALgBvAHIAZwAvAGwAaQBjAGUAbgBzAGUAcwAvAEwASQBDAEUATgBTAEUALQAy +AC4AMAAAAAMAAAAAAAD/agBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAIADgAAACoA +AABKAAIABAABAEYAAQBIAFYAAQBYAHgAAQB5AHoAAgAIAAIAEAAYAAEAAgB5AHoAAQAEAAECnQAB +AAQAAQLTAAEAAgAAAAwAAAAMAAEAAAAAAAEAAAAKACQAMgACREZMVAAObGF0bgAOAAQAAAAA//8A +AQAAAAFrZXJuAAgAAAABAAAAAQAEAAIACAACAAoGWAABAKgABAAAAE8BSgFKAUoBSgFKAUoBSgFY +AVgDEAMQAWYBZgFmAWYBZgFwAmIC9AMKAwoDEAMQAxADEAMQAxADFgMgAzYDSANqA3wDjgOOA8gD +zgPOA84DzgPOA84DzgPcA/4FMAR0BOoFMAUwBTAFOgU6BToFOgU6BToFSAVaBYwF5AWiBeQF5AXk +Be4F9AX6BgwGKgZIBkgGSAZIBkgGSAZIBkgGSAABAE8AAQACAAMABAAFAAYABwAKAAsADAANAA4A +DwAQABEAEgATABQAHAAdAB4AIgAjACQAJQAmACgAKgAsAC0ALwA1ADYAOAA5ADoAOwA8AD0APgA/ +AEAAQQBGAE0ATwBYAFkAWwBcAF0AXgBfAGAAYQBiAGQAaQBsAG0AcgBzAHUAdgB3AKcAqACpAKsA +rQC2ALcAuAC5AL4AvwDjAOQA6AADAGz/iwBz/1MAof9pAAMAqv/mAKz/7wCu//QAAgBNAAAAc//q +ADwAAf8bAAL+/QAD/v0ABP79AAX+/QAG/v0AB/79AAr/2AAL/9gAFP/YABv/MAAi/9gAI//YACT/ +2AAl/9gAJv/YACf/2AAo/9gAKf/YACz/2AAvABQAO//eADz/3gA9/94APv/eAD//3gBA/94AQf/e +AET/6wBF/+sARv/rAEj/0QBJ/+sASv/rAEv/6wBM/+sATv/rAF7/0QBf/+sAYP/rAGH/6wBi/+sA +ZP/rAGX/6wBo/+sAaf/mAG3/6gBu/+oAb//qAHD/6gBx/+oAcv/oAHX/6AB2/+gAd//oAJr+0ACb +/tAAnv7QALT+0AC1/tAAJAAKAAAACwAAABQAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAA +KQAAACwAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAARAAAAEUAAABGAAAASAAAAEkAAABK +AAAASwAAAEwAAABOAAAAXgAAAF8AAABgAAAAYQAAAGIAAABkAAAAZQAAAGgAAAAFAHP/wQCv/z4A +sP8+ALH/PgCy/z4AAQBz/8wAAQAI/98AAgAI/tcAbAAOAAUAL//fADX/5AA2/+4AOP/dADn/3QAE +AC//zgA1/6YAOP+cADn/nAAIAAj/QwBC/6wAQwAcAGP/oQBp/78Ac//RALr/bAC7/24ABABp/+IA +qgAUAKwAEwCuABEABABp/+sAqgAjAKwADgCuAAwADgAI/6AAQv/BAE3/rgBj/8AAaf/YAGz/6gCk +/9MApf/PAKoAFACsABMArgASALr/rgC7/80A3P/iAAEAc//lAAMAQ///AGz/3ABz/9gACABIAAAA +XgAAAF8AAABgAAAAYQAAAGIAAABkAAAAbP/AAB0ARP/oAEX/6ABG/+gASAAAAEn/6ABK/+gAS//o +AEz/6ABO/+gAXgAAAF8AAABgAAAAYQAAAGIAAABkAAAAZf/oAGj/6ACqADIArAATAK4AEgC2AAAA +twAAALgAAAC5AAAAvgAAAL8AAADjAAAA5AAAAOgAAAAdADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAA +AEEAAABE/+wARf/sAEb/7ABI/8oASf/sAEr/7ABL/+wATP/sAE7/7ABe/8oAX//KAGD/ygBh/8oA +Yv/KAGT/ygBl/+wAaP/sAG0AAABuAAAAbwAAAHAAAABxAAAAEQBEAAAARQAAAEYAAABI/+wASQAA +AEoAAABLAAAATAAAAE4AAABe/+wAX//sAGD/7ABh/+wAYv/sAGT/7ABlAAAAaAAAAAIAbP/dAHP/ +tQADAEP/7QBs//gAc//iAAQATQAUAFAADgBsABgAcwARAAwASP/nAFAAGQBbABkAXAAZAF0AGQBe +/+cAX//nAGD/5wBh/+cAYv/nAGT/5wBmABkABQBy/+0Ac//2AHX/7QB2/+0Ad//tABAASP/uAE8A +AABYAAAAWQAAAF7/7gBf/+4AYP/uAGH/7gBi/+4AZP/uAGwAAACa/4QAm/+EAJ7/hAC0/4QAtf+E +AAIATQANAGwAAAABAKf/gwABAKj/gwAEADUAFAA2ACYAOAAWADkAFgAHABv/7AAw/+wAMf/sADL/ +7AAz/+wANP/sAKwAKAAHABv/7gAw/+4AMf/uADL/7gAz/+4ANP/uAK4AHgABAHMACwACBboABAAA +BjwHMAAdABkAAAAAAAAAAP+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAD/xf+f/4j/zv9fAAAAAP/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6QAAAAAAAAAFQAA +AAD/xAAAAAAAAP+GAAAAAAAAAAAAAP/VAAAAAP/l/+oAAP/i/+kAAAAAAAAAAP/E//X+6AAAAAD/ +9P/EAAD/7P+RAAD/QgAA/wAAAAAA/2r/OP9nAAAAAAAAAAAAAAAAAAAAAP+zAAAAAAAAAAAAAAAA +/+AAAP/TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/nAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/iAAAAAAADAAAAAAAAAAAAAD/4P/sAAAAAAAA +AAAAAAAAAAAAAAAA/+j/8AAAAAD/7QAAAAAAAP/tAAAAAAAA/+8AAP/mAAAAAAAAAAAAFAAAAAAA +AAAAAAAAAAAAAAAAAAAA/uMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAD/tgAAAAAAAwAAAAAAAAAAAAD/6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ +9P9aAAAAAP/2AAAAAAAA/9MAAP+9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zAAUAAP/x +/+wAAP9ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//pwAAAAAADQAAAAD/ +7QAAAAD/9f/sAAAAAAAAAAAAAAAAAAAAAAAA//H/8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAD/4wAAAAAAAAAAAAAAAAAAAAD/5wAA/swAAAAAAAD/tgAAAAD/8gAA/4UAAP7pAAAA +AP8z/vj/owAAAAAAAAAAAAAAAP/j/78AAP8A/8H/vwAA/xn/sP/Z/yz/7AAAABL+4v/wABEAEgAR +AA0AAP/G/+n/4gAAAAAAAP+5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/JAAAAAP/l/+gAAAAAAAAAAAAAAAAAAP+e +/+YAAAAAAAD/0QAAAAAAAP/p/xb/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8wAA/xT/ +9f/zAAD+bAAAAAAAAAAPAAAAAP9IAAAAAAAAAAD/zf/cAAAAAAAAAAD/5P+nAAD/TP+t/7EAAP7+ +/6f/v/7w/+EAAAAQ/zz/8AAKABAADwAAAAD/tP+z/8QAAP/z/9QAAP8k/9L/0gAA/ykAAP/k/2P/ +9QAAAAD/KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/4QAA/1T/3//hAAD/cQAA/+3/nAAAAAAAAP9r +AAAADgAAAAAAAAAAAAAAAAAAAAD/4v/mAAAAAAAA/+sAAAAAAAD/6/88/+EAAAAAAAAAAAAAAA4A +AAAAAAAAAAAAAAAAAP/m/+sAAAAAAAD/6wAAAAAAAP/tAAD/5QAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAACEAAAAAAAAAAP/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AP/tAAYAAP/s/+wAAP9TAAcAAAAAABL/zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+wAAAAA +AAD/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAP/wAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAFQABAAcAAAAJABIABwAVACYAEQAo +ACgAIwAqACoAJAAvAEEAJQBDAEUAOABIAEwAOwBOAE8AQABbAGIAQgBkAGQASgBmAGcASwBpAGkA +TQByAHIATgB0AHgATwCaAJsAVACeAJ4AVgC0ALkAVwC+AL8AXQDjAOQAXwDoAOgAYQACACgAAQAH +AAMACQAJABEACgALAA0ADAANAAIADgASAAcAGwAbAAUAHAAcABIAHQAeAA4AIgAmAAIAKAAoAAIA +KgAqABMALwAvABQAMAA0AAUANQA1ABUANgA2ABYANwA3ABcAOAA5AA8AOgA6ABgAOwBBAAQAQwBD +AAwARABFABAASABMAAkATgBOABkATwBPAAoAWwBdAAoAXgBiAAYAZABkAAYAZgBnAAwAaQBpABoA +cgByAAsAdAB0ABsAdQB3AAsAeAB4ABwAmgCbAAgAngCeAAgAtAC1AAgAtgC5AAEAvgC/AAEA4wDk +AAEA6ADoAAEAAgAqAAEABwAEAAoACwABABQAFAABABsAGwAPACIAKQABACwALAABAC4ALgAQAC8A +LwARADAANAAHADUANQASADYANgATADcANwAUADgAOQAOADoAOgAVADsAQQAFAEQARgACAEgASAAG +AEkATAACAE4ATgACAE8ATwANAFAAUAAJAFgAWQANAFsAXQAJAF4AYgAGAGQAZAAGAGUAZQACAGYA +ZgAJAGgAaAACAGoAagAWAG0AcQAKAHIAcgAMAHQAdAAXAHUAdwAMAHgAeAAYAJoAmwAIAJ4AngAI +AK8AsgALALQAtQAIALYAuQADAL4AvwADAOMA5AADAOgA6AADAAAAAQAAAAoAPABiAAJERkxUAA5s +YXRuABIADgAAAAoAAUNBVCAAFAAA//8AAgAAAAEAAP//AAMAAAABAAIAA2ZyYWMAFGxpZ2EAGmxv +Y2wAIAAAAAEAAwAAAAEABAAAAAEAAAAFAAwARABkAIQA9AAGAAAAAgAKAB4AAwAAAAIAPgAoAAEA +PgABAAAAAQADAAAAAgBKABQAAQBKAAEAAAACAAEAAQCjAAQAAAABAAgAAQAIAAEADgABAAEAWQAB +AAQAWgACAKMABAAAAAEACAABAAgAAQAOAAEAAQAdAAEABAAeAAIAowAEAAAAAQAIAAEAXAAEAA4A +LgBEAFAAAwAIABAAGACWAAMApwCFAJQAAwCnAIEAkwADAKcAfwACAAYADgCXAAMApwCFAJUAAwCn +AIEAAQAEAJgAAwCnAIUAAQAEAJkAAwCnAIUAAQAEAH4AgACCAIQABAAAAAEACAABABoAAQAIAAIA +BgAMAHkAAgBQAHoAAgBZAAEAAQBNAAA= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: text/css +Content-Transfer-Encoding: quoted-printable +Content-Location: https://translate.googleapis.com/translate_static/css/translateelement.css + +@charset "utf-8"; + +.goog-te-banner-frame { left: 0px; top: 0px; height: 39px; width: 100%; z-i= +ndex: 10000001; position: fixed; border-top: none; border-right: none; bord= +er-left: none; border-image: initial; border-bottom: 1px solid rgb(107, 144= +, 218); margin: 0px; box-shadow: rgb(153, 153, 153) 0px 0px 8px 1px; } + +.goog-te-menu-frame { z-index: 10000002; position: fixed; border: none; box= +-shadow: rgb(153, 153, 153) 0px 3px 8px 2px; } + +.goog-te-ftab-frame { z-index: 10000000; border: none; margin: 0px; } + +.goog-te-gadget { font-family: arial; font-size: 11px; color: rgb(102, 102,= + 102); white-space: nowrap; } + +.goog-te-gadget img { vertical-align: middle; border: none; } + +.goog-te-gadget-simple { background-color: rgb(255, 255, 255); border-width= +: 1px; border-style: solid; border-color: rgb(155, 155, 155) rgb(213, 213, = +213) rgb(232, 232, 232); font-size: 10pt; display: inline-block; padding-to= +p: 1px; padding-bottom: 2px; cursor: pointer; zoom: 1; } + +.goog-te-gadget-icon { margin-left: 2px; margin-right: 2px; width: 19px; he= +ight: 19px; border: none; vertical-align: middle; } + +.goog-te-combo { margin-left: 4px; margin-right: 4px; vertical-align: basel= +ine; } + +.goog-te-gadget .goog-te-combo { margin: 4px 0px; } + +.goog-logo-link, .goog-logo-link:link, .goog-logo-link:visited, .goog-logo-= +link:hover, .goog-logo-link:active { font-size: 12px; font-weight: bold; co= +lor: rgb(68, 68, 68); text-decoration: none; } + +.goog-te-banner .goog-logo-link, .goog-close-link { display: block; margin:= + 0px 10px; } + +.goog-te-banner .goog-logo-link { padding-top: 2px; padding-left: 4px; } + +.goog-te-combo, .goog-te-banner *, .goog-te-ftab *, .goog-te-menu *, .goog-= +te-menu2 *, .goog-te-balloon * { font-family: arial; font-size: 10pt; } + +.goog-te-banner { margin: 0px; background-color: rgb(228, 239, 251); overfl= +ow: hidden; } + +.goog-te-banner img { border: none; } + +.goog-te-banner-content { color: rgb(0, 0, 0); } + +.goog-te-banner-content img { vertical-align: middle; } + +.goog-te-banner-info { color: rgb(102, 102, 102); vertical-align: top; marg= +in-top: 0px; font-size: 7pt; } + +.goog-te-banner-margin { width: 8px; } + +.goog-te-button { border-color: rgb(231, 231, 231); border-style: none soli= +d solid none; border-width: 0px 1px 1px 0px; } + +.goog-te-button div { border-color: rgb(204, 204, 204) rgb(153, 153, 153) r= +gb(153, 153, 153) rgb(204, 204, 204); border-style: solid; border-width: 1p= +x; height: 20px; } + +.goog-te-button button { background: transparent; border: none; cursor: poi= +nter; height: 20px; overflow: hidden; margin: 0px; vertical-align: top; whi= +te-space: nowrap; } + +.goog-te-button button:active { background: none 0px 0px repeat scroll rgb(= +204, 204, 204); } + +.goog-te-ftab { margin: 0px; background-color: rgb(255, 255, 255); white-sp= +ace: nowrap; } + +.goog-te-ftab-link { text-decoration: none; font-weight: bold; font-size: 1= +0pt; border: 1px outset rgb(136, 136, 136); padding: 6px 10px; white-space:= + nowrap; position: absolute; left: 0px; top: 0px; } + +.goog-te-ftab-link img { margin-left: 2px; margin-right: 2px; width: 19px; = +height: 19px; border: none; vertical-align: middle; } + +.goog-te-ftab-link span { text-decoration: underline; margin-left: 2px; mar= +gin-right: 2px; vertical-align: middle; } + +.goog-float-top .goog-te-ftab-link { padding: 2px; border-top-width: 0px; } + +.goog-float-bottom .goog-te-ftab-link { padding: 2px; border-bottom-width: = +0px; } + +.goog-te-menu-value { text-decoration: none; color: rgb(0, 0, 204); white-s= +pace: nowrap; margin-left: 4px; margin-right: 4px; } + +.goog-te-menu-value span { text-decoration: underline; } + +.goog-te-menu-value img { margin-left: 2px; margin-right: 2px; } + +.goog-te-gadget-simple .goog-te-menu-value { color: rgb(0, 0, 0); } + +.goog-te-gadget-simple .goog-te-menu-value span { text-decoration: none; } + +.goog-te-menu { background-color: rgb(255, 255, 255); text-decoration: none= +; border: 2px solid rgb(195, 217, 255); overflow: hidden scroll; position: = +absolute; left: 0px; top: 0px; } + +.goog-te-menu-item { padding: 3px; text-decoration: none; } + +.goog-te-menu-item, .goog-te-menu-item:link { color: rgb(0, 0, 204); backgr= +ound: rgb(255, 255, 255); } + +.goog-te-menu-item:visited { color: rgb(85, 26, 139); } + +.goog-te-menu-item:hover { background: rgb(195, 217, 255); } + +.goog-te-menu-item:active { color: rgb(0, 0, 204); } + +.goog-te-menu2 { background-color: rgb(255, 255, 255); text-decoration: non= +e; border: 1px solid rgb(107, 144, 218); overflow: hidden; padding: 4px; } + +.goog-te-menu2-colpad { width: 16px; } + +.goog-te-menu2-separator { margin: 6px 0px; height: 1px; background-color: = +rgb(170, 170, 170); overflow: hidden; } + +.goog-te-menu2-item div, .goog-te-menu2-item-selected div { padding: 4px; } + +.goog-te-menu2-item .indicator { display: none; } + +.goog-te-menu2-item-selected .indicator { } + +.goog-te-menu2-item-selected .text { padding-left: 4px; padding-right: 4px;= + } + +.goog-te-menu2-item, .goog-te-menu2-item-selected { text-decoration: none; = +} + +.goog-te-menu2-item div, .goog-te-menu2-item:link div, .goog-te-menu2-item:= +visited div, .goog-te-menu2-item:active div { color: rgb(0, 0, 204); backgr= +ound: rgb(255, 255, 255); } + +.goog-te-menu2-item:hover div { color: rgb(255, 255, 255); background: rgb(= +51, 102, 204); } + +.goog-te-menu2-item-selected div, .goog-te-menu2-item-selected:link div, .g= +oog-te-menu2-item-selected:visited div, .goog-te-menu2-item-selected:hover = +div, .goog-te-menu2-item-selected:active div { color: rgb(0, 0, 0); font-we= +ight: bold; } + +.goog-te-balloon { background-color: rgb(255, 255, 255); overflow: hidden; = +padding: 8px; border: none; border-radius: 10px; } + +.goog-te-balloon-frame { background-color: rgb(255, 255, 255); border: 1px = +solid rgb(107, 144, 218); box-shadow: rgb(153, 153, 153) 0px 3px 8px 2px; b= +order-radius: 8px; } + +.goog-te-balloon img { border: none; } + +.goog-te-balloon-text { margin-top: 6px; } + +.goog-te-balloon-zippy { margin-top: 6px; white-space: nowrap; } + +.goog-te-balloon-zippy * { vertical-align: middle; } + +.goog-te-balloon-zippy .minus { background-image: url("//www.google.com/ima= +ges/zippy_minus_sm.gif"); } + +.goog-te-balloon-zippy .plus { background-image: url("//www.google.com/imag= +es/zippy_plus_sm.gif"); } + +.goog-te-balloon-zippy span { color: rgb(0, 0, 204); text-decoration: under= +line; cursor: pointer; margin: 0px 4px; } + +.goog-te-balloon-form { margin: 6px 0px 0px; } + +.goog-te-balloon-form form { margin: 0px; } + +.goog-te-balloon-form form textarea { margin-bottom: 4px; width: 100%; } + +.goog-te-balloon-footer { margin: 6px 0px 4px; } + +.goog-te-spinner-pos { z-index: 1000; position: fixed; transition-delay: 0.= +6s; left: -1000px; top: -1000px; } + +.goog-te-spinner-animation { display: flex; align-items: center; justify-co= +ntent: center; width: 104px; height: 104px; border-radius: 50px; background= +: url("//www.gstatic.com/images/branding/product/2x/translate_24dp.png") 50= +% 50% no-repeat rgb(255, 255, 255); transition: all 0.6s ease-in-out 0s; tr= +ansform: scale(0.4); opacity: 0; } + +.goog-te-spinner-animation-show { transform: scale(0.5); opacity: 1; } + +.goog-te-spinner { margin: 2px 0px 0px 2px; animation: 1.4s linear 0s infin= +ite normal none running goog-te-spinner-rotator; } + +@keyframes goog-te-spinner-rotator {=20 + 0% { transform: rotate(0deg); } + 100% { transform: rotate(270deg); } +} + +.goog-te-spinner-path { stroke-dasharray: 187; stroke-dashoffset: 0; stroke= +: rgb(66, 133, 244); transform-origin: center center; animation: 1.4s ease-= +in-out 0s infinite normal none running goog-te-spinner-dash; } + +@keyframes goog-te-spinner-dash {=20 + 0% { stroke-dashoffset: 187; } + 50% { stroke-dashoffset: 46.75; transform: rotate(135deg); } + 100% { stroke-dashoffset: 187; transform: rotate(450deg); } +} + +#goog-gt-tt html, #goog-gt-tt body, #goog-gt-tt div, #goog-gt-tt span, #goo= +g-gt-tt iframe, #goog-gt-tt h1, #goog-gt-tt h2, #goog-gt-tt h3, #goog-gt-tt= + h4, #goog-gt-tt h5, #goog-gt-tt h6, #goog-gt-tt p, #goog-gt-tt a, #goog-gt= +-tt img, #goog-gt-tt ol, #goog-gt-tt ul, #goog-gt-tt li, #goog-gt-tt table,= + #goog-gt-tt form, #goog-gt-tt tbody, #goog-gt-tt tr, #goog-gt-tt td { marg= +in: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inhe= +rit; font-weight: inherit; font-stretch: inherit; font-size: inherit; font-= +family: inherit; vertical-align: baseline; text-align: left; line-height: n= +ormal; } + +#goog-gt-tt ol, #goog-gt-tt ul { list-style: none; } + +#goog-gt-tt table { border-collapse: collapse; border-spacing: 0px; } + +#goog-gt-tt caption, #goog-gt-tt th, #goog-gt-tt td { text-align: left; fon= +t-weight: normal; } + +div#goog-gt-tt { padding: 10px 14px; } + +#goog-gt-tt { color: rgb(34, 34, 34); background-color: rgb(255, 255, 255);= + border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.2) 0px 4= +px 16px; display: none; font-family: arial; font-size: 10pt; width: 420px; = +padding: 12px; position: absolute; z-index: 10000; } + +#goog-gt-tt .original-text, .gt-hl-layer { clear: both; font-size: 10pt; po= +sition: relative; text-align: justify; width: 100%; } + +#goog-gt-tt .title { color: rgb(153, 153, 153); font-family: arial, sans-se= +rif; margin: 4px 0px; text-align: left; } + +#goog-gt-tt .close-button { display: none; } + +#goog-gt-tt .logo { float: left; margin: 0px; } + +#goog-gt-tt .activity-links { display: inline-block; } + +#goog-gt-tt .started-activity-container { display: none; width: 100%; } + +#goog-gt-tt .activity-root { margin-top: 20px; } + +#goog-gt-tt .left { float: left; } + +#goog-gt-tt .right { float: right; } + +#goog-gt-tt .bottom { min-height: 15px; position: relative; height: 1%; } + +#goog-gt-tt .status-message { background: rgb(41, 145, 13); border-radius: = +4px; box-shadow: rgb(30, 102, 9) 0px 2px 2px inset; color: white; font-size= +: 9pt; font-weight: bolder; margin-top: 12px; padding: 6px; text-shadow: rg= +b(30, 102, 9) 1px 1px 1px; } + +#goog-gt-tt .activity-link { color: rgb(17, 85, 204); cursor: pointer; font= +-family: arial; font-size: 11px; margin-right: 15px; text-decoration: none;= + } + +#goog-gt-tt textarea { font-family: arial; resize: vertical; width: 100%; m= +argin-bottom: 10px; border-radius: 1px; border-width: 1px; border-style: so= +lid; border-color: silver rgb(217, 217, 217) rgb(217, 217, 217); border-ima= +ge: initial; font-size: 13px; height: auto; overflow-y: auto; padding: 1px;= + } + +#goog-gt-tt textarea:focus { box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 2px ins= +et; border: 1px solid rgb(77, 144, 254); outline: none; } + +#goog-gt-tt .activity-cancel { margin-right: 10px; } + +#goog-gt-tt .translate-form { min-height: 25px; vertical-align: middle; pad= +ding-top: 8px; } + +#goog-gt-tt .translate-form .activity-form { margin-bottom: 0px; } + +#goog-gt-tt .translate-form .activity-form input { display: inline-block; m= +in-width: 54px; border: 1px solid rgba(0, 0, 0, 0.1); text-align: center; c= +olor: rgb(68, 68, 68); font-size: 11px; font-weight: bold; height: 27px; ou= +tline: 0px; padding: 0px 8px; vertical-align: middle; line-height: 27px; ma= +rgin: 0px 16px 0px 0px; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px; border-= +radius: 2px; transition: all 0.218s ease 0s; background-color: rgb(245, 245= +, 245); background-image: -webkit-linear-gradient(top, rgb(245, 245, 245), = +rgb(241, 241, 241)); user-select: none; cursor: default; } + +#goog-gt-tt .translate-form .activity-form input:hover { border: 1px solid = +rgb(198, 198, 198); color: rgb(34, 34, 34); transition: all 0s ease 0s; bac= +kground-color: rgb(248, 248, 248); background-image: -webkit-linear-gradien= +t(top, rgb(248, 248, 248), rgb(241, 241, 241)); } + +#goog-gt-tt .translate-form .activity-form input:active { border: 1px solid= + rgb(198, 198, 198); color: rgb(51, 51, 51); background-color: rgb(246, 246= +, 246); background-image: -webkit-linear-gradient(top, rgb(246, 246, 246), = +rgb(241, 241, 241)); } + +#goog-gt-tt .translate-form .activity-form input:focus, #goog-gt-tt .transl= +ate-form .activity-form input.focus { outline: none; border: 1px solid rgb(= +77, 144, 254); z-index: 4 !important; } + +#goog-gt-tt .translate-form .activity-form input.selected { background-colo= +r: rgb(238, 238, 238); background-image: -webkit-linear-gradient(top, rgb(2= +38, 238, 238), rgb(224, 224, 224)); box-shadow: rgba(0, 0, 0, 0.1) 0px 1px = +2px inset; border: 1px solid rgb(204, 204, 204); color: rgb(51, 51, 51); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit { color: w= +hite; border-color: rgb(48, 121, 237); background-color: rgb(77, 144, 254);= + background-image: -webkit-linear-gradient(top, rgb(77, 144, 254), rgb(71, = +135, 237)); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit:hover #goo= +g-gt-tt .translate-form .activity-form input.activity-submit:focus, #goog-g= +t-tt .translate-form .activity-form input.activity-submit.focus #goog-gt-tt= + .translate-form .activity-form input.activity-submit:active { border-color= +: rgb(48, 121, 237); background-color: rgb(53, 122, 232); background-image:= + -webkit-linear-gradient(top, rgb(77, 144, 254), rgb(53, 122, 232)); } + +#goog-gt-tt .translate-form .activity-form input.activity-submit:hover { bo= +x-shadow: rgb(255, 255, 255) 0px 0px 0px 1px inset, rgba(0, 0, 0, 0.1) 0px = +1px 1px; } + +#goog-gt-tt .translate-form .activity-form input:focus, #goog-gt-tt .transl= +ate-form .activity-form input.focus, #goog-gt-tt .translate-form .activity-= +form input:active, #goog-gt-tt .translate-form .activity-form input:hover, = +#goog-gt-tt .translate-form .activity-form input.activity-submit:focus, #go= +og-gt-tt .translate-form .activity-form input.activity-submit.focus, #goog-= +gt-tt .translate-form .activity-form input.activity-submit:active, #goog-gt= +-tt .translate-form .activity-form input.activity-submit:hover { border-col= +or: rgb(48, 121, 237); } + +#goog-gt-tt .gray { color: rgb(153, 153, 153); font-family: arial, sans-ser= +if; } + +#goog-gt-tt .alt-helper-text { color: rgb(153, 153, 153); font-size: 11px; = +font-family: arial, sans-serif; margin: 15px 0px 5px; } + +#goog-gt-tt .alt-error-text { color: rgb(136, 0, 0); display: none; font-si= +ze: 9pt; } + +.goog-text-highlight { background-color: rgb(201, 215, 241); box-shadow: rg= +b(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative; } + +#goog-gt-tt .alt-menu.goog-menu { background: rgb(255, 255, 255); border: 1= +px solid rgb(221, 221, 221); box-shadow: rgb(153, 153, 170) 0px 2px 4px; mi= +n-width: 0px; outline: none; padding: 0px; position: absolute; z-index: 200= +0; } + +#goog-gt-tt .alt-menu .goog-menuitem { cursor: pointer; padding: 2px 5px 5p= +x; margin-right: 0px; border-style: none; } + +#goog-gt-tt .alt-menu div.goog-menuitem:hover { background: rgb(221, 221, 2= +21); } + +#goog-gt-tt .alt-menu .goog-menuitem h1 { font-size: 100%; font-weight: bol= +d; margin: 4px 0px; } + +#goog-gt-tt .alt-menu .goog-menuitem strong { color: rgb(52, 90, 173); } + +#goog-gt-tt .goog-submenu-arrow { text-align: right; position: absolute; ri= +ght: 0px; left: auto; } + +#goog-gt-tt .goog-menuitem-rtl .goog-submenu-arrow { text-align: left; posi= +tion: absolute; left: 0px; right: auto; } + +#goog-gt-tt .gt-hl-text, #goog-gt-tt .trans-target-highlight { background-c= +olor: rgb(241, 234, 0); border-radius: 4px; box-shadow: rgba(0, 0, 0, 0.5) = +3px 3px 4px; box-sizing: border-box; color: rgb(241, 234, 0); cursor: point= +er; margin: -2px -2px -2px -3px; padding: 2px 2px 2px 3px; position: relati= +ve; } + +#goog-gt-tt .trans-target-highlight { color: rgb(34, 34, 34); } + +#goog-gt-tt .gt-hl-layer { color: white; position: absolute !important; } + +#goog-gt-tt .trans-target, #goog-gt-tt .trans-target .trans-target-highligh= +t { background-color: rgb(201, 215, 241); border-radius: 4px 4px 0px 0px; b= +ox-shadow: rgba(0, 0, 0, 0.5) 3px 3px 4px; box-sizing: border-box; cursor: = +pointer; margin: -2px -2px -2px -3px; padding: 2px 2px 3px 3px; position: r= +elative; } + +#goog-gt-tt span:focus { outline: none; } + +#goog-gt-tt .trans-edit { background-color: transparent; border: 1px solid = +rgb(77, 144, 254); border-radius: 0em; margin: -2px; padding: 1px; } + +#goog-gt-tt .gt-trans-highlight-l { border-left: 2px solid red; margin-left= +: -2px; } + +#goog-gt-tt .gt-trans-highlight-r { border-right: 2px solid red; margin-rig= +ht: -2px; } + +#goog-gt-tt #alt-input { padding: 2px; } + +#goog-gt-tt #alt-input-text { font-size: 11px; padding: 2px 2px 3px; margin= +: 0px; background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); border= +-width: 1px; border-style: solid; border-color: rgb(192, 192, 192) rgb(217,= + 217, 217) rgb(217, 217, 217); border-image: initial; display: inline-block= +; vertical-align: top; height: 21px; box-sizing: border-box; border-radius:= + 1px; } + +#goog-gt-tt #alt-input-text:hover { border-width: 1px; border-style: solid;= + border-color: rgb(160, 160, 160) rgb(185, 185, 185) rgb(185, 185, 185); bo= +rder-image: initial; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 2px inset; } + +#goog-gt-tt #alt-input-text:focus { box-shadow: rgba(0, 0, 0, 0.3) 0px 1px = +2px inset; outline: none; border: 1px solid rgb(77, 144, 254); } + +#goog-gt-tt #alt-input-submit { font-size: 11px; padding: 2px 6px 3px; marg= +in: 0px 0px 0px 2px; height: 21px; } +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gstatic.com/images/branding/product/2x/translate_24dp.png + +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 +5PF339yL/IxXqK4AAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/b0f69dcdff68cb3df3bb410569cd49f3?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +rklEQVRYhaWXX2/TVhjGf8dx4hRCkyYUhZZASzuQUIsQiCIBY8AktiIk2M208R32uaZdoNELEBpb +Jw1aqRF0ZdnaadoCIqG0TdWExW1iN7Z3kdq188eu1nPlx6913uNznuc57yue//qvNb+4iT1uf5xg +JBMFIF+sY1k4eLmkU6ubHqzpJtmcytpGA/dIxmUmxmOsbWxz5dwhOo2XiyqyHbQXkc2pnDymML+0 +SexAiPnFTU4eUxBCkM2p1OqmB9+7mWRoQOHNskY2p9IwYGI8xmim+c2T5xWAtkW8XFSZXVCR7OD5 +MwcBWK80ePSswlK+xqkTUdYrDfJFjeWSTmFFb8MAQgiUiEQkLKGEBUpEIIRwks0vbjKzUG1LDiDb +L9078bqocety3Jkkm1OJKpIzgRsvl3SyOdVZDMDUdJmj/WEmxmOeRQBEI8JJ7lmAHXQCod1nw7Qw +DKsj1nQTTTdpHZpuoekWd64lmMuplMoN3Fw7nGhyxFmAe1sGj4QdLgBcHIvRE5WYmi634eHBqC8H +AIYGFR4/q5AvagBk0hHu3uhDCNFcgDt5X2+ILz5NMvtKJV/U6OsNcepEFCEER/vD1DXTg8HLgZBk +tXNgaZMPVYPJqwmEgLmcyuwrlSvnDiFe/FG13Gdy63Kc00M9APz1poYFDn67olGrmx4sh0QbBwCH +A6Zh0TBgxLUjlmXxT0GjYViIv9/WLD+dL+VrrJe3O+o8k46w3bB845l0pKNPpBIyl8ZjyPZZd9N5 +rW7y1WSq4xlP/VwOjF+70OvhiLETt3dEtnXdE5WcbeyERzJNstln7vaBoLibI0bIyxEZ/HVuY3tX +3O/2Eu/kEw+nywz0h7l0NtZ0Qj+d27h1NPYY7+oT202fkKCp64mzu67VCbv/DvC4nF98eDDKl5+l +uPNJgiNJmVRcZvJqgq8nU4xkoshBOrexvZUNw2JiPMbxtLKnOPhzQPz5esvy03m+oFGpNjrqfKA/ +gr5t+caHBpWOPmFzQI6EBd89Wffo9IfZD859bphWV69vGFZgvFY3uXczCXT2GTnIy1/8ru7LB96t +6r4+I7eeUauX2z6xHx/w8xl5L/f5fnzAfu7mM1LQfQ778wE73s1npFadJuMyn19NcP92io+ON8my +Hx+w4918JpADtk/8Xx/o5is2Fu/WNMvvPt+vD6QSctd6orCiIfLFmhUKCY6nFc8EyyWdrZpJKIRv +3S+J4L5heHAHr+k8+HHDmWNstKfpAzMLVbI5tVkk7lQ48ViI6xd7EUL4+sS3j9d9dX7hzEFmFqpc +OXeIOZcyxkZ7uH6xd7cvOLBTZD54uoFl4SRv5Uhr3R/UN2TSCu9LOo9+KVNc1T3JhRDBHAiq+aam +yxxOyEQVyUngxt/cT1NY0Xi4U1G7kwNID55uOJOPjfY4HdL70jZT0+XAuh+C6wm3QiMRySNZpy9o +XZndRATdFU9o6vpAVHL+shXP/aaSSUcorOjOvHYnJnVK7u4Vgzhg+0QmrTDQH27DhRWNZFzm7o0+ +Bo6EnZ+ze0UxPVex3MndY2ahynCX+/xof5hL4zG2XLourmps1rxY3TI5PdQ0nuKqzvc/7crw/JmD +/AcIRAxlr3wgJgAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/eb5a95cb1be342c4089183cd8232a7f2?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAH +oklEQVRYw62XW2wcZxXHf9839/Ve7I2369v6EidL49RNnEuxG2iTWgkSPKE+8FIkQELwRqWWPICE +QG1VAQ+UViovlXjigScERAjaEpRbS1qRWInrprk5jrOtr107273M7swcHtZxW5UmtsonfZqRZr5z +ft85/3O+GSUiwhcYzdVNE0qpTa/XX8y5UK7WuHTzFn6jgYisz80Y2dSIokiiKJQoiuT02VOSf3C/ +ZLbmpLUrJ098/wfyp+OnpViur70X3dMem3UehA3555nT8tqps+IkYoLWorQWlCVgiDJsSXYOyuPf ++Z4ce/2MBFH4/wMIo1B+9ptfSte2IWnt2SpgCKhPT6XX7rUo7cmhb35Lrs9Mf2402MzuL75zXtxU +QlDGupOP52cBUFpQhgwN75NbH8z9T4hNAfzk50cFZX7sVH0CQBmfcKrFNC1xHE+UNgSlZd+Br4rv +lz9j19y4WCNef/U0SARKNa/SLDvTskilEsQ8l/b2DOl0mlQqxcDAAJOTk7z2+r/4zxtvcvzkcb42 +/o1PleuGAS5N3+DcxMVmzYsCpVGANhQ9XZ3s3beXLVu24Hke7733HtdvTFMsFtmzZw8flW7zxpvn +eOnFlzjy2BGUsjffB06eepuw7gMKpRQtMRfbNtlx//3s3beXHTt20NLSwqmTJygWiwwODDI6OsrY +2BhP//gojzzyEK/+/QRn3zr9KbsbjkAQBCABAIlEjL5cN1HgozCoVRr09/eTyWQYHx9nZWWFmZkZ +8vk8+Xwex3F44YUXeea55/jt715h9MuH1tOw4QgsLk83X1dCuq0NwzS4PjtPvR7Rk+theXkZ13Xp +7+/nypUr/Pkvxzj61PM8/+yvOHbsGEEQcPTpp5i8MEEYBevdcsMRSNoJlNIIIZVKiUqlxNjoGLt3 +P4iEiuXlZSYmJlBK4XkesVicQ4eHeGj/fjKZDIZh4Hkehw8e5vy5CUZGRjAMY+MAsVQSQQBFEIYc +OPAIw8PDlMsVLk1dpbWthSAIuHnzJmNjY/T397O4uIhSing8jmma2LbN+PhhfN/n2rVr5PP5jQN8 +ac8QhmUSBCGO69Hb28vNmRv87dUTiHbZtSNHIpng8uXLtLW1kc1mqdVqeJ5HIpHANE0sy2L79u0U +CgVWisXNaeArO0fYMzoCSuGYJiLCxXem2D+yi4MPP8jg4CAiQkdHB1u3bmVhYYFyuczS0hKO42BZ +Flpr4vE4xWKRufl5qtXqxiNgmTZPPvkjnjjzBF5LgpjrcPixQyRb2wiCpqhKpRJvnz1HKpWiUChQ +rVbJZrP4vo+INHNumgwPD2MaBqZp3DsCzXbdQOrvks/cJp9P49frZDu76OntI5VKEYvFEBGCIGB+ +8QOOHz9OEAT09fWRTqdZXV0liiJqtRogJBJxsh1ZLMu+O0CzVKogf0XpfzDYO8mvn32Ats5maEVk +XfXJZBLHceju6kApxY0bNygUCtRqNRYXF6nX6xiGASgMw8B1XZRS947A+Qu/R9Qs0cVVbr81x67d +vWR7unnjrX9TLpdRSmGaJo7jYNs28UQb83PzjI6OEgQBuVyOfD6PYRgopWjU6zTqDep+fSMiLNKa +LkAYQ/1hksYfZ3DE46mfbsVpmaVQKNBoNLAsaw3EIIoa7HxgJ5VKhXK5zOzsLEEQYBgGtm2jDYNI +hKBRQUTuJUKT/u5dKKWQH46Q1XlUNiAV3aa/M8HMpWvkuruIx+NUKhWU0mQyGWzbplqtAnD16lXa +2tpwXRfP87BtmyiKsJ1YE/ruAHEi0WhuoraliUmCWjCHXXEpLiQofDhPe+Y+giAgEY/RaDTWU1Gr +1YiiiHq9zpUrV0ilUqTT6TvqwnbcjfUBFcUBBVQQBRIYrC4v8N1vP874+KO0t7cThiFhBLG1HSql +aDQalMsVGo0GfX196yINgoB6PaDRCO5+FjQrYBptXgYMoIqWCC2rpGKwUD/BM794Aa8lx9TFCV47 +fhK5c2oCWmu6ujoZGBggm81iWRblchnP8zAMTa1Wazanz997CPL2mnMTaEWUQtstpDtaGNyhKFw/ +jVKaoeHd9Ham1x0rBNu26c310t7eThAEmKaJ6zhordFaU6mU75WCEEEhdDVh6EVxAMtM0JpyyXXk +MFKVO4li/PAR/FqNSqVCteZTKpUovF9gamqKUqlELBZDab3eO8IwutdxbEPogDEPSq+xeijpxHGW +KM4v0Zp+mA8Xb1FuCLNzqyzdukpDe1hOU/Gu6+K6Lslkcq0JNQUYRRFRGLKysnL3KojkfnT0PhgJ +YBVYABWidJxby5ql6SmSts1H6UdpSbVjxbaQSsaxLBuJImzHAcD3fYB1iDCMEImoVCp3BzDM7Uho +IvXz1GUJVI6q73N9fgvn3k/g3DdEylshkUzS0QmJLZ1IUEJrje262LaNYRj4vo/v+5imua6BSBtY +lvX5AEopUAZKb0NkgPpHHzK5EMc2asysGuR3etieybZYljmlMC3hgaHdXLhwZr0UwzBEGwYSKlZX +V/FcF72mA4AoUKi7/Z7feXTnA1JEKAUCvrDgQ6Mi9Gc0ZQWhrfBKNV5++RU8LyKKovU/5WQiSXdP +N729vXieB8C7F6Y58vWD/BdGS8TMZ/YsCQAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/6ec78954391f88681b2a5b97ef958d08?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +20lEQVRYha1XTU8bVxQ9MzbUoRjLpkYYW3Wr0LgfQSxqESUgJSKpU9qm3YDaAD8gm7Zk1/6AKmQT +OYuGROq2u0pxqJImoVBVNjbCRCVV/EGglYLHGLA9eMYSLf6Y18XI4xnPGGjMkSzZ743vPXPfPffd +SxFCCDSQDfNY8TI48+O7irUCW4LtokVa2/x1B7SBRseAScsM/MMRsEt5AEDrcQMGZ3pB0ZS0T2s5 +Do5FERiJIj3PK/ZWvAziXgZyzp0XzEgHOPiHI9gOcCoCrglH9ftXDoVzTQJFrowCX1YZyoZ5pOd5 +8LFdbD7eUey9983rsLiNCI3HVEQ6BkywuI1oPW6A/VK7yi6ldQSEEGzN5hC/yeDczz0AgOBYNSJt +77Tg3IMeUJTybSKT61i7vQEAsLiNcE040DFgwnaAQyFbhOOz11QEaK3QsUt5kDLB2emTird3jnag ++0qXZhQAoNmkk74X+RKKXAn+4QgAwP5p9e2zYR6pR6wYAZ8zRGoZB8ei2GNL0lsGx6JocRrQ+92b +oCgKkcl1bP+eU0RhdSqJ6PUEjCeOwfW1A11DFlA0hXtvLKgiIrevr2WcXeSlUG8+3kGzRa9wDohn +Xtm3XbRgdSqJxN0M3N+/JTmuRT371OwHy0TOuPasXV/aYRuyqM4bAJjpDPStOpT/Eeo6nvM8xX72 +FUmopfNGsTm7A52BhrVfu04oZKil80bRed6MbT8H/0gE6aC6TkgRyIZ5BEaiAIC+OydUUagkUwVD +T91oNukPvV+RaHufEa6rDlhPixGRIrDiZaSHjzoKgJi43Ve6kF3MI3g5hsDnEWQWeJHAYXXeKJR1 +oowCVxJluOJl4BztUEgt7mXQ6TFrZv/LoFIn2t5ugWvCAZvHLKoms8iRP779iwiCQOR4du0F2XiY +lX7v5YqKT+3z++0/v8WQOc8yST7IEKGs/B+S9zMqYxUk7qU11/8PUrMsYe6rHVeg7/pIfUMBYl7Q ++iMIvwDY6/hIzbD1+4HE3QxsQ40XJNpAIzK5rlpfnUqivCso68CKl5HUIE9IoLE64B+OwOI2SnfI +6lQS6z+lMTjTC73cMQBN543CNeFAaDwGQJRi9HoC79/sBkVT0Nd2QE1t+iN1DlS7okqzIu+O6M4L +ZpydPolTP7hg6nkVa7c3NM+sUdTrDRW3IZG1YtZ+k3RmAFDgSgqDTW06RaQO2gfEXCjsFBWd8b49 +YXlPgP1jbQm9DLR6Q329vr3JpMPf3lRdAtkwj710EfQrNDrPmzWfSc2wWLuTUtkHgHSIQ/wGA7r2 +bNgn+bpzQcWxvE7oDtC5yv5SHvNfRBG8HAMbzoOu7dv3mwsqxOQ9orXfBPZJXkGionP7pXbVXFDg +SijmZflCCCFb/hxJ+Kp1XxAEkpphyW+f/EkyixyZH40QnzNEfM6Q5sW1PZ8jPmeIPLv2gjy/xRCf +M6Swp2U/+UuWzHmWiR4QdSrPRTach1AS54Kt2dyBdcJ6xoT2Pm2d+4cjcE04FHMBRVHo+tACm8dc +vQvkRuM3GLFDIuLsd5g64bqqrXN2KY/QeAyBkahqAKJoSn0ZpUMcMgs8+PguUg9ZiZycSHqeU5Gw +njah/VT9GbAyF9SqXlUH/CMRsGFRNkbXMQw+6lUZq1cnMgs8/t0qKHReOxfU4j+8ewQGCa+hJAAA +AABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/JlM4b.jpg?s=32&g=1 + +/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG +BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM +DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIA +AhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAACAIGBAcJ/8QALRAAAQMDAwIFAgcAAAAAAAAAAQID +BAUGEQAHIRIxCBMUQVEVYQkiIzJCcXL/xAAZAQABBQAAAAAAAAAAAAAAAAAGAgMEBwj/xAAoEQAB +AgUDAwQDAAAAAAAAAAABAhEDBAUSIQAHMRMiQQYVMmFRgdH/2gAMAwEAAhEDEQA/ALrf11xdtbGr +VxTYVYqMKgxDLeiUqKZM6UetLaGWWx+5xxxxtAzwOrJ4B0otspu19ibaW9O3Ht6zbIlV5EeOti5a +lHddbnuNha4IkOFKXHkEqSfKwMpJAAxok7ueJN3w7fSZTBRGTWFuxvqDqSWmFpCVhs9JBBWOr37I +ONQ3E2i24/E3sO0abf8AKuakSLVkSXqbMoMyOFBMoMh9P67DqMK8hoodQlLreDhWCpJzLvVVKiid +l5dceJLSYPfFhElb2kjsCkvlsknBcMQQq1qJ6SjijCsdNKxEJSlyPBIP5I4Pjx9jTB8VHhNpln2i +7d1qNGPToZSajTVOFxDCCcee0pRKgASOpBJAB6hgJIJ0MJDwWU4BPfHvp40J+BXdoZVu05Dfo3qQ +ulR2n3SR0eQWkJUo5J4xk8ngnvorbyeF65diLZpFQqs2lVBuoumOv0ZXhlwI6gCVJTkKAUc4GMYw +e+kbD7re6yXtFbmLppKmRd81oYnPOU2q7ic4Dk8iVdpCoEW5CWTov7Ub3wbt3QgUqpQYkuFKS8oJ +lNNvNF5LS1NkpWkgnqHHwe2tu7ZbY0ytXKhxElyK2XeoIZITj+vtoqT9nquJbcqlyHGZbKkrZeZ/ +KttaTwRx7Y9+D76su2u8W7tqVkomWdQ6j5K8JltVdcJL3PBLZacwr/KsfGO2nd1/QlcrcwmbpgdV +lpDgHBJfJAPLcvjRVQKvKysEwYpYO45PgfzXTtLlKsh6yGIYUfUy30KdcWVurUGeoDn7BXA++qh4 +8d24NRYt62Wn235UR1dQmJQsH0xKPLaSoA5CyFLUAewwf5DRQu3cK/t6aFTYNdqUe3qZEfTIECiq +WHXngOFOylEOceyWwhPJznWTRKEuhoylwkq6iVrUVKWSBkkqPf5OTod2j2NnaJUodbq8QdRFzIHd +kuAVKdsAnAfLG7kahV6tQJiH0YWfv9vr/9k= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/924800e76876546c5c575c0175e1f434?s=32&d=identicon&r=PG + +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 +AElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/2d6ef152f55ad02f221278801069a854?s=32&d=identicon&r=PG + +/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg +SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK +DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU +FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAIAAg +AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF +BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq +NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi +o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E +AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR +BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG +R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz +tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A +9t/bJ/aL+MmufEWX4Ofs56NPqPiqwt47vxDrkKQldPWUZigDzYijdl+YsxzggLyDj4Z8HeL/ANtj +4jfFbxN8O9B8aeIb3xj4dV31TT11u1iWAK6o2JGcRthnUYVj19jX7R+DPhxoPgGfX7jRrPyLrXdR +l1XUbh3LyXFw+AWZjzgKFVV6KAAAK+Av+CeP/FRft0/tUa+PnSPVLm2R8fwPqE239IR+VAHyx8Xf +Fn7a/wACtX8L6X418aeI9Jv/ABNcNa6VAmuW1wbiRWjUj907beZYxlsD5vrX0H8DPhZ+3bpnxk8F +XnjrVNcl8Gw6tbSauk/iKymRrUSAyhkSYsw254AJNdR+3z/xVP7f37Lnhlv3kdtfW+oNH1BVr5C3 +5i2r9H6AOa+JfxA0n4VeANf8X65OttpWjWcl5O7NjIVSQo9WY4UDuSB3r4E/4Ixabdax4Z+L3ju9 +Xdca9rsMLy4+88aPM/63Qrvf+Crfwq+LHxe+FPhXRfhxpV3rulDUXl1vTrBgJpcKv2dipI3IreYS +OcEoccZHsH7B/wCz/ffs2/s2+HvCuspHH4hneXUtUSJgypcSnOzI4JRBGhIJBKHHGKAPln9re/t9 +K/4Kvfs/XOoyrBYnTLKJHkOF817q9RRn3dkH4iv0P8UeM9H8HDSjq94LT+1L+HTLMbGczXMudkYC +g9cE5PAAJJAFfDf/AAVN/Y88Y/Hu18K+OPh7ZHVfEXh+OS0utOhkCTz27MHR4iSAWRt/y5yQ/HIw +ef8A2Ff2cvj74i+I+ifED4+63rr6V4Vjk/sDQ9evjPM1y8ZiM7R7jtCozgF/nJI7DkA//9k= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/wftMn.jpg?s=32&g=1 + +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 + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/zYmrw.png?s=32&g=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJN +AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA +B3RJTUUH4QsYFSsXHP810wAACRdJREFUWMNNl8uSnddVx39r7f3dzumb1GrJ3bpYsuXYJqUAxjap +IoQBVYQxVQzIJBMmPAFPwDvwALwAVcwoAqnEFSrIGEwqSdlCQrJkWVLf+/Q532XvtRh8XwsGZ3Cq +ztl7Xf7/31o7/mheehanM0huDDhnJpyHir/8qz/gX+4/5fSzr2j7FnNBVXB3AMQFFVgLyqyMdNnZ +rJT3vnub+58/489yRhRcQEQIoqiACKgqIkIUQB1UHHFQhAB4WpJT4rs3M/cfBH7zTKhLI2fIBpWC +AOJwakZ2YV4EcKgenfCDnQ1eHq2InthwI5qR3XAVBDCzKQAB5eIzZhTUyT3kXkid88GHc8qtyKcP +zxh6oxajQFDA3VERVMaDu2T8+7NDyqCIwMrg41rZVkcE8PF3AuAQFQOcAsFEMJwARCDnhKvQ58zL +PvGNGckNd6cyoVEQd9SNLU28pYEYAypKn4ylGckhVhF3cMDNEZExGHxsAQgRSCLkqRrZwFOic+fv +f37MN22mUscjrAahxTjOAKA4T/rEkyHxXlmwU0akM96eK1eD0oiQ3cGnKggIjgPxonQKxCnKiBBD +4OWLU/7r4Sv2+4FalcEFxSnHVpPGM2mKQBAYgIO1yJ3r69zeXOP6Vy+pl4qJ4+go3unjyEUAYxZT +PzAfy78xEz79/BGvFh2NjI3q3QgKIQjZHHUoQqAIAm7sNIGPbs35/vf2uPfBh5Qr48t/+AUn//EM +8wHHXzvI0LHyipDdyCaYADJmKVE4XvbkyXopZ0SgjEo2wxFmYTxkLK1gDvvnHb/+zSHnp5/y8e9/ +m90/usew6jl78JzUG+4Xf3EcJ4KDOeICGO6CBCEFGAwkQEoZd6MMgiuT6iFEJWcDGdkwZOdwkXj2 +csmjx/uc7h/xvY+/jVyq0XkF/QpznwRpY9XFIUxZG05nTlKhM3AR3CGZIyoERpeMypt4oUzdFAxh +0Q28Ou2pYuSn//mUmzs1MRbkCCaQ3bHpCICojOXLAtGVKBlXYcBxF5L5ZB+m6EeUiY7fMYhlmKjo +mMBZ20FdsBoCXzw+5L03r5CbyOA+nvH6+kkDKqAuBIEiKOdRGdzp3UlmDGkknuoo1gvdDoNTlIqq +4nlMJAQFcVJOzBvh8Kzl6LAjNCWmQn6tgYkDMF4ukx0qEZ6q0w/OajBsEpjoWAU3Hy8wJwRFFESV +nDOqAdypq4i6EeJIxnboWGtKqALe5dENUxpxrIcg2cfSFkKPkx1SHotVFopne325yGhVVcfNycmw +7IgYUSesq1IUSjZn1Q+sXSoI84J0nnCzUV840Rzs/8U0rJVkHB16HMHMJ8uAqqA6WggZWWA4fT8Q +RBCMqioIooQYyJZxZNRYa/RudDmTHZZ1oNqsicOFKMYRxRnGMNkkhJERF2NPZGRCthEk5oZN2ZsI +SXVUuYGYswqwNmsIMWJzoR0y3ZlhjfA0JS6vFcSHBQzZWeHsba1z684a4ekZXd9OdhFWnRHUiWGa +gICZExDKoHhUYlTIicUqkc0ITebG1hVuX9mh7Y9p+8xpHeh2I31yFnVg/VJDfJiElTm3t9fZ/fAt +Xrz4huPVQJthyIbK2EccPDhNoURRqiLiOEMWnvewu3MVb885ODphp2x4//ouN7Y2uXJ1zvPnC/Zf +dXzdJ3KptOIUdcU7736L+PB8oCbyJ29t8+jJ1+TB2D/P9Ob0GQp1CoFSlahwuYpcmhfEsqQdRrds +b9U08zmDOvF8waWq5O3d69RBSKsV6+WcRT3n/queFwdHbDVKpz0/+9sfEyOR3357gyf7J3z59Yrf +erMe+5xHaDBNu6YUqgKaInKlKWk1UoQATYEXzbjt2MBmHSnEOTo+5tbOJvMqsldvc++dTR6dC3/3 +yT7a2gWHiB+82fCt3YJfPV1xct5zeqQj+y8ICSyG0TZlVBb9wGmKlGVAdRzkNi0ZljJBATIHRwd8 +5+4Nvnr83zR3tvniyZLf+d3v8ODFAb988DVlqdRAnNXCN4cdKWUuz+Folei6jMpIrTy5JGQ4bTND +MlRbNuaZOkIRIz7xYLlcUQeh742TVc9nT475xc+/5CPdpLp0ibu7W/zNX/8F//rP/8ZPfvKzcfSn +LHR9IuWRaOCoCpUKJGfIIye6BGbQZzBPrDJs1MKsNGINy66nzYnDLlPNKspVyyf/9Alvbjas4pxY +lAypBXP++E+/z53bO3z2438khqAs2gQ4Q3KaUlEViqhocNIqYT62wjL0ZgwGgyUWnbFW9fiipet7 +cnYGoM/GweE5t8qBvdvvEGeXiTFxfHjE6WnDavmCpkj84Z//kNilhEwbmk2EizG8Rq7ISEOm7Tk7 +I3i6zCplTjshhIFChZShNeds2XJzXnLjrdvML29jLDk+WXJw2I+7QLfg/Xf3sFATh8HQKJBHwvSD +MZsFUlaiKue5ZVgNRCCK4D4GtDIYpokWdBwqAgzmzKvIzStrzLbfINZrLFc9i7MjUr/AhyW/d+8u +b1yd8+DpKdEl0vcDglDEgBuoBgLjy6VZm3PWnZDcKYEiCEMeh1WXp2Uy+/jiQdgslbuXS2Yb6zSz +a4hkzs9PODs9ojs/4KN7d9m9WvP5o5YvXvbEUESGVU9ZKLM6smrTyAAMN6Fq5hTlkr7taXE2xCmL +8fLO/m+7MQcPwt5WxawpKZp1ilCwOD9ksTig1DPeefc2e9e2+eWDU371Cu7sbRIFx0VZ9YmmLBhi +IGVQHZ9OdRHZ3FznZbtPQkb1R6GJDllZJYeJGddqZatWQiwoioqyGDg5fYUN57xx7So7O1t89utH +nAwNTQzsXb1FtCmFfjCKkKiqgq5L08qilEF5/9077L86w7yntfFB0AShd0hAANZmFXtbgTII9WxG +U9ecnR1zePiCGzsb5MH56f0v6VPGa2V9fYPPv9gnDskQGUuYHTQbsVDcDDOjCs7lzTVu3dzhfx4/ +w4HWILmTAGNc47YurVNWTgyZ2WyNebNBu3jFWl2zzJFnz4/pDhbU2+vkfoDlinkViP2Qpz1uWjIZ +p2BTCFkEMWNxds6N61d5+uw5OY978XCxVgqUZWR+ZZu8PCF7wh0q7dm9VvH4ZeDFWc+rkxO2a8VD +Sdu2FCQ2r23zv7nyWGfYgtw4AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTExLTI0VDE2OjQzOjIz +LTA1OjAwWWb+NAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMS0yNFQxNjo0MzoyMy0wNTowMCg7 +RogAAABNdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC45LTkgUTE2IHg4Nl82NCAyMDE3LTA1 +LTI2IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnKaCuEwAAABh0RVh0VGh1bWI6OkRvY3VtZW50 +OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6OkltYWdlOjpIZWlnaHQAMzQxb36KzAAAABd0RVh0 +VGh1bWI6OkltYWdlOjpXaWR0aAAzNDH8j9qRAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2Uv +cG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADE1MTE1NTk4MDMjYBnHAAAAEnRFWHRUaHVtYjo6 +U2l6ZQAxNjJLQkKsx3PXAAAAInRFWHRUaHVtYjo6VVJJAC90bXAvL29yaWdpbmFsL3pZbXJ3WzBd +BDm3KQAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/e5778b659d144e38ed982c3f4e566089?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC +bUlEQVRYha1Xy5KiMBQ9CYEA2tILS3fz/981m5nqsmqaboVAApkFDfLIA8Wz8nKRnPs4RyRaaw0H +fucX43UeMGQ8xUfxNblGCUWp6uHar+zoejyYM+s4OA6jRS7jKSilKK+14Ztm0EcOPqUHBDQAIcSY +j8MIUcCQsCU5G7wdmFd8Kb9RyAoJi3DgyXBfxtP75zhd3QUvAUqoseJWt9DQA8mbrHApv3/iEAmL +JrvwNIFS1ShVPVTMgxBvUTzZgX72N1kBAN6iePUurF7CMZFxR/rZA0DCIrS6ncQvI2AicuDJYvat +biexl4BP5z4ij8DkE4sOuHS+FSafGHzAp3MAOPAE7462uvI2n2Brdd49fDfEn6IwHG7P23yCrdE5 +ANDRPQTL+115l0+wNTofV0RA8E/cFgRceZdPDEto07npEBtMeZ9PLFQw78hW+HyCnXcZOAsBALJR +aLWexFtBCMHHNYdopDFP81Hb8qrEPN4KzkKc9hnOuwxxEC4JiEaiUhKyUShkhXk8xhYfIISAUoLT +LgMfEWEAkIsClN7fTebx/eGP+0DdKHxVBQrZ6f6YHhDvMwglkYuiIyAaiXOc4Zi+Aehm/+f6OW3V +kz6gtUbbLl87KSGghNxVkIsCp33WfTbM/lkf6Heg+qm4bhRyUQw/SAOBfvaUkMXs54fY4Mr3O/B3 +1tmJD5hmvxXzHVgQ8/0vqJR0+kSrNXJRWHXu+1/gLdfnEz6d++AlsNYn+hk/SmTVO6HLJ0w6H2/9 +SwiIRuJk8QmbzvuOvIQA0FUdG3zCpHPX1j9NoGokhJIILD5h0/nLCABdF4KZTzxa8Rz/ATA0zEwG +Af5cAAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/f8d2ed5520f9253f29e3d455c2e8f4c3?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB +hklEQVRYhe1XMU7DQBAcOydTxdRBCjVIQUhxAe+gSkcTPhA+kBfkAUCRdOQNfOAoSAFIKF2kCFBe +EQpkfLf23p4tYwmUqXJZn2ec3Rlfgqk+2oJBrzPE6+ed9d0g0dhT+9wWzB6PrXW/O8JiPWGvD13k +yeE1u9EXJwdX6HdH5QTURe4jIiegbnJJhJLIB4m21vdP506ii9MHRKrNigBgzcSPAO7JXQNXhEi1 +nXuoiNBF/lsw26GaJjdFAEBAc4D6nPq6LC7P3qw1vR+bA02hlIBeZ+gMFaleBCVfkt3cnBUar1Kd +FeDr80jF2edW7F2nPac5oXx9nj5R1IqhV+PS9UyonRPeLTBJqtaL8LdcsBPwP3NA8mmaC1VzQMqZ +3C/Avc+r5oCUM7scCJ7fb7bp4cAH0vlA+t9gYrmZI1ysJ3j5uPUWUBeWmzn0avzdgqZFpOSAMQNN +iTDJAeKCdIrNmZBygoL63DwTUvKcAE6ECencz6GIHGBsWHc7OHLAEURVQqUsOQB8AXDzt1wT6LCT +AAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/46e25d1ddc623e371bd5636936be2843?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD +AUlEQVRYhe1XO2/TUBT+7Fw/krS2m0BaIRpScB8BCfEoYmWkDGkl2BiQ4B8AA2PFzsTMxMLC0BYJ +RpYigZqyUUQTiUdFmkolCUUmJFXN4Pr62nGu0wiJpWfyzXfv+c49r9wjFB9X7a33v+HK5QfDGBpX +6frVnS/0e2xGg5QQ8el5HWEShl99ciJ0789vLZQW6iBmwQBrQGmhgUv31Y4DYzMaJm8M0XXQiCic +JS4v1lFddTiJlpWROR+nRmyvNVFbb/q84Cr/+noHu9YeTl7TfSRROADsbLRQWmygWrR8BhEA4HmB +Vf7h6Q+6xyVpW3tcvBuxzwCeF6SECADYtfboofb+N9nHePjyfAWwO4lTUyrG53THAJ4XXDf2euNu +OCWeVGDOGkhNqp4HeF4A0GFEUHkUDgBDEw5xesqf4IRdhHkhSEISYujNuuGGqWB8Tkc6H+84AwDC +y9ufaYTC6vjMrRS0rAw9p/gO7my0sL3WREwRuPjHZzX6W5h+woJhdaznFLx5WMHRs3GYBR0iEVBe +amCzaGH6bgbyQIyLR+knLBhWx1pWRuackxsDxyRISRGbKxYMU8GR045bo3CefhJV54CTG8kRybuB +DWg5uSc8Sr/YS52LRICU9GqeJETEJIGueXiUfhJV59krgyi/qKPy1gJsL8vTeZV2Sx4epZ+4sWA3 +se769b2NyjsnplpORkwSkM6rtE9IyRgXj9LvK8OJ60ZHHedvppAcITShXKmtN1Fb/4OYKnJxtuTC +9PsaUZuJkysi8eLIComLECUhEo/Sf9gHDvvAYR/4731AsG075MXm/J+XlxrYXPEek/3MBewrC+ic +O3yNyEdctHyPyX7nAnOWP3dQA7oRs8r7mQu0URnDF+J0EAnOHYRHHFTez1wAAKcKBjUg6AVxeb7i +xDlAbpgKpu9lIuu4lz6ijcoYvpigOFshJIzYnNVpVq882jrQjcP6CACYBd03HbleoDkQJGblX8wF +g8cdL7hGuF4gPOIwIw46F7BiFnRUV71wlxYa+AtT0TbBc1dzzAAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/RIZKi.png?s=32&g=1 + +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 +YOdzCBR5W7Myf46B0QN8+oufMXlgmNkvPcv8wgKN+i2C8DDzmQxJHGFbCqnytJub1Lsx9VqVqekp +2q0WSdChs7PO2MQUgyP76bWbbG3ewbMll9eWcXNFeq0muUIZFUkI2y0cEjKuIvFyZC1Nmne4cukc +t+av0z96D+6BGYrFLOvLS5z/8BTD4/tw82Usx2ViYi/Dh/ezuvAFIyPjBORZ9XvEKzfZXLuNVDZH +TzzC6tItWlGPk7MPcuPqRRa++AQV+R0MEiyDDVi2xO82yRXLzM5+lZ31y8S9XT4/u4HfaXHg3gdY +W73B2s3zjO2fZd/RBzj9kx9x4MgR6tUqn/36NPlyP65ls1XdQOYdmm2f1tZN3Hw/R2ZmiDfWyNtZ +JvcdQ9lESMfDsTNkMlmmB/rZre6QkBK0N9k3Nk0rijDxLp+f/V9m7jnG3ul7qN9ZxG9ts3b9LMVy +hduL8xijGRzdw8j4JM3dGrVeA9vzmNl7kLXLZwmDOknwIH7YZHu9Qb7Sz/8BmOytRbMEA5wAAAAl +dEVYdGRhdGU6Y3JlYXRlADIwMTUtMDgtMTVUMjI6NDQ6MDgtMDQ6MDCXejvsAAAAJXRFWHRkYXRl +Om1vZGlmeQAyMDE1LTA4LTE1VDIyOjQ0OjA4LTA0OjAw5ieDUAAAAE10RVh0c29mdHdhcmUASW1h +Z2VNYWdpY2sgNi41LjQtNyAyMDEyLTA1LTA5IFExNiBPcGVuTVAgaHR0cDovL3d3dy5pbWFnZW1h +Z2ljay5vcmen81WCAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRU +aHVtYjo6SW1hZ2U6OmhlaWdodAAyMzL3qSRWAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADI0 +NfogdL8AAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6 +TVRpbWUAMTQzOTY5MzA0OJSldmEAAAARdEVYdFRodW1iOjpTaXplADEyNGtiUeUIwAAAACp0RVh0 +VGh1bWI6OlVSSQBmaWxlOi8vLy90bXAvL29yaWdpbmFsL1JJWktpWzBdQnv1CAAAAABJRU5ErkJg +gg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/bqaZL.png?s=32&g=1 + +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 +OwJtzTWuNNUjSKUIgsDQ0DA6O63kXr1C+LAI2tosaPv1e/IrI4DQTTV37ixW5/3Oinc+YYBnXwrL +dKxcu+FhE4YE+JN68CQnMjLI/uUUcSPH09BQRVz8KNqlMq5dvYKABY1GS6fVSubpDM5lZ6PT6YiK +ju76NbBaEbptVyqV5OZeJTAouIfn001fkltQiFFXy7JnolF0X07/C8XAYYxh8grPAAAAJXRFWHRk +YXRlOmNyZWF0ZQAyMDE1LTA4LTE2VDAzOjEzOjU2LTA0OjAwCR5QNAAAACV0RVh0ZGF0ZTptb2Rp +ZnkAMjAxNS0wOC0xNlQwMzoxMzo1Ni0wNDowMHhD6IgAAABNdEVYdHNvZnR3YXJlAEltYWdlTWFn +aWNrIDYuNS40LTcgMjAxMi0wNS0wOSBRMTYgT3Blbk1QIGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2su +b3Jnp/NVggAAABh0RVh0VGh1bWI6OkRvY3VtZW50OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6 +OkltYWdlOjpoZWlnaHQAMjAwMooWuQAAABd0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAxMDDsYPtt +AAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1l +ADE0Mzk3MDkyMzaWKUh/AAAAEnRFWHRUaHVtYjo6U2l6ZQAyMS4ya2KmtNmyAAAAKnRFWHRUaHVt +Yjo6VVJJAGZpbGU6Ly8vL3RtcC8vb3JpZ2luYWwvYnFhWkxbMF3461sQAAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/hWLqr.png + +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 +myDqGFYAAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/Eql0u.png + +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 +SUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/a037f3b7dd948d0a0acca0fa1723a8d1?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +E0lEQVRYhbVXX2xTVRz+7rVZ0bCtxmtXJY5pMsODnbuKBaFzRFTsNsxA3kzUYjRREwjqxqMmvow7 +Z1CciTFtnc+Ik64bjBhLO+Y6WW/XRTELzg5wbQli3fYAM97jQ7n/es9di+2+p+Z3zunv+37n9517 +DkMIIaAglsxCCIiInF9QYi6nHZxtHYajl5TYUH87BL+IyNQC7W/gctoxOXMVANC4sRbRr/fiDpZR +xlla4hcPnULH2yFdcgDo9vLo8vJgNLEtTXX45ujzGOpvx1OP328g0L2fV36/+0qzLjmVQG7pJv5e +uklV0vrEBjzSeA88LfWGcTMirZs3wOW0o3FjLTp3PmRYB0KBJEnk1Ng82fnaIOHcPsK5fSQ8eUUZ +n5m9Ru69FTfDxHSG7D04QgghJPzTFXJ89CJ1Htv+1hDOnv9DR4phGOzaXo8zX76gUy/DrApa1Kyv +gq2mSqnCnmdU9bFkFqHIPADAMjlzFfsOnYbLaUf3fh6tm9VEDJPfr24vj0J0eXmMaJpRxoW5v/DR +VyKC4RS07c0y6t4LARF/5m7A01IPixxcXF5BbnEFEiG6yYXqzapglrgQsWRWae6R6CVYNj1ow3uv +8ti9owFsQYeaqZfR5eVLTixDCIjK796ACIZz+5RlNJ+Xi2B/OwR/HNGpNHVcZ0Oaz8vF1qY6nDjq +QfCzNrgfu8+cQDGfl03kUQe+/cSDk8fasJ13GAlo97rSVdDiyWYHBj9tw3fHPNjW7MgT+D8+Lxc1 +66tgq7bmbbiaz0to7NvCzxevozcgYjgyDwLAUsznlXLEL7/lE4ci8zq7Wor5vFwCF+auozeQwNBZ ++jlh2ffOaepCl9O+6iFUKhaX/4H/w6epY7OpnPFz7HLacfzjXQh93kHdmtuF4BdNx/oGEuq3QFZc +iaRaRKYWEEtmsaWpThefTeUw+P0c2EorpoFWhb6BBCQCsLZqK2qrrWuSWIZcBRmyegBgR8cv49nX +T+Klw2eQ+PXampHQVkFWD2iO4rUmIldBqx6A2oRaIqPjl/HctgfQVQEbaiH4RXB3r1PUA7dOwtXu +7WaQXWO1WrC1oMNlzKZyeLjBZoh/8f4OjMXT6PHFwRa7t9MSa10j+OOmc/sGEobYxHQGnQeGsefg +CGLJLNii93aTxDKiU2lMTGcM8wv3WkZuaQWLyytqoNi9ve3NoO5NUAjO7SOdB4YN8Tc++MH03fCv +JJFg+HfS8vIJwgLGe/vEdAahSAoAUMo5MRZP48eEWgWtetq7g2UYdLQ2IBzoVG2ovYr3+OIQ/CIk +iZRszyOaXtD6XH53UImwjNGGY/E0zol5NXIVAKM9mzdxunXnxAzGE2lwtjupe2/27jAQ6PGpSnoD +xi5e7Zw44hPh4O7S+bzYu+M/VPutFZowS2wAAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/wuiuT.jpg?s=32&g=1 + +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 +cZ9V4//Z + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/f2accc1acaedc5dc2b50c3174daad3ce?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC +7ElEQVRYha1XTUsbQRh+Ntl8sRYVpfYDA9aCNIonT+JBEKQQ0kv/RHvtzUM/6J/o2Z/QU6sRWqp4 +8lhoE2ysHkRsVq1xN8HZ2ekhnTA7mZ3Z1jy35FnmeWfmfZ95X4sxxiDglftR/Iml/BRWnRmosN1u +oB0S7HQOlPxCbhJPhmaVHEdKywLY6Rxg06spxat+HavODJbyU0rxilMyLW8OQBUEF+eQg+DilmUZ +17aTBMCDAIBCKhMRF4MAgA4LEov/UwB8cYTxfCGVAUJExOWc+u8A5GOVE091LUmQKAdkcfnOZfG4 +xFXBeAJxCcV3KIuLQSSBtXH1nenq3KU+ToJLHNPLCHc7PYQHmTFcM6rlbaS0PpGeelF+QxjFdHa8 +T7zq18HA8Gx4EfftYbjUQyGVQdkpoew8wm7nJ86or+Wf3poHYRRHwUWfeMUpda+AR6g61hPawjdy +ilJ2Aqf0Cu2QYC53B4fkHA3iAoCR5+tyHfFaezmgq/PP/j6a1MOW8L945CZeDEL2iUgSxtV5gBCd +kES+CxhNzHOofKIXgK7OlwvTmM/di+ygQVyst/YS8UC8T9gqcfHOxtMO5rJ3cUjOcUwvETCKBnEx +nR1H0R6Bz4iWV4mLOWe9b31lcd696dVwzSiaoddLKI6iPYKiPWrk494OoPvU23nLxuuzDeUHC7lJ +hGCR++XosAABwr77l/l2SPB27LFy/e12A7ZcIqJ4xSnh3e9dPB9eRJ38wid/HwFCLBceYjY7gfXW +HvzwWsvLpSiKV/16Nwd0dToIH9D5TK8KdO/5IHwgzmciPqCqU2BwPqDymV4Auvd8ED4Q5zO2Sly8 +s5v6wFFwofUZ64v/g+nq9KY+oOsRN70arJfND6yPkYLQved5y9bODfLm1kZXurn2F8aWzNT3m+YG +ExL1hKa+3zQ36JC4Kzb1/aa5ITaAtdGVxB/H+QSHaW5QBiAmhA6mvt80N8QhUQ6Y+n7T3KCDMQdM +fb9pbjCdxB+gTL6//UfAzAAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/d74c57518a230b1be8416342e17be259?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD +r0lEQVRYha1XXUhTYRh+jrMfIiUrCpTKdK6L5ooc1CybC1SoWRdB4kW1MFhqhcx+tMiki+xi/mRF +2UVaUF1E5HQSW1SzLLvoR+eK0s1W2CIvEktSsTpdzJ2/nT+3HjgX53u+8z4vz3fe7/0+Qh9nISEC +149a3vHBd19x49wD/P79B112DzV+wXEQ6bqV1Ht2fLlYeMSIsgLC1XtuoEhnhau1F6aKXICg+ZYa +x4ziyU6AK0xO+6bUJGHTNjU175VrAH3dH/9fAkLCTETjgmQCQsLqDcmw2swAonNBMgEh4YvOQ9Aa +VNR4pC7Eypo1LWyqzGOJMhFyIVQRcl2QTEBKmAlTRS66OjzAtGuyXCAF4HsbIE/vvs4au1n3kLxy +ql3oE17+ZOE1Uh9noR7380EWH+ZAaIPptLF/vFv1j3D1dAf1bj5jZH0nxPO5Utt2gJpH/YRi5cYN +frvhMZqq7LJ4qQpR7Nllrj5ffg+NR+/B//5b2BLNnjuLFTwEzws/Jsen0N8zJMprDSosT1uCtuZu +ihseGkFeoTbogFSd/xz5FRY8hLHRCUkeEHdBsWK2rporfOxSAfZXbUXiykXQGlSYHJ+C54WfFTx/ +nw6W+p3QblklyhNEcHMQckGRPCeYAFeYCW4SVPAYQhYPAAuXxsPbF8Dn/mEAwFf/d2Rkq0CU5jSS +cuu8qcqOsdGJsOByea/7C/Zn1VEVsU6fhtgFi+fjyI4mahK3nzMRlzAPAHiDy+GVmiS4RoPnC29f +AC01DsRK1WkIke4DXPg8AbTUOPHU3geQgKLxcm0139osXZYgGJxZYnJ4APC9DaDBchcXj7fi04dh +apwgSZLkrk1GdhrlAjc4E4VlBsQlzBPlcwoycP2cE0/a3LxniRhAvE6j3QeKMq3otIWLr9Mr0ego +pbdioX5uPmNEYZkhLHio1KR4rvDarFScv1+CuvZiaHQpdAJiLnBFuHUuxQOAJjMF9fZiNHSUYM3G +VDojZmsc6B0i9fF067TkX2a1ziun2knr4Tvk3z9/edsxH38w5wL58nG/YAsnpO4Fm4xqzrm/FOm6 +FLFPANBt3dXaKzpP8kxoqsxj/RvNZ52Swsy2LgXJBJTpicgyplPvrzsH4H4+KCnMV3IRJQAApspc +ECwX6LNepMIzSiBVnYisfNqFN0+86H3mAyDv3hB1AgCwV8AFufcGIci+F6SuTsTm7Rp02twAgJ6n +PvR0+VjCctt6RAkAwN6KXNae3nzWAfX6ZJhOzFw4hH8T2gR3p3AIGAAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/72UbV.png?s=32&g=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJN +AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElN +RQfhDAcTFQkZ4vSmAAAEEElEQVRIx33Ve0zWZRQH8M+rP0TFS17ACsXLq1kNzKGViYaYl7IVXspm +lk1LZ1tWK7C0mxYLMa+1mqbmXPfSwmKozZxZTsV7FoXTGYNMK6WZU4HA/vDNeMF6/nvOc77fc55z +nud8g/PnNVjVCnymSLlTaKWjfm4zQvOGroL6hkNyfORsHcspxYqt1VmKJ/T6f4KZchvESHGzjcpc +rpuZwhZqdGmCUhmOgC7SJOorsFul2QYqdU6hjV7URYq1ujck2CwDAzwpUyhC2NgoMMVpWajytFzL +pSiUEU3wowyDrJLkgEcV+ClyHKuVbNn40E4ww2E5BiuX+C9BtXHypcsxH5cbbaQbtHbaL7bKkmen +In3sARWe9IK0SJAAXvWUQiO1MMck8Tghz6fKXaalGMd0c8hGbbVzTGCDq+0208sXCH521Ewhn0Ru +zBorpVqmp6aqtLPZCNeokmeU/fpGvHJN1EPAAguMsfpiXWsNMUaJFxUrc0ay55zRRqa1Kk2V5WtH +/IocqwRnLDDNq3U620hrdJLsPbDTnYbapZ9v9TLBNnd5VyPnrbFM8K67o+B/mOeQFeLM0NcwhI3X +3gmLrdZLquO2m6rUBnsUCKq9E/XuilX7zlYJehtqpHxl8kw0TaLNaC3dSTNUgALBGE2iCI6K8ZFm +ejqtiZHyVWGJ/kZHHs08Cy56FzX8TMukqrBftf2u1zvS60Z26249dtSBUyb4TYc6hh8UmWSrJea4 +HiXgL9M9Y6Fahc5EhTsVnUG1B1wprMQRbSMpXljJjvtFihH61//O7etsYlQ6Kew9edLAfpBprHs1 +lu5r26LgrQU1dbZv+BYfO6iZa0GnyJCJ9bkbNLWoXvywoEZtZEDM8hKo0VK2oa7GRCvxvXEyTfa2 +0noEdwlCTvvdFpt0Mtw6NNFRc9MMNNVAiz2GD9yot8O2R8EHmy6Ic1KVZGH5koQdtl2uyda5UJ1H +9ZFthx1R3YIsryBo66hkHDDMPveZbbm5nhXvTQ8JIc1Sj9skJKQ2Au7oA2lKJQmI85t4KVIMN0BP +V+inRAf3mCJJhbPaGuR1RVaBeNNlYZb7hQR0tVe8vQosVKFEohYmectYe9RoqbM/fSFXceTWw5Fv +rmzhfyZSWLkTnneTfAl4zTQhK6Qqt9Imu7VwsznuAOs9Is58Q/4daa1UGeA6PSSAR5SZ60ur9Jfl +uYtl22KJ9/GaB52Lnsrt/WqRDA/rB16yzxGDNNZDb7V2OuYsrvKmyapValNfFxLEW+pBc92OkALf +GGyCn2wUp5dM6dK1QblY8ZdSppApwubbZbzu1nvbGqPr9b5ChQQt/lsbb5HqG18551a31rGfV+Oc +41rqEqWMl1DnNu5Q6WcHNRXjdyQI1ArE6loPDH8D+9I+aFvjLN4AAAAldEVYdGRhdGU6Y3JlYXRl +ADIwMTctMTItMDdUMTQ6MjE6MDktMDU6MDBtjauuAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTEy +LTA3VDE0OjIxOjA5LTA1OjAwHNATEgAAAE10RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi44Ljkt +OSBRMTYgeDg2XzY0IDIwMTctMDUtMjYgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcpoK4TAAAA +GHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGXRFWHRUaHVtYjo6SW1hZ2U6Okhl +aWdodAAxMjgwGSAgQAAAABh0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAxMjgwDGn8WQAAABl0RVh0 +VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNTEyNjc0 +NDY5oyNNtQAAABJ0RVh0VGh1bWI6OlNpemUAMjQ1S0JCzURqoAAAACJ0RVh0VGh1bWI6OlVSSQAv +dG1wLy9vcmlnaW5hbC83MlViVlswXa9XohMAAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://graph.facebook.com/852873768142712/picture?type=large + +/9j/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAIAcAmcAFFFF +aWNVY25Fb094elh5bnpuZjVzHAIoAGJGQk1EMDEwMDBhYzMwMzAwMDBkMTA2MDAwMDVkMGIwMDAw +MmUwYzAwMDAwZTBkMDAwMGU4MTEwMDAwZmIxODAwMDBhYTE5MDAwMGFlMWEwMDAwYmYxYjAwMDA3 +ZTI3MDAwMP/iAhxJQ0NfUFJPRklMRQABAQAAAgxsY21zAhAAAG1udHJSR0IgWFlaIAfcAAEAGQAD +ACkAOWFjc3BBUFBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtbGNtcwAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmRlc2MAAAD8AAAAXmNw +cnQAAAFcAAAAC3d0cHQAAAFoAAAAFGJrcHQAAAF8AAAAFHJYWVoAAAGQAAAAFGdYWVoAAAGkAAAA +FGJYWVoAAAG4AAAAFHJUUkMAAAHMAAAAQGdUUkMAAAHMAAAAQGJUUkMAAAHMAAAAQGRlc2MAAAAA +AAAAA2MyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAARkIAAFhZWiAAAAAAAAD21gAB +AAAAANMtWFlaIAAAAAAAAAMWAAADMwAAAqRYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABi +mQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9jdXJ2AAAAAAAAABoAAADLAckDYwWSCGsL9hA/ +FVEbNCHxKZAyGDuSRgVRd13ta3B6BYmxmnysab9908PpMP///9sAQwAGBAUGBQQGBgUGBwcGCAoQ +CgoJCQoUDg8MEBcUGBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcK +CAoTCgoTKBoWGigoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo +KCgo/8IAEQgAyADIAwAiAAERAQIRAf/EABwAAAEFAQEBAAAAAAAAAAAAAAUBAgMEBgAHCP/EABoB +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 +toqO2FUeYKFix8IKS0NiheT6n//Z + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/6178b59305359920a922edd061a55e7a?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC +YElEQVRYhe2Xz2sTQRTHv7vMJGwSWir1B5SGJnZpKRY8KfSiVCFRTC7Wmzc96K3FP8Gr0H/Aozfr +pa2WFOpBehBEgla0dm1FFGJE60HbHHIYL53tbDLzZhvbW76nnf0Mb2Ye7z3ec249nRbYUzE/iTRP +4cnHRfkLD6/O4n90+9kMyZl6+NRoKQTqJY5SrvxI81T40+OedvPS5grm1heMxky8mJ/E9ZFr2nXo +Aflij3t49O6x1rjqFdVbFG/17E5zN7JmULTT3DW+TmWNZgNCCDiOY+WUZz3uxY8ByRrNBm6euRE5 +nOImz8p1eIE4MTA1Wmp7eRze+hh1HTsGpEyHx+Vt+4UQgtrw4utLZHsGMNQ7GPn/7U8N6z83kGBJ +kl/OXSAvwEgKYKh3EPdXH2D8xBjKfhHMZVgMKnj9/Q1mzt1BJpEhuU2RCyxtrrSlSbZnAGdPjqNa +X8PbH+/hABAAhvtyGOsfAQArp+wzFZryvOQXUK2vAXvGAaDsF2Jzyn5YCXV5LMVdBgfR4OIuj80p ++6EHqDxfCJYhEI3V+aCCe+fvxuKU/UgM6PK49reOV7UqhvtyKPsFcJdjPqjgw68NBNtbyCTSJPeP +5Un71jR8/mUVp9LH2wIq2N7Cp9+fkWRJkl85fYkyvx8DJjGXIaVUSSmPe+Aus3KrfduGbh0AunWg +WweOtg446lyg02HOBbq5w14pDkmmntOV0NS3q+p0LgDMPSez9e2q8U7mAilTz8lsfbt6MamDzAWq +dHMHs/XtF7MTkRcddC6QMsUAUxetsFWdzgUAEQNaS4Q6nQtMnv4Hf6ofvCYZt6sAAAAASUVORK5C +YII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/wlSqQ.png?s=32&g=1 + +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 +y0jXwdU0kF5ux/S8UUvIueT/Ms98H9ce0ygAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTAtMDdU +MDY6MzE6MDMtMDQ6MDAXeNcJAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE1LTEwLTA3VDA2OjMxOjAz +LTA0OjAwZiVvtQAAAE10RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi41LjQtNyAyMDEyLTA1LTA5 +IFExNiBPcGVuTVAgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmen81WCAAAAGHRFWHRUaHVtYjo6 +RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OmhlaWdodAA4OTTpsuw/ +AAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADg5NDUev7IAAAAZdEVYdFRodW1iOjpNaW1ldHlw +ZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTQ0NDIxMzg2M/+h/d0AAAARdEVY +dFRodW1iOjpTaXplADU2M2tiLkgv0gAAACp0RVh0VGh1bWI6OlVSSQBmaWxlOi8vLy90bXAvL29y +aWdpbmFsL3dsU3FRWzBdl2muoAAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://lh3.googleusercontent.com/-tFRIV7rG-M4/AAAAAAAAAAI/AAAAAAAAAHw/kUupZIXcBpI/photo.jpg?sz=32 + +/9j/4AAQSkZJRgABAQAAAQABAAD/4QAqRXhpZgAASUkqAAgAAAABADEBAgAHAAAAGgAAAAAAAABH +b29nbGUAAP/bAIQAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQ +FhARExQVFRUMDxcYFhQYEhQVFAEDBAQGBQYKBgYKDQ0IDQ0ODggNDQgNDRANDQ0NDQ0NDQ0NDQ0N +DQ0NDQ0NDQ0IDQ0NDQ0NDQ0NDQ0IDQ0NDQ0J/8AAEQgAIAAgAwERAAIRAQMRAf/EABkAAAIDAQAA +AAAAAAAAAAAAAAYHBAUIAf/EAC0QAAICAQMDAwIFBQAAAAAAAAECAwQFBgcRABIhCBMiCTEyQWGB +oRQVQlFS/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABkRAQEBAQEBAAAAAAAAAAAAAAABMQIR +If/aAAwDAQACEQMRAD8ANfp7aYrZb0k0LUkUbyDP30JZQT+IdHGTyK7drbR8xrCWliGgwfdODezk +59qCAuQIYuQOWklkKqoBU8B/mpChysz7y7Lbp+nfVmJ1TazuV11p024YGNaaRXnBZVFaWH5KPc8I +pAPy7fAPA6Bj+tPbyzoTZSnJaqNU/uFqpNHHIFDxkgl43CkgMp8HtZh5B58+LGesOT6fOuNPaV9H +Ctmc1QxiwZ268v8AU2FQxq8qBWYc8qp/6Pj9eo1MEu825elaudq4fI4mlnsfPZUOqzoGaYMo7u0k +cqjeyGckDggfI8BgRO93qB1BtpqGnj8lnaeo6j2mu10oQqJ6qKpdEcqO0cOFVe7k8/ItwCOilLvb +rapvNszndY5/MNl9XUbuOo42HzElOkQBMRGD2l3l7izcD/DgDkdWMdY5sDVzVjaGMUMbDPXNycCz +78yP3cjkELE6Ecc+ORzz548HpTnE7V1DPT3Vrixl8ZnFjhAEFkiG6/YzqjIADJIiJyx+wUqeT1Gg +Zi9opsvkpHiy16bN2faQVpYhZZ5GRTwCSCVLN4/15HQUu7Hpv3E2d0xayuoIaK4GezHEHr2C797E +lAV7eB+vk/v1YnWDXYDWVPT+3NCrPhMXctNkJnhnyk4qtIARyIZZeYTwfxL4bzz56VOcMHK6wxeA +nmyt25jrOSnDR1qOOlR4qcR57uGXx3Hk88D8/wAuo0HfSPmJNe+qWlpipl44Y4MfJJXtvXMnuvBG +eU7Cw+6u7E8/dR9+Oi+NEfUX0tlsL6b5prVmvZqjL0lLIjI5JZuPieR/PVjPU+P/2Q== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/b8ed75b474f7bc5dcf6dfb8c778d17a2?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD +BElEQVRYhb1XTUwTQRh9W7YQhRIk0ZhoQ0ywamKCaORqPHuxJw8E4kFuePMHIicvclWKJhQO9CSa +tJDQI6InYwuiQQRqY5TG6EECcXebdms6HtoZdmZ3tk3a+k68WXbf9715M51RJp7/IcM3fJChb/CX +43jPaS+Ggm14uZTFm9U8G79yqYXjichx9vfsoo7JFzrjwauHoEbiBgDArQgn4b7zLQCADp+HExy6 +3sZxN/GRm+1QAUAsYnZRh2YQrihRmCLQ5eW6FjmFZhCbuKIopQKsRfhaFa5SmbAVYtdOLtBmtGyR +iQOAOnitlYlr2SIAD3spEjfgO6xgNLRvE+0JNGMo2IZzp7xVu+BrVQB4mDgAqLLKDooi3EdkjlRy +QcwA1VUpIYQwcfqQFuEmTEG7duKiuJYtMj2FEEJsXysjNKfhY8qsmAGK1PcCAl1ejr9dzzumnzar +XB746VhANeGrBncf77nuE6r4Qr2EKSplgxVQb2GKSitEbZSwFW4uqF9//K24zmuFmwtqteu8Vshc +aHgGKKT7xK2Hv8m79Rz5H9j+Ztq4sradJxcCzayydKaAbn/t814JqZ0CwjEdnnBM5x7MLBiSV+qD +LzsF3Huyh4Gx3VIGkhsmPqRMUBcSn/IcrxfSmVLHr1fysMbeAwCiCyKvVXhkYg/9D3axLIgD5Z1Q +dEHktaDb78X47SO2cZYBOtBIF6ywZYA+oF2LvF5ZkGWA+zV0cmHyfmfNwtPzOpaT9vkHAFU8tyc3 +Dlw4eazJ5kK1+0Q6U8DMgoETR5scM0DBMiA7t4ejvCvT8+7ZSGcKGA3to39sF0uJHCJxA6E5Tfr/ +bApk5/bkZxNr2yZ6zxysECsXO36VzEE85LndO1gBstMxAISjOp6OdjpyN2GnIsR7BxdCp3M7AKxs +mljbMtF7ttnGu/1ePBrusAlaM+B272AFyM7tFFMxHc8sLohcFKaO0JDL7h2qk7j13E6xumni/ZZp +4xfLrrhNhdu9Q5WlX5wGAJiKajZ+Z6C9qgyI36NF/ANehq4us1AJ+QAAAABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/71a43ee15bbb5a512cf554b430416e33?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +IElEQVRYha1XXUwUVxT+ZneCm4i1aRBiXF3AsLAISBWypjuwuxF8sNA3I/viygM+kEZiYhONxvBq +NPGxD2i7S9JS+tRGEhM1LpXZhkaky4/SYPiZda0Uf5BIzWxiQh+WO9y5c2dmY/3ezpw757v3u+ec +e69w+VJ4HRvwSx3Y4tqG+3f7YIei4lJ8ETwBh1OE1ydp33+4cRrP0tOa3dzSpYvH2iJNHmw9pTnM +JkGIK/c1QxAciH3bhYqqAARBAAAEQlH83P+NNv5QU0QXj7VFHjk7iEdMsLw0hyd/JTUVSvcexK49 +NToVrCYhsuTsT48n73CJafw+HLdUgY7H2mJqbAipsSHklIjA5SrEb9TKT5/7hUucUaaQHI7nrQIA +uFyFBtuRVdeQVddQ39CGQ00R1De2wy9FQL6z5BllCoPxs/jxux4o8+M6FdbXtXxGIBTV/Zd6cBO3 +h64Z7LxzgKyYJqVhpoIVOQA4L14438vLAbenFk6xAABw69crkO99j9WV51xygtcv09jf0K7lwifb +i7E491BHvrXwM50t0H2ABsn6qpqQ9m10ZABZ9S03ac38szOyZZ8QwcCs3EZHBnRbwk7CzG9XIdoE +zIh5wf+Qf9KRWPntKkS0IuYFZ0nMWjfx26ng6Oy+jqqakGm5ZdW3huAEqrpm6wc2K4SArhCHXZ0H +W0/BL3UYgu9vaMORtjO2floFXp/QcsCqzsleE1lJcCKpnZ9Wgc0F0a7BsJNQ1TVD8Hz8RAU2F8R3 +71ZxPHpVG8TWKY0trm0AwA2ej395aQ5Xeg8DAHaU7EUgfAJiPicZ8OF9gMWOknIEQlFU+CQIggAx +n5Ps//QBgqLiMgTCUXh9kq7inK3Bsl5eD380cSc3QCzg1vmz9DTev89i6e9ZS39W/RetX/ag5ejX +KCouNWyPCFif5/nUuZW/s7uP2+CU+XHIidhmGZrlAltiBGyp2fkJ0gspyIkYMsrkpgJWKgAfpw88 +XZyAnIjh6eKEbkK605CnAsGH9oGMMgU5EUN64U/wILDvgtTYELIbe+uXOrDT7YPX16T9YNUnaJBD +7s3Kc8OFlCD14Ca07GCvZcROJvr1PTysv+vxiL86dgnkkLt/tw+jIwNcctM7IW2/+GcOT2ZkeKtz +KpSWH4R7Ty0y6SnuinnHOvseoO+EhneBX4oYJEsOx1HhC2iBA+EoBuNnbYl5k3C5CnV3QpH0bwL2 +7p5TYR6zMzIqq5sBAJ7yA3B76pBRJtHZfd3y3dDc0mVYUH1ju6aE07v7da9TLIDbUwsAGNw4B4hN +Hh+vXiiob6S65acleJS6DSl80kBM36KV+XHQ8Ql0OWD2cKRn/nJ5AbOPR1C5L5hToexz7PbUGVbM +O9Ytc4AdZGbn1OiHt7qJyoWTyKSnkUzEbO8TZjnwHzqGvjpli6AIAAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/zdc7Z.png?s=32&g=1 + +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 +iZlvFBk5eKafR4+0op0gp2UWHbNSVGSkqmi1uXB9gZye73YSCsts+PIs9m0q+P/I6Q1vbFthYdsK +C50T9LzRPkRPcwCdejzuk/Q8Tc8j5QV3RM//C0Gei+70UCBPAAAAJXRFWHRkYXRlOmNyZWF0ZQAy +MDE4LTA3LTE5VDA4OjE0OjE4LTA0OjAw58GhfQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOC0wNy0x +OVQwODoxNDoxOC0wNDowMJacGcEAAABNdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC45LTkg +UTE2IHg4Nl82NCAyMDE3LTA1LTI2IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnKaCuEwAAABh0 +RVh0VGh1bWI6OkRvY3VtZW50OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6OkltYWdlOjpIZWln +aHQANjI1OIIruAAAABd0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAA2MjWrc3vlAAAAGXRFWHRUaHVt +Yjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADE1MzIwMDI0NTj8 +PklMAAAAE3RFWHRUaHVtYjo6U2l6ZQAyMi4xS0JCVvEWSgAAACJ0RVh0VGh1bWI6OlVSSQAvdG1w +Ly9vcmlnaW5hbC96ZGM3WlswXTXMshEAAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/Cz1dL.jpg?s=32&g=1 + +/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG +BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM +DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIA +AhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAACAkFBgcE/8QAKRAAAgIBBAICAQQDAQAAAAAAAQID +BAUGBxESCCEAIjEJExQjFRcyQf/EABcBAAMBAAAAAAAAAAAAAAAAAAYHCAT/xAAoEQACAgECBQQC +AwAAAAAAAAABAgMRBCExAAUGEkEHEyJhMlEVQpH/2gAMAwEAAhEDEQA/ACr8w9N6bi8MtyqNvUlf +F5fMYWiMTXjp/wA9MparTxXY4pUVSRF3rJ2bunHb8nnqQL8E9xaW/W/mN2gxOhp6djE6ubI0Eins +VC1d3/dSeSaJTHZcLH2Vpo+xCdeygsBxJ5nUtntULoueCQYDIyyy4sCRpVpTJ/YYerksqHseo/AJ +IHr5d9tqCbYbsas1/oq7ncBJqjDWI7lTH2mUK1dVsdUYfgGNndVIIBs+h9RwS839D8Pl+JBiYs5/ +MqWO1v8AJbA2+VLWv593iiPdJ9dz5keUFjFpEZQpuyENP2kjWl7pPGkdbnSB/UkwuH0T+pSuO1Fn +s5/ls3icZWxtLG2VZKciIa0tawzSIsMzD7IzM3WMsOBywDUfLPderivD+SKanDMXhxuCrtirZvQP +Zlsw8rHD0BX6wOw/a5ChfTdeSU3aT38j8ndVLdz2OpV9w9JzwsuXWURGxbiSGwkoCgDixGvLRnlf +3Yx+O7fD+0HvONfeGO3+PrgW5cNuZn6zBCsfEWNrXpIuF9deptwkD1wAPQ9fAjr3oL+A5HkTRzl0 +CKmoGzB0B20IdCK+xrfG/kXUiczGL8ApJkBGt3GI3+wQUkUg/sNpVEqI8np67bi6ZvmHH4iDJy3J +f5VecWVnTmL+5ZF4SVB+A/CsSCJPsPhE7O7iWdL6ZgptZs2MXnsIrV7fb7179ZZqQcgDhxJXswqS +Oepjj9H3xScrpr/beAzdjL4ON9XaUmmyErTVTPcnCcJaj4PBeXqpIUkfaPrweePkR4+6myu6tbB6 +UwVR2pyagoL2krF5hDLbiDJEnKhiR+RyPXPv18rnn5x4MaWTIYAXG43AHayVrtViz5r92Bwl+kGy +pM+NcVST7eRGdtmjk7vsHsJrX/KvjIdJ4OSTf+1DjrlqO5qbGULFGWmUsmOUQV3jcMjMeQ8LglyA +AHVgvvhmngZqCXWO2V6SGG7TxNK1m8tBDIv9LPblo1RKh6/ZmSFwxBK8gj0Q3OWae8V9V4bya3L2 +c0RWwtKTAYoWtNy56kLNrT8XCz/xhMn/AEsjSiNX5AHAJHZmHyf8VNy7my+2tTGYnG08rTvVo47c +d+ebmvLHPK0sEbK30AlJPAAAPI6/+/JJ9YessbM5DLiYLAiURlwd1LPI4FglWAKEWpIpiRenDf6L +5H7ZVZg3vIz9u3YUEcaX4ILA6gr/AEUXuOP/2Q== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/2582809e20e2d5f22b658214b798e83b?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB +qklEQVRYhe1XvU4CQRD+FjaHB5W5BBOMD2EPLdZY+gL6SD6BJdRQaq8PYTCB+FPJjxHPguyyN7uz +e3ccHV8F8819M3s3M9kRaZqm8ODl7stHB3F5f6p/z8YrJN0IslXTtprroUNgNl7hbbS07IUSaPcb +6AziwjwXHABkkeDn1039nwpyvC84AMjpcIH5ZO0kk160czS+Wz0WthDD/37/scEBQKqsaRJJL8LF +TRMfTz8AdieqxwKvDwtLiOM5fZ2Ay0kFFyJ7Ut+r9PG+JCR12ixTZ/B9YdaHCfF8++mdAyba/QZk +q8aeNMS7cPAuCCEzB7g+puJnVycZvxDv05cm6ToBtZtBgG2b+XhOR9l1Alwfm3aKrV+ID+jTjGgf +K7s6kcL74zrjF+I5/dxd0BnEOggVz8NzyN0FZSdhZQkAaq7z3zzE75XAcQ5QHOfAcQ4U5TkIuhdM +h4tMsVS9F9Citd6AujZxN5iyoLdjpe8s4flkjenQfo1V7QWmPlsD9AJZ9V6g9L1FuFnuyqPsXpB0 +IyTdyPLXz3FEVXuBb5CxCVS9F/hgpccFPxT+AcCFSWoKbFXpAAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/gAYS0.jpg?s=32&g=1 + +/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG +BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM +DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIA +AhEBAxEB/8QAGgAAAgIDAAAAAAAAAAAAAAAACAkCBwQFBv/EACgQAAIBBAIBBAICAwAAAAAAAAEC +AwQFBhEHEggAEyExCUEUIgoykf/EABYBAQEBAAAAAAAAAAAAAAAAAAYBA//EACsRAAEDAwIDBwUA +AAAAAAAAAAECAxEABCExYQYT8AUSIkGBkcEjMlFxof/aAAwDAQACEQMRAD8AXdjuXy2O3Xe4LbjR +UWPwx04ttO4EokZztGLEBCFYn9f9PrZ13PNvzW50kTw2CWw0XtIIzHJ2jZep7un9WZ2bsf8AYaIC +/I+fUfEfGJOY+dMfs15rI4MbzXJ6WluUDTJA8wMgVz2b6cQq3UnXyxP2PRAecH4v7X4/4dU5Lx/D +XQWm2UoqaykvaNUSOUkJDrMdE/a/r41rWvRxq6t2nAhwZJwet6ZKs7l9pTrRlKRkefUVWXHnMj5H +bKO1w3SzW+KiKzCcW/ZooTodtAhXjLMPknS9dbHyfTZvxa8r1mb4pkNquKTfyaZo6lHeVfblVNRl +4UU9RGweM9l+Dr52R6Qpi3P9ywW3S00sFvqbhK/VZxC3ejQRtGvt6PXa9gQrqyHoAQN+mTf4/PKN +zrPJ69WUGdMfu+PTyRKKX2IhViVZ3UR7ZY1BSbQViBvQGh8KmrlzlrYJJSoHE6R4pHsZ2Jo88AUa +9b/FAxwf4tUWB/kJ47xvkG8RWvEXv6XCpu89S9JFVUESyyf0lUj23lEPsaB7B5Oo+dEtlsPCOFVd +ZeMqs2eTRYVkDTtW4+6LW2y5zEsJeodurU7kltrvThgpA2PVV+F/ihhHlXzAme5dRSXGn4upmW2U +qyKu62oPuRTOro41AsEzoepHuyL+1GsjnC15Jx1Y7jktTjua3ixKZKl7tUwVE9ut9NCTHpJ5ZpF9 +sEheysVYgkH70Q7euFXCULR93dggDEzr64/VLeF3mUIXzYGQQSdcR/PnahuT8d2PZl5R3pLbDQ0u +M1FZTz2egkuApKaKAxu9UHlkZdBCmkUsfhxs/AIuL8RV9s1+8mcnu+KW6rgsvHWU0aV8lNTy/wAa +loaypqLeHlI31DBhOrMSvQSMdDR9cpwxS5Lzjks9eTR2LGwDHXXi6t7dFRwuNMQdFpHCkkRxBn+v +rfYGX4t898W+GWJ1/H2A0tRfLtfmMlfLHbxTVNe8qNGaypiBLBuiGKnpexYCLoW90lZc+H728F19 +SVYA1xEQr3E5/Jq8QN2aLeGAlOSTjOw9JwNgfKa//9k= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/8dfa92044d56ff2a1fe5df317fd19790?s=32&d=identicon&r=PG + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB +HElEQVRYhWMsn/vkPwMU2OvyMHCyMzHsOPMJJsTQkSTNQAmomPcUzsZmPguypKcpP1wCWRE1AC7z +mbBJOujxMniY8NHMchTzt5368B8X2H/xE045YgEh85k42ZlwupyDDbccsYCQ+Uw7znxiOHDpM4bk +iRtfGTYc+0CxAwiZz4RNEbUsx+UIZPNZkBUxMECChZqWEzKf8f////9xaWJgIJyPkQE55QgLXlk0 +w/GVE+SWI0Qlc0LlBEXlCKX5mNJyhGAUUFJOEFOOEHQALC4d9HhRxNGzKi55Cw1uvOYTlQYIlROU +lCNE5wJC5QS55QjRDmBgYGD4/vMfRfIUOWC0HBgtB0bLAVqVA4yj/QJskqP9AhgY7RdQCwzqfgEA +ROcImd/ZnAwAAAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/7e0f387381ec6bd2ede5472a04c769c7?s=32&d=identicon&r=PG + +/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg +SlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwK +DAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQU +FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAIAAg +AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF +BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkq +NDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqi +o6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/E +AB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMR +BAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVG +R0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKz +tLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A ++QbXWrP4h+Pri7uLuS9Vk891uVAZ34G0gHBx7fkOle4/Br9nXwV8XfEt/a+Iw2laTpumzahNcWSq +mAmB8xyMD5t3GCduO9dtbaNp88qsI4DcbRt32yPjnBIJBJ/OvZ/AXwaudQ+FHjK6az0+C81ey+yW +kjQLE81v8xmVFB53Msa5bAOCPWpGfFGo+B/2ePF3jq30fwla6gI2ZYI4dSuZ0nu5Oh2kDYueoGT+ +PSvFv2mvhbpnwm8aafFoMV1aadfWnnJDcPuMbKxRgDuJwcA8nPPboPrzRfD9vpnjvR9Pj8DQ2Uej +38k9xqB03ymgjKbd3mY+Yl1ToeF3cHqM3x58NvBHxo8T3T6297Nf2YaOGJbkxFE3E/KMYOcjrz60 +Adf8O9Ltdc8TjWLzTDFbWzsqWtxLIN8QA2Eru5Zj1P8AvY619CeIvF8eoW+tX1/evaWem2j3clpZ +LkwRYACgZCgHAAA5xzjAzXztpHiiyttJcxXmdTSUtNeQndGiBSSNu4sCCAMY74r0bw14P0H4q+Dv +FOieIsm1lEeqG5SbaqGJJFQkqwbJaRDx1GfQUgPONG8ZprtiZ7fVp1keUJbWzzySJNCRuJw4znHc +gkever9zJp0Fs1zAkcF8km4naNxP8QzyO57d642/8NNefD23sbtoHuwIjOs0AAldGOQdpXORgdcf +KOua8r1Txdp2oeNYtKjDMUmO5IpihSQ46qHYFhgAkN249KAP/9k= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/966ee6715332222c1dd2ffce639ff4b7?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +MUlEQVRYhbWWbUwcVRSGnwFMKjSCGirRNUBSQdYW2kSFpW3UlkY+SyUkkkZjbSM/MDVqSokUFALh +D5Q0hkYrMa0fYU2AGFuwDcTulrZUouH7o8LKmgZapQZBWNiCMP6gO53ZmZ2x6fr+mrln5p73nnvf +91yhrnCXuHtfMTFbdvJ/4MSRFH4buaoZ22CKJdD8yB9l3TYrY702wsJNPBoR7VcCYeEmum1WzVh2 +fjVBnpeISDP1pVlExVnwZ0VituwkKs5CRKSZtDfKAbA11TLc1UrCjlwCk2MeKAN4q+IsAL0djfi7 +ImHhJs7UFwIwdX2EdmsV2fnVPB69+W4FAILXh0nP7oVZFudnVJMVZoVIz0mpB1kXEoq9uVYaK7dO +ELz+YcU/nip4vttgiiVhRy7AXQK2plrszbVERJpJyfuA+OS9CAEBPleVlHqQnILjCMLaN3ISWti9 +r5j60iwAUvKKCAgIVBK49vN5Xiv6yjCxVvKM/RWGJDxVWJibllYPQM3bz4q9l5rF1ZUV8b+gqe6Q +uLqq/W3LqRLRNTft899fen4Qu+3fKMYEURRFvdU2flzADWc/E44exXhEpJmN8S+y5HbpxrPzq3Wr +idGKjx1KFFdXVsShrlbx+LvbRHnFTh7NMIwbIUifHtx0DjDU1cImyx5+vz7C4vxfJGzPwTncyVif +DcAwrgdDAgBt1iqmJkY59+VHd0YEJmUlN4rfEwFvnQOsLC8pPMHtmmV5yS2968VbT5fq+oTPCnik +9uP5z0nJK2LrC6+CIOB2zZJTcJyxPrtC177iRhLVJCDXuce1nMOdTDp6WF5yM9ZnV+naVxz0fUIl +w+YT7yhM5ttP3uPW5JjqQEXFWYg2W7i9OK8bT7+THNa246Xc9xVboLK8dSGhUnKAf5Zvs+hS9wT3 +wto+G8XlkPcaCd66PJwZLLacKvG7D1xorBEPZwarnFLzDHj2KmN/hV98wNZ0jO+/+FArlW8VyA/M +/fiAXnJNAuXWCRWR+/GBxNQDJKYekGIPhoTqE/C+TIC+zo3iWvPpEvCGP3xAD4bt2J8+oAm5JMYH +r4gDnd/ptk+5RL1xobFG90Iix2ivTaw7skspw7aGSlxz0zyTlKkwIznkEpXDc9rlB04Ljv4O2hoq +cQ5dAWROOD54GUf/RW46Bxi8elZ3EntzLa2nS1XJ9TA+eJlPi1M5eTSNx558WhqXKtDWUCkNtlur +2GTJ8lkFDwlYs1e95M6hTtoaKnH0XwSUXVYi4Ojv4NeBS4p7/kDnGeK37VVN6O0TgK7OF10zuBf+ +lt69e02QZ/XeV+12axWbLXtUV3QjXXvD/Hw6cc+lMfLTOdqtVaqWLIz22sTPSjI0f3696Gvit79y +Twn1IIqiRMRziw6MfWiibOaWuqwAUxPXSE7P9xsBQRAIf+IpEl9+E9PGrfx5w8G/gRkaIPOjcCwA +AAAASUVORK5CYII= + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/ogpaX.jpg?s=32&g=1 + +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 +/sH8DH//2Q== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gravatar.com/avatar/df4238d62982eeae2b7ad712400c65d7?s=32&d=identicon&r=PG&f=1 + +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAE +aUlEQVRYha2XTU8bVxiFnxmPBxxjiETBwW6itBRRDG6aLNIUVWmq1JXCMrtIUcWKZSvlvxRKsurH +XyiVYqkYUjXpolVbYjcRIJNWGGGMFNvgwR7j24WZ65mxDaj4rOz5uOfc997zzrmKEELQAumcSTxl +8NE73URCurw2lyjIZz54q4uxIR2vB0aCetP7xYMaP68esLFbBWAw4OHBZ32oiiKf09oRr2VNAD4Z +7WZhZZ+pqJ94ynCQ373mR1EUFlb2iacMYhEfmkchnjLo96vcvebH51V49KQIwO0xn4McQHULMCoC +o1KT/0eCOhu5Kt8+LUpRdnKAqaifnm6VR0+KzCUKCCHk/ZGgzuV+jcGAhysXdTcdSqslEELw95ZJ +PFXiy0/Ps7pdkbNwk7srZuFyv0Ys4mMkqLO6XWGvLLh6qatJgDq7mGd1u+JUpShEQjpf3O4DQPM0 +yubTFUkOMJcoOCpza7QbgI3dqhQ9EtR53zb7dM7k+WadU7MetCu2CwGIpwyGBzTWd6okXh7Istvh +roz1nHssa7z9co3xkLexBwxTYJgC94qkcyb9fpWZm71c7tfk4Asr+23Jp6J+WQk30jmTtazJVv6Q +ZMZEC/Z6iEV8RMO6Q6WF4kFNDh6L+GRZrRm6yS24K2SffeN3CSW5WRbH+fzXdLnlQKfF9GSgZZ9Y +y5oUjBqq14MsZyufnxWRkM5q1mQ2kWcta7KeNZlL5Pnz3zJXL+mop/H5WTEV9ePXVR4uF5hfLuBR +FTm+ChCL+KQtOk2ezpnML+VJZhpWX8uafL1UYH3HrLfi43x+Vrj3lE9XSLw8IJ2rMr9UqAs4jc/P +inZ9Qj2NzztNbu8T2kk+7zS5BavCyg9/7Yl25V58YfDj89KZBNwa7XZM5vMPA0yE6z0hmamgtit3 +J8ihuS3HUyWEECy+MKhURd2GbhGdIm8lYit/yDdPi/z2qsyVi3ojEVll8nnVjpLbRVg8qYzJves9 +qIqCOj0ZIHzeI29a5MFeD/dv9HRUhM/bCGDeo96jWsHD2hgAwwMaD2J9vPdmc4L5v7Av69tvaHIv +yD2wUzzk/o0epicDHJiio8tgJx8MeJj5uJfRC16SGRMllSkL81A48oCVCas1wffP9s5EfmfinGMy +9673yGz4xz9llK9+ei2Oy+1WJG83M8OsuXzew0S4TpDMVBgPNSdhqH+QHidLqLGIT15sldtP6hPN +PjccPnfD+jo+XC6wsVut54HjcnsrEe4+0eTzXxo+d8Oo1LOnBQ3qeWCvLJpm7xYB7fuEw+dbDZ+7 +EQnpjA15eZ6pEE8adQEjQd2RhtM5k/1yjYlwF9OTAeKpEpuvDx1rbYVZO+w+145+zi7mW8b9aLiL +iZCtE9q/Vo+TJUoVwXhIl4q/e7YnU9PwgMbMzV7HO80+N5gI65x07mg6G65lTdZ3qmzlD1k5Ijyp +T7Ty+btDXvk+tD93NJ0NZxfz8jh9odfDneg5jusTu3u1tj7//VWZxZfGseeO/wBim7PdGGewLwAA +AABJRU5ErkJggg== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/qdwq9.jpg?s=32&g=1 + +/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcG +BwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwM +DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIA +AhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAABQcJBAj/xAAtEAACAQMDAwMDAwUAAAAAAAABAgME +BREGEiEHCBMAMUEVYZEUIjIjUXGh0f/EABUBAQEAAAAAAAAAAAAAAAAAAAID/8QAGBEAAwEBAAAA +AAAAAAAAAAAAAAERIRL/2gAMAwEAAhEDEQA/AJjrTvEh6da2h0lSWit1FeGiVxarOiPUojENG0sj +t46ZGP8AEYeSRecKDkgd5WvarqN2fa5F70rqLSVZbbb9Tof1IpqiGp2OjhkdCRvBA3KyKdpyNwyR +TOrnSLUlxnpblojUNu0TcLpQwLcbitohnqBiLKIkzxsFwWckhS3Iw2MEzXuPsV7sPZj1CptQ6+uG +s3p6Gop2/UWeClBeTYkfilVMttw2RsPDkfAxGspymqZaxazNxrV3wTQLKGyxXeGB9sgAYAOefn7e +unUclNLYqkI1RNE/D+OHa/vk8HnHt6Xrq76NWLLHA0OG2tMYSQ2M5wsihecf8IIz6A1/cIam0vtk +R14HmZQrLyMZ2n3wB8n2/NiZrvpvvatt2sVbTaoguWnL5aGFse12SjmvsjzRIoHjeDcJg4KlV2Ku +CCXIztjHevr++2Ts91BRanp6e3z6kudvpKO3lClXSyGRqh46kA+MzQwCLybSqRyO6/u2kmudmWva +Ne0i29QNRy262V0kc09bW/T6W30lsSFmxPlAMxY4AP7ndsEE4A8D95Xepb+4TXsFNZ6VqfRen/LF +a6SpDQy1buczVkpLHDysN2G5XJ+WI9CaOzESCiuTW3d5a2GSKXliQ0hPOffHB/0efQnUJErLahzs +RpFBfbLIcfYFQBwBgZx8f4QoEnrVdpIUilmb+giwgvCgOdxYD7e/v+fQXVPUMtVWJDvnTaS45/iR +wBnAP9/z6YD/2Q== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://i.stack.imgur.com/AEYqB.png?s=32&g=1 + +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 +wqXLfooW307f0BA2i4XoyDBaLILbk4quxjAMjYgWZ51Z4rQW5w8H/8IrLzdMLwm3b9uI/0oPTS/+ +kYx0F4lYCLPNicPhoKvrX1itVvR4AiGZsFhlejo6yfN9jYW5cwiGNDySwI6BWfDfIbyJKG58ajfZ +czP46U+eQHGA1eFBSCY6O7sQJoVELIQsmRC6TqC3D1FUSG7+Qk591InbmkRzcIRLV/ys+c63b34Z +7ar/IbXVq7jne1sZGQuhWJ0EA0HaO68QHA5gtdmQolFkk4lQJMqCnAxONP+TgJCZjEU4fPQVatZV +/k/AvwGTInLN+5NEjgAAJlhlWElmSUkqAAgAAAAIAAABBAABAAAAwgEAAAEBBAABAAAA4AEAAAIB +AwADAAAAbgAAABoBBQABAAAAdAAAABsBBQABAAAAfAAAACgBAwABAAAAAwAAADEBAgANAAAAhAAA +ADIBAgAUAAAAkgAAAKYAAAAIAAgACAA3AgAAFAAAADcCAAAUAAAAR0lNUCAyLjEwLjEyAAAyMDIw +OjAxOjAxIDAxOjE2OjQwAAgAAAEEAAEAAADwAAAAAQEEAAEAAAAAAQAAAgEDAAMAAAAMAQAAAwED +AAEAAAAGAAAABgEDAAEAAAAGAAAAFQEDAAEAAAADAAAAAQIEAAEAAAASAQAAAgIEAAEAAABGJQAA +AAAAAAgACAAIAP/Y/+AAEEpGSUYAAQEAAAEAAQAA/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZ +EhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0Y +MiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AA +EQgBAADwAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIB +AwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBka +JSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SV +lpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX2 +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 + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://lh3.googleusercontent.com/-JwI_aHAmvgg/AAAAAAAAAAI/AAAAAAAAGv8/PgjL7mWphRc/photo.jpg?sz=32 + +/9j/4AAQSkZJRgABAQAAAQABAAD/4QAqRXhpZgAASUkqAAgAAAABADEBAgAHAAAAGgAAAAAAAABH +b29nbGUAAP/bAIQAAwICAwICAwMDAwQDAwQFCAUFBAQFCgcHBggMCgwMCwoLCw0OEhANDhEOCwsQ +FhARExQVFRUMDxcYFhQYEhQVFAEDBAQFBAUJBQUJEQ0KDRQTFBUUFRMVFRURExQSFRUVFRUVFBAV +FQ0PFRMQEhITDw8PDw8PDxUPEA0PDw4NDQ8V/8AAEQgAIAAgAwERAAIRAQMRAf/EABcAAQEBAQAA +AAAAAAAAAAAAAAgHBgX/xAAtEAABAwIFAwMCBwAAAAAAAAABAgMEBREABgcSIRMxURQiQTKRFSNS +YYHR4f/EABoBAQADAQEBAAAAAAAAAAAAAAQDBQYHAgH/xAApEQACAQMBBwQDAQAAAAAAAAABAgAD +BBExBRIhUXGx8CJBYZEyM+ET/9oADAMBAAIRAxEAPwBn5fzzVGM9a2UwSm33svJiyac1UnVenQFs +rWQTxsTfaDz++KdrL0gxjVOC41ky14zPmuJTafSKRVJFKh5igNzqiIVi4gLd2OBpVtw4CUnn6Sq3 +NjgzEUKQb3lxbURcVMHQY7TIaTy6tTlzaRVJL9RVDWlUZ+UAH1srQFAOA29wO8X+QBgjlWwwGI5k +NMlYj9FUdbNLzpHJhuXv3B6jeG7P41T0lVf8KYHzNsxk/LVHzNmCru1QuSK0lpMmJJfbUykICgna +i1+dxve/YeMXDKuMEyp9ZA9OkFev2p7OetWqDSKVT5dKoVJYfHrXgXE1AqXw2QlJQ2lPuULnn29r +WxHd2LmiRTGSBnz5jdn3yJVBc4BOOn8ks0FzZmSp6w5rRKirchS1KkLU4CnoobV0m0gWtykcDi+w +nzgx2e70BujBUZPnOJqX9Na53jkMcDzlHvoYD+Pzgfdti8qJve60/wBYJs79jdJ8v/wXrDdphnOL +kPWDUeZVKNXnXKo3T0CnNtR1OQVJZIuo+oIUFbt3s7fOJmplgi8pGWAUkGcGgTEviooeY2qTIcSn +qp47/Hz/ALjeoNcaTEMdJuKfLbg0unMrZs7LlhKHB+gNuE38nt98LK71FgeR7QgOK6kexHeX3QZA +Eqc4fq9M3dVx5xzawADN0nQr45VZwM+5ApOnWRcx1WIxSnJqILm6QuEtTpUU7QQpbygDci1k+MIu +HCUmI1xI7RP9ayhtCYZqFF9JDitK3BywDlzyFK+r7EnGusqe7RRSc8BMreVBUru4GMkylxXWl0qn +vqhImmLW2kFpzhKEllxI/g3KbY97RuzZ25dRn2+5Bs20F5dikWxwJ+pddEIX5VUCwOmphpNk+Dv4 +xh7AZLzaXxwFxP/Z + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/jpeg +Content-Transfer-Encoding: base64 +Content-Location: https://graph.facebook.com/580923444/picture?type=large + +/9j/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAIAcAmcAFHhV +bDU2Q0hIN3RBOGJkZFpiR01zHAIoAGJGQk1EMDEwMDBhYmEwMzAwMDBkMjA4MDAwMDNjMGYwMDAw +NzMwZjAwMDBiYzBmMDAwMDM1MTIwMDAwZjcxOTAwMDA1NzFiMDAwMDAzMWMwMDAwOTUxYzAwMDA3 +OTJjMDAwMP/iAhxJQ0NfUFJPRklMRQABAQAAAgxsY21zAhAAAG1udHJSR0IgWFlaIAfcAAEAGQAD +ACkAOWFjc3BBUFBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtbGNtcwAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmRlc2MAAAD8AAAAXmNw +cnQAAAFcAAAAC3d0cHQAAAFoAAAAFGJrcHQAAAF8AAAAFHJYWVoAAAGQAAAAFGdYWVoAAAGkAAAA +FGJYWVoAAAG4AAAAFHJUUkMAAAHMAAAAQGdUUkMAAAHMAAAAQGJUUkMAAAHMAAAAQGRlc2MAAAAA +AAAAA2MyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAARkIAAFhZWiAAAAAAAAD21gAB +AAAAANMtWFlaIAAAAAAAAAMWAAADMwAAAqRYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABi +mQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9jdXJ2AAAAAAAAABoAAADLAckDYwWSCGsL9hA/ +FVEbNCHxKZAyGDuSRgVRd13ta3B6BYmxmnysab9908PpMP///9sAQwAGBAUGBQQGBgUGBwcGCAoQ +CgoJCQoUDg8MEBcUGBgXFBYWGh0lHxobIxwWFiAsICMmJykqKRkfLTAtKDAlKCko/9sAQwEHBwcK +CAoTCgoTKBoWGigoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo +KCgo/8IAEQgBPwFAAwAiAAERAQIRAf/EABsAAAEFAQEAAAAAAAAAAAAAAAABAgMEBQYH/8QAFgEB +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 + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/gif +Content-Transfer-Encoding: base64 +Content-Location: https://clc.stackoverflow.com/impression.gif?an=48r7zmKxa8l1D1Vb82BXJiaW26ckK7T-aMcXO5hlM370ux1wPJCBi6FnAwNDgz0jIwPrbKbrv4W67kmcuqDIyMUgdaDt_kPLH71p9oxsBZUlGfl5s5lWLBW-OUlybqsSUJ_MATaOB5Y3YyOQ5PfMFb7aITnjtyITSH5N_0vLtTUFSPJPVwssXSd6Y4EcOxeDxIEj-39Zej8rQpI__EdwxgbxI4sUOEDy1e9PW54Q94TLM1Qqx8_kmN_fbxAAAA&md=350 + +R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR---- +Content-Type: image/png +Content-Transfer-Encoding: base64 +Content-Location: https://www.gstatic.com/images/branding/product/1x/translate_24dp.png + +iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADAElEQVR4Ab2TA5djWRRGaxlj/51h +27Zt23xltG3btrtj2zbHM9/c87LuvKCNumvtYrL3zTlJVaucIeuz/bs3pv/s1ZRHT0YPTmMe3Rnd +GvLoypiwPvzxWwVI3rs5j1cFOq32dHurAIm5nJDkpYHOq2O33irAxS+8PaeesfTW528c+F/6gttz +OVFz1AebzQu/P4BQKIRgMCgSCARE/H4/8YfF7upZGmiUKJfzQBfGsPUJPJPp4PX6mTjE5eUB+Hy+ +36VAmXjt6Sz0rhRi8SSM7Pvqk1lRTnSuy+PUVR10OjOT+F8YIKR3UbH8VBaJZBKH72ew9GgWh++l +Mf9QjstF1hxwQSbTwGy2kvTVARoFR+9M4fjDdMnci+WdGENa4nj8RAWt1sD2YSPZ80YkBUjGobGs +OZUVxTtvZJBMJkUMrhTJC9TSmLRQqfUwGIwYuaSW7cTLqQyQjEOik48y4q0Hb8hh0q4cHuhTuKdL +cTk6MnouvoEhcwQMW7AWIxYJGLW0FmNWNGDMysbKAMk4tFDawZEHaSw/nsUhtgv6fRn7mcuJQc1x +bNl/GvceydguzBC27sPJSzdIzJECfL4citAu4okkjO4UhNOl8g41ObRnCNuuYEH9dpy7fhszq9ez +kAVOp/PFgU7l1EqUy4lV+5yYV7MVIxbW4Mb9x7RwEZfLRbuQAqXSF4olOVGdQ/+GKEYvbMDMtRuw +8cAxWK1WMeBwOOiVSIEXSEvE5XKiHaNhzy08fabCwqatLHKCBwgp0LY2/UfHNxQTbYUcVrIxyeQa +qDV6LG7ejqt3HsBut5cGugnBPr+sjv/eXsiA066ctWmRtgXQZk2Bgc0RKJRaGI0mmMzmkjFVvemZ +Mv/Mdz/2PIcfehT4vvs5rKi9Jd7eZDLDYrEQbx+gM3zKlehPvS6BWFF3G3I2Hq2OAib6PPAAjent +AouEO4t/7s3ktYXlKpUa6MoChTHZf3+rwLx5175aUXMLDx/JIJMpoVZrodVqodfrRQwGAwV/v3L9 +ab+q1jj/Aa5bwO+xfluQAAAAAElFTkSuQmCC + +------MultipartBoundary--8UbACXZIHHg8ToM8isCvcotGoojR5VisA6ZeSTyeoR------ diff --git "a/Fase 4 - Temas avanzados/Tema 17 - Distribuci\303\263n/Leccion 01 (Apuntes) - Setuptools.ipynb" b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Apuntes/Leccion 01 (Apuntes) - Setuptools.ipynb similarity index 99% rename from "Fase 4 - Temas avanzados/Tema 17 - Distribuci\303\263n/Leccion 01 (Apuntes) - Setuptools.ipynb" rename to Fase 4 - Temas avanzados/Tema 17 - Distribucion/Apuntes/Leccion 01 (Apuntes) - Setuptools.ipynb index bb1b85f..fb374e2 100644 --- "a/Fase 4 - Temas avanzados/Tema 17 - Distribuci\303\263n/Leccion 01 (Apuntes) - Setuptools.ipynb" +++ b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Apuntes/Leccion 01 (Apuntes) - Setuptools.ipynb @@ -15,7 +15,7 @@ "collapsed": true }, "source": [ - "En Python todo el tema de empaquetar puede ser un poco lioso, ya que encontramos varios módulos destinados a ello. Nosotros vamos a centrarnos en **setuptools**, ya que es la forma más utilizada, nos proporciona todo lo necesario para distribuir nuestros propios módulos e incluso nos permite publicar paquetes en el respositorio público PyPI (Python Package Index) de forma directa desde la propia terminal.\n", + "En Python todo el tema de empaquetar puede ser un poco lioso, ya que encontramos varios módulos desintados a ello. Nosotros vamos a centrarnos en **setuptools**, ya que es la forma más utilizada, nos proporciona todo lo necesario para distribuir nuestros propios módulos e incluso nos permite publicar paquetes en el respositorio público PyPI (Python Package Index) de forma directa desde la propia terminal.\n", "\n", "Si lo recordáis, en la lección de módulos ya os enseñé como crear un distribuible con setuptools, a lo largo de esta lección vamos a repasar y aprender varios conceptos nuevos." ] @@ -65,7 +65,7 @@ "```\n", "¿Hasta aquí fácil no? Son simples metadatos para definir el paquete, con la excepción de **packages**, en el que tenemos que indicar todos los paquetes que formarán parte del paquete distribuido en forma de lista.\n", "\n", - "Aunque en este caso únicamente tendríamos al paquete **prueba**, imaginaros que tenemos docenas de subpaquetes y tuviéramos que añadirlos uno a uno... Pues para estos casos podemos importar una función que se encargará de buscar automáticamente los subpaquetes, se trata de **find_packages** y la podemos encontrar dentro de **setuptools**:\n", + "Aunque en este caso únicamente tendríamos al paquete **prueba**, imaginaros que tenemos docenas de subpaquetes y tubiéramos que añadirlos uno a uno... Pues para estos casos podemos importar una función que se encargará de buscar automáticamente los subpaquetes, se trata de **find_packages** y la podemos encontrar dentro de **setuptools**:\n", "```python\n", "from setuptools import setup, find_packages\n", "\n", diff --git "a/Fase 4 - Temas avanzados/Tema 17 - Distribuci\303\263n/Leccion 02 (Apuntes) - Pyinstaller.ipynb" b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Apuntes/Leccion 02 (Apuntes) - Pyinstaller.ipynb similarity index 100% rename from "Fase 4 - Temas avanzados/Tema 17 - Distribuci\303\263n/Leccion 02 (Apuntes) - Pyinstaller.ipynb" rename to Fase 4 - Temas avanzados/Tema 17 - Distribucion/Apuntes/Leccion 02 (Apuntes) - Pyinstaller.ipynb diff --git a/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 01 (Apuntes) - Setuptools.ipynb b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 01 (Apuntes) - Setuptools.ipynb new file mode 100644 index 0000000..0ff13fd --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 01 (Apuntes) - Setuptools.ipynb @@ -0,0 +1,301 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# Setuptools" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "En Python todo el tema de empaquetar puede ser un poco lioso, ya que encontramos varios módulos desintados a ello. Nosotros vamos a centrarnos en **setuptools**, ya que es la forma más utilizada, nos proporciona todo lo necesario para distribuir nuestros propios módulos e incluso nos permite publicar paquetes en el respositorio público PyPI (Python Package Index) de forma directa desde la propia terminal.\n", + "\n", + "Si lo recordáis, en la lección de módulos ya os enseñé como crear un distribuible con setuptools, a lo largo de esta lección vamos a repasar y aprender varios conceptos nuevos." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Paquete básico\n", + "\n", + "Antes de comenzar es importante repasar la estructura de un paquete en Python,ya que para distribuir nuestro código es indispensable estructurarlo dentro de un paquete:\n", + "\n", + "```\n", + "| setup.py # Fichero que contiene toda la información de instalación\n", + "+ prueba/ # Directorio del paquete al mismo nivel que setup.py\n", + " | __init__.py # Fichero que indica que el directorio es un paquete\n", + " | modulo.py # Módulo o script que contiene definiciones\n", + "```\n", + "Por lo tanto vamos a empaquetar el paquete de nombre **prueba**, que contiene código en el fichero *modulo.py*.\n", + "\n", + "Vamos a aprender un poco más sobre el fichero de instalación." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## setup.py\n", + "El fichero de configuración incluye toda la información necesaria para realizar la instalación de nuestro paquete. Algunos campos incluyen sólo metadatos como el nombre, la versión, la descripción o el autor. Pero otros sirven para extender la instalación.\n", + "\n", + "Como sería un caos que cada desarrollador pusiera los campos que quisiera, hay una serie de parámetros comunes y avanzados, pero como son muchos lo más común es utilizar una plantilla base como la siguiente que pasa la configuración a la función **setup**:\n", + "\n", + "```python\n", + "from setuptools import setup\n", + "\n", + "setup(name=\"Prueba\", # Nombre\n", + " version=\"0.1\", # Versión de desarrollo\n", + " description=\"Paquete de prueba\", # Descripción del funcionamiento\n", + " author=\"Hector Costa\", # Nombre del autor\n", + " author_email='me@hcosta.info', # Email del autor\n", + " license=\"GPL\", # Licencia: MIT, GPL, GPL 2.0...\n", + " url=\"http://ejemplo.com\", # Página oficial (si la hay)\n", + " packages=['prueba'],\n", + ")\n", + "```\n", + "¿Hasta aquí fácil no? Son simples metadatos para definir el paquete, con la excepción de **packages**, en el que tenemos que indicar todos los paquetes que formarán parte del paquete distribuido en forma de lista.\n", + "\n", + "Aunque en este caso únicamente tendríamos al paquete **prueba**, imaginaros que tenemos docenas de subpaquetes y tubiéramos que añadirlos uno a uno... Pues para estos casos podemos importar una función que se encargará de buscar automáticamente los subpaquetes, se trata de **find_packages** y la podemos encontrar dentro de **setuptools**:\n", + "```python\n", + "from setuptools import setup, find_packages\n", + "\n", + "setup(...\n", + " packages=find_packages()\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dependencias\n", + "Ahora imaginaros que en vuestro paquete algún código utiliza funciones de un módulo externo o paquete que hay que instalar manualmente. Esto se conoce como dependencias del paquete, y por suerte podemos indicar a un parámetro que descargue todos los paquetes en la versión que nosotros indiquemos, se trata de **install_requires**. \n", + "\n", + "Por ejemplo imaginad que dentro de nuestro paquete necesitamos utilizar el módulo **Pillow** para manejar imágenes. Por regla general podemos instalarlo desde la terminal con el comando:\n", + "\n", + "```\n", + "pip install pillow\n", + "```\n", + "Pero si queremos que el paquete lo instale automáticamente sólo tenemos que indicarlo de esta forma:\n", + "\n", + "```python\n", + "setup(...,\n", + " install_requires=[\"pillow\"],\n", + ")\n", + "```\n", + "Y así iríamos poniendo todas las dependencias en la lista.\n", + "\n", + "Lo bueno que tiene es que podemos indicar la versión exacta que queremos instalar, por ejemplo. Si mi programa utilizase la versión 1.1.0 de Pillow tendría que poner:\n", + "\n", + "```python\n", + "setup(...,\n", + " install_requires=[\"pillow==1.1.0\"],\n", + ")\n", + "```\n", + "\n", + "En cambio si fuera compatible con cualquier versión a partir de la 1.1.5 podría poner:\n", + "\n", + "```python\n", + "setup(...,\n", + " install_requires=[\"pillow>=1.1.5\"],\n", + ")\n", + "```\n", + "Si no indicamos una versión, se instalará automáticamente la más actual.\n", + "\n", + "### Utilizando un fichero de dependencias\n", + "\n", + "De forma similar a antes, quizá llega el momento donde tenemos muchísimas dependencias y es un engorro tener que cambiar directamente el fichero **setup.py**. Para solucionarlo podemos utilizar una técnica que se basa en crear un fichero de texto y escribir las dependencias, una por línea.\n", + "\n", + "Luego podemos abrir el fichero y añadir las dependencias automáticamente en forma de lista. Generalmente a este fichero se le llama **requirements.txt** y debe estar en el mismo directorio que **setup.py**:\n", + "\n", + "#### requirements.txt\n", + "```\n", + "pillow==1.1.0\n", + "django>=1.10.0,<=1.10.3\n", + "pygame\n", + "```\n", + "Luego en las dependencias indicaríamos lo siguiente:\n", + "```python\n", + "setup(...,\n", + " install_requires=[i.strip() for i in open(\"requirements.txt\").readlines()],\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Suite Test\n", + "Otra cosa interesante que podemos hacer es adjuntar una suite de tests unitarios para nuestro paquete, ya sabéis, los que aprendimos en la unidad anterior. \n", + "\n", + "Para incluirlos tendremos indicar un parámetro en el instalador llamado **test_suite**, al que le pasaremos el nombre del directorio que los contiene, por lo general llamado **tests**:\n", + "\n", + "```\n", + "| setup.py\n", + "| requeriments.txt\n", + "+ prueba/ \n", + " | __init__.py \n", + " | modulo.py \n", + "+ tests/\n", + " | test_pillow.py\n", + " | test_django.py\n", + " | test_pygame.py\n", + "```\n", + "En el **setup.py**:\n", + "```python\n", + "setup(...,\n", + " test_suite=\"tests\"\n", + ")\n", + "```\n", + "Luego para ejecutarlos podemos utilizar el comando:\n", + "\n", + "```python\n", + "python setup.py test\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# PyPI y PIP\n", + "\n", + "Por último hablemos un poco más del **Python Package Index**. \n", + "\n", + "Como ya sabéis se trata de un repositorio público con miles y miles de paquetes creados por la enorme comunidad de Python. De hecho yo mismo creé hace años un pequeño módulo para el framework django, os dejo el enlace por si os pica la curiosidad: https://pypi.python.org/pypi/django-easyregistration \n", + "\n", + "Sea como sea, la forma de instalar cómodamente los paquetes de PyPI es con la herramienta PIP (un acrónimo recursivo de Pip Installs Packages), utilizando el comando **pip install nombre_paquete**. \n", + "\n", + "Además podemos listar los paquetes instalados con **pip list**, borrar alguno con **pip uninstall nombre_paquete** o incluso instalar todas las dependencias de un fichero **requisites.txt** utilizando **pip install requisites.txt**.\n", + "\n", + "Si queréis saber más sobre pip, simplemente escribid **pip** en la terminal.\n", + "\n", + "## Clasificadores\n", + "Por lo tanto tenemos un repositorio inmenso, así que ¿cómo podemos añadir información para categorizar nuestro paquete en PyPI? Pues utilizando un parámetro llamado **classifiers** de la siguiente forma:\n", + "\n", + "```python\n", + "setup(...,\n", + " classifiers=[\n", + " \"Development Status :: 3 - Alpha\",\n", + " \"Topic :: Utilities\",\n", + " \"License :: OSI Approved :: GNU General Public License (GPL)\",\n", + " ],\n", + ")\n", + "```\n", + "Hay un montón de clasificadores, desde el estado del proyecto, el tema, las licencias, etc. Una lista completa de los clasificadores disponibles podemos encontrarla en la propia web de PyPI:\n", + "https://pypi.python.org/pypi?%3Aaction=list_classifiers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Probando el paquete\n", + "Una vez tenemos toda la información configurada, podemos probar nuestro paquete fácilmente realizando una instalación en modo desarrollo. Para ello utilizaríamos el siguiente comando:\n", + "\n", + "```\n", + "python setup.py develop\n", + "```\n", + "Este modo es muy práctico, ya que nos permite utilizar nuestro módulo en cualquier lugar y hacer modificacione sin necesidad de reinstalarlo constamente. Eso es posible porque se utiliza desde el propio directorio. \n", + "\n", + "Una vez hayamos hecho las probaturas y estemos satisfechos, podemos desinstalar el paquete de desarrollo:\n", + "```\n", + "python setup.py develop --uninstall\n", + "```\n", + "\n", + "Para instalar el paquete definitivo utilizaríamos:\n", + "```\n", + "python setup.py install\n", + "```\n", + "Pero tenemos que tener en cuenta que una vez hecho esto, el paquete se instala en una copia interna y ya no podremos modificarlo sin antes desinstalarlo, algo que tendremos que hacer con PIP, buscando el nombre del paquete con **pip list** y haciendo un **pip uninstall nombre_paquete**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Distribuyendo el paquete\n", + "Ya tenemos el paquete, hemos creado el instalador, lo hemos probado y estamos preparados para distribuirlo. Hay dos formas:\n", + "\n", + "* **Localmente**: Generando un fichero comprimido que podemos compartir con nuestros conocidos.\n", + "* **Públicamente**: En el repositorio PyPI para que todo el mundo pueda utilizarlo.\n", + "\n", + "Evidentemente si distribuimos localmente no tenemos que tener mucho cuidado, y además podemos hacer pruebas. Pero si decidimos hacerlo públicamente tendremos que intentar que el paquete tenga un mínimo de calidad.\n", + "\n", + "### Localmente\n", + "\n", + "Distribuir el paquete localmente es muy fáci. Simplemente tenemos que utilizar el comando:\n", + "```\n", + "python setup.py sdist\n", + "```\n", + "Esto generará un directorio **dist/** en la carpeta del paquete. Dentro encontraremos un fichero zip o tar.gz dependiendo de nuestro sistema operativo.\n", + "\n", + "Este fichero ya podremos compartirlo con quien queramos, y para instalarlo sólo tendremos que utilizar la herramienta **pip**:\n", + "```\n", + "pip install nombre_del_fichero.zip # La extensión depende del sistema operativo\n", + "```\n", + "Luego para desinstalarlo de la misma forma pero utilizando el nombre del paquete:\n", + "```\n", + "pip uninstall nombre_paquete\n", + "```\n", + "\n", + "### Públicamente\n", + "Aunque no voy a hacer la demostración porque ahora mismo no dispongo de un paquete para publicar en el repositorio de PyPI, sí que os voy a enseñar los pasos a seguir para hacerlo. Lo bueno de registrar un paquete en PyPI es que podemos instalarlo desde cualquier lugar a través de internet utilizando la herramienta PIP.\n", + "\n", + "Dicho ésto, si algún día creáis un paquete de calidad y queréis compartirlo con la comunidad, lo primero es registrar una cuenta en PyPI: https://pypi.python.org/pypi?%3Aaction=register_form\n", + "\n", + "A continuación desde el directorio de nuestro paquete tenemos que ejecutar el comando:\n", + "\n", + "```\n", + "python setup.py register\n", + "```\n", + "Así iniciaremos una petición para registrar nuestro paquete en el repositorio. Luego tendremos que seguir los pasos e identificarnos cuando lo pida con nuestro usuario y contraseña (que hemos creado antes).\n", + "\n", + "Una vez hecho esto ya hemos creado nuestro paquete, pero todavía no hemos publicado una versión, así que vamos a hacerlo utilizando el comando:\n", + "\n", + "```\n", + "python setup.py sdist upload\n", + "```\n", + "¡Y ya está! Ahora podremos instalar nuestro paquete desde en cualquier lugar con PIP:\n", + "\n", + "```\n", + "pip install nombre_paquete\n", + "```" + ] + } + ], + "metadata": { + "anaconda-cloud": {}, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 02 (Apuntes) - Pyinstaller.ipynb b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 02 (Apuntes) - Pyinstaller.ipynb new file mode 100644 index 0000000..079a771 --- /dev/null +++ b/Fase 4 - Temas avanzados/Tema 17 - Distribucion/Leccion 02 (Apuntes) - Pyinstaller.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pyinstaller" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Ya hemos visto como distribuir nuestros paquetes... ¿Pero y si creamos una aplicación y queremos generar un ejecutable para utilizarla? Bueno, en este caso puede ser bastante complicado dependiendo de las dependencias que utilice el programa. \n", + "\n", + "Por suerte hay un módulo que nos ayudará mucho a generar ejecutables porque automatiza el proceso, ese es **pyinstaller**.\n", + "\n", + "Lo que hace es generar un .EXE en Windows, un .DMG en MAC o el ejecutable que utilice el sistema operativo. Dentro del ejecutable se incluye el propio intérprete de Python, y por esa razón podremos utilizarlo en cualquier ordenador sin necesidad de instalar Python previamente." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instalación\n", + "La instalación es muy fácil:\n", + "```\n", + "pip install pyinstaller\n", + "```\n", + "No hay más." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Primer ejecutable\n", + "Comencemos con algo simple, tenemos un script **hola.py**:\n", + "```python\n", + "print(\"Hola mundo!\")\n", + "```\n", + "Y queremos crear un ejecutable a partir de él, pues haríamos lo siguiente:\n", + "```\n", + "pyinstaller hola.py\n", + "```\n", + "Una vez acabe el proceso se nos habrán creado varias carpetas. La que nos interesa es **dist**, y dentro encontraremos una carpeta con el nombre programa y en esta un montón de ficheros y el ejecutable, en mi caso como estoy en Windows es **hola.exe**.\n", + "\n", + "Como es un programa para terminal, para ejecutarlo tengo que abrir la terminal en ese directorio y ejecutar el programa manualmente:\n", + "\n", + "```\n", + "C:\\Users\\Hector\\Desktop\\hola\\dist\\hola>hola.exe\n", + "Hola mundo!\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejecutable con interfaz\n", + "\n", + "Ahora vamos a hacer otro a partir de un simple programa con Tkinter, la librería de componentes integrada en Python que ya conocemos. Nos debería funcionar sin problemas:\n", + "\n", + "```python\n", + "from tkinter import *\n", + "root = Tk()\n", + "Label(text='Hola mundo').pack(pady=10)\n", + "root.mainloop()\n", + "```\n", + "Suponiendo que lo hemos puesto en el mismo script:\n", + "\n", + "```\n", + "pyinstaller hola.py\n", + "```\n", + "En esta ocasión si ejecutamos el programa con doble clic nos funcionará bien, el problema es que se muestra la terminal de fondo.\n", + "\n", + "Para que desaparezca tenemos que indicar que es una aplicación en ventana, y eso lo hacemos de la siguiente forma al crear el ejecutable:\n", + "\n", + "```\n", + "pyinstaller --windowed hola.py\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ejecutable en un fichero\n", + "Ya véis que por defecto Pyinstaller crea un directorio con un montón de ficheros. Podemos utilizar un comando para generar un solo fichero ejecutable que lo contenga todo, pero este ocupara bastante más:\n", + "\n", + "```\n", + "pyinstaller --windowed --onefile hola.py\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cambiar el icono\n", + "También podemos cambiar el icono por defecto del ejecutable. Para ello necesitamos una imagen en formato .ico.\n", + "\n", + "```\n", + "pyinstaller --windowed --onefile --icon=./hola.ico hola.py\n", + "```\n", + "Si no tenéis uno, podéis utilizar este para probar: http://www.iconarchive.com/download/i3532/artua/star-wars/Darth-Vader.ico\n", + "\n", + "Si por algo no os cambia el icono, probad cambiando el nombre del ejecutable. A veces el caché de Windows puede ignorar estas cosas." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Limitaciones\n", + "El gran problema con Pyinstaller como os decía al principio son las dependencias. \n", + "\n", + "Si nuestro programa utiliza únicamente módulos de la librería estándard no tendremos ningún problema, pero si queremos utilizar módulos externos es posible que no funcione... A no ser que sea alguno de los soportados como PyQT, django, pandas, matpotlib... pero requieren una configuraciones extra.\n", + "\n", + "Si queréis saber más os dejo este enlace con los paquetes soportados:\n", + "https://github.com/pyinstaller/pyinstaller/wiki/Supported-Packages\n", + "\n", + "Personalmente nunca he hecho nada avanzado, pero si queréis hacerlo y no lo conseguís, os podéis poner en contacto conmigo y estaré encantado de ayudaros.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Y con esto llegamos al final... por ahora ;-)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Scripts/codificacion.py b/Scripts/codificacion.py new file mode 100644 index 0000000..9df9658 --- /dev/null +++ b/Scripts/codificacion.py @@ -0,0 +1 @@ +print("Este programa tiene código fuente en Español") \ No newline at end of file diff --git a/Scripts/codificacion_ANSI.py b/Scripts/codificacion_ANSI.py new file mode 100644 index 0000000..cc9b876 --- /dev/null +++ b/Scripts/codificacion_ANSI.py @@ -0,0 +1 @@ +print("Este programa tiene cdigo fuente en Espaol") \ No newline at end of file diff --git a/Scripts/escribir_lineas.py b/Scripts/escribir_lineas.py new file mode 100644 index 0000000..790e714 --- /dev/null +++ b/Scripts/escribir_lineas.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jan 10 16:21:00 2020 + +@author: Isra +""" + +import sys + +if len(sys.argv) == 3: + texto = sys.argv[1] + repeticiones = int(sys.argv[2]) + + for r in range(repeticiones): + + print(texto) +else: + print("Error, introduce los argumentos correctamente") + print("Ejemplo: escribir_lineas.py 'texto' 5") \ No newline at end of file diff --git a/Scripts/primer_script.py b/Scripts/primer_script.py new file mode 100644 index 0000000..b7b67e0 --- /dev/null +++ b/Scripts/primer_script.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Jan 10 16:15:21 2020 + +@author: Isra +""" + +import sys + +print("Hola, bienvenido a tu primer script") +print(sys.argv) \ No newline at end of file