LyoKICogIE5vdGVwYWQgKEtvcmVhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBQcm9vZnJlYWQgMTk5OCBieSBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogIENvcHlyaWdodCAyMDA3IEJhbmcgSnVuLVlvdW5nIDxqdW55b3VuZ0Btb2d1YS5jb20+CiAqICBDb3B5cmlnaHQgMjAwOSAgWXVuU29uZyBId2FuZyA8aHlzNTQ1QGRyZWFtd2l6LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAixsTAzygmRikiIHsKICBNRU5VSVRFTSAiu/W3ziC4uLXpseIoJk4pXHRDdHJsK04iLCAgIENNRF9ORVcKICBNRU5VSVRFTSAiv62x4igmTykuLi5cdEN0cmwrTyIsICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIsD6wOUoJlMpXHRDdHJsK1MiLCAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICK02bilIMDMuKfAuLfOIMD6wOUoJkEpLi4uIiwgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiwM684igmUCkuLi5cdEN0cmwrUCIsICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICLG5MDMwfYgvLPBpCgmVCkuLi4iLCAgICAgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAix8G4sMXNILyzwaQoJlIpLi4uIiwgICAgICAgIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIrOhs7ux4igmWCkiLCAgICAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAixu3B/SgmRSkiIHsKICBNRU5VSVRFTSAivcfH4CDD67zSKCZVKVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsDftvOzu7HiKCZUKVx0Q3RybCtYIiwgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIrq5u+coJkMpXHRDdHJsK0MiLCAgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICK62b+ps9ax4igmUClcdEN0cmwrViIsICAgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIrvowaYoJkQpXHREZWwiLCAgICAgICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIrjwtc4gvLHFwygmQSlcdEN0cmwrQSIsICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICK9w7CjL7OvwqUoJlQpXHRGNSIsICAgICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLA2rW/IMHZILnZst4oJlcpIiwgICAgICAgICAgQ01EX1dSQVAKICBNRU5VSVRFTSAisduywygmRikuLi4iLCAgICAgICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICLDo7HiKCZTKSIgewogIE1FTlVJVEVNICLDo7HiKCZTKS4uLlx0Q3RybCtGIiwgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICK02cC9IMOjseIoJk4pXHRGMyIsICAgICAgICAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIrnZstmx4igmUikuLi5cdEN0cmwrSCIsIENNRF9SRVBMQUNFCiB9ClBPUFVQICK1tb/yuLsoJkgpIiB7CiAgTUVOVUlURU0gIsfXuPEoJkMpIiwgICAgICAgICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICLDo7HiKCZTKS4uLiIsICAgICAgICAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIrW1v/K4uyC757/ruf0oJkgpIiwgICAgICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIrPrxq7G0LXlIMGkurgoJkEpIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDksICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIsbkwMzB9iC8s8GkIgp7CkxURVhUICAgICK407iusdsoJkgpOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK52bTasdsoJkYpOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiv6m56SgmTSk6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICK/3sLKKCZMKToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiwKcoJlQpOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIr/AuKXCyigmUik6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICK+xrehKCZCKToiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICLIrsDOIiwgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIsPrvNIiLCAgICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAitbW/8ri7KCZIKSIsIElESEVMUCwgICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICImcCDG5MDMwfYiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiuN648MDlIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiv8C3+SIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIrDmsO0iClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLBpLq4IgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsGmuPEgvvjAvSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICK48LXnIMbEwM8gKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICLF2L26xq4gua68rSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIMbEwM/AzCCzyrmrIMS/vK0guN648MDlwLi3zrTCIL+tILz2IL74vcC0z7TZLlxuIFwKtNm4pSDG7cH9seK4piC757/rx8+9yr3Dv8AuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiwNS3wsfRILO7v+vAzCC++L3AtM+02S5cClxus7u/68C7IMDUt8LH0SDIxCDA573DtbXHz73KvcO/wCIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzXCDGxMDPwMwgvvi9wLTPtNkuXG5cbiBcCsbEwM/AuyC79bfOILi4teW9w7DavcC0z7HuPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzXCDGxMDPILO7v+vAzCC6r7Dmtce++r3AtM+02S5cblxuIFwKuq+w5iCzu7/rwLsgwPrA5cfPvcOw2r3AtM+x7j8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyC5rsDav63AuyDDo8C7ILz2IL74vcC0z7TZLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICAgICAgICAgIsDMIMDbvvfAuyC/z7fhx8+0wiC1pSDHyr/kx9EguN648LiusKEgus7Bt8fVtM+02S5cClxuu+e/6yCwobTJx9EguN648LiuwMcgvufAuyDIrrq4x8+x4iDAp8fYIMfPs6ogwMy788DHIMDAv+sgx8G3zrHXt6XAuyC03b7GIMHWvcq9w7/ALiIKCgpTVFJJTkdfVU5JQ09ERV9MRSwgICAgICLAr7TPxNq15SAoVVRGLTE2KSIKU1RSSU5HX1VOSUNPREVfQkUsICAgICAiwK+0z8TateUgIChVVEYtMTYguvItv6O18L7wKSIKClNUUklOR19MT1NTX09GX1VOSUNPREVfQ0hBUkFDVEVSUywgICAgICAgICAiJXNcblwKwK+0z8TateUgua7A2rimIMb3x9THz7DtIMDWtMIgwMwgxsTAz8C6ILi4vuAgtOe9xcDMICVzIMDOxNq1+cC4t85cblwKxsTAz8C7IMD6wOXHz7jpILmuwNrAxyC81b3HwMwgwNbAuyCwzcDUtM+02S5cblwKwMwgua7A2rimILq4wbjHz7fBuOkgIMPrvNK4piDFrLivx8+w7SwgwM7E2rX5ILXlt9O02b/uuPG3z8DHIMCvtM/E2rXlXG5cCr/JvMcgwd/AxyDHz7OquKYgILyxxcPHz73KvcO/wHQuXG5cCrDovNPHz73DsNq9wLTPse4/Igp9Cg==