LyoKICogV2luZUZpbGUgKER1dGNoIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDMgSGFucyBMZWlkZWtrZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EVVRDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewoJUE9QVVAgIiZCZXN0YW5kIiAgewoJCU1FTlVJVEVNICImT3BlbmVuXHRFbnRlciIgLCAgICAgICAgICAgICAgIDEwMQoJCU1FTlVJVEVNICImVmVycGxhYXRzZW4uLi5cdEY3IiAsICAgICAgICAgIDEwNgoJCU1FTlVJVEVNICImS29waetyZW4uLi5cdEY4IiAsICAgICAgICAgICAgIDEwNwoJCU1FTlVJVEVNICJOYWFyICZrbGVtYm9yZC4uLlx0RjkiICwgICAgICAgIDExOAoJCU1FTlVJVEVNICJWZXImd2lqZGVyZW5cdERlbCIgLCAgICAgICAgICAgIDEwOAoJCU1FTlVJVEVNICImTmFhbSB3aWp6aWdlbi4uLiIgLCAgICAgICAgICAgIDEwOQoJCU1FTlVJVEVNICImRWlnZW5zY2hhcHBlbi4uLlx0QWx0K0VudGVyIiAsIElEX0VESVRfUFJPUEVSVElFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImQ29tcHJpbWVyZW4uLi4iICwgICAgICAgICAgICAgIDExOQoJCU1FTlVJVEVNICImRGVjJm9tcHJpbWVyZW4uLi4iICwgICAgICAgICAgIDEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImU3RhcnRlbi4uLiIgLCAgICAgICAgICAgICAgICAgIElEX0VYRUNVVEUKCQlNRU5VSVRFTSAiQWYmZHJ1a2tlbi4uLiIgLCAgICAgICAgICAgICAgICAxMDIKCQlNRU5VSVRFTSAiS29wcGVsZW4uLi4iICwgICAgICAgICAgICAgICAgICAxMDMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiTmlldXdlICZtYXAuLi4iICwgICAgICAgICAgICAgICAxMTEKCQlNRU5VSVRFTSAiJlpvZWtlbi4uLiIgLCAgICAgICAgICAgICAgICAgICAxMDQKCQlNRU5VSVRFTSAiQmVzdGFuZGVuICZzZWxlY3RlcmVuLi4uIiAsICAgICAxMTYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJBJmZzbHVpdGVuXHRBbHQrWCIgLCAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICJBJmZzbHVpdGVuIiwgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKCX0KCglQT1BVUCAiJkRpc2siICB7CgkJTUVOVUlURU0gIkRpc2sgJmtvcGnrcmVuLi4uIiAsICAgICAgICAgIDIwMQoJCU1FTlVJVEVNICJEaXNrbGFiZWwgbWFrZW4uLi4iICwJCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiRGlzayAmZm9ybWF0dGVyZW4uLi4iICwgICAgICAgMjAzCiNpZmRlZiBfV0lOOTUKCQlNRU5VSVRFTSAiU3lzdGVlbWRpc2sgbWFrZW4uLi4iLCAtMQkvKkBAICovCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJWZXJiaW5kaW5nICZtYWtlbiBtZXQgbmV0d2Vya2NoaWpmIiAgLCAgICAgMjUyCgkJTUVOVUlURU0gIlZlcmJpbmRpbmcgJnZlcmJyZWtlbiBtZXQgbmV0d2Vya3NjaGlqZiIgLCAyNTMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiU2NoaWpmICZkZWxlbi4uLiIgLCAgICAgICAgIDI1NAoJCU1FTlVJVEVNICJEZWxlbiAmb25nZWRhYW4gbWFrZW4uLi4iICwgMjU1CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlNjaGlqZiAmc2VsZWN0ZXJlbi4uLiIgLCAgICAyNTEKCX0KCglQT1BVUCAiJk1hcHBlbiIgIHsKCQlNRU5VSVRFTSAiJlZvbGdlbmRlIG5pdmVhdVx0KyIgLCAgICAgICAzMDEKCQlNRU5VSVRFTSAiJlVpdGtsYXBwZW5cdCoiICwgICAgICAgICAgICAzMDIKCQlNRU5VSVRFTSAiJkFsbGVzIHVpdGtsYXBwZW5cdEN0cmwrKiIgLCAzMDMKCQlNRU5VSVRFTSAiJklua2xhcHBlblx0LSIgLCAgICAgICAgICAgICAzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJk1hcmtlZXIgbWFwcGVuIiAsICAgICAgICAgICA1MDUKCX0KCglQT1BVUCAiJkJlZWxkIiAgewoJCU1FTlVJVEVNICImSGllcmFyY2hpZSBlbiBtYXBpbmhvdWQiICwgIDQxMwoJCU1FTlVJVEVNICImQWxsZWVuIGhpZXJhcmNoaWUiICwgICAgICAgIDQxMQoJCU1FTlVJVEVNICJBbGxlZW4gJm1hcGluaG91ZCIgLCAgICAgICAgIDQxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJTcCZsaXRzZW4iICwgICAgICAgICAgICAgICAgIDQxNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTmFhbSIgLCAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICImQWxsZSBkZXRhaWxzIiAsICAgICAgICAgICAgIElEX1ZJRVdfQUxMX0FUVFJJQlVURVMsIENIRUNLRUQKCQlNRU5VSVRFTSAiJkdlZGVlbHRlbGlqa2UgZGV0YWlscy4uLiIgLCBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiU29ydGVlciBvcCAmbmFhbSIgLCAgICA0MDQKCQlNRU5VSVRFTSAiU29ydGVlciBvcCAmdHlwZSIgLCAgICA0MDUKCQlNRU5VSVRFTSAiU29ydGVlciBvcCAmZ3Jvb3R0ZSIgLCA0MDYKCQlNRU5VSVRFTSAiU29ydGVlciBvcCAmZGF0dW0iICwgICA0MDcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiU29ydGVlciBvcCAmLi4uIiAsICAgICA0MDkKCX0KCglQT1BVUCAiJk9wdGllcyIgIHsKCQlNRU5VSVRFTSAiJkJldmVzdGlnaW5nLi4uIiAsIC0xCgkJTUVOVUlURU0gIiZMZXR0ZXJ0eXBlLi4uIiAsICAtMQoJCU1FTlVJVEVNICJHZXJlZWRzY2hhcHBlbmJhbGsgJmFhbnBhc3Nlbi4uLiIgLCAtMQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImR2VyZWVkc2NoYXBwZW5iYWxrIiAsIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiJlNjaGlqdmVuYmFsayIgLCAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICJTJnRhdHVzYmFsayIgLCAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJlZvbGxlZGlnIHNjaGVybVx0Q3RybCtTaGlmdCtTIiAsIElEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiR2UmbWluaW1hbGlzZWVyZCBzdGFydGVuIiAsIC0xCgkJTUVOVUlURU0gIiZJbnN0ZWxsaW5nZW4gb3BzbGFhbiBiaWogYWZzbHVpdGVuIiAsIDUxMQoJfQoKCglQT1BVUCAiJkJldmVpbGlnaW5nIiAgewoJCU1FTlVJVEVNICImVG9lZ2FuZy4uLiIgLCAgNjA1CgkJTUVOVUlURU0gIiZMb2dnZW4uLi4iICwgICA2MDYKCQlNRU5VSVRFTSAiJkVpZ2VuYWFyLi4uIiAsIDYwNwoJfQoKCVBPUFVQICImVmVuc3RlciIgIHsKCQlNRU5VSVRFTSAiTmlldXcgJnZlbnN0ZXIiICwgICAgICAgICBJRF9XSU5ET1dfTkVXCgkJTUVOVUlURU0gIlRyYXBzZ2V3aWpzXHRDdHJsK0Y1IiAsICAgSURfV0lORE9XX0NBU0NBREUKCQlNRU5VSVRFTSAiJkJvdmVuIGVsa2FhciIgLCAgICAgICAgICBJRF9XSU5ET1dfVElMRV9IT1JaCgkJTUVOVUlURU0gIiZOYWFzdCBlbGthYXJcdEN0cmwrRjQiICwgSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIkF1dG9tYXRpc2NoIHNjaGlra2VuIiAsICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgoJCU1FTlVJVEVNICImUGljdG9ncmFtbWVuIHNjaGlra2VuIiAsIElEX1dJTkRPV19BUlJBTkdFCgkJTUVOVUlURU0gIiZWZXJuaWV1d2VuXHRGNSIgLCAgICAgICAgSURfUkVGUkVTSAoJfQoKCVBPUFVQICImPyIgIHsKCQlNRU5VSVRFTSAiJkhlbHAtb25kZXJ3ZXJwZW5cdEYxIiAsIElEX0hFTFAKCQlNRU5VSVRFTSAiJlpvZWtlbi4uLlx0RjEiICwgICAgICAgIElEX0hFTFAKCQlNRU5VSVRFTSAiJkluc3RydWN0aWVcdEYxIiAsICAgICAgIElEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiSW5mby4uLiIgIHsKCQkgIE1FTlVJVEVNICJPdmVyICZXaW5lLi4uIiAsICAgICAgIElEX0FCT1VUX1dJTkUKLyoKICoJCSAgTUVOVUlURU0gIiZMaWNlbnRpZS4uLiIgICAgICAgICAgSURfTElDRU5TRQogKgkJICBNRU5VSVRFTSAiJkdFRU4gR0FSQU5USUUiICAgICAgICBJRF9OT19XQVJSQU5UWQogKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJVaXR2b2VyZW4iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJQ09OVFJPTCAJCSIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKCUNPTlRST0wgCQkiJk9wZHJhY2h0OiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiQWxzICZwaWN0b2dyYW0iICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJBbm51bGVyZW4iICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJkhlbHAiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=