The Hot Springs Village Property Owners Association trails committee elected new leadership, added three new members and said goodbye to a past chair and two other long-time members.
At the recent meeting, Ron Burns handed over the reins of the committee to new chair Laurie Hartshorn.
Carmelita Skoglund assumes duties assigned to the vice chair and Barbara Mueller is the new secretary.
POA board liaison Bill Roe thanked trails committee chair Ron Burns, members Dave Olson and Marilyn Hall for their dedication to the HSV trails systems and expressed his regret at their departure from the committee.
The three new members were approved at April's POA board of directors meeting: Pam Hartman, Sheryl Pickle and Janet Rowe.
Monthly trail condition reports indicate all HSV trails are in good to excellent condition. POA staff liaison Stacy Hoover discussed the details of last Wednesday's grand opening of the Nature Conservancy trail.
Hoover also touched upon the upcoming May 16 luncheon honoring participants involved in the current "Scavenger Hunt." The luncheon begins at noon on the Coronado Community Center's patio, weather permitting. More information on the event is forthcoming.
Another area of conversation included coordinating an education hike for the Cedar Mountain Boys and Girls Club. Dave Olson explained a guide is needed to provide information to children who wish to learn about the outdoors. Another agenda item involved tweaking the trails master plan.
The meeting was adjourned and immediately thereafter Bill Roe, POA board liaison, convened a special meeting for the purpose of electing new leadership for the 2017-2018 trails committee.
The committee meets the third Tuesday of each month at 1:30 p.m. in the Coronado Center and the public is encouraged to attend.


text:
"""This module implements the standard AFF4 Image."""
import logging
import struct
import zlib
from expiringdict import ExpiringDict

try:
    import snappy
except ImportError:
    snappy = None

from pyaff4 import aff4
from pyaff4 import lexicon
from pyaff4 import rdfvalue
from pyaff4 import registry
from pyaff4 import hashes

LOGGER = logging.getLogger("pyaff4")

class _CompressorStream(object):
    """A stream which chunks up another stream.

    Each read() operation will return a compressed chunk.
    """
    def __init__(self, owner, stream):
        self.owner = owner
        self.stream = stream
        self.chunk_count_in_bevy = 0
        self.size = 0
        self.bevy_index = []
        self.bevy_length = 0

    def tell(self):
        return self.stream.tell()

    def read(self, _):
        # Stop copying when the bevy is full.
        if self.chunk_count_in_bevy >= self.owner.chunks_per_segment:
            return ""

        chunk = self.stream.read(self.owner.chunk_size)
        if not chunk:
            return ""

        self.size += len(chunk)

        if self.owner.compression == lexicon.AFF4_IMAGE_COMPRESSION_ZLIB:
            compressed_chunk = zlib.compress(chunk)
        elif (snappy and self.owner.compression ==
              lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY):
            compressed_chunk = snappy.compress(chunk)
        elif self.owner.compression == lexicon.AFF4_IMAGE_COMPRESSION_STORED:
            compressed_chunk = chunk

        self.bevy_index.append(self.bevy_length)
        self.bevy_length += len(compressed_chunk)
        self.chunk_count_in_bevy += 1

        return compressed_chunk

class AFF4Image(aff4.AFF4Stream):

    @staticmethod
    def NewAFF4Image(resolver, image_urn, volume_urn):
        with resolver.AFF4FactoryOpen(volume_urn) as volume:
            # Inform the volume that we have a new image stream contained within
            # it.
            volume.children.add(image_urn)

            resolver.Set(image_urn, lexicon.AFF4_TYPE, rdfvalue.URN(
                lexicon.AFF4_IMAGE_TYPE))

            resolver.Set(image_urn, lexicon.AFF4_STORED,
                         rdfvalue.URN(volume_urn))

            return resolver.AFF4FactoryOpen(image_urn)

    def LoadFromURN(self):
        #volume_urn = self.resolver.Get(self.urn, lexicon.AFF4_STORED)
        #if not volume_urn:
        #    raise IOError("Unable to find storage for urn %s" % self.urn)

        self.lexicon = self.resolver.lexicon

        self.chunk_size = int(self.resolver.Get(
            self.urn, self.lexicon.chunkSize)  or 32*1024)

        self.chunks_per_segment = int(self.resolver.Get(
            self.urn, self.lexicon.chunksPerSegment) or 1024)

        sz = self.resolver.Get(self.urn, self.lexicon.streamSize) or 0
        self.size = int(sz)

        self.compression = str(self.resolver.Get(
            self.urn, self.lexicon.compressionMethod)  or
                               lexicon.AFF4_IMAGE_COMPRESSION_ZLIB)

        # A buffer for overlapped writes which do not fit into a chunk.
        self.buffer = ""

        # Compressed chunks in the bevy.
        self.bevy = []

        # Length of all chunks in the bevy.
        self.bevy_length = 0

        # List of bevy offsets.
        self.bevy_index = []
        self.chunk_count_in_bevy = 0
        self.bevy_number = 0

        self.cache = ExpiringDict(max_len=1000, max_age_seconds=10)

    def WriteStream(self, source_stream, progress=None):
        """Copy data from a source stream into this stream."""
        if progress is None:
            progress = aff4.DEFAULT_PROGRESS

        volume_urn = self.resolver.Get(self.urn, lexicon.AFF4_STORED)
        if not volume_urn:
            raise IOError("Unable to find storage for urn %s" %
                          self.urn)

        with self.resolver.AFF4FactoryOpen(volume_urn) as volume:
            # Write a bevy at a time.
            while 1:
                stream = _CompressorStream(self, source_stream)

                bevy_urn = self.urn.Append("%08d" % self.bevy_number)
                bevy_index_urn = bevy_urn.Append("index")

                progress.start = (self.bevy_number *
                                  self.chunks_per_segment *
                                  self.chunk_size)
                with volume.CreateMember(bevy_urn) as bevy:
                    bevy.WriteStream(stream, progress=progress)

                with volume.CreateMember(bevy_index_urn) as bevy_index:
                    bevy_index.Write(
                        struct.pack("<" + "L" * len(stream.bevy_index),
                                    *stream.bevy_index))

                # Make another bevy.
                self.bevy_number += 1
                self.size += stream.size
                self.readptr += stream.size

                # Last iteration - the compressor stream quit before the bevy is
                # full.
                if stream.chunk_count_in_bevy != self.chunks_per_segment:
                    break

        self._write_metadata()

    def Write(self, data):
        self.MarkDirty()
        self.buffer += data
        idx = 0

        while len(self.buffer) - idx > self.chunk_size:
            chunk = self.buffer[idx:idx+self.chunk_size]
            idx += self.chunk_size
            self.FlushChunk(chunk)

        self.buffer = self.buffer[idx:]

        self.readptr += len(data)
        if self.readptr > self.size:
            self.size = self.readptr

        return len(data)

    def FlushChunk(self, chunk):
        bevy_offset = self.bevy_length

        if self.compression == lexicon.AFF4_IMAGE_COMPRESSION_ZLIB:
            compressed_chunk = zlib.compress(chunk)
        elif (snappy and self.compression ==
              lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY):
            compressed_chunk = snappy.compress(chunk)
        elif self.compression == lexicon.AFF4_IMAGE_COMPRESSION_STORED:
            compressed_chunk = chunk

        self.bevy_index.append(bevy_offset)
        self.bevy.append(compressed_chunk)
        self.bevy_length += len(compressed_chunk)
        self.chunk_count_in_bevy += 1

        if self.chunk_count_in_bevy >= self.chunks_per_segment:
            self._FlushBevy()

    def _FlushBevy(self):
        volume_urn = self.resolver.Get(self.urn, lexicon.AFF4_STORED)
        if not volume_urn:
            raise IOError("Unable to find storage for urn %s" % self.urn)

        # Bevy is empty nothing to do.
        if not self.bevy:
            return

        bevy_urn = self.urn.Append("%08d" % self.bevy_number)
        bevy_index_urn = bevy_urn.Append("index")

        with self.resolver.AFF4FactoryOpen(volume_urn) as volume:
            with volume.CreateMember(bevy_index_urn) as bevy_index:
                bevy_index.Write(
                    struct.pack("<" + "L" * len(self.bevy_index),
                                *self.bevy_index))

            with volume.CreateMember(bevy_urn) as bevy:
                bevy.Write("".join(self.bevy))

            # We dont need to hold these in memory any more.
            self.resolver.Close(bevy_index)
            self.resolver.Close(bevy)

        # In Python it is more efficient to keep a list of chunks and then join
        # them at the end in one operation.
        self.chunk_count_in_bevy = 0
        self.bevy_number += 1
        self.bevy = []
        self.bevy_index = []
        self.bevy_length = 0

    def _write_metadata(self):
        self.resolver.Set(self.urn, lexicon.AFF4_TYPE,
                          rdfvalue.URN(lexicon.AFF4_IMAGE_TYPE))

        self.resolver.Set(self.urn, lexicon.AFF4_IMAGE_CHUNK_SIZE,
                          rdfvalue.XSDInteger(self.chunk_size))

        self.resolver.Set(self.urn, lexicon.AFF4_IMAGE_CHUNKS_PER_SEGMENT,
                          rdfvalue.XSDInteger(self.chunks_per_segment))

        self.resolver.Set(self.urn, lexicon.AFF4_STREAM_SIZE,
                          rdfvalue.XSDInteger(self.Size()))

        self.resolver.Set(
            self.urn, lexicon.AFF4_IMAGE_COMPRESSION,
            rdfvalue.URN(self.compression))

    def Flush(self):
        if self.IsDirty():
            # Flush the last chunk.
            self.FlushChunk(self.buffer)
            self._FlushBevy()

            self._write_metadata()

        return super(AFF4Image, self).Flush()

    def Read(self, length):
        length = int(length)
        if length == 0:
            return ""

        length = min(length, self.Size() - self.readptr)

        initial_chunk_id, initial_chunk_offset = divmod(self.readptr,
                                                        self.chunk_size)

        final_chunk_id, _ = divmod(self.readptr + length - 1, self.chunk_size)

        # We read this many full chunks at once.
        chunks_to_read = final_chunk_id - initial_chunk_id + 1
        chunk_id = initial_chunk_id
        result = ""

        while chunks_to_read > 0:
            chunks_read, data = self._ReadPartial(chunk_id, chunks_to_read)
            if chunks_read == 0:
                break

            chunks_to_read -= chunks_read
            result += data

        if initial_chunk_offset:
            result = result[initial_chunk_offset:]

        result = result[:length]

        self.readptr += len(result)

        return result

    # deserialise a v0a index (Michael's implementation)
    # the entries are the start offsets of bevvies and the length of
    # the final bevvy is inferred
    def deserializeIndexV0b(self, size, bytes):
        return struct.unpack(
            "<" + "I" * size, bytes)

    def _ReadPartial(self, chunk_id, chunks_to_read):
        chunks_read = 0
        result = ""

        while chunks_to_read > 0:
            r = self.cache.get(chunk_id)
            if r != None:
                result += r
                chunks_to_read -= 1
                chunk_id += 1
                chunks_read += 1
                continue

            bevy_id = chunk_id / self.chunks_per_segment
            bevy_urn = self.urn.Append("%08d" % bevy_id)
            bevy_index_urn = self.urn.Append("%08d/index" % bevy_id)

            with self.resolver.AFF4FactoryOpen(bevy_index_urn) as bevy_index:
                index_size = bevy_index.Size() / 4
                bevy_index_data = bevy_index.Read(bevy_index.Size())

                bevy_index_array = self.deserializeIndexV0b(index_size, bevy_index_data)

            with self.resolver.AFF4FactoryOpen(bevy_urn) as bevy:
                while chunks_to_read > 0:
                    r = self.cache.get(chunk_id)
                    if r != None:
                        result += r
                        chunks_to_read -= 1
                        chunk_id += 1
                        chunks_read += 1
                        continue

                    # Read a full chunk from the bevy.
                    data = self._ReadChunkFromBevy(
                        chunk_id, bevy, bevy_index_array, index_size)
                    self.cache[chunk_id] = data

                    result += data

                    chunks_to_read -= 1
                    chunk_id += 1
                    chunks_read += 1

                    # This bevy is exhausted, get the next one.
                    if bevy_id < chunk_id / self.chunks_per_segment:
                        break

        return chunks_read, result

    def _ReadChunkFromBevy(self, chunk_id, bevy, bevy_index, index_size):
        chunk_id_in_bevy = chunk_id % self.chunks_per_segment

        if index_size == 0:
            LOGGER.error("Index empty in %s: %s", self.urn, chunk_id)
            raise IOError("Index empty in %s: %s" % (self.urn, chunk_id))
        # The segment is not completely full.
        if chunk_id_in_bevy >= index_size:
            LOGGER.error("Bevy index too short in %s: %s",
                         self.urn, chunk_id)
            raise IOError("Bevy index too short in %s: %s" % (
                self.urn, chunk_id))

        # For the last chunk in the bevy, consume to the end of the bevy
        # segment.
        if chunk_id_in_bevy == index_size - 1:
            compressed_chunk_size = bevy.Size() - bevy.Tell()
        else:
            compressed_chunk_size = (bevy_index[chunk_id_in_bevy + 1] -
                                     bevy_index[chunk_id_in_bevy])

        bevy.Seek(bevy_index[chunk_id_in_bevy], 0)
        cbuffer = bevy.Read(compressed_chunk_size)
        if self.compression == lexicon.AFF4_IMAGE_COMPRESSION_ZLIB :
            return zlib.decompress(cbuffer)

        if snappy and self.compression == lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY or self.compression == lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY_SCUDETTE:
            return snappy.decompress(cbuffer)

        if self.compression == lexicon.AFF4_IMAGE_COMPRESSION_STORED:
            return cbuffer

        raise RuntimeError(
            "Unable to process compression %s" % self.compression)

# This class implements Evimetry's AFF4 pre standardisation effort
class AFF4PreSImage(AFF4Image):
    # deserialise a v4preS index
    # the entries are the end offsets of bevvies
    def deserializeIndexPreV4S(self, size, bytes):
        res = [0]
        while size > 0:
            size = size - 1
            rec = bytes[0:4]
            bytes = bytes[4:]
            (off,) = struct.unpack("<I", rec)
            res.append(off)

        return res

    def _ReadPartial(self, chunk_id, chunks_to_read):
        chunks_read = 0
        result = ""

        while chunks_to_read > 0:
            r = self.cache.get(chunk_id)
            if r != None:
                result += r
                chunks_to_read -= 1
                chunk_id += 1
                chunks_read += 1
                continue

            bevy_id = chunk_id / self.chunks_per_segment
            bevy_urn = self.urn.Append("%08d" % bevy_id)
            bevy_index_urn = self.urn.Append("%08d/index" % bevy_id)

            with self.resolver.AFF4FactoryOpen(bevy_index_urn) as bevy_index:
                index_size = bevy_index.Size() / 4
                bevy_index_data = bevy_index.Read(bevy_index.Size())

                bevy_index_array = self.deserializeIndexPreV4S(index_size, bevy_index_data)

            with self.resolver.AFF4FactoryOpen(bevy_urn) as bevy:
                while chunks_to_read > 0:
                    r = self.cache.get(chunk_id)
                    if r != None:
                        result += r
                        chunks_to_read -= 1
                        chunk_id += 1
                        chunks_read += 1
                        continue

                    # Read a full chunk from the bevy.
                    data = self._ReadChunkFromBevy(
                        chunk_id, bevy, bevy_index_array, index_size)
                    self.cache[chunk_id] = data

                    assert len(data) == self.chunk_size
                    result += data

                    chunks_to_read -= 1
                    chunk_id += 1
                    chunks_read += 1

                    # This bevy is exhausted, get the next one.
                    if bevy_id < chunk_id / self.chunks_per_segment:
                        break

        return chunks_read, result

    def _ReadChunkFromBevy(self, chunk_id, bevy, bevy_index, index_size):

        chunk_id_in_bevy = chunk_id % self.chunks_per_segment

        if index_size == 0:
            LOGGER.error("Index empty in %s: %s", self.urn, chunk_id)
            raise IOError("Index empty in %s: %s" % (self.urn, chunk_id))
        # The segment is not completely full.
        if chunk_id_in_bevy >= index_size:
            LOGGER.error("Bevy index too short in %s: %s",
                         self.urn, chunk_id)
            raise IOError("Bevy index too short in %s: %s" % (
                self.urn, chunk_id))

        bevvy_offset = bevy_index[chunk_id_in_bevy]
        compressed_chunk_size = bevy_index[chunk_id_in_bevy + 1] - bevvy_offset

        bevy.Seek(bevvy_offset, 0)
        cbuffer = bevy.Read(compressed_chunk_size)

        if self.compression == lexicon.AFF4_IMAGE_COMPRESSION_STORED or compressed_chunk_size == self.chunk_size:
            return cbuffer

        elif self.compression == lexicon.AFF4_IMAGE_COMPRESSION_ZLIB:
            return zlib.decompress(cbuffer)

        elif snappy and self.compression == lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY:
            return snappy.decompress(cbuffer)

        else:
            raise RuntimeError(
                "Unable to process compression %s" % self.compression)

    def readBlockHash(self, chunk_id, hash_datatype):
        bevy_id = chunk_id / self.chunks_per_segment
        bevy_blockHash_urn = self.urn.Append("%08d/blockHash.%s" % (bevy_id, hashes.toShortAlgoName(hash_datatype)))
        blockLength = hashes.length(hash_datatype)

        with self.resolver.AFF4FactoryOpen(bevy_blockHash_urn) as bevy_blockHashes:
            idx = chunk_id * blockLength

            bevy_blockHashes.Seek(idx)
            hash_value = bevy_blockHashes.Read(blockLength)

            return hashes.newImmutableHash(hash_value.encode('hex'), hash_datatype)

class AFF4SImage(AFF4Image):

    # deserialise a v4s index
    # the entries are the start offsets of bevvies and the length of
    # the final bevvy is inferred
    def deserializeIndexV4S(self, size, bytes):
        res = []
        while size > 0:
            size = size - 1
            rec = bytes[0:12]
            bytes = bytes[12:]
            (off, len) = struct.unpack("<QI", rec)
            res.append((off,len))

        return res

    def readBlockHash(self, chunk_id, hash_datatype):
        bevy_id = chunk_id / self.chunks_per_segment
        bevy_blockHash_urn = self.urn.Append("%08d.blockHash.%s" % (bevy_id, hashes.toShortAlgoName(hash_datatype)))
        blockLength = hashes.length(hash_datatype)

        with self.resolver.AFF4FactoryOpen(bevy_blockHash_urn) as bevy_blockHashes:
            idx = chunk_id * blockLength

            bevy_blockHashes.Seek(idx)
            hash_value = bevy_blockHashes.Read(blockLength)

            return hashes.newImmutableHash(hash_value.encode('hex'), hash_datatype)

    def _ReadPartial(self, chunk_id, chunks_to_read):
        chunks_read = 0
        result = ""

        while chunks_to_read > 0:

            r = self.cache.get(chunk_id)
            if r != None:
                result += r
                chunks_to_read -= 1
                chunk_id += 1
                chunks_read += 1
                continue

            bevy_id = chunk_id / self.chunks_per_segment
            bevy_urn = self.urn.Append("%08d" % bevy_id)
            bevy_index_urn = self.urn.Append("%08d.index" % bevy_id)

            with self.resolver.AFF4FactoryOpen(bevy_index_urn) as bevy_index:
                index_size = bevy_index.Size() / 12
                bevy_index_data = bevy_index.Read(bevy_index.Size())

                bevy_index_array = self.deserializeIndexV4S(index_size, bevy_index_data)

            with self.resolver.AFF4FactoryOpen(bevy_urn) as bevy:
                while chunks_to_read > 0:

                    r = self.cache.get(chunk_id)
                    if r != None:
                        result += r
                        chunks_to_read -= 1
                        chunk_id += 1
                        chunks_read += 1
                        continue
                    # Read a full chunk from the bevy.
                    data = self._ReadChunkFromBevy(
                        chunk_id, bevy, bevy_index_array, index_size)
                    self.cache[chunk_id] = data
                    result += data

                    chunks_to_read -= 1
                    chunk_id += 1
                    chunks_read += 1

                    # This bevy is exhausted, get the next one.
                    if bevy_id < chunk_id / self.chunks_per_segment:
                        break

        return chunks_read, result

    def _ReadChunkFromBevy(self, chunk_id, bevy, bevy_index, index_size):
        chunk_id_in_bevy = chunk_id % self.chunks_per_segment

        if index_size == 0:
            LOGGER.error("Index empty in %s: %s", self.urn, chunk_id)
            raise IOError("Index empty in %s: %s" % (self.urn, chunk_id))
        # The segment is not completely full.
        if chunk_id_in_bevy >= index_size:
            LOGGER.error("Bevy index too short in %s: %s",
                         self.urn, chunk_id)
            raise IOError("Bevy index too short in %s: %s" % (
                self.urn, chunk_id))

        (bevvy_offset, compressed_chunk_size) = bevy_index[chunk_id_in_bevy]

        bevy.Seek(bevvy_offset, 0)
        cbuffer = bevy.Read(compressed_chunk_size)

        if self.compression == lexicon.AFF4_IMAGE_COMPRESSION_STORED or compressed_chunk_size == self.chunk_size:
            return cbuffer

        elif self.compression == lexicon.AFF4_IMAGE_COMPRESSION_ZLIB:
            return zlib.decompress(cbuffer)

        elif self.compression == lexicon.AFF4_IMAGE_COMPRESSION_SNAPPY:
            return snappy.decompress(cbuffer)

        else:
            raise RuntimeError(
                "Unable to process compression %s" % self.compression)

registry.AFF4_TYPE_MAP[lexicon.AFF4_SCUDETTE_IMAGE_TYPE] = AFF4Image
registry.AFF4_TYPE_MAP[lexicon.AFF4_LEGACY_IMAGE_TYPE] = AFF4PreSImage
registry.AFF4_TYPE_MAP[lexicon.AFF4_IMAGE_TYPE] = AFF4SImage

redpajama_set_name: RedPajamaGithub


Do you automatically assume that calling a locksmith means that you have an emergency situation on your hands, or that you've lost your keys?
That is common, certainly, but a trusted locksmith can actually help you with a number of other needs around your home, including some rather important home improvement projects. What might you ask a locksmith to help with?
When you think about access to your home, you definitely think about the doors, but what about your windows? Even windows on second floors can be access points if an intruder has the means to reach them, such a ladder, a conveniently placed tree, or even a tall trellis. A locksmith can help secure your windows to improve your security and also boost the value of your home on the market.
Not all door locks are created equal. Yes, there are simple locks and complex ones, but there are also low-end and high-end locks. A professional locksmith will be able to install high-end, high-tech locks on your home. For instance, you might choose to have a keyed lock that also operates with a touchpad.
You might choose to integrate additional technology with your door locks, such as a fingerprint reader. The right locksmith will be able to explain your options and help you build the right lock system for your needs.
While keyed locks are important for homeowners as well as potential buyers, other locks are also important. Deadbolts offer a significant layer of additional protection and peace of mind, and they cannot be picked easily.
When most people think about locksmiths, they picture physical locks. That's for good reason – they're definitely a locksmith's stock in trade. However, modern technology offers a great deal of additional protection.
A leading locksmith can help you choose a home security system and can also help set it up so that you get the peace of mind that only comes from professional installation and configuration. This helps you avoid things like misaligned sensors, but also ensures that everything works together perfectly, from the window alarms to any video cameras and alarmed doors.
Does your home have unique doors with oddly sized installation points for doorknobs and locks? If so, you know the challenge involved with just finding locks and knobs to fit your door. A trusted locksmith can offer custom locks that will fit your doors and allow you to use existing hardware, as well as avoid modifying unique or heritage doors.
In the end, working with a locksmith is an ideal solution for anyone, whether you need repairs to your locks, new locks installed, or want to investigate your options when it comes to alarm systems and other technological advancements. You should get in touch with your local locksmith for further information.


Family is extremely important to the seniors surveyed.
Nowadays, children are leaving home later and later, with many people essentially cohabiting with their parents. In the opinion of seniors, intergenerational bonds are both unbreakable and meaningful.
Some 80 % of the seniors surveyed for L'Observatoire Cetelem are parents. 43 % of those aged between 50 and 60 still have a child living under their roof. In the age group above, 17 % of 60 to 75 year olds share their home with one of their children.
5 % of seniors also live with one of their parents or parents-in-law. This is relatively unusual in Europe, as the latter tend to have their own separate accommodation. 40 % of seniors therefore have at least one parent with their own home (Fig. 10).
Intergenerational cohabitation is not new in Europe. However, for the last few years, the age at which children leave home has been rising. According to a Eurostat survey published in 2015 (Fig. 11), young Europeans now leave at an average age of 26. Indeed, lengthening periods of education, the struggle to find employment and the fact that individuals are starting relationships later all serve to delay the age at which young adults begin to stand on their own two feet.
The crisis has done little to overhaul cultural differences in Europe. In fact, quite the contrary. Intergenerational cohabitation between parents and children, and even between grandparents, parents and children, is now more common in Mediterranean countries such as Italy, Spain and Portugal. In Spain, where children leave the family home at an average age of 29, 57 % of seniors state that they still have a child living at home, almost double the European average! They are also twice as likely than average to have parents or parents-in-law living under their roof. The figures for Portugal are similar. The same is true in Eastern European countries such as Romania, Slovakia, Hungary and Poland, where children live in their parents' home for longer.
Further north, the Scandinavian model, which is built upon a highly protective welfare state, frees seniors from excessive constraints when it comes to supporting their (grown-up) children and elders. Indeed, Denmark is the country where living with adult children is least common, with offspring leaving home at an average age of 21.
In Germany and the United Kingdom, intergenerational solidarity is clearly less engrained in people's mindsets, despite the fact that employees can now receive considerable support from their employers (family care leave, reduction in working hours) to look after loved ones who are sick or nearing the end of their lives. It should be noted, however, that 13 % of over 65s in OECD countries live beneath the poverty line (Fig. 12).
Fig. 11 Do you have children, grandchildren, great grandchildren, parents or parents-in-law living in your home?
Source: Eurostat, L'Observatoire Cetelem de la Consommation 2016; scope: 50-75 year olds.
Source: OECD, Pensions at a Glance 2013.
After the children have left home, family solidarity lives on. Almost 80 % of Europe's seniors occasionally or regularly contribute to the expenses or savings of their children or grandchildren (Fig. 13).
If we look at the breakdown, 63 % help their children with day-to-day expenses once they have left home (food shopping, education, pocket money, etc.). 56 % give them a financial "helping hand" when it comes to purchasing the equipment they need. These two figures highlight the decisive contribution seniors make to the spending of younger generations!
In addition, more than a third of them help their children or grandchildren cover their accommodation costs, as these tend to be the biggest drain on their budget. They also contribute significantly to their children's savings (52 %).
Almost two in five seniors with at least one living parent offer them financial support, either occasionally or regularly (Fig. 14). As with their children, this support relates primarily to day-to-day living expenses and purchases of new equipment. To a lesser extent, it also contributes to accommodation expenses and savings. It tends to increase as parents near the end of their lives, chiefly to cover medical, home adaptation and palliative care costs.
Indeed, while social security systems in most parts of Europe are seeking to restructure in order to cover part of the costs relating to elderly dependence, in the majority of cases the needs of aged dependants are met by family members. Not only does this represent a considerable outlay for providers of support, a third of them also give more than 20 hours of their time per week, according to the OECD. Fifty-somethings are on the front line of this generational solidarity, with more than half stating that they have at least one parent, parent-in-law or grandparent nearing the end of their life.
Financial ties between seniors and their children, on the one hand, and their parents, on the other, are much stronger in Southern and Eastern Europe. Contributions to the accommodation expenses of children who have left home are more common in Spain, Portugal and Poland, countries in which the path to employment is strewn with obstacles. The unemployment rate of individuals aged under 25 is particularly high in Spain, where it reached 49 % in 2015, and in Portugal, where it stood at 32 % (compared with an average of 20 % in Europe, source: Eurostat).
Contributions to the day-to-day expenses of elderly parents are more common in Romania, Hungary and the Czech Republic. This kind of financial support for our elders is less common in Germany, France and the United Kingdom, where the living standards of the older generations make it much less of a necessity.
Providing financial support to the generations above them (Fig. 15) and below them (Fig. 16) is important to the vast majority of seniors. All feel that it is a moral duty, whether they offer occasional or regular financial help to their loved ones.
In France, where intergenerational financial support is less prevalent than elsewhere, seniors nevertheless state that they are very attentive to the needs of their parents and children. Not providing financial help does not mean neglecting! While instilling responsibility is the dominant approach in Western and Northern Europe, seniors retain a benevolent attitude towards their loved ones (Fig. 17).
The professional and personal circumstances of children and grandchildren is a preoccupation for almost two-thirds of European seniors (64 %) (Fig. 18). Once again, the degree of concern displayed varies according to each country's economic situation. Thus, the Spanish, Portuguese, Italians and French declare that they are "very concerned", while the Germans and British are less worried about their descendants.
Fig. 15 How important do you believe it is to provide financial support to your parents, parents-in-law or grandparents?
Fig. 16 How important do you believe it is to provide financial support to your children, grandchildren or great grandchildren?
Fig. 17 Are you concerned about your children's future professional and personal circumstances?
Fig. 18 Are you concerned about the well-being and personal circumstances of your parents, parents-in-law or grandparents?
The intergenerational relationships forged ultimately mean that seniors play a major social role. Initially exercised alongside their profession, this key role makes it easier to embrace retirement. Being able to contribute enriches the lives of seniors who are still active and very keen to be involved. Two-thirds of them declare that being surrounded by their loved ones is essential to growing old happily. They devote time to them, with more than half seeing their family more than once a week. Two countries stand apart: Italy, where it is rare that a week goes by without seniors spending time with their family. Germany, where seniors see less of their loved ones.
Read again : Seniors: who are they?


text:
Q: MultiThreading, AsyncTask and UI thread I am developing an app in which I am playing multiple videos at a time. Also performing some operations at same time.
Now I am successful in running 2 videos at a time using VideoView by having reference from here and here.
Both options are working fine for me. But my question is, is it safe to play 2 videos at a time on UI thread or shall I go with option creating threads and playing them separately or shall I use AsyncTask or is it safe to use UI thread directly?? And please tell me the difference of using all 3 approaches.

A: when you play a video it does decoding, buffering in background. It doesn't do this work on UI thread. You probably only need to call start() function on UI thread.

redpajama_set_name: RedPajamaStackExchange


The first fixture between likely rivals for the Premier League title comes on the second weekend, August 19 and 20, when Spurs mark their first home match at Wembley by taking on London rivals Chelsea.
It then gets more hard for Antonio Conte and his team, which takes on Tottenham in the second round before games against Leicester away and Manchester City, Arsenal and Everton at home as part of their first seven games.
The six games due to come after United's Champions League group games are: Everton at home; Crystal Palace at home; Huddersfield Town away; Chelsea away (!); Brighton & Hove Albion at home; Manchester City at home (!).
Rafael Benitez's men beat Spurs 5-1 at St James' Park the last time they played a Premier League game.
Three weeks before that sees a mouthwatering couple of derbies with Liverpool hosting Everton and the Manchester derby - Pep Guardiola's City travelling to take on Jose Mourinho's United at Old Trafford.
Everton host Stoke, Southampton face Swansea and West Brom are at home to Bournemouth in the other opening day matches.
It's powered by an A8 processor that Apple says helps it tap into the cloud and provide the best audio experience in your room. It has been tested by some Apple employees in their homes for upwards of a year, according to people familiar with the matter.
United kick off their campaign with a home game against Tottenham Hotspur, last season's runners-up.
The first Manchester derby of the season takes place at Old Trafford on the weekend of 9 December, while the reverse fixture will take place on April 7, 2018.
The festive programme is typically packed, with a full round of fixtures two days before Christmas.
Arsene Wenger's side opening group stage fixture is scheduled for September 14 with a trip to Stamford Bridge, where they're not won in their last five visits, several days later. Though the season is still two months away and the preseason is just a little under one month away - Chelsea are set to reconvene at Cobham on July 7th, according to a few fragments of tabloidy news - we can now at least have something concrete to look forward to.
Tottenham's hopes of going one better and winning the Premier League title depend on quickly making Wembley feel like home and they must have prayed for a relatively kind start at the national stadium.
Mourinho will, though, be grateful of a home game on the opening day with the Super Cup against Real Madrid in Macedonia scheduled for August 8. In contrast, Manchester City, Leicester and Stoke are away in all three rounds.
Will Nevada Be the First State to Adopt 'Medicaid for All'?
But I can honestly say my motivation was always what I believed to be in the best interest of the Irish people", he said. Varadkar's policies are primarily viewed as centre-right based on his socio-economic views.
A New Jersey native & Rutgers University graduate who firmly believes it's better to be lucky than good. In recent years, bicyclists in NY have said city leaders have not done enough to protect riders.
There is an exploration part of the Mario + Rabbids: Kingdom Battle that is similar to the standard 3D Mario game. Mario + Rabbids: Kingdom Battle is set for release on August 29th 2017.
If a big club in the Premier League knocks it might be a different story, the club is so realistic also. An announcement on Monk's backroom staff is set to be made later in the week.
And he is dismissing as "a load of nonsense" the idea that Russian Federation has damaging information on President Donald Trump . He, however, suggested that private Russian hacker with "patriotic leanings" could have been involved.
The Conservatives won 318 seats - eight less than it needed in order to secure a majority. Downing St. said the Cabinet will discuss the agreement on Monday.
After the election, the right-wing UK Independence Party, which helped drive Brexit , was left with no seats in Parliament. Instead of opting for a post-election shuffle, the Prime Minister retained key figures in her cabinet.
And so we head back to Nashville, where you know it's going to be nuts. "You're in the Cup final, this is what it's all about". Preliminary returns for the game, which saw the Penguins hammer the Predators 6-0, have it leading the night by most measures.
Meanwhile, Russia's foreign minister called for dialogue to resolve the crisis. The list included members of the ruling family.
On Thursday, authorities said the assailants were Iranian nationals and they had arrested six suspects, including one woman, since the attacks.
The question remains how the men met and knew one another but police said Saturday they did not suspect a wider plot. Identical knives, with the brand name Ernesto, were carried by Rachid Redouane, 30, and 22-year-old Youssef Zaghba.
Like Matta, he a coach of the Bulldogs before being hired by the Buckeyes , so there is something in common with his predecessor. Steele has been an outstanding recruiter for XU; his IN ties helped the Muskeeters land All-America candidate Trevon Bluiett.
Evan Jenkins, R-W.Va., knocked committee members as grandstanding and stopped just short of calling Comey a liar. But Trump supporters can argue that the president's hand was strengthened by Thursday's "Super Bowl" hearing.
Trump, also taking Laffer's advice, has proposed a special tax rate of just 15 percent for pass-through business income. The disparate tax burdens stem in part from the fact that Kansas relies on sales taxes for much of the state's revenue.
Harnering was one of several on a bus carrying students on their way to the airport for a mission trip to Botswana. The National Transportation Safety Board said it was gathering information but hadn't yet chose to launch a team.


text:
FILE - In this Sept. 10, 2017, file photo, Los Angeles Angels' Mike Trout is greeted in the dugout after hitting a solo home run in the first inning of a baseball game against the Seattle Mariners in Seattle. A person familiar with the negotiations tells The Associated Press Tuesday, March 19, 2019, that Trout and the Angels are close to finalizing a record $432 million, 12-year contract that would shatter the record for the largest deal in North American sports history. (AP Photo/Ted S. Warren, File)
AP source: Trout, Angels close to record $432M, 12-year deal
Mike Trout is about to cash in.
Trout and the Los Angeles Angels are close to finalizing a $432 million, 12-year contract that would shatter the record for the largest deal in North American sports history, a person familiar with the negotiations told The Associated Press.
The deal was disclosed Tuesday by a person familiar with the negotiations who spoke to the AP on condition of anonymity because the agreement had not been finalized. The contract was likely to be announced by the end of this week, the person said.
Hours later, news broke that Alex Bregman and the Houston Astros have agreed on a $100 million, six-year deal that keeps the All-Star third baseman under contract with the team through 2024, according to a person with direct knowledge of the situation.
Trout would set a baseball record for career earnings at about $513 million, surpassing the roughly $448 million Alex Rodriguez took in with Seattle, Texas and the New York Yankees from 1994-2017.
Trout's latest deal would top the new $330 million, 12-year contract between Bryce Harper and the Philadelphia Phillies, and Trout's $36 million average annual value would surpass pitcher Zack Greinke's $34.4 million in a six-year deal with Arizona that started in 2016. The contract also would best Mexican boxer Canelo Alvarez's $356 million deal with sports-streaming service DAZN.
Progress toward an agreement was first reported by ESPN.
Whether Trout's contract is the largest in the world for a team athlete is difficult to determine. Forbes estimated Lionel Messi earned $84 million from Barcelona in 2017-18 and Cristiano Ronaldo $61 million from Real Madrid, but precise details of their contracts are not known.
A 27-year-old entering what should be his prime years, Trout is considered baseball's top player and would have been coveted as a free agent after the 2020 season. He lives in southern New Jersey, and Harper said he was excited about trying to recruit Trout to join him in Philadelphia.
Although Trout recently built a home in his native New Jersey, he is staying on the West Coast with the Angels, who are coming off three straight losing seasons and haven't won a playoff game during his career.
Trout and wife Jessica have made no secret of how much they enjoy living in laid-back Southern California, and the low-key outfielder apparently decided to skip the pressure of free agency entirely.
Trout has been an All-Star in each of his seven full big league seasons and hit .312 with 39 homers, 79 RBIs, 24 steals and 122 walks last year. He has led the major leagues in OPS in each of the last two seasons.
Bregman's agreement includes this season, buys out three years of arbitration eligibility (2020-22) and pushes back his opportunity to become a free agent by two years.
The person who spoke about that deal did so on condition of anonymity because details had not been released by the team. The agreement was first reported by KRIV-FOX 26.
The 24-year-old Bregman made his first All-Star team last season and was selected MVP of the game after hitting a home run to help the American League win. He set career highs with a .286 batting average, 31 homers, 103 RBIs and a major league-leading 51 doubles, finishing fifth in AL MVP balloting.
The second overall pick in the 2015 amateur draft out of LSU, Bregman has hit .282 with 58 homers and 208 RBIs in 2½ seasons with the Astros, helping them win consecutive AL West titles and the 2017 World Series. He was limited early this spring after having arthroscopic surgery on his right elbow in January.
MORE FROM AROUND SPRING TRAINING
YANKEES 6, RAYS 2
Yankees general manager Brian Cashman announced that setup man Dellin Betances will begin the season on the injured list due to right shoulder inflammation. Betances got an MRI after he continued to lack velocity with his fastball.
Cashman also announced that starting pitcher Gio Gonzalez had passed his physical. If added to the 40-man roster, the 33-year-old left-hander would get a $3 million salary while in the major leagues and the chance to earn $9 million in performance bonuses: $300,000 for each start through 30.
Gary Sanchez hit two run-scoring doubles for New York, and Aaron Judge singled in a run and scored twice. Greg Bird hit a solo drive for his third spring homer.
Yankees right-hander Luis Cessa struck out five while pitching four scoreless innings.
Tampa Bay's Tyler Glasnow struggled in his fourth start. The right-hander issued four walks in 3 2/3 innings and was charged with five runs, sending his spring ERA to 11.00.
NATIONALS 3, BRAVES 2
Collin Cowgill capped Washington's three-run ninth with a two-run homer. Anibal Sanchez pitched five innings of two-run ball.
Austin Riley, one of Atlanta's top prospects, hit a solo drive for his first spring homer. Bullpen hopeful Max Fried made his third start, striking out seven in five scoreless innings.
PIRATES 3, TIGERS 1
Josh Bell, Adam Frazier and Corey Dickerson had two hits apiece for Pittsburgh, and Steven Brault pitched 3 2/3 scoreless innings.
Detroit left-hander Matthew Boyd allowed three runs, two earned, and seven hits in 4 2/3 innings.
The Tigers also announced that right-hander Michael Fulmer may need Tommy John surgery. The operation was recommended following an MRI exam and a second opinion from Dr. James Andrews.
Fulmer, who experienced elbow soreness during a recent bullpen session, will seek a third opinion.
CUBS (SS) 6, MARINERS 4
Yu Darvish made his fourth start for Chicago's split squad, pitching 4 2/3 innings against a team of Mariners minor leaguers and allowing two runs — one earned — and five hits, striking out six and walking two. Darvish also had an RBI single. Ian Happ and Jason Heyward had RBI doubles and Wilson Contreras singled in a run.
Kyle Lewis, Seattle's No. 1 pick in the 2016 draft, hit his third home run — a solo shot off reliever Carl Edwards Jr. — and his third double, scoring twice and raising his average to .429.
ROYALS 8, CUBS (SS) 6
Ryan O'Hearn homered, doubled and drove in five runs for Kansas City. Jorge Soler added two hits, and Jakob Junis gave up two runs in five innings.
RANGERS 3, BREWERS 2
Willie Calhoun had two singles, driving in all three runs for Texas. Lance Lynn made his third start, pitching five innings and allowing two runs, four hits, while striking out nine.
Jesus Aguilar hit his third double, driving in a run for Milwaukee. Chase Anderson made his fourth start, allowing two runs and six hits, in four innings.
INDIANS 4, DODGERS 2
Shane Bieber struck out six in five innings for Cleveland. He permitted five hits and walked none. Dodgers newcomers A.J. Pollock and Russell Martin homered off Bieber. Pollock also had a double.
Walker Buehler threw 46 pitches over 2 2/3 innings in his long-awaited Cactus League debut for Los Angeles. He allowed three hits and one earned run. The young right-hander was slowed by shoulder soreness earlier this spring.
PADRES 4, DIAMONDBACKS 3
Eric Hosmer homered and Bryan Mitchell struck out four over two scoreless innings to close it out. Manny Machado went 1 for 4 and is batting .161.
Adam Jones was 0 for 3 in his Cactus League debut for Arizona. He batted leadoff and played five innings in center field.
REDS 6, WHITE SOX 5
Prized prospect Nick Senzel doubled twice and scored three times for Cincinnati. Joey Votto got two hits and Yasiel Puig had a two-run single.
Luis Castillo will start on opening day for the Reds, rookie manager David Bell announced.
Chicago slugger Jose Abreu connected for a pair of home runs. Reynaldo Lopez allowed three runs in 6 1/3 innings.
ANGELS 9, ROCKIES 7
Justin Upton hit his first homer of the spring for Los Angeles. Peter Bourjos and Taylor Ward also went deep, and Kole Calhoun had two hits.
Colorado starter German Marquez was tagged for eight runs and 10 hits in 4 1/3 innings. Daniel Murphy homered and Nolan Arenado got two hits.
Athlete injuries
Athlete health
Athlete compensation
Sports transactions
Athlete contracts
WILK Insiders Newsletter Signup

redpajama_set_name: RedPajamaCommonCrawl


Google is known as the best technology-driven organization that consistently work to provide quality services to users worldwide. Even after Google's safety oversight over its already-huge Android ecosystem has advanced with a new enhancement, malware applications still keep coming back to Google Play Store. But, Google looks highly active to resolve such issues.
Often just reposting an already spotted malware app from a freshly made Play Store account, or using some other developers' present accounts, is sufficient for 'bad-faith' developers to trick the Play Store into issuing unsafe applications particularly to Android users.
Meanwhile, the digital device platform is developing quickly, every new effort Google makes actually comes with trade-offs for better user experience.
Let's discuss some real facts form your better understanding. For instance, Google recently created some variations in its Play Store guidelines/policies and integrated new control in Android APIs that now creates it compulsory for every new app to undergo difficult security testing and review process before coming in the Google Play Store.
Experts are appreciating it as a good step towards betterment. Unfortunately, several developers are not satisfied with the procedure, and managing of manually reviewed scenarios after the team of specialists at Google designed false-positive malware and policy violation detections and unsuccessful to timely answer developers on whether their apps meet policy necessities.
In a blog post, Google Vice President of Product Management stated that When they initiated enforcing these new SMS and Call Log policies, numerous people expressed frustration about the decision making process.
Ongoing its efforts over this ground, Google has now publicized the organization's plan to get more detailed communication with developers, clarifying why a decision was taken, as well as offering them improved and transparent evaluations and appeal procedure. This step will provide advantages to developers as well.
Google explains that the company is expanding its "team to help accelerate the appeals process."
Moreover, Google has also made a strategy to spend more time in revising Android apps by new developers before positive them to go live in Google Play Store in a determination to avoid taking decisions in error.
The review for an application from any new developer who doesn't have a confirmed track record with the tech giant will now take "days, not weeks," permitting the organization to do "more comprehensive checks" before approving apps to publish over the Play Store.
"While the majority of app developers on Android are well-meaning, some accounts are blocked for serious, repeated violation of policies that secure our shared users," Android developers shared in a blog post.
"While more than 99% of these blocked account decisions are correct, we are also very sensitive to how powerful it can be if your account has been restricted in error."
From now, those developer accounts disable in error can directly appeal any execution, which will be sensibly reviewed by the Android team. If the team discover that a mistake has been made, it will restore the account with all provided accesses.


Information on key security and political risks which UK businesses may face when operating in Brazil.
UKTI's Brazil Business Guide is an essential read to help you avoid some of the common pitfalls businesses can face in Brazil. The getting started, business issues and considerations pages of the guide offer a wide range of initial advice on issues such as: finding the right customer or partner, due diligence, employing staff, language, marketing and branding, daily communications, interpreters, protecting intellectual property rights, certification and standards, getting paid and financial issues, insurance management, control and quality assurance, bribery and corruption and how to avoid scams.
The Federal Republic of Brazil is divided into twenty six states and one federal district. The legislative branch is made up of a bicameral National Congress which consists of the Federal Senate and the Chamber of Deputies. As a democratic country Brazil holds elections for four-year terms by popular vote. The suffrage is compulsory between 18 and 70 years of age, and voluntary between 16 and 18 and over 70.
The current president, Dilma Rouseff, from the Workers' Party was elected in January 2011. She has continued in a similar manner as her fellow party compatriot Luiz Inacio Lula da Silva who was president for the previous two terms. The current government do not have an overall majority but form coalitions in order to pass laws and implement government projects.
Like her predecessor, social programmes remain high on the agenda of the president. Building on Lula's "Bolsa Família" programme (Family grant programme), President Dilma launched a new initiative with the aim of eradicating extreme poverty called 'Brasil sem Miséria' (Brazil without Poverty). The programme already has 48 million Brazilians registered and aims to lift the remaining estimated 700,000 Brazilian families out of extreme poverty.
In the last decade Brazil has shown economic stability and was one of the first countries to recover from the 2008 global economic crisis. The country is a member of the Mercosul trading bloc, and is the biggest economy in South America, accounting for close to 50% of the continent's GDP. The attractiveness for foreign investors is justified by its solid economic fundamentals, with Brazil being labelled Investment Grade from the three main ratings agencies Moody's, S&P and Fitch, and its large consumer market.
Brazil has a diverse economy with a strong domestic services sector, representing more than half of GDP. Growth in this sector in the past year has been boosted by financial intermediation and insurance services, and retail sales. Industry and agriculture also account for a considerable proportion of Brazilian GDP. Brazil's main agricultural products are coffee, soybeans, wheat, rice, corn, sugarcane, cocoa, citrus and beef. Its main industrial products are shoes, chemicals, textiles, lumber, iron ore, cement, tin, steel, aircraft, motor vehicles, machinery and equipment.
In the past 10 years, more than 35 million Brazilians were lifted out from extreme poverty and poverty. In recent years, Brazil has been the only BRIC country that has successfully achieved a high economic growth rate while reducing inequality. With a high propensity to consume, the growing demand from the ever-expanding middle class represents a huge opportunity for companies to exploit.
Driven by the emerging middle class, the Brazilian economy grew 7.5% in 2010 and 2.7% in 2011 and it is expected to grow by around 2.5% in the year 2013. Brazil has oscillated between the world's 6th and 7th largest economy in the past 3 years,. The combination of policies to control inflation along with a worsening global economy outlook, have led to a recent slowdown in the Brazilian growth rate.
Against this backdrop, the Brazilian Central Bank has been cutting the basic interest rate to boost growth. In less than one year it fell from 12.5% to 8.5% – it's lowest ever level. President Dilma has tried to ensure these rate cuts are being passed to consumers and businesses by applying pressure to banks to cut their interest rates. As a result, recent data point to an important decrease in average interest rates (both to individuals and corporate).
Decelerating domestic inflation associated with the subdued economy in 2011 and 2012 created room for these cuts. Inflation – which has always been a key concern after years of hyperinflation – is now under control after the adoption of an inflation targeting system in 1999. According to Moody's, the inflation rate estimate for 2013YE is 5.5%.
The conditions in the labour market remain favorable. Unemployment stood still at 5.4% in October 2013, remaining very close to its historical low. Trade flows equate to around 25% of GDP. Brazilian exports reached US$177.650.454.523 in October 2013, mostly coming from ores, oil and fuel, transport materials, soybeans, sugar and ethanol, chemicals and meat. In 2013, Brazil's main buyer was China with a 20.21% share of Brazil's exports, followed by U.S. with 10.35%, Argentina with 8.4%, Netherlands with 6.5%, and Japan with 3.3%.
Brazilian imports were US$ 179 billion in October 2013, mainly coming from machinery, chemical products, oil, automotive parts, electrical and transport equipment and electronics. In October 2013 15.51% of Brazilian imports came from the China, 14.9% from U.S., 7.1% from Argentina, 6.28% from Germany, and 3.99% from South Korea. Asia was in the first position of buyer for Brazilian products in 2011, surpassing Latin America and the European Union.
More information on political risk, including political demonstrations, is available in FCO Travel Advice Brazil.
Unlike when under its previous military dictatorship (1964-1985), Brazil is now a democratic state, and ensures freedom of expression, but there is some consideration that the military regime left marks that persist until today. Brazil is marked by deep economic and social inequalities. Despite growing and continuous efforts to raise the profile of human rights and democratic concepts, there are still areas where Brazil's adherence to human right principles could be improved.
The low quality provision of basic rights such as public education and public healthcare system, contribute to the poor human rights standards in Brazil. Brazilian education is among the 35 worst education systems rated by the World Economic Forum in 2013. The public education system is ineffective and substandard. Regarding healthcare, only 8.7% of the federal budget was directed to healthcare in Brazil contrasting with an 11.7% world average of investment in the sector, although the country's situation was even worse 10 years ago (4.7%). To improve education and healthcare standards, 75% of drilling royalties the Brazilian government receives from oilfields in the so-called "pre-salt" layer are to be invested in education and 25% on health.
Women's rights are also a concern, specifically the issue of domestic violence. Many actions have been taken in the past years including the law of "Maria da Penha", to protect women who suffer from violence at home, but the number of women and children unassisted by the justice system is still alarming.
Brazil is among the world's leading investment destinations. However, despite a formally well-functioning business environment, corruption and bribery are still serious obstacles to doing business in Brazil. Especially in business dealings with the government at the local levels, corruption reportedly represents a serious threat.
Some positive developments in relation to corruption and investment can be recognized as Brazil is often cited for its strong legal framework. Protests and public demonstrations, some of them focussed on corruption, were massive in 2013. Millions of people went to the streets to protest against corruption and high taxations, which in the long term should decrease and diminish corruption in Brazil.
Corruption is common in some environments, especially when it comes to speeding up bureaucratic processes. In 2013, Brazil was ranked 72 in the Transparency International's corruption perception index (CPI).
There is a wide range of regulatory agencies due to the federal structure of the political system, which may increase the likelihood of demands for bribes by public officials.
Multiple corruption scandals have emerged over the years, involving politicians and bureaucrats taking kickbacks from companies in exchange for awarding public contracts.
The Brazilian tax system is complex and reportedly prone to corruption. It is reported that tax collectors frequently ask for bribes to relax assessments and inspections, to refrain from pursuing acts of tax fraud or to give advice on the legal possibilities of reducing tax obligations.
Entrepreneurs may find difficulties in navigating complex systems and vested interests when setting businesses up in Brazil. UK businesses should consider, in most cases, engaging a local partner when establishing interests in Brazil.
Local labour law is complex and onerous and requires careful handling to avoid incurring potentially expensive liabilities. There is a well-developed system of HR managers and lawyers that can offer expert advice on how best to manage employment. This is again another area where the right local partner could be essential for successful market entry.
Terrorism is not a significant threat in Brazil.
However, its perceived attractiveness as a potential target for international terrorism is likely to increase, as Brazil hosts the World Cup in 2014 and the Olympic Games in 2016. Brazil will have to be aware of international terrorism, considering that these major sport events can be targets. There is some growing awareness of this in official circles.
The threat against any foreign interests in Brazil is still considered to be very low.
Robbery, mugging and street violence are not uncommon in Brazil. The risks vary widely between cities and between districts in each city. Care should be taken not to advertise wealth or vulnerability. Local advice should be sought on when and where it is safe to travel. Given these sensible precautions, most visitors do not encounter problems.
Brazil has yet to enact a legal framework to provide a safer environment for IT business – the Cybernetic Crime Act is still being debated in Parliament. However, civil society has already mobilised to monitor Internet activities – the Safernet project is one example.
The Government and its public access sites and the private sector, face increasing hacking activities. Investment in technology to tackle this risk is already being made.
Brazil has been strengthening its IP and copyright protection rules and is now a member of the WIPO.
The Government has a National Anti-Piracy Plan, which created the National Council for Combating Piracy and Intellectual Property Crimes.
Intellectual Property Rights, however, remain a risk area in Brazil.
The Patent and Trademark Office is improving, but can still be bureaucratic.
Most UK businesses (providing they register their IP on arrival in market) do not encounter significant problems with IP theft. However, specialized legal advice should be sought in this area.
Counterfeit goods are common in Brazil.
Organised crime is still a significant problem in some parts of Brazil.
Illegal organisations connected to drug trafficking are strongly linked to piracy and financing through counterfeit products.
Organised crime is also present in the society's high-income strata. Illegal activities range from Government procurement manipulation to cargo theft.
A broader scheme encompasses also money laundering (illegal gambling such as the "jogo do bicho" and jackpot slot machines) and tax evasion through havens.


The HD Supply EDI program trades the 810 Invoice, 850 Purchase Order (PO), 864 Text Message, 997 FA, and the Sample Testing Examples. Below you will find these mapping guidelines, as well as their EDI standards definition.
If you have a HD Supply transaction and you cannot read the EDI format, try the Online Translation tool. The tool will translate any HD Supply EDI transaction set into a CSV spreadsheet. After using the tool, the spreadsheet will be emailed to you. You can also view that spreadsheet by using the Online Viewer. If you need more of an automated process, determine which EDI Solution(s) can help plug your EDI data into your back office systems automatically.
Translate HD Supply EDI All Trading Partners All Set IDs Need Help?
Do you need to transact EDI with HD Supply? Are you looking to exchange documents with HD Supply using an EDI VAN Savings solution. Or perhaps you would like to use a Cloud Based EDI application, so you can plug your HD Supply transactions directly into your ERP and TMS systems. Even small companies can trade with HD Supply using an EDI Web Browser solution.
All products, company names or logos are trademarks and/or service marks of their respective owners.


text:
// routes
app.route('/api/v1/stripe/charge')
  .post(campaigns.charge)
app.route('/api/v1/stripe/customer/:customerId')
  .get(campaigns.retrieveCustomer)
  .post(campaigns.createCustomer)
  .put(campaigns.updateCustomer)
  .delete(campaigns.deleteCustomer)
app.route('/api/v1/stripe/card/:customerId')
  .get(campaigns.getAllCards)
  .post(campaigns.addCardCustomer)
  .put(campaigns.updateCard)
  .delete(campaigns.deleteCard)
app.route('/api/v1/stripe/token')
  .post(campaigns.createToken)
app.route('/api/v1/stripe/token/:tokenId')
  .post(campaigns.getToken)

// stripe  controller
'use strict'

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
  fs = require('fs'),
  path = require('path'),
  errorHandler = require('../utilities/errors.server.controller'),
  responseHandler = require('../utilities/response.server.controller'),
  queryHandler = require('../utilities/query.server.controller'),
  Campaign = mongoose.model('Campaign'),
  Picture = mongoose.model('Picture'),
  _ = require('lodash'),
  email = require('./campaign.email.controller'),
  stripe = require('stripe')('id')
// down the road implement being able to upload pictures
module.exports = {
  chargeCampaign: chargeCampaign,
  charge: charge,
  createCustomer: createCustomer,
  retrieveCustomer: retrieveCustomer,
  updateCustomer: updateCustomer,
  deleteCustomer: deleteCustomer,
  addCardCustomer: addCardCustomer,
  getAllCards: getAllCards,
  updateCard: updateCard,
  deleteCard: deleteCard,
  createToken: createToken,
  getToken: getToken
}

function charge (req, res) {
  stripe.charges.create({
    amount: req.body.total,
    currency: 'usd',
    source: req.body.stripeToken, // obtained with Stripe.js
    description: req.body.description || 'Love Animals, Donate'
  }, function (err, charge) {
    if (err) res.status(400).send(err).end()
    else res.status(200).send(charge).end()
  })
}

function chargeCampaign (req, res) {
  var campaign = req.campaign
  // See https://stripe.com/docs/api/node#customer_object

  var stripeToken = req.body.stripeToken
  var charge = stripe.charges.create({
    amount: req.query.total, // amount in cents, again
    currency: 'usd',
    source: stripeToken,
    description: 'Love Animals, Donations:' + campaign.name
  }, function (err, charge) {
    if (err && err.type === 'StripeCardError') {
      res.status(400).send(err)
    } else {
      try {
        if (charge.paid == true) {
          campaign.raised = (charge.amount / 100) + campaign.raised
          campaign.donations.push({
            'description': charge.description,
            'paid': charge.paid,
            'status': charge.status,
            'amount': (charge.amount / 100),
            'fingerprint': charge.source.fingerprint,
            'sourceid': charge.source.id
          })
          email.sendMail({
            to: campaign.email,
            subject: 'A Donation has been made',
            html: 'donation:$' + (charge.amount / 100)
          })
          campaign.save(function (err) {
            if (err) {
              return res.status(500).json({
                error: 'Cannot update the campaign donation'
              })
            }
            res.redirect('/campaigns/' + campaign._id)
          })
        }
      } catch (err) {
        console.log(err)
        res.redirect('/campaigns/' + campaign._id + '/donate')
      }
    }
  })

}

function createCustomer (req, res) {
  stripe.customers.create({
    description: 'Customer for test2@example.com'
  // source: "tok_16hVvgLcKry90nDaspcBzFMg" // obtained with Stripe.js
  }, function (err, customer) {
    if (err) res.status(400).send(err).end()
    else res.status(200).send(customer).end()
  })
}

function retrieveCustomer (req, res) {
  stripe.customers.retrieve(
    req.params.customerId,
    function (err, customer) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(customer).end()
    }
  )
}

function updateCustomer (req, res) {
  stripe.customers.update(req.params.customerId, {
    description: 'Customer for test@example.com'
  }, function (err, customer) {
    if (err) res.status(400).send(err).end()
    else res.status(200).send(customer).end()
  })
}

function deleteCustomer (req, res) {
  stripe.customers.del(
    req.params.customerId,
    function (err, confirmation) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(confirmation).end()
    }
  )
}
// card
function addCardCustomer (req, res) {
  stripe.customers.createSource(
    req.params.customerId, {
      source: req.body.stripeToken
    },
    function (err, card) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(card).end()
    }
  )
}

function getAllCards () {
  stripe.customers.listCards(req.params.customerId, function (err, cards) {
    if (err) res.status(400).send(err).end()
    else res.status(200).send(card).end()
  })
}

function updateCard () {
  stripe.customers.updateCard(
    req.params.customerId,
    req.body.card, {
      name: req.body.name
    },
    function (err, card) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(card).end()
    }
  )
}

function deleteCard () {
  stripe.customers.deleteCard(
    req.params.customerId,
    req.body.card,
    function (err, confirmation) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(confirmation).end()
    }
  )
}
// token
function createToken (req, res) {
  stripe.tokens.create({
    card: {
      'number': req.body.number,
      'exp_month': req.body.exp_month,
      'exp_year': req.body.exp_year,
      'cvc': req.body.cvc
    }
  }, function (err, token) {
    if (err) res.status(400).send(err).end()
    else res.status(200).send(token).end()
  })
}

function getToken () {
  stripe.tokens.retrieve(
    req.body.stripeToken,
    function (err, token) {
      if (err) res.status(400).send(err).end()
      else res.status(200).send(token).end()
    }
  )
}


Jeffrey M. Bradshaw has been invited to speak at the first EXPOUND Symposium, to be held in May. His talk will be entitled "Stand[ing] in the Holy Place: Reverberations of an Enigmatic New Testament Phrase in Jewish Midrash and Modern Revelation".
More information can be found at the symposium website.


i4Market's Commercial Email Policy is to be construed broadly to prohibit all forms of unsolicited and/or deceptive commercial email on the terms set forth below. As used herein, "email" refers broadly to all forms of Internet communication, including but not limited to emails, instant messages, and text messages. As used herein, "i4Market email address" means any email address or username corresponding to or including a domain owned or hosted by i4Market. The sending of an email to an i4Market email address necessarily entails access to, use of, and transmission into the "i4Market Network," as that term is defined and used below.
1) The bulk SPAM, promotional material, or other forms of solicitation sent via e-mail that advertise any IP address belonging to i4Market, or any URL (domain) that is hosted by i4Market.
2) Unsolicited postings to newsgroups advertising any IP or URL hosted by i4Market.
3) The use of webpages set up on ISPs that allow SPAM-ing (also known as "ghost sites") that directly or indirectly reference customers to domains or IP addresses hosted by i4Market.
4) Advertising, transmitting, or otherwise making available any software, program, product, or service that is designed to facilitate a means to SPAM.
5) Forging or misrepresenting message headers, whether in whole or in part, to mask the true origin of the message.
i4Market owns the computers, mail servers, and other equipment that make up its Internet network (the "i4Market Network"). Because the i4Market Network is the private property of i4Market, i4Market has the right to implement and enforce rules governing the use of the i4Market Network. These rules apply to anyone who uses or accesses the i4Market Network, including i4Market Members who send and receive email using the Network and non-i4Market Members who send email into the i4Market Network (i.e., who send email to an i4Market email address or username) or otherwise use or access the i4Market Network. The prohibitions set forth in this Commercial Email Policy supplement the rules and prohibitions set forth in i4Market's Acceptable Use Policy ("AUP"). Conduct that violates the AUP may give rise to civil and/or criminal claims by i4Market even if that conduct is not specifically prohibited in this Commercial Email Policy.
i4Market prohibits the transmission of any and all unsolicited commercial emails ("spam") into, out of, or through the i4Market Network. This prohibition includes the sending of spam by any Internet user to an i4Market email address. i4Market also prohibits the transmission into, out of, or through the i4Market Network of any commercial email in which the sender has employed fraudulent or deceptive measures to disguise or obscure the actual source or sender of the email, including but not limited to: (a) the use of forged, false, or modified headers; (b) the use of forged ("spoofed"), invalid, or nonexistent "from" addresses; and/or (c) the intentional use without authorization of a third-party's mail servers or computer equipment to send or relay the commercial email ("third party relay" or "server hijacking"). In addition, i4Market prohibits the transmission into, out of, or through the i4Market Network of any commercial email in which the sender has used deceptive, misleading, off-topic, or gibberish language, text, or characters in the subject line or the text of the email, a primary effect of which is to disguise the actual nature or subject of the email. Finally, in relation to any commercial email sent using Internet resources other than the i4Market Network, i4Market prohibits the use of or reference to any i4Market email address or i4Market Domain in a manner that does or might create the erroneous impression that the email was sent into, out of, or through the i4Market Network, including but not limited to any reference in the "from" line to an i4Market email address.
Violation of this Commercial Email Policy by any person or business entity represents unauthorized access to, trespass upon, and/or use of the i4Market Network and results in harm to i4Market. Such violations give rise to civil causes of action in i4Market's favor pursuant to a variety of federal and state laws, including but not limited to the Computer Fraud & Abuse Act (18 U.S.C. § 1030 et seq.). Violations of this Commercial Email Policy may also result in criminal sanctions against the involved entities and individuals.
Violation of this Commercial Email Policy may also be actionable under the CAN-SPAM Act of 2003 (the "CAN-SPAM Act"). However, the commission of conduct that violates i4Market's Commercial Email Policy may result in civil damages and criminal sanctions even if the conduct is not otherwise prohibited by the CAN-SPAM Act.
i4Market reserves the right in its sole discretion to take all legal steps and/or employ all technical measures that i4Market may deem necessary in order to prevent and/or stop violations of the rules governing the use of the i4Market Network, including the prohibitions set forth in this Commercial Email Policy and the other provisions of i4Market's AUP. i4Market's failure to enforce this policy in every instance in which it might have application or in any particular instance as against any particular violator shall not constitute a waiver of i4Market's rights and remedies.


Hello and welcome to live coverage of the Euro 2016 draw. We'll follow every ball as they get selected in Paris.
The IndependentITV Sport will have first-pick of England matches at the European Championship next summer. The broadcasting company staged a coin toss with BBC Sport in 2012, which they lost, meaning their rivals had the privilege four years ago for the tournament in Poland and Ukraine.
The IndependentIt is testament to the depths football governance has plumbed that there was no recognised French figurehead to provide the self-assurance so badly needed as the country stepped towards next summer's European Championship. A country full of doubts and fears, though emphatic in its message that envisager un report, c'est capituler – "to consider postponing is to capitulate" – as the head of the tournament's organising committee has put it.
The IndependentThere should, at the very least, be no need for Greg Dyke to worry on this occasion about being caught off-guard with another cut-throat gesture as England's Euro 2016 prospects are mapped out at this evening's tournament draw in Paris.
Football fans' guide to Euro 2016: Should you book before the draw?
The IndependentAt 5pm GMT tomorrow, football fans from England, Wales and Northern Ireland, as well as 21 other European nations, will have their sights on a conference centre to the north-west of Paris. The Palais des Congrès is where Europe's biggest sporting event, Uefa's Euro 2016 football championships, will be decided. We already know the tournament's architecture, in the shape of the 10 venues dotted around France where the matches will be played.
So, less than an hour until the draw gets underway in the French capital. Who will the home nations want to draw and avoid?
Italy are the biggest danger lurking in Pot 2, while the Czech Republic and Poland are dangers in Pot 3.
We've also got a couple of stats here, courtesy of bookmakers bwin, who have done a little bit of research on the tournaments from 1996 (the last time England reached the semi-finals, as if you'd forgotten) until the last one in 2012.
Debutants are doomed – Eight of the last nine debutants have been eliminated in the group-stages, with a maximum of one win to their name. Only Croatia in 1996 won more than one game (two) and reached the quarter finals.
Pot four teams have been succeeded in past tournaments, with Russia and Turkey reaching the semi-finals in 2008, France, Czech Republic and Turkey reaching the quarter-finals in 2000 and 2012 - joining winners Greece in 2004.
Martin O'Neill looks slightly less thrilled!
Is anyone else waiting for these Premier League matches to end?
Just a couple of minutes until they start the preamble in Paris. That (hopefully) won't last much longer than 15/20 minutes. Then the magic really happens.
The ceremony is underway and we've got some dancers on stage. A number of can-can dancers as well. How very French! Sacre bleu!
An accordion is also coming up - the can-can has been a little modernised, got a classic euro-dance backing beat. Horrific.
The opener has now moved to the big screen, where we're getting a brief tour through the host cities.
I must say I am rather enjoying this song they currently have going. There's a cello, a violin and that accordion, can't say I've heard it before.
The foot is certainly tapping, whatever it is.
Out comes a singer in a quite ridiculous dress that is supposed to look like the Eiffel Tower.
I'm afraid the designer has got that one quite wrong.
The mascot for this tournament is quite ridiculous - Super Victor, an 8ft tall boy dressed in a football kit.
David Guetta is not on stage as well, punting a music festival for the tournament's opener.
I think that just about ends the opening nonsense... We're close to draw time now, Spain coach Vicente Del Bosque has just brought the trophy out on stage.
Gianni Infantino, Uefa General Secretary, is up on stage. Down to business.
Not quite - I'd forgotten how Uefa like to draw these things out. They're reminding everyone how the draw works.
In brief Pot 1 teams are drawn first, then Pot 4, then 3, then 2 (scroll further down for a full explanation).
David Trezeguet makes the first pick... it's France.
Remember, now we go to Pot 4. This is the one with Wales, Northern Ireland and the Republic of Ireland.


As long as Matthew Standish could remember, he'd lived with his grandparents in Viper Canyon. He knew he'd had a mother and father obviously, but he could not remember them.
There had also been another...someone who cared for him and called himself Daddy, although Matt knew he hadn't been. He remembered him just a little. He was an older man whose name was Ben.
Ben had loved Matt's mother and, in fact, had been married to her. Matthew knew this, too.
He also knew Ben's heart had completely been torn in two the day Matt's mother left, and Ben had never been able to accept she was gone.
He had drowned himself in the family's hot tub just a short time afterward. The funeral was one of Matt's first vivid memories.
After that, it was just Matt and his grandparents, and that was mostly the way Matt remembered his life, which suited him just fine. He loved his Nana and Pop, and he never wanted for anything, ever.
A few times, he asked his grandmother about his mother and father, and she had always just smiled and told him she'd tell him more when he was older. Eventually, he just stopped asking.
Why did he need to know, anyway? He was happy, his grandparents loved him and he loved them. He wasn't the only kid he knew that was being raised by grandparents, either, so it wasn't anything unusual.
He learned to accept things as they were, and decided some parts of his life and his past he'd never know the answers to.
Therefore, he was completely baffled when his grandmother pulled a letter out from her dresser drawer on the eve of his sixteenth birthday and gave it to him.
She left the room and Matt was alone with his letter. This was from his mother! He was almost afraid to open it. What if it had something in it that changed his whole life? Was he ready to know whatever it was his mother wanted to tell him?
Obviously, his grandmother thought so.
He quickly sat down on the edge of the bed and slit open the envelope.
I doubt if you will remember me, but I am your mother, Hope.
As I'm writing this, you are sleeping in your crib just a few feet away from me, and every time I look at you, I am filled with so much love I feel as though I may burst. Above all else, Matthew, above everything, I love you, and I want you to know that. You may not believe it, especially now, as a young man, when you have not ever known me, but it is the truth.
Your father, Ripp Grunt, and I fell in love when we were teenagers...probably not much older than you are now. We never stopped loving each other, but at that time I felt I wanted something from life that I thought your father could not give me, and I married Ben, who you may remember from your childhood, I don't know.
It was a bad decision, Matthew. It wasn't Ben's fault; he was a good man, and a decent man. He loved me, and in a way, I loved him too. However, I was never able to forget the love your father and I shared, and I eventually became pregnant with you. After you were born, your father and I decided we could no longer be apart, and we left Viper Canyon. We intended to settle in your father's birthplace of Strangetown, and we wanted to take you with us, our baby boy, but we couldn't.
I don't know if you have been informed of this yet, but you are the current designee of the substantial estate of my family. That is why you needed to remain with your grandparents, Matthew, and why you could not come with us. We both loved you so much! We hated to leave you behind, but as the heir you had to remain in the family home, there was no alternative. If we had taken you with us, my son, you would have lost everything, and we didn't want that for you. Please understand that.
Your father and I would love to know our son again. However, we'll leave that up to you. You're old enough by now to make your own decisions.
Just please, Matthew. Please understand that what we did, we did for love.
Matthew read the letter several times.
Of course he wanted to see his mother; meet her for the first time, really, as far as he was concerned. His father, too. Yet he could not help but have some uncertainty about the whole idea. These people were strangers to him.
He supposed he should feel something... Anger? ... knowing they ran off together and left him behind, but he found he really didn't have an opinion one way or the other. It really didn't matter, did it? He'd been happy with his grandparents. He couldn't imagine a better life. However, he supposed it wouldn't hurt to meet his mother and father. Obviously, they wanted to see him. He imagined it was the least he could do.
He folded the letter and, placing it carefully in his pocket, left his grandparents' bedroom.
His grandmother was sitting outside with his grandfather, curled together on the outdoor bench, her forehead almost touching his.
Matthew couldn't help but smile. His grandparents were more in love than anyone he'd ever known, and as they grew older, their interest in each other hadn't waned a bit. Matt was accustomed to their constant displays of affection; he wouldn't have it any other way.
He walked outside and joined his grandparents, sitting in a lawn chair near the telescope that had belonged to his great-great grandfather.
It still worked; Matthew himself had been using it nearly every night since he became old enough to decide his own bedtime. His grandmother always told him he was a lot like her grandfather George, in more ways than one.
"Matthew..." his grandmother warned softly. It was her if-you-can't-say-something-nice-then-don't-say-anything-at-all voice. He'd heard that tone enough to know.
Leo smiled thoughtfully at his grandson. How astute the boy could be at times. Your mother intended for you to be a Standish when she left you with us, Matthew, but that's really only half of who you are.
"I'm sure you'll find a way to become both one day," Leo said softly, patting his grandson's knee as he followed Alaina into the house.


Are new Indian sporting events changing the advertisers' league?
To say audiences, broadcasters, advertisers and promoters are shifting their attention to other sport purely out of cricket-fatigue would be unfair; to cricket, that's still very much the national pastime, "kind of like God or Bollywood" as one marketer put it. And it would also be unfair to other sports which have been cultivating a strong following, well before a new breed of leagues (modelled on cricket's ostentatious Indian Premier League or IPL) for football, kabaddi, hockey, badminton, tennis and most recently wrestling, cropped up. Advertisers, for one, are claiming other sport territory because cricket is just too damn expensive.
Neeraj Vyas, senior EVP and business head, Sony MAX and MAX2 (MSM network, the official broadcaster of the IPL and the new Pro Wrestling League), says that for advertisers, in any sport, the scene has changed and most sport properties are finding sponsors. "Cricket is an expensive acquisition for broadcasters and advertisers," he says, "Few can afford it on a sustained basis. Most advertisers, even regular cricket advertisers, are developing other ways and investing in conceptive alternatives."
Many marketers-are not so secretly hoping that together the leagues break, not obliterate, cricket's hegemony. PepsiCo has been investing in sport properties for over 25 years, it's associated with the Indian Super League (ISL) and is the beverage sponsor for Champions Tennis League. Says Vipul Prakash, VP, beverage category, PepsiCo India, "It should happen at a faster pace if all these are to form a second front against cricket which is a behemoth today. Maybe not individually, but together. While not as big as cricket, leagues are good from an ROI point of view." For Pepsi brand Gatorade, the football league is an opportunity to connect with niche audiences. Prakash says, "The viewership of ISL today is small and so it's more about talking to a young audience. It's a slower process but this will help build Gatorade into the sports psyche of the country."
For the Kotak group, non-cricket leagues are a vessel to showcase its Indian pride, global mentality. Says Karthi Marshan, senior EVP and head – group marketing Kotak Mahindra Bank, "The Kotak family owns a kabaddi team. The Pro Kabaddi League turned out to be the second most watched sport in India. In terms of salience, the brand got benefits. The Kotak brand position has always been a global Indian which wears its Indianness on its sleeve. We want to be seen as a global citizen and not a jingoistic Indian." To him whether cricket's hegemony ends or not is immaterial. "If all of these leagues have a long tail following, that's good enough."
But Rome and the IPL weren't built in a week. The cricket league, arguably the biggest sport platform for brands in India, rests on many generations of Indians playing cricket on side streets and in all whites on manicured fields across the nation. Broadcasters are doing their bit by attempting to build a multisports culture. Says Sanjay Gupta, COO, Star India, "We have demonstrated this with the thrust on local leagues starting with Star Sports Pro Kabaddi League, Hero Indian Super League, Hockey India League, IPTL. We have packaged the sports better and also brought them closer to people by taking it to them in their local languages."
Puma India's MD Abhishek Ganguly believes the onus lies on brands. He also believes that in five years' time ISL will be almost like first division European football (he's not oblivious to the enormity of that challenge). However in order to grow properties like the ISL it can't just be about 90-minutes and 3 months. Brands must think beyond just visibility on the pitch, and instead "create, build and sustain buzz. We're here to build and support the sport (ground-up) and loyalty" he says. Only then will we one day have the kind of atmosphere that's created in hallowed stands like The Kop at Liverpool FC's Anfield stadium, on a weekly basis, across the nation.
Sports in India is a $2 billion industry that could, in the next five years, grow to around $10 billion. For now, stakeholders' faith in sport properties beyond the realm of cricket has been met with equal enthusiasm on the audience's side, at least in the inaugural editions. People, supporters both old and the newborn variety attracted by the glitz, auctions, slick formats and multi-crore marketing bang, are lapping up the action on pitches 115 yd × 74 yd and eco-friendly kabaddi mats. 429 million viewers tuned in for the first season of the Hero Indian Super League (our version of football's English Premier League) and 435 million for Pro Kabaddi League, in its first edition. That's commendable by any standard, especially if one considers the 552 million viewers IPL got in its 8th edition in 2014.
The IPL, however, is the mother of all Indian sport leagues. Despite the controversy surrounding the tourney and its myriad flaws regularly pointed out by purists, we can't dismiss its influence on how we consume sport.
Yes, as Indians we only cared for cricket. And only when 'India' played. As an industry veteran points out "A great Ashes series was as much in the pale as any other sport. A sport may have Olympic stature but it was still not very well regarded. Indian fans were tutored to cheer for team India (especially when it was winning); and their attitude to sport was more voyeuristic than participative. IPL gave you the delicious possibility of India not losing. It was the first time in sports that citizenship got down to a city level affiliation."
In spite of a long tradition of regional sport rivalries in legacy tournaments, some of which have involved lathi charges to keep passionate fans in check; they are still perceived as poorer contests. IPL gave the Indian viewer, not necessarily the cricket or sport lover, an opportunity to indulge that voyeuristic side (without judgement) with unadulterated entertainment in the form of sport. That's exactly what promoters of the newer leagues are banking on to spark a similar revolution in their respective fields. When we ask Pro Wrestling League's promoter Vishal Gurnani of ProSportify how he plans to attract audiences and advertisers to this brand new league starting tomorrow, he says they're building up players, rivalries, city team conflicts in what is traditionally an individual sport, to ensure participation.
Some say there's no shame in acknowledging that IPL became the mould for all other leagues. But it also begs the question: are the other leagues merely the nth version of the IPL? A question we attempt to answer in this story when we look into three leagues in different stages of their life-cycle.
Riding on the increasing popularity of football among city-slickers donning Rooney, Ronaldo and Messi jerseys, due to exposure to professional English and European leagues like the EPL, La Liga and Champions League, the ISL launched in 2014 with much fan-fare and a line-up of A-list celebrities and foreign players past their prime. The key to the ISL's success however lies elsewhere.
Season 2 indicates that the popularity of the league has seeped into to markets beyond the top metros. ISL has witnessed high traction in rural markets where TVTs (television viewership in thousands) almost match urban TVTs with 47% of total TVTs coming from rural markets. (Urban: 237 million TVTs. Rural: 210 million TVTs) The average time spent by viewers has also increased by 36% this season as compared to last season. And season 2 saw a 77% stadium fill during the first 52 games as compared to a 72% stadium fill in Season 1 at the same stage.
The ISL is backed by broadcaster Star Sports which co-owns the IP and is creating the proposition instead of merely showcasing. Industry folk say because the IP is owned, the league can be successful or fail, but it won't go away. That's perhaps not the attitude brands like Puma which are inherently linked to the sport, would like to endorse. Furthermore, says Puma India's managing director Abhishek Ganguly, brands associating with the league need to think of the sport in the long term. "We made early investments and continue to do so without thinking of ROI." In order to sustain the league, any sport league for that matter, what's of the utmost importance is quality of play. And let's just say there's much room for improvement in the ISL.
Expected to be the runt of the litter when it comes to sporting leagues by most external observers, the Pro Kabaddi League, over just two seasons, has become one of the big dogs. It clocked in a cumulative viewership of 435 million, making it the second most watched sport in India according to Star. And far from being a purely small town phenomenon, Sanjay Gupta, COO, Star points out, "Metro contribution in the first two weeks of Season 2 was 65% to overall television viewership demonstrating that urban, millennial audiences have a strong affinity." It even scored big online with viewership of Season 2 increasing nearly 20%.
As Karthi Marshan, senior EVP and head – group marketing, Kotak Mahindra bank, puts it, for any league to succeed it needs to have ingredients that go beyond the sport. Kabaddi has that in backers like the Bachchans and industrialist Anand Mahindra. What it also has (at least thus far) is a regulatory body that's not at loggerheads with the league promoters. And so kabaddi appears on its way to becoming something that appeals to the core youth demographic while also drawing in family audiences.


text:
HSem 3515H: Experiencing Local Environmental Solutions
Shannon Farrell
Search journals and literature on agriculture, pollution, animals, environment, policy, natural resources, water issues and more. Searches tools like AGRICOLA, ESPM, and EIS databases.
Search articles in core topics of the agricultural sciences including nutrition, food safety, food quality, animal and crop production and protection, natural resources, sustainable agricultural systems, rural development, agricultural economic and policy issues, agricultural imports and exports, agricultural statistics and more.
Water Resources Abstracts
Search articles on water-related topics covering the characteristics, conservation, control, pollution, treatment, use and management of water resources. This database is one component of the "Environmental Sciences & Pollution Management (ESPM) database.
Search water research relevant to Minnesota with access to all types of water research, enabling water managers, researchers, engaged citizens and others to easily find, share, and coordinate research to support their efforts to protect, conserve, manage and restore water in Minnesota.
AgEcon Search
AgEcon Search contains the full-text of working papers, conference papers and small journals in agricultural, development, energy, environmental, resource and other areas of applied economics
PAIS Index (Political Science and Public Policy)
PAIS (Public Affairs Information Service) searches journals and other sources on issues of political science and public policy. This includes government, politics, international relations, human rights and more.
AGRIS-FAO (public version)
Information for international agricultural research, from 1975 to the present.
Natural Resources Library (in Hodson Hall in St. Paul)
375 Hodson Hall, St. Paul Campus (612-624-9288)
Find collections in forestry, zoology, aquaculture, conservation biology, bees and beekeeping, endangered animals, entomology, fisheries, herpetology, ichthyology, mammalogy, non-human primatology, ornithology, animal taxonomy, and wildlife management.