ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggMGQzOTg2Yi4uMjc2ZDkwMCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNSArMSw1IEBACiAKLUxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKK0xpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKIAogVGhpcyBpcyBhIHB1YmxpYyByZWxlYXNlIG9mIGxpYnBuZywgaW50ZW5kZWQgZm9yIHVzZSBpbiBwcm9kdWN0aW9uIGNvZGVzLgogCkBAIC0xMyw2ICsxMyw3IEBACiAgICAgYnkgZGVmYXVsdC4KICAgQWRkZWQgcnVudGltZSBzZWxlY3Rpb24gb2YgTU1YIGZlYXR1cmVzLgogICBBZGRlZCBwbmdfc2V0X3N0cmlwX2Vycm9yX251bWJlcnMgZnVuY3Rpb24gYW5kIHJlbGF0ZWQgbWFjcm9zLgorICBBZGRlZCBhIGNoZWNrIGZvciBhdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIFBMVEUgaW4gZ3JheXNjYWxlIFBORyBkYXRhc3RyZWFtcy4KIAogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvCiBwbmctaW1wbGVtZW50QGNjcmMud3VzdGwuZWR1IG9yIHRvIHJhbmRlZ0BhbHVtLnJwaS5lZHUKZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IGMzY2Y5MjkuLjU3YTYyYjMgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtOTQwLDYgKzk0MCw5IEBACiAgICAgYnkgZGVmYXVsdC4KICAgQWRkZWQgcnVudGltZSBzZWxlY3Rpb24gb2YgTU1YIGZlYXR1cmVzLgogICBBZGRlZCBwbmdfc2V0X3N0cmlwX2Vycm9yX251bWJlcnMgZnVuY3Rpb24gYW5kIHJlbGF0ZWQgbWFjcm9zLgordmVyc2lvbiAxLjIuMGJldGEyIFtNYXkgNywgMjAwMV0KKyAgRmluaXNoZWQgbWVyZ2luZyAxLjIuMGJldGExIHdpdGggdmVyc2lvbiAxLjAuOQorICBBZGRlZCBhIGNoZWNrIGZvciBhdHRlbXB0cyB0byByZWFkIG9yIHdyaXRlIFBMVEUgaW4gZ3JheXNjYWxlIFBORyBkYXRhc3RyZWFtcy4KIAogU2VuZCBjb21tZW50cy9jb3JyZWN0aW9ucy9jb21tZW5kYXRpb25zIHRvCiBwbmctaW1wbGVtZW50QGNjcmMud3VzdGwuZWR1IG9yIHRvIHJhbmRlZ0BhbHVtLnJwaS5lZHUKZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCmluZGV4IGQyYWQyODYuLjJjOTY1NjAgMTAwNjQ0Ci0tLSBhL0lOU1RBTEwKKysrIGIvSU5TVEFMTApAQCAtMSw1ICsxLDUgQEAKIAotSW5zdGFsbGluZyBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKK0luc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAKIEJlZm9yZSBpbnN0YWxsaW5nIGxpYnBuZywgeW91IG11c3QgZmlyc3QgaW5zdGFsbCB6bGliLiAgemxpYgogY2FuIHVzdWFsbHkgYmUgZm91bmQgd2hlcmV2ZXIgeW91IGdvdCBsaWJwbmcuICB6bGliIGNhbiBiZQpAQCAtMTAsNyArMTAsNyBAQAogdmVyc2lvbiBvZiB6bGliIHRoYXQncyBpbnN0YWxsZWQuCiAKIFlvdSBjYW4gcmVuYW1lIHRoZSBkaXJlY3RvcmllcyB0aGF0IHlvdSBkb3dubG9hZGVkICh0aGV5Ci1taWdodCBiZSBjYWxsZWQgImxpYnBuZy0xLjIuMGJldGExIiBvciAibHBuZzEwOSIgYW5kICJ6bGliLTEuMS4zIgorbWlnaHQgYmUgY2FsbGVkICJsaWJwbmctMS4yLjBiZXRhMiIgb3IgImxwbmcxMDkiIGFuZCAiemxpYi0xLjEuMyIKIG9yICJ6bGliMTEzIikgc28gdGhhdCB5b3UgaGF2ZSBkaXJlY3RvcmllcyBjYWxsZWQgInpsaWIiIGFuZCAibGlicG5nIi4KIAogWW91ciBkaXJlY3Rvcnkgc3RydWN0dXJlIHNob3VsZCBsb29rIGxpa2UgdGhpczoKQEAgLTI4LDYgKzI4LDcgQEAKICAgICAgICAgICAgICBwbmdzdWl0ZQogICAgICAgICAgICAgIHZpc3VwbmcKICAgICAgICAgICBwcm9qZWN0cworICAgICAgICAgICAgIGJlb3MKICAgICAgICAgICAgICBib3JsYW5kCiAgICAgICAgICAgICAgbXN2YwogICAgICAgICAgICAgIHdpbmNlCkBAIC01OSw4ICs2MCw4IEBACiBpbmNsdWRlCiAKICBtYWtlZmlsZS5zdGQgICAgICA9PiAgR2VuZXJpYyBVTklYIG1ha2VmaWxlIChjYywgY3JlYXRlcyBzdGF0aWMgbGlicG5nLmEpCi0gbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCi0gbWFrZWZpbGUuZ2NtbXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEsCisgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTIpCisgbWFrZWZpbGUuZ2NtbXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYXNzZW1ibGVyIGNvZGUgdHVuZWQgZm9yIEludGVsIE1NWCBwbGF0Zm9ybSkKICBtYWtlZmlsZS5nY2MgICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICBtYWtlZmlsZS5rbnIgICAgICA9PiAgQXJjaGFpYyBVTklYIE1ha2VmaWxlIHRoYXQgY29udmVydHMgZmlsZXMgd2l0aApAQCAtNjksMTUgKzcwLDE3IEBACiAgbWFrZWZpbGUuYWl4ICAgICAgPT4gIEFJWCBtYWtlZmlsZQogIG1ha2VmaWxlLmN5Z3dpbiAgID0+ICBDeWd3aW4vZ2NjIG1ha2VmaWxlCiAgbWFrZWZpbGUuZGVjICAgICAgPT4gIERFQyBBbHBoYSBVTklYIG1ha2VmaWxlCisgbWFrZWZpbGUuaHBnY2MgICAgPT4gIEhQVVggbWFrZWZpbGUgdXNpbmcgZ2NjCiAgbWFrZWZpbGUuaHB1eCAgICAgPT4gIEhQVVggKDEwLjIwIGFuZCAxMS4wMCkgbWFrZWZpbGUKICBtYWtlZmlsZS5pYm1jICAgICA9PiAgSUJNIEMvQysrIHZlcnNpb24gMy54IGZvciBXaW4zMiBhbmQgT1MvMiAoc3RhdGljKQogIG1ha2VmaWxlLmludGVsICAgID0+ICBJbnRlbCBDL0MrKyB2ZXJzaW9uIDQuMCBhbmQgbGF0ZXIKICBsaWJwbmcuaWNjICAgICAgICA9PiAgUHJvamVjdCBmaWxlIGZvciBJQk0gVmlzdWFsQWdlL0MrKyB2ZXJzaW9uIDQuMCBvciBsYXRlcgogIG1ha2VmaWxlLm1hY29zeCAgID0+ICBNQUNPUyBYIE1ha2VmaWxlCisgbWFrZWZpbGUubmV0YnNkICAgPT4gIE5ldEJTRC9jYyBtYWtlZmlsZSwgdXNlcyBQTkdHQ0NSRAogIG1ha2VmaWxlLnNnaSAgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gbWFrZWZpbGUuc2dnY2MgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjIuMGJldGExKQorIG1ha2VmaWxlLnNnZ2NjICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4yLjBiZXRhMikKICBtYWtlZmlsZS5zdW5vcyAgICA9PiAgU3VuIG1ha2VmaWxlCi0gbWFrZWZpbGUuc29sYXJpcyAgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4yLjBiZXRhMSkKKyBtYWtlZmlsZS5zb2xhcmlzICA9PiAgU29sYXJpcyAyLlggbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjIuMGJldGEyKQogIG1ha2VmaWxlLnNjbyAgICAgID0+ICBGb3IgU0NPIE9TcjUgIEVMRiBhbmQgVW5peHdhcmUgNyB3aXRoIE5hdGl2ZSBjYwogIG1ha2VmaWxlLm1pcHMgICAgID0+ICBNSVBTIG1ha2VmaWxlCiAgbWFrZWZpbGUuYWNvcm4gICAgPT4gIEFjb3JuIG1ha2VmaWxlCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvTElDRU5TRQppbmRleCBhYWRmMThmLi43YTUwNTliIDEwMDY0NAotLS0gYS9MSUNFTlNFCisrKyBiL0xJQ0VOU0UKQEAgLTgsNyArOCw3IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjIuMGJldGExLCBNYXkgNiwgMjAwMSwgYXJlCitsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjIuMGJldGEyLCBNYXkgNywgMjAwMSwgYXJlCiBDb3B5cmlnaHQgKGMpIDIwMDAgR2xlbm4gUmFuZGVycy1QZWhyc29uCiBhbmQgYXJlIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC05OSw0ICs5OSw0IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogcmFuZGVnQGFsdW0ucnBpLmVkdQotTWF5IDYsIDIwMDEKK01heSA3LCAyMDAxCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNDRjNzdjOC4uZTUxMDgxNiAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVJFQURNRSBmb3IgbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMSAoc2hhcmVkIGxpYnJhcnkgMi4xKQorUkVBRE1FIGZvciBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxIChzaGFyZWQgbGlicmFyeSAyLjEpCiBTZWUgdGhlIG5vdGUgYWJvdXQgdmVyc2lvbiBudW1iZXJzIG5lYXIgdGhlIHRvcCBvZiBwbmcuaAogCiBTZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBpbnN0YWxsIGxpYnBuZy4KQEAgLTE3Miw2ICsxNzIsNyBAQAogICAgICAgIHBuZ3N1aXRlICAgICA9PiAgVGVzdCBpbWFnZXMKICAgICAgICB2aXN1cG5nICAgICAgPT4gIENvbnRhaW5zIGEgTVNWQyB3b3Jrc3BhY2UgZm9yIFZpc3VhbFBuZwogICAgICAgcHJvamVjdHMgICAgICA9PiAgQ29udGFpbnMgcHJvamVjdCBmaWxlcyBhbmQgd29ya3NwYWNlcyBmb3IgYnVpbGRpbmcgRExMCisgICAgICAgYmVvcyAgICAgICAgICAgICA9PiAgQ29udGFpbnMgYSBCZW9zIHdvcmtzcGFjZSBmb3IgYnVpbGRpbmcgbGlicG5nCiAgICAgICAgYm9ybGFuZCAgICAgICAgICA9PiAgQ29udGFpbnMgYSBCb3JsYW5kIHdvcmtzcGFjZSBmb3IgYnVpbGRpbmcgbGlicG5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHpsaWIKICAgICAgICBtc3ZjICAgICAgICAgICAgID0+ICBDb250YWlucyBhIE1pY3Jvc29mdCBWaXN1YWwgQysrIChNU1ZDKSB3b3Jrc3BhY2UKQEAgLTE4Miw5ICsxODMsOSBAQAogICAgICAgIGRlc2NyaXAubW1zICAgICAgPT4gIFZNUyBtYWtlZmlsZSBmb3IgTU1TIG9yIE1NSwogICAgICAgIG1ha2VmaWxlLnN0ZCAgICAgPT4gIEdlbmVyaWMgVU5JWCBtYWtlZmlsZSAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQogICAgICAgIG1ha2VmaWxlLmxpbnV4ICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4yLjBiZXRhMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTIpCiAgICAgICAgbWFrZWZpbGUuZ2NtbXggICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJwbmcuc28uMi4xLjIuMGJldGExLCB1c2VzIGFzc2VtYmxlciBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicG5nLnNvLjIuMS4yLjBiZXRhMiwgdXNlcyBhc3NlbWJsZXIgY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVkIGZvciBJbnRlbCBNTVggcGxhdGZvcm0pCiAgICAgICAgbWFrZWZpbGUuZ2NjICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5rbnIgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCkBAIC0xOTMsMTYgKzE5NCwxOCBAQAogICAgICAgIG1ha2VmaWxlLmFpeCAgICAgPT4gIEFJWCBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmN5Z3dpbiAgPT4gIEN5Z3dpbi9nY2MgbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5kZWMgICAgID0+ICBERUMgQWxwaGEgVU5JWCBtYWtlZmlsZQorICAgICAgIG1ha2VmaWxlLmhwZ2NjICAgPT4gIEhQVVggbWFrZWZpbGUgdXNpbmcgZ2NjCiAgICAgICAgbWFrZWZpbGUuaHB1eCAgICA9PiAgSFBVWCAoMTAuMjAgYW5kIDExLjAwKSBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmlibWMgICAgPT4gIElCTSBDL0MrKyB2ZXJzaW9uIDMueCBmb3IgV2luMzIgYW5kIE9TLzIgKHN0YXRpYykKICAgICAgICBtYWtlZmlsZS5pbnRlbCAgID0+ICBJbnRlbCBDL0MrKyB2ZXJzaW9uIDQuMCBhbmQgbGF0ZXIKICAgICAgICBsaWJwbmcuaWNjICAgICAgID0+ICBQcm9qZWN0IGZpbGUsIElCTSBWaXN1YWxBZ2UvQysrIDQuMCBvciBsYXRlcgogICAgICAgIG1ha2VmaWxlLm1hY29zeCAgPT4gIE1BQ09TIFggTWFrZWZpbGUKKyAgICAgICBtYWtlZmlsZS5uZXRic2QgID0+ICBOZXRCU0QvY2MgbWFrZWZpbGUsIHVzZXMgUE5HR0NDUkQKICAgICAgICBtYWtlZmlsZS5zZ2kgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gICAgICAgbWFrZWZpbGUuc2dnY2MgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCisgICAgICAgbWFrZWZpbGUuc2dnY2MgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTIpCiAgICAgICAgbWFrZWZpbGUuc3Vub3MgICA9PiAgU3VuIG1ha2VmaWxlCiAgICAgICAgbWFrZWZpbGUuc29sYXJpcyA9PiAgU29sYXJpcyAyLlggbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjIuMGJldGEyKQogICAgICAgIG1ha2VmaWxlLnNjbyAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCiAgICAgICAgbWFrZWZpbGUubWlwcyAgICA9PiAgTUlQUyBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmFjb3JuICAgPT4gIEFjb3JuIG1ha2VmaWxlCmRpZmYgLS1naXQgYS9ZMktJTkZPIGIvWTJLSU5GTwppbmRleCAxNzRjNzMwLi5iY2MwYTc4IDEwMDY0NAotLS0gYS9ZMktJTkZPCisrKyBiL1kyS0lORk8KQEAgLTEsMTMgKzEsMTMgQEAKICAgIFkySyBjb21wbGlhbmNlIGluIGxpYnBuZzoKICAgID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgICAgTWF5IDYsIDIwMDEKKyAgICAgIE1heSA3LCAyMDAxCiAKICAgICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAgICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiAgICAgICBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi0gICAgICB1cHdhcmQgdGhyb3VnaCAxLjIuMGJldGExIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgorICAgICAgdXB3YXJkIHRocm91Z2ggMS4yLjBiZXRhMiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKICAgICAgIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiAgICAgICBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlcgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDE1OWZiYWQuLjlkNzZiNjggMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNSArMSw1IEBACiBlY2hvICIKLSAgVGhlcmUgaXMgbm8gXCJjb25maWd1cmVcIiBzY3JpcHQgZm9yIExpYnBuZy0xLjIuMGJldGExLiAgSW5zdGVhZCwgcGxlYXNlCisgIFRoZXJlIGlzIG5vIFwiY29uZmlndXJlXCIgc2NyaXB0IGZvciBMaWJwbmctMS4yLjBiZXRhMi4gIEluc3RlYWQsIHBsZWFzZQogICBjb3B5IHRoZSBhcHByb3ByaWF0ZSBtYWtlZmlsZSBmb3IgeW91ciBzeXN0ZW0gZnJvbSB0aGUgXCJzY3JpcHRzXCIKICAgZGlyZWN0b3J5LiAgUmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBtb3JlIGRldGFpbHMuCiAiCmRpZmYgLS1naXQgYS9leGFtcGxlLmMgYi9leGFtcGxlLmMKaW5kZXggMWU5NTNjOC4uZjBmZTY4OCAxMDA2NDQKLS0tIGEvZXhhbXBsZS5jCisrKyBiL2V4YW1wbGUuYwpAQCAtMzM4LDcgKzMzOCw4IEBACiAKICAgIGZvciAocm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3crKykKICAgIHsKLSAgICAgIHJvd19wb2ludGVyc1tyb3ddID0gbWFsbG9jKHBuZ19nZXRfcm93Ynl0ZXMocG5nX3B0ciwgaW5mb19wdHIpKTsKKyAgICAgIHJvd19wb2ludGVyc1tyb3ddID0gcG5nX21hbGxvYyhwbmdfcHRyLCBwbmdfZ2V0X3Jvd2J5dGVzKHBuZ19wdHIsCisgICAgICAgICBpbmZvX3B0cikpOwogICAgfQogCiAgICAvKiBOb3cgaXQncyB0aW1lIHRvIHJlYWQgdGhlIGltYWdlLiAgT25lIG9mIHRoZXNlIG1ldGhvZHMgaXMgUkVRVUlSRUQgKi8KQEAgLTQ5NCw3ICs0OTUsNyBAQAogICogcG5nX3Byb2dyZXNzaXZlX2NvbWJpbmVfcm93KCkgcGFzc2luZyBpbiB0aGUgcm93IGFuZCB0aGUKICAqIG9sZCByb3cuICBZb3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgTlVMTCByb3dzIChpdCB3aWxsCiAgKiBqdXN0IHJldHVybikgYW5kIGZvciBub24taW50ZXJsYWNlZCBpbWFnZXMgKGl0IGp1c3QgZG9lcyB0aGUKLSAqIG1lbWNweSBmb3IgeW91KSBpZiBpdCB3aWxsIG1ha2UgdGhlIGNvZGUgZWFzaWVyLiAgVGh1cywgeW91CisgKiBwbmdfbWVtY3B5IGZvciB5b3UpIGlmIGl0IHdpbGwgbWFrZSB0aGUgY29kZSBlYXNpZXIuICBUaHVzLCB5b3UKICAqIGNhbiBqdXN0IGRvIHRoaXMgZm9yIGFsbCBjYXNlczoKICAqLwogCkBAIC02MDMsNyArNjA0LDggQEAKICAgICAgIFBOR19JTlRFUkxBQ0VfPz8/PywgUE5HX0NPTVBSRVNTSU9OX1RZUEVfQkFTRSwgUE5HX0ZJTFRFUl9UWVBFX0JBU0UpOwogCiAgICAvKiBzZXQgdGhlIHBhbGV0dGUgaWYgdGhlcmUgaXMgb25lLiAgUkVRVUlSRUQgZm9yIGluZGV4ZWQtY29sb3IgaW1hZ2VzICovCi0gICBwYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX21hbGxvYyhwbmdfcHRyLCBQTkdfTUFYX1BBTEVUVEVfTEVOR1RIICogc2l6ZW9mIChwbmdfY29sb3IpKTsKKyAgIHBhbGV0dGUgPSAocG5nX2NvbG9ycClwbmdfbWFsbG9jKHBuZ19wdHIsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgKKyAgICAgICAgICAgICAqIHNpemVvZiAocG5nX2NvbG9yKSk7CiAgICAvKiAuLi4gc2V0IHBhbGV0dGUgY29sb3JzIC4uLiAqLwogICAgcG5nX3NldF9QTFRFKHBuZ19wdHIsIGluZm9fcHRyLCBwYWxldHRlLCBQTkdfTUFYX1BBTEVUVEVfTEVOR1RIKTsKICAgIC8qIFlvdSBtdXN0IG5vdCBmcmVlIHBhbGV0dGUgaGVyZSwgYmVjYXVzZSBwbmdfc2V0X1BMVEUgb25seSBtYWtlcyBhIGxpbmsgdG8KZGlmZiAtLWdpdCBhL2xpYnBuZy4zIGIvbGlicG5nLjMKaW5kZXggODhhMzc1OC4uMWU1NDZjMyAxMDA2NDQKLS0tIGEvbGlicG5nLjMKKysrIGIvbGlicG5nLjMKQEAgLTEsNiArMSw2IEBACi0uVEggTElCUE5HIDMgIk1heSA2LCAyMDAxIgorLlRIIExJQlBORyAzICJNYXkgNywgMjAwMSIKIC5TSCBOQU1FCi1saWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjIuMGJldGExCitsaWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjIuMGJldGEyCiAuU0ggU1lOT1BTSVMKIFxmSVxmQgogCkBAIC03ODEsNyArNzgxLDcgQEAKIC5TSCBMSUJQTkcuVFhUCiBsaWJwbmcudHh0IC0gQSBkZXNjcmlwdGlvbiBvbiBob3cgdG8gdXNlIGFuZCBtb2RpZnkgbGlicG5nCiAKLSBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICBVcGRhdGVkIGFuZCBkaXN0cmlidXRlZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICA8cmFuZGVnQGFsdW0ucnBpLmVkdT4KICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTM2MDAsMTMgKzM2MDAsMTMgQEAKIAogLlNIIElYLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotTWF5IDYsIDIwMDEKK01heSA3LCAyMDAxCiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjIuMGJldGExIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4yLjBiZXRhMiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciB0aGF0CkBAIC0zNzc3LDcgKzM3NzcsNyBAQAogCiBUaGFua3MgdG8gRnJhbmsgSi4gVC4gV29qY2lrIGZvciBoZWxwaW5nIHdpdGggdGhlIGRvY3VtZW50YXRpb24uCiAKLUxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMToKK0xpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMToKIEluaXRpYWxseSBjcmVhdGVkIGluIDE5OTUgYnkgR3V5IEVyaWMgU2NoYWxuYXQsIHRoZW4gb2YgR3JvdXAgNDIsIEluYy4KIEN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEdsZW5uIFJhbmRlcnMtUGVocnNvbiAocmFuZGVnQGFsdW0ucnBpLmVkdSkuCiAKQEAgLTM3OTQsNyArMzc5NCw3IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAgMS4yLjBiZXRhMSwgTWF5IDYsIDIwMDEsIGFyZQorbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMi4wYmV0YTIsIE1heSA3LCAyMDAxLCBhcmUKIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQogZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42CiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTM4ODYsNyArMzg4Niw3IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogcmFuZGVnQGFsdW0ucnBpLmVkdQotTWF5IDYsIDIwMDEKK01heSA3LCAyMDAxCiAKIC5cIiBlbmQgb2YgbWFuIHBhZ2UKIApkaWZmIC0tZ2l0IGEvbGlicG5nLnR4dCBiL2xpYnBuZy50eHQKaW5kZXggNzcxOWEyNi4uZjQwODAxZSAxMDA2NDQKLS0tIGEvbGlicG5nLnR4dAorKysgYi9saWJwbmcudHh0CkBAIC0xLDYgKzEsNiBAQAogbGlicG5nLnR4dCAtIEEgZGVzY3JpcHRpb24gb24gaG93IHRvIHVzZSBhbmQgbW9kaWZ5IGxpYnBuZwogCi0gbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgVXBkYXRlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgPHJhbmRlZ0BhbHVtLnJwaS5lZHU+CiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCkBAIC0yODE5LDEzICsyODE5LDEzIEBACiAKIElYLiBZMksgQ29tcGxpYW5jZSBpbiBsaWJwbmcKIAotTWF5IDYsIDIwMDEKK01heSA3LCAyMDAxCiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjIuMGJldGExIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgordXB3YXJkIHRocm91Z2ggMS4yLjBiZXRhMiBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKIHZlcnNpb25zIHdlcmUgYWxzbyBZMksgY29tcGxpYW50LgogCiBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciB0aGF0CmRpZmYgLS1naXQgYS9saWJwbmdwZi4zIGIvbGlicG5ncGYuMwppbmRleCA2N2JlYjI2Li5mMzY1ZmJkIDEwMDY0NAotLS0gYS9saWJwbmdwZi4zCisrKyBiL2xpYnBuZ3BmLjMKQEAgLTEsNiArMSw2IEBACi0uVEggTElCUE5HUEYgMyAiTWF5IDYsIDIwMDEiCisuVEggTElCUE5HUEYgMyAiTWF5IDcsIDIwMDEiCiAuU0ggTkFNRQotbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjBiZXRhMQorbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjBiZXRhMgogKHByaXZhdGUgZnVuY3Rpb25zKQogLlNIIFNZTk9QU0lTCiBcZkIjaW5jbHVkZSA8cG5nLmg+XGZQCmRpZmYgLS1naXQgYS9wbmcuNSBiL3BuZy41CmluZGV4IGExZmRhNjUuLjVjODkxMmEgMTAwNjQ0Ci0tLSBhL3BuZy41CisrKyBiL3BuZy41CkBAIC0xLDQgKzEsNCBAQAotLlRIIFBORyA1ICJNYXkgNiwgMjAwMSIKKy5USCBQTkcgNSAiTWF5IDcsIDIwMDEiCiAuU0ggTkFNRQogcG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgZm9ybWF0CiAuU0ggREVTQ1JJUFRJT04KZGlmZiAtLWdpdCBhL3BuZy5jIGIvcG5nLmMKaW5kZXggMzAxMGYyNC4uZGU0NGE1NSAxMDA2NDQKLS0tIGEvcG5nLmMKKysrIGIvcG5nLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZy5jIC0gbG9jYXRpb24gZm9yIGdlbmVyYWwgcHVycG9zZSBsaWJwbmcgZnVuY3Rpb25zCiAgKgotICogbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCiAgKiAoVmVyc2lvbiAwLjg4IENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4pCkBAIC0xMywxNCArMTMsMTQgQEAKICNpbmNsdWRlICJwbmcuaCIKIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMl8wYmV0YTEgWW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzJfMGJldGExOwordHlwZWRlZiB2ZXJzaW9uXzFfMl8wYmV0YTIgWW91cl9wbmdfaF9pc19ub3RfdmVyc2lvbl8xXzJfMGJldGEyOwogCiAvKiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBDIGZpbGVzLiAgVGhpcyBoYWQgYmV0dGVyIG1hdGNoIHRoZSB2ZXJzaW9uCiAgKiBzdHJpbmcgZGVmaW5lZCBpbiBwbmcuaC4gICovCiAKICNpZmRlZiBQTkdfVVNFX0dMT0JBTF9BUlJBWVMKIC8qIHBuZ19saWJwbmdfdmVyIHdhcyBjaGFuZ2VkIHRvIGEgZnVuY3Rpb24gaW4gdmVyc2lvbiAxLjAuNWMgKi8KLWNvbnN0IGNoYXIgcG5nX2xpYnBuZ192ZXJbMThdID0gIjEuMi4wYmV0YTEiOworY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4yLjBiZXRhMiI7CiAKIC8qIHBuZ19zaWcgd2FzIGNoYW5nZWQgdG8gYSBmdW5jdGlvbiBpbiB2ZXJzaW9uIDEuMC41YyAqLwogLyogUGxhY2UgdG8gaG9sZCB0aGUgc2lnbmF0dXJlIHN0cmluZyBmb3IgYSBQTkcgZmlsZS4gKi8KQEAgLTYyNyw3ICs2MjcsNyBAQAogcG5nX2dldF9jb3B5cmlnaHQocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKICAgIGlmIChwbmdfcHRyICE9IE5VTEwgfHwgcG5nX3B0ciA9PSBOVUxMKSAgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICovCi0gICByZXR1cm4gKChwbmdfY2hhcnApICJcbiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDFcblwKKyAgIHJldHVybiAoKHBuZ19jaGFycCkgIlxuIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMVxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uXG5cCiAgICBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXJcblwKICAgIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy5cbiIpOwpAQCAtNjQ1LDggKzY0NSw4IEBACiB7CiAgICAvKiBWZXJzaW9uIG9mICouYyBmaWxlcyB1c2VkIHdoZW4gYnVpbGRpbmcgbGlicG5nICovCiAgICBpZihwbmdfcHRyICE9IE5VTEwpIC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgcG5nX3B0ciAqLwotICAgICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjIuMGJldGExIik7Ci0gICByZXR1cm4oKHBuZ19jaGFycCkgIjEuMi4wYmV0YTEiKTsKKyAgICAgIHJldHVybigocG5nX2NoYXJwKSAiMS4yLjBiZXRhMiIpOworICAgcmV0dXJuKChwbmdfY2hhcnApICIxLjIuMGJldGEyIik7CiB9CiAKIHBuZ19jaGFycCBQTkdBUEkKZGlmZiAtLWdpdCBhL3BuZy5oIGIvcG5nLmgKaW5kZXggOTkzZWMyMC4uYTQwY2NmYyAxMDA2NDQKLS0tIGEvcG5nLmgKKysrIGIvcG5nLmgKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZy5oIC0gaGVhZGVyIGZpbGUgZm9yIFBORyByZWZlcmVuY2UgbGlicmFyeQogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQogICogKFZlcnNpb24gMC44OCBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYgR3V5IEVyaWMgU2NoYWxuYXQsIEdyb3VwIDQyLCBJbmMuKQpAQCAtOSw3ICs5LDcgQEAKICAqIEF1dGhvcnMgYW5kIG1haW50YWluZXJzOgogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjcxLCBNYXkgMTk5NSwgdGhyb3VnaCAwLjg4LCBKYW51YXJ5IDE5OTY6IEd1eSBTY2hhbG5hdAogICogIGxpYnBuZyB2ZXJzaW9ucyAwLjg5YywgSnVuZSAxOTk2LCB0aHJvdWdoIDAuOTYsIE1heSAxOTk3OiBBbmRyZWFzIERpbGdlcgotICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxOiBHbGVubgorICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxOiBHbGVubgogICogIFNlZSBhbHNvICJDb250cmlidXRpbmcgQXV0aG9ycyIsIGJlbG93LgogICoKICAqIE5vdGUgYWJvdXQgbGlicG5nIHZlcnNpb24gbnVtYmVyczoKQEAgLTEwMSw3ICsxMDEsNyBAQAogICogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogICogdGhpcyBzZW50ZW5jZS4KICAqCi0gKiBsaWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAgMS4yLjBiZXRhMSwgTWF5IDYsIDIwMDEsIGFyZQorICogbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMi4wYmV0YTIsIE1heSA3LCAyMDAxLCBhcmUKICAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKICAqIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgogICogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC0yMDYsMTMgKzIwNiwxMyBAQAogICogWTJLIGNvbXBsaWFuY2UgaW4gbGlicG5nOgogICogPT09PT09PT09PT09PT09PT09PT09PT09PQogICoKLSAqICAgIE1heSA2LCAyMDAxCisgKiAgICBNYXkgNywgMjAwMQogICoKICAqICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAqICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogICoKICAqICAgIFRoaXMgaXMgeW91ciB1bm9mZmljaWFsIGFzc3VyYW5jZSB0aGF0IGxpYnBuZyBmcm9tIHZlcnNpb24gMC43MSBhbmQKLSAqICAgIHVwd2FyZCB0aHJvdWdoIDEuMi4wYmV0YTEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCisgKiAgICB1cHdhcmQgdGhyb3VnaCAxLjIuMGJldGEyIGFyZSBZMksgY29tcGxpYW50LiAgSXQgaXMgbXkgYmVsaWVmIHRoYXQgZWFybGllcgogICogICAgdmVyc2lvbnMgd2VyZSBhbHNvIFkySyBjb21wbGlhbnQuCiAgKgogICogICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKQEAgLTI2OCw3ICsyNjgsNyBAQAogICovCiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHBuZy5oIC0gdGhpcyBzaG91bGQgbWF0Y2ggdGhlIHZlcnNpb24gaW4gcG5nLmMgKi8KLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU1RSSU5HICIxLjIuMGJldGExIgorI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9TVFJJTkcgIjEuMi4wYmV0YTIiCiAKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfU09OVU0gICAyCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX0RMTE5VTSAgJURMTE5VTSUKQEAgLTI4MCw3ICsyODAsNyBAQAogLyogVGhpcyBzaG91bGQgbWF0Y2ggdGhlIG51bWVyaWMgcGFydCBvZiB0aGUgZmluYWwgY29tcG9uZW50IG9mCiAgKiBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIG9taXR0aW5nIGFueSBsZWFkaW5nIHplcm86ICovCiAKLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDEKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfQlVJTEQgIDIKIAogI2RlZmluZSBQTkdfTElCUE5HX0JVSUxEX0FMUEhBICAgIDEKICNkZWZpbmUgUE5HX0xJQlBOR19CVUlMRF9CRVRBICAgICAyCkBAIC0xMTk1LDkgKzExOTUsOSBAQAogCiAKIC8qIFRoaXMgcHJldmVudHMgYSBjb21waWxlciBlcnJvciBpbiBwbmdfZ2V0X2NvcHlyaWdodCgpIGluIHBuZy5jIGlmIHBuZy5jCi1hbmQgcG5nLmggYXJlIGJvdGggYXQgKiB2ZXJzaW9uIDEuMi4wYmV0YTEKK2FuZCBwbmcuaCBhcmUgYm90aCBhdCAqIHZlcnNpb24gMS4yLjBiZXRhMgogICovCi10eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8yXzBiZXRhMTsKK3R5cGVkZWYgcG5nX3N0cnVjdHAgdmVyc2lvbl8xXzJfMGJldGEyOwogCiB0eXBlZGVmIHBuZ19zdHJ1Y3QgRkFSICogRkFSICogcG5nX3N0cnVjdHBwOwogCkBAIC0yMzEwLDcgKzIzMTAsNyBAQAogLyogTWFpbnRhaW5lcjogUHV0IG5ldyBwdWJsaWMgcHJvdG90eXBlcyBoZXJlIF4sIGluIGxpYnBuZy4zLCBhbmQgcHJvamVjdCBkZWZzICovCiAKICNkZWZpbmUgUE5HX0hFQURFUl9WRVJTSU9OX1NUUklORyBcCi0gICAiIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMSAoaGVhZGVyKVxuIgorICAgIiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEgKGhlYWRlcilcbiIKIAogI2lmZGVmIFBOR19SRUFEX0NPTVBPU0lURV9OT0RJVl9TVVBQT1JURUQKIC8qIFdpdGggdGhlc2Ugcm91dGluZXMgd2UgYXZvaWQgYW4gaW50ZWdlciBkaXZpZGUsIHdoaWNoIHdpbGwgYmUgc2xvd2VyIG9uCmRpZmYgLS1naXQgYS9wbmdhc21yZC5oIGIvcG5nYXNtcmQuaAppbmRleCBkYjI1NTI0Li5kZjg4NGRjIDEwMDY0NAotLS0gYS9wbmdhc21yZC5oCisrKyBiL3BuZ2FzbXJkLmgKQEAgLTEsNiArMSw2IEBACiAvKiBwbmdhc21yZC5oIC0gYXNzZW1ibGVyIHZlcnNpb24gb2YgdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAyMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICoKZGlmZiAtLWdpdCBhL3BuZ2NvbmYuaCBiL3BuZ2NvbmYuaAppbmRleCA4YzMxMTU4Li5iY2FjODc3IDEwMDY0NAotLS0gYS9wbmdjb25mLmgKKysrIGIvcG5nY29uZi5oCkBAIC0xLDYgKzEsNiBAQAogLyogcG5nY29uZi5oIC0gbWFjaGluZSBjb25maWd1cmFibGUgZmlsZSBmb3IgbGlicG5nCiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5nZXJyb3IuYyBiL3BuZ2Vycm9yLmMKaW5kZXggOThmOGM3Yi4uZWEyYzNhNyAxMDA2NDQKLS0tIGEvcG5nZXJyb3IuYworKysgYi9wbmdlcnJvci5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdlcnJvci5jIC0gc3R1YiBmdW5jdGlvbnMgZm9yIGkvbyBhbmQgbWVtb3J5IGFsbG9jYXRpb24KICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xNTIsNyArMTUyLDcgQEAKIHZvaWQgUE5HQVBJCiBwbmdfY2h1bmtfd2FybmluZyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfY29uc3RfY2hhcnAgbWVzc2FnZSkKIHsKLSAgIGNoYXIgbXNnWzE2KzY0XTsKKyAgIGNoYXIgbXNnWzE4KzY0XTsKICAgIHBuZ19mb3JtYXRfYnVmZmVyKHBuZ19wdHIsIG1zZywgbWVzc2FnZSk7CiAgICBwbmdfd2FybmluZyhwbmdfcHRyLCBtc2cpOwogfQpkaWZmIC0tZ2l0IGEvcG5nZ2NjcmQuYyBiL3BuZ2djY3JkLmMKaW5kZXggZTBjYTIwMy4uMjQyZTY5ZiAxMDA2NDQKLS0tIGEvcG5nZ2NjcmQuYworKysgYi9wbmdnY2NyZC5jCkBAIC02LDcgKzYsNyBAQAogICogICAgIGFuZCBodHRwOi8vd3d3LmludGVsLmNvbS9kcmcvcGVudGl1bUlJL2FwcG5vdGVzLzkyMy85MjMuaHRtCiAgKiAgICAgZm9yIEludGVsJ3MgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgdGhlIE1NWCB2cy4gbm9uLU1NWCBjb2RlLgogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgpkaWZmIC0tZ2l0IGEvcG5nZ2V0LmMgYi9wbmdnZXQuYwppbmRleCBkZjBkNjM2Li5iN2MzYzI0IDEwMDY0NAotLS0gYS9wbmdnZXQuYworKysgYi9wbmdnZXQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nZ2V0LmMgLSByZXRyaWV2YWwgb2YgdmFsdWVzIGZyb20gaW5mbyBzdHJ1Y3QKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMzcsNyArMTM3LDcgQEAKICNpZiBkZWZpbmVkKFBOR19wSFlzX1NVUFBPUlRFRCkKICAgIGlmIChpbmZvX3B0ci0+dmFsaWQgJiBQTkdfSU5GT19wSFlzKQogICAgewotICAgICAgIHBuZ19kZWJ1ZzEoMSwgImluICVzIHJldHJpZXZhbCBmdW5jdGlvblxuIiwgInBuZ19nZXRfeV9waXhlbHNfcGVyX21ldGVyIik7CisgICAgICBwbmdfZGVidWcxKDEsICJpbiAlcyByZXRyaWV2YWwgZnVuY3Rpb25cbiIsICJwbmdfZ2V0X3lfcGl4ZWxzX3Blcl9tZXRlciIpOwogICAgICAgaWYoaW5mb19wdHItPnBoeXNfdW5pdF90eXBlICE9IFBOR19SRVNPTFVUSU9OX01FVEVSKQogICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICBlbHNlIHJldHVybiAoaW5mb19wdHItPnlfcGl4ZWxzX3Blcl91bml0KTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAqLjAwMDAzOTM3KTsKIH0KIAotI2lmIGRlZmluZWQoUE5HX1JFQURfcEhZc19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfcEhZc19TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfcEhZc19kcGkocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLAogICAgcG5nX3VpbnRfMzIgKnJlc194LCBwbmdfdWludF8zMiAqcmVzX3ksIGludCAqdW5pdF90eXBlKQpAQCAtMzMwLDcgKzMzMCw3IEBACiAgICB9CiAgICByZXR1cm4gKHJldHZhbCk7CiB9Ci0jZW5kaWYgLyogUE5HX1JFQURfcEhZc19TVVBQT1JURUQgKi8KKyNlbmRpZiAvKiBQTkdfcEhZc19TVVBQT1JURUQgKi8KICNlbmRpZiAgLyogUE5HX0lOQ0hfQ09OVkVSU0lPTlMgJiYgUE5HX0ZMT0FUSU5HX1BPSU5UX1NVUFBPUlRFRCAqLwogCiAvKiBwbmdfZ2V0X2NoYW5uZWxzIHJlYWxseSBiZWxvbmdzIGluIGhlcmUsIHRvbywgYnV0IGl0J3MgYmVlbiBhcm91bmQgbG9uZ2VyICovCkBAIC0zNTUsNyArMzU1LDcgQEAKICAgICAgIHJldHVybiAoTlVMTCk7CiB9CiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX2JLR0RfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX2JLR0RfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X2JLR0QocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLAogICAgcG5nX2NvbG9yXzE2cCAqYmFja2dyb3VuZCkKQEAgLTM3MSw3ICszNzEsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX2NIUk1fU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX2NIUk1fU1VQUE9SVEVEKQogI2lmZGVmIFBOR19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9jSFJNKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKQEAgLTQzNSw3ICs0MzUsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX1JFQURfZ0FNQV9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfZ0FNQV9TVVBQT1JURUQpCiAjaWZkZWYgUE5HX0ZMT0FUSU5HX1BPSU5UX1NVUFBPUlRFRAogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X2dBTUEocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBkb3VibGUgKmZpbGVfZ2FtbWEpCkBAIC00NjcsNyArNDY3LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX3NSR0JfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX3NSR0JfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3NSR0IocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBpbnQgKmZpbGVfc3JnYl9pbnRlbnQpCiB7CkBAIC00ODIsNyArNDgyLDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9pQ0NQX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19pQ0NQX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9pQ0NQKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgICAgICAgICAgICBwbmdfY2hhcnBwIG5hbWUsIGludCAqY29tcHJlc3Npb25fdHlwZSwKQEAgLTUwNCw3ICs1MDQsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX3NQTFRfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX3NQTFRfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3NQTFQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLAogICAgICAgICAgICAgIHBuZ19zUExUX3RwcCBzcGFsZXR0ZXMpCkBAIC01MTUsNyArNTE1LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9oSVNUX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19oSVNUX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9oSVNUKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMTZwICpoaXN0KQogewpAQCAtNTc2LDcgKzU3Niw3IEBACiAgICByZXR1cm4gKDApOwogfQogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9vRkZzX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19vRkZzX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9vRkZzKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ19pbnRfMzIgKm9mZnNldF94LCBwbmdfaW50XzMyICpvZmZzZXRfeSwgaW50ICp1bml0X3R5cGUpCkBAIC01OTQsNyArNTk0LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9wQ0FMX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19wQ0FMX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9wQ0FMKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ19jaGFycCAqcHVycG9zZSwgcG5nX2ludF8zMiAqWDAsIHBuZ19pbnRfMzIgKlgxLCBpbnQgKnR5cGUsIGludCAqbnBhcmFtcywKQEAgLTYxOCw3ICs2MTgsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX3NDQUxfU1VQUE9SVEVEKSB8fCBkZWZpbmVkKFBOR19XUklURV9zQ0FMX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19zQ0FMX1NVUFBPUlRFRCkKICNpZmRlZiBQTkdfRkxPQVRJTkdfUE9JTlRfU1VQUE9SVEVECiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfc0NBTChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCkBAIC02NTQsNyArNjU0LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19SRUFEX3BIWXNfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX3BIWXNfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3BIWXMocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLAogICAgcG5nX3VpbnRfMzIgKnJlc194LCBwbmdfdWludF8zMiAqcmVzX3ksIGludCAqdW5pdF90eXBlKQpAQCAtNzAxLDcgKzcwMSw3IEBACiAgICByZXR1cm4gKDApOwogfQogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9zQklUX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19zQklUX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9zQklUKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX2NvbG9yXzhwICpzaWdfYml0KQogewpAQCAtNzE2LDcgKzcxNiw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX1JFQURfVEVYVF9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfVEVYVF9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfdGV4dChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ190ZXh0cCAqdGV4dF9wdHIsCiAgICBpbnQgKm51bV90ZXh0KQpAQCAtNzM4LDcgKzczOCw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX1JFQURfdElNRV9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfdElNRV9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfdElNRShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ190aW1lcCAqbW9kX3RpbWUpCiB7CkBAIC03NTMsNyArNzUzLDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF90Uk5TX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR190Uk5TX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF90Uk5TKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ19ieXRlcCAqdHJhbnMsIGludCAqbnVtX3RyYW5zLCBwbmdfY29sb3JfMTZwICp0cmFuc192YWx1ZXMpCkBAIC03OTIsNyArNzkyLDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfUkVBRF9VTktOT1dOX0NIVU5LU19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfVU5LTk9XTl9DSFVOS1NfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3Vua25vd25fY2h1bmtzKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgICAgICAgICAgICBwbmdfdW5rbm93bl9jaHVua3BwIHVua25vd25zKQpAQCAtODExLDcgKzgxMSw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX1JFQURfVVNFUl9DSFVOS1NfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKIHBuZ192b2lkcCBQTkdBUEkKIHBuZ19nZXRfdXNlcl9jaHVua19wdHIocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKZGlmZiAtLWdpdCBhL3BuZ21lbS5jIGIvcG5nbWVtLmMKaW5kZXggMTkzNjRjMy4uYmZmMjNkNyAxMDA2NDQKLS0tIGEvcG5nbWVtLmMKKysrIGIvcG5nbWVtLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ21lbS5jIC0gc3R1YiBmdW5jdGlvbnMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTE5LDcgKzExOSwxMiBAQAogCiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYocG5nX3B0ci0+bWFsbG9jX2ZuICE9IE5VTEwpCi0gICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKKyAgIHsKKyAgICAgICByZXQgPSAoKHBuZ192b2lkcCkoKihwbmdfcHRyLT5tYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKSk7CisgICAgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIG1lbW9yeSEiKTsKKyAgICAgICByZXR1cm4gKHJldCk7CisgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIHBuZ19tYWxsb2NfZGVmYXVsdChwbmdfcHRyLCBzaXplKTsKIH0KQEAgLTM3MywxNSArMzc4LDE4IEBACiBwbmdfdm9pZHAgUE5HQVBJCiBwbmdfbWFsbG9jKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ191aW50XzMyIHNpemUpCiB7Ci0jaWZuZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKICAgIHBuZ192b2lkcCByZXQ7Ci0jZW5kaWYKICAgIGlmIChwbmdfcHRyID09IE5VTEwgfHwgc2l6ZSA9PSAwKQogICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKU5VTEwpOwogCiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYocG5nX3B0ci0+bWFsbG9jX2ZuICE9IE5VTEwpCi0gICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKKyAgIHsKKyAgICAgICByZXQgPSAoKHBuZ192b2lkcCkoKihwbmdfcHRyLT5tYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKSk7CisgICAgICAgaWYgKHJldCA9PSBOVUxMKQorICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIE1lbW9yeSEiKTsKKyAgICAgICByZXR1cm4gKHJldCk7CisgICB9CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIChwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwgc2l6ZSkpOwogfQpAQCAtNDA3LDkgKzQxNSw3IEBACiAjZW5kaWYKIAogICAgaWYgKHJldCA9PSBOVUxMKQotICAgewogICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgTWVtb3J5Iik7Ci0gICB9CiAKICAgIHJldHVybiAocmV0KTsKIH0KZGlmZiAtLWdpdCBhL3BuZ3ByZWFkLmMgYi9wbmdwcmVhZC5jCmluZGV4IDUwYjc0Y2UuLmFhZjZiZDIgMTAwNjQ0Ci0tLSBhL3BuZ3ByZWFkLmMKKysrIGIvcG5ncHJlYWQuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncHJlYWQuYyAtIHJlYWQgYSBwbmcgZmlsZSBpbiBwdXNoIG1vZGUKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC03OTYsNiArNzk2LDE5IEBACiAgICAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisJICAgIGlmIChwbmdfcHRyLT5wYXNzID09IDQgJiYgcG5nX3B0ci0+aGVpZ2h0IDw9IDQpCisJICAgIHsKKwkgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyICYmIHBuZ19wdHItPnBhc3MgPT0gNDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBwbmdfcHVzaF9oYXZlX3JvdyhwbmdfcHRyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBuZ19wdHItPnBhc3MgPT0gNiAmJiBwbmdfcHRyLT5oZWlnaHQgPD0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwbmdfcHVzaF9oYXZlX3JvdyhwbmdfcHRyLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgMToKQEAgLTk4MiwxOSArOTk1LDIwIEBACiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX3RFWHRfU1VQUE9SVEVEKQogdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcHVzaF9oYW5kbGVfdEVYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKK3BuZ19wdXNoX2hhbmRsZV90RVh0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIKKyAgIGxlbmd0aCkKIHsKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewogICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgcGxhY2UgdEVYdCIpOwogICAgICAgICAgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwotICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsKKyAgICAgICAgIGlmKGluZm9fcHRyID09IE5VTEwpIHJldHVybjsKICAgICAgIH0KIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwogICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSAwOyAgLyogVGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSAqLwogCi0gICBpZiAobGVuZ3RoID4gKHBuZ191aW50XzMyKTY1NTM1TCkgLyogQ2FuJ3QgaG9sZCB0aGUgZW50aXJlIHN0cmluZyBpbiBtZW1vcnkgKi8KKyAgIGlmIChsZW5ndGggPiAocG5nX3VpbnRfMzIpNjU1MzVMKSAvKiBDYW4ndCBob2xkIGVudGlyZSBzdHJpbmcgaW4gbWVtb3J5ICovCiAgICB7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAidEVYdCBjaHVuayB0b28gbGFyZ2UgdG8gZml0IGluIG1lbW9yeSIpOwogICAgICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSBsZW5ndGggLSAocG5nX3VpbnRfMzIpNjU1MzVMOwpAQCAtMTA3MywxMyArMTA4NywxNCBAQAogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF96VFh0X1NVUFBPUlRFRCkKIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX3B1c2hfaGFuZGxlX3pUWHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMiBsZW5ndGgpCitwbmdfcHVzaF9oYW5kbGVfelRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyCisgICBsZW5ndGgpCiB7CiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikgfHwgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JRU5EKSkKICAgICAgIHsKICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIHBsYWNlIHpUWHQiKTsKICAgICAgICAgIC8qIHRvIHF1aWV0IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgKi8KLSAgICAgICAgIGluZm9fcHRyID0gaW5mb19wdHI7CisgICAgICAgICBpZihpbmZvX3B0ciA9PSBOVUxMKSByZXR1cm47CiAgICAgICB9CiAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKQEAgLTExODUsOCArMTIwMCw4IEBACiAgICAgICAgICAgICBpZiAodGV4dCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAotICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dCArCi0gICAgICAgICAgICAgICAgICAgICBrZXlfc2l6ZSArIDEpKTsKKyAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikocG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQKKyAgICAgICAgICAgICAgICAgICAgICsga2V5X3NpemUgKyAxKSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBrZXlfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwga2V5LCBrZXlfc2l6ZSk7CkBAIC0xMjU3LDE5ICsxMjcyLDIwIEBACiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX2lUWHRfU1VQUE9SVEVEKQogdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcHVzaF9oYW5kbGVfaVRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKK3BuZ19wdXNoX2hhbmRsZV9pVFh0KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIKKyAgIGxlbmd0aCkKIHsKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewogICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgcGxhY2UgaVRYdCIpOwogICAgICAgICAgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwotICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsKKyAgICAgICAgIGlmKGluZm9fcHRyID09IE5VTEwpIHJldHVybjsKICAgICAgIH0KIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwogICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSAwOyAgLyogVGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSAqLwogCi0gICBpZiAobGVuZ3RoID4gKHBuZ191aW50XzMyKTY1NTM1TCkgLyogQ2FuJ3QgaG9sZCB0aGUgZW50aXJlIHN0cmluZyBpbiBtZW1vcnkgKi8KKyAgIGlmIChsZW5ndGggPiAocG5nX3VpbnRfMzIpNjU1MzVMKSAvKiBDYW4ndCBob2xkIGVudGlyZSBzdHJpbmcgaW4gbWVtb3J5ICovCiAgICB7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiaVRYdCBjaHVuayB0b28gbGFyZ2UgdG8gZml0IGluIG1lbW9yeSIpOwogICAgICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSBsZW5ndGggLSAocG5nX3VpbnRfMzIpNjU1MzVMOwpAQCAtMTM2Nyw3ICsxMzgzLDggQEAKICAqIG5hbWUgb3IgYSBjcml0aWNhbCBjaHVuayksIHRoZSBjaHVuayBpcyAoY3VycmVudGx5KSBzaWxlbnRseSBpZ25vcmVkLgogICovCiB2b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19wdXNoX2hhbmRsZV91bmtub3duKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIgbGVuZ3RoKQorcG5nX3B1c2hfaGFuZGxlX3Vua25vd24ocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMgorICAgbGVuZ3RoKQogewogICAgcG5nX3VpbnRfMzIgc2tpcD0wOwogICAgcG5nX2NoZWNrX2NodW5rX25hbWUocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CkBAIC0xMzc4LDE0ICsxMzk1LDE1IEBACiAgICAgICBpZihwbmdfaGFuZGxlX2FzX3Vua25vd24ocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSkgIT0KICAgICAgICAgICAgSEFORExFX0NIVU5LX0FMV0FZUwogI2lmIGRlZmluZWQoUE5HX1JFQURfVVNFUl9DSFVOS1NfU1VQUE9SVEVEKQotICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMCisgICAgICAgICAgICYmIHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiA9PSBOVUxMCiAjZW5kaWYKICAgICAgICAgICkKICNlbmRpZgogICAgICAgICAgcG5nX2NodW5rX2Vycm9yKHBuZ19wdHIsICJ1bmtub3duIGNyaXRpY2FsIGNodW5rIik7CiAKLSAgICAgICAgIC8qIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBpbmZvX3B0ciAqLwotICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsKKyAgICAgIC8qIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBpbmZvX3B0ciAqLworICAgICAgaWYgKGluZm9fcHRyID09IE5VTEwpCisgICAgICAgICByZXR1cm47CiAgICB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKQEAgLTE0MDIsMTIgKzE0MjAsMTIgQEAKICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgIHN0cmNweSgocG5nX2NoYXJwKWNodW5rLm5hbWUsIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CisgICAgICAgcG5nX3N0cmNweSgocG5nX2NoYXJwKWNodW5rLm5hbWUsIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CiAgICAgICAgY2h1bmsuZGF0YSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwogICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCBjaHVuay5kYXRhLCBsZW5ndGgpOwogICAgICAgIGNodW5rLnNpemUgPSBsZW5ndGg7CiAjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCi0gICAgICAgaWYocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuICE9IChwbmdfdXNlcl9jaHVua19wdHIpTlVMTCkKKyAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgLyogY2FsbGJhY2sgdG8gdXNlciB1bmtub3duIGNodW5rIGhhbmRsZXIgKi8KICAgICAgICAgICBpZiAoKCoocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuKSkgKHBuZ19wdHIsICZjaHVuaykgPD0gMCkKZGlmZiAtLWdpdCBhL3BuZ3JlYWQuYyBiL3BuZ3JlYWQuYwppbmRleCAxNjM0NDk0Li45MDRlNWYwIDEwMDY0NAotLS0gYS9wbmdyZWFkLmMKKysrIGIvcG5ncmVhZC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdyZWFkLmMgLSByZWFkIGEgUE5HIGZpbGUKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC01Myw3ICs1Myw2IEBACiAgICB7CiAgICAgICByZXR1cm4gKHBuZ19zdHJ1Y3RwKU5VTEw7CiAgICB9Ci0KICNpZmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECiAgICBwbmdfaW5pdF9tbXhfZmxhZ3MocG5nX3B0cik7ICAgLyogMS4yLjAgYWRkaXRpb24gKi8KICNlbmRpZgpAQCAtNzIzLDcgKzcyMiw3IEBACiAgKiBub3QgY2FsbGVkIHBuZ19zZXRfaW50ZXJsYWNlX2hhbmRsaW5nKCksIHRoZSBkaXNwbGF5X3JvdyBidWZmZXIgd2lsbAogICogYmUgaWdub3JlZCwgc28gcGFzcyBOVUxMIHRvIGl0LgogICoKLSAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExCisgKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMgogICovCiAKIHZvaWQgUE5HQVBJCkBAIC03NzIsNyArNzcxLDcgQEAKICAqIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UuICBJZiB5b3UgZGVzaXJlIHRvIGhhdmUgYW4gaW1hZ2UgZm9yCiAgKiBlYWNoIHBhc3Mgb2YgYSBpbnRlcmxhY2VkIGltYWdlLCB1c2UgcG5nX3JlYWRfcm93cygpIGluc3RlYWQuCiAgKgotICogWypdIHBuZ19oYW5kbGVfYWxwaGEoKSBkb2VzIG5vdCBleGlzdCB5ZXQsIGFzIG9mIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEKKyAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGEyCiAgKi8KIHZvaWQgUE5HQVBJCiBwbmdfcmVhZF9pbWFnZShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXBwIGltYWdlKQpAQCAtMTA2MCw3ICsxMDU5LDcgQEAKIH0KIAogLyogZnJlZSBhbGwgbWVtb3J5IHVzZWQgYnkgdGhlIHJlYWQgKG9sZCBtZXRob2QpICovCi12b2lkIFBOR0FQSQordm9pZCAvKiBQUklWQVRFICovCiBwbmdfcmVhZF9kZXN0cm95KHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX2luZm9wIGVuZF9pbmZvX3B0cikKIHsKICNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRApAQCAtMTMxMyw3ICsxMzEyLDcgQEAKIAogICAgLyogT3B0aW9uYWwgY2FsbCB0byBnYW1tYSBjb3JyZWN0IGFuZCBhZGQgdGhlIGJhY2tncm91bmQgdG8gdGhlIHBhbGV0dGUKICAgICAqIGFuZCB1cGRhdGUgaW5mbyBzdHJ1Y3R1cmUuICBSRVFVSVJFRCBpZiB5b3UgYXJlIGV4cGVjdGluZyBsaWJwbmcgdG8KLSAgICAqIHVwZGF0ZSB0aGUgcGFsZXR0ZSBmb3IgeW91IChpZSB5b3Ugc2VsZWN0ZWQgc3VjaCBhIHRyYW5zZm9ybSBhYm92ZSkuCisgICAgKiB1cGRhdGUgdGhlIHBhbGV0dGUgZm9yIHlvdSAoaS5lLiwgeW91IHNlbGVjdGVkIHN1Y2ggYSB0cmFuc2Zvcm0gYWJvdmUpLgogICAgICovCiAgICBwbmdfcmVhZF91cGRhdGVfaW5mbyhwbmdfcHRyLCBpbmZvX3B0cik7CiAKQEAgLTEzMjUsMTMgKzEzMjQsMTUgQEAKICAgIGlmKGluZm9fcHRyLT5yb3dfcG9pbnRlcnMgPT0gTlVMTCkKICAgIHsKICAgICAgIGluZm9fcHRyLT5yb3dfcG9pbnRlcnMgPSAocG5nX2J5dGVwcClwbmdfbWFsbG9jKHBuZ19wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9fcHRyLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7CisgICAgICAgICBpbmZvX3B0ci0+aGVpZ2h0ICogc2l6ZW9mKHBuZ19ieXRlcCkpOwogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRAogICAgICAgaW5mb19wdHItPmZyZWVfbWUgfD0gUE5HX0ZSRUVfUk9XUzsKICNlbmRpZgogICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCAoaW50KWluZm9fcHRyLT5oZWlnaHQ7IHJvdysrKQotICAgICAgICAgaW5mb19wdHItPnJvd19wb2ludGVyc1tyb3ddID0gcG5nX21hbGxvYyhwbmdfcHRyLAorICAgICAgeworICAgICAgICAgaW5mb19wdHItPnJvd19wb2ludGVyc1tyb3ddID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICBwbmdfZ2V0X3Jvd2J5dGVzKHBuZ19wdHIsIGluZm9fcHRyKSk7CisgICAgICB9CiAgICB9CiAKICAgIHBuZ19yZWFkX2ltYWdlKHBuZ19wdHIsIGluZm9fcHRyLT5yb3dfcG9pbnRlcnMpOwpAQCAtMTM0MCw3ICsxMzQxLDcgQEAKICAgIC8qIHJlYWQgcmVzdCBvZiBmaWxlLCBhbmQgZ2V0IGFkZGl0aW9uYWwgY2h1bmtzIGluIGluZm9fcHRyIC0gUkVRVUlSRUQgKi8KICAgIHBuZ19yZWFkX2VuZChwbmdfcHRyLCBpbmZvX3B0cik7CiAKLSAgIGlmKHRyYW5zZm9ybXMgPT0gMCB8fCBwYXJhbXMgPT0gKHZvaWRwKU5VTEwpCisgICBpZih0cmFuc2Zvcm1zID09IDAgfHwgcGFyYW1zID09IE5VTEwpCiAgICAgICAvKiBxdWlldCBjb21waWxlciB3YXJuaW5ncyAqLyByZXR1cm47CiAKIH0KZGlmZiAtLWdpdCBhL3BuZ3Jpby5jIGIvcG5ncmlvLmMKaW5kZXggZGQ2MjU4MC4uZDVlZjM2YSAxMDA2NDQKLS0tIGEvcG5ncmlvLmMKKysrIGIvcG5ncmlvLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3Jpby5jIC0gZnVuY3Rpb25zIGZvciBkYXRhIGlucHV0CiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5ncnRyYW4uYyBiL3BuZ3J0cmFuLmMKaW5kZXggMjc5ZTgxYy4uOTI5YjViYiAxMDA2NDQKLS0tIGEvcG5ncnRyYW4uYworKysgYi9wbmdydHJhbi5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdydHJhbi5jIC0gdHJhbnNmb3JtcyB0aGUgZGF0YSBpbiBhIHJvdyBmb3IgUE5HIHJlYWRlcnMKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCmRpZmYgLS1naXQgYS9wbmdydXRpbC5jIGIvcG5ncnV0aWwuYwppbmRleCBkZDA4ZmY2Li42NDEwYzU0IDEwMDY0NAotLS0gYS9wbmdydXRpbC5jCisrKyBiL3BuZ3J1dGlsLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3J1dGlsLmMgLSB1dGlsaXRpZXMgdG8gcmVhZCBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIG5wdHIsIC0xLCBzdHIsIGxlbik7CiAgICAgICByZXN1bHQgPSB3Y3N0b2Qoc3RyLCAmZW5kKTsKICAgICAgIGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCBlbmQsIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLSAgICAgICplbmRwdHIgPSAoY2hhciAqKW5wdHIgKyAoc3RybGVuKG5wdHIpIC0gbGVuICsgMSk7CisgICAgICAqZW5kcHRyID0gKGNoYXIgKilucHRyICsgKHBuZ19zdHJsZW4obnB0cikgLSBsZW4gKyAxKTsKICAgICAgIGZyZWUoc3RyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dDsKICAgICAgICAgICAgICAgIHRleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgdGV4dF9zaXplICsgMSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9zaXplIC0gcHJlZml4X3NpemUpOworICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpemUgLSBwcmVmaXhfc2l6ZSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOwogICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7CiAgICAgICAgICAgICB9CkBAIC0zMzIsNTkgKzMzMiw2IEBACiAgICBmaWx0ZXJfdHlwZSA9IGJ1ZlsxMV07CiAgICBpbnRlcmxhY2VfdHlwZSA9IGJ1ZlsxMl07CiAKLSAgIC8qIGNoZWNrIGZvciB3aWR0aCBhbmQgaGVpZ2h0IHZhbGlkIHZhbHVlcyAqLwotICAgaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBQTkdfTUFYX1VJTlQgfHwgaGVpZ2h0ID09IDAgfHwKLSAgICAgICAgaGVpZ2h0ID4gUE5HX01BWF9VSU5UKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGltYWdlIHNpemUgaW4gSUhEUiIpOwotCi0gICAvKiBjaGVjayBvdGhlciB2YWx1ZXMgKi8KLSAgIGlmIChiaXRfZGVwdGggIT0gMSAmJiBiaXRfZGVwdGggIT0gMiAmJiBiaXRfZGVwdGggIT0gNCAmJgotICAgICAgYml0X2RlcHRoICE9IDggJiYgYml0X2RlcHRoICE9IDE2KQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGJpdCBkZXB0aCBpbiBJSERSIik7Ci0KLSAgIGlmIChjb2xvcl90eXBlIDwgMCB8fCBjb2xvcl90eXBlID09IDEgfHwKLSAgICAgIGNvbG9yX3R5cGUgPT0gNSB8fCBjb2xvcl90eXBlID4gNikKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBjb2xvciB0eXBlIGluIElIRFIiKTsKLQotICAgaWYgKCgoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKSAmJiBiaXRfZGVwdGggPiA4KSB8fAotICAgICAgICgoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwKLSAgICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSB8fAotICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpICYmIGJpdF9kZXB0aCA8IDgpKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGNvbG9yIHR5cGUvYml0IGRlcHRoIGNvbWJpbmF0aW9uIGluIElIRFIiKTsKLQotICAgaWYgKGludGVybGFjZV90eXBlID49IFBOR19JTlRFUkxBQ0VfTEFTVCkKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBpbnRlcmxhY2UgbWV0aG9kIGluIElIRFIiKTsKLQotICAgaWYgKGNvbXByZXNzaW9uX3R5cGUgIT0gUE5HX0NPTVBSRVNTSU9OX1RZUEVfQkFTRSkKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gSUhEUiIpOwotCi0jaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkKLSAgIC8qIEFjY2VwdCBmaWx0ZXJfbWV0aG9kIDY0IChpbnRyYXBpeGVsIGRpZmZlcmVuY2luZykgb25seSBpZgotICAgICogMS4gTGlicG5nIHdhcyBjb21waWxlZCB3aXRoIFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEIGFuZAotICAgICogMi4gTGlicG5nIGRpZCBub3QgcmVhZCBhIFBORyBzaWduYXR1cmUgKHRoaXMgZmlsdGVyX21ldGhvZCBpcyBvbmx5Ci0gICAgKiAgICB1c2VkIGluIFBORyBkYXRhc3RyZWFtcyB0aGF0IGFyZSBlbWJlZGRlZCBpbiBNTkcgZGF0YXN0cmVhbXMpIGFuZAotICAgICogMy4gVGhlIGFwcGxpY2F0aW9uIGNhbGxlZCBwbmdfcGVybWl0X21uZ19mZWF0dXJlcyB3aXRoIGEgbWFzayB0aGF0Ci0gICAgKiAgICBpbmNsdWRlZCBQTkdfRkxBR19NTkdfRklMVEVSXzY0IGFuZAotICAgICogNC4gVGhlIGZpbHRlcl9tZXRob2QgaXMgNjQgYW5kCi0gICAgKiA1LiBUaGUgY29sb3JfdHlwZSBpcyBSR0Igb3IgUkdCQQotICAgICovCi0gICBpZigocG5nX3B0ci0+bW9kZSZQTkdfSEFWRV9QTkdfU0lHTkFUVVJFKSYmcG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCkKLSAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsIk1ORyBmZWF0dXJlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBQTkcgZGF0YXN0cmVhbVxuIik7Ci0gICBpZihmaWx0ZXJfdHlwZSAhPSBQTkdfRklMVEVSX1RZUEVfQkFTRSkKLSAgIHsKLSAgICAgaWYoISgocG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCAmIFBOR19GTEFHX01OR19GSUxURVJfNjQpICYmCi0gICAgICAgIChmaWx0ZXJfdHlwZSA9PSBQTkdfSU5UUkFQSVhFTF9ESUZGRVJFTkNJTkcpICYmCi0gICAgICAgICgocG5nX3B0ci0+bW9kZSZQTkdfSEFWRV9QTkdfU0lHTkFUVVJFKSA9PSAwKSAmJgotICAgICAgICAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwgCi0gICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkpKQotICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7Ci0gICAgIGlmKHBuZ19wdHItPm1vZGUmUE5HX0hBVkVfUE5HX1NJR05BVFVSRSkKLSAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkludmFsaWQgZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7Ci0gICB9Ci0jZWxzZQotICAgaWYoZmlsdGVyX3R5cGUgIT0gUE5HX0ZJTFRFUl9UWVBFX0JBU0UpCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7Ci0jZW5kaWYKIAogICAgLyogc2V0IGludGVybmFsIHZhcmlhYmxlcyAqLwogICAgcG5nX3B0ci0+d2lkdGggPSB3aWR0aDsKQEAgLTQ0OSw2ICszOTYsMTMgQEAKIAogICAgcG5nX3B0ci0+bW9kZSB8PSBQTkdfSEFWRV9QTFRFOwogCisgICBpZiAoIShwbmdfcHRyLT5jb2xvcl90eXBlJlBOR19DT0xPUl9NQVNLX0NPTE9SKSkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgICJJZ25vcmluZyBQTFRFIGNodW5rIGluIGdyYXlzY2FsZSBQTkciKTsKKyAgICAgIHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIGxlbmd0aCk7CisgICAgICByZXR1cm47CisgICB9CiAjaWYgIWRlZmluZWQoUE5HX1JFQURfT1BUX1BMVEVfU1VQUE9SVEVEKQogICAgaWYgKHBuZ19wdHItPmNvbG9yX3R5cGUgIT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkKICAgIHsKQEAgLTYyNiw3ICs1ODAsMTEgQEAKICAgIGlnYW1tYSA9IChwbmdfZml4ZWRfcG9pbnQpcG5nX2dldF91aW50XzMyKGJ1Zik7CiAgICAvKiBjaGVjayBmb3IgemVybyBnYW1tYSAqLwogICAgaWYgKGlnYW1tYSA9PSAwKQotICAgICAgcmV0dXJuOworICAgICAgeworICAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwKKyAgICAgICAgICAgIklnbm9yaW5nIGdBTUEgY2h1bmsgd2l0aCBnYW1tYT0wIik7CisgICAgICAgICByZXR1cm47CisgICAgICB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX3NSR0JfU1VQUE9SVEVEKQogICAgaWYgKGluZm9fcHRyLT52YWxpZCAmIFBOR19JTkZPX3NSR0IpCkBAIC0xMTI3LDcgKzEwODUsNyBAQAogCiAgICBjaHVua2RhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoICsgMSk7CiAgICBzbGVuZ3RoID0gKHBuZ19zaXplX3QpbGVuZ3RoOwotICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rZGF0YSwgc2xlbmd0aCk7CisgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOwogCiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgc2tpcCkpCiAgICB7CkBAIC0xMTU3LDcgKzExMTUsOCBAQAogICAgaWYgKGRhdGFfbGVuZ3RoICUgZW50cnlfc2l6ZSkKICAgIHsKICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIGNodW5rZGF0YSk7Ci0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgInNQTFQgY2h1bmsgaGFzIGJhZCBsZW5ndGgiKTsKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJzUExUIGNodW5rIGhhcyBiYWQgbGVuZ3RoIik7CisgICAgICByZXR1cm47CiAgICB9CiAKICAgIG5ld19wYWxldHRlLm5lbnRyaWVzID0gZGF0YV9sZW5ndGggLyBlbnRyeV9zaXplOwpAQCAtMTcxNCw4ICsxNjczLDggQEAKICAgIH0KICNlbHNlCiAjaWZkZWYgUE5HX0ZJWEVEX1BPSU5UX1NVUFBPUlRFRAotICAgc3dpZHRoID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHN0cmxlbihlcCkgKyAxKTsKLSAgIHBuZ19tZW1jcHkoc3dpZHRoLCBlcCwgKHBuZ19zaXplX3Qpc3RybGVuKGVwKSk7CisgICBzd2lkdGggPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihlcCkgKyAxKTsKKyAgIHBuZ19tZW1jcHkoc3dpZHRoLCBlcCwgKHBuZ19zaXplX3QpcG5nX3N0cmxlbihlcCkpOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMTczMiw4ICsxNjkxLDggQEAKICAgIH0KICNlbHNlCiAjaWZkZWYgUE5HX0ZJWEVEX1BPSU5UX1NVUFBPUlRFRAotICAgc2hlaWdodCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBzdHJsZW4oZXApICsgMSk7Ci0gICBwbmdfbWVtY3B5KHNoZWlnaHQsIGVwLCAocG5nX3NpemVfdClzdHJsZW4oZXApKTsKKyAgIHNoZWlnaHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihlcCkgKyAxKTsKKyAgIHBuZ19tZW1jcHkoc2hlaWdodCwgZXAsIChwbmdfc2l6ZV90KXBuZ19zdHJsZW4oZXApKTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTE5MDYsNyArMTg2NSw3IEBACiAjZW5kaWYKIAogICAgY2h1bmtkYXRhID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwotICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKKyAgICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7CiAgICBpZiAocG5nX2NyY19maW5pc2gocG5nX3B0ciwgMCkpCiAgICB7CkBAIC0yMDgwLDcgKzIwMzksNyBAQAogICAgICAgaWYocG5nX2hhbmRsZV9hc191bmtub3duKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX25hbWUpICE9CiAgICAgICAgICAgIEhBTkRMRV9DSFVOS19BTFdBWVMKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICAgICAgJiYgcG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuID09IChwbmdfdXNlcl9jaHVua19wdHIpTlVMTAorICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gTlVMTAogI2VuZGlmCiAgICAgICAgICkKICNlbmRpZgpAQCAtMjEwMCwxMiArMjA1OSwxMiBAQAogICAgICAgICAgICBsZW5ndGggPSAocG5nX3VpbnRfMzIpNjU1MzVMOwogICAgICAgIH0KICNlbmRpZgotICAgICAgIHN0cmNweSgocG5nX2NoYXJwKWNodW5rLm5hbWUsIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CisgICAgICAgcG5nX3N0cmNweSgocG5nX2NoYXJwKWNodW5rLm5hbWUsIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CiAgICAgICAgY2h1bmsuZGF0YSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwotICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCBjaHVuay5kYXRhLCBsZW5ndGgpOwotICAgICAgIGNodW5rLnNpemUgPSBsZW5ndGg7CisgICAgICAgY2h1bmsuc2l6ZSA9IChwbmdfc2l6ZV90KWxlbmd0aDsKKyAgICAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVuay5kYXRhLCBsZW5ndGgpOwogI2lmIGRlZmluZWQoUE5HX1JFQURfVVNFUl9DSFVOS1NfU1VQUE9SVEVEKQotICAgICAgIGlmKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiAhPSAocG5nX3VzZXJfY2h1bmtfcHRyKU5VTEwpCisgICAgICAgaWYocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuICE9IE5VTEwpCiAgICAgICAgewogICAgICAgICAgIC8qIGNhbGxiYWNrIHRvIHVzZXIgdW5rbm93biBjaHVuayBoYW5kbGVyICovCiAgICAgICAgICAgaWYgKCgqKHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbikpIChwbmdfcHRyLCAmY2h1bmspIDw9IDApCkBAIC0yMzY4LDYgKzIzMjcsMTAgQEAKIAogI2lmZGVmIFBOR19SRUFEX0lOVEVSTEFDSU5HX1NVUFBPUlRFRAogI2lmbmRlZiBQTkdfSEFWRV9BU1NFTUJMRVJfUkVBRF9JTlRFUkxBQ0UgICAvKiBlbHNlIGluIHBuZ3ZjcmQuYywgcG5nZ2NjcmQuYyAqLworLyogT0xEIHByZS0xLjAuOSBpbnRlcmZhY2U6Cit2b2lkIHBuZ19kb19yZWFkX2ludGVybGFjZShwbmdfcm93X2luZm9wIHJvd19pbmZvLCBwbmdfYnl0ZXAgcm93LCBpbnQgcGFzcywKKyAgIHBuZ191aW50XzMyIHRyYW5zZm9ybWF0aW9ucykKKyAqLwogdm9pZCAvKiBQUklWQVRFICovCiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKQEAgLTMwMDMsNiArMjk2Niw3IEBACiAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlRoaXMgaW1hZ2UgcmVxdWlyZXMgYSByb3cgZ3JlYXRlciB0aGFuIDY0S0IiKTsKICNlbmRpZgogICAgcG5nX3B0ci0+cm93X2J1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCByb3dfYnl0ZXMpOworICAgcG5nX3B0ci0+cm93X2J1Zl9zaXplID0gcm93X2J5dGVzOwogCiAjaWZkZWYgUE5HX01BWF9NQUxMT0NfNjRLCiAgICBpZiAoKHBuZ191aW50XzMyKXBuZ19wdHItPnJvd2J5dGVzICsgMSA+IChwbmdfdWludF8zMik2NTUzNkwpCmRpZmYgLS1naXQgYS9wbmdzZXQuYyBiL3BuZ3NldC5jCmluZGV4IGY4NTFmYWMuLjA5NmQ0NGMgMTAwNjQ0Ci0tLSBhL3BuZ3NldC5jCisrKyBiL3BuZ3NldC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdzZXQuYyAtIHN0b3JhZ2Ugb2YgaW1hZ2UgaW5mb3JtYXRpb24gaW50byBpbmZvIHN0cnVjdAogICoKLSAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTEwOSw5ICsxMDksMTAgQEAKICAgIGluZm9fcHRyLT5pbnRfZ2FtbWEgPSAoaW50KShmaWxlX2dhbW1hKjEwMDAwMC4rLjUpOwogI2VuZGlmCiAgICBpbmZvX3B0ci0+dmFsaWQgfD0gUE5HX0lORk9fZ0FNQTsKKyAgIGlmKGZpbGVfZ2FtbWEgPT0gMC4wKQorICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIlNldHRpbmcgZ2FtbWE9MCIpOwogfQogI2VuZGlmCi0jZW5kaWYKIHZvaWQgUE5HQVBJCiBwbmdfc2V0X2dBTUFfZml4ZWQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfZml4ZWRfcG9pbnQKICAgIGludF9nYW1tYSkKQEAgLTEyNyw3ICsxMjgsMTAgQEAKICAgIGluZm9fcHRyLT5pbnRfZ2FtbWEgPSBpbnRfZ2FtbWE7CiAjZW5kaWYKICAgIGluZm9fcHRyLT52YWxpZCB8PSBQTkdfSU5GT19nQU1BOworICAgaWYoaW50X2dhbW1hID09IDApCisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiU2V0dGluZyBnYW1tYT0wIik7CiB9CisjZW5kaWYKIAogI2lmIGRlZmluZWQoUE5HX2hJU1RfU1VQUE9SVEVEKQogdm9pZCBQTkdBUEkKQEAgLTEzOSw4ICsxNDMsMTEgQEAKICAgIGlmIChwbmdfcHRyID09IE5VTEwgfHwgaW5mb19wdHIgPT0gTlVMTCkKICAgICAgIHJldHVybjsKICAgIGlmIChpbmZvX3B0ci0+bnVtX3BhbGV0dGUgPT0gMCkKKyAgIHsKICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLAotCQkgICAiUGFsZXR0ZSBzaXplIDAsIGhJU1QgYWxsb2NhdGlvbiBza2lwcGVkLiIpOworICAgICAgICAgICJQYWxldHRlIHNpemUgMCwgaElTVCBhbGxvY2F0aW9uIHNraXBwZWQuIik7CisgICAgICAgcmV0dXJuOworICAgfQogCiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICBwbmdfZnJlZV9kYXRhKHBuZ19wdHIsIGluZm9fcHRyLCBQTkdfRlJFRV9ISVNULCAwKTsKQEAgLTE3Miw2ICsxNzksNjEgQEAKICAgIGlmIChwbmdfcHRyID09IE5VTEwgfHwgaW5mb19wdHIgPT0gTlVMTCkKICAgICAgIHJldHVybjsKIAorICAgLyogY2hlY2sgZm9yIHdpZHRoIGFuZCBoZWlnaHQgdmFsaWQgdmFsdWVzICovCisgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW1hZ2Ugd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8gaW4gSUhEUiIpOworICAgaWYgKHdpZHRoID4gUE5HX01BWF9VSU5UIHx8IGhlaWdodCA+IFBOR19NQVhfVUlOVCkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBpbWFnZSBzaXplIGluIElIRFIiKTsKKworICAgLyogY2hlY2sgb3RoZXIgdmFsdWVzICovCisgICBpZiAoYml0X2RlcHRoICE9IDEgJiYgYml0X2RlcHRoICE9IDIgJiYgYml0X2RlcHRoICE9IDQgJiYKKyAgICAgIGJpdF9kZXB0aCAhPSA4ICYmIGJpdF9kZXB0aCAhPSAxNikKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBiaXQgZGVwdGggaW4gSUhEUiIpOworCisgICBpZiAoY29sb3JfdHlwZSA8IDAgfHwgY29sb3JfdHlwZSA9PSAxIHx8CisgICAgICBjb2xvcl90eXBlID09IDUgfHwgY29sb3JfdHlwZSA+IDYpCisgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkludmFsaWQgY29sb3IgdHlwZSBpbiBJSERSIik7CisKKyAgIGlmICgoKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkgJiYgYml0X2RlcHRoID4gOCkgfHwKKyAgICAgICAoKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCIHx8CisgICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX0dSQVlfQUxQSEEgfHwKKyAgICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBKSAmJiBiaXRfZGVwdGggPCA4KSkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBjb2xvciB0eXBlL2JpdCBkZXB0aCBjb21iaW5hdGlvbiBpbiBJSERSIik7CisKKyAgIGlmIChpbnRlcmxhY2VfdHlwZSA+PSBQTkdfSU5URVJMQUNFX0xBU1QpCisgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gaW50ZXJsYWNlIG1ldGhvZCBpbiBJSERSIik7CisKKyAgIGlmIChjb21wcmVzc2lvbl90eXBlICE9IFBOR19DT01QUkVTU0lPTl9UWVBFX0JBU0UpCisgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIElIRFIiKTsKKworI2lmIGRlZmluZWQoUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQpCisgICAvKiBBY2NlcHQgZmlsdGVyX21ldGhvZCA2NCAoaW50cmFwaXhlbCBkaWZmZXJlbmNpbmcpIG9ubHkgaWYKKyAgICAqIDEuIExpYnBuZyB3YXMgY29tcGlsZWQgd2l0aCBQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCBhbmQKKyAgICAqIDIuIExpYnBuZyBkaWQgbm90IHJlYWQgYSBQTkcgc2lnbmF0dXJlICh0aGlzIGZpbHRlcl9tZXRob2QgaXMgb25seQorICAgICogICAgdXNlZCBpbiBQTkcgZGF0YXN0cmVhbXMgdGhhdCBhcmUgZW1iZWRkZWQgaW4gTU5HIGRhdGFzdHJlYW1zKSBhbmQKKyAgICAqIDMuIFRoZSBhcHBsaWNhdGlvbiBjYWxsZWQgcG5nX3Blcm1pdF9tbmdfZmVhdHVyZXMgd2l0aCBhIG1hc2sgdGhhdAorICAgICogICAgaW5jbHVkZWQgUE5HX0ZMQUdfTU5HX0ZJTFRFUl82NCBhbmQKKyAgICAqIDQuIFRoZSBmaWx0ZXJfbWV0aG9kIGlzIDY0IGFuZAorICAgICogNS4gVGhlIGNvbG9yX3R5cGUgaXMgUkdCIG9yIFJHQkEKKyAgICAqLworICAgaWYoKHBuZ19wdHItPm1vZGUmUE5HX0hBVkVfUE5HX1NJR05BVFVSRSkmJnBuZ19wdHItPm1uZ19mZWF0dXJlc19wZXJtaXR0ZWQpCisgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCJNTkcgZmVhdHVyZXMgYXJlIG5vdCBhbGxvd2VkIGluIGEgUE5HIGRhdGFzdHJlYW1cbiIpOworICAgaWYoZmlsdGVyX3R5cGUgIT0gUE5HX0ZJTFRFUl9UWVBFX0JBU0UpCisgICB7CisgICAgIGlmKCEoKHBuZ19wdHItPm1uZ19mZWF0dXJlc19wZXJtaXR0ZWQgJiBQTkdfRkxBR19NTkdfRklMVEVSXzY0KSAmJgorICAgICAgICAoZmlsdGVyX3R5cGUgPT0gUE5HX0lOVFJBUElYRUxfRElGRkVSRU5DSU5HKSAmJgorICAgICAgICAoKHBuZ19wdHItPm1vZGUmUE5HX0hBVkVfUE5HX1NJR05BVFVSRSkgPT0gMCkgJiYKKyAgICAgICAgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCIHx8IAorICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpKSkKKyAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJVbmtub3duIGZpbHRlciBtZXRob2QgaW4gSUhEUiIpOworICAgICBpZihwbmdfcHRyLT5tb2RlJlBOR19IQVZFX1BOR19TSUdOQVRVUkUpCisgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJbnZhbGlkIGZpbHRlciBtZXRob2QgaW4gSUhEUiIpOworICAgfQorI2Vsc2UKKyAgIGlmKGZpbHRlcl90eXBlICE9IFBOR19GSUxURVJfVFlQRV9CQVNFKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJVbmtub3duIGZpbHRlciBtZXRob2QgaW4gSUhEUiIpOworI2VuZGlmCisKICAgIGluZm9fcHRyLT53aWR0aCA9IHdpZHRoOwogICAgaW5mb19wdHItPmhlaWdodCA9IGhlaWdodDsKICAgIGluZm9fcHRyLT5iaXRfZGVwdGggPSAocG5nX2J5dGUpYml0X2RlcHRoOwpAQCAtMjQ4LDYgKzMxMCw3IEBACiAKICAgIGluZm9fcHRyLT5wY2FsX3BhcmFtcyA9IChwbmdfY2hhcnBwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgIChwbmdfdWludF8zMikoKG5wYXJhbXMgKyAxKSAqIHNpemVvZihwbmdfY2hhcnApKSk7CisKICAgIGluZm9fcHRyLT5wY2FsX3BhcmFtc1tucGFyYW1zXSA9IE5VTEw7CiAKICAgIGZvciAoaSA9IDA7IGkgPCBucGFyYW1zOyBpKyspCkBAIC0zMDIsNyArMzY1LDcgQEAKIAogICAgbGVuZ3RoID0gcG5nX3N0cmxlbihzaGVpZ2h0KSArIDE7CiAgICBwbmdfZGVidWcxKDMsICJhbGxvY2F0aW5nIHVuaXQgZm9yIGluZm8gKCVkIGJ5dGVzKVxuIiwgbGVuZ3RoKTsKLSAgIGluZm9fcHRyLT5zY2FsX3Nfd2lkdGggPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKKyAgIGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0ID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCk7CiAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT5zY2FsX3NfaGVpZ2h0LCBzaGVpZ2h0LCAocG5nX3NpemVfdClsZW5ndGgpOwogCiAgICBpbmZvX3B0ci0+dmFsaWQgfD0gUE5HX0lORk9fc0NBTDsKQEAgLTM0OSw3ICs0MTIsNyBAQAogI2VuZGlmCiAgICBwbmdfcHRyLT5wYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX3phbGxvYyhwbmdfcHRyLCAodUludCludW1fcGFsZXR0ZSwKICAgICAgIHNpemVvZiAocG5nX2NvbG9yKSk7Ci0gICBtZW1jcHkocG5nX3B0ci0+cGFsZXR0ZSwgcGFsZXR0ZSwgbnVtX3BhbGV0dGUgKiBzaXplb2YgKHBuZ19jb2xvcikpOworICAgcG5nX21lbWNweShwbmdfcHRyLT5wYWxldHRlLCBwYWxldHRlLCBudW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX2NvbG9yKSk7CiAgICBpbmZvX3B0ci0+cGFsZXR0ZSA9IHBuZ19wdHItPnBhbGV0dGU7CiAgICBpbmZvX3B0ci0+bnVtX3BhbGV0dGUgPSBwbmdfcHRyLT5udW1fcGFsZXR0ZSA9IChwbmdfdWludF8xNiludW1fcGFsZXR0ZTsKIApAQCAtNDcyLDkgKzUzNSw5IEBACiAgICBpZiAocG5nX3B0ciA9PSBOVUxMIHx8IGluZm9fcHRyID09IE5VTEwgfHwgbmFtZSA9PSBOVUxMIHx8IHByb2ZpbGUgPT0gTlVMTCkKICAgICAgIHJldHVybjsKIAotICAgbmV3X2ljY3BfbmFtZSA9IHBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihuYW1lKSsxKTsKLSAgIHN0cmNweShuZXdfaWNjcF9uYW1lLCBuYW1lKTsKLSAgIG5ld19pY2NwX3Byb2ZpbGUgPSBwbmdfbWFsbG9jKHBuZ19wdHIsIHByb2ZsZW4pOworICAgbmV3X2ljY3BfbmFtZSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBwbmdfc3RybGVuKG5hbWUpKzEpOworICAgcG5nX3N0cmNweShuZXdfaWNjcF9uYW1lLCBuYW1lKTsKKyAgIG5ld19pY2NwX3Byb2ZpbGUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcHJvZmxlbik7CiAgICBwbmdfbWVtY3B5KG5ld19pY2NwX3Byb2ZpbGUsIHByb2ZpbGUsIChwbmdfc2l6ZV90KXByb2ZsZW4pOwogCiAgICBwbmdfZnJlZV9kYXRhKHBuZ19wdHIsIGluZm9fcHRyLCBQTkdfRlJFRV9JQ0NQLCAwKTsKQEAgLTU0Myw3ICs2MDYsNyBAQAogICAgICAgcG5nX3NpemVfdCBsYW5nX2xlbixsYW5nX2tleV9sZW47CiAgICAgICBwbmdfdGV4dHAgdGV4dHAgPSAmKGluZm9fcHRyLT50ZXh0W2luZm9fcHRyLT5udW1fdGV4dF0pOwogCi0gICAgICBpZiAodGV4dF9wdHJbaV0ua2V5ID09IChwbmdfY2hhcnApTlVMTCkKKyAgICAgIGlmICh0ZXh0X3B0cltpXS5rZXkgPT0gTlVMTCkKICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAga2V5X2xlbiA9IHBuZ19zdHJsZW4odGV4dF9wdHJbaV0ua2V5KTsKQEAgLTU1NywxMSArNjIwLDExIEBACiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECiAgICAgICB7CiAgICAgICAgIC8qIHNldCBpVFh0IGRhdGEgKi8KLSAgICAgICAgaWYgKHRleHRfcHRyW2ldLmtleSAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICAgIGlmICh0ZXh0X3B0cltpXS5rZXkgIT0gTlVMTCkKICAgICAgICAgICBsYW5nX2xlbiA9IHBuZ19zdHJsZW4odGV4dF9wdHJbaV0ubGFuZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICBsYW5nX2xlbiA9IDA7Ci0gICAgICAgIGlmICh0ZXh0X3B0cltpXS5sYW5nX2tleSAhPSAocG5nX2NoYXJwKU5VTEwpCisgICAgICAgIGlmICh0ZXh0X3B0cltpXS5sYW5nX2tleSAhPSBOVUxMKQogICAgICAgICAgIGxhbmdfa2V5X2xlbiA9IHBuZ19zdHJsZW4odGV4dF9wdHJbaV0ubGFuZ19rZXkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgbGFuZ19rZXlfbGVuID0gMDsKQEAgLTU3Myw3ICs2MzYsNyBAQAogICAgICAgfQogI2VuZGlmCiAKLSAgICAgIGlmICh0ZXh0X3B0cltpXS50ZXh0ID09IChwbmdfY2hhcnApTlVMTCB8fCB0ZXh0X3B0cltpXS50ZXh0WzBdID09ICdcMCcpCisgICAgICBpZiAodGV4dF9wdHJbaV0udGV4dCA9PSBOVUxMIHx8IHRleHRfcHRyW2ldLnRleHRbMF0gPT0gJ1wwJykKICAgICAgIHsKICAgICAgICAgIHRleHRfbGVuZ3RoID0gMDsKICNpZmRlZiBQTkdfaVRYdF9TVVBQT1JURUQKQEAgLTY3Niw4ICs3MzksOSBAQAogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRAogICAgICAgIHBuZ19mcmVlX2RhdGEocG5nX3B0ciwgaW5mb19wdHIsIFBOR19GUkVFX1RSTlMsIDApOwogI2VuZGlmCi0gICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSBwbmdfbWFsbG9jKHBuZ19wdHIsIG51bV90cmFucyk7Ci0gICAgICAgbWVtY3B5KGluZm9fcHRyLT50cmFucywgdHJhbnMsIG51bV90cmFucyk7CisgICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKKyAgICAgICAgICAgbnVtX3RyYW5zKTsKKyAgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT50cmFucywgdHJhbnMsIG51bV90cmFucyk7CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICAgaW5mb19wdHItPmZyZWVfbWUgfD0gUE5HX0ZSRUVfVFJOUzsKICNlbHNlCkBAIC03MTksMTIgKzc4MywxMiBAQAogICAgICAgICBwbmdfc1BMVF90cCBmcm9tID0gZW50cmllcyArIGk7CiAKICAgICAgICAgdG8tPm5hbWUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfc3RybGVuKGZyb20tPm5hbWUpICsgMSk7CisgICAgICAgICAgICBwbmdfc3RybGVuKGZyb20tPm5hbWUpICsgMSk7CiAgICAgICAgIHBuZ19zdHJjcHkodG8tPm5hbWUsIGZyb20tPm5hbWUpOwogICAgICAgICB0by0+ZW50cmllcyA9IChwbmdfc1BMVF9lbnRyeXApcG5nX21hbGxvYyhwbmdfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOworICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwogICAgICAgICBwbmdfbWVtY3B5KHRvLT5lbnRyaWVzLCBmcm9tLT5lbnRyaWVzLAotICAgICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOworICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwogICAgICAgICB0by0+bmVudHJpZXMgPSBmcm9tLT5uZW50cmllczsKICAgICAgICAgdG8tPmRlcHRoID0gZnJvbS0+ZGVwdGg7CiAgICAgfQpAQCAtNzM4LDcgKzgwMiw3IEBACiB9CiAjZW5kaWYgLyogUE5HX3NQTFRfU1VQUE9SVEVEICovCiAKLSNpZiBkZWZpbmVkKFBOR19XUklURV9VTktOT1dOX0NIVU5LU19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfVU5LTk9XTl9DSFVOS1NfU1VQUE9SVEVEKQogdm9pZCBQTkdBUEkKIHBuZ19zZXRfdW5rbm93bl9jaHVua3MocG5nX3N0cnVjdHAgcG5nX3B0ciwKICAgIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3Vua25vd25fY2h1bmtwIHVua25vd25zLCBpbnQgbnVtX3Vua25vd25zKQpAQCAtODQwLDggKzkwNCw4IEBACiAgICAgaWYgKGNodW5rX2xpc3QgPT0gTlVMTCkKICAgICAgIHJldHVybjsKICAgICBvbGRfbnVtX2NodW5rcz1wbmdfcHRyLT5udW1fY2h1bmtfbGlzdDsKLSAgICBuZXdfbGlzdD1wbmdfbWFsbG9jKHBuZ19wdHIsNSoobnVtX2NodW5rcytvbGRfbnVtX2NodW5rcykpOwotICAgIGlmKHBuZ19wdHItPmNodW5rX2xpc3QgIT0gKHBuZ19ieXRlcClOVUxMKQorICAgIG5ld19saXN0PShwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLDUqKG51bV9jaHVua3Mrb2xkX251bV9jaHVua3MpKTsKKyAgICBpZihwbmdfcHRyLT5jaHVua19saXN0ICE9IE5VTEwpCiAgICAgewogICAgICAgIHBuZ19tZW1jcHkobmV3X2xpc3QsIHBuZ19wdHItPmNodW5rX2xpc3QsIDUqb2xkX251bV9jaHVua3MpOwogICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX2xpc3QpOwpAQCAtODgzLDcgKzk0Nyw2IEBACiAgICBpbmZvX3B0ci0+cm93X3BvaW50ZXJzID0gcm93X3BvaW50ZXJzOwogICAgaWYocm93X3BvaW50ZXJzKQogICAgICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX0lEQVQ7Ci0KIH0KICNlbmRpZgogCkBAIC04OTQsOCArOTU3LDYgQEAKICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBwbmdfcHRyLT56YnVmKTsKICAgICBwbmdfcHRyLT56YnVmX3NpemUgPSAocG5nX3NpemVfdClzaXplOwogICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgc2l6ZSk7Ci0gICAgaWYoIXBuZ19wdHItPnpidWYpCi0gICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsIlVuYWJsZSB0byBtYWxsb2MgemJ1ZiIpOwogICAgIHBuZ19wdHItPnpzdHJlYW0ubmV4dF9vdXQgPSBwbmdfcHRyLT56YnVmOwogICAgIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpcG5nX3B0ci0+emJ1Zl9zaXplOwogfQpkaWZmIC0tZ2l0IGEvcG5ndGVzdC5jIGIvcG5ndGVzdC5jCmluZGV4IDA5NTkwZmUuLjBkZGQ1NDQgMTAwNjQ0Ci0tLSBhL3BuZ3Rlc3QuYworKysgYi9wbmd0ZXN0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3Rlc3QuYyAtIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbSB0byB0ZXN0IGxpYnBuZwogICoKLSAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTUxLDE2ICs1MSwyMCBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFBOR19OT19TVERJTykKLSNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCi10eXBlZGVmIEhBTkRMRSAgICAgICAgICAgICAgICBwbmdfRklMRV9wOwotI2Vsc2UKLXR5cGVkZWYgRklMRSAgICAgICAgICAgICAgICAqIHBuZ19GSUxFX3A7Ci0jZW5kaWYKKyMgIGlmIGRlZmluZWQoX1dJTjMyX1dDRSkKKyAgICAgdHlwZWRlZiBIQU5ETEUgICAgICAgICAgICAgICAgcG5nX0ZJTEVfcDsKKyMgIGVsc2UKKyAgICAgdHlwZWRlZiBGSUxFICAgICAgICAgICAgICAgICogcG5nX0ZJTEVfcDsKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTWFrZXMgcG5ndGVzdCB2ZXJib3NlIHNvIHdlIGNhbiBmaW5kIHByb2JsZW1zIChuZWVkcyB0byBiZSBiZWZvcmUgcG5nLmgpICovCiAjaWZuZGVmIFBOR19ERUJVRwotI2RlZmluZSBQTkdfREVCVUcgMAorIyAgZGVmaW5lIFBOR19ERUJVRyAwCisjZW5kaWYKKworI2lmICFQTkdfREVCVUcKKyMgIGRlZmluZSBTSU5HTEVfUk9XQlVGX0FMTE9DCS8qIG1ha2VzIGJ1ZmZlciBvdmVycnVucyBlYXNpZXIgdG8gbmFpbCAqLwogI2VuZGlmCiAKIC8qIFR1cm4gb24gQ1BVIHRpbWluZwpAQCAtMjc5LDcgKzI4Myw3IEBACiAKICAgIGlmIChjaGVjayAhPSBsZW5ndGgpCiAgICB7Ci0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlJlYWQgRXJyb3IiKTsKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiUmVhZCBFcnJvciEiKTsKICAgIH0KIH0KICNlbHNlCkBAIC00ODQsMTQgKzQ4OCwxNSBAQAogICAgLyogVGhpcyBjYWxscyB0aGUgbGlicmFyeSBhbGxvY2F0b3IgdHdpY2UsIG9uY2UgdG8gZ2V0IHRoZSByZXF1ZXN0ZWQKICAgICAgIGJ1ZmZlciBhbmQgb25jZSB0byBnZXQgYSBuZXcgZnJlZSBsaXN0IGVudHJ5LiAqLwogICAgewotICAgICAgbWVtb3J5X2luZm9wIHBpbmZvID0gcG5nX21hbGxvY19kZWZhdWx0KHBuZ19wdHIsIHNpemVvZiAqcGluZm8pOworICAgICAgbWVtb3J5X2luZm9wIHBpbmZvID0gKG1lbW9yeV9pbmZvcClwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwKKyAgICAgICAgIHNpemVvZiAqcGluZm8pOwogICAgICAgcGluZm8tPnNpemUgPSBzaXplOwogICAgICAgY3VycmVudF9hbGxvY2F0aW9uICs9IHNpemU7CiAgICAgICB0b3RhbF9hbGxvY2F0aW9uICs9IHNpemU7CiAgICAgICBudW1fYWxsb2NhdGlvbnMgKys7CiAgICAgICBpZiAoY3VycmVudF9hbGxvY2F0aW9uID4gbWF4aW11bV9hbGxvY2F0aW9uKQogICAgICAgICAgbWF4aW11bV9hbGxvY2F0aW9uID0gY3VycmVudF9hbGxvY2F0aW9uOwotICAgICAgcGluZm8tPnBvaW50ZXIgPSBwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwgc2l6ZSk7CisgICAgICBwaW5mby0+cG9pbnRlciA9IChwbmdfdm9pZHApcG5nX21hbGxvY19kZWZhdWx0KHBuZ19wdHIsIHNpemUpOwogICAgICAgcGluZm8tPm5leHQgPSBwaW5mb3JtYXRpb247CiAgICAgICBwaW5mb3JtYXRpb24gPSBwaW5mbzsKICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgY2FsbGVyIGlzbid0IGFzc3VtaW5nIHplcm9lZCBtZW1vcnkuICovCkBAIC01MzMsNyArNTM4LDcgQEAKICAgICAgICAgICAgICAgIGZwcmludGYoU1RERVJSLCAiRHVwbGljYXRlIGZyZWUgb2YgbWVtb3J5XG4iKTsKICAgICAgICAgICAgIC8qIFdlIG11c3QgZnJlZSB0aGUgbGlzdCBlbGVtZW50IHRvbywgYnV0IGZpcnN0IGtpbGwKICAgICAgICAgICAgICAgIHRoZSBtZW1vcnkgdGhhdCBpcyB0byBiZSBmcmVlZC4gKi8KLSAgICAgICAgICAgIG1lbXNldChwdHIsIDB4NTUsIHBpbmZvLT5zaXplKTsKKyAgICAgICAgICAgIHBuZ19tZW1zZXQocHRyLCAweDU1LCBwaW5mby0+c2l6ZSk7CiAgICAgICAgICAgICBwbmdfZnJlZV9kZWZhdWx0KHBuZ19wdHIsIHBpbmZvKTsKICAgICAgICAgICAgIHBpbmZvPU5VTEw7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU2NCw4ICs1NjksMTcgQEAKIHsKICAgIHN0YXRpYyBwbmdfRklMRV9wIGZwaW47CiAgICBzdGF0aWMgcG5nX0ZJTEVfcCBmcG91dDsgIC8qICJzdGF0aWMiIHByZXZlbnRzIHNldGptcCBjb3JydXB0aW9uICovCi0gICBwbmdfc3RydWN0cCByZWFkX3B0ciwgd3JpdGVfcHRyOwotICAgcG5nX2luZm9wIHJlYWRfaW5mb19wdHIsIHdyaXRlX2luZm9fcHRyLCBlbmRfaW5mb19wdHIsIHdyaXRlX2VuZF9pbmZvX3B0cjsKKyAgIHBuZ19zdHJ1Y3RwIHJlYWRfcHRyOworICAgcG5nX2luZm9wIHJlYWRfaW5mb19wdHIsIGVuZF9pbmZvX3B0cjsKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECisgICBwbmdfc3RydWN0cCB3cml0ZV9wdHI7CisgICBwbmdfaW5mb3Agd3JpdGVfaW5mb19wdHI7CisgICBwbmdfaW5mb3Agd3JpdGVfZW5kX2luZm9fcHRyOworI2Vsc2UKKyAgIHBuZ19zdHJ1Y3RwIHdyaXRlX3B0ciA9IE5VTEw7CisgICBwbmdfaW5mb3Agd3JpdGVfaW5mb19wdHIgPSBOVUxMOworICAgcG5nX2luZm9wIHdyaXRlX2VuZF9pbmZvX3B0ciA9IE5VTEw7CisjZW5kaWYKICAgIHBuZ19ieXRlcCByb3dfYnVmOwogICAgcG5nX3VpbnRfMzIgeTsKICAgIHBuZ191aW50XzMyIHdpZHRoLCBoZWlnaHQ7CkBAIC02MjAsNiArNjM0LDcgQEAKICAgIHBuZ19zZXRfZXJyb3JfZm4ocmVhZF9wdHIsIChwbmdfdm9pZHApaW5uYW1lLCBwbmd0ZXN0X2Vycm9yLAogICAgICAgIHBuZ3Rlc3Rfd2FybmluZyk7CiAjZW5kaWYKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgd3JpdGVfcHRyID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3RfMihQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIChwbmdfdm9pZHApTlVMTCwKICAgICAgIChwbmdfZXJyb3JfcHRyKU5VTEwsIChwbmdfZXJyb3JfcHRyKU5VTEwsIChwbmdfdm9pZHApTlVMTCwKQEAgLTYzMiwxMiArNjQ3LDEzIEBACiAgICBwbmdfc2V0X2Vycm9yX2ZuKHdyaXRlX3B0ciwgKHBuZ192b2lkcClpbm5hbWUsIHBuZ3Rlc3RfZXJyb3IsCiAgICAgICAgcG5ndGVzdF93YXJuaW5nKTsKICNlbmRpZgorI2VuZGlmCiAgICBwbmdfZGVidWcoMCwgIkFsbG9jYXRpbmcgcmVhZF9pbmZvLCB3cml0ZV9pbmZvIGFuZCBlbmRfaW5mbyBzdHJ1Y3R1cmVzXG4iKTsKICAgIHJlYWRfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHJlYWRfcHRyKTsKLSAgIHdyaXRlX2luZm9fcHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdCh3cml0ZV9wdHIpOwogICAgZW5kX2luZm9fcHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChyZWFkX3B0cik7CisjaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAorICAgd3JpdGVfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHdyaXRlX3B0cik7CiAgICB3cml0ZV9lbmRfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHdyaXRlX3B0cik7Ci0jaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogI2VuZGlmCiAKICNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRApAQCAtNjUwLDggKzY2NiwxMCBAQAogICAgewogICAgICAgZnByaW50ZihTVERFUlIsICIlcyAtPiAlczogbGlicG5nIHJlYWQgZXJyb3JcbiIsIGlubmFtZSwgb3V0bmFtZSk7CiAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm9fcHRyLCAmZW5kX2luZm9fcHRyKTsKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICAgICBwbmdfZGVzdHJveV9pbmZvX3N0cnVjdCh3cml0ZV9wdHIsICZ3cml0ZV9lbmRfaW5mb19wdHIpOwogICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvX3B0cik7CisjZW5kaWYKICAgICAgIEZDTE9TRShmcGluKTsKICAgICAgIEZDTE9TRShmcG91dCk7CiAgICAgICByZXR1cm4gKDEpOwpAQCAtNjYwLDYgKzY3OCw3IEBACiAgICBwbmdfbWVtY3B5KHBuZ19qbXBidWYocmVhZF9wdHIpLGptcGJ1ZixzaXplb2Yoam1wX2J1ZikpOwogI2VuZGlmCiAKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICBwbmdfZGVidWcoMCwgIlNldHRpbmcgam1wYnVmIGZvciB3cml0ZSBzdHJ1Y3RcbiIpOwogI2lmZGVmIFVTRV9GQVJfS0VZV09SRAogICAgaWYgKHNldGptcChqbXBidWYpKQpAQCAtNjcwLDcgKzY4OSw5IEBACiAgICAgICBmcHJpbnRmKFNUREVSUiwgIiVzIC0+ICVzOiBsaWJwbmcgd3JpdGUgZXJyb3JcbiIsIGlubmFtZSwgb3V0bmFtZSk7CiAgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm9fcHRyLCAmZW5kX2luZm9fcHRyKTsKICAgICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7CisjaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZ3cml0ZV9wdHIsICZ3cml0ZV9pbmZvX3B0cik7CisjZW5kaWYKICAgICAgIEZDTE9TRShmcGluKTsKICAgICAgIEZDTE9TRShmcG91dCk7CiAgICAgICByZXR1cm4gKDEpOwpAQCAtNjc5LDI4ICs3MDAsMzcgQEAKICAgIHBuZ19tZW1jcHkocG5nX2ptcGJ1Zih3cml0ZV9wdHIpLGptcGJ1ZixzaXplb2Yoam1wX2J1ZikpOwogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAgICBwbmdfZGVidWcoMCwgIkluaXRpYWxpemluZyBpbnB1dCBhbmQgb3V0cHV0IHN0cmVhbXNcbiIpOwogI2lmICFkZWZpbmVkKFBOR19OT19TVERJTykKICAgIHBuZ19pbml0X2lvKHJlYWRfcHRyLCBmcGluKTsKKyMgIGlmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgIHBuZ19pbml0X2lvKHdyaXRlX3B0ciwgZnBvdXQpOworIyAgZW5kaWYKICNlbHNlCiAgICBwbmdfc2V0X3JlYWRfZm4ocmVhZF9wdHIsIChwbmdfdm9pZHApZnBpbiwgcG5ndGVzdF9yZWFkX2RhdGEpOworI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgIHBuZ19zZXRfd3JpdGVfZm4od3JpdGVfcHRyLCAocG5nX3ZvaWRwKWZwb3V0LCAgcG5ndGVzdF93cml0ZV9kYXRhLAogI2lmIGRlZmluZWQoUE5HX1dSSVRFX0ZMVVNIX1NVUFBPUlRFRCkKICAgICAgIHBuZ3Rlc3RfZmx1c2gpOwogI2Vsc2UKKyNlbmRpZgogICAgICAgTlVMTCk7CiAjZW5kaWYKICNlbmRpZgogICAgaWYoc3RhdHVzX2RvdHNfcmVxdWVzdGVkID09IDEpCiAgICB7CisjaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgICAgcG5nX3NldF93cml0ZV9zdGF0dXNfZm4od3JpdGVfcHRyLCB3cml0ZV9yb3dfY2FsbGJhY2spOworI2VuZGlmCiAgICAgICBwbmdfc2V0X3JlYWRfc3RhdHVzX2ZuKHJlYWRfcHRyLCByZWFkX3Jvd19jYWxsYmFjayk7CiAgICB9CiAgICBlbHNlCiAgICB7CisjaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgICAgcG5nX3NldF93cml0ZV9zdGF0dXNfZm4od3JpdGVfcHRyLCBOVUxMKTsKKyNlbmRpZgogICAgICAgcG5nX3NldF9yZWFkX3N0YXR1c19mbihyZWFkX3B0ciwgTlVMTCk7CiAgICB9CiAKQEAgLTk4NCwzMiArMTAxNCwyOSBAQAogICAgfQogI2VuZGlmCiAKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICBwbmdfZGVidWcoMCwgIlxuV3JpdGluZyBpbmZvIHN0cnVjdFxuIik7CiAKIC8qIElmIHdlIHdhbnRlZCwgd2UgY291bGQgd3JpdGUgaW5mbyBpbiB0d28gc3RlcHM6CiAgICBwbmdfd3JpdGVfaW5mb19iZWZvcmVfUExURSh3cml0ZV9wdHIsIHdyaXRlX2luZm9fcHRyKTsKICAqLwogICAgcG5nX3dyaXRlX2luZm8od3JpdGVfcHRyLCB3cml0ZV9pbmZvX3B0cik7CisjZW5kaWYKIAotICAgcG5nX2RlYnVnKDAsICJcbkFsbG9jYXRpbmcgcm93IGJ1ZmZlciBcbiIpOworI2lmZGVmIFNJTkdMRV9ST1dCVUZfQUxMT0MKKyAgIHBuZ19kZWJ1ZygwLCAiXG5BbGxvY2F0aW5nIHJvdyBidWZmZXIuLi4iKTsKICAgIHJvd19idWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocmVhZF9wdHIsCiAgICAgICBwbmdfZ2V0X3Jvd2J5dGVzKHJlYWRfcHRyLCByZWFkX2luZm9fcHRyKSk7Ci0gICBpZiAocm93X2J1ZiA9PSBOVUxMKQotICAgewotICAgICAgZnByaW50ZihTVERFUlIsICJObyBtZW1vcnkgdG8gYWxsb2NhdGUgcm93IGJ1ZmZlclxuIik7Ci0gICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm9fcHRyLCAocG5nX2luZm9wcClOVUxMKTsKLSAgICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7Ci0gICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKLSAgICAgIEZDTE9TRShmcGluKTsKLSAgICAgIEZDTE9TRShmcG91dCk7Ci0gICAgICByZXR1cm4gKDEpOwotICAgfQorICAgcG5nX2RlYnVnMSgwLCAiMHglMDhseFxuXG4iLCAodW5zaWduZWQgbG9uZylyb3dfYnVmKTsKKyNlbmRpZiAvKiBTSU5HTEVfUk9XQlVGX0FMTE9DICovCiAgICBwbmdfZGVidWcoMCwgIldyaXRpbmcgcm93IGRhdGFcbiIpOwogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQpIHx8IFwKICAgZGVmaW5lZChQTkdfV1JJVEVfSU5URVJMQUNJTkdfU1VQUE9SVEVEKQogICAgbnVtX3Bhc3MgPSBwbmdfc2V0X2ludGVybGFjZV9oYW5kbGluZyhyZWFkX3B0cik7CisjICBpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICBwbmdfc2V0X2ludGVybGFjZV9oYW5kbGluZyh3cml0ZV9wdHIpOworIyAgZW5kaWYKICNlbHNlCiAgICBudW1fcGFzcz0xOwogI2VuZGlmCkBAIC0xMDI0LDcgKzEwNTEsMTYgQEAKICAgICAgIHBuZ19kZWJ1ZzEoMCwgIldyaXRpbmcgcm93IGRhdGEgZm9yIHBhc3MgJWRcbiIscGFzcyk7CiAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgICB7CisjaWZuZGVmIFNJTkdMRV9ST1dCVUZfQUxMT0MKKyAgICAgICAgIHBuZ19kZWJ1ZzIoMCwgIlxuQWxsb2NhdGluZyByb3cgYnVmZmVyIChwYXNzICVkLCB5ID0gJWxkKS4uLiIsIHBhc3MseSk7CisgICAgICAgICByb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHJlYWRfcHRyLAorICAgICAgICAgICAgcG5nX2dldF9yb3dieXRlcyhyZWFkX3B0ciwgcmVhZF9pbmZvX3B0cikpOworICAgICAgICAgcG5nX2RlYnVnMigwLCAiMHglMDhseCAoJWxkIGJ5dGVzKVxuIiwgKHVuc2lnbmVkIGxvbmcpcm93X2J1ZiwKKyAgICAgICAgICAgIHBuZ19nZXRfcm93Ynl0ZXMocmVhZF9wdHIsIHJlYWRfaW5mb19wdHIpKTsKKyNlbmRpZiAvKiAhU0lOR0xFX1JPV0JVRl9BTExPQyAqLwogICAgICAgICAgcG5nX3JlYWRfcm93cyhyZWFkX3B0ciwgKHBuZ19ieXRlcHApJnJvd19idWYsIChwbmdfYnl0ZXBwKU5VTEwsIDEpOworCisjaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogI2lmZGVmIFBOR1RFU1RfVElNSU5HCiAgICAgICAgICB0X3N0b3AgPSAoZmxvYXQpY2xvY2soKTsKICAgICAgICAgIHRfZGVjb2RlICs9ICh0X3N0b3AgLSB0X3N0YXJ0KTsKQEAgLTEwMzYsNiArMTA3MiwxMiBAQAogICAgICAgICAgdF9lbmNvZGUgKz0gKHRfc3RvcCAtIHRfc3RhcnQpOwogICAgICAgICAgdF9zdGFydCA9IHRfc3RvcDsKICNlbmRpZgorI2VuZGlmIC8qIFBOR19XUklURV9TVVBQT1JURUQgKi8KKworI2lmbmRlZiBTSU5HTEVfUk9XQlVGX0FMTE9DCisgICAgICAgICBwbmdfZGVidWcyKDAsICJGcmVlaW5nIHJvdyBidWZmZXIgKHBhc3MgJWQsIHkgPSAlbGQpXG5cbiIsIHBhc3MsIHkpOworICAgICAgICAgcG5nX2ZyZWUocmVhZF9wdHIsIHJvd19idWYpOworI2VuZGlmIC8qICFTSU5HTEVfUk9XQlVGX0FMTE9DICovCiAgICAgICB9CiAgICB9CiAKQEAgLTEwOTgsNyArMTE0MCw5IEBACiAgICAgICB9CiAgICB9CiAjZW5kaWYKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICBwbmdfd3JpdGVfZW5kKHdyaXRlX3B0ciwgd3JpdGVfZW5kX2luZm9fcHRyKTsKKyNlbmRpZgogCiAjaWZkZWYgUE5HX0VBU1lfQUNDRVNTX1NVUFBPUlRFRAogICAgaWYodmVyYm9zZSkKQEAgLTExMTIsMTEgKzExNTYsMjAgQEAKICNlbmRpZgogCiAgICBwbmdfZGVidWcoMCwgIkRlc3Ryb3lpbmcgZGF0YSBzdHJ1Y3RzXG4iKTsKKyNpZmRlZiBTSU5HTEVfUk9XQlVGX0FMTE9DCisgICBwbmdfZGVidWcoMSwgImRlc3Ryb3lpbmcgcm93X2J1ZiBmb3IgcmVhZF9wdHJcbiIpOwogICAgcG5nX2ZyZWUocmVhZF9wdHIsIHJvd19idWYpOwogICAgcm93X2J1Zj1OVUxMOworI2VuZGlmIC8qIFNJTkdMRV9ST1dCVUZfQUxMT0MgKi8KKyAgIHBuZ19kZWJ1ZygxLCAiZGVzdHJveWluZyByZWFkX3B0ciwgcmVhZF9pbmZvX3B0ciwgZW5kX2luZm9fcHRyXG4iKTsKICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mb19wdHIsICZlbmRfaW5mb19wdHIpOworI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKKyAgIHBuZ19kZWJ1ZygxLCAiZGVzdHJveWluZyB3cml0ZV9lbmRfaW5mb19wdHJcbiIpOwogICAgcG5nX2Rlc3Ryb3lfaW5mb19zdHJ1Y3Qod3JpdGVfcHRyLCAmd3JpdGVfZW5kX2luZm9fcHRyKTsKKyAgIHBuZ19kZWJ1ZygxLCAiZGVzdHJveWluZyB3cml0ZV9wdHIsIHdyaXRlX2luZm9fcHRyXG4iKTsKICAgIHBuZ19kZXN0cm95X3dyaXRlX3N0cnVjdCgmd3JpdGVfcHRyLCAmd3JpdGVfaW5mb19wdHIpOworI2VuZGlmCisgICBwbmdfZGVidWcoMCwgIkRlc3RydWN0aW9uIGNvbXBsZXRlLlxuIik7CiAKICAgIEZDTE9TRShmcGluKTsKICAgIEZDTE9TRShmcG91dCk7CkBAIC0xNDU4LDQgKzE1MTEsNCBAQAogfQogCiAvKiBHZW5lcmF0ZSBhIGNvbXBpbGVyIGVycm9yIGlmIHRoZXJlIGlzIGFuIG9sZCBwbmcuaCBpbiB0aGUgc2VhcmNoIHBhdGguICovCi10eXBlZGVmIHZlcnNpb25fMV8yXzBiZXRhMSB5b3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8wYmV0YTE7Cit0eXBlZGVmIHZlcnNpb25fMV8yXzBiZXRhMiB5b3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8wYmV0YTI7CmRpZmYgLS1naXQgYS9wbmd0cmFucy5jIGIvcG5ndHJhbnMuYwppbmRleCA1YmM0YWQ1Li4xMmY2ZjIzIDEwMDY0NAotLS0gYS9wbmd0cmFucy5jCisrKyBiL3BuZ3RyYW5zLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3RyYW5zLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93ICh1c2VkIGJ5IGJvdGggcmVhZGVycyBhbmQgd3JpdGVycykKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0zOTIsMTEgKzM5MiwxMiBAQAogICAgICAgICAgICAgICAgc3AgKz0gODsgZHAgKz0gNjsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCByb3dfd2lkdGg7IGkrKykKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qIFRoaXMgY291bGQgYmUgKGFsdGhvdWdoIG1lbWNweSBpcyBwcm9iYWJseSBzbG93ZXIpOgorICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSAoYWx0aG91Z2ggcG5nX21lbWNweSBpcyBwcm9iYWJseSBzbG93ZXIpOgogICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkcCwgc3AsIDYpOwogICAgICAgICAgICAgICAgICAgc3AgKz0gODsKICAgICAgICAgICAgICAgICAgIGRwICs9IDY7CiAgICAgICAgICAgICAgICAgICAqLworCiAgICAgICAgICAgICAgICAgICAqZHArKyA9ICpzcCsrOwogICAgICAgICAgICAgICAgICAgKmRwKysgPSAqc3ArKzsKICAgICAgICAgICAgICAgICAgICpkcCsrID0gKnNwKys7CkBAIC00MTEsMTEgKzQxMiwxMiBAQAogICAgICAgICAgICAgICAgLyogVGhpcyBjb252ZXJ0cyBmcm9tIFhYUlJHR0JCIG9yIEFBUlJHR0JCIHRvIFJSR0dCQiAqLwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd193aWR0aDsgaSsrKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSAoYWx0aG91Z2ggbWVtY3B5IGlzIHByb2JhYmx5IHNsb3dlcik6CisgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNvdWxkIGJlIChhbHRob3VnaCBwbmdfbWVtY3B5IGlzIHByb2JhYmx5IHNsb3dlcik6CiAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCBzcCwgNik7CiAgICAgICAgICAgICAgICAgICBzcCArPSA4OwogICAgICAgICAgICAgICAgICAgZHAgKz0gNjsKICAgICAgICAgICAgICAgICAgICovCisKICAgICAgICAgICAgICAgICAgIHNwKz0yOwogICAgICAgICAgICAgICAgICAgKmRwKysgPSAqc3ArKzsKICAgICAgICAgICAgICAgICAgICpkcCsrID0gKnNwKys7CmRpZmYgLS1naXQgYS9wbmd2Y3JkLmMgYi9wbmd2Y3JkLmMKaW5kZXggMDRjMjAyNS4uZmU5ZmU5ZiAxMDA2NDQKLS0tIGEvcG5ndmNyZC5jCisrKyBiL3BuZ3ZjcmQuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBGb3IgSW50ZWwgeDg2IENQVSBhbmQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIKICAqCi0gKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMiAtIE1heSA3LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgpkaWZmIC0tZ2l0IGEvcG5nd2lvLmMgYi9wbmd3aW8uYwppbmRleCBmZWJmMjE3Li45YWRhOTIwIDEwMDY0NAotLS0gYS9wbmd3aW8uYworKysgYi9wbmd3aW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd2lvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgb3V0cHV0CiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTcsNiArMTcsNyBAQAogCiAjZGVmaW5lIFBOR19JTlRFUk5BTAogI2luY2x1ZGUgInBuZy5oIgorI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKIAogLyogV3JpdGUgdGhlIGRhdGEgdG8gd2hhdGV2ZXIgb3V0cHV0IHlvdSBhcmUgdXNpbmcuICBUaGUgZGVmYXVsdCByb3V0aW5lCiAgICB3cml0ZXMgdG8gYSBmaWxlIHBvaW50ZXIuICBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIHNvbWV0aW1lcyBnZXRzIGNhbGxlZApAQCAtMjI0LDMgKzIyNSw0IEBACiB9CiAjICAgZW5kaWYKICMgICBlbmRpZgorI2VuZGlmIC8qIFBOR19XUklURV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3BuZ3dyaXRlLmMgYi9wbmd3cml0ZS5jCmluZGV4IDYwNjczNjcuLmIxZDZlYzAgMTAwNjQ0Ci0tLSBhL3BuZ3dyaXRlLmMKKysrIGIvcG5nd3JpdGUuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3JpdGUuYyAtIGdlbmVyYWwgcm91dGluZXMgdG8gd3JpdGUgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKZGlmZiAtLWdpdCBhL3BuZ3d0cmFuLmMgYi9wbmd3dHJhbi5jCmluZGV4IDA2NzFlYzUuLjY0ZWM3NjUgMTAwNjQ0Ci0tLSBhL3BuZ3d0cmFuLmMKKysrIGIvcG5nd3RyYW4uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3RyYW4uYyAtIHRyYW5zZm9ybXMgdGhlIGRhdGEgaW4gYSByb3cgZm9yIFBORyB3cml0ZXJzCiAgKgotICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTIgLSBNYXkgNywgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTAsNiArMTAsNyBAQAogCiAjZGVmaW5lIFBOR19JTlRFUk5BTAogI2luY2x1ZGUgInBuZy5oIgorI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKIAogLyogVHJhbnNmb3JtIHRoZSBkYXRhIGFjY29yZGluZyB0byB0aGUgdXNlcidzIHdpc2hlcy4gIFRoZSBvcmRlciBvZgogICogdHJhbnNmb3JtYXRpb25zIGlzIHNpZ25pZmljYW50LgpAQCAtNTU5LDMgKzU2MCw0IEBACiAgICB9CiB9CiAjZW5kaWYgLyogUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQgKi8KKyNlbmRpZiAvKiBQTkdfV1JJVEVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9wbmd3dXRpbC5jIGIvcG5nd3V0aWwuYwppbmRleCA0YmJiN2FkLi5kYTMxMDc5IDEwMDY0NAotLS0gYS9wbmd3dXRpbC5jCisrKyBiL3BuZ3d1dGlsLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3d1dGlsLmMgLSB1dGlsaXRpZXMgdG8gd3JpdGUgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGEyIC0gTWF5IDcsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2RlZmluZSBQTkdfSU5URVJOQUwKICNpbmNsdWRlICJwbmcuaCIKKyNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAKIC8qIFBsYWNlIGEgMzItYml0IG51bWJlciBpbnRvIGEgYnVmZmVyIGluIFBORyBieXRlIG9yZGVyLiAgV2Ugd29yawogICogd2l0aCB1bnNpZ25lZCBudW1iZXJzIGZvciBjb252ZW5pZW5jZSwgYWx0aG91Z2ggb25lIHN1cHBvcnRlZApAQCAtMjM0LDggKzIzNSw4IEBACiAgICAgICAgICAgICAgICBvbGRfcHRyID0gY29tcC0+b3V0cHV0X3B0cjsKICAgICAgICAgICAgICAgIGNvbXAtPm91dHB1dF9wdHIgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKGNvbXAtPm1heF9vdXRwdXRfcHRyICogc2l6ZW9mIChwbmdfY2hhcnBwKSkpOwotICAgICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyLCBvbGRfcHRyLAotICAgICAgICAgICBvbGRfbWF4ICogc2l6ZW9mIChwbmdfY2hhcnApKTsKKyAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0ciwgb2xkX3B0ciwgb2xkX21heAorICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKHBuZ19jaGFycCkpOwogICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3B0cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC0yODQsNyArMjg1LDcgQEAKICAgICAgICAgICAgICAgICAgIGNvbXAtPm91dHB1dF9wdHIgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAocG5nX3VpbnRfMzIpKGNvbXAtPm1heF9vdXRwdXRfcHRyICogc2l6ZW9mIChwbmdfY2hhcnBwKSkpOwogICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyLCBvbGRfcHRyLAotICAgICAgICAgICAgICBvbGRfbWF4ICogc2l6ZW9mIChwbmdfY2hhcnApKTsKKyAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXggKiBzaXplb2YgKHBuZ19jaGFycCkpOwogICAgICAgICAgICAgICAgICAgcG5nX2ZyZWUocG5nX3B0ciwgb2xkX3B0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCkBAIC00MzQsNyArNDM1LDcgQEAKICNpZiBkZWZpbmVkKFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEKQogICAgICAgISgocG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCAmIFBOR19GTEFHX01OR19GSUxURVJfNjQpICYmCiAgICAgICAoKHBuZ19wdHItPm1vZGUmUE5HX0hBVkVfUE5HX1NJR05BVFVSRSkgPT0gMCkgJiYKLSAgICAgIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fCAKKyAgICAgIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fAogICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBKSAmJgogICAgICAgKGZpbHRlcl90eXBlID09IFBOR19JTlRSQVBJWEVMX0RJRkZFUkVOQ0lORykpICYmCiAjZW5kaWYKQEAgLTUzOCwxNiArNTM5LDIzIEBACiAgICAgICAgICEocG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCAmIFBOR19GTEFHX01OR19FTVBUWV9QTFRFKSAmJgogI2VuZGlmCiAgICAgICAgIG51bV9wYWwgPT0gMCkgfHwgbnVtX3BhbCA+IDI1NikKKyAgIHsKKyAgICAgaWYgKHBuZ19wdHItPmNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkKICAgICAgewotICAgICAgIGlmIChwbmdfcHRyLT5jb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpCi0gICAgICAgICB7Ci0gICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBudW1iZXIgb2YgY29sb3JzIGluIHBhbGV0dGUiKTsKLSAgICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJJbnZhbGlkIG51bWJlciBvZiBjb2xvcnMgaW4gcGFsZXR0ZSIpOwotICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICB9CisgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBudW1iZXIgb2YgY29sb3JzIGluIHBhbGV0dGUiKTsKKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKyAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkludmFsaWQgbnVtYmVyIG9mIGNvbG9ycyBpbiBwYWxldHRlIik7CisgICAgICAgIHJldHVybjsKKyAgICAgfQorICAgfQorCisgICBpZiAoIShwbmdfcHRyLT5jb2xvcl90eXBlJlBOR19DT0xPUl9NQVNLX0NPTE9SKSkKKyAgIHsKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCisgICAgICAgICJJZ25vcmluZyByZXF1ZXN0IHRvIHdyaXRlIGEgUExURSBjaHVuayBpbiBncmF5c2NhbGUgUE5HIik7CisgICAgICByZXR1cm47CiAgICB9CiAKICAgIHBuZ19wdHItPm51bV9wYWxldHRlID0gKHBuZ191aW50XzE2KW51bV9wYWw7CkBAIC03MjgsNyArNzM2LDcgQEAKICAgIH0KIAogICAgLyogbWFrZSBzdXJlIHdlIGluY2x1ZGUgdGhlIE5VTEwgYWZ0ZXIgdGhlIG5hbWUgKi8KLSAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKSBwbmdfc1BMVCwKKyAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKXBuZ19zUExULAogICAgICAgICAgIChwbmdfdWludF8zMikobmFtZV9sZW4gKyAyICsgcGFsZXR0ZV9zaXplKSk7CiAgICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKW5ld19uYW1lLCBuYW1lX2xlbiArIDEpOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmc3BhbGV0dGUtPmRlcHRoLCAxKTsKQEAgLTE0ODYsOCArMTQ5NCw4IEBACiAgICBwbmdfZGVidWcxKDMsICJzQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCB0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIChwbmdfYnl0ZXApcG5nX3NDQUwsIChwbmdfdWludF8zMil0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmdW5pdCwgMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKXdidWYsIHN0cmxlbih3YnVmKSsxKTsKLSAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApaGJ1Ziwgc3RybGVuKGhidWYpKTsKKyAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApd2J1ZiwgcG5nX3N0cmxlbih3YnVmKSsxKTsKKyAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApaGJ1ZiwgcG5nX3N0cmxlbihoYnVmKSk7CiAKICAgIHBuZ193cml0ZV9jaHVua19lbmQocG5nX3B0cik7CiB9CkBAIC0xNTA1LDE1ICsxNTEzLDE1IEBACiAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3dyaXRlX3NDQUxfc1xuIik7CiAKLSAgIHN0cmNweSh3YnVmLChjb25zdCBjaGFyICopd2lkdGgpOwotICAgc3RyY3B5KGhidWYsKGNvbnN0IGNoYXIgKiloZWlnaHQpOworICAgcG5nX3N0cmNweSh3YnVmLChjb25zdCBjaGFyICopd2lkdGgpOworICAgcG5nX3N0cmNweShoYnVmLChjb25zdCBjaGFyICopaGVpZ2h0KTsKICAgIHRvdGFsX2xlbiA9IDEgKyBwbmdfc3RybGVuKHdidWYpKzEgKyBwbmdfc3RybGVuKGhidWYpOwogCiAgICBwbmdfZGVidWcxKDMsICJzQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCB0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIChwbmdfYnl0ZXApcG5nX3NDQUwsIChwbmdfdWludF8zMil0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmdW5pdCwgMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKXdidWYsIHN0cmxlbih3YnVmKSsxKTsKLSAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApaGJ1Ziwgc3RybGVuKGhidWYpKTsKKyAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApd2J1ZiwgcG5nX3N0cmxlbih3YnVmKSsxKTsKKyAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApaGJ1ZiwgcG5nX3N0cmxlbihoYnVmKSk7CiAKICAgIHBuZ193cml0ZV9jaHVua19lbmQocG5nX3B0cik7CiB9CkBAIC0yNjMxLDMgKzI2MzksNCBAQAogICAgfQogI2VuZGlmCiB9CisjZW5kaWYgLyogUE5HX1dSSVRFX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0IGIvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0CmluZGV4IDlkZjUyM2QuLmM3NDM4NTEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL21zdmMvUkVBRE1FLnR4dAorKysgYi9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQKQEAgLTEsNSArMSw1IEBACiBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwIGZvcgotbGlicG5nIDEuMi4wYmV0YTEgKE1heSA2LCAyMDAxKSBhbmQgemxpYgorbGlicG5nIDEuMi4wYmV0YTIgKE1heSA3LCAyMDAxKSBhbmQgemxpYgogCiBDb3B5cmlnaHQgKEMpIDIwMDAgU2ltb24tUGllcnJlIENhZGlldXgKIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvbXN2Yy9wbmczMm1zLmRlZiBiL3Byb2plY3RzL21zdmMvcG5nMzJtcy5kZWYKaW5kZXggODNlMjIzMS4uMjE4NGQ5YyAxMDA2NDQKLS0tIGEvcHJvamVjdHMvbXN2Yy9wbmczMm1zLmRlZgorKysgYi9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmCkBAIC02LDcgKzYsNyBAQAogREVTQ1JJUFRJT04gIlBORyBpbWFnZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGZvciBXaW5kb3dzIgogCiBFWFBPUlRTCi07VmVyc2lvbiAxLjIuMGJldGExCis7VmVyc2lvbiAxLjIuMGJldGEyCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUUuV0NFIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKaW5kZXggOWQxNTI3My4uZTA0OGI4MCAxMDA2NDQKLS0tIGEvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKKysrIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKQEAgLTgsOSArOCw5IEBACiAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09Ci1UaGlzIGlzIGxpYnBuZyAxLjIuMGJldGExIHBvcnRlZCB0byBXaW5kb3dzQ0UgMi4wIGFuZCAyLjExLgotbGlicG5nIDEuMi4wYmV0YTEgaXMgYSBQTkcgcmVmZXJlbmNlIGxpYnJhcnkuCi1TZWUgUkVBRE1FLCBhIGRvY3VtZW50IG9mIG9yaWdpbmFsIGxpYnBuZyAxLjIuMGJldGExLgorVGhpcyBpcyBsaWJwbmcgMS4yLjBiZXRhMiBwb3J0ZWQgdG8gV2luZG93c0NFIDIuMCBhbmQgMi4xMS4KK2xpYnBuZyAxLjIuMGJldGEyIGlzIGEgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5LgorU2VlIFJFQURNRSwgYSBkb2N1bWVudCBvZiBvcmlnaW5hbCBsaWJwbmcgMS4yLjBiZXRhMi4KIAogemxpYiBmb3IgV2luZG93c0NFCiA9PT09PT09PT09PT09PT09PT0KQEAgLTIzLDcgKzIzLDcgQEAKIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCiAKLVNlZSBSRUFETUUgYW5kIExJQ0VOU0UsIGRvY3VtZW50cyBvZiBvcmlnaW5hbCBsaWJwbmcgMS4yLjBiZXRhMSwgZm9yIGNvbmRpdGlvbnMKK1NlZSBSRUFETUUgYW5kIExJQ0VOU0UsIGRvY3VtZW50cyBvZiBvcmlnaW5hbCBsaWJwbmcgMS4yLjBiZXRhMiwgZm9yIGNvbmRpdGlvbnMKIG9mIHVzZSBhbmQgZGlzdHJpYnV0aW9uLgogCiBGaWxlcwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvd2luY2UvUkVBRE1FSi5XQ0UgYi9wcm9qZWN0cy93aW5jZS9SRUFETUVKLldDRQppbmRleCBiZGE3Y2IxLi5hY2I0ODY4IDEwMDY0NAotLS0gYS9wcm9qZWN0cy93aW5jZS9SRUFETUVKLldDRQorKysgYi9wcm9qZWN0cy93aW5jZS9SRUFETUVKLldDRQpAQCAtMjQsNyArMjQsNyBAQAoggsmCyILBgr2CooKpgsiC6ZTtilGCyYLCgqKCxILggUGN7I7SgUGUepV6jtKBQYK7gsyRvJeYl3CO0ojIik+CzJBslaiBQQogkmORzILJkNOUQ4LwgsaC6YtglrGCzYLIgqKC4ILMgsaCtYLcgreBQgogCi2Cu4LMkbyBQYKxgsyDXIN0g2eDRYNGg0GCzJeYl3CP8IyPgsmCwoKigsSCzYFBjLSUxYLFgqCC6SBsaWJwbmcgMS4yLjBiZXRhMYLJCiuCu4LMkbyBQYKxgsyDXIN0g2eDRYNGg0GCzJeYl3CP8IyPgsmCwoKigsSCzYFBjLSUxYLFgqCC6SBsaWJwbmcgMS4yLjBiZXRhMoLJCiCPgIuSgreC6YLggsyCxoK1gtyCt4FCj9qCtYKtgs2BQZV0ka6CzCBSRUFETUUsTElDRU5TRSCC8IKok8eC3YKtgr6Cs4KigUIKIAogjvuYXpPgl2UKZGlmZiAtLWdpdCBhL3Byb2plY3RzL3dpbmNlL3BuZzMyY2UuZGVmIGIvcHJvamVjdHMvd2luY2UvcG5nMzJjZS5kZWYKaW5kZXggZGRiODcwZi4uYjJhZjEwMyAxMDA2NDQKLS0tIGEvcHJvamVjdHMvd2luY2UvcG5nMzJjZS5kZWYKKysrIGIvcHJvamVjdHMvd2luY2UvcG5nMzJjZS5kZWYKQEAgLTUsNyArNSw3IEBACiBMSUJSQVJZIGxwbmdjZQogCiBFWFBPUlRTCi07VmVyc2lvbiAxLjIuMGJldGExCis7VmVyc2lvbiAxLjIuMGJldGEyCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYWl4IGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKaW5kZXggMzgxNjlkMy4uMzU0YjRmNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5haXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5haXgKQEAgLTE4LDcgKzE4LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMi4wYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTIKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogcHJlZml4PS91c3IvbG9jYWwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcyBiL3NjcmlwdHMvbWFrZWZpbGUuYmVvcwppbmRleCAzY2NkYTczLi5jOGM2OTExIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmJlb3MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCkBAIC0xMyw3ICsxMyw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjIuMGJldGExCitQTkdNSU4gPSAxLjIuMGJldGEyCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIEFMSUdOPQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4gYi9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgppbmRleCBkZTlkMjE4Li4zNDZjMjQ1IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgorKysgYi9zY3JpcHRzL21ha2VmaWxlLmN5Z3dpbgpAQCAtMzksOCArMzksOCBAQAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKICNQTkdETEwgPSAkMiMgbXN2YwotUE5HRExMID0gMiMgY3lnd2luIDEuMi4wYmV0YTEKLVBOR01JTiA9IDEuMi4wYmV0YTEKK1BOR0RMTCA9IDIjIGN5Z3dpbiAxLjIuMGJldGEyCitQTkdNSU4gPSAxLjIuMGJldGEyCiBQTkdNSU5fQkFTRSA9IDEuMi4wCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZGVjIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKaW5kZXggMDAwZDdmNi4uNWE4YjNkNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5kZWMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5kZWMKQEAgLTE3LDcgKzE3LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMi4wYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTIKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogQ0M9Y2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXggYi9zY3JpcHRzL21ha2VmaWxlLmdjbW14CmluZGV4IDRhNWE5ODYuLjI0Y2JiOGIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5nY21teApAQCAtNTEsNyArNTEsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4yLjBiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMgogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjIGIvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYwppbmRleCA3YzY5MzBhLi5kYTBhYjA2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKQEAgLTM0LDcgKzM0LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMi4wYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTIKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4IGIvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CmluZGV4IDY5MmNlMWIuLmVmMGViNGEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuaHB1eAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKQEAgLTE5LDcgKzE5LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMi4wYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTIKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyB3aGVyZSBtYWtlIGluc3RhbGwgcHV0cyBsaWJwbmcuYSBhbmQgcG5nLmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUubGludXggYi9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CmluZGV4IDBlYjY5NDYuLmMyMjY5NmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubGludXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5saW51eApAQCAtMzQsNyArMzQsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4yLjBiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMgogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZCBiL3NjcmlwdHMvbWFrZWZpbGUubmV0YnNkCmluZGV4IDA1NmQ2NjIuLmU2Y2Q2NzMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubmV0YnNkCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUubmV0YnNkCkBAIC0xMSw3ICsxMSw3IEBACiAKIExJQj1wbmcKIFNITElCX01BSk9SPSAyCi1TSExJQl9NSU5PUj0gMS4yLjBiZXRhMQorU0hMSUJfTUlOT1I9IDEuMi4wYmV0YTIKIFNSQ1M9CXBuZ2djY3JkLmMgcG5nLmMgcG5nc2V0LmMgcG5nZ2V0LmMgcG5ncnV0aWwuYyBwbmd0cmFucy5jIHBuZ3d1dGlsLmMgXAogCXBuZ3JlYWQuYyBwbmdyaW8uYyBwbmd3aW8uYyBwbmd3cml0ZS5jIHBuZ3J0cmFuLmMgXAogCXBuZ3d0cmFuLmMgcG5nbWVtLmMgcG5nZXJyb3IuYyBwbmdwcmVhZC5jCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNjbyBiL3NjcmlwdHMvbWFrZWZpbGUuc2NvCmluZGV4IDE1YjRjYTIuLmNhOTYzNTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2NvCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc2NvCkBAIC0yNSw3ICsyNSw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjIuMGJldGExCitQTkdNSU4gPSAxLjIuMGJldGEyCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MgYi9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCmluZGV4IGVmYmZlNjcuLjRhYTdlOTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYwpAQCAtMTksOCArMTksOCBAQAogTERGTEFHUz0tTC4gLUwkKFpMSUJMSUIpIC1scG5nIC1seiAtbG0KIExEU0hBUkVEPWdjYyAtc2hhcmVkCiAKLVZFUj0xLjIuMGJldGExCi1MSUJTPWxpYnBuZy5zby4xLjIuMGJldGExCitWRVI9MS4yLjBiZXRhMgorTElCUz1saWJwbmcuc28uMS4yLjBiZXRhMgogU0hBUkVETElCPWxpYnBuZy5zbwogbGliZGlyPSQocHJlZml4KS9saWIzMgogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLnNnaSBiL3NjcmlwdHMvbWFrZWZpbGUuc2dpCmluZGV4IDljZTY3YzEuLjk0NmI5ZjcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dpCisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuc2dpCkBAIC0yNSw3ICsyNSw3IEBACiBMREZMQUdTPS1MLiAtTCQoWkxJQkxJQikgLWxwbmcgLWx6IC1sbQogTERTSEFSRUQ9Y2MgLXNoYXJlZAogCi1WRVI9MS4yLjBiZXRhMQorVkVSPTEuMi4wYmV0YTIKIFNPTlVNPTIKIFNIQVJFRExJQj1saWJwbmcuc28KIGxpYmRpcj0kKHByZWZpeCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcyBiL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcwppbmRleCAyYWVjOThhLi5mYTAzMDg3IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCkBAIC0zMSw3ICszMSw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjIuMGJldGExCitQTkdNSU4gPSAxLjIuMGJldGEyCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcG5nZGVmLnBhcyBiL3NjcmlwdHMvcG5nZGVmLnBhcwppbmRleCA4OGJlODFiLi4yMmQwYmExIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BuZ2RlZi5wYXMKKysrIGIvc2NyaXB0cy9wbmdkZWYucGFzCkBAIC03LDcgKzcsNyBAQAogaW50ZXJmYWNlCiAKIGNvbnN0Ci0gIFBOR19MSUJQTkdfVkVSX1NUUklORyA9ICcxLjIuMGJldGExJzsKKyAgUE5HX0xJQlBOR19WRVJfU1RSSU5HID0gJzEuMi4wYmV0YTInOwogICBQTkdfTElCUE5HX1ZFUiAgICAgICAgPSAgMTAyMDA7CiAKIHR5cGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcG5nb3MyLmRlZiBiL3NjcmlwdHMvcG5nb3MyLmRlZgppbmRleCA4MzkyNTg4Li5jYThjZTY2IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BuZ29zMi5kZWYKKysrIGIvc2NyaXB0cy9wbmdvczIuZGVmCkBAIC0yLDcgKzIsNyBAQAogOyBQTkcuTElCIG1vZHVsZSBkZWZpbml0aW9uIGZpbGUgZm9yIE9TLzIKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLTsgVmVyc2lvbiAxLjIuMGJldGExCis7IFZlcnNpb24gMS4yLjBiZXRhMgogCiBMSUJSQVJZCQlQTkcKIERFU0NSSVBUSU9OCSJQTkcgaW1hZ2UgY29tcHJlc3Npb24gbGlicmFyeSBmb3IgT1MvMiIK