LyoKICogV2luZUZpbGUKICogSHVuZ2FyaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAojcHJhZ21hIGNvZGVfcGFnZSgxMjUwKQoKCi8qIE1lbnUgKi8KCklETV9XSU5FRklMRSBNRU5VIEZJWEVEIElNUFVSRQp7CglQT1BVUCAiJkbhamwiICB7CgkJTUVOVUlURU0gIiZNZWd5bml04XNcdEVudGVyIiAsCQkJMTAxCgkJTUVOVUlURU0gIsF0JmhlbHlleulzLi4uXHRGNyIgLCAJCQkxMDYKCQlNRU5VSVRFTSAiJk3hc29s4XMuLi5cdEY4IiAsCQkJMTA3CgkJTUVOVUlURU0gIiZW4WfzbGFwb24uLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJlT2cmzpc1x0RGVsIiAsCQkJMTA4CgkJTUVOVUlURU0gIsF0Jm5ldmV66XMuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAiVCZ1bGFqZG9uc+Fnb2suLi5cdEFsdCtFbnRlciIgLCBJRF9FRElUX1BST1BFUlRJRVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkJlY3NvbWFnb2zhcy4uLiIgLAkJMTE5CgkJTUVOVUlURU0gIksmaWNzb21hZ29s4XMuLi4iICwJCTEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRnV0dGF04XMuLi4iICwJCQlJRF9FWEVDVVRFCgkJTUVOVUlURU0gIiZOeW9tdGF04XMuLi4iICwgCQkJMTAyCgkJTUVOVUlURU0gIlThcnPtdOFzLi4uIiAsCQkxMDMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAi2mogJm1hcHBhLi4uIiAsCQkJMTExCgkJTUVOVUlURU0gIktlcmUmc+lzLi4uIiAsCQkJMTA0CgkJTUVOVUlURU0gIkbhamxvayBraSZ24Wxhc3p04XNhLi4uIiAsCQkJMTE2CgkJTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJktpbOlw6XNcdEFsdCtYIiAsIAkJCUlEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICImS2ls6XDpcyIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIiZMZW1leiIgIHsKCQlNRU5VSVRFTSAiTGVtZXogJm3hc29s4XNhLi4uIiAsCQkJMjAxCgkJTUVOVUlURU0gIiZMZW1lemNpbWtlLi4uIiAsCQkJMjAyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGb3JtYXThbOFzLi4uIiAsCQkJMjAzCiNpZmRlZiBfV0lOOTUKCQlNRU5VSVRFTSAiJlJlbmRzemVybGVtZXoga+lzeu106XNlLi4uIiwgLTEJLypAQCAqLwojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkjhbPN6YXRpIG1lZ2hhanTzIGNzYXRsYWtvenRhdOFzYSIgLAkJCTI1MgoJCU1FTlVJVEVNICJI4WzzemF0aSBtZWdoYWp08yBsZXbhbGFzenThc2EiICwJCTI1MwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJNZWdvc3p04XMuLi4iICwJCQkyNTQKCQlNRU5VSVRFTSAiTWVnb3N6dOFzICZtZWdzevxudGV06XNlLi4uIiAsCQkJMjU1CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk1lZ2hhanTzIGtpJnbhbGFzenThc2EuLi4iICwJCQkyNTEKCX0KCglQT1BVUCAiJk1hcHDhayIgIHsKCQlNRU5VSVRFTSAiJkv2dmV0a2V69SBzemludFx0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICImRmEga2lueWl04XNhXHQqIiAsCQkzMDIKCQlNRU5VSVRFTSAiJk1pbmRlbiBraW55aXThc2FcdFN0cmcrKiIgLAkJMzAzCgkJTUVOVUlURU0gIkZhICZiZWNzdWvhc2FcdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkd5ZXJtZWtlayBraWplbPZs6XNlIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImTul6ZXQiICB7CgkJTUVOVUlURU0gIiZUZWxqZXMiICwJCQk0MTMKCQlNRU5VSVRFTSAiJkv2bnl2dOFyZmEiICwJCQk0MTEKCQlNRU5VSVRFTSAiJkNzYWsgbWFwcOFrIiAsCQkJNDEyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGZWxvc3p04XMiICwJCQk0MTQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk7pdiIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICImTWluZGVuIHLpc3psZXQiICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImRWd5ZWRpLi4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZSZW5kZXrpcyBu6XYgc3plcmludCIgLAkJNDA0CgkJTUVOVUlURU0gIlJlbmRleulzIGsmaXRlcmplc3p06XMgc3plcmludCIgLAkJNDA1CgkJTUVOVUlURU0gIlJlbmRleulzICZt6XJldCBzemVyaW50IiAsIAkJNDA2CgkJTUVOVUlURU0gIlJlbmRleulzICZk4XR1bSBzemVyaW50IiAsIAkJNDA3CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIkVneWVkaSByZW5kZXrpcyAmLi4uIiAsCQkJNDA5Cgl9CgoJUE9QVVAgIiZCZeFsbO104XNvayIgIHsKCQlNRU5VSVRFTSAiJk1lZ2Vy9XPtdOlzLi4uIiAsCQktMQoJCU1FTlVJVEVNICImQmV0+2vpc3psZXQuLi4iICwJCQktMQoJCU1FTlVJVEVNICJFJmd5ZWRpIGVzemv2enThci4uLiIgLCAtMQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRXN6a/Z6dOFyIiAsCQlJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECgkJTUVOVUlURU0gIiZMZW1lenThciIgLAkJSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiJsFsbGFwb3Rzb3IiICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICImVGVsamVzIGvpcGVybnn1c1x0Q3RybCtTaGlmdCtTIiAsIAlJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlByb2dyYW1mdXR0YXThcyB1dOFuaSAmc3ppbWLzbHVtIiAsCQktMQoJCU1FTlVJVEVNICJNZWdzevxudGV06XMgYSB04XJvbOFzIHbpZ+luIiAsCQkJNTExCgl9CgoKCVBPUFVQICImQml6dG9uc+FnIiAgewoJCU1FTlVJVEVNICImSG96euFm6XLpcy4uLiIgLAkJNjA1CgkJTUVOVUlURU0gIiZOYXBs83rhcy4uLiIgLAkJCTYwNgoJCU1FTlVJVEVNICImVHVsYWpkb25vcy4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIiZBYmxha29rIiAgewoJCU1FTlVJVEVNICLaaiBhJmJsYWsiICwJCQlJRF9XSU5ET1dfTkVXCgkJTUVOVUlURU0gIkzpcGNz9XpldGVzIGVscmVuZGV66XNcdEN0cmwrRjUiICwJCUlEX1dJTkRPV19DQVNDQURFCgkJTUVOVUlURU0gIk1vemFpa3N6ZXL7IGVscmVuZGV66XMgJnbtenN6aW50ZXNlbiIgLAkJSURfV0lORE9XX1RJTEVfSE9SWgoJCU1FTlVJVEVNICJNb3phaWtzemVy+yBlbHJlbmRleulzIGb8Jmdn9WxlZ2VzZW5cdEN0cmwrRjQiICwJCUlEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJBdXRvbWF0aWt1cyBlbHJlbmRleulzIiAsCQlJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCgkJTUVOVUlURU0gIiZTemltYvNsdW0gZWxyZW5kZXrpcyIgLAkJSURfV0lORE9XX0FSUkFOR0UKCQlNRU5VSVRFTSAiJkZyaXNz7XTpc1x0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJj8iICB7CgkJTUVOVUlURU0gIiZT+mfzIHTpbWFr9nL2a1x0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIlP6Z/MgJmtlcmVz6XMuLi5cdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImSGFzem7hbGF0XHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiSW5mb3Jt4WNp8y4uLiIgIHsKCQkgIE1FTlVJVEVNICImV2luZS1y82wuLi4iICwJCQlJRF9BQk9VVF9XSU5FCi8qCiAqCQkgIE1FTlVJVEVNICImTGljZW5zZS4uLiIJCUlEX0xJQ0VOU0UKICoJCSAgTUVOVUlURU0gIiZOTyBXQVJSQU5UWSIJCUlEX05PX1dBUlJBTlRZCiAqLwoJCX0KCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkZ1dHRhdOFzIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZQYXJhbmNzOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiJlN6aW1i82x1bWvpbnQiICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJN6WdzZSIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImU/pn8yIgLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9Cg==