ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ2c2ltL3p0ZV92c2ltX2FwaS5oIGIvYXAvbGliL2xpYnZzaW0venRlX3ZzaW1fYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTU0OTAzNQotLS0gL2Rldi9udWxsCisrKyBiL2FwL2xpYi9saWJ2c2ltL3p0ZV92c2ltX2FwaS5oCkBAIC0wLDAgKzEsMzE1IEBACisjaWZuZGVmIF9fWlRFX1ZTSU1fQVBJX0hfDQorI2RlZmluZSBfX1pURV9WU0lNX0FQSV9IXw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCisvLyoqKioqKioqMjAyMy0wMS0xMyoqKioqKioqKioqLy8NCisNCisjZGVmaW5lIFNJTV9JTVNJX0xFTl9NQVggICAgICAgICAgMTYgIC8qKiAgTWF4aW11bSBsZW5ndGggb2YgSU1TSSBkYXRhLiAqLw0KKyNkZWZpbmUgU0lNX0lDQ0lEX0xFTl9NQVggICAgICAgICAyMSAgLyoqICBNYXhpbXVtIGxlbmd0aCBvZiBJQ0NJRCBkYXRhLiAqLw0KKyNkZWZpbmUgREFUQV9NQVhfQVBOX0xFTiAgICAgICAgICA1NyAgLyoqICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgQVBOLiAqLw0KKyNkZWZpbmUgREFUQV9NQVhfVVNFUk5BTUVfTEVOICAgICAxMjcgLyoqICBNYXhpbXVtIGxlbmd0aCBvZiB0aGUgcHJvZmlsZSB1c2VyIG5hbWUuICovDQorI2RlZmluZSBEQVRBX01BWF9QQVNTV09SRF9MRU4gICAgIDEyNyAvKiogIE1heGltdW0gbGVuZ3RoIG9mIHRoZSBwcm9maWxlIHBhc3N3b3JkLiAqLw0KKyNkZWZpbmUgREFUQV9JTlRFUkZBQ0VfTkFNRV9MRU4gICAxNiAgLyoqICBJbnRlcmZhY2UgbmFtZSBsZW5ndGguICovDQorI2RlZmluZSBEQVRBX01BWF9BRERSX0NPVU5UICAgICAgIDIgICAvKiogIE1heGltdW0gbnVtYmVyIG9mIElQIGFkZHJlc3Nlcy4gKi8NCisNCisvLyoqKioqKioqKioqKioqR0hUIFZTSU0gU3RydWN0KioqKioqKioqKioqKioqKioqKioqLy8NCisNCit0eXBlZGVmIGVudW0gew0KKyAgICBFX1NJTV9UWVBFX1VTSU0sIC8vyrXM5b+oDQorICAgIEVfU0lNX1RZUEVfVlNJTSwgLy/Uxr+oDQorICAgIEVfU0lNX1RZUEVfU1NJTSwgLy9Tb2Z0IFNJTQ0KK31TaW1UeXBlSW5TbG90X3Q7DQorDQorDQordHlwZWRlZiBlbnVtIHsNCisgICAgRV9OV19SQURJT19JRl9OT19TUlYgPSAwLA0KKyAgICBFX05XX1JBRElPX0lGX0dTTSA9IDEsDQorICAgIEVfTldfUkFESU9fSUZfV0NETUEgPSAyLA0KKyAgICBFX05XX1JBRElPX0lGX0xURSA9IDMsDQorICAgIEVfTldfUkFESU9fSUZfVERTQ0RNQSA9IDQsDQorICAgIEVfTldfUkFESU9fSUZfQ0RNQSA9IDUsDQorICAgIEVfTldfUkFESU9fSUZfQ0RNQTIwMDAgPSA2LA0KK31lX253X3JhdF90eXBlX3Q7ICAvL1JBVCB2YWx1ZQ0KKw0KKw0KK3R5cGVkZWYgZW51bSB7DQorICAgIEVfTldfU1RBVFVTX1NSVl9OT05FID0gMCwNCisgICAgRV9OV19TVEFUVVNfU1JWX0xJTUlURUQgPSAxLA0KKyAgICBFX05XX1NUQVRVU19TUlZfQVZBSUxBQkxFID0gMiwNCit9ZV9ud19zcnZfc3RhdHVzX3Q7DQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCXVpbnQzMl90IHRhYzsNCisJdWludDMyX3QgY2VsbF9pZDsNCisJdWludDMyX3Qgcm9hbWluZ0ZsYWc7IC8vLzwgMTpyb2FtaW5nLDA6bm9uIHJvYW1pbmcNCit9bHRlX3NjZWxsX2luZm9fdDsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJdWludDMyX3QgbGFjOw0KKwl1aW50MzJfdCBjZWxsX2lkOw0KK31nc21fd19zY2VsbF9pbmZvX3Q7DQorDQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGVfbndfcmF0X3R5cGVfdCAgICBjdXJyX3JhdDsNCisJZV9ud19zcnZfc3RhdHVzX3QgIG5TdGF0dXM7DQorCWx0ZV9zY2VsbF9pbmZvX3QgICBsdGVfc2NlbGxfaW5mbzsgICAvL7iz1rW/ydGho6zTw7unuPm+3XJhdNa4yr7N+MLnwODQzcih1rUNCisJZ3NtX3dfc2NlbGxfaW5mb190IGdzbV93X3NjZWxsX2luZm87IC8vuLPWtb/J0aGjrNPDu6e4+b7dcmF01rjKvs34wufA4NDNyKHWtQ0KK31SZWdJbmZvX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3R7DQorICAgIHVpbnQxNl90IG1jYzsNCisgICAgdWludDE2X3QgbW5jOw0KKwl1aW50MzJfdCB0YWM7DQorCXVpbnQzMl90IGNlbGxfaWQ7DQorICAgIHVpbnQxNl90IGJhbmR3aWR0aDsNCisgICAgdWludDE2X3QgcGNpZDsvL2ludDE2X3QgIHJ4bGV2Ow0KKyAgICB1aW50MzJfdCBhcmZjbjsNCit9YmFzZV9jZWxsX2luZm9fdDsvL0hleCBmb3JtYXQNCisNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgdWludDE2X3QgIHJvYW1pbmdGbGFnOyAvLy88IDE6cm9hbWluZywwOm5vbiByb2FtaW5nDQorICAgIGludDE2X3QgIHJzcnA7DQorICAgIGludDE2X3QgIHJzcnE7DQorICAgIHVpbnQxNl90IFNJTlI7DQorICAgIHVpbnQxNl90IG5ldE1vZGU7ICAvLzAtLXRkZCAgMS0tZmRkDQorICAgIHVpbnQxNl90IGJhbmQ7DQorICAgIGJhc2VfY2VsbF9pbmZvX3QgYmFzZV9TY2VsbF9pbmZvOw0KK30gbHRlX1NjZWxsX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGludDE2X3QgcnNycDsNCisgICAgaW50MTZfdCByc3JxOw0KKyAgICB1aW50MTZfdCBuZXRNb2RlOyAgLy8wLS10ZGQgIDEtLWZkZA0KKyAgICBiYXNlX2NlbGxfaW5mb190IGJhc2VfTmNlbGxfaW5mbzsNCit9bHRlX05jZWxsX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGJzaWM7IC8vb25seSBpbiBHU00NCisgICAgdWludDE2X3QgYmFuZDsNCisgICAgdWludDE2X3QgcnNjcDsgLy9vbmx5IGluIFcNCisgICAgYmFzZV9jZWxsX2luZm9fdCBiYXNlX05jZWxsX2luZm87DQorfWdzbV9XX1NjZWxsX3Q7DQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIHVpbnQxNl90IGJzaWM7IC8vb25seSBHU00NCisgICAgdWludDE2X3QgYmFuZDsNCisgICAgdWludDE2X3QgcnNjcDsgLy9vbmx5IGluIFcNCisgICAgYmFzZV9jZWxsX2luZm9fdCBiYXNlX05jZWxsX2luZm87DQorfWdzbV9XX05jZWxsX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGx0ZV9TY2VsbF90ICAgICBsdGVTY2VsbDsNCisgICAgdWludDE2X3QgICAgICBsdGVOY2VsbE51bTsNCisgICAgbHRlX05jZWxsX3QgICBsdGVOY2VsbFs2XTsNCit9bHRlX2NlbGxpbmZvX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3R7DQorCWdzbV9XX1NjZWxsX3QgICBzY2VsbF9pbmZvOw0KKyAgICB1aW50MTZfdCAgIGdzbV9XX05jZWxsTnVtOw0KKyAgICBnc21fV19OY2VsbF90IGdzbV9XX25jZWxsWzZdOw0KK31nc21fV19jZWxsaWZvX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3R7DQorCWVfbndfcmF0X3R5cGVfdCAgICBjdXJyX3JhdDsNCisgICAgZV9ud19zcnZfc3RhdHVzX3QgIHNlcnZpY2Vfc3RhdHVzOyAvLzB4MDA6IGluIHNlcnZpY2U7IDB4MDE6IG5vdCBpbg0KKwlsdGVfY2VsbGluZm9fdCAgIGx0ZV9jZWxsaW5mbzsNCisJZ3NtX1dfY2VsbGlmb190ICBnc21fY2VsbGluZm87DQorfUNlbGxJbmZvX3Q7DQorDQorDQordHlwZWRlZiBzdHJ1Y3R7DQorICB1aW50MzJfdCBsd2lwX3VsOw0KKyAgdWludDMyX3QgbHdpcF9kbDsNCisgIHVpbnQzMl90IHBwcF91bDsNCisgIHVpbnQzMl90IHBwcF9kbDsNCisgIHVpbnQzMl90IHJuZGlzX3VsOw0KKyAgdWludDMyX3Qgcm5kaXNfZGw7DQorfU5ldEluZm9fdDsgIC8qKjwgtaXOuzogYml0Ki8NCisNCit0eXBlZGVmIGVudW0NCit7DQorICAgIEVfREFUQV9JUF9GQU1JTFlfVU5LTk9XTiAgICAgICAgID0gMHgwMCwgICAgLyoqPCAgdW5rbm93biAgKi8NCisgICAgRV9EQVRBX0lQX0ZBTUlMWV9JUFY0ICAgICAgICAgICAgPSAweDA0LCAgICAvKio8ICBJUHY0ICAqLw0KKyAgICBFX0RBVEFfSVBfRkFNSUxZX0lQVjYgICAgICAgICAgICA9IDB4MDYsICAgIC8qKjwgIElQdjYgICovDQorICAgIEVfREFUQV9JUF9GQU1JTFlfSVBWNFY2ICAgICAgICAgID0gMHgwQSAgICAvKio8ICBJUHY0fElQdjYgICovDQorfWVfZGF0YV9pcF9mYW1pbHlfdDsNCisNCit0eXBlZGVmIGVudW0NCit7DQorICAgIEVfREFUQV9URUNIX1BSRUZfVU5LTk9XTiAgICAgICAgID0gMHgwMCwgICAgLyoqPCAgdW5rbm93biAgKi8NCisgICAgRV9EQVRBX1RFQ0hfUFJFRl9VTVRTICAgICAgICAgICAgPSAweDAxLCAgICAvKio8ICBVTVRTICAqLw0KKyAgICBFX0RBVEFfVEVDSF9QUkVGX0NETUEgICAgICAgICAgICA9IDB4MDIsICAgIC8qKjwgIENETUEgICovDQorICAgIEVfREFUQV9URUNIX1BSRUZfTFRFICAgICAgICAgICAgID0gMHgwMywgICAgLyoqPCAgTFRFICAqLw0KKyAgICBFX0RBVEFfVEVDSF9QUkVGX0FVVE8gICAgICAgICAgICA9IDB4MDQgICAgIC8qKjwgIEFVVE8gICovDQorfWVfZGF0YV90ZWNoX3ByZWZfdDsNCisNCit0eXBlZGVmIGVudW0NCit7DQorICAgIEVfQVVUSF9QUkVGX1BBUF9DSEFQX05PVF9BTExPV0VEICA9IDB4MDAsDQorICAgIEVfQVVUSF9QUkVGX1BBUF9PTkxZX0FMTE9XRUQgICAgICA9IDB4MDEsDQorICAgIEVfQVVUSF9QUkVGX0NIQVBfT05MWV9BTExPV0VEICAgICA9IDB4MDIsDQorICAgIEVfQVVUSF9QUkVGX1BBUF9DSEFQX0JPVEhfQUxMT1dFRCA9IDB4MDMNCit9ZV9kYXRhX2F1dGhfcHJlZl90Ow0KKw0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICB1aW50OF90ICAgICAgICAgICAgcHJvZmlsZV92YWxpZDsgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgdW10c19wcm9maWxlIGlzIGJlaW5nIHBhc3NlZC4gKi8NCisgICAgdWludDhfdCAgICAgICAgICAgIHByb2ZpbGVfaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBwcm9maWxlIElELiBhcyB3ZWxsIGFzIGNhbGxlZCBjaWQqLw0KKyAgICB1aW50OF90ICAgICAgICAgICAgaXBfZmFtaWx5X3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgaXBfZmFtaWx5IGlzIGJlaW5nIHBhc3NlZC4gKi8NCisgICAgZV9kYXRhX2lwX2ZhbWlseV90IGlwX2ZhbWlseTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEYXRhIElQIEZhbWlseSAqLw0KKyAgICB1aW50OF90ICAgICAgICAgICAgYXBuX25hbWVfdmFsaWQ7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgYXBuX25hbWUgaXMgYmVpbmcgcGFzc2VkLiAqLw0KKyAgICBjaGFyICAgICAgICAgICAgICAgYXBuX25hbWVbREFUQV9NQVhfQVBOX0xFTisxXTsgICAgICAgICAvKio8IERhdGEgQVBOIE5hbWUuIEEgY2hhcmFjdGVyIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBQRE4qLw0KKyAgICB1aW50OF90ICAgICAgICAgICAgdXNlcl9uYW1lX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgdXNlcl9uYW1lIGlzIGJlaW5nIHBhc3NlZC4gKi8NCisgICAgY2hhciAgICAgICAgICAgICAgIHVzZXJfbmFtZVtEQVRBX01BWF9VU0VSTkFNRV9MRU4rMV07ICAgLyoqPCBVc2VybmFtZSBmb3IgdGhlIEFQTi4gKi8NCisgICAgdWludDhfdCAgICAgICAgICAgIHBhc3N3b3JkX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIHBhc3N3b3JkIGlzIGJlaW5nIHBhc3NlZC4gKi8NCisgICAgY2hhciAgICAgICAgICAgICAgIHBhc3N3b3JkW0RBVEFfTUFYX1BBU1NXT1JEX0xFTisxXTsgICAgLyoqPCBQYXNzd29yZCBmb3IgdGhlIEFQTi4gKi8NCisgICAgdWludDhfdCAgICAgICAgICAgIGF1dGhfcHJlZl92YWxpZDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIHRlY2hfcHJlZiBpcyBiZWluZyBwYXNzZWQuICovDQorICAgIGVfZGF0YV9hdXRoX3ByZWZfdCBhdXRoX3ByZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGF0YSBhdXRoIFByZWZlcmVuY2UgKi8NCisgICAgdWludDhfdCAgICAgICAgICAgIHRlY2hfcHJlZl92YWxpZDsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIHRlY2hfcHJlZiBpcyBiZWluZyBwYXNzZWQuICovDQorICAgIGVfZGF0YV90ZWNoX3ByZWZfdCB0ZWNoX3ByZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgRGF0YSBUZWNoIFByZWZlcmVuY2UgKi8NCit9RGF0YV9jYWxsX2NvbmZpZ19pbmZvX3Q7DQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGNoYXIgICBhZGRyX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBJbmRpY2F0ZXMgd2hldGhlciBhIHZhbGlkIGFkZHJlc3MgaXMgYXZhaWxhYmxlLiAqLw0KKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOyAgICAgICAgICAgIC8qKjwgU3RvcmVzIHRoZSBJUCBhZGRyZXNzLiBkZWZpbmVkIGluIGtlcm5lbCBzb2NrZXQuaCovDQorfWRhdGFfY2FsbF9hZGRyX3Q7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICAgIGRhdGFfY2FsbF9hZGRyX3QgICAgICBpZmFjZV9hZGRyX3M7ICAgICAgLyoqPCBOZXR3b3JrIGludGVyZmFjZSBhZGRyZXNzLiAqLw0KKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgaWZhY2VfbWFzazsgICAgICAgIC8qKjwgU3VibmV0IG1hc2suICAgICAgICAgICAgICovDQorICAgIGRhdGFfY2FsbF9hZGRyX3QgICAgICBndHd5X2FkZHJfczsgICAgICAgLyoqPCBHYXRld2F5IHNlcnZlciBhZGRyZXNzLiAgKi8NCisgICAgdWludDMyX3QgICAgICAgICAgICAgIGd0d3lfbWFzazsgICAgICAgICAvKio8IEdhdGV3YXkgbWFzay4gICAgICAgICAgICAqLw0KKyAgICBkYXRhX2NhbGxfYWRkcl90ICAgICAgZG5zcF9hZGRyX3M7ICAgICAgIC8qKjwgUHJpbWFyeSBETlMgc2VydmVyIGFkZHJlc3MuICAgKi8NCisgICAgZGF0YV9jYWxsX2FkZHJfdCAgICAgIGRuc3NfYWRkcl9zOyAgICAgICAvKio8IFNlY29uZGFyeSBETlMgc2VydmVyIGFkZHJlc3MuICovDQorfWRhdGFfY2FsbF9hZGRyX2luZm9fdDsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgICAgY2hhciAgICAgICAgICAgICAgICAgIGlmYWNlX25hbWVbREFUQV9JTlRFUkZBQ0VfTkFNRV9MRU4gKyAxXTsgLyoqPCBOZXR3b3JrIGludGVyZmFjZSBuYW1lLiAqLw0KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgYWRkcl9pbmZvX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYWRkcl9pbmZvLiAqLw0KKyAgICBkYXRhX2NhbGxfYWRkcl9pbmZvX3QgYWRkcl9pbmZvW0RBVEFfTUFYX0FERFJfQ09VTlRdOyAgICAgICAgICAvKio8IERhdGEgZGV2aWNlIGFkZHJlc3MgbGlzdC4gKi8NCit9RGF0YV9jYWxsX2FkZHJfaW5mb19saXN0X3Q7DQorDQordHlwZWRlZiBlbnVtew0KKyAgRV9SRl9SRVNPVVJDRV9DQUxMQkFDS19FVkVOVCA9IDB4MDAsICAgLyoqPCDJ5Ma118rUtMfQu7suICovDQorICBFX05XX0FUVEFDSF9DT01NUExFVEVfRVZFTlQgID0gMHgzMiwgICAvKio8INeizfjN6rPJLiAqLw0KKyAgRV9EQVRBX1BETl9BQ1RfU1VDQ19FVkVOVCA9IDB4NjQsICAgICAgLyoqPCBQRE68pLvuzeqzySAsaW5kX2RhdGHW0NCvtPhaR0lQRE5TOrXY1rfQxc+iICAqLw0KKyAgRV9HRVRfQ0VMTElORk9fQllfU0lNSURfRVZFTlQgID0gMHg2NSwJIC8qKjwgyajN+M3qs8kuICovDQorfUVfTU9ERU1fRVZFTlRfSUQ7DQorDQordHlwZWRlZiBlbnVtDQorew0KKyAgICBFX1NJTV9TVEFUX05PVF9JTlNFUlRFRCA9IDB4MDAsDQorICAgIEVfU0lNX1NUQVRfUkVBRFkgICAgICAgID0gMHgwMSwNCisgICAgRV9TSU1fU1RBVF9QSU4gICAgICAgICAgPSAweDAyLA0KKyAgICBFX1NJTV9TVEFUX1BVSyAgICAgICAgICA9IDB4MDMsDQorICAgIEVfU0lNX1NUQVRfQlVTWSAgICAgICAgID0gMHgwNCwNCisgICAgRV9TSU1fU1RBVF9VTktOT1dOICAgICAgPSAweDA1LA0KK31FX1NJTV9TVEFUVVM7DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyoqIMP7s8ajuiBWU0lNX0NPTU1BTkQNCisqKiDD6Mr2o7ogTW9kZW26zVZTSU21xEFQRFXNqNDFvdO/2rqvyv21xL3hubm2qNLlo7sNCisqKiAgICAgICC4w8Dg0M22qNLltcS6r8r90OjSqs2ouf16dGVfYXRWc2ltSW5pdL3Tv9rN6rPJ16Ky4Q0KKyoqIA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCit0eXBlZGVmIGludCAoKlZTSU1fQ09NTUFORCkodWludDhfdCAqYXBkdV9yZXEsIHVpbnQxNl90IGFwZHVfcmVxX2xlbix1aW50OF90ICphcGR1X3JzcCwgdWludDE2X3QgKmFwZHVfcnNwX2xlbiwgdWludDhfdCBzbG90KTsNCit0eXBlZGVmIGludCAoKlNvZnRTaW1fQ09NTUFORCkodWludDhfdCAqYXBkdV9yZXEsIHVpbnQxNl90IGFwZHVfcmVxX2xlbix1aW50OF90ICphcGR1X3JzcCwgdWludDE2X3QgKmFwZHVfcnNwX2xlbiwgdWludDhfdCBzbG90KTsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiogw/uzxqO6IHp0ZV9tZG1fZXZlbnRfaW5kX2NhbGxiYWNrDQorKiogw+jK9qO6IM/7z6LKwrz+zajWqrqvyv21xL3hubm2qNLlDQorKiogaW5kX2RhdGHW0Ma9zKjX1Lao0uXM7bzTw+jK9g0KKyoqILHIyOdSRtfK1LS72MrV1K3S8qO6MS4gRm9yIFNJTTEgVEFVOyAyLiBGb3IgU0lNMSBSZWdpc3QgTmV0d29yazszLiBOVUxMOw0KKyoqIA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCit0eXBlZGVmIGludDMyX3QgKCp6dGVfbWRtX2V2ZW50X2luZF9jYWxsYmFjaykoRV9NT0RFTV9FVkVOVF9JRCBldmVudF9pZCwgdm9pZCAqaW5kX2RhdGEsIHVpbnQzMl90ICBpbmRfZGF0YV9sZW4pOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqKiDD+7PGo7ogenRlX21kbV9ldmVudF9yZWdpc3QNCisqKiDD6Mr2o7ogDQorKiogIM/7z6LKwrz+zajWqrqvyv3XorLhyOu/2qOszOG5qbj4v827p9eisuHP+8+iuq/K/TsNCisqKiAgIG1vZGVtsuCy+sn6ysK8/qOsu+G199PDaW5kX2NizajWqr/Nu6ejuw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitleHRlcm4gaW50MzJfdCB6dGVfbWRtX2V2ZW50X3JlZ2lzdCh6dGVfbWRtX2V2ZW50X2luZF9jYWxsYmFjayBpbmRfY2IpOw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKipaVEUgVlNJTSBBUEkqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorZXh0ZXJuIGludDMyX3QgenRlX2F0VnNpbUluaXQoVlNJTV9DT01NQU5EIHZzaW1fYXBkdV9wcm9jZXNzX2ZuLCB1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX2F0VnNpbUNsb3NlKFZTSU1fQ09NTUFORCB2c2ltX2FwZHVfcHJvY2Vzc19mbiwgdWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9hdFZzaW1SZXNldCh2b2lkKTsNCisNCisvL2V4dGVybiBpbnQxNl90IHp0ZV9TZXRTaW1Xb3JrTW9kZShTaW1UeXBlSW5TbG90X3QgU2ltVHlwZSwgdWludDhfdCBuU29sdElEKTsNCisNCisvL2V4dGVybiBpbnQxNl90IHp0ZV9HZXRTaW1Xb3JrTW9kZShTaW1UeXBlSW5TbG90X3QgKlNpbVR5cGUsIHVpbnQ4X3QgblNvbHRJRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX1NldEdURFVBTFNJTSh1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX0dldEdURFVBTFNJTSh1aW50OF90ICpuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9TZXRHVERBVEFTSU0odWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9HZXRHVERBVEFTSU0odWludDhfdCAqblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfU2V0Q2Z1bk1vZGUodWludDhfdCBtb2RlKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfR2V0Q2Z1bk1vZGUodWludDhfdCAqbW9kZSk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX1NldElNRUlieVNpbUlkKHVpbnQ4X3QgKmltZWksIHVpbnQ4X3QgaW1laV9sZW4sIHVpbnQ4X3QgblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfR2V0SU1FSWJ5U2ltSWQodWludDhfdCAqaW1laSwgdWludDhfdCBpbWVpX2xlbiwgdWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9HZXRDQ0lEYnlTaW1JZCh1aW50OF90ICpjY2lkLCB1aW50OF90IGNjaWRfbGVuLCB1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX0dldE1DQ01OQ2J5U2ltSWQoY2hhciAqbWNjLCBjaGFyICptbmMsIHVpbnQ4X3QgblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfU3dpdGNoU2ltSGFuZGxlKHVpbnQ4X3QgbW9kZSk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX0dldENTUWJ5U2ltSWQoaW50MzJfdCAqcnNzaSwgaW50MzJfdCAqYmVyLCB1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX0dldFJlZ0luZm9ieVNpbWlkKFJlZ0luZm9fdCAqcmVnX2luZm8sIHVpbnQ4X3QgblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfR2V0Q2VsbEluZm9ieVNpbUlkKHVpbnQ4X3QgblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfR2V0TmV0SW5mb2J5U2ltSWQoTmV0SW5mb190ICpwTmV0SW5mbywgdWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9TZXRBUE5ieVNpbUlEKERhdGFfY2FsbF9jb25maWdfaW5mb190ICpkYXRhX2NhbGwsIHVpbnQ4X3QgblNpbUlEKTsNCisNCitleHRlcm4gaW50MzJfdCB6dGVfU3RhcnREYXRhQ2FsbGJ5U2ltSWQoRGF0YV9jYWxsX2NvbmZpZ19pbmZvX3QgKmRhdGFfY2FsbCwgdWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9TdG9wRGF0YUNhbGxieVNpbUlkKHVpbnQ4X3QgcHJvZmlsZV9pZCwgdWludDhfdCBuU2ltSUQpOw0KKw0KK2V4dGVybiBpbnQzMl90IHp0ZV9HZXREYXRhQWRkcmJ5U2ltSUQodWludDhfdCBwcm9maWxlX2lkLCBEYXRhX2NhbGxfYWRkcl9pbmZvX2xpc3RfdCAqYWRkcl9saXN0LCB1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX0dldFNpbVN0YXR1c2J5U2ltSWQoRV9TSU1fU1RBVFVTICpzaW1fc3RhdHVzLCB1aW50OF90IG5TaW1JRCk7DQorDQorZXh0ZXJuIGludDMyX3QgenRlX1NlbmRBVGJ5U2ltSWQoY2hhciAqcmVxX2F0LCBjaGFyICppbmZvX2ZtdCwgdm9pZCAqKnB2YWwsIHVpbnQ4X3QgblNpbUlEKTsNCisvKioqKioqKioqKioqKioqKioqKipaVEUgVlNJTSBBUEkgRU5EKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisjZW5kaWYgLy8jaWZuZGVmIF9fWlRFX1ZTSU1fQVBJX0hfDQorDQo=