LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFN0YXJ0CiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDMgRGFuIEtlZ2VsCiAqIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIEN6ZWNoIHN0cmluZ3MgaW4gQ1AxMjUwICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3B1c3TtIHByb2dyYW0gbmVibyBvdGV2+GUgZG9rdW1lbnQgdiBwcm9ncmFtdSwga3Rlcv0gamUgbm9ybeFsbuwgcG91nml0IHBybyBzb3Vib3J5IHMgZGFub3UgcPjtcG9ub3UuXG5cClBvdZ5pdO06XG5cCnN0YXJ0IFt2b2xieV0gam3pbm9fcHJvZ3JhbXUgWy4uLl1cblwKc3RhcnQgW3ZvbGJ5XSBqbelub19kb2t1bWVudHVcblwKXG5cClZvbGJ5OlxuXAovTVtpbmltYWxpem92YW7sXSBTcHVzdO0gcHJvZ3JhbSBtaW5pbWFsaXpvdmFu7C5cblwKL01BWFtpbWFsaXpvdmFu7F0gU3B1c3TtIHByb2dyYW0gbWF4aW1hbGl6b3ZhbuwuXG5cCi9SIFNwdXN07SBwcm9ncmFtIG5vcm3hbG7sIChhbmkgbWluaW1hbGl6b3Zhbv0gYW5pIG1heGltYWxpem92YW79KS5cblwKL1cgyGVr4SBuYSBkb2tvbuhlbu0gc3B1mnTsbulobyBwcm9ncmFtdSwgdnJhY+0gbuF2cmF0b3b9IGvzZC5cblwKL1Byb2dJRE9wZW4gIE9wZW4gYSBkb2N1bWVudCB1c2luZyB0aGUgZm9sbG93aW5nIHByb2dJRC5cblwKL0wgWm9icmF67SBsaWNlbmNpLlxuXApcblwKc3RhcnQuZXhlIHZlcnplIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApTdGFydCBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHJ1biB3aXRoIC9MIG9wdGlvbi5cblwKVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdFxuXAp1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHJ1biAnc3RhcnQgL0wnIGZvciBkZXRhaWxzLlxuXAoiCgpTVFJJTkdfTElDRU5TRSwgInN0YXJ0LmV4ZSB2ZXJzaW9uIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2VcblwKYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMVxuXApvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblwKXG5cClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuXApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG5cCkdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblwKXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2VcblwKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcblwKRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS5cblwKXG5cClD4Zeh07HRlIHNpIHNvdWJvciBDT1BZSU5HLkxJQiBwcm8geu1za+Fu7SBpbmZvcm1hY+0gbyBsaWNlbmNpLlxuXAoiCgpTVFJJTkdfRVhFQ0ZBSUwgIkFwbGlrYWNlIG5lbW9obGEgYv10IHNwdZp07G5hIG5lYm8gbmVu7SCe4WRu4SBhcGxpa2FjZSBhc29jaW924W5hIHMgZGFu/W0gc291Ym9yZW0uXG5TaGVsbEV4ZWN1dGVFeCBzZWxoYWwiCgpTVFJJTkdfVU5JWEZBSUwgIkNvdWxkIG5vdCB0cmFuc2xhdGUgdGhlIHNwZWNpZmllZCBVbml4IGZpbGVuYW1lIHRvIGEgRE9TIGZpbGVuYW1lLiIKfQo=