#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a byte array with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a byte array with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
try:
    import cPickle as pickle
except ImportError:
    import pickle
from io import BytesIO

from os.path import basename
from errno import EPIPE

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = pickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    ppds = load()
    ppds['ARCHIVE'] = BytesIO(decompress(ppds['ARCHIVE']))

    if ppd in ppds:
        start = ppds[ppd][0]
        length = ppds[ppd][1]
        ppds['ARCHIVE'].seek(start)
        return ppds['ARCHIVE'].read(length)

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 1.0.1\n" \
              "Copyright (c) 2013 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4IeDR09dAEAAyynXgKBkGpXWv/boY8ub5Lk8y5tWR4Cmpvfd4Q+J66x6pavzypoF6OTP/gUvvy9wllK+Uodg2OOt1dIYW+VdF30lw9SIVeyujz8rKDiraFwAlEGyqY/SgvPej3I8E+qSMHxz+nM/3/RLzicwQ7Y4A+L1cy2+c35MfwcwbO4NvhEHK4r7cTDvMtu858kqiegp5NiqDXLZJp3gUSZu5LC9EQyPUwfktOeDCyZO8BgJsBpMp+feRmsLRjCFJwiXZu3ZqNpFsMYbaUGLhKsYgHV7FgdFDArVV+2J2l8Pzgjg51PGxAlIsJNZ8+EoAdT7kcCGMkJ+wosvAm1WiBBFFHZaI7wYMW6XSOu4z7O9PaGICp/ssX0U6w7G7BWChCTKW5BDmJkZIO0G1Pv/i0AJlZMtPvSiZsVG7vmwMhQvLQriOLIZBvBMkZcljOf7JGRYT3V/it8Nf32WVeM+kVUj8O4LkPxk6BbV3f1o4oPEJBronvPZwmAaKlmKico6Y8vjTRUQKlG5K7+xXb1ioBNoTsdbX/vPfTxVT12dv9I+qLDAsg3D2yV/X4tJs7uG33hntDe8zBCmZztZedMbVUH0qe9j4jGhJoA4iNjdQDG51DD8sIPPfYHmt+Pd6qNm87ZHqaRqVyX2k2djFcFII4qQ/hoTASpjc0y55nBVZXHftNDfoYe/0crGQFi3Z+tXME5E62F+eM+KF9WaAcCDSGHcySieSB5TLhu/+QKE/+2frJSi7lzc6RPWP3N2dCseW1HlfsG5YBzHDCmKEJjBkvTfy6eNjJYjurRxBEpgN9zKCCM/NOYwctPByQSvZ8ucf9z5HzK7Cbg3VrbCAdxr+cDUdfrxuRo6FBlU0oB3HltkhiTUDKHuh4ufxpPam4XPI9iqc+5AGLwsEyGig0jvWIm3S4uzl984/1ewIj6TUNPYhZxcKTdEcRm4Y9wsZbEMRkOTXPc8t9ylQoxe1VBsj5LGy5UhUuLh9Z/TIhfqVW3OHbkA8Ow+HgKsVSZBzcppR6yt8pvxs6Ot5MBMlNqEJaZ5JWp6WHwUUNDy2vdhd4vFIz5LstWeWg5yVF6D5CfiwlPZGyt759SAap8a+7QdlBXaOU0gL2GpuLvWwgD1Sp6jhMA5GTADxZVQ77F8GaGU/0xue/im5PsTYcU53zv/7SX658p+YggDof+vA6f/KI8Cwbn9fBNby3GYR5SW1+y8J8/gkWhuoEku3a6bjLjzVz6bIOAxey8dvA0mgh5C7d1FIVGwSSVJBMx4Ia00cr+kBOgMpL3CP7eFr87ECOc7a0Si79xQtMOBFZYLKXVVpPEMhXJ44C0dygs9j6BtMva6G7MQiCkR5NOw0XeoqC1gy41TyxgA5yAm7hUxmkIOXQT2xBUKgjo08mbAfZnF0ZXjRLoPlgzMSc/uZI6Q0AxE9Vzz6CYFL39Hi4W7fVRoBN75uAk9C+hk8fd+/bGz44wpVRr4wBeR4+slVspomY0hyEQ3aWNxbTH3QqbMjS6uYEek7fN7LUA/IMncfWq5yLksxqnegEqnxp3hFMqw0MSqHUcUBm3bndIWz21uZMsmxcMaMPWD6YvTtiOW727LSE0RJQuO2vv9tUsf67sQjtZHNTySt19K2WQUzzzx4WGf23oXU5lk5nf0ogUkMpDQZh8CGunBQNElIuXf1+kbeM2445lNAlpcomMEMIK+sm0ZLUmQcMkU+GDwt1B4xUUB6S8cNfBrqE9tCxkjRarFBFTtUhrASI3cizgt6hkI1AqpNyw6BnF+mf3Kv0w4SpPPNaw2trXo53VR/+pMp3YMY4ybqRZL1eks5IlcUrg8NyWDtptPBCoLbg98EIYv6E76jjzjpDDffHaJXivRsSmi6+WJoFwGodnbnrr4z1eDjyZ6Ikl+mIZyLCJ8G9coyl3SapjlWQlcZHynbR1GGib4S0S9xwyjLrDqJ0lymTbw/leAtKcyY/Q8gyW9+tq/gOBfoFBGCGdi6rmafb8RplB2Sfh+SyWrwQE6Nq+GPWdtMpIcA9p3FppaLCaxiJSfBeZPHpJ03f2udj5yyupvhsilhq3zi2hK3hpq6UryaDRM+F75RYF2rDdWgW+wqMAM7KxmbHrkMv10U6c9GWtqYvOOxs6INna/xZr3DILw7nKoAOpvS8anTOFD9ZCVqHidSn0ydKomqnuCJS4OSLBOEY0Qce034TN8rku2jPU9KJLAwPWQmgMQnNYPDLwApLMpiMiD+LgBR/Qz9B23Oc+ac6ZbuMguAxHRrWuOAR67+sm6aCY7VzRNzlhoyyQYI4tpQ5Y/pCz0nzJXED6MpHCxVtcl6rzJf4wgJNZKgccDUNGrUkE1Puq135lTCXXhxdFKEHWKzYL6MXj9CL/CYXXl60Ew1gvxhOwKJkSQh4jBsykcQGal9QoU6nC8szOte/KnpKS5Ab38uXn+OfpPEuFHt7dUzGLUsOsEIrc9kanwKNMRwZFYb8DhVysBUP2YPsfStnQGkvPNEDE4uMcgJykGJ4ok5QoJcPbPaB55fHVtzRL8Vf4LGNaQzKi7YGGDi57sV2pe3nM+hvq5hSxPKwYdRPbeTGYZ+67T698tf8ps8SWCSjKQ0ixkOfzTYfDKcVgQWsE1CehRXNSXgxr5tZsp9D/IfjcR/UNJRuMNsZXSaGIN209DpJkBhejKv72IVbnSTGO0AzlMd+ScKX5bJz61dgP+ecpF0r4SOlYDyF1JpGA0DRPEL7jDQVvUKWdrvMkycx8NRgfzUwMdxszyMNm+RFual2lvhC3284WjQc1IGGkwhRsAwf1haqb34sff+T7TBNCoKmyzpPM34bEKsNBKcMk0HQ3nHQBfb83secO3zncyXo/+Jvckxrvxc3MAgn3IGwhFXaYsAS2TXIgKWctwWT3tZFhTTi1vti9VnIEYInYI2Bmi+ohlR3GSp+5o+MTTBZonbcUPn2vB4eOvep5G7rqvQa9x0opcZRagP79eU1E8TjBs8suP34Be0qvC7PXkC1jdnMy7gT2qmfRp+Z/0bFE7ted4Bk6KYrFAQcF+Vet/y3hm+8PXfOqkBIDVAdNhVhrYpR6RBnysr1Urs/QRNmN+v3PsljHVE/Iy1Xt7xUWzVWJ/BUHeqabsdtuhBdlzpsfUjjkxhmsxi4IBlbmEnCS99lgwPBmB6ZiPbZTBJhL7tZDuNmh8MjnWX2cBa4xVRKQgywo/plhySfJnWvu2kolb6Wp3Scsdd0ohcg16CJBUPRjZesqva15qai1LhNdPrJjXhNShD5iOZ3myyy7b3uUkZz04FoyDvrekxljbG+4gxsG4QvQWr4rk9/Bsm6s3ItI2a3J3HAdTFjUXxHys9S/Y+DoH/HHb3JCKxWz2TkeEQ4eFHg63h4opjtgPHFBxlZMcwQ+zFAVl3anVTHtyvqxO7Bamd/nQpnj94qidfvLiR2F87mmMIGzBE3FJ1Cffk3Mp1mWko8kutkf9/ugqAZyBXXWUMxxWl+/FV06jsPJn4M7tUetjJl7noG2Ggw2KENi5kHi1ZzA4ATJODEf/W7gR+IlZ75keapSmFgAZhbIDRLI3/0IGWLjheaMZk0boYcg8ZaBZhNttLVgDYOG4taTWGef8VqXfF9zsqNt/6/qgWC35B2qL6LvJds7Ku3K2DQtzAI9Ws+qGGN6AMGUd5Npa5tDoSIYhLslssDeCzCwbOenO/0jBskZaM3t89yAQ8ocdmJRq1FuulhqHfou+gBTkX6+gv5SAuUu3XOqIIMNF8jRmLf73BhFIIAJcodrgA5NascpMNjZ1WV1f99IzTxsrJVfu7E33qZzaOjKGSbOQTGjUmI8yPE+JHwklFR8kzE2iAY9YF2u4S+rPJQuJL4IxjYUAOjxCscRNmKfJh/uOvig/zdbDtXyIFXhrpJYXasw+u2QL+NKxABfKtyOHlvyI1hThp/LncZ2OvsiQ8SD2fow7SrsBuaUE9ALDz+WwU+HYCr0al1+Beyr+VGbEXYp5LGIthZsHwXdkAGcPUPNHBOERtKSa2Z0+vXND7bwvXmkvXZ+GhPxOQwgCBgraWBL5ag9A7qKbdfAHySFObsorJ5y01f9qd0Xd9TCnDrs751PabmGQDM0x29Z4t9nUs8DP7+4okCFcwJTDuqzd0jIqoMa3tzhwGPKP794UQVddcp/KQrC4ptncSa+K+i9tLnYxpjv/aAegMepOa4u7MC1FdDk5fVCEK8ZCzOd9SSW/CwnGJ5IHVOKD2OJ79Ne3eSXvmKBFz3Zb9N+oN9Pd9sDosyJuDr6+tDOkggBH8yFq5MGgpmTFOvR/ZZlelJ+RtY+pahNkiSNMXCdJudITx4UcV4HixJge3lqKrYh5Ekww+sjigDYMKDrVcAIMUKkWWgAk4R2TyNjIrQIdwtb3/Qt1LIOft2vydQ39Nk8xK5R5cRuGV+1eqhqPf9TAMtc5DEkPXTHL989lHriBpTalXqUKxQ6c1V9SIemyvp9/kyl4xrnAR8NfB0T6unKHfOegPQ7cixIcTMxoyJKgchQY6c8JB8Jeci1XrAMkjUmTG4hPouP3nHxEVf9o/69f7DgFd+FXml6kthZOw8+1nEN7z7zfV0i5TvXsDJ+PE73WQm+suQV7pEWUIMdmIoBhdGfU7wJWSKvKAnLskZd2tpjYywAuHTH9lmhddKkBpOJZ/WqLjlMfEoQzHMeOnM9ayXIQkCoEulm3ExFQlxirX0vitVtKCXz38TcHzdytlxU9iAKpDIXaolA9wEY5oIy2eT8reFNvxh3vvWsyEPyTAlY1lb/TW3IS2xjVmCwYIhN7M4K8tO+WV6k5j6Nrw7k1DcmESlCYTX6jNcQ7N4jx2Y9gP4+U0XcDLFRTLxGfDG9hgy4JGTlv9X3Ny2uoP/G2mbRLMmL7Lk/YjivAWnWPQ+etobkbBtDR32npJJvw/O/4WWHWz1Fdvb0bAtUHl6NDFQqp3xlzKHdvtiIerO0XbqB2cLCsoHzUJqWFLGEqorIEPIfw5079/QE3VrDpKotk2b+LZ6ojIzMCT3iw2sBrV6zlqlUVS44PSfHjCHhfH93Wr7YyD6r7ROIw0zxXuQ5cb5GE8zg80NLp+VroyJ3naJSY7t+Wo4gHoFe7j8Yx48rKI9U50+V9yy4b1UFqVvHnd+UJbcoLUVgwAmBVuYQT6z5yeEeAtuylbsRlIjdu+IABdrv5wWHUkP8cfKaWLzYP1CVQsfnZEOp0if/qv1+iSKiDQ/nUWgzONL+J11wnL6sOvhifUB5kpx+0JVD2V2fp0h2tWqFs2CN+wIeZauAzzBQuYSd/8+Oz5j35G6ju6EcpPMuAb/xba1CYH+dnJA5vDlm1fG6qjcTFjo/XgyDqIfbgoTK/lV5lVAjKJdcjrL8MlCfmoJ0bori8tcRRqghxfrGiIYQFlaitGCqIMJyJFAbp95C3IVyD4MEjJnTwA/dsgFcsSFfAB5T9YWNDnGeeakTNuDpfAplY1TyrGW4IbKj7Eri1PLrHBfKyZ1LvyuUiwmQsMCU1t+3N7AXaq7Ac//GpjHuPCGnsrfFInnQk/+UiBLG+42C1REBnY6uXVKs8+7RiJ9oJ+Z3nDCxVs+KRKn/+gm5vIuGls2tRbmVkZDUyj+ZVZN+5fhkFBC7HolrhUwnUQ7nSMWqlQlx7BgPQ55YDf9s44WPn0b6136Al2Shck4ml+B1WmRsDPbsG2xH/aahT5JHPZ6isl6TbI8gs0b0AvSZhO7Mj6qB0R92QlWD6snJQwVItTmQ01xP6bu3+tvMZz8hIudyFQ0C2mp9xkx7jkEX25YbmTw/7wAb8MEPUoNHp/1ggSlknyoCP8mZnjeYq8Vhi4ITqt2BHiyqnJcFE5Kq3EDIuAlWOCN0phNzeCEriXP2cCBcGjG6QCWevJeJclkjTuSsXyyF4oeGteaH75wRoqYiweyVWGKGrZUKRGyiwsrRLNcczQIOXuZ+wG4WcwMpkTkhdHtUFOx7LAhtjawW/1FRzxC19y4AoXNbFDof9X9OBin5t1WJRIb7bUM0C8zykSa3BPP8auHaKyTb3+AcEhjyxwguLLr4K2NbPB4JtIszHH6DwvqHLg4+UDVd9IFGvEw26VjM3YATlL3o2eaepnAEpBfdTTs5EPLu8gQHAEsX15dzIBeqTt/g4vLZGyuqPf7cM4NUAB+O/cJN2ngJEoyRG63gnLeDRdjAOtX1IrUxC8KJSesRp/SPrnbU0Kdk1Tfhx/0ryPKt7W30fqRTv+cy0nLl5XGb2TJmfHjTsgffDrnKNW7+D/9LbV45m/2irNMepnmx4chnTkh8FaWfsC4Dkq9Ya+TH67nWAY2UmhhmPnRj5W75MW090C2ZCLDU5KMhT7rYgJuWz/+0Xi2/1ffbFMwOjjuDzKlJmankqSJEYta/V9NoyPFc89khbVfM1dBE9dc+3VSXT5pu4Io0klC4FT/KGRWYjT9ioswidepwpn3JZncmyGm39DyZBUAmrv6vqwsM9m//yF0P9f1ivTrGi/1jqNcaXdpOXXKXToGcY4Xxc5B7z6GkwHxmWe93eCCoSCkaq6sn33kzLXw0+f9Uu7SuvNxs9Vu9HXQP+PZHqlG5KiitguoPipsNIKFm/lP1VwKOInqD7uFU59ouWq/CCRCq5utBqXVpF6QjISZkOC6B2XMN5gWmXhrUHAM1iQn80tR/nwLghJs9mHPJsqGuxlKzrTA1Gy5/fOqNXS1ZezJub2Ri2mA1JoDRHNyv429CMJdu8BznCP72wXLkrtUdiBSRU8Ta6+z1brWi1PKMNOrbFsPkCbm2Eyvx/zBVwwQP0e9Fyt7nSU0RPzCAGMojd5M1kCchQB9J9Cxk4gze8T7lf9YOCKpZcNUgWSsOcMueHyFnj4ROk/Kn3sub5G+3P+pOZoCvtYVJ2krUX5j01RgaNkEC9+HJurq2Sn2zsFL2P18z9piggu8ZY5DtnwKoJoQjAsrZPH30ob/4UhNdhB32cgVhybZwFN0/VeSBKfdGdbHo4Sey/VT4+1pzV6cP94cYIQcl6bB8e1Z4FObO7rWN/An+kowV8uWVn7Fd45kAqh1dO02b6edHo48Ygc0018CedX60P+ygPWnn7HxFjvTSNLO7KOO4k+aus8vKwHNdObSaTNCaiP/TaLL71GPsOJJWpXaYIjn705oqLWC8hNmvmOPv/F6adZ+oliwXmXXZ71V4Hb4G6ozr2UPgy1OXRFFrfWWyHqnygvj//9NwG/ycDTmvZXyaeviZd3BKVZaShqhMXtHvbGTx5ss/TeiHKKmh60v3HRAQlH2GEbz5a7gidR54jTuVRgfMkJzAnQmEqJgL+cK3t5VcpwH2Ija+mys83Nu3awvSUEu4T6sXdjGCgHyR9sTbA5kKjGf/+9F39OY1IqXfINoZXXsdQeoARSioUkSRuUZodvUnxFhSp5Dczr/6ztDb83nvCJW/ka4jJ3jN6qZjMmGtWaqZzeHYaqbsvwkz74vCo94RmhjjStdRGlURvfr5/DuI2lk0bn171aqHKQ/v8H0kjlbw4/VqNPVXaaV73bCe5MoLY7EaTYDJ+Ma5xdijuVXgpHt44w3BFwwaYEjdn0fHEIEjAbt8kWiQo9wDDdIRminxANySzfVQoqftQ75KMrun6987pi7anzRkN9RBWxF1xXQAL+0TjVFQCTPFUAf6SxJXmX/85/2VhSDYBsrhdpnULX97+e4R/8ACvMS5Uz69iAonH7Z4NT9w+PGXswxnJucO/Nx9qGO3QbsZ1sGDIj9q+GAr1W2qcwyxUcfI9vCe9L7KavqpE+dZeat0FH0hTqhoB7wlMOL5hwdbJlqK261oF4gRQwQWZcnOk6LiMegtJklhYnNa2YM70JdWLeMsDVBPA8n9OySu4G31MdXI+/5faVsoIXsxxYUXaw0bn+FlzhmQ2Vcz02kAw50eOP95IqH5jTZ79s9r2fzgajJ3eC9dk0WPUHjfrEEuPX9Qawk69/0Y9k/JzECsh/yXBhNt75pLYu/xmcz/YkBazz4JUwzj4sTXtxni4JpeW0Ygvm3YT420bUCdpEF13GBI9RwFkCyh15pKthkOkT0HVj/J2SJjsLY3NVB+GMC0Ty5WnFKkekdLmq06yYjfNVgpKa+CM0nBbB2ipQkS/jbEltlo70Ijne2y3OyncBirZ1I9NLkBx0ILTbxLBGfTvOh7n6J1V1e0vIZtHP602r7AOvOHZ/bEr/FyjNvNQKQquX2MmwoHsZBF4qh2dMznEjWwcSkjj8P//Z8OZfzdxxC/utjGEVHoGxW0Vucm6IxfOS3ekItkM0k+QYtA9K5f0k7MtXlpFBU4EqBQc8Hpl2Y4RilEF142yYXjSDJ+yoigNjQYnHye06o3Xy1s6qnfmYFgfVRo/jFeN+Fv+gkCLHEpIJkNO+yht87vwjh6TB1R5zw6xOxxu3no0KjTWXKykaHfXNhSQSKicCqY3f8TeHyA2pkuZWljqfYbAHM00eGK3MJEd+yLWFcOZgSLS8LAZX6jVNMDTc8FpA4SjkM3GZaFViHCJHKZgGIONcAmJP12jtqTZk4LZci3UYT9rRVUZshjTohrLGsjANUYaNOEkEBt+H4070Fravwp0KTzbBGi6jAc+++QuHiQgdgAdtIX5uFWW91UUU1eG36ZZ8r2gafB/I6MWdgZ9dROZ5A1NwLYTk9t6hDbFRh6frjn/AKITV2KYZ0zlCV8dNCB01R2W1x5ZT9bBaCZKuSSTMhP5oQVONbzlW08a2jESN/n7RM/CekDycGTilHhMTIYnkZ2EPYmF26+MDq7yeP4EFsbj8vuz5guRuxIo8DxidtvM0h+uDSXI8tlUf48m/HxKxHabGIox5iyhTma7sGlbq/wHn6gcHdhTsU6rN+6nb9LXTu3HnoJwvlstLOxBsKK59hKQoYENOYx+CU3n+pj+Pj9FgV2rd9nRgL8C2kM5mdVKFb77jrGmHDBz8UjKI55ey/QCFp8OrqoPU7hAkeyQtmbPUk1vIsQW/j+7AXclxvNOimHm9g0VRpe9Ils4+J+CVDEYc523U29/iWvrwTjaCz4NyjpiH4GWLMu1CYWblkd80dgZiA8k9Q/JuM301Y45CPuFPd9Yd0l8f4F4240bBhUKgyQ9Z9Dfr4/ow3cyowZe0wzTNB0bdRWC3niDKtudduw4IOmoSpdtud5IPBnv2NgPnpq8B6r4jt7LTt3odESINqgQJzAYc1FNmJw2RGAUR2UYMdsnl0I6tdIiE6uj7HwEcK1F5C10536g7jjnVCZMpsUFCTXoS7qalwyll2A8G0siYqoOdwdhqxGhi+s3ruIjjsU8Iq0mgrk01iny8M0ZRjL/fp4oeQpBFH1IadNbbMHDxWlSzVDjsjNSloDmDOpbTKo+ZLwVgj4HzzNiQvyjpZ6gU5edP3u2fnDP+dyhe2y5+EnBTwRvH8a/qKA7SfZvy2IC9H7LSi+zmyfbwLoyqhQLIkysH+FXH/Az22+vkY/ueO+QPiYNGPcReCBFjab31TsrXnWlg+CKlJCxsTVVukPsL8VoEZsQJmKbcUJKR48rP+NKq95uGhcgEh4gL3LnsRbcK5Hnqv+BYehSifHSvLN4V5DHlSV/sUfLpbKNKby+6PoNyatzW3RnuDi2QgsZX++YPvOOmZ6UR+VjHJSDTlO3liOA3nl4v0wJCEbWEQlf2zjhRKde4ZKdOcpQng+Lv8wRiSYV7FYcFhdUuMpjIwe7fNcigiA2MHCbtkjZkArT0dIuQMUZV72imHiGzIJuQxz9dftbK+F9VX1ZusWqqO681rJccp2CRv8fv845KJTi+8dJSmj8f1k9/J/GW8hQ5lsAiMqoWaN/vJqQTSVK+aeowMGOoW2kBlZ6ZJSxaPF8e+7HlkL19KwMaiAh0SHCQVyPx4O/6sU1k5klWafrsCSJf35WUYl/rdGEl0yA8/EEdiO4OgVdk3SVRUcfXdsL9ytYfe7OlutH300AeJEBsdA1pFv4C+6sXWNYAcxbNd169i0ygITgKxPIeYoF4ZAKO+AjPE+fj7wGby4dRTaz8ZGAulO5HdPel79hC0zbvtiQ0D7N9wegfAbLZFDWflbzPGv1w6wx5RjW0VQLbwOcGWRWo6NgcuRK0vKyvZ5peUnhTliEPCm25KHnwim/GfvB4Gs//zZoTMUtjYz5TsE9UxyqsnFbchsM5NAKYM0FcMNY74FhBDnPL47oMHeBYatcua+rDVOc8vf3Thc8uN9xhx5hfWatjSgFqRO640vjPrfUOzSo7gQCaGUd4IMtN3AbfSD0ZyrE+f15mIUsJwrSstqC32nG1DMWYzfxp//dfw+zcD0AlIjeepzt1rLcQSUa1GnUlUkgpMT7SP4feqcNB8iOwzZgBSyARgYH9H6o2+UX0POSPdXaHQKvRdWiA+8oRXjNTIuVGW5OFC1Gp9s4j5ARaozdYBltKHjR9Q6yspaMLf9J05DEB2GXzQtCCi5zq1MP23jU2rJqZTX0z6spkcRoxpv5DuOE0CTh6bGJhZ32RA9BmRQSvdsbXex6wsvXsKmy3vDp4wZBvNP26k5UfCca4p1dm7Gv4J1dUX6dhMZ53TKntuhCR9H2AJyEowdHcxUMKAUCJyWdHT9vp7IPc24a3IKbxyYx3cxuoM1L79AV1YoipoupJdWbCE9G3vueJ0503HWO6lJLR0yQUVYzi+PqwjVNjeICPruRv58lBsD6x0OXYE86QOtsrV7+NZAz9BT9zSPIoWTidPLq1u2T7MpqmF84F0xh8OOSpDS0lS0oL82Wob8a/YSj+5n5MTTZWrjYIRWkUsK2EOOCxGAykNgvZM2/J5a0DMVDoS9HQydwxcWmWr/X6Lzy0QwuaYab2zVQp/35UCKPqkGYbYws3lxgaalRUXF+ZBIL9NQAjW4bJxvnPnO/tLTuxJTlxFXMNcR7vaMCZOhXTH7IWoC7UYTdiQRer25LAYhh+KMNTZpI2ECuiMEklTIvbs7gIHtKoWfQXL9e+NoehcvvD0IMSBUrAUAnnJrA7WiSHA8WSHOM2CMCb56IxlL9oKkBMwJexnHynp+NCaHlcWCK8k/6+cThyUPSg88HddAKEtHn3ybVZ4kX7CqBqAerKgqDzRU0+8J7x05uY+MzKgVR9W7C32rDMMUy688WgiNdha0HokvMl+ewr8o9/o6ECmOrRLovvhwKBzLYGYsmC14cMdwbf/sU/CWJxw3EnKcgq4IpzibUymvm1A68ULDkUTAz+beUVdJY/pISVll+jVNxRkHycfhKudl+CvqortJrxtb3UPNavhhKqs+fTogCf3kej8VSWEvSFPQlR2iBsrVgk200YDP/Ol0KV2TF7dh9hb37wTkxnde6780i5tlKq1TZ2t8SF6W+SAoHN1+SydQl4hwSOo9NjFrgU4QCQ8VgxsjvAfj8nC9h3VWNHrMGIVGB9IkAR/TrnxMc2Ge/5lQRae1bPDjFMiJCMC+cnvWoKtTd/BzKkUgYi+ei0NXTl3AhLWb+nkUJpfDHOlhBpL5I8Rwep8gOK6ny6O5546qjGNmvipNGPmtzAnmUNRseM78ZP4A26+t7mVETs58xTyGtfxYEdBToWaqzr16m2QKHPmJcjz5+2PQIrAsWMKkybN9iOSzPQqVyvfLnFWhe+3A60B7+rrMjIeDKnRVSIcJWy2jPyU2Zh0Z+0jrWkc3goTm99Do3wFeGeVW82o+7hfiKytsJuMCMXMFb6hkb7kLkMn79xjppgjbvL07/OHujoM7gm/sPz/J8XJawUcgquBfpEReRYI2rnByUFx4LSgnBc75CfEu05Ks0/BmX7A8v0RNVQQWdttPDnBFceJMnwHLtrcr25HSgrdEqUVXCugdMakyTPvkW3/6olsY2J6RFy9uEHG4KTVhBM2obiUzGDGMbQ0Vund9CIeLPSBb4jgg+wtYM5HeBL4ePcaz/fxjht/k+jTVFf2EL900bKWyiMUiuEThooni93uagaN+JmSdx230pnWHY/6bSNTW98q8S/9ULIPZIjT8IuKIbmW8nWBxu2lCTPDJMvQcEqhjRmQ6VfxdwR6Hm1sIG1K01rWZ37154R0kKf9eWmJqZh2WNLEEYkM5row0cA2V/FcTYypwVP5R6WCYDKGXaXGZjsnQxpYmEnHxvgcrj3xJXhEmB6ZhJWxoapgiPP1zoEDIHiIAX+WdTzmB518PYuPu8sfhV83r/kU4gPnPGwUpr6oj06b0erSNpuR65r84e6EJ8ZoAuPibleJz/Trucg2jbnLs5Vq1jNEuuTDolyBvobUkPGMc9vf2NhMOkOXINgres7Pmdt/ClLGTjRX5t+4Ew/WCCytqIVpbJb5C6JiQXL3+INrvKJTEu/FrHRKgPFfUI7fL/1MJnl2K4kG5eKfVEV4lc7h8/Bc2K5NkbCiXAPzzSlbekaOLcICw9abkArby6/3MWfYYoeB384tbyFd+68L9G8fkL7GL6IIMBSWtIFWsC5F2p8w0qURAxOP6+6eOY0Plwt6wtRgxBFfj0ZQ5vpab5Tt2saUrcLdpUJrb83u4ObyJ442MXl2xVH2R3vj+hwVxqXuqVq8Bte0jRoyB7ae9gC0r8e3dIp3U90514eRKag8hyYDNJ9j70b//zCBYpej0FC7veVLsczYq6MmwmFIV3YHCq/al8L1k5+O5EauSApzXBQsO3Qoy6Aej69Y6yqcn7qNuYDIeQ4XarEQdokSgcfhbaTYMVSKzQfw+eEQolNDrJqOmumtIZvFAoH3ogRXheKNz5ysPZ/LEpSjY1piTZPnoRU7UofgKM4InmoIukZ/mFHl2KpCHmFfs7wc/Cn8bmtGP23TcEtgskKkL4ryzQ9LktSwtDD3WbQ+HJ8LChdW9IALuCFK/ZRNCwjfHgnbOgNMZ3EkAZSMU0VaJdENkyq+10czodQblGZDQ9xtzfgtHbit+x6qKPYqC1E5XNfZcy/eKhv1mpe2PL3JJbaMN4MkpLza4f9UY27KMXNlwZbyF+/AkXUk/7AWLPRWOtFLw4AJzoO5R/sTIw06Zf3+wMSdLi8UH2a51zKM/tNzCmUQH19YPKwAbF2oGS8QlMZ9rJnzbPysf7xItE4zUwXZyDJBPuaT4IxdcBQ1mwZ9bqKZDe8vo91fSpJ+jE/FA9Rbrx1N4+WJq4sn7o9F31W9vdcmAccoONND4a3YWi8ak8TaERQ4kjaWqoENh3ASWL8O+C+PZX96C1ragVRkACMSN2PwnM+e/+mmW6RMdI/zrmPW1Bv5Z/jur2JJLeqJB6p7QSxsNv9tjkNHhZyhboqTdpKgutoFCUSubn50OpjP+fiTeFASFN7m4eDJ3axDnSB0z5BAOyOfHdMAIIlWLc7J4fNVwo8Tj2EaQBotaiqgIDWVhvHce2US3YltGeSkgShNW9K/fOLq2UBMFnb8RabGKc1sB57jUhPIUspCAejK26EJSgDUh9GPUf1US9QQkuZqSzNtYEEbBQwYfYyUWS3ILPgp5anHei1Xlp6n2KgNnBhu88ke7PsAILMtWG/WaQXdgbL6gmYY5Le1o5oJGeCGFkUNrXDBuhuQ+BZVyIuTBbMz5hfv5z4xaijoeo7Psjx3qgxxkueiq6jJEw1JpiFxttU/a9b+m/89nJF8HNDDjwWIfGqqCsiPB4aHls+UlIxU4d6ND34ntkVgDgkpgriMOc1c2FyhD8Iaa+7NBQOHmjNcInW11hogzFERwcXcdUCvn8ki9UO760shlsH/vyEuB9f1oP4OiFgGUbqdU/YRLo8kv0FtkuWFU5xZCZPR7PteWYgPjYiYCTDkiHFoMDRtytkJYcZIs+39VI+96EeTHKRdsQdoc1cVhzf1XOaEqxmE/R1HJ7RrYQ14dzDCnBPbsEzo2u5doDxb9lKYDO3SYW1PWCZNqFf3LlC/cnq5H6LYRdVbCVi3oCxWDouCJW3wHB4AgDO3y309wi8SGtA7cUNblcpVFzxsI7WzL6rQUSvwdBKNxQyfUI1Wz3MIL3PqTPjo1XYxwG+pslmpi/7QiBkkx2sah3y9dpM5Ik7VE0tCIiqkvGn/TGJoFUsXRDkDuntgy//qAAe88lH0SlTaNTlzGbj3WyTtWo3IT6ZxjbW0RqmeJxy+cIA8J7uonzMKq9RJ+ZBVaQuDKf17s/1SF6D4+tBpD5wGc3kFiOc8ZcU90RFaD9NRlabg6sdUfeZM2UFENlp5NdrPQIbiwu/kpjNAPD4jMgosVTKnjUcsgIRYGmM6HtsTWGdIkKQR1qNQDrdJrz64Rmr38yOz5zZZzfdKdR5mEVW9/6818LXslkuk+1ggtFyh2VtxJ5YWTZzNWq4hqjLmN2qDPiZQQDf5cpOIVo/g399EuDEhgJwgYKIAfUn+YeqyxO+Pn1dfCCqR5zgD6wB5DU/P2Q04yVYghdRjpmxcx30AYZ3v3moS5PdFdYCpNp+rCapLgc8ncc6xF6aaTb5TLXABTnPwWZABbrli86sE6qYvEfssFJCDvTR1sNhDPkENhTI0jKmdp5XUQq0ZAskUWSzhdEx6drp842UgeDbmwR0X9AOoUV2Q5Z9RALckrKXijuI8cIP9URx2uHuN9cqfL8rGBae8JzNptsZtSYBJDAmEFnTB4/GUm+t7svM4X5Pyq6rQYIw60ZyJjyKL8+q2DFPBMa9O7Yqa+INxO4T1YYT5tde5oKqqr1CjYIEzdVy0k4/KDm0v/2qAsQjdUs37nyg08mr41XRsvOTS85R9pEiEkpRuZamHgPah2+k06LvghhPrftsBzKvVhzAmY512DvXTjkWRkZVTXCu/vxlKFleO2p7u98D2rtKp+o/jUGq2eYbQt+eSR2k8BFEpXJuUVGwVPhMWBklVpjJaz7YWwMFtecJCJ66DqV+vFiuyc+B9nZ3YVxuABroA2zoiR6mK64cdlBOQ6a1HsDwcL2QQmZzKShn7tLqwNQbYF4AyBHYhYT9uCNZFss2wx5INGXiLUUMOvL0Hxnr1kxrauVQ2Jh+jhLh68fDoUWtqtUP1ejaRkflWGLL089aBGU2U6KQG9RR3yLs0V/mm6as6hqGjkygc44onD0HcaVoRzUMvKR7VGQyIH50B92FSov+CM5/y/1Rfn2qdZHDSUk2Rq311VMSAdLJsDCbZ5VqAQJRvqhk2nlAq52aTcDU6xcWe4jIpe9DN7g6UuGY3818W9CivdgxfBi55YU4pSIg57AU0Qjjam0epMKfclQ9nVZmrgEF3anYfx5gf/FqtBKUNW1LBl7TbUkbh+WGVdCpIwr+jxUIrsIgJwT4mq9cWJnlemEbH10nA5GvUcl5H+ndiOiMFseff2xZ5Gvg38PHR5aHtxgvFFQQjCVFOotcUtyR5n0pFNJkKW5yWADyvTtUJF3pWCLAaoRROiNcJEh9+9ZT03Y8uxBiqhpMXtqKU9MU299e9Z84YqzS3Nt0bpiBQ0uE1BS8oMyxzRVMn2/1TILpygJVoekkyYTGz90OPeBWg0e2hA3muYstTAeEU/jD7ybkvcXRmH9sPTHbX5Un0PdspyIJWCeiYUvCcw6CmuxibI6WVgKjZ/s2wuZWlmG7Ivl90/k/O+YxvxA4V/oSLb+Lok7AmKKE8NhN/OZXomf7/Q1S2/y2z2aZSNSF1PElUY1OzqMOMspnmZtKpnneUuNNDY4ZZoNT/NcYd+0NG2Ob6YDaxHFW+oMDYADpLEJ2xVBkSvN6/G9Qld5QXQBsJ3pzmWVntTIDwlxQuTxD1+joYtA8IkaY/B1T4ANQoCljBVYLDG6ccrPK21rotEuawCXS0QmyNeyc7wbk/yqGOdvZs+SMltgQsUFFETIBrW5jPlFRKK1n690oDNka9ZdbDrAfC0mE1EC4qdPAmTZcITFjS/Jg3UHEjYPnzIQ1hfiBGeCwB4mK4+PHQO/qEBz2twzB5/x75l9OPlHrRMCvVfRT3SW7i8FfZoWs5yDKv4NA9ZuqH3CKdh4Eaoo8LAkM0eiStf/5fzNEtTneusyhvulsEmT+Kcsp64lVDzOkRFwAzOkN1FD2LaNrRGhdc/PSD4ArAH050gSFf/NxSBl7o6bummmLxEcvY7i/VuIhaiQfrEQNg4ZtyY8X56W+El8FfISVAGtGIcinZZa9qPkPWLHE/47p3Xi1Mf8Gq1wi1kR1W+Z3FjtrEjrFt8/1dshqMYQe/IVe2KCit5r/zEkHxCXfRN4gID13v23UpCd3mL79/qApa495fhc/pNkFeQxunPLhqHzIhv841pLw93VP/ACNFB3Kd52IMpRLteNLr3PySj4zDWuN6b7RKhDP7U4kXJ6UQqYyE/kdTAtrDJc7WTZfjVVcxS2TwJi5ZNPNII5kObjzBr67Qa7IEdJkqHf11Op0BDjDIBmqSuCgrhWFXZrhd0R+MVQqzs4j+whzwKIoZbzZM85LQD2ZnIUS28BRvyCS3jHygjfORokpoz9+rCQss4/aTWQs+A2NmfrbS6hgmpgEm5ahjSKV1hfJJvFAuwtl3owPDLRMsl/vS1fOuHRPNcWSIuN6dijM0Jb6ecLraPeShhh1SDlxX7WHoaqBwIJyjA0W+QSMOGYZJAX6uQnRgYDugMuaN6t1Z7LeDOVTfhbIwAdrgoR4TRr0tws73tZxuhkn8kR+ZqTn4Gv8GeKttPYHRF1F4X3+dp+fM9Qix4FntQ6zixO4DT3K3a6jXkzL8LPZ8bSEGDbSm2nirQ2KJUVNW3E3RgUfFnJ3snHxY3UxNR/T7kWIKr64ONMiSt+jNHuA+khiIaGZpwu1MS1Nnl0byf80eeVmZs5ht0ARgX0mJYyDOMYp3mkxTKRTMjZO/0L/w26EdwScnWpcvzvxaM+sBjzDGPKzLno0y6T+4WZQY87wZXWNr2WUDVI+Ob7a2gAHgupSO05PHQLrYOTuN5/I+8tDvzmpz3eDir07/S6KUrqGOYWrFXriUDSe+tvQPrBuC5s5soidlPc4Yvxah5yDlg8WV//PG6ZFRZlADEzD8DUQWy2WG4qiW/iUqL4ICOpaYSYZE6GXTPQ2G/VStToJfTf/07LC5klqxMjtDwrKj7C9K0uW2kEnXtxLFo2+IsHXhYHKUYorV6cXT5Ey9MDKJBs0slFqXriPYQp7eOrdU6ssyfa++X5U0LWQka4FztaKaqPKZuFo7jTTzGnWVuxNVu+KWFjirTsE5uzbbqcYHYqBxhngmUc4LiYLPYTjDrMAuupQ1HhJOui58ETZNiAogj6MxSpucF/p9CsAmfqwyq75eK/xcYqYl6qRsVwo49J0GBE72C5OilYeY9Xob8NWNgGXkmSaQpjvu7M8p+KDEnmoZJrZgjl47AH9LmNhiDMhee1pah00TM95g+ig+3e3Dc5O44x21I4bqr4bR6ojyhcfEULO+kchJTkLsL4LDshUTASK3XtA8cTXzeYFrGiDz34PixQrlhkVCT7YmNsVi+F0FEDQLOGw04DtGDe9htdwAUbIGwainEgevEx1OiZnaUMBR3anF4xs/M5LOni52K9nYD9JroZbA077gbI4jbwSCcnNjVfYSLhWw4rbA64pezzatmH23PNtJNMaAMI+B1slAP0cfbgGWrs9BmyTQTNcYkwoTNQ/19sFlQlWKWJ0KvQSNVKxyQZ8p1uSM96GlSp5L7DJYokGMOIjdz5cwcl5D4Hq7K5RreoaSgY3vpHR1W5IifgPx4wFIByiaL5lzXYnSzSIZtDv2H1BPD3ONjANXPqk3SisGG5JUgGhEQQK4ZYIZYs+sYljqoV/kN1RAi8iiPh9sTuYgYYnLfBDjO3vRoYzjHlyg6erwwcmyOCJrg6GxqkhQWMse92uiGxUAPZvMfxQUxHWosPsRiur1fsn3twpKbfXEAkDOsZURVGg6XBfBengok1iH5DxJ6k2OcETH/gAjRat5+mbpU0R3ywS/8y2JBMY666JAe+8uFEpW1q+/5uDUQmv3r+sxUnXAwV2hlB/3XyH6EsssOHq4glV2uPWDFNmoCu6p6OGtsEN1uLPwlx2Buf9s7j+7u9PauePHHZsUQWIb41HouzPRUOycvakN0L+CZtK7E8U0QVWVOj2zeXVzgmOVMBugzaBiZr/11ekHSV+hKfGZzchGBxp8kjkpcMjUDbMr7M+uwnolWTP60BIrERu4I5BoXdSenfcnX1yfPPuzxeaBYSXpWe/k3KJtDcYb9PuTaKVRFZ3Hlzxuee4D0dB2uiz0YwbC4OwG9LpXocsHvmkKryAMihbw5ijeyzdVRKNlazx4JWQv49/u6/cdr52GVHuEtbWbEd03Vp5FG4ZHoYaBfIYpgp0a5fpZOurdYGIIXv1AUCrIsexZRRrBZOfyx9U+rRmmA3OXrixuHFma2DBv7EsMQ7bVnUdu/t+dZICnPPivN1goqHan6WUtNdkQNySN5/YOJIda6LW66R8YHUaySFQCXOb6+XCFZQ0Pe6OuSWGm5oJoT0Xiolwnrr3sg0UbWO1DdCEhq91mU2LZ1lX4tThtLaXRuJXwYOKp1XJN7w7/TcXfn6/jXl6lISd8UXYsqjPsH/EtMxKYU0LkVJqWngzIC7NmynjT4WHU86tZ+DhQs5yN9i0bTthpF8AxCXZLgTaZ0RrNcq8Whuoz0CN3ZGZuPaPIF9bA5WvH4Dpg6CMg01fuMUp38QY7+X6A8dy8oozs0oyIUejskUeyu2iMFoZ52pMwTfvPyfOyD1bq95SOmyCPj5kvOf8rnzDx7npNayT1HIzOTLunzXxcLwBt1QoGdIuCU9WGngY+pYPIA9EyZgfsMvETZWv7EaRBWqZf9QVWZsxisGUQmP4owptTPWoJyKEv0r6WfbcYoO8otMXDFkcid8ntfVgcPMLwD7gGTkkpmQ7zOlGc+fEQIZMWkkPzOoyPvD7zaiJtEd/FxQ+H4Ho5dS9tXyP+v+q1Y4EBMVEYn3nLZtdtrrDRTWYJ2Q9oFLpe/PXd5F6XvHCflsEKnZ3yartX9ZXNKaKQ1QKCz3rjtgfy/OMYcSirMDRIY1rgLJh4noFoU+cOJSQzRftIUra5LVH3Y80zPavz/5EVDkJgMwN5WZWBmXUZfmLpcTWSBUeFsagP40C3DTeAKDN0Vi2u3I22BYbK9UXd16JlPnYKyOP5IB0CDx5E7xuWzTK8st701nuAX5RKb0UlSSNWW5VJDj4NaBPg556ZGsOaauDhKWIT1KRyaycUQ/Z86EQJCOoTfneanOljZ9DfLe/SOHZYHa95/+y/a4w2QY0/Ci5iVGCfz6h/BoVlxYsXyaFOMCwouz3Iev4+c6O7vAmpqtjt87W5EMgJ4EqliKWAFr3MZBkU6BtwPDQHGssZlHddlsYNALdVHEA+YapmXlZPgz/OdcxjJIcdoAXrTG3t71Td8xWffzOCufDJ7+6n7/sgeEQ5RmFhFn78ESbrd2rFpbTsz1QR2VOcKNzI4BvPnF1etOE0+/PSMrMe0Q+2jDaclIhKHRNHNO9ga7/KLhYbUf8OVNlD+queMlnt7psYx8u1aIQWWJTyqGqcb74bwAAGk9SViO9gB8g7jH7as/NqUUqgP4AoNe1uizaGFc1unvGRc31TsjlUJHFAIPXdHocNzrsvbuIY0uleZQxicXhsjmTsHGin27Zp8Ftk1LRKW6qTSkVEeWKGA0mfkdRziEGkEKV5CeVguN+u+lggQKk31hNttxnLEpjO/BunOUaAw3Q1BtTZU/ovGmN9AMBJYdSKtQmhtusCzyfnumNuOH8NuL3OOl37rmeNdS7/wzuj0HdplELAwthhmVNVQPZhcz8/HEdiFbgjztmY2VA0Yw0c/ssugsN+v6jG43zc5kkLj20bifAbvLLw4nSe1zE2hjbe9kJNlGmQGGMhp3xxR35Sr/wuawdNMNc2I8sO2havLzf09mJm2jaIKKP3+PJ/Zg9f14XjM+4aFbmRA73NDtCtu2LNWNRvYhL6zx0rnp4+xQWMzrJirBaDmnJXGxpPLzf3fxyjf/2reYY3exmLwAwyU0YjKBEcIrcbKRXl0VfP+2wAgz/cTCMFTFsP3u0edQ3bdRscBkr/b9evalwjKvWI9QrP8SjWCk5oUKJYJmybHnttl8y0JSZGiaPdOmmyP7VljhJV8FyG6dTSgVYr30vdafwit7f4UyidyGThIzBN4BoRGIdz9X91ZAEZYA3hUB/m2t3nYgUbPOhqKv+tswc+dnssqj9bLd0tV+LZpj1ctJ/HfUKuhxY/NHsC2Lhgqh855TJ1ESZU9UQdtFCmGLO0RttjD4Hps0uaje6YksC0AAYYBzHffqC9CtODLoS9yerx+xffSQhQWW2/7xr4lnNd7N6mUWG1S3Ztiya+upu32bfzuMHsIBeX8354Rfll2tJYEVVRPpVdWrqWI4/nRlt1AcPdWq19evRPdDbQfwAc45dyg4rq1cAMu9J2F+n56oHvSo3XwFW5oxRngBWTQkWDEMmltsXK9YPg/4Cir6YOQZIymQ5Z6KT1sva7ZpMTZz6wBhnoPUtm1pyPORa9LB89FQoGzwAm4yMlUazK4EkVIqPObBXPPRlsUPzEAZjnfeKHwQeZaJoDpoxCloBFb8l1QF+18IlKFM6hztNRt7zrkDKr/SODxr8LQcSBl7FuhX0g9snzB+V7Z4jnEzOYK2wtydFEGQXG+bdMwtAaXWnQENluQZEREKPDtQH92b+SJdXk9EL4IlPf0HRdlC19EH5wh3k2N4ZDgYCukjKEd+5xGassqeIaWp4Peqsto9zga3pRQnpfm+An4k/g7FijM0VgULxEKmCoX8Yiychlmt0y3ZvkjfCIR4PiBqXMkfZrOKEbI582lxiJav1xd3iHnjlfs9f4IJYZ1AMthLQtykn7yt63oiwg5krJtd2Mj81yVOl/Bo9KecQPikKAvIPAm3S3d9l9o9tSOc6J8aKIglLr2UH4FAPFw7zj850TmujjJAMsaMtXKq1WLYJM7vPcyPiOKNVyvfkBRhL4WAIdf2Qw2I8lt7JoMD08HkZRuWCqDD5neVHjq1hq7i00mHuskO/D/1+QtewQhCSPG2iCKvo1kVYJXPhG7sgfe4JIl1XdS6FQnc5DxcaNjU+IkxmE/xZT8TyAIStsAVGJ+5Civwpyzc+Yk9nz489x6XMHZhbP+UyuWOjE19hlGQyGPlC4SCobwM5cZDxCDU8NqgloY6e38JgdLy+rXCG5ABD2uwWpbQEFAEQHccK8HTOTJMLFuorzymo2R8i6ld1s+CrJ2GvU83xxUvWv397N217RwFsTxouRDdyoeKRqFgDPDdLLDfCaVZN7pvrckNbWN2REeW0GFZ52YuS4HTtN0DPBIhyLk/U3K6XmSf+ly6Te1Va7WpQfwGzVmC5iT2fZ4aiKA7t17Dfay3mn/NLl4x+6XL5s7YEUAXx/cxpqZ+DLzwd4FjoeTdRmLwMxl/OUhNxVZ57WGXaqph3BkIfNkGGaHCp/Swd8ULOZskeguOGBN9buS6Ec2BteYfcwdE3ODclGa1T/02Ylt/cC5W2775kxHhWSLiQ+pn5Bc4EpFLNyZ/V8fXpqSpcfCR4EtHC6CjyQnI2YUvesLbnAGFa4JlYjtXuCdt8OZekYRQsMcy4c7aOfN+52pbCO0GkVWt6sI5mZbol+3je1Trb/uVAC22VHxbJS8Dtay/Vp5S8B0SKyzPQI2BKG/5Gse+q+it4z76jrgVROqM2IlCVy7BYO/+059SaUExBACLAavArzCdnT6ygFDfLDUq9eR8wZ7NmzCusviVbxm3ZINL7JpZhtabvksEbtCcmjGSxcXAPM2L+tYnMWFqk3Lfy1RlMZOknqOEcx/qxhx7nDM9r4cXLEXjSzFHyZKptR6/d6D4x1w9ZS+yKnlUZpc1bX5LKyCZxGVlHj7neR3UH3TlYhCzIHYD6uASmxTBqz2UH2FlgcJpyJH3OnjSOnMCrMx9Wr03UN0KgYgHROrzuisS69JJZf1GovLV8nt9Ue5wk1kY6nV5M3WSDwSCyNmT98aJQFi9FaB4+py853l3Y5IwmXmzf6tMgD3lMugIIE/jXz2/bMIChl+lJ0gKA7PqM64NG7GTDXnLozQ8xRw55W3fnGRpBqrSsbBN4mZ+6D1BjS+TYSIFg0Yz5aX5oSbxaeLKBKmI80WjnV/upWbNg3aMAabNnxMzyAa6mqGh1DnFQvTLopcX9F7rUO4a8CS6N0ZGRgnegA+8ms+4PGsGppqiGYEzlD5jxBATwpEEjSK3NK87PACXZ/FsszDSpslVzKMOUlQKjDiRBH2Qix1UAuTG3JlZ8Ab0USA+Yd9wMY1msek35cC5CxFcixh0yMo6Q9qtR+tvc8FgIBMG6+GNLZwbU6bGc+QZ/gMwYG2dFtF/Jkx/8VDBTgwSUyyGjSh6cQIx+VPfni41xHtsSoiOt+Vz9vlTW9vvqP6M9Exn0NR5snqHuIZviFpNSFXtyTz+Einx6CHBK5mkyxQt7hLzPXCYFGKIR676+HA02y/nyzHRcFDe9hsZqP4Abz8pfpSn1UoAwGUqep8K83ChczIEzcPd8Q/rNyQ2Z2/zW/9aKoskEPadyzRwDaJ2ekt+rj0S/5ZNkGarTWXoCxvpjcwVVMAsll2/psQ2vP1OS2+OF35rDTSVBM71ZMLyrXLNo40a77b9Q6whEPVuW3alaBN9+elthGMx9g5aNeqniDUIvKqkvr5jrAaMu7jnQhJk5GXHwrUeupG4PqW45UUAhY4cPEj4aPgm48/Pl+xyP3rVNAMabZGgFqZlcA1zBd36GiOJVpsMZCSPPW4QLJKwmyMU14LAyWKqnI6WD54Y0Qs44n5BQ8Pgc6Gm+qtOrkvAT1pHYyJ1SpprnsiCvyqHvXsCC9gozc7Oc0B1avklFPAfMIRZwE0S7gv4SMY7mtaUwBMswuQaA2ctLfjOHcPVx66GV0AIShRljDBo0eh69nD2EHfa9JW//p01j1jKAtwlS/eKkN7uQhait/f6t95i0Jgs0kqQuoUbzPYd0APvzFIFnbrvu4hLFPxy0iJXRQhAcL1DeGddsjjBCCqkjoQF9nzwQtZth1gteIyN2HxFDBIvI+rNe8qVhmi3AzvxxltL+wlInKDmTU8XpWbCAcIOe5dnOpMa9CyqRU/sKDrdlyfwMJICauFrgwKV9bmedqZdA0XBnTtpA3j3FQ0xQQXCQIEPmevoxlz8RN0p2H2ykTEstIT86PWEDR6OCBrFpgZk2sQ7qNx6lOkdio75ZuA0tr1QdJ+u86BeQuOIsbLZOMNL2fxaeGzvNNW7EemZtDoxCk6KiYEandJCwtnNLprmqplS8Z9CHLv9tn7PE9EB4cEnxqc2/lvAgBMDUc/SVZb0BkjkenZCabPpweKK83wti1kngd4tfixC+WMcHXeMSAHoRh7absND5ARf5xQk962DizcjF6Ju/UBPc4N4gQ4HJhcW1ZonkKTBB7gexqi7Z6V8JFp8FlzRLoVQnj+7hnZkakwynLQ/a4SaliqS2b+Lbumb6FxjMxPOvsuOuozYtutaHZGyICca7CmLJGfNknZlatQbskF3Dl+g486Vit9z7JbSyfhPMeWvNv3O6cajx1EvcgFR8LFv+UcjcslBVECf208LVARiWvrWxvICRaXqOP5VmFXksvOFHrAxcjGYNC512LmgQ8mohO68+qIne+tVUy2ndjh+PKJAbjXjdo0si8aRifLq7DXvOD2wog2HaMbxjGfIGidv7Ctsd1jycAeQsryf3l6HVhdXh+hG8Ofv3Z0cbXOqg+BTw2n7mJH80uVY1aoW9YDPFkNX43xds1WPb6KC8NAUw+T/qdGG5vj/WX2YEIyQpCDjvZtCvcbFMSqVdGm1ienZzBvLy97PifkdaZsbdKrFKixmLZWroWxxZ4pd1M6MxKJT0yJhdoxPgBhDMe3ilsh0fC0haFU3sekNPfY3hNZHlohwahvpvrn3E+b6Zotvr3LNJ+wVuo5+LXVEZhxUlK2+QACt8xBAtwdUdW7jfT1fcoubkJ6iQv762X5xsKAFvQXCssmOqB3AJeoY2CG/Op9nZagZkPwS72VjCnaFVSqrd1bAsKzkuCr1UTkal9Y9MnO+Bztns4n/l9Z+xEjwgEO/0hbu3yGgalicdmDzqnMaG1jMkKWdxlt2ahsskw13cJ7dr394Dy258dSWCzjtVvv+KSxp+Nq5YB/ezEG425jVN0MmdHvfzlj+EykHE7Rkyh+bvf7XGFaDnYZs6nknnYcX5NLsbcWq67S8F73H2UqWwJ+NTul2aPShO54XAAh61MuJJLJPeXN0wlh3C8SINvRByzj4P3tbxUv8H3NPcvTC2bPfgRC45kOfVpZwWjEchKW4ubNixQQ38teoGKeC/xeXiTftqy6JoNT0B3ck15tnqUkfBhZWsB1f71PuTClcN78jItub3GFt7ntgd+poAxriP+mMCMPeDTndj7IZdHYweFa5rWJyla8lBh4MBo0PvC4HAAAAld2xDXJFy4oAAeuOAYSPAv4Alb2xxGf7AgAAAAAEWVo="

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        # We don't want a KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
