LyoKICogV2luZUZpbGUKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBQaW90ciBDYWJhbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewoJUE9QVVAgIiZQbGlrIiAgewoJCU1FTlVJVEVNICImT3R383J6XHRFbnRlciIgLAkJCUlEX0FDVElWQVRFCgkJTUVOVUlURU0gIiZQcnplbmllnC4uLlx0RjciICwgCQkJSURfRklMRV9NT1ZFCgkJTUVOVUlURU0gIiZLb3BpdWouLi5cdEY4IiAsCQkJSURfRklMRV9DT1BZCgkJTUVOVUlURU0gIlcgcyZjaG93a3UuLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJlVzdfFcdERlbCIgLAkJCUlEX0ZJTEVfREVMRVRFCgkJTUVOVUlURU0gIiZabWll8SBuYXp36i4uLiIgLAkJCTEwOQoJCU1FTlVJVEVNICJVc3Rhd2llJm5pYS4uLlx0QWx0K0VudGVyIiAsIElEX0VESVRfUFJPUEVSVElFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImS29tcHJlc2phLi4uIiAsCQkxMTkKCQlNRU5VSVRFTSAiJkRla29tcHJlc2phLi4uIiAsCQkxMjAKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlVydWNob20uLi4iICwJCQlJRF9FWEVDVVRFCgkJTUVOVUlURU0gIiZEcnVrdWouLi4iICwgCQkJMTAyCgkJTUVOVUlURU0gIlNrb2phcnouLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJVJnR383J6IGZvbGRlci4uLiIgLAkJCTExMQoJCU1FTlVJVEVNICImU3p1a2FqLi4uIiAsCQkJMTA0CgkJTUVOVUlURU0gIiZaYXpuYWN6IHBsaWtpLi4uIiAsCQkJMTE2CgkJTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiJld5apxjaWVcdEFsdCtYIiAsIAkJCUlEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICImV3lqnGNpZSIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIiZEeXNrIiAgewoJCU1FTlVJVEVNICImS29waXVqIGR1c2suLi4iICwJCQkyMDEKCQlNRU5VSVRFTSAiJkV0eWtpZXRhIGR5c2t1Li4uIiAsCQkJMjAyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGb3JtYXR1aiBkeXNrLi4uIiAsCQkJSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICImU3R383J6IGR5c2sgc3lzdGVtb3d5Li4uIiwgLTEJLypAQCAqLwojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlBvZLO5Y3ogRHlzayBTaWVjaW93eSIgLAkJCUlEX0NPTk5FQ1RfTkVUV09SS19EUklWRQoJCU1FTlVJVEVNICImT2SzuWN6IER5c2sgU2llY2lvd3kiICwJCUlEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJVZG9zdOpwbmlqIGpha28uLi4iICwJCQkyNTQKCQlNRU5VSVRFTSAiJk5pZSB1ZG9zdOpwbmlhai4uLiIgLAkJCTI1NQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJXeWLzciAmZHlza3UuLi4iICwJCQkyNTEKCX0KCglQT1BVUCAiJkthdGFsb2dpIiAgewoJCU1FTlVJVEVNICImTmFzdOpwbnkgcG96aW9tXHQrIiAsCQkJMzAxCgkJTUVOVUlURU0gIiZSb3p3afEgZHJ6ZXdvXHQqIiAsCQkzMDIKCQlNRU5VSVRFTSAiUm96d2nxICZ3c3p5c3Rrb1x0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiJlp3afEgZHJ6ZXdvXHQtIiAsCQkJMzA0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlphem5hY3ogJnBvZGthdGFsb2dpIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImV2lkb2siICB7CgkJTUVOVUlURU0gIiZEcnpld28gaSBrYXRhbG9naSIgLAkJCTQxMwoJCU1FTlVJVEVNICJEJnJ6ZXdvIiAsCQkJNDExCgkJTUVOVUlURU0gIiZLYXRhbG9naSIgLAkJCTQxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImUG+zuWN6IiAsCQkJSURfVklFV19TUExJVAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTmF6d2EiICwJCQlJRF9WSUVXX05BTUUKCQlNRU5VSVRFTSAiJldzenlzdGtpZSBhdHJ5YnV0eSBwbGlrdSIgLAkJCQlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIld5YnJhbmUgJmF0cnlidXR5IHBsaWt1Li4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlAmb3NvcnR1aiBhbGZhYmV0eWN6bmllIiAsCQk0MDQKCQlNRU5VSVRFTSAiUG9zb3J0dWogcG8gJnR5cGllIiAsCQk0MDUKCQlNRU5VSVRFTSAiUm96bWllnOYgJnBvIHdpZWxrb5xjaSIgLCAJCTQwNgoJCU1FTlVJVEVNICImU29ydHVqIHBvIGRhY2llIiAsIAkJNDA3CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlNvcnR1aiBwbyAmLi4uIiAsCQkJSURfVklFV19GSUxURVIKCX0KCglQT1BVUCAiJk9wY2plIiAgewoJCU1FTlVJVEVNICImUG90d2llcmR6ZW5pZS4uLiIgLAkJNTAxCgkJTUVOVUlURU0gIiZDemNpb25rYS4uLiIgLAkJCUlEX1NFTEVDVF9GT05UCgkJTUVOVUlURU0gIiZVc3Rhd2llbmlhIHBhc2thIG5hcnrqZHppLi4uIiAsIDUxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJQYXNlayAmbmFyeupkemkiICwJCUlEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiUGFzZWsgJmR5c2vzdyIgLAkJSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiUGFzZWsgJnN0YXR1c3UiICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJQZbNueSAmZWtyYW5cdEN0cmwrU2hpZnQrUyIgLCAJSURfVklFV19GVUxMU0NSRUVOCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImWm1pbmltYWxpenVqIHByenkgc3RhcmNpZSIgLAkJNTA0CgkJTUVOVUlURU0gIlomYXBpc3ogdXN0YXdpZW5pYSBwcnplZCB6YWtv8WN6ZW5pZW0iICwJCQk1MTEKCX0KCgoJUE9QVVAgIiZCZXpwaWVjemXxc3R3byIgIHsKCQlNRU5VSVRFTSAiJkRvc3TqcC4uLiIgLAkJNjA1CgkJTUVOVUlURU0gIiZMb2dvd2FuaWUuLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJlezYZxjaWNpZWwuLi4iICwJCTYwNwoJfQoKCVBPUFVQICImT2tubyIgIHsKCQlNRU5VSVRFTSAiJk5vd2Ugb2tubyIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAiJkthc2thZHVquWNvXHRDdHJsK0Y1IiAsCQlJRF9XSU5ET1dfQ0FTQ0FERQoJCU1FTlVJVEVNICImVHl0dbMgcGlvbm93byIgLAkJSURfV0lORE9XX1RJTEVfSE9SWgoJCU1FTlVJVEVNICJUeXR1syAmcG96aW9tb1x0Q3RybCtGNCIgLAkJSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIlJvem1pZZzmIGF1dG9tYXR5Y3puaWUiICwJCUlEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKCQlNRU5VSVRFTSAiUm96bWllnOYgJnN5bWJvbGUiICwJCUlEX1dJTkRPV19BUlJBTkdFCgkJTUVOVUlURU0gIiZPZJx3aWVyelx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJj8iICB7CgkJTUVOVUlURU0gIiZUZW1hdHUgcG9tb2N5XHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJlN6dWthai4uLiIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJlW/eXdhbmllIHBvbW9jeSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJldpbmVmaWxlLi4uIiAsCQkJSURfQUJPVVQKCQlNRU5VSVRFTSAiVyZpbmUuLi4iICwJCQlJRF9BQk9VVF9XSU5FCgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJVcnVjaG9tIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZQb2xlY2VuaWU6IiAsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKCUVESVRURVhUCQkyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAoJQ09OVFJPTCAJCSJKYWtvICZzeW1ib2wiICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJBbnVsdWoiICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJlBvbW9jIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KCklERF9TRUxFQ1RfREVTVElOQVRJT04gRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV3li83IgY2VsdSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImjGNpZb9rYToiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglERUZQVVNIQlVUVE9OCQkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSJBbnVsdWoiICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJlByemVnbLlkYWoiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewoJSURTX0ZPTlRfU0VMX0RMR19OQU1FCSJXcHJvd2FkemFuaWUgdXN0YXdpZfEgY3pjaW9ua2kiCglJRFNfRk9OVF9TRUxfRVJST1IJIkKzuWQgcHJ6eSB3eWJpZXJhbml1IGN6Y2lvbmtpIgp9Cg==