LyoKICogV2luZUZpbGUKICogSHVuZ2FyaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICImRuFqbCIgIHsKCQlNRU5VSVRFTSAiJk1lZ3luaXThc1x0RW50ZXIiICwJCQlJRF9BQ1RJVkFURQoJCU1FTlVJVEVNICLBdCZoZWx5ZXrpcy4uLlx0RjciICwgCQkJSURfRklMRV9NT1ZFCgkJTUVOVUlURU0gIiZN4XNvbOFzLi4uXHRGOCIgLAkJCTEwNwoJCU1FTlVJVEVNICImVuFn82xhcG9uLi4uXHRGOSIgLAkJMTE4CgkJTUVOVUlURU0gIiZU9nJs6XNcdERlbCIgLAkJCTEwOAoJCU1FTlVJVEVNICLBdCZuZXZleulzLi4uIiAsCQkJMTA5CgkJTUVOVUlURU0gIlQmdWxhamRvbnPhZ29rLi4uXHRBbHQrRW50ZXIiICwgSURfRURJVF9QUk9QRVJUSUVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZCZWNzb21hZ29s4XMuLi4iICwJCTExOQoJCU1FTlVJVEVNICJLJmljc29tYWdvbOFzLi4uIiAsCQkxMjAKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZ1dHRhdOFzLi4uIiAsCQkJSURfRVhFQ1VURQoJCU1FTlVJVEVNICImTnlvbXRhdOFzLi4uIiAsIAkJCTEwMgoJCU1FTlVJVEVNICJU4XJz7XThcy4uLiIgLAkJMTAzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gItpqICZtYXBwYS4uLiIgLAkJCTExMQoJCU1FTlVJVEVNICJLZXJlJnPpcy4uLiIgLAkJCTEwNAoJCU1FTlVJVEVNICJG4Wpsb2sga2kmduFsYXN6dOFzYS4uLiIgLAkJCTExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIiZLaWzpcOlzXHRBbHQrWCIgLCAJCQlJRF9GSUxFX0VYSVQKI2Vsc2UKCQlNRU5VSVRFTSAiJktpbOlw6XMiLCAJCQkJSURfRklMRV9FWElUCiNlbmRpZgoJfQoKCVBPUFVQICImTGVtZXoiICB7CgkJTUVOVUlURU0gIkxlbWV6ICZt4XNvbOFzYS4uLiIgLAkJCTIwMQoJCU1FTlVJVEVNICImTGVtZXpjaW1rZS4uLiIgLAkJCTIwMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRm9ybWF04Wzhcy4uLiIgLAkJCUlEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKCQlNRU5VSVRFTSAiJlJlbmRzemVybGVtZXoga+lzeu106XNlLi4uIiwgLTEJLypAQCAqLwojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkjhbPN6YXRpIG1lZ2hhanTzIGNzYXRsYWtvenRhdOFzYSIgLAkJCUlEX0NPTk5FQ1RfTkVUV09SS19EUklWRQoJCU1FTlVJVEVNICJI4WzzemF0aSBtZWdoYWp08yBsZXbhbGFzenThc2EiICwJCUlEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJNZWdvc3p04XMuLi4iICwJCQkyNTQKCQlNRU5VSVRFTSAiTWVnb3N6dOFzICZtZWdzevxudGV06XNlLi4uIiAsCQkJMjU1CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk1lZ2hhanTzIGtpJnbhbGFzenThc2EuLi4iICwJCQkyNTEKCX0KCglQT1BVUCAiJk1hcHDhayIgIHsKCQlNRU5VSVRFTSAiJkv2dmV0a2V69SBzemludFx0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICImRmEga2lueWl04XNhXHQqIiAsCQkzMDIKCQlNRU5VSVRFTSAiJk1pbmRlbiBraW55aXThc2FcdFN0cmcrKiIgLAkJMzAzCgkJTUVOVUlURU0gIkZhICZiZWNzdWvhc2FcdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkd5ZXJtZWtlayBraWplbPZs6XNlIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImTul6ZXQiICB7CgkJTUVOVUlURU0gIiZUZWxqZXMiICwJCQk0MTMKCQlNRU5VSVRFTSAiJkv2bnl2dOFyZmEiICwJCQk0MTEKCQlNRU5VSVRFTSAiJkNzYWsgbWFwcOFrIiAsCQkJNDEyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGZWxvc3p04XMiICwJCQk0MTQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk7pdiIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICImTWluZGVuIHLpc3psZXQiICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImRWd5ZWRpLi4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZSZW5kZXrpcyBu6XYgc3plcmludCIgLAkJSURfVklFV19TT1JUX05BTUUKCQlNRU5VSVRFTSAiUmVuZGV66XMgayZpdGVyamVzenTpcyBzemVyaW50IiAsCUlEX1ZJRVdfU09SVF9UWVBFCgkJTUVOVUlURU0gIlJlbmRleulzICZt6XJldCBzemVyaW50IiAsIAkJSURfVklFV19TT1JUX1NJWkUKCQlNRU5VSVRFTSAiUmVuZGV66XMgJmThdHVtIHN6ZXJpbnQiICwgCQlJRF9WSUVXX1NPUlRfREFURQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJFZ3llZGkgcmVuZGV66XMgJi4uLiIgLAkJCTQwOQoJfQoKCVBPUFVQICImQmXhbGztdOFzb2siICB7CgkJTUVOVUlURU0gIiZNZWdlcvVz7XTpcy4uLiIgLAkJLTEKCQlNRU5VSVRFTSAiJkJldPtr6XN6bGV0Li4uIiAsCQkJLTEKCQlNRU5VSVRFTSAiRSZneWVkaSBlc3pr9np04XIuLi4iICwgLTEKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkVzemv2enThciIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImTGVtZXp04XIiICwJCUlEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIibBbGxhcG90c29yIiAsCUlEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJlRlbGplcyBr6XBlcm559XNcdEN0cmwrU2hpZnQrUyIgLCAJSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJQcm9ncmFtZnV0dGF04XMgdXThbmkgJnN6aW1i82x1bSIgLAkJLTEKCQlNRU5VSVRFTSAiTWVnc3r8bnRldOlzIGEgdOFyb2zhcyB26WfpbiIgLAkJCTUxMQoJfQoKCglQT1BVUCAiJkJpenRvbnPhZyIgIHsKCQlNRU5VSVRFTSAiJkhvenrhZuly6XMuLi4iICwJCTYwNQoJCU1FTlVJVEVNICImTmFwbPN64XMuLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJlR1bGFqZG9ub3MuLi4iICwJCTYwNwoJfQoKCVBPUFVQICImQWJsYWtvayIgIHsKCQlNRU5VSVRFTSAi2mogYSZibGFrIiAsCQkJSURfV0lORE9XX05FVwoJCU1FTlVJVEVNICJM6XBjc/V6ZXRlcyBlbHJlbmRleulzXHRDdHJsK0Y1IiAsCQlJRF9XSU5ET1dfQ0FTQ0FERQoJCU1FTlVJVEVNICJNb3phaWtzemVy+yBlbHJlbmRleulzICZ27XpzemludGVzZW4iICwJCUlEX1dJTkRPV19USUxFX0hPUloKCQlNRU5VSVRFTSAiTW96YWlrc3plcvsgZWxyZW5kZXrpcyBm/CZnZ/VsZWdlc2VuXHRDdHJsK0Y0IiAsCQlJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiQXV0b21hdGlrdXMgZWxyZW5kZXrpcyIgLAkJSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgoJCU1FTlVJVEVNICImU3ppbWLzbHVtIGVscmVuZGV66XMiICwJCUlEX1dJTkRPV19BUlJBTkdFCgkJTUVOVUlURU0gIiZGcmlzc+106XNcdEY1IiAsCQlJRF9SRUZSRVNICgl9CgoJUE9QVVAgIiY/IiAgewoJCU1FTlVJVEVNICImU/pn8yB06W1ha/Zy9mtcdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICJT+mfzICZrZXJlc+lzLi4uXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJkhhc3pu4WxhdFx0RjEiICwJCQlJRF9IRUxQX1VTSU5HCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJUE9QVVAgIkluZm9ybeFjafMuLi4iICB7CgkJICBNRU5VSVRFTSAiJldpbmUtcvNsLi4uIiAsCQkJSURfQUJPVVRfV0lORQovKgogKgkJICBNRU5VSVRFTSAiJkxpY2Vuc2UuLi4iCQlJRF9MSUNFTlNFCiAqCQkgIE1FTlVJVEVNICImTk8gV0FSUkFOVFkiCQlJRF9OT19XQVJSQU5UWQogKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJGdXR0YXThcyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImUGFyYW5jczoiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglDT05UUk9MIAkJIiZTemltYvNsdW1r6W50IiAsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKCURFRlBVU0hCVVRUT04JIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiTelnc2UiICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJlP6Z/MiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=