LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwoqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogIEZJTEUgTkFNRSA6IHB1dGlsLmgKKgoqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKiAgIDA1LzE0Lzk4ICAgIG5vcyAgICAgICAgIENyZWF0aW9uIChjb250ZW50IG1vdmVkIGhlcmUgZnJvbSB1dHlwZXMuaCkuCiogICAwNi8xNy85OSAgICBlcm0gICAgICAgICBBZGRlZCBJRUVFXzc1NAoqICAgMDcvMjIvOTggICAgc3RlcGhlbiAgICAgQWRkZWQgSUVFRXJlbWFpbmRlciwgbWF4LCBtaW4sIHRydW5jCiogICAwOC8xMy85OCAgICBzdGVwaGVuICAgICBBZGRlZCBpc05lZ2F0aXZlSW5maW5pdHksIGlzUG9zaXRpdmVJbmZpbml0eQoqICAgMDgvMjQvOTggICAgc3RlcGhlbiAgICAgQWRkZWQgbG9uZ0JpdHNGcm9tRG91YmxlCiogICAwMy8wMi85OSAgICBzdGVwaGVuICAgICBSZW1vdmVkIG9wZW5GaWxlKCkuICBBZGRlZCBBUzQwMCBzdXBwb3J0LgoqICAgMDQvMTUvOTkgICAgc3RlcGhlbiAgICAgQ29udmVydGVkIHRvIEMKKiAgIDExLzE1Lzk5ICAgIGhlbGVuYSAgICAgIEludGVncmF0ZWQgUy8zOTAgY2hhbmdlcyBmb3IgSUVFRSBzdXBwb3J0LgoqICAgMDEvMTEvMDAgICAgaGVsZW5hICAgICAgQWRkZWQgdV9nZXRWZXJzaW9uLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgojaWZuZGVmIFBVVElMX0gKI2RlZmluZSBQVVRJTF9ICgojaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKCi8qIERlZmluZSB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgSUVFRSA3NTQgZmxvYXRpbmcgcG9pbnQgKi8KI2RlZmluZSBJRUVFXzc1NCAgICAgICAKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogUGxhdGZvcm0gdXRpbGl0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgovKioKICogUGxhdGZvcm0gdXRpbGl0aWVzIGlzb2xhdGVzIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMgb2YgdGhlCiAqIGxpYmFyYXJ5LiAgRm9yIGVhY2ggcGxhdGZvcm0gd2hpY2ggdGhpcyBjb2RlIGlzIHBvcnRlZCB0bywgdGhlc2UKICogZnVuY3Rpb25zIG1heSBoYXZlIHRvIGJlIHJlLWltcGxlbWVudGVkLiAgKi8KCi8qIEZsb2F0aW5nIHBvaW50IHV0aWxpdGllcyAqLwpVX0NBUEkgYm9vbF90ICBVX0VYUE9SVDIgIHVwcnZfaXNOYU4oZG91YmxlKTsKVV9DQVBJIGJvb2xfdCAgVV9FWFBPUlQyIHVwcnZfaXNJbmZpbml0ZShkb3VibGUpOwpVX0NBUEkgYm9vbF90ICAgVV9FWFBPUlQyIHVwcnZfaXNQb3NpdGl2ZUluZmluaXR5KGRvdWJsZSk7ClVfQ0FQSSBib29sX3QgICBVX0VYUE9SVDIgdXBydl9pc05lZ2F0aXZlSW5maW5pdHkoZG91YmxlKTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2dldE5hTih2b2lkKTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2dldEluZmluaXR5KHZvaWQpOwoKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2Zsb29yKGRvdWJsZSB4KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2NlaWwoZG91YmxlIHgpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfZmFicyhkb3VibGUgeCk7ClVfQ0FQSSBkb3VibGUgICBVX0VYUE9SVDIgdXBydl9tb2RmKGRvdWJsZSB4LCBkb3VibGUqIHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfZm1vZChkb3VibGUgeCwgZG91YmxlIHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfcG93MTAoaW50MzJfdCB4KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X0lFRUVyZW1haW5kZXIoZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2ZtYXgoZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2ZtaW4oZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X21heChpbnQzMl90IHgsIGludDMyX3QgeSk7ClVfQ0FQSSBpbnQzMl90ICBVX0VYUE9SVDIgdXBydl9taW4oaW50MzJfdCB4LCBpbnQzMl90IHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfdHJ1bmMoZG91YmxlIGQpOwpVX0NBUEkgdm9pZCAgICAgVV9FWFBPUlQyIHVwcnZfbG9uZ0JpdHNGcm9tRG91YmxlKGRvdWJsZSBkLCBpbnQzMl90ICpoaSwgdWludDMyX3QgKmxvKTsKI2lmIFVfSVNfQklHX0VORElBTgojICAgZGVmaW5lIHVwcnZfaXNOZWdhdGl2ZShudW1iZXIpICgqKChzaWduZWQgY2hhciAqKSYobnVtYmVyKSk8MCkKI2Vsc2UKIyAgIGRlZmluZSB1cHJ2X2lzTmVnYXRpdmUobnVtYmVyKSAoKigoc2lnbmVkIGNoYXIgKikmKG51bWJlcikrc2l6ZW9mKG51bWJlciktMSk8MCkKI2VuZGlmCgovKiBDb252ZXJzaW9uIGZyb20gYSBkaWdpdCB0byB0aGUgY2hhcmFjdGVyIHdpdGggcmFkaXggYmFzZSBmcm9tIDItMTkgKi8KI2RlZmluZSBUX0NTdHJpbmdfaXRvc09mZnNldChhKSAoKGEpPD05PygnMCcrKGEpKTooJ0EnKyhhKS0xMCkpCgovKgogKiBSZXR1cm4gdGhlIGZsb29yIG9mIHRoZSBsb2cgYmFzZSAxMCBvZiBhIGdpdmVuIGRvdWJsZS4KICogVGhpcyBtZXRob2QgY29tcGVuc2F0ZXMgZm9yIGluYWNjdXJhY2llcyB3aGljaCBhcmlzZSBuYXR1cmFsbHkgd2hlbgogKiBjb21wdXRpbmcgbG9ncywgYW5kIGFsd2F5cyBnaXZlcyB0aGUgY29ycmVjdCB2YWx1ZS4gIFRoZSBwYXJhbWV0ZXIKICogbXVzdCBiZSBwb3NpdGl2ZSBhbmQgZmluaXRlLgogKiAoVGhhbmtzIHRvIEFsYW4gTGl1IGZvciBzdXBwbHlpbmcgdGhpcyBmdW5jdGlvbi4pCiAqLwovKioKICogUmV0dXJucyB0aGUgY29tbW9uIGxvZyBvZiB0aGUgZG91YmxlIHZhbHVlIGQuCiAqCiAqIEBwYXJhbSBkIHRoZSBkb3VibGUgdmFsdWUgdG8gYXBwbHkgdGhlIGNvbW1vbiBsb2cgZnVuY3Rpb24gZm9yLgogKiBAcmV0dXJuIHRoZSBsb2cgb2YgdmFsdWUgZC4KICovClVfQ0FQSSBpbnQxNl90ICBVX0VYUE9SVDIgdXBydl9sb2cxMChkb3VibGUgZCk7CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBpbiBhIGRvdWJsZSBudW1iZXIgeC4KICoKICogQHBhcmFtIHggdGhlIGRvdWJsZSBudW1iZXIKICovClVfQ0FQSSBpbnQzMl90ICBVX0VYUE9SVDIgdXBydl9kaWdpdHNBZnRlckRlY2ltYWwoZG91YmxlIHgpOwoKLyoqCiAqIFRpbWUgem9uZSB1dGlsaXRpZXMKICoKICogV3JhcHBlcnMgZm9yIEMgcnVudGltZSBsaWJyYXJ5IGZ1bmN0aW9ucyByZWxhdGluZyB0byB0aW1lem9uZXMuCiAqIFRoZSB0X3R6c2V0KCkgZnVuY3Rpb24gKHNpbWlsYXIgdG8gdHpzZXQpIHVzZXMgdGhlIGN1cnJlbnQgc2V0dGluZyAKICogb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFRaIHRvIGFzc2lnbiB2YWx1ZXMgdG8gdGhyZWUgZ2xvYmFsIAogKiB2YXJpYWJsZXM6IGRheWxpZ2h0LCB0aW1lem9uZSwgYW5kIHR6bmFtZS4gVGhlc2UgdmFyaWFibGVzIGhhdmUgdGhlIAogKiBmb2xsb3dpbmcgbWVhbmluZ3MsIGFuZCBhcmUgZGVjbGFyZWQgaW4gJmx0O3RpbWUuaD4uCiAqCiAqICAgZGF5bGlnaHQgICBOb256ZXJvIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lIHpvbmUgKERTVCkgaXMgc3BlY2lmaWVkCiAqICAgICAgICAgICAgICBpbiBUWjsgb3RoZXJ3aXNlLCAwLiBEZWZhdWx0IHZhbHVlIGlzIDEuCiAqICAgdGltZXpvbmUgICBEaWZmZXJlbmNlIGluIHNlY29uZHMgYmV0d2VlbiBjb29yZGluYXRlZCB1bml2ZXJzYWwKICogICAgICAgICAgICAgIHRpbWUgYW5kIGxvY2FsIHRpbWUuIEUuZy4sIC0yOCw4MDAgZm9yIFBTVCAoR01ULThocnMpCiAqICAgdHpuYW1lKDApICBUaHJlZS1sZXR0ZXIgdGltZS16b25lIG5hbWUgZGVyaXZlZCBmcm9tIFRaIGVudmlyb25tZW50CiAqICAgICAgICAgICAgICB2YXJpYWJsZS4gRS5nLiwgIlBTVCIuCiAqICAgdHpuYW1lKDEpICBUaHJlZS1sZXR0ZXIgRFNUIHpvbmUgbmFtZSBkZXJpdmVkIGZyb20gVFogZW52aXJvbm1lbnQKICogICAgICAgICAgICAgIHZhcmlhYmxlLiAgRS5nLiwgIlBEVCIuIElmIERTVCB6b25lIGlzIG9taXR0ZWQgZnJvbSBUWiwKICogICAgICAgICAgICAgIHR6bmFtZSgxKSBpcyBhbiBlbXB0eSBzdHJpbmcuCiAqCiAqIE5vdGVzOiBGb3IgZXhhbXBsZSwgdG8gc2V0IHRoZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBjb3JyZXNwb25kCiAqIHRvIHRoZSBjdXJyZW50IHRpbWUgem9uZSBpbiBHZXJtYW55LCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlCiAqIGZvbGxvd2luZyBzdGF0ZW1lbnRzOgogKgogKiAgIHNldCBUWj1HU1QxR0RUCiAqICAgc2V0IFRaPUdTVCsxR0RUCiAqCiAqIElmIHRoZSBUWiB2YWx1ZSBpcyBub3Qgc2V0LCB0X3R6c2V0KCkgYXR0ZW1wdHMgdG8gdXNlIHRoZSB0aW1lIHpvbmUKICogaW5mb3JtYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBVbmRlciBXaW5kb3dzIE5UCiAqIGFuZCBXaW5kb3dzIDk1LCB0aGlzIGluZm9ybWF0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgQ29udHJvbCBQYW5lbJJzCiAqIERhdGUvVGltZSBhcHBsaWNhdGlvbi4KICovClVfQ0FQSSB2b2lkICAgICBVX0VYUE9SVDIgdXBydl90enNldCh2b2lkKTsKVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X3RpbWV6b25lKHZvaWQpOwpVX0NBUEkgY2hhciogICAgVV9FWFBPUlQyIHVwcnZfdHpuYW1lKGludCBpbmRleCk7CgovKiBHZXQgVVRDIChHTVQpIHRpbWUgbWVhc3VyZWQgaW4gc2Vjb25kcyBzaW5jZSAwOjAwIG9uIDEvMS83MC4gKi8KVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X2dldFVUQ3RpbWUodm9pZCk7CgovKiBSZXR1cm4gdGhlIGRhdGEgZGlyZWN0b3J5IGZvciB0aGlzIHBsYXRmb3JtLiAqLwpVX0NBUEkgY29uc3QgY2hhciogVV9FWFBPUlQyIHVfZ2V0RGF0YURpcmVjdG9yeSh2b2lkKTsKCi8qIFNldCB0aGUgZGF0YSBkaXJlY3RvcnkuICovClVfQ0FQSSB2b2lkIFVfRVhQT1JUMiB1X3NldERhdGFEaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyZWN0b3J5KTsKCi8qIFJldHVybiB0aGUgZGVmYXVsdCBjb2RlcGFnZSBmb3IgdGhpcyBwbGF0Zm9ybSBhbmQgbG9jYWxlICovClVfQ0FQSSBjb25zdCBjaGFyKiAgVV9FWFBPUlQyIHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlKHZvaWQpOwoKLyogUmV0dXJuIHRoZSBkZWZhdWx0IGxvY2FsZSBJRCBzdHJpbmcgYnkgcXVlcnlpbmcgdGhzIHN5c3RlbSwgb3IKICAgICAgIHplcm8gaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4gKi8KVV9DQVBJIGNvbnN0IGNoYXIqICBVX0VYUE9SVDIgdXBydl9nZXREZWZhdWx0TG9jYWxlSUQodm9pZCk7CgovKgogKiBGaW5kcyB0aGUgbGVhc3QgZG91YmxlIGdyZWF0ZXIgdGhhbiBkIChpZiBwb3NpdGl2ZSA9PSB0cnVlKSwKICogb3IgdGhlIGdyZWF0ZXN0IGRvdWJsZSBsZXNzIHRoYW4gZCAoaWYgcG9zaXRpdmUgPT0gZmFsc2UpLgogKgogKiBUaGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlIGZ1bmN0aW9uIGRlZmluZWQgYnkgdGhlIENob2ljZUZvcm1hdCBBUEkKICogZG9jdW1lbnRhdGlvbi4KICogSXQgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGFuZCBub3QgZGVmaW5lZCBmb3IgTmFOIG9yIEluZmluaXR5CiAqLwpVX0NBUEkgZG91YmxlICAgICAgICAgICBVX0VYUE9SVDIgdXBydl9uZXh0RG91YmxlKGRvdWJsZSBkLCBib29sX3QgcG9zaXRpdmUpOwoKLyoqCiAqIEZpbGVzeXN0ZW0gZmlsZSBhbmQgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycy4KICogRXhhbXBsZTogJy8nIGFuZCAnOicgb24gVW5peCwgJ1xcJyBhbmQgJzsnIG9uIFdpbmRvd3MuCiAqLwojaWZkZWYgWFBfTUFDCiMgICBkZWZpbmUgVV9GSUxFX1NFUF9DSEFSICc6JwojICAgZGVmaW5lIFVfUEFUSF9TRVBfQ0hBUiAnOycKIyAgIGRlZmluZSBVX0ZJTEVfU0VQX1NUUklORyAiOiIKIyAgIGRlZmluZSBVX1BBVEhfU0VQX1NUUklORyAiOyIKI2VsaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChPUzIpCiMgICBkZWZpbmUgVV9GSUxFX1NFUF9DSEFSICdcXCcKIyAgIGRlZmluZSBVX1BBVEhfU0VQX0NIQVIgJzsnCiMgICBkZWZpbmUgVV9GSUxFX1NFUF9TVFJJTkcgIlxcIgojICAgZGVmaW5lIFVfUEFUSF9TRVBfU1RSSU5HICI7IgojZWxzZQojICAgZGVmaW5lIFVfRklMRV9TRVBfQ0hBUiAnLycKIyAgIGRlZmluZSBVX1BBVEhfU0VQX0NIQVIgJzonCiMgICBkZWZpbmUgVV9GSUxFX1NFUF9TVFJJTkcgIi8iCiMgICBkZWZpbmUgVV9QQVRIX1NFUF9TVFJJTkcgIjoiCiNlbmRpZgoKLyoqCiAqIENvbnZlcnQgY2hhciBjaGFyYWN0ZXJzIHRvIFVDaGFyIGNoYXJhY3RlcnMuCiAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB1c2VmdWwgb25seSBmb3IgImludmFyaWFudCBjaGFyYWN0ZXJzIgogKiB0aGF0IGFyZSBlbmNvZGVkIGluIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgogKiBUaGV5IGFyZSBhIHNtYWxsLCBjb25zdGFudCBzdWJzZXQgb2YgdGhlIGVuY29kaW5nIGFuZCBpbmNsdWRlCiAqIGp1c3QgdGhlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgYW5kIHNvbWUgcHVuY3R1YXRpb24uCiAqIEZvciBkZXRhaWxzLCBzZWUgdXR5cGVzLmggLgogKgogKiBAcGFyYW0gY3MgSW5wdXQgc3RyaW5nLCBwb2ludHMgdG8gPGNvZGU+bGVuZ3RoPC9jb2RlPgogKiAgICAgICAgICAgY2hhcmFjdGVyIGJ5dGVzIGZyb20gYSBzdWJzZXQgb2YgdGhlIHBsYXRmb3JtIGVuY29kaW5nLgogKiBAcGFyYW0gdXMgT3V0cHV0IHN0cmluZywgcG9pbnRzIHRvIG1lbW9yeSBmb3IgPGNvZGU+bGVuZ3RoPC9jb2RlPgogKiAgICAgICAgICAgVW5pY29kZSBjaGFyYWN0ZXJzLgogKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb252ZXJ0OyB0aGlzIG1heQogKiAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIDxjb2RlPk5VTDwvY29kZT4uCiAqLwpVX0NBUEkgdm9pZCBVX0VYUE9SVDIKdV9jaGFyc1RvVUNoYXJzKGNvbnN0IGNoYXIgKmNzLCBVQ2hhciAqdXMsIFVUZXh0T2Zmc2V0IGxlbmd0aCk7CgovKioKICogQ29udmVydCBVQ2hhciBjaGFyYWN0ZXJzIHRvIGNoYXIgY2hhcmFjdGVycy4KICogVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGlzIHVzZWZ1bCBvbmx5IGZvciAiaW52YXJpYW50IGNoYXJhY3RlcnMiCiAqIHRoYXQgY2FuIGJlIGVuY29kZWQgaW4gdGhlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCiAqIFRoZXkgYXJlIGEgc21hbGwsIGNvbnN0YW50IHN1YnNldCBvZiB0aGUgZW5jb2RpbmcgYW5kIGluY2x1ZGUKICoganVzdCB0aGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCBhbmQgc29tZSBwdW5jdHVhdGlvbi4KICogRm9yIGRldGFpbHMsIHNlZSB1dHlwZXMuaCAuCiAqCiAqIEBwYXJhbSB1cyBJbnB1dCBzdHJpbmcsIHBvaW50cyB0byA8Y29kZT5sZW5ndGg8L2NvZGU+CiAqICAgICAgICAgICBVbmljb2RlIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgZW5jb2RlZCB3aXRoIHRoZQogKiAgICAgICAgICAgY29kZXBhZ2UtaW52YXJpYW50IHN1YnNldCBvZiB0aGUgcGxhdGZvcm0gZW5jb2RpbmcuCiAqIEBwYXJhbSBjcyBPdXRwdXQgc3RyaW5nLCBwb2ludHMgdG8gbWVtb3J5IGZvciA8Y29kZT5sZW5ndGg8L2NvZGU+CiAqICAgICAgICAgICBjaGFyYWN0ZXIgYnl0ZXMuCiAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvbnZlcnQ7IHRoaXMgbWF5CiAqICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgPGNvZGU+TlVMPC9jb2RlPi4KICovClVfQ0FQSSB2b2lkIFVfRVhQT1JUMgp1X1VDaGFyc1RvQ2hhcnMoY29uc3QgVUNoYXIgKnVzLCBjaGFyICpjcywgVVRleHRPZmZzZXQgbGVuZ3RoKTsKCi8qKgogKiBHZXRzIHRoZSBJQ1UgcmVsZWFzZSB2ZXJzaW9uLiAgVGhlIHZlcnNpb24gYXJyYXkgc3RvcmVzIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqIGZvciBJQ1UuICBGb3IgZXhhbXBsZSwgcmVsZWFzZSAiMS4zLjMxLjIiIGlzIHRoZW4gcmVwcmVzZW50ZWQgYXMgMHgwMTAzMUYwMi4KICogQHBhcmFtIHZlcnNpb25BcnJheSB0aGUgdmVyc2lvbiAjIGluZm9ybWF0aW9uLCB0aGUgcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluCiAqLwoKVV9DQVBJIHZvaWQgVV9FWFBPUlQyCnVfZ2V0VmVyc2lvbihVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5KTsKCiNlbmRpZgo=