#!/usr/bin/env python

# compressor.py
from subprocess import Popen, PIPE

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

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

def decompress(value):
    """Decompresses a string 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

from optparse import OptionParser
from sys import argv
import base64
import cPickle
from cStringIO import StringIO
from os.path import basename

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

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.iteritems():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            print ppd.replace('"', '"' + binary_name + ':', 1)

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'] = StringIO(decompress(ppds['ARCHIVE']))

    if ppds.has_key(ppd):
        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 0.4.9\n" \
              "Copyright (c) 2010 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])
        print ppd
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = "/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4RwWUvZdABQZCgMPj8dYIupuhXtLhmidwh71aWDLCyTDasT306LbJj01liz6YIIuhxITPaEe6eyQus7a3YxXKC+LVTJv/qO6wlszLEUmNCRTpadOW+fDX0yItEbg+ovOlu48H5PnYFjuyXSp8wMK/+prKwzQnftqpQZoboSQKwaLlJrJnmqe4i2ypDUorxMfaSI+UfVlqHipfkS9DdjxSARnrwqW6/mciQ670G3lPPj8WbYlAgMSai/RcTsY3BblplMwo6Rz6RIknN0B4I788MuhnCJVs+2T2YhQcwO+3EjA5pxUKOx8kJ8chbvCPQCEUm6GcgigmshBXg4ojbj/wZAJ1dCx8sWdggUkE+90EcPkJoqAWwHOOpypQN1RwncXOoiR86bWv0sKRNxia/wh/nFEpDBQUdcjO5NeYgJAdxz9/fM0bdzSfUGmysNMD4kv8hofBntmaTEjmGQWGCBYZPCGNWsbfgIFDDjPHdztOMaDUOr35YGiApuuqRkaOosypzzyXG7YpNNpmvkOeV4hJ7iiBri6LDUIUMJem91kTRochwmv4N2x8QAEFPYhvEnfOkEbiBNujgVtxzM0nNwiOUe1zmrOpn72Un3pEIrdIGwUiM8CfZImj/5n0T+/u6LV5JELQiSkbeHJn+33AQskMY5yj2iIpwEdmPnALcka51DzRhHbL+OrFKuKQlo7unvqs7vwzudbAgeKj0cgdvYsEdBWnkLoUEh4sVCBrB6KTYn07RVWh5SGLxLf3AynFX0IFLGczOX0YWMzQ1IV/Q6Gz/fbPLFEtV1QLC8sax5ZF8PP71FRUwj3Zc0vdyz1VHKWHSKoRnrxr5p2cQWXlx8tSooUsXYo031T+/RQrtLuhc+o87yC2R5k+fQCBfLuYOQ/Z26C//2UAqTh0za5zwsfkEShQs1tJh/980zkvEoxVOXnPEvTrRJcjK8nQWoJ7K14/S24eOJjbiC/H6spE3s01sf9KStWAPs/OOQ+eBljPr2WxJji1YR5Cw1hFo5eaScTzmPEMzEb9nDeMUmKzcgFA1cyEJzg9i24lIyYTOE2nUp8OiewQYjxIlzPA1hpKR/TYDGgvm27l7vmv5mCSaAkkUmCndHX4GAQZdSAokg1C6xvYZB/skqSe3KzQrY1OcLL2uhK0CvM7WRCprT9PGhff80zI/yAk75K+GKyku09rkToPReNFmtsSEPNOxqd3bcWlhvxkkeXe/EcfRq2mf8UOVNY6gOg89hayQ+mqXcPjP7qpI6oVoLsL0tSpOK7mV52yyt7J1KkFLHJXhbWOZ/YQ6CLB9CoYqgpIXMFKa/cH2Y5Y9fbWi/XF19+e6S0q9hTQtHh0P9CYaxo3hiD/6rDtlwFXh/SUtZkbp2YSJyXvcWoq+GRlz1+O4zX5HLFIz8g/jAP3Eh199eoEEUsblttA8VcJZ7b6XWxURjMa8xJuIP2AiFxF92krGiWcjsAzzSuhdyH9MeqXQwmi55wM7PgY5lv4lSfTxjiqyJHaM12EfKpWlk2HKQnUxFFrkvbJxN+vypCHvc3M0lHel9H8rpzwxmoP5Zj9PxCeePgmIF+2a/CBiwgNkWwBRrhBmOvpfUa0LeHfPNBPUnAM2efyh/hjq7bSDm6uB9zVwTFvJlv3TCjLYnhX9MUohjDh9HlBKJWpDC+RIuO42Tz3bd6gHLS3gzf4VhuJxd0ZIr5lbvEbmGcRqkHgPieGDIv4IRiigWDPPpQSxmjxL80TISDr40Aoz07fDo2aw67Cq4pr1dgFP0/5e67zFyUvA5jQFqBHsmDipHri3toHd08OdzwkGVxMEnJqUDemlWN5UcpeSHtQY0K1+dCHasClWYLH1jmngcN2mVTC3ErcFGodfl9FEC4sKIWpP1Q7yqIC/1cQUAuJvx7o3c1MLNnn8euC7ZYCldgYcrLppoNsTO4c2GE0HvEBYsE2K2cbePlF4jBmvl11iHLnRV2hvY5pWkEvM8M4qL5Dv48K0rcNRMtHw3O729rOUIq6X2zWjxaYwa5AW5/MXHIjMRyLU+DKCONtRxbGL6nR46M4RlKfPiSJc0Wco/XBwyCOC2sOTqUKP1LcLYYbSqC/8PoJ6+r/4wtne4Qn9uwVROApi3vTLYTBlgTgGB8ABavP5hGKdu1QkwCtHLZL1ej512QJylCeIpZXc1GElCmpr+dRUy2DD/jpezFZ0h/SdaM4GcDhB/fvVIh/lStUyjmaxGkUyMvXuGCe2NZkJJBPq0LllDucW/lyIOTdVeC1GiqTgONtYYIxV8zZf6F46OMYeVHCwawCH+tA9oGsHCwY0B6w6QWaoS/JC7sPYRNo9gqMmcDzXjDdZFp1gcNfv6fPjLNTN89ti8xCAsPVnFOUqCkAq6B1ZZfbsAvj1BhSK9r2yRDj2/1V4Xxk7kx+EWIssuXBhn6p4+SDGpiZMuPvzhG9+nK0DQZL1QRbZVWjQU8k2Ti+hnevvjr7H70hchZrk42m62Myj4j6lYydl26oUU896Nce9YanD95V4Fu3g9rZDzCO6dYqUrXk2X+py4BOhCo+iE6Zf8o7DC9LiimyUKDcnWAiQZha0kposZiJ7aD/GD4CsbhJZ8mxxiyF5pP9RAJ9fjnjT4fLc/417Th2RknF7ar9BulVZep+RVx5+xkW3f07mEaI4Zp5H6rvumT35WtBTZqihIcdgGRp7kAziin4nUg5C4QOO8v4PChQ2UG96WKcdfDQoGO669hQxXYg9ZRqU/rc539l+BVFfd4Z47uQ6DravjX2shuYkRh1OXZC62wkjbnqBKrhAEGHVof6qoGPjw7gkKHF05SIBK+Lgnwu9/K+B3+yaaeKul9sCRECgLV3irncbjnKTYognXxhyneQ9P9xdyFq4LOiLczLMjAqFDRytK+0NTXdoHyY1AWzWzo7b5HCPkP5epjmm4dg3mvFd5C0xFd/+0wzyS9XmRkqVyQJNbBD7f21/tD9JqB44uul+wR1/d1zOIeZ2e7NU9wY7L+D+aobmgLnIR9LofOTRZuuLvBtw2/cdAoeDe9p2iDNJSfxH9Hr/NT5Q97eRHfd963fWX73UobB982pxZsZEiNfNX3eHxQEj3LAFzyqn+GnmZtTvyxXOQk/kVZ+CLa8vjaj8Eo2PZk5ETI667hHrCTpyPYKirbFvFwwIOwehXDmbBTStpXpnWlHtSWdYLBsoZ3TBXcVrG9qhJjZg+kqurbNdrC84G11IJQH3jsYvVHW0TP9qXTRZxoEtpM7VOFlOWbwjh829QF0IXoWu+0AlSsnBUNlcsRAv5eIfwjvJoNGLXMhNn4bOSmGmIZCgDdjEvgDgvv4Gws2VfNq4cLcPIj2cUyimqYEtWHn/FS/c7VlrHhn1U0gaKTOacJve6fwHD4geYR6WTWxbkdV0VTPA1ZDKO9mU5iy0EKJowBy13Cx3DA9MmAYFMzxpnArkz6q+ew3/3X0PWS34UpJ3ymn1Bwh+sh86GjWrW+r3/YeuPlLfZjD1NzLgKNWVMrH30KpDd5xccq8iMVaPy1Q+5znRuIblb+QSFPy3ScfNNqmCe5pv6tZVzr/EpUwCLGnz8sq83XSVws572156uyun2ncfAHbRIZy1yj5fAaNk+3pu9ZPmIO3LTOjdeswOwuFrej47pFym2+pJIqolBSexQizBRZ1unCclU+yd0Nlzp6xXeEldlMiG0sJFSHsgIKEK8bbTk0yDV3DtRV17UALAAj7TSIB6YRGodqAobejBgTyzdE27D5vR7GE6GiBzfPE8Ua9mYXAgvE2Cji0MRvV8tXzXzvw879hDEGRLf1e9lykiIggxrM7iRjpFV+zsnavWc0LJ6PKqcupa3h3PlvlNWTOBBf10UUn7r+me2jb4DWCMexkYcgAGgRH9I2Lq/20E1fIFK33WffstrL2oIYCNTMpYAgSweqonJvbouZPK3y150D9+eNvAb2p7d2zi5mRhNvQf/JpnayTUMkHVHWe2AOsAYzf/fjp6+pdFOvpK1BcIjLkiz7VZ85AqBVpjxUsaErR/zNc3ETiWTvDnd4Y09Uumd21Q+MVcxmvy3GsZKlVx0c0UkhKTK1YGqUz/wuMKRvdUbdaZvTB1S4nO5wiYQJetFGIgV981XCLEcnbRv6AokokdAfML0ZUP+fm2V8XYkkeLHtoYmP/PoDITQxnHIEf0zi2ngMmov6sfGYAaMekvVDOrDIzfb0cvKG01DI3TgY+Gyo45JUmQo441tXzYwVsweofYF2JZGclOPX9z/aL4EGbKoBzZg2Hk5TonOnLUE7PjfGDcEQaYRuJKTp7d9KFq46XaUJeYqLjNkWzh/BaNRcRh/u09A2JIkPM65A53LA96zb76+5z4xVobeCqvR3bgUFNhumSMqzH9dmVVracWMjGFPSEPKlrnvvdc7DF0Ryp8SKuCUYAFFski20DgavsUnxQMOD9pDcUQrr/i03zVz8S7w/RYm4u2p5D4DFGAikBwy6jGFYOvl9712+m5EIQCBA+90iEsOHfI+bm5BYiZhzjihAtXh25vQdiDBr24LBYIouzqrKv2Yw6MUkXXAxnm+H7heQQ2/KO09ijiRZJ06naI2aLOPMSrJEOJriBdQvG45CvVKKNlf6aGmOWuaWST7I+GTst2W4cX6vqDD++YJCB5WsQXtJHsnwGJVu+GIrXq7hl1y0kXsY1fFxIu2HhmJTUHW+CgnSelJbCEQEK9twFhN6fHpmdPLTk6ARPmyKCMhYAmq55XnalyrlvJr5IdAZ64fdwjF+UVaTNLn4MW4EC2ru0SrDlTNGMos0cqmF5bYqavcRtDuJNQjT5NLL+naOW7gSPmS9+It0OBg3Uoe0RXBep1o3izelcRmtn6k0koJZm41ZoAPfTv+xNy8nvm53+6E3ZjjuSJW2U3BV3UVOVGXBrrV+4QYKUFLrPzsS90vlHkmbjUaBqg0CwINChklegXWFn3xItEAuMbRik8pkIpdVzL5yZv+/rexjdj6hWxCO0lQbFCn0Os0krMyOofCTrFfkogR6kOIMfjODG10buuGev0QEoxL6h5597fLyraFSD4pukvldP3Q1+KNWTi8nsUSl6fB6IlLbDNFlRAamYwqZRdStVU9X9h3WwhhR8m0ltDjp9489imoLSrStIuZzEYa2oJ7IxUATiHyrC9VXLmElaIImR6wsD8U96/6a9WYN/PbM6MOmNLfJiFM+/Z88X4o3HF5Q0c1i8XRYvngvL3NfxE+qQGWYLFuEvhFA8lnrp3FN5smm0rlgMy3UOh/0gVYCahIFIXSGsrsHaqv2SilB2plRc59Lthbs/++R0YVCRyBXlCz7EULopkscy+I62asnO4i9k77z3k1ygIA1pMdXdl+pzpUPsWK400Utv68iNcx+phdRJk8cFBY58oUYPGPJ9nywOMAmcZ+VS4FFeRrBWgjkTYj3T6gpdGkwyH5gfXynFv/6U/1nQhIdfi0926YRsEs7j0XV5uz+eaOtXSM+xUHvrGREQ7GQe6uv0nqO2c+KcBjqaM6ZPIYLiqg+1xYyzC2NLmoCM09vtGQCEiVqIq57H77z4WJz9Nqhp+TKEPl5t7JEk4xc2Z5EHEe39IKn1fv9Iln6RqUZdMiBlQtxTFpg3CX0HWCacu3rF/dSs5sMks7DXm2Xq8LP0C1bSo0Ce7lz+xqePU61ugUXAVJY2X36vNWOlegDbeGTj37NHEJbBWnrkUlcO8nIxUHxlfueMj/3QYmyomaYZoes+B1F2C7Dd7GTIC5+M3dJ7lPEqIEn9K4H8y/6IG8zWX44bIq0j0y4Yjgn/tTxpY33h9k/qKc8ayqLhJCmDetcX0eSsCi2UIPnpUZ7p1hYLokBUhJQG2Bq8wHlx4TUYA8q1PY+PrODKXprmFElUZxQ6CftfExiGheIGXMJjTFRjVojqUEUH8t1bgimNp+5u2/9Wm9wRq3EPSplU4YAZ4iA4ufcTYEmiMDIpbSi9XNJJ8VMyqoxcyCpWRLuItRpoNJ4DAu7r6lne8YO91AzzZLEr1LWGrnC3xi8ONvrLEnAxmxSYCwDhKWl7+aePOE+uBlCgtbjjGWzHAqMxtLc/4233H0G2ymkC0kBByY7Mi5nHg7J/T8ETZ05iIowJVCF9IJC05IzMFagmtgVainOncsR2jfKiH9EJEf0N4c7zMbD/90nD3J4MOLMTsEtUkdWJxhU4HkP4iV5F9aAkk/tfKW/sCbU4LEZloT2/orRvaPNCA3HqhNjaTkC6aWTgK5UO0JsQv06+TWAMABaVTdiXvOaJQ5633PwuHyVm2U4dKztaWPWzD+Itl86Ce+JDvtHECGt8dDeOWGPqbxiXc0s2oBvJax8Zsi4zx80gMcrGFrWbVBNoJfgewBDs9VAEc4Roy0mJ0FzVlghdQJfDQHj3vPxLMyZDJmFcLkTGz6R0VXXzWZvzDJOUN7pGknwOtX+1oG+h/iKv/bQcGIp4emzpFbuNu4mMqU4gQ0tMymLnz8CzsuVSyspY0I7x/kwwbxYDkQtF1LOl6o53TU/MZ/mO/vadVCF8OgJKfWjLZDpjPVgMvlnPCakrW7K/Qg5ga8qkZq3HX186QVkpkDvINdm3gYlaKNRMxOlB/pdMxYNq9PhgbvTmCNrtTFBn2xtviT9USv0FEgxKksz3UOceMHR4SMFyhOkf7P2FLD9xEeMRcaEgg/HjAoCCLOs4Uy6OutUhxcj86uaWGnw/NUEc9+5BofFwH0oyxKno7zVuo16a3MY4rdRwOYfLnYR9/p/SoAPlIf1jKG+fveWsxk75PyruEE6/V6WYhT2rCxL/Qd75iRszbcKpMJUrVdu2STywqnID6t/ngcfzUqEREgBBLdadptrmvv7Hw28GUjJOtVGaxiV4Il6XcEugLzW8AWR2gEojkTJfPuwJVxhWMCQvOi9JJdZs0xPWU8ohNcZ1qh/BnhFwCER9icCHVUiI3Uh29WotczIjjevFhHkShJUitx05eXV/FdGidwZ2vMEakhiiBln+RmeweXMnckh4QfvomGqL3nuyW909selUpt/E9fchYQi6z68qNMkC+au8nr75YM2IDT3SUCXC1E/Jr45ID5lHC/fJoxzVnFLKnry4IJHNZO5gGav3f2VAGpc72PkBAvujZi+w3zx0zISkQri3R0wxOIRkGii+mk4RVk0xtVrOAL2UKRuoWocxRFzzoFjoF20YuzS+dkDNJ+HnXvg623Ok6KJjYFBPez8mUkggbUaRlIrnwq7Lv9gzSX7Xnr2ko9JKdBOvXSDHtnZaoRWwd2Xn8AJrwyL/yzjqy+nfx0iL/y7Doe227ADpqJg9dnMjVWTT99boo3GhVGxLRjSd+HZ94y8R0C2UDiJTK/7k8rqhe95KIBPuxRqXOXLK9fLq3n92B7F164K9xfC0YjdypTM72K1teZmufecIqKMIZeTudd0DmjbXSdcfLLzvgzWdRzvwrcWHnQiBiOcYdL5ZBv2lJ+Bd2Kj72EQrrfMjKxgpBp8a0TqPO6FbWe0tWWmD0NahJRsg+fEXscyX7H7klg84Mi1F0Mk7wq98bTeXLstgIJc94Xj0xCkudNgyEwJcvybc+2pC4goPvwcXZO898pp6IEdLikoUWN66W6C4l6X7Z8099Hn6arvqEJXHgdvKr5RdVlj5W46TLk59akd9lxnl8avDfz8DMv4ZWu92oCtW7W9kHeGtx3idhOqYcjqmcgGV3CvyF7+YnESadkJigK8f6UDbvr5vAltsKPjfH/06Yh2DDWn1i6SmlMkLHCVBbJ4wQA2kqtq7kAU2/oW9ANKOC+PxUYhJ40APUlov4+WeHS5inRNCi0LIaB+eVSqwu+6jUHjzldvy0lBu40XfJA7nMmFIfWX0LnrPjjtQ5jAlyHBj/2cJi6/mzfg4KdvtgxfWLmLPxuHIv04tIwT/52gk30oPHvQwajOk/4A/luDVYN4YNNmpbvsUvzjRd9Eh8HjIg5UYGPGsJ8EjASZwHks6E9QTJqYrc9+kS2VNLdBrGnbGaz+TE/WwpRaoAkulX+FBIul74JfiImh41gkGWc5HM1Ss8DBHDCcM9VAPzgpKS7I5uwx8cNnKQE6TWzAKy5ySunPFDjL9FvExBaMwQYTTLXBTUhfPOJ++q7c5Xh2fLmf/8BjDOEBlGmeFqf6dx1n6z+jgFTY17egQQzf+XM+cf4gIWPg4h0lqks+FSy2CCq7VLukdyAjaQpcfVYYhc/SwkVKTNvXDpVjdPG4Ewo8QEA0rAyMZXg9caHm+iBN1VWZsdIXmy1zrJESv+WWCv18mFrcS19o0iz7XvH8PX3eFRyJQI2cLOWWKKzO8z5ng68mqx3DwolvCpPpZ9EAoMU/NvUy2VaRfJ0/g8+Rv3Uo0vFWi1QUtTDhubTIsdnzGrfcmc9hJ0+fKzxTZKBywIj0Dz/VHoczCo7Hyh+6kOqA8sgHu4W3uWypTSI4o93vNtKeoin/OdwAJmcbX2PWb8w7cds6s9lT/sGBZ3VR7/53Mr5yi5MFfKCTfIeMbgItGRE1wGeqtziYivdjB4UDZ+1j1NI873Qtdef/946MENLBF4hKo6xNfkJOizf/L1PL4NeRsUky3v/tdiSliJWuLZ9GtBSHJdmcY0huwPGny6z8dX3KmqoW0MIo1PIQTVNYRJqP0riuPVvSufqTfVUhTPqYi6XlRbVcAQSm5QSRYEXoGjpNxbJssKz9pqox/xEkjf00RAaW9o8zr/QBDxbD4YZPEE2f5IbKX7v2cK+1wAtjyNjhDnME1XwwiG0N5XYlxKAOJ4UivdaYO4UJJ5MWbFeW3xRlf1tlnKOqgcaLtMq5yzwWYT4PzkuzZ8O8q5aNgGATFJt6+kXb1Hr2EePA5/0a8Ezs7rgbCDeRCEtEdDFgbZgKQnN4q0pv9dJD6mPMTCdVLOV7tSVe1TwS0oznVHHyGe7Llmj68HCFPLSqMW+FCxI4wr3lX2MywjQjSscceJwBcMUqB0c06IJVrFWBoRCymch+X73/dxZ2iuz5038xCI6+2o2OrBVTSSR+jzCPotUISRx5uzC2u5RXDCmxFPVSPfHdBZmW2rHpHyOrbzvIsfbaE8PCHqhiGIZiJk/2lbkfJ7aYxIhpLg6GEhjtPbPo37k+qYuHtuDi7BtlZVeMxssIOExLyVUOpuLRMHwMt7yFrsnE0U1pO95TlDCNtaVfmoLX9N9tQJV+travDNqc5ntlK20EihGo9loSzMgZs1SP6IZWi9dYU03kuQrgIuu2xT0+6RmWC4RPGLMEYGhP4M+sFhAQti7e2Xjta7jbpM9sqt7jRj1pcl1fS945EsCCtuzsDopW21Vvdy/juY3k/GrbHDVW4Ke2hvTQlR2FQUaeJCPcgTOWEO+16Z/SJFAEuuPOC1JHPsuMQEeA434H4zT/8lVj8U5PXMzxTbpbLGHwWOmPyhv/qlXfta1kzxz0gN7BzaHlACcpv/KrrQm/7BbAmFLO5XA19KlIN4zCULs9Vow+5WHh1iFf0DWEKbbRjMsvpTBbYfivYytFjuZy6+ccvcA2QfMX6w+vOvJZuGlOjMjFJCk4ZsiiqWaId61O1x2PMHpduPwE+p/XX1y7VPZ1X6nZv3DCDygoVGFj7Xo01JMviDwlHP7Xq2r+o10hexkbG3JvhdyXpEL9HPeqVNlySRoh35NpVYeK1xPDsg1E4Z5ZLcyL7RtSKIIpzMptljiDZzbuswDz9dllqERrqvEYwMgh0Yn+/tFmYjTqb/vabxlJLahzfXaZO9mqh/LdtNjXgDNrMVpXp5WwVUsaQOMuQbBayO946cjD6ZJcqW5ogRQQuyZ/4L8/gLbv6gPyWduccpkY5IywyMr92rKuxo/X3wGNPP4BIKD4Zmayvtf3f9bDDQwBSTgUCZJ4Fdb6th8qfnfpgvJFogP4WrJqC/DMEj91wuutdVD0bPsbWc4onRhB7MMAllZXDyfrHZNwfE7dUVeD7VZM4KQxTDjphHQVoR/lpdFQ2U236jL5LUf954Sy/DxxCU5EdXZwaNFePL1l9A8loGk/qe2oIvQgVzZybgvVhvIpXQjRKzXuT65I9fkc3Z+02dFfOQ4dQT2FJtDCb4L6v73faRUzNZECnKDXo/AKNHivruspnDPoqSAbU89Sy1zkl/lBubfEZ72JGHlu+OpLSidZxT2nsIbqDIvwDNU6o21T3oMP3rROBtLrfteoUu0k6HvoAFHpCVrPY7FDAfh4j4KBqLxsgqvJp+BBZJlIQAto/12ksyVoMCeEbSQs1/bOSy9d3ExZZLDtvztrq0cJTshY8aaZZGmNXccb27XXD9eTk/0fEueF1A54AtEIqep0yNd+5lkgvt+nXulzJRvN0N9E6W4xBOnM7+Bdkc3mbqElUC7twARkeQZMZdAQ60i+RfTaES/DqN+Y/Fqnsz/qUjGCR+Uc6pXRuRMfvDwRbRSi5sGpYrbU2p0LJkIatlcYGsCNaoP6zVvJA/qtlktg8Z9cTPrfjo5C1ChKyZXHI1ZbisgEdstbfF7JjaHxDyvaX4/+6ZRfQgoszC3wejfD/7T99fewFiv7ydKXZ+bi3lb98N+a8JPC6kU0kaA0rm2kprRpeLHq7I/u2K/iKDrAXqskGRFIjBczFtZ7lWfBqnXPLl9rWIDQVPol/J0cMo48mXwYCDUMf1OcT/arNW56ZtrNNeJWLiqM5+/xnvbH0LU4xwvKrSB4mzlWa3IH+U8AEln9hYvaPAaIol2scRJgbQ/8tYxA278JmRjpWbjw5jXBXGx8S+3gpYgECLapnhYXY0YGCj74/EcGE15AW2hlcHHPUVdSgqeYo1ZUhvkv1reqFhyug4ki1bfqbCv8iCG+u0/XzrACvMqqS/IbUNy59sJOYGycjRMXxGMO+T1WLKbQtTzkaT8nAw0/VmQb7REaEPGbyTNBHmqIGeN908EYBns4B/6Go5n+ti+OpYwnL8QZ9xjq/oq65TGyFCfFFO8TgzodcQfFo6Vd1mSmwVmnmdpcMlm31lYWWimmxtdJyQF9mskt8lPDeJtHqS8EjPwFWtFikLloRLb1lkQWHIlFCNampjv8unZfExk7OzmF1DgV5PVYWhOqymoSYx5ZEOUQ5uB4KXXO/SUWfiD39T3ZL01quhI5aBkrGEVIqviSo+fezF6wPO1Wy1ZEFlo2LMVdaYLf5nr/lKX/JCueH0PPpYIx+2+fUvDlrJSZMUuYU7eUCAWbGthCk450XxE3+OnkgQh6xa2CVVMilsg5MYMBrM0OMmiq+z3fjNlUUAKDrcsY6ZD6MFjGSk+kwLicwXPamYZfadfHf2vZTaxA6TKu+6+pAVoTvzGsObn+M+0WRh6XwBaU54Vj8oEQDvbC9QfXsvQ1ATfuUBDc2yLoDM+RmWFdLhLjFRHt+v/YPHddYux7GT3aNBuDv40qrYYDDshX0r+7oRtLd+In2Rt3p88vLojHBuxQY68W1+VzL+1upVKAIjeOKBAU836abGRD+CUiw2BsObMkpbK9c28Ecwa83jn6HESv7/PSeXztm9gq4jiDRDD7CZ+dsHoExKz1FU/iVv1nF1xFOGEAgVrsLeWL0Rx6RrmMDnqeO9oBRuxpxHOHRenNlzEbpBpIgAQy/gl7C83HaMYjc1I+V6EM+yVcCkv38NL//79GU49MRth2R4TiWNB+78dhVpjV2HDWaE4mMcWneJg4x1dSXTe9T31DFX4Bxnemj+rebRiiaJUuxlhQ1Iw//l0OXAaa6wYSmN9NPiKqzTT2ndYQdVJblGwzMuTUKd4fKYFfooDnX6qbevj7F/iFlJUazk67PyjoCMna+oD6TbPvIpII2tEwU6OCUL3AxqzNoSjA9WxGzF6udsQP9ZHQlIi4/Ol7S2FijM2QqGpJwMMaV3cB1G8j45l2kurzOfMYNlJEScPlyqDuAmsFNwNhCIoNpRCt59MDG5D96CDPAPb9VNq+m9q2g3jxs/FhXgkbyjYEDiaRJUE24ssFDE+XC5Dew3C9S1PA9fduG9q3JZ334O1w+gFznKnJ56inR4rxURu9f+M0iYpR9c9lG5AD0941blAsLuHUXrL4WVEiNA8sdE1IH4HdvZuc4xCcN4DWOufPAi2qPRwc3AyjszRwygI9nUgONSP7ijIRAk/tYckXmgKVOvd1CoS3VxEIa3UeblmP5oVSEOq7Iq3wTsKIiovbUEeCL5cDTjNMNZ8rqGqTdfBitrchsM+jQu5R00p++IspZJ8N0MPeLb+k0ctMiAoUTVIQSaITHFDRhkfHOF7zr8iRjBZrQpW2kGLy1H3UksM668ATCZP21RTemYQWW+yVjgmF6mAaNvCY6Bf/fb6A0Qif0T8s8QQSgRVGSmF91Nz+09KbcdhM+wXZVpGND4JMzk6JKNDJIM/rwbChU8Vy9ZziGh6JM1KFY8ku96Mf1wKvy/b/ShMsvXD0mvhVMINr8WSIIr0zbAkox6V11ndQHEKxIyP+A62sA4N6tsol/58kVSjjFeXsRn+yyhG19JHo41EW11eYR+NrnqxsWp72vKy2Wm0SMF0+I02niskZ0r8xJX0K11DOaOHDp9/Ag/dFB+rKBI1kk58ozXm3RpoLpyJs62qcXrMNjqJsbVbXGviSCXeGS10WgQ62VEbUJMU7cSf/D3oARLG2F0hUsD4DrzHP6SktlIGZ1thfsCrDqvOk4HeDAqeVneYR+GDAXTBD7CBM/iUL2+Q3fmink9DjIjDQS4KVfVsuuZn6HwFD5pJZGpTu7bFdvbtcFMHRSgN1jjEFdXN+85DXOLzBSdvyQQfAPfo9osdqy5ggw0iadjelZFrZNv1/uTqxHsbuzPPIDtSHTged/+EX13rb73FnH0oMblg89hBgbg7g+QfVWPY2qk4ZdCnIZtKiUem7BYTH5aXGzAUy1ZMbavKH6dgQ2uYiC2MrdHDWlvSxdoGpvRSAs8ODFV1Hx6UO0o6sfdG64jVFU3saKRhbM9P+As8Ioi+cbf0Hu7evaE0zFz0eYIcWh3hScQ3QNPFscqrv+euv3TCYOegjpq2NHrhPV8D+MSKVu2J9HiVnzTkX5GLT6pWT9BDhJnrS4wkbgh4SkfTsUNzLZvCCst3Zw9iQ7MdlcM1YN3skEw3su2dUOp0enEagFbbDcp1dbOKcmcPf9qStHLSjXRTiaGgejLLKWV4l2kPBrsN80iN1vA63WVLGu2CtHPkgKpR7jPagiOx4NjekYU16UEVabfMJcg8US8wm167GeQZvx/eaHdn/7yzsgMXrxs9tKq3aL5DIOTNRt6OBCu7WeL781j5z36net4HJwW8vO6CwGW/rKGlL/30+A4iERypjneFcJESrQ9IGxcFO593zDuhwLgD52S5IIsFD9hThL1fewbMScK3Ef713+YGAPvD/kivIF5OBPwJG04my/nLE3Ot/QRCtl7GTe/zHgUV0tqdgvBfLIEpvHZcg0UlnOAVZsat6oXZ/Pobf4v7LM9FrBicIjrwKoLAKW781+mqpEAlsYfTMwfr17QQ6phP6TtRoUjhfRfjZCSDzi7RWUzEFloeJt0fsqoOlsDD+0O05MMtRpEAUozxJCHlDihMuMsnKEgqsvNX1IJeTLT6AYi4z5Z9jxmlp50drt8KEUXpXL4O40mY825mET3H9kXUfj3ENcMer7sixVcUeAJNewBbzI6HtrhRRrMS9PHbN3d4aycc2fqPDI/hrOhInW2YMzoV14v8N5QEGWBicyoTbY7eGiXYSjKixnXx6sg6DnEpMuH9nZ9yZz7KoqEE6o4RYQyr8s1Lz2qVNrW5H16avY4tKehymxMNBTAAvV9ukGdKMKvXUvbbRGi9R5Bzz0e0H6I8N8JFQM1E7qcM1GbJs3NX7K1gbRl2sK0+dQdKJfbKVQ6c0nuemqVK6s316yZvYdDCukh6U9+7hjfUmGvPo+UZ4347g+r2kl7Z9rlxmlG51vgaB92fNXdCkSTo+GglJLxi0vnpIesX/cSzHcf70TpnjFjXzvoQbrLZX7kGhl4mPn08hgv+/1/i82HlOJKEBOMQLDG1rjPODajHfSJHdxQU4SSZpHsQRo6ufiSQz1cVIS3/31clL7v1ydDUJHd6fUCpjXlPdQ8b8MrPWquyYCjv64fvxoxgMGOrytXlbPdO9QkVrp9sx3UUmHLpS/w4V9Ad7UL+e5osB7ZyJXgPXQMKenPgikwUACK1CVgpxWLc5AOMLyCi6GvgRYPwWPGr0t2u8vBhU4RFEaaJsyuWYdUWyoAUWV4OM2GDK6qqGANYpV3CjgiEslrwyJOSq7acUwT8Fb+5FqQgOwzZMdIsK1EehbucFu7Ce4qy5ADeUgoLV40An4aFKTCyxNBs974pZJ8KbUfCYHSYRPyjIC4gCHudJV64To4jdIco3GrVcHS563DUmuaVWiL3TOW1sT/0RNXkMxDaERO57kBsnFzR3EkMDutmUGvs0xNUstu0kg8VfmtlDSIJcRhhxlWK60LZEG9vGb33+5qQMM2PhSWGyDRJ8Y5t3J1aEVP5/nXmhVudl9+Rv0j9cyIa96q9oAaQGbBQMxr7mxvtl2fU38QSBAji+tNz360VyesO/tpejgfTWBeSA9BowXZiHB0CcjAEVbAnGJeoT/HOijEBr4ayKf2r+aMOVKYU+T6OkOz4qWbh1ibNtbgc+Ur9Nz6DdRJxDFmXv5uYAiGzECTaJljpXlqJxIABKuBzQ47Nq5xC9LZAUhvFSdpf+HnrUvxqg3O4/v41zjBPElzSa0hqxE3E4G3d/TQ4CPO0povpeAQAn1cRUgCBY++qW1Atr3LbiaYFCffCY2/0SwuSL3OfP9I4tQorbD8omuAJcR8JvZbeR3LRiuq/z4Ens5POxm97sDbMYckPNhOzr0co3kkN8h9mWEjOJpggYTeS17otwt0CIHRcrANFKhCXJg7D5eiG79Z4A1BiprgG6CBEmRguu+TnwDFlskHBevhfH9uIVl2ztKn7/N9rpDf72gzi4xNZmG41JBRksxxWyMrGl/hgtgfmAr81UJd4yKbYnRfGQYqrztxu0/PUVUocyPqg7lkZ/fY9j1DC51iul+K5Q9IPRlWZNiS4tLhGuoeMzGxsgOzEDFprnIfYjlXMS9FB0Kpd4t6M3fVOH+t/o7NBzB89wfH70I/uc7GYsu54SETkQLoc61zXUOQjVBfKJWPubJsHoVUxb0YSp72j8JdWTEjjQnGV7Gx4L0bScc80fy3omClA5t8DR1ufM1rHUTUhx0dVyyZ2uBQwfq4fkAPCI9lKbd4oRt02y6js+6AkOALAsl4ILtTbHiYQKuQQOiNxtWc/0mNw7zurluxUO2aMpOfpX8KO7ikir27ux8rlK3e9bYqGah97uyYd6FTTc+SEJj+4jcxHvfrpKwK1JKPJQu4oAt0fhgPmCTpl19G0VElz/UUqoa1rSS85XqdBVOGeOhbhYOppkGJ/hG3Mj9QfCyeiDwbnfVmbbUbEXljGGeNCzNfsh0bmSfZsMtaqXWa1N8/BArAeZp7OcGrREEO5OGaofJ+qufhrRZzxzea68EYQNttB4p4wrqJeNclV1kbDc/bq6+YftOK8E3ZeJLmvP9r97Dty07noFdkfVskHNouw5Y41uQCWgdgxZFOhwwI6tVyeq6EZkiv7eya78Stq+89Ti18uHW1mUoYPgHYBvUmn0lHr3Wuek86NBJ0pPBDsxqJ0w9wEy4gT2l4EiDRSX2vd9+TZh15niBBCWjpKxAvXoINk9g48zM9tHCpOom/w+JmH3VmVY/x2WjDHPcOvZq9WJ1LgdU511gscAd4GOqaKrKlknILqT5ZPOzMrh5ChG9p7UnkSxJ5Z8jCKrHaY/TzG52Sn8aelzgNv3kpI6uB4IUQhxCZShsJ1wzUzBCM6D+gDHljdK+2f8uPD37qaAl16iTsPedj6DGbK88PLSFHEVCEaDSH1WGpn85FlaS+CpQ7ADv28gFBTQL/uxcgq3eoC/5ubcaJfkL8Y5xaObo5e4TFgdcGiIRgB0Lt4MYsTWGYqeD3eb19TJdzbzNVgxr9EB0N/EVY4XqgY3FTko4WhpaIZ6bHuMsbUfWy1+TO1o59bB9D02ptT0+kIkK+kkR08ELheKlAsFMFthZu7El4dH1h1aTBLmwNHr5D8KSWIzNPxyJRZjEHL9pBpcSTcrKPA1TSe2wOSQb1N/35kW8tIkhxSw/P5EjJ7w4f2pqj8vrpKF9dB4RXp93JdzWhWy+1wuzVomwpO+x0PChCialbpbS3SaEkHFpwMP4N+aUkeFa87nvg2sdKvRmOYiMOv2nGFX+wGy+izVcablIHQlUJmTa4YPsPX334u72IcCDse4KElkMtVrnwwdQHFEy4ysOlq+NwOQqJWyLiFd9IMi0rtXqVLtOrAzVZLUov2hDe7oSNhS+zqzntQgcsW2mStxsWxKVrAR5GDT4RY7IM2xqsYqXlLhKiJN/aDbYz1GYNayFyNMsZ+8OLdevaZUdEhDqu7YdfFzjJR0htb/Uz5z5rIsqhmd5OJMScf7jxOFTmt9UC4LCyhZhD1PjtyzOnw/WN+F7XY4mQDYu12/cmcIOBB0Eo6jx9+UdjisfSJUmNH+9hCObAzmZfzd+CIejtAbtzlM/pEXyltCMjwoxrBK+aG+5Plx1PW27MXDCqxJK6M7ckPDQPHgf0e2Ir59KVBDf5SWxtDbMbqKd6Tr7c/RZ5zyzpgTklk+F6bZ1E2kptHqZFgOFIpzAM0TbiwEvFRPTpmiBRaIHBjfOsQv7qdW8gE1jfO4I5vXv+gRANvr8+7Cq3i9KaQv+WDazOXOl8UVOscOZ+SMgNTBDJ3kfllBev9I1MnfKKqsM54rBPpoFmGYt0SBQl2tZHbt8xUAqv8DG7p+xV6wQkEWiXVZcEdpp0i86km6rwYUWYEIQxvY+DjR5hCVAtJhSDE9ys6OkaJYqxcBAyasz2tc4x53fAdeOv4rKlJ9NhW0RJOkdUc6f0Ae2zwt+t6FziOiEnZ0DVVAhhGIEoGFjH0WnxXmJY7r5FSlDgqgsa6UTk1DXjbgI19VnJrKcTlyxq4JHhnFzb79Od6Z2Ja7ICsuCY3JvCul7usvEuqjMStOabFKaIc7QG76LiBvbn0l2OyOEEL4vER3VfvyBTxcNt1V6kiJehBTd/AdkGnWS/MpFaK6oUpq4FnO21jATfA1A3R18n/S0A04+FE+6NBKEOrZzvittKyTq+XqmwUZ88CRN50C+ga79HEI5msTOU6IyuM63Fpa0FnTsBGk5gRwaw0i95DZPjh+TLzrDT/zIbHQQ4PmvfIBLaKACoUBkbu8j4d2TcrKE82xQvGk9t5hHmLTYzAtT/lo+qxdbEkRj9IzK9Qk0Ie3qPy/kxIR5kXN901PPuURGC3NVCIxiHQ3yDP8aMpXHBvCw+DrdVmI72qE75N38SeH3J2R4pJuS2H12KIOU+JoOt0dtQfYJxapWyWcFUv5mEUhnA429mgq8jwLJbgyjWu9DQFGPLNAJIiTYnpokNTSiSca007iswW2Vnevllgglty97UC1+UnGjXEx0tE5KFZoCk3qtvDoAoEe2MNwSOuQeXAlExC3+91NZYhegTmFRA7JmGsRxgYYXstq0dy3JeTOYvpRw9u7UTX3w7pdiD1O105QLlr7I1SynlIJtPKUpAERKGX6zuE9Y5oMv95OyVdaAtYuQZvEUEphO/WP8kCeWn70m3vrqoyOL/KLKuK9rHwAW+5+5g0aWH7p7p7p1+8991TMCzZuvIXBt897NaBCbIAO63Q7SWASX+731ryxfuJvZlrMsCC0QWdQQuOk/7KkSrJwuY5q9uwvzd2A+SHpXCxDp+I3F328kWTC7Hghubu2EDlBCv3eLha9fpenNLW8kKY1m68VdvopgG297rtGcnChNfvRAf7tc/Z9hhJXqFA/7l/8ohRnGTCMq5wD4gtqJhn56qnicLe0WAcQsnlRRDPS7OQTYRQF1ICKMNTfo5tXvIJvlv3zuft9bwxe+g9WytwzfSaJnCBLLkv44zhe8i2avUU27hFdkEJTcNqwGYxc/9UcNxEUx+MPu0YRYGdSISu8Q3VyFRuE8c6ERAPAx0iPFns2eQFt33Mbrx/sM0E10g99574x936SuYgE4rvrkKfHZxUOqXVDt1/Yn0iZLeUbOayiHhi4XmGFFd1yt8B2OFM2L699QVt5TjmMOOPhtmgbEG/GlMFrBq4uTOX4HpL6aOSis9PrKawIK8pajMeagJKTX7zsCjQZJLUomKIM7qK3/BuSqbCinz8OtvA/RMjhQJKOiBHgWgKQPMJDYNAXElikz3b/lSlLWOb7iEC4fy7DkACpreaQd3OCNFVua0GKvynQyOoxwFyYDVE8NMzawKEa7hQVqLw5bnI7OS1hdRf10zyx7Ji822evgIo9wr2DTqvIUgy/w2wrG8BYgSVAmC2a6RM44eygqpk3+XnYAa/6jU9bzJNA1hbOjj/bMyGsTEeXMVsjUF1UB+tfdJRkI+RgDl4L5lQ3xsC9isdsTX9cBiSSlbvrJBEaDAC8hznpSIh3+dYYI0Bse8QRxOxp7tkMIgVhNkOA65z6xJYyiZjjIGy1baXIB2zKtjVPPMIJkDWUmb1CRpfkXQxR1NhViLX4G4ZVVYm98LRaFuk7nZaQs1PCZdGXBYI4pJQhEpcdpw40p/lkQi+rEfL3ZyyZuOeVEM39qwefGAldZEmydv7K/qbiKOvIZqGaPqFwNoyd9HBkrabaDrFMpSrcCxV69hGJpZ1RxVUDi5tNDbFbXUZLWNsiASULXLBiCpwOvruV/FHZWk4wCTBz7Te8JJRpSPO7OSsNFgUpw3yItkDpHv0wHEz044y7R33SyNYszYMZl7TSiYr1Pncfq7kADtw+QsTpwswljx6N+4ypDjJv2ggbwZMM6arELmgTajezGXwziawn9UF+tKouwbaKzfEgcLizpfUkfr3aauXOEAyTAhnffxg/VxOTJNxYQw/ipL72fe7tj/3bX6gLeyHm0Egp+LSTVclAwjdfNr8nljXdktLbjjaXWY52uHlvZ9uLK29LpvK9OtByQT6ClVe6Aaf1hm/f5sZLzBp4ywUBYFZO+kha3lVp/NmUs0XHHmzQwqIlfaG4rrb6SzLxDYRsQ05pEL72ZmTDJU6k/Nb+zcJz1FOOrnec6VTgo8KLTN4ItsvSscMnirVLfV3xjFtvfJinJsbS8djZwtsXyTelctV57jxF/g7DyQKAzQtJeRICRpNlSRo3gZum1y3cEv7QgWG3HhozFi/DAdNOfKULo4OoTuSemDVPdezKCXcCqZW+hITO3CJZTRPWdg173HVVxxTL+ZZSnDwN/RUsE/f3+f4aZFFRW2QmwJco2wyk1QGIxmnVG/Whxr3v0Nh1usSdfnSIZzq2jk19xRqKp1VBIQmzB7UeW+em5JDK/EZnzvqZzrxZLfRBbv1YlSkTJ8hLkxA7hHl3o4QfjtJdXc/kHNPBa0/QmYLcOaSyotfRn4thq5hu23Z8FLAJrrh2GzRIghLKHJubnavK4S2OijmuGzPDeNlnQRXND/RaLOqMmZae1vnGLPb0HucU4D0Bstp6gySwH1IQiL0EljFGaQIMa/zVzAuOOa4rBFhwwFtPNHZyZkQltF1fln1ok1E5Urfk7BJ1dEpyATnMcKxk/puXvwTllrR9ZnPifUK7QrfQOHhrDm5OI8iQ7WiZaDLik3uQAtpjsqpC0ICXSQRIKTgazwwgH75lsWwfg/QO2mNmaX1nd1Iid7iPvqb/EQorfQgcXU9pV58aP3W2rLwpAdjvBeUw7Pg2i/WHwzmTUzKahxK4BIIJQqlNmlSv/xYMdPVyff+NS00CANQmfD3/75Towz2WbOR5yw4rrH8nLd9Rb/FaseGyuX3D3AB/I/x3RJ5UNR/0JUynqB9JDQ8qp5MtVdefFWuB9d+sViHsgg7uVqv5wxdHu5WVhU0mup4lR+Z0UOQqGJZJ81tCOH7mIZ9u8mjAhYCsABw2fYED4vpDWIM7ELv8Xg7mU0+CiZrZBzFg7ikJwGG7o1ExBBcYnroifF5O1z/uQofSQlvOHSIQC7R9C3IJSzsxTG6dd36nJbjVdHyD2L2/V750fwvc5/13z0m4QDr29N01xzpvbHg3x2idWaoc1n8YYL9MlsUUU0zUZ8ip5LeDmxdRUt+v1Ix0PvjLJio1RTNwJ1dUKAx6cowhcrQMvTXpcFQRjCWwHFcfl/x0tnEhcN2WjMjaW+ttV8/qXagh6GTrUCUGipJ4IxDFKKqLXV0Wwf1rJwKPmW2UeONgBUgf5Tt/lebSrKbW47vjgG6CvnnvqDtAxqERs09uUVtUzUZpnq5CCkBPT276sm5zS3aqi2TCoAiVjGRA1AMmyJYo/QVX8DVQBeXYPjFxj5vdNd0ejhGmvRIwVxRoPzn/Ued4a0PZC1lx7ZHxO2u7nnkQRj+4GRqycVRn/nq1Y6JR8M1Xj61YoyCwuJpOs8CrHhMWPuJ/7dJtrCZzoKB+pep2qg0TdUmlqLktgSoxT4jvtO0A2jp1C1/5Uzs4QVzYA3ORpo75S8vCsfBsYMu/UnpGMRJ1oGK/X+M8PE/0MlUqWL00yQynHIZD720Lhpg3SRv+Os8W2wQVToO7p3XFwfHA6IxUXWPncgrtFIDfGUmQ3PIv0Xk5ASzI4m7jgveu3VgrwdDnzWkCtpxx6bxDtK8BWMPE/8CzvDc6a076ErppEkQnBIiIaEBpj+paYj4/hib7SWlqqPr7GC3/UUzLE5OayF+psQ+S7T1gLa0kdCErBI1TT9nbwsJc/SYvOBYUaGLf4YZxtdY4q4LewwCDe2HKgrLGy64erGGCy6tYg/2h29svBo9gmPt717VIxrJhoKRWbvER0GVT7u557Cp3g6yZBhFMpiJc+Fa6J7I2YZuxN9hWeMkzvRSSWd2Uyhm2ZfvDOHSMHrykAjp6bv3+q3N2o5Ckpdz3NTZX5KKjizcFzj+UH9dU2zni7fomeLT66QcEKS3uyI2m7/oVTdRjBPkxhz8Jz5lfdNg9TnpsQ2eV6QJ7iSgMkudjZGe9wcisp+LxVYAQuqsPgZUyg0Uza+T3VwzcFRbhgM5uQ4FL45vi5WWqhMdUDhzGFUODyDg/v7dC1R3gp+Nw7YAtWOe17faCtbOU1wgXZh/PvAzvUObPIeH6U87rTgRXvWNt6WBsNnOOsI4M4oolUWxfR3C72CpEYzIhP9h37HtmB00SCJoBPTvr8oPgLOuEFusUPfNtzwrrubiNYx47bTtmQGBc9bw5SpaBMSdf6utMWz7M1it/vbYL0ZqDE53SS6B5dEdSoGqg8pvd5SSyUEKOSxJpEuivirBDVU14Tj2ZSBGWd3WWPII7mKq1LPB3gspwyPuWkzfU+xDKz+0vJNgCNeoI7mFFhlIN8DzZWHFhhZgIWw9GBDiU2tMj7ZeOmyFPLo3AtMOHfevBJbrzcJd4aCSOCtibicNzC65Dd0QRcYQOR0LJpcbeeOcB8Y/RHXZA042M0lEOe3EzCp+crANON71aoE//1GRHk7VuW0fegA95BTFBh2ho8ME7vcdgD4u67V6YKiHL9K5cMv/3hyIGuFbfA92XvEZ2IgKeQURUXkrQQhHMot2EzQrw8sB5PihynOcI71pAwe/8YGJUMtyF+fORrU3PbNT0RylFtiHBe/fexdm4AFWZ7BsyyvMa1BwjJdTvhk57xFhAN13Bx2ZvcjTsPsekkfvGEqbUQzLwDV7ipHAcArqbuT7ZOimNw+GgkXXxDYWLxi5smcGCTe9jp2dQYMl6umZfavIIAkHfgRraNIRNC76GxqFId+Uy1y5lN0yd2xQ2+UDzO7cHgz7Ar40qUYHKZlo7o9VOO13r7+pscM78ifNRbxLxEkG+Pfc4ELzLj0ZQxE8SgXrIzIiRw2bRSmygjvF1URBTU2qxDZyMzwoBqiFteeE4T/W5wwJ7G7PROJThRKLKAeVraO0JbLpehd1dKxKZUXqeNXusKDiWWp3yy1impSNQwCdY0exOoA7PXZghvYo9ML8BiCDhgYvRtUU27ENE3Ilw3ltMaF4+bBE4wKJ4DGmJf8InNRCWgGBuXmLjPMlUEakIzmnmj5vw13TU2twJZzCBA+2YHXwM3yiSZjN9kxnuXId5rqU9gXToXsLyjEOU+jK4K21KfPaCSlOgF1eHx08WJgB10iR5qopXdnC+jiX+PlsZYHwdfiVhZT9TBE/s30cp6Hy9qKP8LSxsUgTWjMBrfoQALfJPC4tkCeWaPVE+sn7c6ppi45XAGRsCQjWUk9gCkNju5qgDcWQqK8FrfbjRX5jk8RJB0kYujKEpvHOfcqkWbSKNlROQeT8y18Ix2cno4t0CWYYx9xbrYf0coUmg7vLHnxpG01huDNK6RKuY5g2pn2gAgirljD3DXvPsmGkvKBD83PmEQKp/dlKMgldXz394IZwkzRv1GJmyfx9uNjxXsDUNYuPgQ41Z2X4tUUrIqFEypDnBAAXS2gl6mojAPYQ4yZYThPl8Bm9C7zzqNejm9qkBJRahX70j8e4SDJEthuADxbeTPOjmcIUGKnuJAq+pgEIHTox5PLbFMeDuq7RZVrw3h5jMoW07s6EiKg6O8TFPl1jPHKijiS14UMYUVm0CCKaW45fgO6sruo0pfa2L+XQxORtZCe0XjAhNV9wmex3JBtkDQQSSOBDlUIpPl1qYb5RddcZuXVmYVNdrPnFid3PAWbYX97dcMBNsnvHmfLRpC4h7w3BwoiJ+rolrh47XVbiKSV6TI4Owe2aOyAe2Ee5Ab3ca3BudnsCnPfR0QOrrcp7uNmtCJXUtkSZVXKiQ8PgHUFfwEIrfsHIH0oiOxq1t7z9wi2Ed/e2lv76pBDFbr8bgN/ItTbU84CQsctkMKjgugk3KQmj/dcb5oKuryF0Rpxg5lPun/He4Tj1Y2e4dWXYTK1tuVWU70ZKja08F7QMoxoCcmJKTX9sJqga/i0YPfdv3DylDJqOeDKrLJTR2AgeuVAkPDeqcM+rqz0UEMhIjrtxocJiT8lQBfhp4QYjGVHznc8IXI582WLIlrNY7cbhjLOtdRQQdB7+ZIGQvW3IPIgt2HZY0rOD0NXT9QE6nsoh1HLLjWA88qvhqHxDMwztO0K3eV08vuyDwP2IU+ZrGnXzLxxkBZksk7WvJ1tl4Kn0W7W7gIx7GaC1sQeEbLHk4PCb7BOwDGGJXuBCE50IbB4Rqo/OCKZSSOdJo7ULTCFkvX73+/fZRZruSnQcCASSzQIQ/QKGJvHcgx+952euW1NVYcHVKSaEEhIRQDR72/kfrSmUvVKpC16F9Bcmj+SBPbCIHGKxwqcVFOISePo7vhgolD01BrcjdtuUf7aQboHs27PbCmxrTEAxi6t/wx4ZNBO8WuvxLl9rO8pZ2LVL5lmuw0HsnS/o1qs8Iqto5uwQYjYJCGK7EfZKhLClkkXhQNlQQqbWKBhADaQILHVKecn1R9Bf82R5NPj9oXtZEtrTw5wJT09NGHmGTfttTt578oUdkzpCR1h+uxnJYazVc3meiU1LwIeAsyRvavVFSVqIsGaOGogOIzc/5f3kh1zmnEsYEOGY+8Ixni1jgXq8OCceA5K/qMljWjMl3iXKvqLFu/g9o0jHmtxm/sefSixg2Ocpi77ZrCLqd0pGvDmarMtlQWdqbcnQmK0g324ou+MXPfQ4zYniKkS89QNXDdm+vU2lP2tU3V+UNwEJyYlZo3nyqfISpRb89RmLyI7a94MPER2dviLn4RrU7CwreI/fWPW+zv+D7CKNtOulYLQMD9aFMfip+WVqV+boY0t94DieqkO2ApfiVvQYHJpMBIPjmqxSAW/K/iHFIfk2s2i1m+ChhnkADOFg+TSQjT2Jdx5T5PwufJla5n2warnXd8r+/UCAWylY6qEjnKINyW41ER2xKg44SD/dOQ9DORq8t1mbxRnMu/ULSYPg+8pXZp3JtMNCxDrYhAExeGIDfqqVjZO94N2Ad6kLEaeoIGiT2LYfvPY48WzoMdVN1uxGdD13vG6p1Jei9PFw/KBsB5WT5X4Xk5CwzaTI/kjRjygXPty/pLw729gKIiPT33/KN7CUMXcUnymQ88adIk8JNf8GQoK0r3Mozr14hTxWNzwj6Ig+gZ29x9LLTVD91y1mh0ZttQ5y9X1kdZHXgRTKSFKdeTwMOkvBk/q6AdU6ZriH2tUxDKgWg8TGe04Rs0G2qfg3P4gxxfrG0K/vSJB/zjbb48QmViK/smNr+ZeTUDi9ZrPr53bMcknPX5rC6KakYS/z5rXle8OJhqUesyVEYI8oyd0DnbA9pu0tHw9xhlxH9CoxPf65zhPsFU/U5XsusTliwdgkKv0g1us6yvcqZm9U/cm3bW9VnH31ancBpzPQCoGHlUP+bDytJyY4QauPxoHkfKgMIGg6J5HBhmtAQRaIu63ad1kURx8WUtA+wPZsmfNYp06DC/Mhhxq1B99j/X2LvlXXpfOO7cHV08zp9+x7Lx+thzdOPI7MHdYz6wU7ZH4sLsiI4ySFtSJwAMGCioKPgO6l8NiDg3GYKBwbtax+RtgZoXv1K5trWMLjuR95yCFOd5MitJdyIsCnwQzueRyIk5nV5aBS2GdSdAhfC0noYKlJMhIhMcoyyDWURcHC+X09T9y6b13cVFtN3ZJ05qapJNc+d2oh7305e5dTFdZavGioBhyjGwMntsU43aya9sN/QtQ/F7EHPnOLIfM+MWPfsuhabuvke6Wt0Ptoqi67aL8ocuMUW/DokYKN/kpBGGA6UTnnVjLUu9UtQcEaVzyPe0WJ/hlEtzkzGFyLTRuS7En4QYz5rvZuoTr2tRseULViokASFJYgLsGu7RI5koOBiHOpSyu1OcvKErLRKCaG5+/LGpJwgtsU42Qbzle3PFIOHsSWWQXkwHv+H6uMkOeqJqpj1bNY71bUUP4hJIq+mjMaXcorXHN+hW1BeC+7lsrQl8E7H68CCW1V5//yIbU2pZnMGhj9VZwTHmjSuaM86cRDH1s+tcf6XBKViy/huDKhK7GOOefWdvlP4XqmIyTbLXpABpcFZ+Zlzj/4OyuyS4bys7CU0yeXpkVBHX1u8nSTg/N19qvX8F1gxtwxUm2oY1jMmScXuiD4KnWXZXoTMjwAt3g4aXyZgqM8vDnc/sjas8LLR7/5oQq+IsJrcRQm3UhqNQ6oHmH6XAiFbXd4cDe0MrpFuxIsKATbdKylY3V+cvk5lmx0y2gInKp1RoxB0TWCRKjNlfUC11GJiquK1SZAi/vP/tPvr2yQutlSWvICPOLADj/qTevxRPd4wJx3uMXg2ztJQSpgr3nLSJpqfl2XiDfc+srcyt5OEeW4VzHVUpff72kUPJtyPdE/pVdZQtB3hooGv4TZ2W/0zno8bmkkwJ4iUD4/oTeZELH2bsSzvkS33JCewNWiHsAUSVhc4mBmUyBTDNIxnGksTEgSGxDqon33aTZt7v3iHQqDa3S5sTInJo6j28vKmB/iqFI5GkM5nVSNCaSL1R5Tvltd7HhrE/jEKQ3MeoOh9QfRsZ0sdx9B9G93JTtxOuTYBHiFTq1OR3Jko8ukzVoNpk3LcxnJxpWRgXSBVgJHG8uZWDPPVZVSivS23dK09RRcbHZCVbfrs4iSyNoJuPO+xy9qOeAiaKFarCkuRjkTDEKYtSQm+mvpOO3XKQrUIC6aG8S2WAJyEvthMjxzgYWKNJwDE6Z9CgyUit79/G/8g53RgbVBA00+o0vIZBNmgYj8/4FZWP4Z0sDQ2Y55Eh2N6SXSLwBx8gAMwjfDZ2aXjH079VECKYzW4XPBNIMI0vJYvyBwU0GLe8CMCH2bfI940y2oBMz0DcdsjnabTC1hW/8XnKA2iq4+byHDt8EM6c+XSv1c2haVCdJ79XO+JDDPmB3jJ316rxs0sroR8i/l2wvxivYg3GGLFZNPNdbmkQ8ZWvea/6dfMDATt0RZxOq90X3lihfEVGgnXatYeXL1MNHryAQxuuuY/9D7asWr33pO3+QLWfC8TG+S202UsT2xaMfnXSfQ01jtXLSv7A7xUYLGUBoO0zZdfjcwYLqbRDyhJFZ1UHwA3g3Rfe0gsHCOBcRP9T6u8fROUX1NFxEEfg0Q2NY/rTDxlAoEVWo2P9FyaBbtBb4a1Sf5aYkXzsDstMTAmVUjJm2apdBed6TRaGZ3zGe0Fk3n+1co+eUTVN9wT6sS3MWs4msBUsC1lYelpMSm1Yz+FWNjbPD4cRxKB6q0JNdcpvyahL8oenNzg8WBtWcMTy0EIN+TARj+fdGxlwbuIwEwmC5W2NRNc/OCE/q4qSrrLu2FO0xDG4s3FsZeRaC6O3PnZkICyV9jdRWqzeTpAT4SAQPc4B9xqsQaRa7xvdL/67zPwruWaASMjsAsbG07ZzuS4thcHPf16zRnPJ1roqseST/B0jHQn25tP5cRiTlSkgCTZcEpu2sgTJbRwyduIqUJ5oT5tHyg8XmfKntzAZUoupJJp6dVbBqYOrMpY54Xynf4T3GTKdbuERmEy+Ht2nIyTmD/EjpYsrLz/AmiGVGf6c7SV0e7oiDjrTETMwbfkiP1AsWUs5w8+zqz8SMVy86h0JjLSb3iCI2I0VSyh0CwX6ZhD5dHOP1eAo/eh68z3p8M1W898lifY6b0I08yioZIkVIzff5HJu8rOCm/WqOh2gwcuOANyc391o3EdzCB3MxIaY+5Svw1xitNo5ZznmakM35BlxAA9GXSTWkAJ88kc1QqQcjtvYjDxxge8aA8vw1koFZqBnXIM+CLTMbvRxU2uderyLaQ9OTTMJyOaoIv3H4VUt8ZpSqv0tuoJWS+k6T4Z6V/JOvtYGigxYnIkFYMZdDHayYEBLUZQ9EqSNSG46s1CEXE30sSbegZFF8/UejmFuZkDfZRh/tIskkVuBmEi0MUBaz5wWPDxjEzuO+oBKPRDM5bN2tmGNBVqQVjadKVJA7/CMKB6sxTsEMp69STBhSM2Rzka4gPxfivNOVZBylnLb5Fk6YgPmr9VfcFJ/Ye15i9G7ITDwlIWEtij12YD4rS5QZ5Tc+nUSHwGrsOanbCHy7AUwpwnlf2Jyv44pcPpByUr1RNfkyJwEiAFqPqk5dBhVIIkDcG34NKOyED1CA7zGC71CuzmvvjKfonHL1sGv9Gul2d2uW8uRsjr/tRbJlQ89L9PiMp9HhfKlKSqdA/hfO76RT7dx0z4K5yI1JN0vVYxs/4Moeu3ATaw5oW6dTXluo0FyLqJ0LTCM0LlxSye5tLDZ6lTdedIsYFM0vbDFwAxDbTpb8NaoNiNuBL2xQH1NS6wquRdVLEtDtZDnFn7JidlmgRL3qWq9n8mHn4vwQ4pORpqYb/EOmys0gxl59WDDgFoyhYVMbjdz+aA1rmpwzeMTwpB/fXmbsRWO4jd2zXP8hj+jKkM/a+zSD+bi5OC/pa6T8X1v3w7amrYL17+VZWYNHlSyRB/EaJc6A1rm2yqGEJq9f1dJaGKbLgx+cPKoPZgjxuzdhUZCX51Mot5oh8LmaT52yaP8NGaycbZDPc2Yu+WjJ+bzpGlm+jZBqeMTYcJ48Ex64flNrEHzFSFT0oZpVy6uygif5ePnw4bao3hwFG6j7zoiWK3Qi6l4L7LmX77XxwdbPk1v4Mlh6OkcRP/U4nQNjqopPyn0Vw5MW3KqLeHUIUeI1XLwQpMpI+dRjWAep8br/4pVtBqL0TF2ouhZkEBMEqB6UBIqYOrWq1jxY9Lo8288aJk+9JqsPXPjzUc4rzHFhmuG5ZKWDHn0BEVOegcGzMbHjN8ZwEr2hv2C/XUz6TamTKZoixoIvSbWM4hdqC9a077NPGVni9UzvBiwULk8BkL+YTexgwEx3og2AJDUMwTs2tp9D7VM4QI4ABM2kfo8fAUh14DBFMRfKvwUiQXVOfiOofmySsdyV0qpqrBV0J+6oPZRlJdCqm/IvWkhrTKWQ0BLkcg9YqT7o9zPmEWMMIPaBpNA6j4ogP/8iovQ87aNxgh0pngEcV/1oamlQ9qZxyw7Z/OeqLrOMAuYhPMUWF3WMtAqhYUbv9cpNpKuXbr7V3G5aaMl7jPcs3bffBwoG8qmdVONfT5Kmf9IQRd/oKh1NjGjaOQCWJrIw1zTNIdhgbxHvmzLrLOuUP5lU7F0ieiX2G+yRxKfHb3iDipTZ91Yk7/FIlnQKl8MR73gTSmacA+ufsmreGLfMBY7GfL5WxAKGYe8iY+BlkmgUm7f7KAej9qnyJn+UOOc06cq9p6py+2QZgTUF/qs59HyrE8iD3lQ/Dn/MPr2Y4gRjjYnsj2+f/5JX3JM/58hL1VU6yq38Zw7TXRDbkSWBzHb5L3N7ZZIbB8HnDXYk3K/UB5SCJoqENo03Oh4i/IhISNpYwTbcioRGoJ8ak+7U4HWp80bNeJFFpu5uMAAADO+iWLmTRDOgABkqYBl7gEGiANB7HEZ/sCAAAAAARZWg=="

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