text:
import codecs
import io
import mimetypes
import os
import pkgutil
import re
import sys
import typing as t
import unicodedata
import warnings
from datetime import datetime
from html.entities import name2codepoint
from time import time
from zlib import adler32

from ._internal import _DictAccessorProperty
from ._internal import _missing
from ._internal import _parse_signature
from ._internal import _TAccessorValue
from .datastructures import Headers
from .exceptions import NotFound
from .exceptions import RequestedRangeNotSatisfiable
from .security import safe_join
from .urls import url_quote
from .wsgi import wrap_file

if t.TYPE_CHECKING:
    from _typeshed.wsgi import WSGIEnvironment
    from .wrappers.request import Request
    from .wrappers.response import Response

_T = t.TypeVar("_T")

_entity_re = re.compile(r"&([^;]+);")
_filename_ascii_strip_re = re.compile(r"[^A-Za-z0-9_.-]")
_windows_device_files = (
    "CON",
    "AUX",
    "COM1",
    "COM2",
    "COM3",
    "COM4",
    "LPT1",
    "LPT2",
    "LPT3",
    "PRN",
    "NUL",
)

class cached_property(property, t.Generic[_T]):
    """A :func:`property` that is only evaluated once. Subsequent access
    returns the cached value. Setting the property sets the cached
    value. Deleting the property clears the cached value, accessing it
    again will evaluate it again.

    .. code-block:: python

        class Example:
            @cached_property
            def value(self):
                # calculate something important here
                return 42

        e = Example()
        e.value  # evaluates
        e.value  # uses cache
        e.value = 16  # sets cache
        del e.value  # clears cache

    The class must have a ``__dict__`` for this to work.

    .. versionchanged:: 2.0
        ``del obj.name`` clears the cached value.
    """

    def __init__(
        self,
        fget: t.Callable[[t.Any], _T],
        name: t.Optional[str] = None,
        doc: t.Optional[str] = None,
    ) -> None:
        super().__init__(fget, doc=doc)
        self.__name__ = name or fget.__name__
        self.__module__ = fget.__module__

    def __set__(self, obj: object, value: _T) -> None:
        obj.__dict__[self.__name__] = value

    def __get__(self, obj: object, type: type = None) -> _T:  # type: ignore
        if obj is None:
            return self  # type: ignore

        value: _T = obj.__dict__.get(self.__name__, _missing)

        if value is _missing:
            value = self.fget(obj)  # type: ignore
            obj.__dict__[self.__name__] = value

        return value

    def __delete__(self, obj: object) -> None:
        del obj.__dict__[self.__name__]

def invalidate_cached_property(obj: object, name: str) -> None:
    """Invalidates the cache for a :class:`cached_property`:

    >>> class Test(object):
    ...     @cached_property
    ...     def magic_number(self):
    ...         print("recalculating...")
    ...         return 42
    ...
    >>> var = Test()
    >>> var.magic_number
    recalculating...
    42
    >>> var.magic_number
    42
    >>> invalidate_cached_property(var, "magic_number")
    >>> var.magic_number
    recalculating...
    42

    You must pass the name of the cached property as the second argument.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use ``del obj.name`` instead.
    """
    warnings.warn(
        "'invalidate_cached_property' is deprecated and will be removed"
        " in Werkzeug 2.1. Use 'del obj.name' instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    delattr(obj, name)

class environ_property(_DictAccessorProperty[_TAccessorValue]):
    """Maps request attributes to environment variables. This works not only
    for the Werkzeug request object, but also any other class with an
    environ attribute:

    >>> class Test(object):
    ...     environ = {'key': 'value'}
    ...     test = environ_property('key')
    >>> var = Test()
    >>> var.test
    'value'

    If you pass it a second value it's used as default if the key does not
    exist, the third one can be a converter that takes a value and converts
    it.  If it raises :exc:`ValueError` or :exc:`TypeError` the default value
    is used. If no default value is provided `None` is used.

    Per default the property is read only.  You have to explicitly enable it
    by passing ``read_only=False`` to the constructor.
    """

    read_only = True

    def lookup(self, obj: "Request") -> "WSGIEnvironment":
        return obj.environ

class header_property(_DictAccessorProperty[_TAccessorValue]):
    """Like `environ_property` but for headers."""

    def lookup(self, obj: t.Union["Request", "Response"]) -> Headers:
        return obj.headers

class HTMLBuilder:
    """Helper object for HTML generation.

    Per default there are two instances of that class.  The `html` one, and
    the `xhtml` one for those two dialects.  The class uses keyword parameters
    and positional parameters to generate small snippets of HTML.

    Keyword parameters are converted to XML/SGML attributes, positional
    arguments are used as children.  Because Python accepts positional
    arguments before keyword arguments it's a good idea to use a list with the
    star-syntax for some children:

    >>> html.p(class_='foo', *[html.a('foo', href='foo.html'), ' ',
    ...                        html.a('bar', href='bar.html')])
    '
foo bar
'

    This class works around some browser limitations and can not be used for
    arbitrary SGML/XML generation.  For that purpose lxml and similar
    libraries exist.

    Calling the builder escapes the string passed:

    >>> html.p(html("<foo>"))
    '
<foo>
'

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1.
    """

    _entity_re = re.compile(r"&([^;]+);")
    _entities = name2codepoint.copy()
    _entities["apos"] = 39
    _empty_elements = {
        "area",
        "base",
        "basefont",
        "br",
        "col",
        "command",
        "embed",
        "frame",
        "hr",
        "img",
        "input",
        "keygen",
        "isindex",
        "link",
        "meta",
        "param",
        "source",
        "wbr",
    }
    _boolean_attributes = {
        "selected",
        "checked",
        "compact",
        "declare",
        "defer",
        "disabled",
        "ismap",
        "multiple",
        "nohref",
        "noresize",
        "noshade",
        "nowrap",
    }
    _plaintext_elements = {"textarea"}
    _c_like_cdata = {"script", "style"}

    def __init__(self, dialect):  # type: ignore
        self._dialect = dialect

    def __call__(self, s):  # type: ignore
        import html

        warnings.warn(
            "'utils.HTMLBuilder' is deprecated and will be removed in Werkzeug 2.1.",
            DeprecationWarning,
            stacklevel=2,
        )
        return html.escape(s)

    def __getattr__(self, tag):  # type: ignore
        import html

        warnings.warn(
            "'utils.HTMLBuilder' is deprecated and will be removed in Werkzeug 2.1.",
            DeprecationWarning,
            stacklevel=2,
        )
        if tag[:2] == "__":
            raise AttributeError(tag)

        def proxy(*children, **arguments):  # type: ignore
            buffer = f"<{tag}"
            for key, value in arguments.items():
                if value is None:
                    continue
                if key[-1] == "_":
                    key = key[:-1]
                if key in self._boolean_attributes:
                    if not value:
                        continue
                    if self._dialect == "xhtml":
                        value = f'="{key}"'
                    else:
                        value = ""
                else:
                    value = f'="{html.escape(value)}"'
                buffer += f" {key}{value}"
            if not children and tag in self._empty_elements:
                if self._dialect == "xhtml":
                    buffer += " />"
                else:
                    buffer += ">"
                return buffer
            buffer += ">"

            children_as_string = "".join([str(x) for x in children if x is not None])

            if children_as_string:
                if tag in self._plaintext_elements:
                    children_as_string = html.escape(children_as_string)
                elif tag in self._c_like_cdata and self._dialect == "xhtml":
                    children_as_string = f"/*<![CDATA[*/{children_as_string}/*]]>*/"
            buffer += children_as_string + f"</{tag}>"
            return buffer

        return proxy

    def __repr__(self) -> str:
        return f"<{type(self).__name__} for {self._dialect!r}>"

html = HTMLBuilder("html")
xhtml = HTMLBuilder("xhtml")

# https://cgit.freedesktop.org/xdg/shared-mime-info/tree/freedesktop.org.xml.in
# https://www.iana.org/assignments/media-types/media-types.xhtml
# Types listed in the XDG mime info that have a charset in the IANA registration.
_charset_mimetypes = {
    "application/ecmascript",
    "application/javascript",
    "application/sql",
    "application/xml",
    "application/xml-dtd",
    "application/xml-external-parsed-entity",
}

def get_content_type(mimetype: str, charset: str) -> str:
    """Returns the full content type string with charset for a mimetype.

    If the mimetype represents text, the charset parameter will be
    appended, otherwise the mimetype is returned unchanged.

    :param mimetype: The mimetype to be used as content type.
    :param charset: The charset to be appended for text mimetypes.
    :return: The content type.

    .. versionchanged:: 0.15
        Any type that ends with ``+xml`` gets a charset, not just those
        that start with ``application/``. Known text types such as
        ``application/javascript`` are also given charsets.
    """
    if (
        mimetype.startswith("text/")
        or mimetype in _charset_mimetypes
        or mimetype.endswith("+xml")
    ):
        mimetype += f"; charset={charset}"

    return mimetype

def detect_utf_encoding(data: bytes) -> str:
    """Detect which UTF encoding was used to encode the given bytes.

    The latest JSON standard (:rfc:`8259`) suggests that only UTF-8 is
    accepted. Older documents allowed 8, 16, or 32. 16 and 32 can be big
    or little endian. Some editors or libraries may prepend a BOM.

    :internal:

    :param data: Bytes in unknown UTF encoding.
    :return: UTF encoding name

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. This is built in to
        :func:`json.loads`.

    .. versionadded:: 0.15
    """
    warnings.warn(
        "'detect_utf_encoding' is deprecated and will be removed in"
        " Werkzeug 2.1. This is built in to 'json.loads'.",
        DeprecationWarning,
        stacklevel=2,
    )
    head = data[:4]

    if head[:3] == codecs.BOM_UTF8:
        return "utf-8-sig"

    if b"\x00" not in head:
        return "utf-8"

    if head in (codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE):
        return "utf-32"

    if head[:2] in (codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE):
        return "utf-16"

    if len(head) == 4:
        if head[:3] == b"\x00\x00\x00":
            return "utf-32-be"

        if head[::2] == b"\x00\x00":
            return "utf-16-be"

        if head[1:] == b"\x00\x00\x00":
            return "utf-32-le"

        if head[1::2] == b"\x00\x00":
            return "utf-16-le"

    if len(head) == 2:
        return "utf-16-be" if head.startswith(b"\x00") else "utf-16-le"

    return "utf-8"

def format_string(string: str, context: t.Mapping[str, t.Any]) -> str:
    """String-template format a string:

    >>> format_string('$foo and ${foo}s', dict(foo=42))
    '42 and 42s'

    This does not do any attribute lookup.

    :param string: the format string.
    :param context: a dict with the variables to insert.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use :class:`string.Template`
        instead.
    """
    from string import Template

    warnings.warn(
        "'utils.format_string' is deprecated and will be removed in"
        " Werkzeug 2.1. Use 'string.Template' instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    return Template(string).substitute(context)

def secure_filename(filename: str) -> str:
    r"""Pass it a filename and it will return a secure version of it.  This
    filename can then safely be stored on a regular file system and passed
    to :func:`os.path.join`.  The filename returned is an ASCII only string
    for maximum portability.

    On windows systems the function also makes sure that the file is not
    named after one of the special device files.

    >>> secure_filename("My cool movie.mov")
    'My_cool_movie.mov'
    >>> secure_filename("../../../etc/passwd")
    'etc_passwd'
    >>> secure_filename('i contain cool \xfcml\xe4uts.txt')
    'i_contain_cool_umlauts.txt'

    The function might return an empty filename.  It's your responsibility
    to ensure that the filename is unique and that you abort or
    generate a random filename if the function returned an empty one.

    .. versionadded:: 0.5

    :param filename: the filename to secure
    """
    filename = unicodedata.normalize("NFKD", filename)
    filename = filename.encode("ascii", "ignore").decode("ascii")

    for sep in os.path.sep, os.path.altsep:
        if sep:
            filename = filename.replace(sep, " ")
    filename = str(_filename_ascii_strip_re.sub("", "_".join(filename.split()))).strip(
        "._"
    )

    # on nt a couple of special files are present in each folder.  We
    # have to ensure that the target file is not such a filename.  In
    # this case we prepend an underline
    if (
        os.name == "nt"
        and filename
        and filename.split(".")[0].upper() in _windows_device_files
    ):
        filename = f"_{filename}"

    return filename

def escape(s: t.Any) -> str:
    """Replace ``&``, ``<``, ``>``, ``"``, and ``'`` with HTML-safe
    sequences.

    ``None`` is escaped to an empty string.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use MarkupSafe instead.
    """
    import html

    warnings.warn(
        "'utils.escape' is deprecated and will be removed in Werkzeug"
        " 2.1. Use MarkupSafe instead.",
        DeprecationWarning,
        stacklevel=2,
    )

    if s is None:
        return ""

    if hasattr(s, "__html__"):
        return s.__html__()  # type: ignore

    if not isinstance(s, str):
        s = str(s)

    return html.escape(s, quote=True)  # type: ignore

def unescape(s: str) -> str:
    """The reverse of :func:`escape`. This unescapes all the HTML
    entities, not only those inserted by ``escape``.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use MarkupSafe instead.
    """
    import html

    warnings.warn(
        "'utils.unescape' is deprecated and will be removed in Werkzueg"
        " 2.1. Use MarkupSafe instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    return html.unescape(s)

def redirect(
    location: str, code: int = 302, Response: t.Optional[t.Type["Response"]] = None
) -> "Response":
    """Returns a response object (a WSGI application) that, if called,
    redirects the client to the target location. Supported codes are
    301, 302, 303, 305, 307, and 308. 300 is not supported because
    it's not a real redirect and 304 because it's the answer for a
    request with a request with defined If-Modified-Since headers.

    .. versionadded:: 0.6
       The location can now be a unicode string that is encoded using
       the :func:`iri_to_uri` function.

    .. versionadded:: 0.10
        The class used for the Response object can now be passed in.

    :param location: the location the response should redirect to.
    :param code: the redirect status code. defaults to 302.
    :param class Response: a Response class to use when instantiating a
        response. The default is :class:`werkzeug.wrappers.Response` if
        unspecified.
    """
    import html

    if Response is None:
        from .wrappers import Response  # type: ignore

    display_location = html.escape(location)
    if isinstance(location, str):
        # Safe conversion is necessary here as we might redirect
        # to a broken URI scheme (for instance itms-services).
        from .urls import iri_to_uri

        location = iri_to_uri(location, safe_conversion=True)
    response = Response(  # type: ignore
        '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">\n'
        "<title>Redirecting...</title>\n"
        "
Redirecting...
\n"
        "
You should be redirected automatically to target URL: "
        f'{display_location}. If'
        " not click the link.",
        code,
        mimetype="text/html",
    )
    response.headers["Location"] = location
    return response

def append_slash_redirect(environ: "WSGIEnvironment", code: int = 301) -> "Response":
    """Redirects to the same URL but with a slash appended.  The behavior
    of this function is undefined if the path ends with a slash already.

    :param environ: the WSGI environment for the request that triggers
                    the redirect.
    :param code: the status code for the redirect.
    """
    new_path = environ["PATH_INFO"].strip("/") + "/"
    query_string = environ.get("QUERY_STRING")
    if query_string:
        new_path += f"?{query_string}"
    return redirect(new_path, code)

def send_file(
    path_or_file: t.Union[os.PathLike, str, t.IO[bytes]],
    environ: "WSGIEnvironment",
    mimetype: t.Optional[str] = None,
    as_attachment: bool = False,
    download_name: t.Optional[str] = None,
    conditional: bool = True,
    etag: t.Union[bool, str] = True,
    last_modified: t.Optional[t.Union[datetime, int, float]] = None,
    max_age: t.Optional[
        t.Union[int, t.Callable[[t.Optional[str]], t.Optional[int]]]
    ] = None,
    use_x_sendfile: bool = False,
    response_class: t.Optional[t.Type["Response"]] = None,
    _root_path: t.Optional[t.Union[os.PathLike, str]] = None,
) -> "Response":
    """Send the contents of a file to the client.

    The first argument can be a file path or a file-like object. Paths
    are preferred in most cases because Werkzeug can manage the file and
    get extra information from the path. Passing a file-like object
    requires that the file is opened in binary mode, and is mostly
    useful when building a file in memory with :class:`io.BytesIO`.

    Never pass file paths provided by a user. The path is assumed to be
    trusted, so a user could craft a path to access a file you didn't
    intend.

    If the WSGI server sets a ``file_wrapper`` in ``environ``, it is
    used, otherwise Werkzeug's built-in wrapper is used. Alternatively,
    if the HTTP server supports ``X-Sendfile``, ``use_x_sendfile=True``
    will tell the server to send the given path, which is much more
    efficient than reading it in Python.

    :param path_or_file: The path to the file to send, relative to the
        current working directory if a relative path is given.
        Alternatively, a file-like object opened in binary mode. Make
        sure the file pointer is seeked to the start of the data.
    :param environ: The WSGI environ for the current request.
    :param mimetype: The MIME type to send for the file. If not
        provided, it will try to detect it from the file name.
    :param as_attachment: Indicate to a browser that it should offer to
        save the file instead of displaying it.
    :param download_name: The default name browsers will use when saving
        the file. Defaults to the passed file name.
    :param conditional: Enable conditional and range responses based on
        request headers. Requires passing a file path and ``environ``.
    :param etag: Calculate an ETag for the file, which requires passing
        a file path. Can also be a string to use instead.
    :param last_modified: The last modified time to send for the file,
        in seconds. If not provided, it will try to detect it from the
        file path.
    :param max_age: How long the client should cache the file, in
        seconds. If set, ``Cache-Control`` will be ``public``, otherwise
        it will be ``no-cache`` to prefer conditional caching.
    :param use_x_sendfile: Set the ``X-Sendfile`` header to let the
        server to efficiently send the file. Requires support from the
        HTTP server. Requires passing a file path.
    :param response_class: Build the response using this class. Defaults
        to :class:`~werkzeug.wrappers.Response`.
    :param _root_path: Do not use. For internal use only. Use
        :func:`send_from_directory` to safely send files under a path.

    .. versionchanged:: 2.0.2
        ``send_file`` only sets a detected ``Content-Encoding`` if
        ``as_attachment`` is disabled.

    .. versionadded:: 2.0
        Adapted from Flask's implementation.

    .. versionchanged:: 2.0
        ``download_name`` replaces Flask's ``attachment_filename``
         parameter. If ``as_attachment=False``, it is passed with
         ``Content-Disposition: inline`` instead.

    .. versionchanged:: 2.0
        ``max_age`` replaces Flask's ``cache_timeout`` parameter.
        ``conditional`` is enabled and ``max_age`` is not set by
        default.

    .. versionchanged:: 2.0
        ``etag`` replaces Flask's ``add_etags`` parameter. It can be a
        string to use instead of generating one.

    .. versionchanged:: 2.0
        If an encoding is returned when guessing ``mimetype`` from
        ``download_name``, set the ``Content-Encoding`` header.
    """
    if response_class is None:
        from .wrappers import Response

        response_class = Response

    path: t.Optional[str] = None
    file: t.Optional[t.IO[bytes]] = None
    size: t.Optional[int] = None
    mtime: t.Optional[float] = None
    headers = Headers()

    if isinstance(path_or_file, (os.PathLike, str)) or hasattr(
        path_or_file, "__fspath__"
    ):
        path_or_file = t.cast(t.Union[os.PathLike, str], path_or_file)

        # Flask will pass app.root_path, allowing its send_file wrapper
        # to not have to deal with paths.
        if _root_path is not None:
            path = os.path.join(_root_path, path_or_file)
        else:
            path = os.path.abspath(path_or_file)

        stat = os.stat(path)
        size = stat.st_size
        mtime = stat.st_mtime
    else:
        file = path_or_file

    if download_name is None and path is not None:
        download_name = os.path.basename(path)

    if mimetype is None:
        if download_name is None:
            raise TypeError(
                "Unable to detect the MIME type because a file name is"
                " not available. Either set 'download_name', pass a"
                " path instead of a file, or set 'mimetype'."
            )

        mimetype, encoding = mimetypes.guess_type(download_name)

        if mimetype is None:
            mimetype = "application/octet-stream"

        # Don't send encoding for attachments, it causes browsers to
        # save decompress tar.gz files.
        if encoding is not None and not as_attachment:
            headers.set("Content-Encoding", encoding)

    if download_name is not None:
        try:
            download_name.encode("ascii")
        except UnicodeEncodeError:
            simple = unicodedata.normalize("NFKD", download_name)
            simple = simple.encode("ascii", "ignore").decode("ascii")
            quoted = url_quote(download_name, safe="")
            names = {"filename": simple, "filename*": f"UTF-8''{quoted}"}
        else:
            names = {"filename": download_name}

        value = "attachment" if as_attachment else "inline"
        headers.set("Content-Disposition", value, **names)
    elif as_attachment:
        raise TypeError(
            "No name provided for attachment. Either set"
            " 'download_name' or pass a path instead of a file."
        )

    if use_x_sendfile and path is not None:
        headers["X-Sendfile"] = path
        data = None
    else:
        if file is None:
            file = open(path, "rb")  # type: ignore
        elif isinstance(file, io.BytesIO):
            size = file.getbuffer().nbytes
        elif isinstance(file, io.TextIOBase):
            raise ValueError("Files must be opened in binary mode or use BytesIO.")

        data = wrap_file(environ, file)

    rv = response_class(
        data, mimetype=mimetype, headers=headers, direct_passthrough=True
    )

    if size is not None:
        rv.content_length = size

    if last_modified is not None:
        rv.last_modified = last_modified  # type: ignore
    elif mtime is not None:
        rv.last_modified = mtime  # type: ignore

    rv.cache_control.no_cache = True

    # Flask will pass app.get_send_file_max_age, allowing its send_file
    # wrapper to not have to deal with paths.
    if callable(max_age):
        max_age = max_age(path)

    if max_age is not None:
        if max_age > 0:
            rv.cache_control.no_cache = None
            rv.cache_control.public = True

        rv.cache_control.max_age = max_age
        rv.expires = int(time() + max_age)  # type: ignore

    if isinstance(etag, str):
        rv.set_etag(etag)
    elif etag and path is not None:
        check = adler32(path.encode("utf-8")) & 0xFFFFFFFF
        rv.set_etag(f"{mtime}-{size}-{check}")

    if conditional:
        try:
            rv = rv.make_conditional(environ, accept_ranges=True, complete_length=size)
        except RequestedRangeNotSatisfiable:
            if file is not None:
                file.close()

            raise

        # Some x-sendfile implementations incorrectly ignore the 304
        # status code and send the file anyway.
        if rv.status_code == 304:
            rv.headers.pop("x-sendfile", None)

    return rv

def send_from_directory(
    directory: t.Union[os.PathLike, str],
    path: t.Union[os.PathLike, str],
    environ: "WSGIEnvironment",
    **kwargs: t.Any,
) -> "Response":
    """Send a file from within a directory using :func:`send_file`.

    This is a secure way to serve files from a folder, such as static
    files or uploads. Uses :func:`~werkzeug.security.safe_join` to
    ensure the path coming from the client is not maliciously crafted to
    point outside the specified directory.

    If the final path does not point to an existing regular file,
    returns a 404 :exc:`~werkzeug.exceptions.NotFound` error.

    :param directory: The directory that ``path`` must be located under.
    :param path: The path to the file to send, relative to
        ``directory``.
    :param environ: The WSGI environ for the current request.
    :param kwargs: Arguments to pass to :func:`send_file`.

    .. versionadded:: 2.0
        Adapted from Flask's implementation.
    """
    path = safe_join(os.fspath(directory), os.fspath(path))

    if path is None:
        raise NotFound()

    # Flask will pass app.root_path, allowing its send_from_directory
    # wrapper to not have to deal with paths.
    if "_root_path" in kwargs:
        path = os.path.join(kwargs["_root_path"], path)

    try:
        if not os.path.isfile(path):
            raise NotFound()
    except ValueError:
        # path contains null byte on Python < 3.8
        raise NotFound()

    return send_file(path, environ, **kwargs)

def import_string(import_name: str, silent: bool = False) -> t.Any:
    """Imports an object based on a string.  This is useful if you want to
    use import paths as endpoints or something similar.  An import path can
    be specified either in dotted notation (``xml.sax.saxutils.escape``)
    or with a colon as object delimiter (``xml.sax.saxutils:escape``).

    If `silent` is True the return value will be `None` if the import fails.

    :param import_name: the dotted name for the object to import.
    :param silent: if set to `True` import errors are ignored and
                   `None` is returned instead.
    :return: imported object
    """
    import_name = import_name.replace(":", ".")
    try:
        try:
            __import__(import_name)
        except ImportError:
            if "." not in import_name:
                raise
        else:
            return sys.modules[import_name]

        module_name, obj_name = import_name.rsplit(".", 1)
        module = __import__(module_name, globals(), locals(), [obj_name])
        try:
            return getattr(module, obj_name)
        except AttributeError as e:
            raise ImportError(e)

    except ImportError as e:
        if not silent:
            raise ImportStringError(import_name, e).with_traceback(sys.exc_info()[2])

    return None

def find_modules(
    import_path: str, include_packages: bool = False, recursive: bool = False
) -> t.Iterator[str]:
    """Finds all the modules below a package.  This can be useful to
    automatically import all views / controllers so that their metaclasses /
    function decorators have a chance to register themselves on the
    application.

    Packages are not returned unless `include_packages` is `True`.  This can
    also recursively list modules but in that case it will import all the
    packages to get the correct load path of that module.

    :param import_path: the dotted name for the package to find child modules.
    :param include_packages: set to `True` if packages should be returned, too.
    :param recursive: set to `True` if recursion should happen.
    :return: generator
    """
    module = import_string(import_path)
    path = getattr(module, "__path__", None)
    if path is None:
        raise ValueError(f"{import_path!r} is not a package")
    basename = f"{module.__name__}."
    for _importer, modname, ispkg in pkgutil.iter_modules(path):
        modname = basename + modname
        if ispkg:
            if include_packages:
                yield modname
            if recursive:
                yield from find_modules(modname, include_packages, True)
        else:
            yield modname

def validate_arguments(func, args, kwargs, drop_extra=True):  # type: ignore
    """Checks if the function accepts the arguments and keyword arguments.
    Returns a new ``(args, kwargs)`` tuple that can safely be passed to
    the function without causing a `TypeError` because the function signature
    is incompatible.  If `drop_extra` is set to `True` (which is the default)
    any extra positional or keyword arguments are dropped automatically.

    The exception raised provides three attributes:

    `missing`
        A set of argument names that the function expected but where
        missing.

    `extra`
        A dict of keyword arguments that the function can not handle but
        where provided.

    `extra_positional`
        A list of values that where given by positional argument but the
        function cannot accept.

    This can be useful for decorators that forward user submitted data to
    a view function::

        from werkzeug.utils import ArgumentValidationError, validate_arguments

        def sanitize(f):
            def proxy(request):
                data = request.values.to_dict()
                try:
                    args, kwargs = validate_arguments(f, (request,), data)
                except ArgumentValidationError:
                    raise BadRequest('The browser failed to transmit all '
                                     'the data expected.')
                return f(*args, **kwargs)
            return proxy

    :param func: the function the validation is performed against.
    :param args: a tuple of positional arguments.
    :param kwargs: a dict of keyword arguments.
    :param drop_extra: set to `False` if you don't want extra arguments
                       to be silently dropped.
    :return: tuple in the form ``(args, kwargs)``.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use :func:`inspect.signature`
        instead.
    """
    warnings.warn(
        "'utils.validate_arguments' is deprecated and will be removed"
        " in Werkzeug 2.1. Use 'inspect.signature' instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    parser = _parse_signature(func)
    args, kwargs, missing, extra, extra_positional = parser(args, kwargs)[:5]
    if missing:
        raise ArgumentValidationError(tuple(missing))
    elif (extra or extra_positional) and not drop_extra:
        raise ArgumentValidationError(None, extra, extra_positional)
    return tuple(args), kwargs

def bind_arguments(func, args, kwargs):  # type: ignore
    """Bind the arguments provided into a dict.  When passed a function,
    a tuple of arguments and a dict of keyword arguments `bind_arguments`
    returns a dict of names as the function would see it.  This can be useful
    to implement a cache decorator that uses the function arguments to build
    the cache key based on the values of the arguments.

    :param func: the function the arguments should be bound for.
    :param args: tuple of positional arguments.
    :param kwargs: a dict of keyword arguments.
    :return: a :class:`dict` of bound keyword arguments.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use :meth:`Signature.bind`
        instead.
    """
    warnings.warn(
        "'utils.bind_arguments' is deprecated and will be removed in"
        " Werkzeug 2.1. Use 'Signature.bind' instead.",
        DeprecationWarning,
        stacklevel=2,
    )
    (
        args,
        kwargs,
        missing,
        extra,
        extra_positional,
        arg_spec,
        vararg_var,
        kwarg_var,
    ) = _parse_signature(func)(args, kwargs)
    values = {}
    for (name, _has_default, _default), value in zip(arg_spec, args):
        values[name] = value
    if vararg_var is not None:
        values[vararg_var] = tuple(extra_positional)
    elif extra_positional:
        raise TypeError("too many positional arguments")
    if kwarg_var is not None:
        multikw = set(extra) & {x[0] for x in arg_spec}
        if multikw:
            raise TypeError(
                f"got multiple values for keyword argument {next(iter(multikw))!r}"
            )
        values[kwarg_var] = extra
    elif extra:
        raise TypeError(f"got unexpected keyword argument {next(iter(extra))!r}")
    return values

class ArgumentValidationError(ValueError):
    """Raised if :func:`validate_arguments` fails to validate

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1 along with ``utils.bind`` and
        ``validate_arguments``.
    """

    def __init__(self, missing=None, extra=None, extra_positional=None):  # type: ignore
        self.missing = set(missing or ())
        self.extra = extra or {}
        self.extra_positional = extra_positional or []
        super().__init__(
            "function arguments invalid."
            f" ({len(self.missing)} missing,"
            f" {len(self.extra) + len(self.extra_positional)} additional)"
        )

class ImportStringError(ImportError):
    """Provides information about a failed :func:`import_string` attempt."""

    #: String in dotted notation that failed to be imported.
    import_name: str
    #: Wrapped exception.
    exception: BaseException

    def __init__(self, import_name: str, exception: BaseException) -> None:
        self.import_name = import_name
        self.exception = exception
        msg = import_name
        name = ""
        tracked = []
        for part in import_name.replace(":", ".").split("."):
            name = f"{name}.{part}" if name else part
            imported = import_string(name, silent=True)
            if imported:
                tracked.append((name, getattr(imported, "__file__", None)))
            else:
                track = [f"- {n!r} found in {i!r}." for n, i in tracked]
                track.append(f"- {name!r} not found.")
                track_str = "\n".join(track)
                msg = (
                    f"import_string() failed for {import_name!r}. Possible reasons"
                    f" are:\n\n"
                    "- missing __init__.py in a package;\n"
                    "- package or module path not included in sys.path;\n"
                    "- duplicated package or module name taking precedence in"
                    " sys.path;\n"
                    "- missing module, class, function or variable;\n\n"
                    f"Debugged import:\n\n{track_str}\n\n"
                    f"Original exception:\n\n{type(exception).__name__}: {exception}"
                )
                break

        super().__init__(msg)

    def __repr__(self) -> str:
        return f"<{type(self).__name__}({self.import_name!r}, {self.exception!r})>"


text:
Spartan Sees Private-Label Gains
Spartan Stores said yesterday that it saw private-label penetration increase to 24.65% on a unit-sales basis in the first quarter, up 1.83% over the year-ago period.
GRAND RAPIDS, Mich. — Spartan Stores here said yesterday that it saw private-label penetration increase to 24.65% on a unit-sales basis in the first quarter, up 1.83% over the year-ago period.
In a conference call discussing first-quarter financial results, Dennis Eidson, president and chief executive officer, said the company continues to add products to the entry-level Valu Time private label line, and promotes "around 250 items" from the line in many stores every week in the company's highly localized circulars.
Although comparable-store sales were down 1.8% for the quarter — excluding gas and the Easter sales increase — as reported Wednesday, customer counts were down less than half of 1%, Eidson noted.
"We feel pretty good about holding the customer count, particularly against the backdrop of what's going on in our state," he said, citing the bankruptcies of Chrysler and General Motors and the 15.4% unemployment rate — almost double the year-ago level. He also said unseasonable weather in Northern Michigan was dampening sales at the company's Glen's Market locations in the tourist-centered areas of northern Michigan.
The company is pleased with a test of a loyalty-card program at Glen's, however, describing it as "well-received."
TAGS: News Center Store
Whole Foods reportedly asking suppliers reduce their prices
Aldi opens new regional HQ in fast-growing region
Amazon hikes grocery delivery fees for Prime members
Sam's Club back in expansion mode

redpajama_set_name: RedPajamaCommonCrawl


Free Photography Flyer Templates Free Psd Flyer Template Free flyer psd templates and free print ready psd flyer designs templates ps. Photography brochure templates free flyer on awesome free flyer and poster mockups templates. Club flyer s free psd rtf pdf format downl with fashion photography flyer desi. Retro style flyer free psd format download on free and premium psd flyer design templates print ready. Free photography flyer templates psd template i with game of thrones party flyer templa.


Welcome to our used car online showroom. We are based in Bridgend and sell quality used cars. Please contact us to ask us your question.
EXCEPTIONALLY CLEAN AND WELL MAINTAINED EXAMPLE. NEW MOT AND FULLY SERVICED.
HONDA BUILD QUALITY AND RELIABILITY SHOWS WITH THIS CR-V. NEW MOT ON PURCHASE. ONE OWNER PLUS SUPPLYING DEALER.
DOCUMENTED SPEEDO CHANGE AT 31374 NOW SHOWING 30373 SO TOTAL MILEAGE 61747. Drives A1. NEW MOT AND FULLY SERVICED.
VERY HIGH SPEC R-SPORT WITH LOW MILEAGE.
HIGH SPEC MODEL. NEW MOT AND FULLY SERVICED.


text:
The best laid plans of mice and men…and Putin and his gold
Photo by Jingming Pan on Unsplash
If, like me, you're wondering how Russia can be so rich – its war chest constitutes $630 billion and nearly 2,300 tonnes of gold – and still be rendered poor, it's because our world is so interconnected.
The $630 billion is in assets and deposits denominated in the world's major currencies, ie the dollar, euro, sterling and the yuan. (Roughly, $60 billion of this may be forthcoming from the Chinese, but that's not guaranteed. Six days into the invasion of Ukraine, Beijing is hardly rushing to give Russia a bear hug.)
And then there's the gold. Russia's hoard is the sixth largest in the world. As of now, it would be worth more than $150 billion. The problem is the sanctions and the coordinated weight of them. The Chinese could buy some gold from Russia's central bank in return for swap lines, but the metal can't be sold in a main bullion centre such as London or Switzerland.
The Financial Times (FT) quotes metal traders to say that Russia's domestic gold producers such as Polymetal or Polyus are crippled by the sanctions on Russian banks. As they won't be able to deal with international bullion markets, Russian gold producers will have to turn to their central bank instead, to raise the roubles required for staff salaries and operational costs. The FT's Neil Hume writes that "this is something that has happened before, according to analysts."
And so to the best laid plans of mice and men…and Vladimir Putin. Russia's purchase of more than 1,200 tonnes of gold in the five years from the 2014 annexation of Crimea has turned out to be a liability. The idea was to reduce the exposure to US dollars but the unexpectedly tough and coordinated sanctions after the Ukraine invasion shows that war chests are only as good as the purpose for which they're used.
Author RashmeePosted on March 1, 2022 March 1, 2022 Categories blog, China, Commentary, European, London, Russia, USATags gold prices, Russian central bank, Ukraine war, Vladimir Putin


A number of years ago I began offering tele-therapy to clients. Sometimes we call it virtual therapy, or online counseling. We met via a phone call, FaceTime or Skype – whatever worked best for them. At first I had sessions with clients I had already been meeting with in my office, but who had moved away or were out of town and didn't want to miss our time together. Later I started meeting with clients who I never met in person.
Convenience – we can meet at a time and in a place that allows for ultimate flexibility. No commute to my office in traffic. My clients contact me from their homes, their offices, hotel rooms, and even their cars!
Some clients say it allows them to feel that the sessions are less intense and more relaxed, yet they feel a connection.
The ability to schedule sessions after the children are asleep, without needing to obtain childcare, to meet even when their car is in the shop, or their time is very tight.
The ability to work with me, even though it isn't geographically possible.
How does it work? We agree on the time and date of sessions, and the technology we'll use. We have a brief set up call to test and be sure we can connect. There are a few forms I send along; Consent For Treatment, Policies and Procedures, Initial Intake, and Authorization For Payment .(I accept Visa, MasterCard and American Express, and charge my Square account so that my clients get immediate notification.) For couples there are some additional forms to help get us started quickly.
Just as we would in person, we meet at a set time on a set day, and our sessions last 50 minutes, unless we agree otherwise in advance. With new couples I often schedule an initial double session. And, as always, I give couples homework to complete between sessions.
If this is of interest to you, I suggest you look through my website and see if you'd like to talk. Then call me at 408-410-4341, or email me at jm@judithmcfarland.com, and let me know if you have questions. Thanks for your interest!


I took a little break from the computer last week because we traveled to Michigan for our daughter's graduation. We aren't quite unpacked yet but we are slowly getting back to normal. I made Veggie Pad Thai last night and I'm soaking beans now. In a little while I'll cook a batch of rice to use in various recipes.
Even though I didn't take my computer I used my time off to plan and brainstorm. I have a couple dozen recipes I hope to show you over the next few months.
For now I'm focusing on berries and tomatoes!
Fresh berries are showing up in the stores. They are my breakfast inspiration.
And a new secret recipe that is in the works!
I'll be focusing on simple, mostly unprocessed foods for lunch.
Most of our meals with be oven-less for the next few months. That leaves the stove, Crock-Pot, and grill as viable options.
Nachos with Unfried Pinto Beans and Unfried Black Beans, Guacamole, Salsa, and Mexican Rice.
Veggie Burritos/Bowls with beans, rice, lettuce, tomatoes, salsa and guacamole.
If you need an idea for working more berries into your meals try my Blueberry Salad Dressing! It's oil-free and very kid-friendly!
I'm using lots of tomatoes lately. My garden is in production mode! I gave a friend all of my ripe tomatoes before our trip and came home to find about a dozen more ready to go. I even left 4 or 5 for the bugs and birds.
Is your garden coming together? I'd love to hear what you are growing and how you work it into your Meal Plan!
Wow….I would love to grow tomatoes and some veggies; however live in a condo and face North/Northwest and nothing grows. Ever;ything I have tried just dies so I envy your garden:) Great meal plan…very helpful. Thanks.


Get an alert with the newest ads for Basketball in St. John's.
Adidas size 7 basketball sneakers Were $150, selling for $50. In excellent condition, only been used indoors.
4 St. John's Edge tickets for sunday at 2pm seats Level U Section 109 row 14 seats 1 to 4.
Post your classified or want ad in St. John's Basketball. It's fast and easy.


Why 10.13.2 and not the latest 10.13.6 ComboUpdate???
VoodooHDA and disabler...more bad idea.
You've been told before: stay away from distros and make a full vanilla installation, we've got enough guides for this model as it is. If you insist on using that distro, why don't you seek support at Niresh?


text:
Q: Quote import from one org to another Can anyone tell me how can i import queues, case assignment rules and auto response rules from one salesforce org to another.

A: You can export from source Org using difference tools like dataloader , excel connector etc.
Ex. Select Id, SobjectType, QueueId, Queue.Name From QueueSobject
Thanks

redpajama_set_name: RedPajamaStackExchange


Sølvgade 36, 1tv. 1307 Kbh k.
Lives and works in Copenhagen Denmark.
Works across media, in materials such as wood, textile, photography, concrete.
2017 - Exhibition with Christina Winsløv.
2017 - Two sold "big scale" pieces on commission to University of Copenhagen.
2017 - Soloshow London,Kana Studio. Woodsculpture. Curater Destina Curtis.
2015 – Soloshow, Atelier Sara Gade. Woodsculpture.
2013 – Groupshow Atelier Sara Gade. Woodsculpture.
2015 – Book published. RedesignKids. Turbine.
2005 – Book published. Broderi. Embroidery for kids. Klematis.
RUM International, Elle décor, Carl Hansen & Sons, EgeTæpper, Wallpaper Magazine etc.


text:
Q: Why do you use reactjs children props? App.js
import Header from "./header";
export default function App() {
  return (

  );
}

Header.js
const Header = () => {
  return (

Hello World

  );
};
export default Header;

The code that was applied using "children props"
App.js
import Header from "./header";
export default function App() {
  return (

Hello World

  );
}

Header.js
const Header = ({children}) => {
  return (

      {children}

  );
};
export default Header;

I think I can just make it using 'props', so what is the reason for using 'children props'?

A: props.children is a special prop, automatically passed to every component, that can be used to render the content included between the opening and closing tags when invoking a component.
You can code it like this
const Header = (props) => {
  return
{props.children}
;
};

or
const Header = ({children}) => {
  return
{children}
;
};

This might be helpful: https://codeburst.io/a-complete-guide-to-props-children-in-react-c315fab74e7c

A: We sometimes use props or children to pass in values of strings, integers, boolean or etc. This helps to reduce the number of lines in one file and to make your code more readable.
The most important element is that you can reuse this component in your project. Reusability components save you time and extra lines of code.
I usually create reusable components for buttons, layouts, displays, Image Slider and etc. Below is the sample taken from you, but I've added children as props to accept any children's attributes.
const Header = ({children}) => {
  return (

      {children}

  );
};
export default Header;

A: This pattern of HTML is very familiar to us.
<select>
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
</select>

The thing is, this pattern shows the hierarchy of our components. In the same way in React, you can expose your component's hierarchy by children.
const Header = ({children}) => {
  return (

      {children}

  );
};
export default Header;

You can paint the same HTML with props of course, but this way is more declarative. As you can assume that anything wrapped by Header component will treat as children.
One more advantage of using children is that it can give you more reusability. You can find more information about composition in the official document.


text:
Amitabh Bachchan to begin shooting for Sooraj Barjatya's next in October; Read more
It was earlier reported that Amitabh Bachchan will be collaborating with filmmaker Sooraj Barjatya for a slice of the life story of friendship. The yet-to-be-titled movie will be bringing together critically acclaimed actors like Amitabh Bachchan, Anupam Kher, Boman Irani and Neena Gupta amongst others and the movie is expected to go on the floors in a month.
Featuring Amitabh in the lead alongside an ensemble cast of Anupam Kher, Boman Irani and Neena Gupta, Sooraj Barjatya will be exploring the bond of friendship with his next. The movie is scheduled for filming from October and the team will be flying to Nepal to shoot the same. Filmmaker Sooraj Barjatya, reportedly, has done a countrywide recce to find a suitable and safe environment for the shooting with veteran actors and the team has finalised a location in Nepal for a major chunk of the movie.
The team will be staying in the neighbouring country for over 40 days for the shooting of the movie in a strict bio bubble and necessary precautionary measures. The shoot will be following by brief schedules in Delhi and Mumbai. The movie will mark the first collaboration between Amitabh Bachchan and Sooraj Barjatya, and the filmmaker is excited to explore a different theme. The plot is reportedly close to the heart of Barjatya.
With no hiccups, the makers are expecting to wrap the filming by January next year and the movie is expected to have a theatrical release in the third quarter of 2022.
Download EntNetwrk App for more updates.
Sooraj Barjatya
Previous articleJacqueline Fernandez gets questioned by ED in money laundering case for 5 hours
Next articleDeepika Padukone to headline and co-produce cross-cultural romantic comedy; Deets inside


text:
The Hockey Museum recently received a 42-year-old document that has a particular resonance with contemporary events that are consuming the world's media today.
The document in question is a copy of Prime Minister Margaret Thatcher's letter of 19 February 1980 to Sir Denis Follows, CBE, Chairman of the British Olympic Association. The letter on 10 Downing Street headed notepaper was a response to the British Olympic Association's wish that the Moscow Olympic Games be moved away from Russia because of the Soviet Union's invasion of Afghanistan in December 1978. Prime Minister Thatcher's response was to advise British athletes to boycott the Moscow Olympic Games. She requested that the British Olympic Association should "accept the advice of the Government in this matter and reflect it in [their] response to the invitation of the Moscow Organising Committee to take part in the Games in Moscow".1
The Prime Minister (PM), in tones that are eerily familiar today, observed that the "Soviet invasion of Afghanistan on a flimsy pretext and its continued military occupation of a sovereign country violates all the principles governing relations between states and peoples". This commentary could apply equally to the situation in Ukraine today. The PM later stated that "for British athletes to take part in games this summer would be for them to seem to condone an international crime".2
Extract of the letter from Prime Minister Margaret Thatcher on 10 Downing Street headed paper.
Correspondence from The Hockey Museum's archives.
The Thatcher Government embarked on a press campaign to support the boycott of the 22nd Olympiad. Bernard Levin in The Times commented that "our athletes might win medals in Moscow, but they would be tarnished badges of shame". Subsequently the Government prohibited civil servants and serving members of the military to take leave to attend the Olympic Games.3 There are parallels in the Western nations' boycott of the Moscow Games in 1980 and today's economic sanctions being levied on Russian businesses and individuals linked to Vladimir Putin's regime. Similar pressures have been applied by governments to Western businesses to boycott Russia now, as were applied to the British Hockey Boards 42 years ago.
This governmental pressure led to the Great Britain Hockey Board (men) and the Women's Hockey Board of Great Britain and Ireland voting to withdraw from the Moscow Games on 22 March 1980. Both groups had met independently prior. Roger Self, Manager of Great Britain (GB) men, spoke to the Hockey Association (England) meeting the previous day and confirmed that the "entire [men's] squad under present political circumstances prevailing wanted to go to Moscow". The players saw the decision to be a "political one and not in the interests of the game".4 This stance pitted the men's players against their governing body which voted 25-6 to boycott the games despite the players' strong desire to participate.
Despite trenchant opposition, the boycott went ahead and hockey, along with yachting and the equestrian team, were the only British sports wholly absent from Moscow – other sports sent depleted teams.
The British men had missed out on qualification for the Montreal Games in 1976, so the Moscow boycott meant a whole generation missed the opportunity to play Olympic hockey. The Soviet Union's aggression also deprived the GB women of the prestige of taking part in the inaugural women's Olympic hockey tournament. Despite men's hockey having been an Olympic sport almost without exception since 1908, women's Olympic hockey had been forced to wait 72 years for admittance and, like the men, many elite players lost the chance to compete at an Olympic Games.
The Olympic Hockey Tournaments, Moscow 1980
Official poster from the Moscow Olympic Games of 1980, featuring Games mascot Misha.
Poster from The Hockey Museum's collection.
The inaugural women's Olympic hockey tournament was subsequently a depleted affair with most of the Western nations boycotting alongside Great Britain. It was played on a round-robin basis and in a spectacular result was won by Zimbabwe. Czechoslovakia and Soviet Union took the silver and bronze medals respectively. The sole group for the women's tournament also included India, Austria and Poland.
Zimbabwe women's hockey team celebrate their unexpected gold medal at the Moscow Olympic Games, 1980.
© Wikipedia RIA Novosti.
Zimbabwe's first Olympic gold and the forgotten hockey fairytale of 1980 | insidethegames.biz
The original format of the women's tournament (as would have been before teams boycotted) is not known, but initially GB men were selected in Group A along with Argentina, India, Kenya, Netherlands and Pakistan. After multiple countries pulled out, the men's tournament comprised of six nations – Spain, India, Soviet Union, Poland, Cuba and Tanzania. Spain topped the round-robin tournament only to lose 4-3 to India in the Gold Medal match. Spain's Juan Amat, competing in his fourth Olympic Games and the tournament's top scorer with 16 goals (8 goals in an 11-0 demolition of Cuba), scored a hattrick in a losing effort.
Ticket to the Olympic hockey tournament at the Dynamo Minor Arena, Moscow, 1980.
Despite the heroics of the competing nations, in Britain the Olympic hockey tournaments in Moscow will for ever be remembered for who was not there, and why.
Whilst the public support for a sporting boycott of Russia because of the Ukraine crisis remains strong and more importantly, both appropriate and proportionate, the hockey boycott of the Moscow Olympic Games by the GB women and men's teams remains a painful and, for many, a contentious issue 42 years on.
Ian G Jenkins, March 2022
NB. The research undertaken by Ian for this article unearthed considerable further material. Subsequently, Ian recognises the need for a more detailed study, including a thorough exploration of The Hockey Museum archives but also interviews with those involved or impacted by the Moscow 1980 Olympic boycott. If you have information or consider yourself a potential person of interest to Ian's ongoing research, please contact The Hockey Museum: Contact Us (hockeymuseum.net)
Letter from Margaret Thatcher to Dennis Follows, 19 February 1980 (The Hockey Museum Archives).
Riordan, J. Great Britain and the 1980 Olympics. Sports Relations and International Understanding (1982) pp 144-158 Vol 5 No 2.
Hockey Digest, Summer 1980. pp 5-7.
Oral Histories Referencing The Boycott Of The Moscow 1980 Olympic Games
The following oral history interviews available on The Hockey Museum website offer insight into the personal experiences of players, coaches and umpires in relation to the 1980 Olympic hockey boycott. You can search "Moscow" within each oral history and jump to the relevant point in each interview. Alternatively, listen to them in their entirety.
Anne Ellis (GB women's Captain) – Anne Ellis oral history | The Hockey Museum
Bernie Cotton (GB men's Captain) – Bernie Cotton oral history | The Hockey Museum
Chris Todd (FIH Umpire) – Chris Todd oral history | The Hockey Museum
Maggie Souyave (GB women's player) – Maggie Souyave oral history | The Hockey Museum
Richard Dodds (GB men's player) – Richard Dodds oral history | The Hockey Museum
Roger Self (GB men's Manger) – Roger Self oral history | The Hockey Museum


text:
Melbourne gym reopens, defying governor's orders
All of Brevard County's beaches and parking lots will reopen to the public. Gyms are not permitted to open in the first phase of reopening, but on Melbourne gym is being defiant, claiming they cater to private members.
MELBOURNE, Fla. - The owner of Harbor City Community Fitness and his team waited -- like we all did -- to hear from Governor Ron DeSantis about which businesses would be allowed to open in the first wave of Florida getting back to work.
Dani Hoddinott is the general manager and head coach at the Melbourn, Florida gym. She says they are not waiting for anyone's permission. The members-only facilty is taking appointments.
"Basically, we have been classified with businesses like movie theaters and bowling alleys -- public activities -- but we are not a public activity," she explains.
A sheriff's deputy stopped by and gave the gym a warning but no order to shut down and no one was arrested. Hoddinott says the work outs she leads for her clients aren't like the big commercial gyms.
"We're fighting the good fight, because people need to understand we are essential to health and wellness 100 percent!"
The workout stations are more than six feet apart from each other and there's no sharing. The gym has also put away its fans, and they've opened all of the garage doors. At each station, there is hand sanitizer and cleaning spray.
Hoddinott says if the Health Department or any state agency wants to inspect the place, Harbor City is not hiding in the shadows, but, they are not keeping the gym shuttered any longer.
"e've made sure that anybody who walks in is going to be 100% safe in what they're doing," she adds.
The gym is going so far as to write to the governor, -asking to be put in the category of Public Health establishment.


text:
El Orgullo loco () es un movimiento formado por usuarios, ex-usuarios y supervivientes de los servicios de salud mental y aliados, que tomando como ejemplo al colectivo LGBT y su trabajo contra el estigma y los prejuicios, reivindican la inclusión social y la igualdad de derechos para las personas con algún trastorno o enfermedad mental a través de una nueva, diferente y positiva identidad «loca».

El primer acto reivindicativo organizado por parte de personas auto-identificadas como usuarias, ex-usuarias y supervivientes de la psiquiatría y conocido con este nombre, tuvo lugar el 18 de septiembre de 1993 en la ciudad canadiense de Toronto como el "Día del Orgullo del Superviviente Psiquiátrico" (Psychiatric Survivor Pride Day). La protesta fue motivada por la discriminación hacia las personas con historial psiquiátrico que vivían en residencias institucionales en el área de Parkdale en la ciudad canadiense de Toronto, y, con excepción de 1996, cada año se ha celebrado un acto reivindicativo en dicha ciudad. Por la misma época surgió un movimiento similar en el Reino Unido. Para finales de los noventa, aparecieron movimientos similares bajo el nombre «Orgullo Loco» en distintos países del mundo, como Australia, Irlanda, Portugal, Brasil, Madagascar, Sudáfrica y Estados Unidos. Estas concentraciones y manifestaciones atraen a miles de participantes, según MindFreedom International, una organización internacional formada por grupos locales pro-derechos de las personas con trastornos mentales en 14 países que promueve, registra y difunde las acciones del movimiento.

El activismo del Orgullo Loco busca reapropiarse de términos y expresiones sensacionalistas habituales en la prensa y el lenguaje coloquial que tienen connotaciones negativas, tales como «loco», «pirado» y «enfermo mental», buscando eliminar las connotaciones negativas e irreales que rodean al colectivo. A través de campañas en redes digitales, medios de comunicación, actos en la calle e intervenciones en otros espacios, se exponen para el debate público los problemas y temas que afectan al colectivo: las causas de los trastornos mentales y las discapacidades psicosociales, la violencia sufrida en el sistema de atención, la alta tasa de suicidios o la reivindicación de reformas legales para la igualdad de derechos.

Historia
El primer evento conocido, organizado específicamente como evento del Orgullo por personas que se identificaron como sobrevivientes, consumidores o ex-pacientes de prácticas psiquiátricas, se llevó a cabo el 18 de septiembre de 1993, cuando se denominó "Día del Orgullo del Sobreviviente Psiquiátrico".

Fundadores
Los activistas fundadores del Orgullo loco en el Reino Unido fueron Simon Barnet, Pete Shaughnessy , Robert Dellar, quienes fallecieron desde entonces.

Libros y artículos
Orgullo loco: una celebración de la cultura loca registra el primer movimiento Orgullo loco. Por nuestra cuenta: alternativas controladas por el paciente al sistema de salud mental, publicado en 1978 por Judi Chamberlin, es un texto fundamental en el movimiento Orgullo loco, aunque se publicó antes de que se lanzara el movimiento.

Orgullo loco se lanzó poco antes de un libro del mismo nombre, Orgullo loco: Una celebración de la cultura loca, publicado en 2000. El 11 de mayo de 2008, Gabrielle Glaser documentó Mad Pride en The New York Times. Glaser declaró: "Así como los activistas por los derechos de los homosexuales reclamaron la palabra queer como una insignia de honor en lugar de un insulto, estos defensores se enorgullecen de llamarse locos; dicen que sus condiciones no les impiden tener vidas productivas".

Orgullo loco por país

España
El 20 de mayo de 2018 se celebró el primer Día del Orgullo Loco (Orgull Boig en Cataluña) en distintas ciudades del estado con numerosos medios de comunicación haciéndose eco del evento a nivel nacional y local en Asturias, Euskadi, Canarias, Andalucía, Castilla-La Mancha, León, Albacete. El lema elegido para esta primera edición fue "La locura lo cura".

Los actos tuvieron continuidad en 2019, ampliando las celebraciones a lugares donde no se había celebrado antes. La fecha cambiada al 1 de junio. El lema elegido este año fue "Derecho a ser libre, derecho a ser yo".

En 2021 se celebra el 29 de mayo después de un 2020 limitado a manifestaciones en redes digitales debido a la pandemia de COVID-19.

En enero de 2021, Orgullo Loco Madrid se hace eco de las protestas de un grupo de menores psiquiatrizados de Ciudad Real. Este grupo denunciaba a través de Twitter haber sufrido "trato inhumano y degradante" durante sus ingresos en la sección de psiquiatría infantil y juvenil del Hospital General Universitario de Ciudad Real. La denuncia llega a algunos medios donde se habla del maltrato institucional y se encuadra también dentro del escenario post-pandemia de la salud mental en menores. Posteriormente, a partir de los testimonios de Ciudad Real y de otros muchos motivados por la visibilización de aquel, Orgullo Loco Madrid crea una web donde recoge las denuncias.

Francia
En 2016, más de 200 personas marcharon en el desfile Mad Pride en París, llamando contra la discriminación de las personas con problemas de salud mental.

México
El 27 de julio de 2019 se llevó a cabo en la Ciudad de México, una marcha para celebrar el Día del Orgullo Loco, en el marco de la demolición del Manicomio General "La Castañeda". En su 1° edición, convocó SinColectivo, agrupación mexicana de personas expertas por experiencia en salud mental, quienes trabajan temas para eliminar el estigma hacia la locura, la salud mental y la neurodivergencia. El lema fue: "De viva voz por la locura y contra el estigma".

Nueva Zelanda
El Mad Pride también despega en 2017 en Nueva Zelanda, donde un grupo de maorís están retomando el control de sus diagnósticos de salud mental. Al igual que otros movimientos del Orgullo en todo el mundo, Mad Pride NZ toma etiquetas como locura y enfermedad que se han utilizado para estigmatizarlos y descartarlos, y los reclama como identidades positivas.

Reino Unido
Algunos de los fundadores del movimiento fueron Pete Shaughnessy (fallecido), Mark Roberts, Robert Dellar (fallecido en 2016) y Simon Barnet.

Influencia académica y cultural del Orgullo Loco

Estudios Locos
Los estudios locos surgieron del orgullo loco y el marco del sobreviviente psiquiátrico, y se enfocan en desarrollar el pensamiento académico sobre la "salud mental" por parte de académicos que se identifican a sí mismos como locos. Como se señaló en Mad Matters: a Critical Reader in Canadian Mad Studies,"Estudios locos puede definirse en términos generales como un proyecto de indagación, producción de conocimiento y acción política dedicado a la crítica y trascendencia de las formas de pensar, comportarse, relacionarse y ser centradas en lo psíquico".Los estudios locos proponen ofrecer "una discusión crítica sobre la salud mental y la locura de manera que demuestren las luchas, la opresión, la resistencia, la supresión y las perspectivas de las personas locas para desafiar la comprensión dominante de la 'enfermedad mental'"."Es un campo de activismo, teoría, praxis y erudición en crecimiento, en evolución, de múltiples voces e interdisciplinario".

Cultura Loca
La Cultura Loca (en inglés: Mad Culture) es el movimiento artístico que surge como rama cultural del movimiento social del Orgullo Loco. Es un movimiento cultural contemporáneo que busca desafiar el estigma asociado con la locura celebrando la creatividad y la diversidad de las personas con experiencias en primera persona en salud mental. La Cultura Loca abarca una amplia gama de prácticas artísticas. El movimiento se caracteriza por su rechazo a la hiper-medicalización de los problemas de salud mental y la patologización de las personas locas. En cambio, la Cultura Loca celebra las perspectivas y experiencias únicas de las personas locas y busca amplificar sus voces en el panorama cultural.

Orgullo loco y decolonialidad
El Orgullo Loco y la decolonialidad se cruzan en el campo de la salud mental de manera importante, ya que ambos movimientos buscan desafiar y desmantelar los sistemas de opresión y colonización que históricamente han marginado y silenciado a ciertos grupos de personas, como las locas y las racializadas. Ambos movimientos reconocen esta intersección promoviendo un enfoque politizado y equitativo.

El concepto médico de salud mental ha estado históricamente dominado por modelos de atención psiquiátrica centrados en Occidente, que se han impuesto en comunidades no occidentales de todo el mundo. Estos modelos a menudo no tienen en cuenta los contextos culturales, sociales y espirituales en la concepción de la locura y pueden no ser culturalmente apropiados o efectivos para personas de origen no occidental.

El Orgullo Loco desafía las estructuras de poder y las narrativas dominantes que han sido impuestas por el establishment médico y otras instituciones. De manera similar, la decolonialidad busca desafiar y desmantelar los modelos dominantes de atención psiquiátrica y tratamiento de salud mental que han sido impuestos por los poderes coloniales a las comunidades racializadas.

Healing Justice
Enmarcado en lo anterior, se encuentra el Healing Justice (Justicia Sanadora), un movimiento social y político que surgió en la década de los 70 en Estados Unidos y lo popularizó en los 90 Cara Page, de las intersecciones de la justicia social y las prácticas holísticas de sanación. Busca abordar las causas fundamentales del trauma individual y colectivo, y promover la sanación y el bienestar en comunidades marginadas.

El movimiento centra las experiencias y el conocimiento de aquellos que se han visto más afectados por la opresión sistémica, incluidas las personas racializadas, las personas queer, los inmigrantes y otros. Reconoce que la sanación individual y colectiva son componentes necesarios del trabajo de justicia social, y que el trauma y la opresión no pueden abordarse de manera efectiva sin abordar las causas profundas de estos problemas.

El movimiento Healing Justice promueve una variedad de prácticas curativas, que van desde la meditación hasta la protesta social. También prioriza la atención y el apoyo comunitarios, reconociendo la importancia de construir redes de atención y resiliencia frente a la opresión sistémica.

Orgullo loco y antipunitivismo
Hay un reconocimiento creciente entre algunos académicos críticos y activistas locos de que la psiquiatría ha funcionado históricamente como una política de mantenimiento del sistema penitenciario, de privación de libertad. Este punto de vista desafía la narrativa dominante en torno a la atención psiquiátrica como una forma benévola y necesaria de tratamiento médico para personas con enfermedades mentales y, en cambio, sugiere que se ha utilizado para justificar y perpetuar el control social y la opresión de ciertos grupos vulnerabilizados y contestatarios.

El sistema de privación de libertad se refiere a los diversos sistemas y estructuras que se han utilizado para controlar y subyugar a las personas que se consideran una amenaza para la sociedad o el statu quo. Esto incluye el complejo industrial penitenciario, el sistema de justicia juvenil y el internamiento psiquiátrico involuntario, entre otros.

Los críticos de la psiquiatría argumentan que el internamiento psiquiátrico involuntario ha funcionado históricamente como una herramienta de control social, utilizada para silenciar y subyugar a las personas que se consideran desviadas o que no se ajustan a las normas sociales. En muchos casos, las personas internadas involuntariamente en centros psiquiátricos no han cometido ningún delito, sino que se las considera una amenaza para el orden social debido a su estado de salud mental.

Además, los críticos argumentan que históricamente la psiquiatría se ha utilizado para justificar y perpetuar las desigualdades sociales, particularmente en lo que se refiere a raza, clase y género. Las personas que son pobres, racializadas o marginadas de otras maneras tienen más probabilidades de ser internadas involuntariamente y sujetas a tratamiento psiquiátrico coercitivo.

Desde este punto de vista, se defiende que la psiquiatría no es simplemente una forma neutral de tratamiento médico, sino que está profundamente entrelazada con sistemas más amplios de control social y opresión.

Véase también
 Movimiento de supervivientes de la psiquiatría
Estudios locos
Cultura Loca
Orgullo LGBT

Diversidad funcional

Referencias

Enlaces externos

 Orgullo Loco Madrid
 Toronto Mad Pride

Movimientos sociales
Activismo
Antipsiquiatría
Salud mental
Política identitaria
Introducciones de 1993

redpajama_set_name: RedPajamaWikipedia


An Emirates superjumbo in New York has been met by ambulances, police and disease control experts after passengers became unwell.
Dozens of vehicles surrounded the aircraft at JFK airport, with people on board reportedly coughing and feverish.
Experts from the Centers for Disease Control and Prevention were also on the scene.
The plane - a double-decker Airbus A380 - arrived in New York from Dubai this morning.
An airline statement said: "Emirates can confirm that about 10 passengers on #EK203 from Dubai to New York were taken ill.
refuel, and get it out of. jfk.
and 9 refused medical attention.
They should not have been allowed off the plane.
It does not say if they were Americans or 'tourists', but if they were 'tourists' ans refused, they should have been sent straight back to where they came from.
Give pandemics a chance! Peace&love, sista!
I was thinking "The Strain".
That plane landed at JFK too at the beginning of the book/show.
how far did it spread in the show?
In the Strain? It was a vampire making parasite. Took over the world. They launched nukes and caused a nuclear winter so they could be out all day, rounded up the surviving humans into blood farms, etc. Ended when the protagonist detonates another nuke on the head vampire.
lovely, one more reason to keep guns.
Guns did sod all against the vampires.
Depends on the mythology they're using - some myths hold that all the stake through the hesrt does is effectively comatise them. You then need to decaptiate them.
You could shoot them, like they tried in the book, but the results weren't that great because of the supernatural agility/strength and what not.
There was Vanilla Ice on the plane.
"The rapper chronicled the events on Twitter, writing, "I just landed from Dubai and now there is [sic] like tons of ambulances and fire trucks and police all over the place." The accompanying video shows him peering out of an airplane window.
He added that he was not on the affected floor of the double-decker plane. "Apparently there is [sic] over 100 people sick on the bottom floor, so happy I'm up top.""
Well that explains it. He must have been practicing his singing and the people on the lower deck heard it.
This was one of my favorite stories to read this year.
The twitter responses were gold.
Does this mean we can finally have our Zombie Apocalypse now?
Hurry up, before Disney makes another Star Wars movie!
Apparently another assassination attempt on a beloved celebrity with knowledge of the Deep State conspiracy! This time though....they MISSED. Beware the ire of Vanilla Ice!


text:
Q: What is difference between class variable and variable defined on class level What is the difference between class variable and variable defined on the class level?
say, bar is defined with @@ which means it's a class variable and will be accessible within all methods in class.
class Foo
  @@bar = 'bar'
end

so does bar without @@, so what is the difference..?
class Foo
  bar = 'bar'
end

A: Well, with your second option, bar is a local variable which gets out of scope when reaching the end. As such, it won't be accessible to any methods (class methods nor instance methods) of the class.
With that being said, in Ruby, there are class variables (@@bar which are shared between all child classes and their instances and instance variables (@bar) Since classes are also just objects in Ruby, you can also define an instance variable on class level (or more correctly: on the singleton class of your class). This can work like this:
class Foo
  def self.bar
    @bar
  end

  def self.bar=(value)
    @bar = value
  end
end

Compared to class variables, these instance variables on the singleton class are not accessible on Foo instances nor on child classes of Foo.

A: The @@bar will return the same variable to all instances of the class, not just the same variable to all methods in the class.
The way I think of class variables (@@variables) is as namespaced global variables. Their usage is just about as frowned upon as using global variables, but not quite since you are limiting the scope to within the code defined in your class.
Generally they would be used to track some kind of state across your application.
Let's say you had an object that needed to be able to identify its most recently instantiated sibling object.
One way to do that would be via a global variable:
class MyThing
  def initialize
    $latest_thing = self
  end

  def latest
    $latest_thing
  end
end

thing1 = MyThing.new
thing1.latest         # => thing1
thing2 = MyThing.new
thing1.latest         # => thing2
thing2.latest         # => thing2

Now, that uses a global variable which is generally perceived as bad practice, one of the reasons being for pollution of the global namespace and risk of naming collision and/or someone else changing it.
If you are dealing with a situation like this where you need this shared state between instances, but no one outside needs to know about it, then you can use the class variable exactly like a global:
class MyThing
  def initialize
    @@latest_thing = self
  end

  def latest
    @@latest_thing
  end
end

thing1 = MyThing.new
thing1.latest         # => thing1
thing2 = MyThing.new
thing1.latest         # => thing2
thing2.latest         # => thing2

That's just generally cleaner/safer/better encapsulated, since any 3rd party code can not simply do @@latest_thing = :something_else the way that they could do had a global been used.
Hope that helps. I think class variables are rarely used or encouraged in the wild, but on the rare occasion I've needed to use one it was for things like this.


text:
<?php

namespace CarnegieLearning\LdapOrmBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

/**
 * This is the class that validates and merges configuration from your app/config files
 *
 * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
 */
class Configuration implements ConfigurationInterface
{
    /**
     * {@inheritdoc}
     */
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('carnegie_learning_ldap_orm');

        $rootNode
            ->children()
                ->arrayNode('connection')
                    ->children()
                        ->scalarNode('uri')->cannotBeEmpty()->end()
                        ->booleanNode('use_tls')->defaultFalse()->end()
                        ->scalarNode('bind_dn')->cannotBeEmpty()->end()
                        ->scalarNode('password')->cannotBeEmpty()->end()
                        ->scalarNode('password_type')->defaultValue('plaintext')->end()
                        ->booleanNode('is_active_directory')->defaultFalse()->end()
                    ->end()
                ->end()
            ->end()
        ;

        return $treeBuilder;
    }
}

redpajama_set_name: RedPajamaGithub


Feature in Diario de las Americas: Sencillo de Gerardo Contino y Los Habaneros honra a varios países: La agrupación neoyorquina presenta "Siempre Latino", himno a la diversidad.
Album Review of "Somos Latinos" by Hector Aviles. Click here.
Album Review of "Somos Latinos" by George Velez, Jr. Click here.
New York Times write up on BAM Cuban concert: Click here.
Radio interview with Vicki Sola on Que Viva La Musica, 89.1FM. Click here for podcast.
Interview on NY1 Television in Spanish: Click here.
Interview with El Diario in NYC. To read full article online, please click here.
Write-up in Impacto NYC. To read full article, please click here.
Mention in Special Edition of French magazine, L'Express about "must see" shows in NYC. Click here to read article.


text:
"The Figure in the Landscape" at Elissa Cristall Gallery
ELISSA CRISTALL GALLERY is delighted to present "The Figure in the Landscape" featuring guest artist Liz Toohey-Wiese and gallery artists Sara Caracristi, Taralee Guild, Jessica Korderas, Jessie McNeil.
Opening reception: Saturday June 17th, 1 – 4pm *(South Granville ArtWalk)
Artist talk with Liz Toohey-Wiese: Saturday June 17th, 2pm
"The Figure in the Landscape" takes a look at the narrative in landscape painting and the contemporary relationships between identity and space. The narrative has long been an integral part of landscape painting whether portrayed in direct representation, in historical references or in memory of real and imaginary places. We seem to have a keen desire to connect with nature and the landscape and to connect with other than oneself. The works in the exhibition comprise painting, collage and cast resin sculptures. Jessica Korderas' sculptures are intricate dioramas depicting social situations in cabins and cottages – an icon of the Canadian landscape. In Caracristi's small acrylic and resin paintings, the figures exist in a non-landscape giving us no clue to where they may be. But, perhaps a clue to where they could be – leaving it entirely to the viewers' imagination.
"New and Recent Work" at Elissa Cristall Gallery
My first solo exhibition at Elissa Cristall Gallery will feature recent work as well as pieces from a brand new series entitled 'Cabins' where I play with identical spaces depicting wildly varied scenes to explore the differences and similarities between people's lives.
I chose the ubiquitous 'cabin' because they have such strong and wide ranging associations, and these works look at various tropes related to cabins. While the scenes are vastly different from piece to piece, the spaces are identical forcing them into the same world.
You can view a digital catalogue of the exhibition here.
© Jessica Korderas 2010 - 2017 all rights reserved


EAST RUTHERFORD, N.J. -- Most college football coaches believe that a player does not deserve to lose a starting job due to injury. However, that is exactly what happened to Navy fullback Alexander Teich last season. Teich started the initial five games of the 2009 campaign and performed capably before suffering a severely sprained ankle against Air Force. Vince Murray took over as the starter and proceeded to rush for 651 yards over the next five games. Murray exceeded the 100-yard mark in four straight contests, rumbling for a career-high 175 versus Wake Forest. Needless to say, Teich did not get his starting job back when he returned after sitting out two games. One year later, it's been a complete reversal of fortune. Murray went down with a knee injury against Wake Forest and has been replaced in the lineup by Teich. After what Teich has done in two consecutive starts, it is unlikely Murray will be re-installed as starter when he returns next week. Teich displayed a combination of speed and power in rolling up a career-high 210 yards rushing on 26 carries in Navy's 35-17 rout of Notre Dame. The 6-foot, 217-pound junior averaged 8.1 yards per carry and had a 31-yard touchdown reception. "It's a great feeling to have a game like that. I'm almost speechless," said Teich, who became the first fullback in Navy football history to surpass the 200-yard plateau. Teich, who surpassed his previous career-high of 95 yards set last week against Southern Methodist, was asked if there was some vindication to regaining the starting job then putting up big numbers. "It's nothing personal like that. I knew I could play ball," he said. "I just kept preparing like I was the starter so that I would be ready when my turn came." However, Navy head coach Ken Niumatalolo said the way Teich handled the undeserved demotion last year was a shining example of the selfless attitude all the players are asked to subscribe. "I'm very proud of Alex. He's a guy that typifies our team," Niumatalolo said. "He lost the starting job, but he didn't sulk, didn't complain. He accepted his role and waited his time. Now his time has come and he's done a great job." Teich single-handedly jump-started the Navy offense. The Midshipmen faced third-and-three from their own 10-yard line when Teich burst through a huge hole on the left side then turned on the jets to pull away from several chasing defenders en route to a career-best 54-yard run. Moments later, Teich made an even more impressive play -- reaching high with one hand to snare an off-target pass from quarterback Ricky Dobbs then barreling downfield for a 31-yard touchdown. Teich dove for the goal line, was nailed by a Notre Dame defender and flew into the end zone like a helicopter blade. That fullback screen was a great call by offensive coordinator Ivin Jasper and Navy had the blocking set up perfectly. However, the pass by Dobbs was a bit high and appeared like it would sail over Teich's head. "I get pretty excited whenever Coach Jasper calls the screen. He called it and I was like 'I can't let this ball hit the ground.' I did whatever I could to make a play," Teich said. Teich got stronger as the game wore on and personally wore down the Notre Dame defense, which must have gotten sick of seeing No. 39 pounding up the middle. The Texas native gained 66 yards on seven carries to key a 77-yard touchdown drive that gave Navy a commanding 35-10 lead. He had six runs of 12 yards or more with all but one coming in the second half. "It brought great joy to my heart to see Alex make plays like that," said Dobbs, who did a great job of reading the defense and knowing when to give to Teich on the triple-option. Center Brady DeMell did a terrific job of controlling Notre Dame nose guard Ian Williams, a 305-pounder who gave Navy fits the previous two seasons. Guards Josh Cabral and John Dowd double-teamed Williams at times in helping create gaping openings inside. "It was awesome to see how big the holes were. It makes your eyes light up," he said. Offensive wrinkles Notre Dame coaches and players talked afterward as though Navy did something dramatically different on offense. That was news to the Navy coaches and players, who said the team ran the triple-option offense as usual. Navy did do some things blocking-wise to confuse Notre Dame. Nothing was more effective than the heavy package the Midshipmen normally employ on the goal-line. Battipaglia would often line up alongside fellow tackle Ryan Basford to overload one side with three offensive linemen. "We ran a lot of stuff out of the heavy look and that seemed to give them problems," Battipaglia said. "In the end it came down to execution. We were just hitting on all cylinders today." Fans now know how much Navy missed slotback Aaron Santiago, who is probably the team's best blocker at that position. Santiago was charged with cutting off Notre Dame star linebacker and leading tackler Manti Te'o and did an admirable job. Meanwhile, Navy's receivers did a sound job of blocking the corners on the perimeter or crashing down to cut off linebackers. Head coach Brian Kelly admitted that Notre Dame was caught off-guard by the heavy formation. He said the Fighting Irish staff knew the unbalanced formation was designed to get the tackle to veer down on the linebacker, but could not counter-act it. "We were trying to make some adjustments on the fly. Navy is well-schooled in all variations and they need to be credited for their execution of the scheme they ran," Kelly said. "My hat goes off to Coach Niumatalolo and his staff. We had no answer for them today." Kelly was disappointed that his bigger, stronger, faster defenders were unable to still make tackles and slow down Navy's powerful rushing game. "You still have to win one-on-one matchups. It still comes down to taking on a block, being able to defeat a block," he said. Dobbs milestones Navy quarterback Ricky Dobbs reached several career milestones. The 6-foot-1, 203-pound senior rushed for 90 yards and along the way moved into eighth place on the school's all-time chart. Dobbs, who has 2,167 career yards, surpassed fullbacks Eric Kettani (2,091 yards, 2005-2008) and Adam Ballard (2,125, 2005-2007). He needs just seven yards to overtake former quarterback Alton Grizzard (1987-90) for seventh place. Dobbs also had three rushing touchdowns to run his career total to 43. He is tied with fellow quarterback Chris McCoy (1995-97) as Navy's career leader in that category.
Can Irish regain their staggered swagger?


text:
North Korea's Supreme Leader Makes Surprise Visit to China
The era of Chinese strategic patience with North Korea is over.
Posted by Leslie Eastman Tuesday, March 27, 2018 at 09:00am 17 Comments
Given the copious amounts of Stormy Daniels news published by American media, it is not surprising that a potentially intriguing development has almost flown completely under its radar.
It appears that the Supreme Leader of North Korea has made an unexpected visit to China, arriving in Beijing by train Monday.
Kim Jong Un made a surprise visit to Beijing on his first known trip outside North Korea since taking power in 2011, three people with knowledge of the visit said.
Further details of his trip, including how long Kim would stay and who he would meet, were not immediately available. The people asked not to be identified because of the sensitivity of the information.
…The unannounced visit is the latest in series of diplomatic power plays in Asia as U.S. President Donald Trump's battle to lower the U.S. trade deficit becomes entangled with his effort to get Kim to give up his nuclear weapons. Chinese President Xi Jinping has found himself preparing for a trade war with Trump even after supporting progressive rounds of United Nations sanctions against the Kim regime.
The Japanese press noted the special transportation arrangements associated with this high-level visit.
On Sunday, a special train that may have carried the official passed through the Chinese border city of Dandong, the sources said.
…In Beijing, a car with a diplomatic license plate of the North Korean Embassy was spotted Monday at the Great Hall of the People, a state building used for activities by the government and the Communist Party of China.
Severe traffic regulations were enforced in Beijing on Monday.
Hotels around the Sino-Korean Friendship Bridge linking Dandong with the North Korean town of Sinuiju have suspended reservations for rooms facing the North Korean side since Sunday, in an apparent move to prevent the train from being watched.
There is much speculation about the reason for this meeting.
…[S]ources close to the matter said the visit of the official was intended to improve ties between Beijing and Pyongyang that have been frayed by North Korea's pursuit of nuclear weapons and China's backing of tough sanctions against North Korea at the United Nations Security Council.
Speaking of that "trade war"…it appears to be off at the moment, with stocks rebounding accordingly.
I assert that Kim Jong Un is going to be treated to the Chinese version of the "New World Oder", which does not include North Korea's lobbying ICBM's toward valued Chinese trade partners.
I also believe that China now senses it can no longer use North Korean crazy against the United States effectively, so a united and economically healthy Korea might now be in its strategic interest.
In other words, the era of Chinese strategic patience with North Korea is over.
17 17 Comments North Korea, Trump China
North Korea, Trump China
rinardman | March 27, 2018 at 9:10 am
Or, maybe Kim just decided to go out for Chinese!
4th armored div | March 27, 2018 at 9:13 am
Looks like the weather is not so 'stormy' after all.
do you think that the Real Politic of POTUS DJT will affect the Muller Inquisition ?
are there ANY patriots left on the Left ?
snopercod in reply to 4th armored div. | March 27, 2018 at 3:28 pm
No. Next question…
bob sykes | March 27, 2018 at 9:31 am
From a Chinese viewpoint, the likelihood that North and South Korea might reach some sort of accommodation on trade and military issues threatens to complicate their own strategic problems. Xi needs to assure himself that Kim doesn't get a peace treaty with Moon and Trump that infringes Chinese interests.
Fen | March 27, 2018 at 9:37 am
"are there ANY patriots left on the Left?"
The term "patriot" is now problematic. Something something hegemonic something oppressive colonial something. Please report yourself to the nearest Indoc Center.
(does that answer your question?)
amwick | March 27, 2018 at 10:04 am
TY Leslie… this..
On an admittedly superficial level, I am amazed that Kim Jun Un seems to be swelling on a monthly basis. I have heard there is a food shortage in his country. I must be mistaken.
Merlin | March 27, 2018 at 10:11 am
The Pudge took a train to meet with Xi? Was the kingdom's finest donkey cart unavailable?
amwick in reply to Merlin. | March 27, 2018 at 10:28 am
Someone ate the donkey?
Redneck Law | March 27, 2018 at 10:35 am
There must be a woodshed in Bejing . . .
Andy | March 27, 2018 at 11:19 am
This theater act has everything to do with the trade war.
Trump has destroyed their playbook, now they are regrouping.
Mac45 | March 27, 2018 at 11:45 am
To early to tell exactly what this means. But, it would not serve the Chinese to have Kim suddenly go rogue again, after returning from China.
Humphrey's Executor | March 27, 2018 at 12:23 pm
On its face it appears Kim is secure enough in his position to leave home without fear of any Shenanigans. Too bad if that's the case.
Notanymore | March 27, 2018 at 12:50 pm
Funny the last Korean Leader to ride that train to China was almost killed on his return from China.
http://www.spacedaily.com/news/disaster-management-04c.html
Of course, it was not an assassination attempt.
Close The Fed | March 27, 2018 at 2:21 pm
I must say, Trump is outdoing all the presidents since Bush I, at least, and certainly better than Carter, Ford and Nixon.
Very poor competition. He's showing us what a "C" president should look like.
Now, if we could just get an "A."
TheFineReport.com in reply to Close The Fed. | March 27, 2018 at 10:28 pm
If this isn't an "A," you need to re-think your alphabet.
Year One List: 81 major Trump achievements, 11 Obama legacy items repealed:
https://www.washingtonexaminer.com/year-one-list-81-major-trump-achievements-11-obama-legacy-items-repealed
Henry Hawkins | March 27, 2018 at 7:51 pm
Might well be a Potemkin train, full of doubles, but no Kim.


After being the owner of a 2001 Honda Accord Ex, I was a ???little??? rusty on the process of buying a new car!! The folks at Union Park made my experience very easy and non-stressful. The staff was courteous, friendly, thoroughly explained all the details of my lease and went over all of the bells and whistles of my new vehicle. Thank you Union Park.....I simply love me new 2018 Honda CRV!!!??
Experience was very pleasant from the time I first walked in to Stillman, to discussing choices with Dave, to placing an order for a 2019, to delivery a few months later. Dave is friendly, accommodating and knowledgeable. I highly recommend him.
I really like the bells and whistles on this vehicle. I have received so many compliments on my car. I will purchase another Volvo in the future.
We just purchased our 5th Volvo vehicle from the dealership with Dave Parry. We are loyal customers and truly value the service and professionalism provided by everyone that we interact with at the dealership. Our 2004 S40 and 2010 XC60 have been serviced by Stillman and are still being driven by our grown children. I just purchased a new 2018 XC60 from Dave and highly praise his thoroughness, responsiveness and patience through the purchasing process. As always, thank you for your focus on satisfying your customers - the buying process was extremely seamless.
We had a great experience with Kyle Butler in sales and Holly Hopkins who helped us set up the new vehicle. I would definitely recommend Stillman Volvo based on our experience!
AWD with paddle shifters and 325 HP make this car a true 4 door sports car. Quick and nimble, this car is fun to drive with excellent gas mileage and comfortable to take on long trips. I had a 6 spd 911 which was awesome but this car is more fun to drive, very versatile and much less expensive up keep.
Absolutely worth the trip from NYC out to Stilman Volvo. Both Denise and Angelo were great. Everything was done in a matter of days. Will definitely be returning back here.
I purchased this Volvo because I had driven a similar model on vacation a year and a half ago and fell in love with it then. Although the acceleration speed does always bother my wife, the handling allows us to go on curvy roads and now her car sickness is almost non existent.
We really had a easy car buying experience at Stillman. Kyle was the best and got everything done quickly and without haggling. We definitely would buy from them again.
The place where everybody knows your name!
I had called and scheduled a Saturday appt with Paul a few days ago. I came in this morning to get my wifes 2017 s60 it's first service and inspection. I was recognized and greeted by Scott as I walked in the service department. I was the first customer and he was expecting me. After a brief chat, I went to the waiting room area to look at the new cars in the showroom. Shortly, Scott and Ted from sales arrived and also recognized/greeted me. As I left the dealer upon my car being completed, Brad said hello and wished me and my family a Happy Thanksgiving. I love how Stillman Volvo makes an effort to build relationships with their customers and to make them feel like part of the Stillman Volvo family. It's more than just a business/customer transaction like most dealers but rather a lifetime of care and safety from the cars down to the staff. I look forward to many years of getting my new Volvo serviced here. Stillman Volvo for life!
This car, which was purchased as a second car, made me change a 17 years relationship with another make and switch to an XC60 as a primary car, which is also excellent. And the dealership, Weston Volvo, is also excellent, not only at sales people, but mainly service.
Perfect on mountain passes and does great in Colorado snow, gets great gas mileage. Plenty of space for taking the mountain pups along, safe and reliable.
Comfortable, reliable, fast, refined. The Volvo S60 T6 is undeniably underrated. The T6 has a more exciting interior and engine then its T5 counterpart. Whereas German entry-entry level luxury sedans demand brand recognition the S60 T6 provides equal or better performance, style, and comfort in an unassuming fashion.
The car is stylish, comfortable, powerful, handles great, quiet, smooth, economical, comfortable, and up to date and is by far the best car I have ever owned.