ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggM2M1NWYyMC4uZDViODFmNiAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTUgKzEsMTQgQEAKLVRoaXMgaXMgcmVsZWFzZSA5ODA3MTIgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5ODA3MjYgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk4MDcxMjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBNb3JlIGNvbW1vbiBjb250cm9scyBzdHVmZi4KLQktIFdpbjMycyBWeEQgc3VwcG9ydC4KLQktIEJlZ2lubmluZ3Mgb2YgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmUuCi0JLSBNb3JlIE5MUyBzdXBwb3J0LgorV0hBVCdTIE5FVyB3aXRoIFdpbmUtOTgwNzI2OiAoc2VlIENoYW5nZUxvZyBmb3IgZGV0YWlscykKKwktIFN0aWxsIG1vcmUgY29tbW9uIGNvbnRyb2xzIHN0dWZmLgorCS0gTW9yZSBEaXJlY3REcmF3IHN1cHBvcnQuCisJLSBDb21waWxhdGlvbiBwcm9ibGVtcyBzaG91bGQgYmUgZ29uZS4KIAktIExvdHMgb2YgYnVnIGZpeGVzLgogCiBTZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCkBAIC0xOCwxMCArMTcsMTAgQEAKIHRoZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZnRwIHNpdGVzLiAgVGhlIHNvdXJjZXMgd2lsbCBiZSBhdmFpbGFibGUKIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAKLSAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNzEyLnRhci5negotICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk4MDcxMi50YXIuZ3oKLSAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvc3Vuc2l0ZS9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNzEyLnRhci5negotICBmdHA6Ly9mdHAucHJvZ3NvYy51dHMuZWR1LmF1L3B1Yi9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNzEyLnRhci5negorICBmdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA3MjYudGFyLmd6CisgIGZ0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTgwNzI2LnRhci5negorICBmdHA6Ly9mdHAuaW5mb21hZ2ljLmNvbS9wdWIvbWlycm9ycy9saW51eC9zdW5zaXRlL0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA3MjYudGFyLmd6CisgIGZ0cDovL2Z0cC5wcm9nc29jLnV0cy5lZHUuYXUvcHViL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05ODA3MjYudGFyLmd6CiAKIEl0IHNob3VsZCBhbHNvIGJlIGF2YWlsYWJsZSBmcm9tIGFueSBzaXRlIHRoYXQgbWlycm9ycyB0c3gtMTEgb3Igc3Vuc2l0ZS4KIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGY2NWE3ZTAuLjk1NWVlOTUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNCArMSwxOTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NhdCBKdWwgMjUgMTk6NDU6NDUgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CisKKwkqIFtpbmNsdWRlL3NobG9iai5oXVttaXNjL3NoZWxsLmNdW21pc2Mvc2hlbGxvcmQuY11bb2xlL2ZvbGRlcnMuY10KKwlbc2hlbGwzMi5zcGVjXQorCUFkZGVkIFNIRklMRU9QU1RSVUNUMzJbQXxXXSBhbmQgY29uc3RhbnRzLCBwcm90b3R5cGVzLgorCUltcGxlbWVudGVkIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uLCBTSEdldFBhdGhGcm9tSURMaXN0MzJbQV0uCisJTWFueSBJU2hlbGxGb2xkZXIsIHBpZGwsIHNoZWxsIC1yZWxhdGVkIGNoYW5nZXMuCisKKwlTSENoYW5nZU5vdGlmeVJlZ2lzdGVyLCBTSENoYW5nZU5vdGlmeURlcmVnaXN0ZXIsCisJU0hTaGVsbEZvbGRlclZpZXdfTWVzc2FnZSwgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleCwKKwlTSEFkZFRvUmVjZW50RG9jczMyLCBTSEZpbGVPcGVyYXRpb24sIFNIQ2hhbmdlTm90aWZ5LCAKKwlTSENyZWF0ZVNoZWxsRm9sZGVyVmlld0V4IHN0dWJzLgorCitTYXQgSnVsIDI1IDE3OjE2OjI1IDE5OTggIEh1dyBEIE0gRGF2aWVzIDxkYXZpZXNoQGFiYWN1cy5waHlzaWNzLm94LmFjLnVrPgorCisJKiBbZmlsZXMvcHJvZmlsZS5jXQorCUZpeCByZXR1cm4gdmFsdWUgb2YgUFJPRklMRV9HZXRTZWN0aW9uKCkuCisKK0ZyaSBKdWwgMjQgMjI6NDU6MTkgMTk5OCAgT3ZlIEthYXZlbiA8b3Zla0Bpc2ZsYWsuYXJjdGljbmV0Lm5vPgorCisJKiBbY29udHJvbHMvZWRpdC5jXQorCUtpbGxlZCB0aGUgbW9kaWZpZWQgZmxhZyBvbiBXTV9TRVRURVhULiBFdWRvcmEgc2hvdWxkIG5vIGxvbmdlcgorCWJvdGhlciBhc2tpbmcgd2hldGhlciB5b3Ugd2FudCB0byBzYXZlIGFuIHVuY2hhbmdlZCBtZXNzYWdlLgorCitGcmkgSnVsIDI0IDIxOjIxOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgorCisJKiBbY29udHJvbHMvbWVudS5jXQorCUZpeGVkIGJ1ZyBpbiBHZXRNZW51U3RhdGUzMi4KKwlEb2Vzbid0IGZpeCBGcmVlIEFnZW50IDMyIDooKAorCisJKiBbZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmddCisJSGludHMgYWRkZWQuCisKKwkqIFtmaWxlcy9kb3NfZnMuY10gW2luY2x1ZGUvbXNkb3MuaF0gW21zZG9zL2ludDIxLmNdCisJRW5oYW5jZWQgRE9TIGRldmljZSBzdXBwb3J0LgorCisJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9yYXNhcGkxNi5zcGVjXQorCSAgW3JlbGF5MzIvTWFrZWZpbGUuaW5dIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9yYXNhcGkzMi5zcGVjXQorCUFkZGVkIFJBU0FQSTE2LzMyLkRMTC4KKworCSogW21pc2MvYXNwaS5jXSBbcmVsYXkzMi93bmFzcGkzMi5zcGVjXQorCUltcGxlbWVudGVkIEdldEFTUEkzMlN1cHBvcnRJbmZvLgorCisJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQorCUltcGxlbWVudGVkIG1tVGFza0NyZWF0ZS4KKworRnJpIEp1bCAyNCAyMDo1NTozMSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgorCisJKiBbY29udHJvbHMvdG9vbGJhci5jXQorCUZpeGVkIHNvbWUgYnVncyBhbmQgYWRkZWQgbmV3IGZlYXR1cmVzLgorCisJKiBbY29udHJvbHMvdG9vbHRpcHMuY11baW5jbHVkZS90b29sdGlwcy5oXQorCUFkZGVkIG1vcmUgbWVzc2FnZXMgYW5kIHN0YXJ0ZWQgZGlzcGxheSBjb2RlLgorCisJKiBbbWlzYy9zaGVsbC5jXVttaXNjL3NoZWxsb3JkLmNdW3JlbGF5MzIvc2hlbGwuc3BlY10KKwlGaXhlZCBTdHJUb09sZVN0ck4gKFNIRUxMMzJfNzkpIGFuZCBhZGRlZCBPbGVTdHJUb1N0ck4gKFNIRUxMMzJfNzgpLgorCUFkZGVkIHNvbWUgbmV3IHN0dWJzLgorCisJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdW21pc2MvaW1hZ2VsaXN0LmNdW2luY2x1ZGUvd2luZG93cy5oXQorCUZpeGVkIEdldEljb25JbmZvIGFuZCByZW1vdmVkIHRoZSBHZXRJY29uSW5mbyBoYWNrIGZyb20gdGhlCisJaW1hZ2UgbGlzdCBjb2RlLgorCisJKiBbY29udHJvbHMvcGFnZXIuY11baW5jbHVkZS9wYWdlci5oXVtjb250cm9scy90cmVldmlldy5jXQorCSAgW2luY2x1ZGUvdHJlZXZpZXcuaF0KKwlBZGRlZCBzb21lIG1lc3NhZ2VzLgorCisJKiBbbWlzYy90d2Vhay5jXVt3aW5vd3Mvbm9uY2xpZW50LmNdW2RvY3VtZW50YXRpb24vd2luOTVsb29rXQorCVJlbW92ZWQgdW51c2VkIHR3ZWFrIHZhcmlhYmxlcy4KKworCSogW2RvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzXQorCVVwZGF0ZWQuCisKK0ZyaSBKdWwgMjQgMTg6MzY6MzIgMTk5OCAgSmFtZXMgTW9vZHkgPDAxMzI2M21AZHJhZ29uLmFjYWRpYXUuY2E+CisKKwkqIFtvYmplY3RzL2ZvbnQuY10KKwlGaXhlZCBhIGJ1ZyBpbiBHZXRUZXh0RmFjZS4KKworRnJpIEp1bCAyNCAxNzowOTozMyAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KKworCSogW21pc2MvY29tbWRsZy5jXQorCUZpeGVkIHN0YWNrc21hc2hpbmcgYnVnIGR1ZSB0byBpbnZhbGlkIHNwZWNpZmllZCBmdW5jdGlvbgorCXBvaW50ZXJzLgorCisJKiBbZmlsZXMvZG9zX2ZzLmNdCisJU21hbGwgY2hhbmdlIGluIGNhc2UgaGFuZGxpbmcuLi4gYmUgYWJsZSB0byBjcmVhdGUgZmlsZXMgd2l0aAorCXVwcGVyY2FzZSBpbiB0aGVtIChsaWtlIFByb2dyYW0gRmlsZXMvKS4KKworCSogW2dyYXBoaWNzL2RkcmF3LmNdCisJWEY4NkRHQSBzdXBwb3J0IG1hZGUgdGhyZWFkc2FmZSwgYWRkZWQgbW9yZSBYbGliIGRlcGVuZGVudCBzdHVmZgorCShjcmVhdGUgV2luZG93IHVzaW5nIENyZWF0ZVdpbmRvdygpLCBkcmF3IGludG8gaXQpLiB4bGliIHN1cHBvcnQKKwlpcyBub3Qgc2F0aXNmeWluZy4KKworCSogW3NjaGVkdWxlci9jcml0c2VjdGlvbi5jXQorCURvbid0IHJlY3Vyc2Ugb24gSGVhcExvY2sgd2l0aCBzZW1hcGhvcmUgaWQgMC4KKworCSogW3dpbjMyL3VzZXIzMi5jXVt3aW5kb3dzL21lc3NhZ2UuY11bd2luZG93cy9ldmVudC5jXQorCU1vdmVkIHdpbjMyICpNZXNzYWdlIGZ1bmN0aW9ucyB3aGVyZSB0aGV5IGJlbG9uZy4KKwlSZW1vdmVkIHNvbWUgcG90ZW50aWFsIHJhY2VzIGJldHdlZW4gWFBlbmRpbmcgYW5kIFhOZXh0RXZlbnQgYnkKKwlhIGJpdCBtb3JlIGxvY2tpbmcuCisKK0ZyaSBKdWwgMjQgMTM6NTg6MTkgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CisKKwkqIFtsb2FkZXIvcGVfaW1hZ2UuY10gW2xvYWRlci9uZS9zZWdtZW50LmNdCisJVXNlIGJvZ3VzIHBvaW50ZXIgdmFsdWUgaW5zdGVhZCBvZiBOVUxMIGZvciB1bnJlc29sdmVkIGV4dGVybmFscy4KKworCSogW21lbW9yeS9zZWxlY3Rvci5jXQorCUNsZWFyIHNhdmVkX2ZzIG9uIHNlbGVjdG9yIGZyZWUuCisKKwkqIFttc2Rvcy9jZHJvbS5jXSBbY29uZmlndXJlLmluXQorCUFkZGVkIGNoZWNrIGZvciBsaW51eC91Y2Ryb20uaC4KKworCSogW3NjaGVkdWxlci9jbGllbnQuY10gW3NlcnZlci9zb2NrZXQuY10KKwlGaXggZm9yIG1pc3Npbmcgc3RydWN0IGNtc2doZHIuCisJQXR0ZW1wdCB0byBzdXBwb3J0IG1zZ19hY2NyaWdodHMgZmQgcGFzc2luZyAoY29tcGxldGVseSB1bnRlc3RlZCkuCisKKwkqIFt3aW5kb3dzL2V2ZW50LmNdCisJRG8gbm90IGdyYWIgdGhlIHBvaW50ZXIgaW4gU2V0Q2FwdHVyZSAoV2luMzIgYmVoYXZpb3IpLgorCitUdWUgSnVsIDIxIDIyOjI4OjEzIDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CisKKwkqIFtNYWtlLnJ1bGVzLmluXQorCUNoYW5nZWQgJChNS0RJUikgbWFjcm8gdG8gdXNlIC1wIG9wdGlvbiAobWFrZSBwYXJlbnQgZGlyZWN0b3JpZXMKKwlpZiB0aGV5IGRvbid0IGFscmVhZHkgZXhpc3QuICBUaGlzIGZpeGVzIGFuIGVycm9yIGluICdtYWtlIGluc3RhbGwnCisJaWYgL3Vzci9sb2NhbC9pbmNsdWRlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KKworVHVlIEp1bCAyMSAxMzozNzowNCBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgorCisJKiBbaW5jbHVkZS9oZWFwLmhdCisJUmVwbGFjZWQgbWFjcm8gU0VHUFRSX0dFVCBieSBpbmxpbmUgZnVuY3Rpb24gdG8gYXZvaWQgKmxvdHMqCisJb2Ygd3JvbmcgdXNlIG9mIHRoaXMgbWFjcm8uCisKKwkqIFtyZWxheTMyL2NvbWRsZzMyLnNwZWNdCisJQ29ycmVjdGVkIEdldFNhdmVGaWxlTmFtZVcgZW50cnkuCisKKwkqIFtyZWxheTMyL2FkdmFwaTMyLnNwZWNdIFt3aW4zMi9hZHZhcGkuY10KKwkgIFtyZWxheTMyL29sZTMyLnNwZWNdIFsgb2xlL21vbmlrZXIuY10KKwlBZGRlZCBzdHVicyBmb3IgU2V0RmlsZVNlY3VyaXR5W0FXXSBhbmQgQ3JlYXRlRmlsZU1vbmlrZXIzMgorCisJKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCisJRmluaXNoZWQgaW1wbGVtZW50YXRpb24gb2YgYmV6aWVyIGRyYXdpbmcgY29kZS4KKworVHVlIEp1bCAyMSAxMTowMDo1MSAxOTk4ICBDbGF1cyBGaXNjaGVyIDxjZmlzY2hlckB0ZDJjYWQuaW50ZWwuY29tPgorCisJKiBbZmlsZXMvZHJpdmUuY10KKwlSZW1vdmUgbGFiZWwgdHJhaWxpbmcgYmxhbmtzIGluIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBLgorCisJKiBbZG9jdW1lbnRhdGlvbi9jZHJvbS1sYWJlbHNdCisJQWRkZWQgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gZmluZCBvdXQgYSBDRC1ST00gbGFiZWwuCisKK1N1biBKdWwgMTkgMjM6MTY6NDEgMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgorCisJKiBbaW5jbHVkZS93aW5kb3dzLmhdCisJQWRkZWQgc29tZSBETV8qIGFuZCBESVNQX0NIQU5HRV8qIGZsYWdzLgorCisJKiBbcmVsYXkzMi91c2VyMzIuc3BlY10gW3dpbmRvd3MvdXNlci5jXQorCUFkZGVkIHN0dWIgZm9yIENoYW5nZURpc3BsYXlTZXR0aW5nQS4KKworCSogW29sZS9vbGUybmxzLmNdCisJaXNfcHVuY3R1YXRpb246IHJldXNlIGluZm9ybWF0aW9uIGZyb20gYW5vdGhlciB0YWJsZS4KKworU3VuIEp1bCAxOSAyMjowNDo0NiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CisKKwkqIFtNYWtlLnJ1bGVzLmluXQorCVVwZGF0ZWQgYXV0b21hdGljIGRvY3VtZW50YXRpb24gcnVsZXMuCisKKwkqIFtncmFwaGljcy9wYXRoLmNdIFttaXNjL2FzcGkuY10gW21pc2MvbnRkbGwuY10gW21pc2Mvd2luc29ja19kbnMuY10KKwlbb2xlL29sZTJkc3AuY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCisJQ29tbWVudCBmb3JtYXQgZnV0emluZyB0byBrZWVwIGMybWFuIGhhcHB5LgorCisJKiBbZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbl0KKwlVcGRhdGVkIGRlc2NyaXB0aW9uIG9mIGF1dG9tYXRpYyBkb2N1bWVudGF0aW9uLgorCitXZWQgSnVsIDE1IDE5OjEwOjA5IDE5OTggICBBbmRyZXcgTS4gQmlzaG9wIDxhbWJAZ2VkYW5rZW4uZGVtb24uY28udWs+CisKKwkqIFtmaWxlcy9wcm9maWxlLmNdCisJQ2FjaGUgdGhlIDEwIG1vc3QgcmVjZW50bHkgdXNlZCAuaW5pIGZpbGVzLgorCitUdWUgTWF5IDIwIDE5OjIwOjIzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAY2hhbmFlLmFscGhhbmV0LmNoPgorCisJKiBbbWlzYy9jb21tZGxnLmNdCisJTWFrZXMgUHJpbnREbGczMkEoKSByZXR1cm4gVFJVRSBldmVuIGlmIGl0IGlzIGFuIGVtcHR5CisJc3R1Yiwgc28gbW9zdCBwcm9ncmFtcyBhcmUgaGFwcHkgYW5kIHJ1biBhbnl3YXkgaW5zdGVhZCBvZgorCWFib3J0aW5nIGF0IHN0YXJ0dXAuCisKKwkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KKwlJbmNyZWFzZWQgdGhlIG1heGltdW0gZm9udCBmYW1pbGllcyBhcyAoWDExKSBmb250IGFsaWFzZXMKKwllYXRlZCB1cCBhIGxvdCBvZiBmYW1pbGllcyBjYXVzaW5nIHdpbmUgdG8gc3RvcCByZWFkaW5nIGZvbnRzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdW4gSnVsIDEyIDE2OjIzOjM2IDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgogCiAJKiBbc2VydmVyLypdIFtzY2hlZHVsZXIvY2xpZW50LmNdIChuZXcgZmlsZXMpCmRpZmYgLS1naXQgYS9NYWtlLnJ1bGVzLmluIGIvTWFrZS5ydWxlcy5pbgppbmRleCA0ZmMxYjZjLi4zN2U3OGM5IDEwMDY0NAotLS0gYS9NYWtlLnJ1bGVzLmluCisrKyBiL01ha2UucnVsZXMuaW4KQEAgLTM2LDggKzM2LDEzIEBACiBMRENPTUJJTkUgPSBsZCAtcgogQVIgICAgICAgID0gYXIgcmMKIFJNICAgICAgICA9IHJtIC1mCi1NS0RJUiAgICAgPSBta2RpcgorTUtESVIgICAgID0gbWtkaXIgLXAKIEMyTUFOICAgICA9IEBDMk1BTkAKK01BTlNQRUNTICA9IC13ICQoVE9QU1JDRElSKS9yZWxheTMyL2dkaTMyLnNwZWMgXAorCSAgICAtdyAkKFRPUFNSQ0RJUikvcmVsYXkzMi91c2VyMzIuc3BlYyBcCisJICAgIC13ICQoVE9QU1JDRElSKS9yZWxheTMyL2NvbWN0bDMyLnNwZWMgXAorCSAgICAtdyAkKFRPUFNSQ0RJUikvcmVsYXkzMi9jb21kbGczMi5zcGVjIFwKKwkgICAgLXcgJChUT1BTUkNESVIpL3JlbGF5MzIva2VybmVsMzIuc3BlYyAKIExJTlQgICAgICA9IGxjbGludAogTElOVEZMQUdTID0gK3Bvc2l4bGliICtnbnVleHRlbnNpb25zICt0cnl0b3JlY292ZXIKIEJVSUxEICAgICA9ICQoVE9QT0JKRElSKS90b29scy9idWlsZEBQUk9HRVhUQApAQCAtMTM0LDIxICsxMzksMjEgQEAKICQoTU9EVUxFKS5vOiAkKE9CSlMpCiAJJChMRENPTUJJTkUpICQoT0JKUykgLW8gJChNT0RVTEUpLm8KIAotIyBSdWxlIGZvciBtYW4gcGFnZXMKKyMgUnVsZXMgZm9yIGF1dG8gZG9jdW1lbnRhdGlvbgogCiBtYW46ICQoQ19TUkNTKQotCWZvciBpIGluICQoQ19TUkNTKTsgZG8gJChDMk1BTikgLUwgLW8kKFRPUE9CSkRJUikvZG9jdW1lbnRhdGlvbi9tYW4zdyAtUzN3ICQoRElWSU5DTCkgJCRpOyBkb25lCisJZm9yIGkgaW4gJChDX1NSQ1MpOyBkbyAkKEMyTUFOKSAtTCAtbyAkKFRPUE9CSkRJUikvZG9jdW1lbnRhdGlvbi9tYW4zdyAtUzN3ICQoRElWSU5DTCkgLURfX1dJTkVfXyAkKE1BTlNQRUNTKSAkJGk7IGRvbmUKKworaHRtbDogJChDX1NSQ1MpCisJZm9yIGkgaW4gJChDX1NSQ1MpOyBkbyAkKEMyTUFOKSAtTCAtbyAkKFRPUE9CSkRJUikvZG9jdW1lbnRhdGlvbi9odG1sIC1UaCAtaXdpbmRvd3MuaCAgJChESVZJTkNMKSAtRF9fV0lORV9fICQoTUFOU1BFQ1MpICQkaTsgZG9uZQorCisKIAogIyBSdWxlIGZvciBsaW50aW5nCiAKIGxpbnQ6CiAJZm9yIGkgaW4gJChDX1NSQ1MpOyBkbyAkKExJTlQpICQoTElOVEZMQUdTKSAtRF9fV0lORV9fICQoT1BUSU9OUykgJChESVZJTkNMKSAkKFhfQ0ZMQUdTKSAkJGk7IGRvbmUKIAotIyBSdWxlIGZvciBodG1sIHBhZ2VzCi0KLWh0bWw6ICQoQ19TUkNTKQotCWZvciBpIGluICQoQ19TUkNTKTsgZG8gJChDMk1BTikgLUwgLW8kKFRPUE9CSkRJUikvZG9jdW1lbnRhdGlvbi9odG1sIC1UaCAtaXdpbmRvd3MuaCAgJChESVZJTkNMKSAkJGk7IGRvbmUKLQogIyBNaXNjLiBydWxlcwogCiBkZXBlbmQ6OiAkKE1BS0VERVApICQoQ19TUkNTKSAkKFJDX1NSQ1MpICQoRVhUUkFfU1JDUykKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBjYmRlMjU5Li4wNDY5NWIyIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC01ODEsNyArNTgxLDcgQEAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWIgb3IgLS1kaXNhYmxlLWxpYiB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9saWIrc2V0fSIgPSBzZXQ7IHRoZW4KICAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYiIKLSAgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iOyB0aGVuIExJQl9UQVJHRVQ9IlwkTElCT0JKUyI7IGZpCisgIGlmIHRlc3QgIiRlbmFibGV2YWwiID0gIm5vIjsgdGhlbiBMSUJfVEFSR0VUPSJcJChMSUJPQkpTKSI7IGZpCiBmaQogCiAKQEAgLTI0MjUsMTcgKzI0MjUsMTggQEAKICAgICBlbHNlCiAJbGliWDExX2NrZWNrPW5vbmUKIAlmb3IgZGlyIGluICIkeF9saWJyYXJpZXMiIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC9saWI7IGRvCi0JICAgIGlmIHRlc3QgLWUgJGRpci9saWJYMTEuc287IHRoZW4KKwkgICAgaWYgdGVzdCAtciAkZGlyL2xpYlgxMS5zbzsgdGhlbgogCQlsaWJYMTFfY2hlY2s9Ii1EICRkaXIvbGliWDExLnNvIgogCQlicmVhayAxCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgLWUgJGRpci9saWJYMTEuYTsgdGhlbgorCSAgICBpZiB0ZXN0IC1yICRkaXIvbGliWDExLmE7IHRoZW4KIAkJbGliWDExX2NoZWNrPSIkZGlyL2xpYlgxMS5hIgogCQlicmVhayAxCiAJICAgIGZpCiAJZG9uZQogCWlmIHRlc3QgIiRsaWJYMTFfY2hlY2siICE9ICJub25lIjsgdGhlbgotCSAgICBpZiBubSAkbGliWDExX2NoZWNrIHwgZ3JlcCAtcSBfX2Vycm5vX2xvY2F0aW9uOyB0aGVuCisJICAgIGlmIG5tICRsaWJYMTFfY2hlY2sgfCBncmVwIF9fZXJybm9fbG9jYXRpb24gPi9kZXYvbnVsbCAyPiYxCisJICAgIHRoZW4KIAkJd2luZV9jdl94X3JlZW50cmFudD15ZXMKIAkgICAgZWxzZQogCQl3aW5lX2N2X3hfcmVlbnRyYW50PW5vCkBAIC0yNDU5LDEyICsyNDYwLDEyIEBACiBmb3IgYWNfZnVuYyBpbiBjbG9uZSBnZXRwYWdlc2l6ZSBtZW1tb3ZlIHNpZ2FsdHN0YWNrIHN0cmVycm9yIHN0cmljbXAgdGNnZXRhdHRyIHRpbWVnbSB1c2xlZXAgd2FpdDQgd2FpdHBpZCB2ZnNjYW5mCiBkbwogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19mdW5jIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyNDYzOiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorZWNobyAiY29uZmlndXJlOjI0NjQ6IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfZnVuY18kYWNfZnVuYycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI0NjggImNvbmZpZ3VyZSIKKyNsaW5lIDI0NjkgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAogICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMoKTsgYmVsb3cuICAqLwpAQCAtMjQ4Nyw3ICsyNDg4LDcgQEAKIAogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI0OTE6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdDsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNDkyOiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3Q7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBldmFsICJhY19jdl9mdW5jXyRhY19mdW5jPXllcyIKIGVsc2UKQEAgLTI1MTEsMjEgKzI1MTIsMjEgQEAKIGZpCiBkb25lCiAKLWZvciBhY19oZHIgaW4gd2N0eXBlLmggc3lzL3N5c2NhbGwuaCBzeXNjYWxsLmggc3lzL3BhcmFtLmggc3lzL3Zmcy5oIHN5cy9tb3VudC5oIHN5cy9zdGF0ZnMuaCBmbG9hdC5oIGxpbnV4L2Nkcm9tLmggc3lzL2NkaW8uaCBzeXMvZmlsaW8uaCBzeXMvbW9kZW0uaCBzdHJpbmdzLmggc3lzL3N0cnRpby5oCitmb3IgYWNfaGRyIGluIHdjdHlwZS5oIHN5cy9zeXNjYWxsLmggc3lzY2FsbC5oIHN5cy9wYXJhbS5oIHN5cy92ZnMuaCBzeXMvbW91bnQuaCBzeXMvc3RhdGZzLmggZmxvYXQuaCBsaW51eC9jZHJvbS5oIGxpbnV4L3VjZHJvbS5oIHN5cy9jZGlvLmggc3lzL2ZpbGlvLmggc3lzL21vZGVtLmggc3RyaW5ncy5oIHN5cy9zdHJ0aW8uaAogZG8KIGFjX3NhZmU9YGVjaG8gIiRhY19oZHIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yICRhY19oZHIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI1MTk6IGNoZWNraW5nIGZvciAkYWNfaGRyIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNTIwOiBjaGVja2luZyBmb3IgJGFjX2hkciIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyXyRhY19zYWZlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjUyNCAiY29uZmlndXJlIgorI2xpbmUgMjUyNSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8JGFjX2hkcj4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjUyOTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MjUzMDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgpAQCAtMjU1MiwxMiArMjU1MywxMiBAQAogZG9uZQogCiBlY2hvICRhY19uICJjaGVja2luZyB3aGV0aGVyIHN0YXQgZmlsZS1tb2RlIG1hY3JvcyBhcmUgYnJva2VuIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyNTU2OiBjaGVja2luZyB3aGV0aGVyIHN0YXQgZmlsZS1tb2RlIG1hY3JvcyBhcmUgYnJva2VuIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNTU3OiBjaGVja2luZyB3aGV0aGVyIHN0YXQgZmlsZS1tb2RlIG1hY3JvcyBhcmUgYnJva2VuIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9oZWFkZXJfc3RhdF9icm9rZW4nK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNTYxICJjb25maWd1cmUiCisjbGluZSAyNTYyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpAQCAtMjYwOCwxMiArMjYwOSwxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgY29uc3QiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI2MTI6IGNoZWNraW5nIGZvciB3b3JraW5nIGNvbnN0IiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNjEzOiBjaGVja2luZyBmb3Igd29ya2luZyBjb25zdCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY19jb25zdCcrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI2MTcgImNvbmZpZ3VyZSIKKyNsaW5lIDI2MTggImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiBpbnQgbWFpbigpIHsKQEAgLTI2NjIsNyArMjY2Myw3IEBACiAKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNjY2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI2Njc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICBhY19jdl9jX2NvbnN0PXllcwogZWxzZQpAQCAtMjY4MywxMiArMjY4NCwxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI2ODc6IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyNjg4OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfaGVhZGVyX3N0ZGMnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNjkyICJjb25maWd1cmUiCisjbGluZSAyNjkzICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTI2OTYsNyArMjY5Nyw3IEBACiAjaW5jbHVkZSA8ZmxvYXQuaD4KIEVPRgogYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dCIKLXsgKGV2YWwgZWNobyBjb25maWd1cmU6MjcwMDogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KK3sgKGV2YWwgZWNobyBjb25maWd1cmU6MjcwMTogXCIkYWNfdHJ5XCIpIDE+JjU7IChldmFsICRhY190cnkpIDI+JjU7IH0KIGFjX2Vycj1gZ3JlcCAtdiAnXiAqKycgY29uZnRlc3Qub3V0YAogaWYgdGVzdCAteiAiJGFjX2VyciI7IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgpAQCAtMjcxMyw3ICsyNzE0LDcgQEAKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI3MTcgImNvbmZpZ3VyZSIKKyNsaW5lIDI3MTggImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgogRU9GCkBAIC0yNzMxLDcgKzI3MzIsNyBAQAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgogY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjczNSAiY29uZmlndXJlIgorI2xpbmUgMjczNiAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiBFT0YKQEAgLTI3NTIsNyArMjc1Myw3IEBACiAgIDoKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjc1NiAiY29uZmlndXJlIgorI2xpbmUgMjc1NyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQpAQCAtMjc2Myw3ICsyNzY0LDcgQEAKIGV4aXQgKDApOyB9CiAKIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyNzY3OiBcIiRhY19saW5rXCIpIDE+JjU7IChldmFsICRhY19saW5rKSAyPiY1OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QgJiYgKC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI3Njg6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKIHRoZW4KICAgOgogZWxzZQpAQCAtMjc4NywxMiArMjc4OCwxMiBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgZm9yIHNpemVfdCIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6Mjc5MTogY2hlY2tpbmcgZm9yIHNpemVfdCIgPiY1CitlY2hvICJjb25maWd1cmU6Mjc5MjogY2hlY2tpbmcgZm9yIHNpemVfdCIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfdHlwZV9zaXplX3QnK3NldH0nYFwiID0gc2V0IjsgdGhlbgogICBlY2hvICRhY19uICIoY2FjaGVkKSAkYWNfYyIgMT4mNgogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyNzk2ICJjb25maWd1cmUiCisjbGluZSAyNzk3ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBTVERDX0hFQURFUlMKQEAgLTI4MjAsNyArMjgyMSw3IEBACiBmaQogCiBlY2hvICRhY19uICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MjgyNDogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQorZWNobyAiY29uZmlndXJlOjI4MjU6IGNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneydhY19jdl9zaXplb2ZfbG9uZ19sb25nJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTI4MjgsNyArMjgyOSw3IEBACiAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAogZWxzZQogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAyODMyICJjb25maWd1cmUiCisjbGluZSAyODMzICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogbWFpbigpCkBAIC0yODM5LDcgKzI4NDAsNyBAQAogICBleGl0KDApOwogfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI4NDM6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg0NDogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPWBjYXQgY29uZnRlc3R2YWxgCiBlbHNlCkBAIC0yODYzLDEyICsyODY0LDEyIEBACiBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3N5c192ZnNfaCIgPSAieWVzIgogdGhlbgogICAgIGVjaG8gJGFjX24gImNoZWNraW5nICJ3aGV0aGVyIHN5cy92ZnMuaCBkZWZpbmVzIHN0YXRmcyIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI4Njc6IGNoZWNraW5nICJ3aGV0aGVyIHN5cy92ZnMuaCBkZWZpbmVzIHN0YXRmcyIiID4mNQorZWNobyAiY29uZmlndXJlOjI4Njg6IGNoZWNraW5nICJ3aGV0aGVyIHN5cy92ZnMuaCBkZWZpbmVzIHN0YXRmcyIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3dpbmVfY3Zfc3lzX3Zmc19oYXNfc3RhdGZzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjg3MiAiY29uZmlndXJlIgorI2xpbmUgMjg3MyAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIAkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yODg1LDcgKzI4ODYsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI4ODk6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjg5MDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIHdpbmVfY3Zfc3lzX3Zmc19oYXNfc3RhdGZzPXllcwogZWxzZQpAQCAtMjkxMiwxMiArMjkxMywxMiBAQAogaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9zeXNfc3RhdGZzX2giID0gInllcyIKIHRoZW4KICAgICBlY2hvICRhY19uICJjaGVja2luZyAid2hldGhlciBzeXMvc3RhdGZzLmggZGVmaW5lcyBzdGF0ZnMiIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZToyOTE2OiBjaGVja2luZyAid2hldGhlciBzeXMvc3RhdGZzLmggZGVmaW5lcyBzdGF0ZnMiIiA+JjUKK2VjaG8gImNvbmZpZ3VyZToyOTE3OiBjaGVja2luZyAid2hldGhlciBzeXMvc3RhdGZzLmggZGVmaW5lcyBzdGF0ZnMiIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneyd3aW5lX2N2X3N5c19zdGF0ZnNfaGFzX3N0YXRmcycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCiAgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CiBlbHNlCiAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDI5MjEgImNvbmZpZ3VyZSIKKyNsaW5lIDI5MjIgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMjkzMiw3ICsyOTMzLDcgQEAKIAkKIDsgcmV0dXJuIDA7IH0KIEVPRgotaWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZToyOTM2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCitpZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5Mzc6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KICAgcm0gLXJmIGNvbmZ0ZXN0KgogICB3aW5lX2N2X3N5c19zdGF0ZnNfaGFzX3N0YXRmcz15ZXMKIGVsc2UKQEAgLTI5NTksMTIgKzI5NjAsMTIgQEAKIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3lzX21vdW50X2giID0gInllcyIKIHRoZW4KICAgICBlY2hvICRhY19uICJjaGVja2luZyAid2hldGhlciBzeXMvbW91bnQuaCBkZWZpbmVzIHN0YXRmcyIiIi4uLiAkYWNfYyIgMT4mNgotZWNobyAiY29uZmlndXJlOjI5NjM6IGNoZWNraW5nICJ3aGV0aGVyIHN5cy9tb3VudC5oIGRlZmluZXMgc3RhdGZzIiIgPiY1CitlY2hvICJjb25maWd1cmU6Mjk2NDogY2hlY2tpbmcgIndoZXRoZXIgc3lzL21vdW50LmggZGVmaW5lcyBzdGF0ZnMiIiA+JjUKIGlmIGV2YWwgInRlc3QgXCJgZWNobyAnJCcneyd3aW5lX2N2X3N5c19tb3VudF9oYXNfc3RhdGZzJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMjk2OCAiY29uZmlndXJlIgorI2xpbmUgMjk2OSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIAkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yOTc5LDcgKzI5ODAsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjI5ODM6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6Mjk4NDogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIHdpbmVfY3Zfc3lzX21vdW50X2hhc19zdGF0ZnM9eWVzCiBlbHNlCkBAIC0zMDA1LDcgKzMwMDYsNyBAQAogCiAKIGVjaG8gJGFjX24gImNoZWNraW5nICJmb3Igc3RhdGZzLmZfYmZyZWUiIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTozMDA5OiBjaGVja2luZyAiZm9yIHN0YXRmcy5mX2JmcmVlIiIgPiY1CitlY2hvICJjb25maWd1cmU6MzAxMDogY2hlY2tpbmcgImZvciBzdGF0ZnMuZl9iZnJlZSIiID4mNQogaWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J3dpbmVfY3Zfc3RhdGZzX2JmcmVlJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTMwMTQsNyArMzAxNSw3IEBACiAgICAgICAgIHdpbmVfY3Zfc3RhdGZzX2JmcmVlPW5vCiAgICAgZWxzZQogICAgIAljYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jbGluZSAzMDE4ICJjb25maWd1cmUiCisjbGluZSAzMDE5ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTMwNDEsNyArMzA0Miw3IEBACiAJCiA7IHJldHVybiAwOyB9CiBFT0YKLWlmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzA0NTogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMDQ2OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgd2luZV9jdl9zdGF0ZnNfYmZyZWU9eWVzCiBlbHNlCkBAIC0zMDY1LDcgKzMwNjYsNyBAQAogZmkKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciBzdGF0ZnMuZl9iYXZhaWwiIiIuLi4gJGFjX2MiIDE+JjYKLWVjaG8gImNvbmZpZ3VyZTozMDY5OiBjaGVja2luZyAiZm9yIHN0YXRmcy5mX2JhdmFpbCIiID4mNQorZWNobyAiY29uZmlndXJlOjMwNzA6IGNoZWNraW5nICJmb3Igc3RhdGZzLmZfYmF2YWlsIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snd2luZV9jdl9zdGF0ZnNfYmF2YWlsJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTMwNzQsNyArMzA3NSw3IEBACiAgICAgICAgIHdpbmVfY3Zfc3RhdGZzX2JhdmFpbD1ubwogICAgIGVsc2UKICAgICAJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMzA3OCAiY29uZmlndXJlIgorI2xpbmUgMzA3OSAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIAkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0zMTAxLDcgKzMxMDIsNyBAQAogCQogOyByZXR1cm4gMDsgfQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxMDU6IFwiJGFjX2NvbXBpbGVcIikgMT4mNTsgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjU7IH07IHRoZW4KK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzEwNjogXCIkYWNfY29tcGlsZVwiKSAxPiY1OyAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNTsgfTsgdGhlbgogICBybSAtcmYgY29uZnRlc3QqCiAgIHdpbmVfY3Zfc3RhdGZzX2JhdmFpbD15ZXMKIGVsc2UKQEAgLTMxMjYsNyArMzEyNyw3IEBACiAKIAogZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciB3b3JraW5nIHNpZ2FsdHN0YWNrIiIiLi4uICRhY19jIiAxPiY2Ci1lY2hvICJjb25maWd1cmU6MzEzMDogY2hlY2tpbmcgImZvciB3b3JraW5nIHNpZ2FsdHN0YWNrIiIgPiY1CitlY2hvICJjb25maWd1cmU6MzEzMTogY2hlY2tpbmcgImZvciB3b3JraW5nIHNpZ2FsdHN0YWNrIiIgPiY1CiBpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyQnJ3snYWNfY3ZfY193b3JraW5nX3NpZ2FsdHN0YWNrJytzZXR9J2BcIiA9IHNldCI7IHRoZW4KICAgZWNobyAkYWNfbiAiKGNhY2hlZCkgJGFjX2MiIDE+JjYKIGVsc2UKQEAgLTMxMzUsNyArMzEzNiw3IEBACiAKIGVsc2UKICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMzEzOSAiY29uZmlndXJlIgorI2xpbmUgMzE0MCAiY29uZmlndXJlIgogI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAKIAkjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTMxNzMsNyArMzE3NCw3IEBACiAJfQogCQogRU9GCi1pZiB7IChldmFsIGVjaG8gY29uZmlndXJlOjMxNzc6IFwiJGFjX2xpbmtcIikgMT4mNTsgKGV2YWwgJGFjX2xpbmspIDI+JjU7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCAmJiAoLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGwKK2lmIHsgKGV2YWwgZWNobyBjb25maWd1cmU6MzE3ODogXCIkYWNfbGlua1wiKSAxPiY1OyAoZXZhbCAkYWNfbGluaykgMj4mNTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0ICYmICguL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbAogdGhlbgogICBhY19jdl9jX3dvcmtpbmdfc2lnYWx0c3RhY2s9InllcyIKIGVsc2UKQEAgLTMxOTksNiArMzIwMCw0MiBAQAogCiAKIAorZWNobyAkYWNfbiAiY2hlY2tpbmcgImZvciBtc2dfYWNjcmlnaHRzIGluIHN0cnVjdCBtc2doZHIiIiIuLi4gJGFjX2MiIDE+JjYKK2VjaG8gImNvbmZpZ3VyZTozMjA1OiBjaGVja2luZyAiZm9yIG1zZ19hY2NyaWdodHMgaW4gc3RydWN0IG1zZ2hkciIiID4mNQoraWYgZXZhbCAidGVzdCBcImBlY2hvICckJyd7J2FjX2N2X2NfbXNnX2FjY3JpZ2h0cycrc2V0fSdgXCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJGFjX24gIihjYWNoZWQpICRhY19jIiAxPiY2CitlbHNlCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyNsaW5lIDMyMTAgImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK2ludCBtYWluKCkgeworc3RydWN0IG1zZ2hkciBoZHI7IGhkci5tc2dfYWNjcmlnaHRzPTAKKzsgcmV0dXJuIDA7IH0KK0VPRgoraWYgeyAoZXZhbCBlY2hvIGNvbmZpZ3VyZTozMjE4OiBcIiRhY19jb21waWxlXCIpIDE+JjU7IChldmFsICRhY19jb21waWxlKSAyPiY1OyB9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgYWNfY3ZfY19tc2dfYWNjcmlnaHRzPSJ5ZXMiCitlbHNlCisgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBybSAtcmYgY29uZnRlc3QqCisgIGFjX2N2X2NfbXNnX2FjY3JpZ2h0cz0ibm8iCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCitlY2hvICIkYWNfdCIiJGFjX2N2X2NfbXNnX2FjY3JpZ2h0cyIgMT4mNgoraWYgdGVzdCAiJGFjX2N2X2NfbXNnX2FjY3JpZ2h0cyIgPSAieWVzIgordGhlbgorICAgIGNhdCA+PiBjb25mZGVmcy5oIDw8XEVPRgorI2RlZmluZSBIQVZFX01TR0hEUl9BQ0NSSUdIVFMgMQorRU9GCisKK2ZpCisKKwogTUFLRV9SVUxFUz1NYWtlLnJ1bGVzCiAKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmluZGV4IDU1M2VhNWYuLjUyNTZlMjUgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5pbgorKysgYi9jb25maWd1cmUuaW4KQEAgLTI4LDcgKzI4LDcgQEAKIAogQUNfQVJHX0VOQUJMRShsaWIsCiBbICAtLWRpc2FibGUtbGliICAgICAgICAgICBidWlsZCB0aGUgV2luZSB3aXRob3V0IGJ1aWxkaW5nIGxpYndpbmUuYV0sCi1baWYgdGVzdCAiJGVuYWJsZXZhbCIgPSAibm8iOyB0aGVuIExJQl9UQVJHRVQ9IlwkTElCT0JKUyI7IGZpXSkKK1tpZiB0ZXN0ICIkZW5hYmxldmFsIiA9ICJubyI7IHRoZW4gTElCX1RBUkdFVD0iXCQoTElCT0JKUykiOyBmaV0pCiAKIGRubCBBQ19BUkdfV0lUSChpcGMsCiBkbmwgWyAgLS1lbmFibGUtaXBjICAgICAgICAgICAgdXNlIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBmb3IgRERFXSwKQEAgLTIxMywxNyArMjEzLDE4IEBACiAgICAgZWxzZQogCWxpYlgxMV9ja2Vjaz1ub25lCiAJZm9yIGRpciBpbiAiJHhfbGlicmFyaWVzIiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvbGliOyBkbwotCSAgICBpZiB0ZXN0IC1lICRkaXIvbGliWDExLnNvOyB0aGVuCisJICAgIGlmIHRlc3QgLXIgJGRpci9saWJYMTEuc287IHRoZW4KIAkJbGliWDExX2NoZWNrPSItRCAkZGlyL2xpYlgxMS5zbyIKIAkJYnJlYWsgMQogCSAgICBmaQotCSAgICBpZiB0ZXN0IC1lICRkaXIvbGliWDExLmE7IHRoZW4KKwkgICAgaWYgdGVzdCAtciAkZGlyL2xpYlgxMS5hOyB0aGVuCiAJCWxpYlgxMV9jaGVjaz0iJGRpci9saWJYMTEuYSIKIAkJYnJlYWsgMQogCSAgICBmaQogCWRvbmUKIAlpZiB0ZXN0ICIkbGliWDExX2NoZWNrIiAhPSAibm9uZSI7IHRoZW4KLQkgICAgaWYgbm0gJGxpYlgxMV9jaGVjayB8IGdyZXAgLXEgX19lcnJub19sb2NhdGlvbjsgdGhlbgorCSAgICBpZiBubSAkbGliWDExX2NoZWNrIHwgZ3JlcCBfX2Vycm5vX2xvY2F0aW9uID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCiAJCXdpbmVfY3ZfeF9yZWVudHJhbnQ9eWVzCiAJICAgIGVsc2UKIAkJd2luZV9jdl94X3JlZW50cmFudD1ubwpAQCAtMjQwLDcgKzI0MSw3IEBACiBkbmwgKioqKiBDaGVjayBmb3IgZnVuY3Rpb25zIGFuZCBoZWFkZXIgZmlsZXMgKioqKgogCiBBQ19DSEVDS19GVU5DUyhjbG9uZSBnZXRwYWdlc2l6ZSBtZW1tb3ZlIHNpZ2FsdHN0YWNrIHN0cmVycm9yIHN0cmljbXAgdGNnZXRhdHRyIHRpbWVnbSB1c2xlZXAgd2FpdDQgd2FpdHBpZCB2ZnNjYW5mKQotQUNfQ0hFQ0tfSEVBREVSUyh3Y3R5cGUuaCBzeXMvc3lzY2FsbC5oIHN5c2NhbGwuaCBzeXMvcGFyYW0uaCBzeXMvdmZzLmggc3lzL21vdW50Lmggc3lzL3N0YXRmcy5oIGZsb2F0LmggbGludXgvY2Ryb20uaCBzeXMvY2Rpby5oIHN5cy9maWxpby5oIHN5cy9tb2RlbS5oIHN0cmluZ3MuaCBzeXMvc3RydGlvLmgpCitBQ19DSEVDS19IRUFERVJTKHdjdHlwZS5oIHN5cy9zeXNjYWxsLmggc3lzY2FsbC5oIHN5cy9wYXJhbS5oIHN5cy92ZnMuaCBzeXMvbW91bnQuaCBzeXMvc3RhdGZzLmggZmxvYXQuaCBsaW51eC9jZHJvbS5oIGxpbnV4L3VjZHJvbS5oIHN5cy9jZGlvLmggc3lzL2ZpbGlvLmggc3lzL21vZGVtLmggc3RyaW5ncy5oIHN5cy9zdHJ0aW8uaCkKIEFDX0hFQURFUl9TVEFUKCkKIEFDX0NfQ09OU1QoKQogQUNfVFlQRV9TSVpFX1QoKQpAQCAtNDMyLDYgKzQzMywxNyBAQAogZmkKIAogCitkbmwgKioqIGNoZWNrIGZvciBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZyB3aXRoIG1zZ19hY2NyaWdodHMKKworQUNfQ0FDSEVfQ0hFQ0soImZvciBtc2dfYWNjcmlnaHRzIGluIHN0cnVjdCBtc2doZHIiLCBhY19jdl9jX21zZ19hY2NyaWdodHMsCisgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSxbc3RydWN0IG1zZ2hkciBoZHI7IGhkci5tc2dfYWNjcmlnaHRzPTBdLAorICAgICAgICAgICAgICAgIGFjX2N2X2NfbXNnX2FjY3JpZ2h0cz0ieWVzIiwgYWNfY3ZfY19tc2dfYWNjcmlnaHRzPSJubyIpKQoraWYgdGVzdCAiJGFjX2N2X2NfbXNnX2FjY3JpZ2h0cyIgPSAieWVzIgordGhlbgorICAgIEFDX0RFRklORShIQVZFX01TR0hEUl9BQ0NSSUdIVFMpCitmaQorCiBkbmwgKioqKiBHZW5lcmF0ZSBvdXRwdXQgZmlsZXMgKioqKgogCiBNQUtFX1JVTEVTPU1ha2UucnVsZXMKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuYyBiL2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuYwppbmRleCBiYWE3YTcxLi43Y2MyNGFhIDEwMDY0NAotLS0gYS9jb250cm9scy9jb21jdGwzMnVuZG9jLmMKKysrIGIvY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJoZWFwLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKQEAgLTEyMSw2ICsxMjIsNDQgQEAKIH0KIAogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU3RyX1NldFB0ckEgW0NPTUNUTDMyLjIzNF0KKyAqCisgKiBQQVJBTVMKKyAqICAgICBkd1BhcmFtMSBbSV0KKyAqICAgICBkd1BhcmFtMiBbSV0KKyAqLworCitCT09MMzIgV0lOQVBJCitDT01DVEwzMl9TdHJfU2V0UHRyQSAoTFBTVFIgbHBTdHIsIExQVk9JRCAqbHBQdHIpCit7CisgICAgSU5UMzIgbGVuOworICAgIExQU1RSIHB0cjsKKworICAgIEZJWE1FIChjb21tY3RybCwgIigweCUwOGx4IDB4JTA4bHgpXG4iLCAoRFdPUkQpbHBTdHIsIChEV09SRClscFB0cik7CisgICAgRklYTUUgKGNvbW1jdHJsLCAiKFwiJXNcIiBcIiVzXCIpXG4iLCBscFN0ciwgKExQU1RSKSpscFB0cik7CisKKyAgICBpZiAobHBTdHIpIHsKKwlsZW4gPSBsc3RybGVuMzJBIChscFN0cik7CisJcHRyID0gQ09NQ1RMMzJfUmVBbGxvYyAobHBQdHIsIGxlbiArIDEpOworCWlmICghKHB0cikpCisJICAgIHJldHVybiBGQUxTRTsKKwlsc3RyY3B5MzJBIChwdHIsIGxwU3RyKTsKKwkqbHBQdHIgPSBwdHI7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYgKCpscFB0cikgeworCUNPTUNUTDMyX0ZyZWUgKCpscFB0cik7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEU0FfQ3JlYXRlIFtDT01DVEwzMi4zMjBdIENyZWF0ZXMgYSBkeW5hbWljIHN0cmluZyBhcnJheQogICoKQEAgLTE0Niw2ICsxODUsMTMgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERTQV9EZXN0cm95IFtDT01DVEwzMi4zMjFdIERlc3Ryb3lzIGEgZHluYW1pYyBzdHJpbmcgYXJyYXkKKyAqCisgKiBQQVJBTVMKKyAqICAgICBkd1BhcmFtMSBbSV0KKyAqLworCiBEV09SRCBXSU5BUEkKIERTQV9EZXN0cm95IChEV09SRCBkd1BhcmFtMSkKIHsKQEAgLTE4NCw5ICsyMzAsNyBAQAogCiAvLyAgICBGSVhNRSAoY29tbWN0cmwsICJcIiVzXCJcbiIsIChMUFNUUilkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKIAotICAgIHJldHVybiBsc3RyY3B5MzJBICgoTFBTVFIpZHdQYXJhbTMsIChMUFNUUilkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKLQotLy8gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIChEV09SRClsc3RyY3B5MzJBICgoTFBTVFIpZHdQYXJhbTMsIChMUFNUUilkc2FQdHItPnB0cnNbZHdQYXJhbTJdKTsKIH0KIAogCkBAIC00MzEsMjggKzQ3NSw0NyBAQAogICovCiAKIExQU1RSIFdJTkFQSQotQ09NQ1RMMzJfU3RyQ2hyQSAoTFBTVFIgbHBTdHJpbmcsIENIQVIgY0NoYXIpCitDT01DVEwzMl9TdHJDaHJBIChMUENTVFIgbHBTdHJpbmcsIENIQVIgY0NoYXIpCiB7CiAgICAgcmV0dXJuIHN0cmNociAobHBTdHJpbmcsIGNDaGFyKTsKIH0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFN0clN0cklBIFtDT01DVEwzMi4zNTBdCi0gKgotICogQlVHUwotICogICAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgY2FzZSBzZW5zaXRpdmUsIGJ1dCBpdCBtdXN0bid0LgorICogU3RyU3RySUEgW0NPTUNUTDMyLjM1NV0KICAqLwogCiBMUFNUUiBXSU5BUEkKLUNPTUNUTDMyX1N0clN0cklBIChMUFNUUiBscFN0cjEsIExQU1RSIGxwU3RyMikKK0NPTUNUTDMyX1N0clN0cklBIChMUENTVFIgbHBTdHIxLCBMUENTVFIgbHBTdHIyKQogewotICAgIHJldHVybiBzdHJzdHIgKGxwU3RyMSwgbHBTdHIyKTsKKyAgICBJTlQzMiBsZW4xLCBsZW4yLCBpOworICAgIENIQVIgIGZpcnN0OworCisgICAgaWYgKCpscFN0cjIgPT0gMCkKKwlyZXR1cm4gKChMUFNUUilscFN0cjEpOworICAgIGxlbjEgPSAwOworICAgIHdoaWxlIChscFN0cjFbbGVuMV0gIT0gMCkgKytsZW4xOworICAgIGxlbjIgPSAwOworICAgIHdoaWxlIChscFN0cjJbbGVuMl0gIT0gMCkgKytsZW4yOworICAgIGlmIChsZW4yID09IDApCisJcmV0dXJuICgoTFBTVFIpKGxwU3RyMSArIGxlbjEpKTsKKyAgICBmaXJzdCA9IHRvbG93ZXIgKCpscFN0cjIpOworICAgIHdoaWxlIChsZW4xID49IGxlbjIpIHsKKwlpZiAodG9sb3dlcigqbHBTdHIxKSA9PSBmaXJzdCkgeworCSAgICBmb3IgKGkgPSAxOyBpIDwgbGVuMjsgKytpKQorCQlpZiAodG9sb3dlciAobHBTdHIxW2ldKSAhPSB0b2xvd2VyKGxwU3RyMltpXSkpCisJCSAgICBicmVhazsKKwkgICAgaWYgKGkgPj0gbGVuMikKKwkJcmV0dXJuICgoTFBTVFIpbHBTdHIxKTsKKyAgICAgICAgfQorCSsrbHBTdHIxOyAtLWxlbjE7CisgICAgfQorICAgIHJldHVybiAoTlVMTCk7CiB9CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTdHJUb0ludEEgW0NPTUNUTDMyLjM1N10KKyAqIFN0clRvSW50QSBbQ09NQ1RMMzIuMzU3XSBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHNpZ25lZCBpbnRlZ2VyLgogICovCiAKIElOVDMyIFdJTkFQSQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvY29tbWN0cmwuYyBiL2NvbnRyb2xzL2NvbW1jdHJsLmMKaW5kZXggMjgzODk3Ni4uNzI4ZjEyMyAxMDA2NDQKLS0tIGEvY29udHJvbHMvY29tbWN0cmwuYworKysgYi9jb250cm9scy9jb21tY3RybC5jCkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgSUNDX0lOVEVSTkVUX0NMQVNTRVM6Ci0gICAgICAgIFRSQUNFIChjb21tY3RybCwgIk5vIGludGVybmV0IGNsYXNzZXMgaW1wbGVtZW50ZWQhXG4iKTsKKyAgICAgICAgVFJBQ0UgKGNvbW1jdHJsLCAiTm8gSVBBZGRyZXNzIGNsYXNzIGltcGxlbWVudGVkIVxuIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIElDQ19QQUdFU0NST0xMRVJfQ0xBU1M6CkBAIC0zMjAsMjUgKzMyMCwzNiBAQAogCQkJKFdQQVJBTTMyKXVTdHJ1Y3RTaXplLCAwKTsKIAogCS8qIHNldCBiaXRtYXAgYW5kIGJ1dHRvbiBzaXplICovCi0JU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfU0VUQklUTUFQU0laRSwgMCwKLQkJCU1BS0VMUEFSQU0oKFdPUkQpZHlCaXRtYXAsIChXT1JEKWR4Qml0bWFwKSk7Ci0jaWYgMAotCVNlbmRNZXNzYWdlMzJBIChod25kVEIsIFRCX1NFVEJVVFRPTlNJWkUsIDAsCi0JCQlNQUtFTE9ORygoV09SRClkeUJ1dHRvbiwgKFdPUkQpZHhCdXR0b24pKTsKLSNlbmRpZgotCi0JLyogYWRkIGJpdG1hcHMgKi8KLQlpZiAobkJpdG1hcHMgPiAwKSB7Ci0JICAgIHRiYWIuaEluc3QgPSBoQk1JbnN0OwotCSAgICB0YmFiLm5JRCAgID0gd0JNSUQ7Ci0JICAgIFNlbmRNZXNzYWdlMzJBIChod25kVEIsIFRCX0FEREJJVE1BUCwKLQkJCSAgICAoV1BBUkFNMzIpbkJpdG1hcHMsIChMUEFSQU0pJnRiYWIpOworCWlmIChoQk1JbnN0ID09IEhJTlNUX0NPTU1DVFJMKSB7CisJICAgIGlmICh3Qk1JRCAmIDEpIHsKKwkJU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfU0VUQklUTUFQU0laRSwgMCwKKwkJCQlNQUtFTFBBUkFNKDI2LCAyNSkpOworCQlTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9TRVRCVVRUT05TSVpFLCAwLAorCQkJCU1BS0VMUEFSQU0oMzMsIDMyKSk7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCVNlbmRNZXNzYWdlMzJBIChod25kVEIsIFRCX1NFVEJJVE1BUFNJWkUsIDAsCisJCQkJTUFLRUxQQVJBTSgxNiwgMTUpKTsKKwkJU2VuZE1lc3NhZ2UzMkEgKGh3bmRUQiwgVEJfU0VUQlVUVE9OU0laRSwgMCwKKwkJCQlNQUtFTFBBUkFNKDIzLCAyMikpOworCSAgICB9CisJfQorCWVsc2UgeworCSAgICBTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9TRVRCSVRNQVBTSVpFLCAwLAorCQkJICAgIE1BS0VMUEFSQU0oKFdPUkQpZHlCaXRtYXAsIChXT1JEKWR4Qml0bWFwKSk7CisJICAgIFNlbmRNZXNzYWdlMzJBIChod25kVEIsIFRCX1NFVEJVVFRPTlNJWkUsIDAsCisJCQkgICAgTUFLRUxQQVJBTSgoV09SRClkeUJ1dHRvbiwgKFdPUkQpZHhCdXR0b24pKTsKIAl9CiAKKwkvKiBhZGQgYml0bWFwcyAqLworCXRiYWIuaEluc3QgPSBoQk1JbnN0OworCXRiYWIubklEICAgPSB3Qk1JRDsKKwlTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9BRERCSVRNQVAsCisJCQkoV1BBUkFNMzIpbkJpdG1hcHMsIChMUEFSQU0pJnRiYWIpOworCiAJLyogYWRkIGJ1dHRvbnMgKi8KLQlpZiAoaU51bUJ1dHRvbnMgPiAwKQotCSAgICBTZW5kTWVzc2FnZTMyQSAoaHduZFRCLCBUQl9BRERCVVRUT05TMzJBLAotCQkJICAgIChXUEFSQU0zMilpTnVtQnV0dG9ucywgKExQQVJBTSlscEJ1dHRvbnMpOworCVNlbmRNZXNzYWdlMzJBIChod25kVEIsIFRCX0FEREJVVFRPTlMzMkEsCisJCQkoV1BBUkFNMzIpaU51bUJ1dHRvbnMsIChMUEFSQU0pbHBCdXR0b25zKTsKICAgICB9CiAKICAgICByZXR1cm4gaHduZFRCOwpAQCAtMzg3LDIwICszOTgsMjAgQEAKICAgICB9CiAKICAgICBoUnNyYyA9IEZpbmRSZXNvdXJjZTMyQSAoaEluc3RhbmNlLCAoTFBTVFIpaWRCaXRtYXAsIFJUX0JJVE1BUDMyQSk7Ci0gICAgaWYgKGhSc3JjID09IE5VTEwpCi0JcmV0dXJuIE5VTEw7CisgICAgaWYgKGhSc3JjID09IDApCisJcmV0dXJuIDA7CiAgICAgaGdsYiA9IExvYWRSZXNvdXJjZTMyIChoSW5zdGFuY2UsIGhSc3JjKTsKLSAgICBpZiAoaGdsYiA9PSBOVUxMKQotCXJldHVybiBOVUxMOworICAgIGlmIChoZ2xiID09IDApCisJcmV0dXJuIDA7CiAgICAgbHBCaXRtYXAgPSAoTFBCSVRNQVBJTkZPSEVBREVSKUxvY2tSZXNvdXJjZTMyIChoZ2xiKTsKICAgICBpZiAobHBCaXRtYXAgPT0gTlVMTCkKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIAogICAgIG5Db2xvclRhYmxlU2l6ZSA9ICgxIDw8IGxwQml0bWFwLT5iaUJpdENvdW50KTsKICAgICBuU2l6ZSA9IGxwQml0bWFwLT5iaVNpemUgKyBuQ29sb3JUYWJsZVNpemUgKiBzaXplb2YoUkdCUVVBRCk7CiAgICAgbHBCaXRtYXBJbmZvID0gKExQQklUTUFQSU5GT0hFQURFUilHbG9iYWxBbGxvYzMyIChHTUVNX0ZJWEVELCBuU2l6ZSk7CiAgICAgaWYgKGxwQml0bWFwSW5mbyA9PSBOVUxMKQotCXJldHVybiBOVUxMOworCXJldHVybiAwOwogICAgIFJ0bE1vdmVNZW1vcnkgKGxwQml0bWFwSW5mbywgbHBCaXRtYXAsIG5TaXplKTsKIAogICAgIHBDb2xvclRhYmxlID0gKERXT1JEKikoKChMUEJZVEUpbHBCaXRtYXBJbmZvKSsoVUlOVDMyKWxwQml0bWFwSW5mby0+YmlTaXplKTsKQEAgLTQyMyw3ICs0MzQsNyBAQAogCiAgICAgbldpZHRoICA9IChJTlQzMilscEJpdG1hcEluZm8tPmJpV2lkdGg7CiAgICAgbkhlaWdodCA9IChJTlQzMilscEJpdG1hcEluZm8tPmJpSGVpZ2h0OwotICAgIGhkY1NjcmVlbiA9IEdldERDMzIgKE5VTEwpOworICAgIGhkY1NjcmVlbiA9IEdldERDMzIgKChIV05EMzIpMCk7CiAgICAgaGJtID0gQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcDMyIChoZGNTY3JlZW4sIG5XaWR0aCwgbkhlaWdodCk7CiAgICAgaWYgKGhibSkgewogCUhEQzMyIGhkY0RzdCA9IENyZWF0ZUNvbXBhdGlibGVEQzMyIChoZGNTY3JlZW4pOwpAQCAtNDM2LDcgKzQ0Nyw3IEBACiAJU2VsZWN0T2JqZWN0MzIgKGhkY0RzdCwgaGJtT2xkKTsKIAlEZWxldGVEQzMyIChoZGNEc3QpOwogICAgIH0KLSAgICBSZWxlYXNlREMzMiAoTlVMTCwgaGRjU2NyZWVuKTsKKyAgICBSZWxlYXNlREMzMiAoKEhXTkQzMikwLCBoZGNTY3JlZW4pOwogICAgIEdsb2JhbEZyZWUzMiAoKEhHTE9CQUwzMilscEJpdG1hcEluZm8pOwogICAgIEZyZWVSZXNvdXJjZTMyIChoZ2xiKTsKIApAQCAtNDk1LDcgKzUwNiw3IEBACiAJaWYgKEdldFdpbmRvd0xvbmczMkEgKGh3bmRDdHJsLCBHV0xfU1RZTEUpICYgV1NfVklTSUJMRSkgewogCSAgICBUUkFDRSAoY29tbWN0cmwsICJjb250cm9sIGlkIDB4JXhcbiIsICpscFJ1bik7CiAJICAgIEdldFdpbmRvd1JlY3QzMiAoaHduZEN0cmwsICZyY0N0cmwpOwotCSAgICBNYXBXaW5kb3dQb2ludHMzMiAoTlVMTCwgaHduZCwgKExQUE9JTlQzMikmcmNDdHJsLCAyKTsKKwkgICAgTWFwV2luZG93UG9pbnRzMzIgKChIV05EMzIpMCwgaHduZCwgKExQUE9JTlQzMikmcmNDdHJsLCAyKTsKIAkgICAgU3VidHJhY3RSZWN0MzIgKGxwUmVjdCwgbHBSZWN0LCAmcmNDdHJsKTsKIAl9CiAJbHBSdW4rKzsKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2VkaXQuYyBiL2NvbnRyb2xzL2VkaXQuYwppbmRleCBhY2ZlZjU3Li5iZmI3MjRhIDEwMDY0NAotLS0gYS9jb250cm9scy9lZGl0LmMKKysrIGIvY29udHJvbHMvZWRpdC5jCkBAIC0zNzkzLDggKzM3OTMsOCBAQAogCQlFRElUX0VNX1JlcGxhY2VTZWwod25kLCBlcywgRkFMU0UsICIiKTsKIAl9CiAJZXMtPnhfb2Zmc2V0ID0gMDsKLQllcy0+ZmxhZ3MgfD0gRUZfTU9ESUZJRUQ7Ci0JZXMtPmZsYWdzIHw9IEVGX1VQREFURTsKKwllcy0+ZmxhZ3MgJj0gfkVGX01PRElGSUVEOworCWVzLT5mbGFncyAmPSB+RUZfVVBEQVRFOwogCUVESVRfRU1fU2V0U2VsKHduZCwgZXMsIDAsIDAsIEZBTFNFKTsKIAlFRElUX0VNX1Njcm9sbENhcmV0KHduZCwgZXMpOwogfQpkaWZmIC0tZ2l0IGEvY29udHJvbHMvbGlzdHZpZXcuYyBiL2NvbnRyb2xzL2xpc3R2aWV3LmMKaW5kZXggZDJkNDYyMi4uMWM2MDBjNSAxMDA2NDQKLS0tIGEvY29udHJvbHMvbGlzdHZpZXcuYworKysgYi9jb250cm9scy9saXN0dmlldy5jCkBAIC01NCw4ICs1NCw3IEBACiB7CiAgICAgTElTVFZJRVdfSU5GTyAqaW5mb1B0ciA9IExJU1RWSUVXX0dldEluZm9QdHIod25kUHRyKTsKIAotICAgIGZwcmludGYgKHN0ZGVyciwgIkxJU1RWSUVXOiBTZXRJbWFnZUxpc3QgKDB4JTA4eCAweCUwOGx4KVxuIiwKLQkgICAgIHdQYXJhbSwgbFBhcmFtKTsKKyAgICBGSVhNRSAobGlzdHZpZXcsICIoMHglMDh4IDB4JTA4bHgpXG4iLCB3UGFyYW0sIGxQYXJhbSk7CiAKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyb2xzL21lbnUuYyBiL2NvbnRyb2xzL21lbnUuYwppbmRleCA2ZTYwODU4Li5mYzAxZTUzIDEwMDY0NAotLS0gYS9jb250cm9scy9tZW51LmMKKysrIGIvY29udHJvbHMvbWVudS5jCkBAIC0yOTA3LDE0ICsyOTA3LDE0IEBACiAgICAgewogCVBPUFVQTUVOVSAqbWVudSA9IChQT1BVUE1FTlUgKikgVVNFUl9IRUFQX0xJTl9BRERSKCBpdGVtLT5oU3ViTWVudSApOwogCWlmICghbWVudSkgcmV0dXJuIC0xOwotCWVsc2UgcmV0dXJuIChtZW51LT5uSXRlbXMgPDwgOCkgfCAobWVudS0+d0ZsYWdzICYgMHhmZik7CisJZWxzZSByZXR1cm4gKG1lbnUtPm5JdGVtcyA8PCA4KSB8ICgoaXRlbS0+ZlN0YXRlfGl0ZW0tPmZUeXBlKSAmIDB4ZmYpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotCSAvKiBXZSB1c2VkIHRvIChmcm9tIHdheSBiYWNrIHRoZW4pIG1hc2sgdGhlIHJlc3VsdCB0byAweGZmLiAgKi8KLQkgLyogSSBkb24ndCBrbm93IHdoeSBhbmQgaXQgc2VlbXMgd3JvbmcgYXMgdGhlIGRvY3VtZW50ZWQgKi8KLQkgLyogcmV0dXJuIGZsYWcgTUZfU0VQQVJBVE9SIGlzIG91dHNpZGUgdGhhdCBtYXNrLiAgKi8KLQkgcmV0dXJuIChpdGVtLT5mVHlwZSB8IGl0ZW0tPmZTdGF0ZSk7CisJLyogV2UgdXNlZCB0byAoZnJvbSB3YXkgYmFjayB0aGVuKSBtYXNrIHRoZSByZXN1bHQgdG8gMHhmZi4gICovCisJLyogSSBkb24ndCBrbm93IHdoeSBhbmQgaXQgc2VlbXMgd3JvbmcgYXMgdGhlIGRvY3VtZW50ZWQgKi8KKwkvKiByZXR1cm4gZmxhZyBNRl9TRVBBUkFUT1IgaXMgb3V0c2lkZSB0aGF0IG1hc2suICAqLworCXJldHVybiAoaXRlbS0+ZlR5cGUgfCBpdGVtLT5mU3RhdGUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvcGFnZXIuYyBiL2NvbnRyb2xzL3BhZ2VyLmMKaW5kZXggZTg1ZTYwYS4uMmUzMzVjMCAxMDA2NDQKLS0tIGEvY29udHJvbHMvcGFnZXIuYworKysgYi9jb250cm9scy9wYWdlci5jCkBAIC0yNCw2ICsyNCwxNTIgQEAKICNkZWZpbmUgUEFHRVJfR2V0SW5mb1B0cih3bmRQdHIpICgoUEFHRVJfSU5GTyAqKXduZFB0ci0+d0V4dHJhWzBdKQogCiAKK3N0YXRpYyBfX2lubGluZV9fIExSRVNVTFQKK1BBR0VSX0dldEJrQ29sb3IgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUEFHRVJfSU5GTyAqaW5mb1B0ciA9IFBBR0VSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiAoTFJFU1VMVClpbmZvUHRyLT5jbHJCazsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBMUkVTVUxUCitQQUdFUl9HZXRCb3JkZXIgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUEFHRVJfSU5GTyAqaW5mb1B0ciA9IFBBR0VSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiAoTFJFU1VMVClpbmZvUHRyLT5pQm9yZGVyOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIExSRVNVTFQKK1BBR0VSX0dldEJ1dHRvblNpemUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUEFHRVJfSU5GTyAqaW5mb1B0ciA9IFBBR0VSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHJldHVybiAoTFJFU1VMVClpbmZvUHRyLT5pQnV0dG9uU2l6ZTsKK30KKworCisKKworc3RhdGljIF9faW5saW5lX18gTFJFU1VMVAorUEFHRVJfU2V0QmtDb2xvciAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQQUdFUl9JTkZPICppbmZvUHRyID0gUEFHRVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIENPTE9SUkVGIGNsclRlbXAgPSBpbmZvUHRyLT5jbHJCazsKKworICAgIGluZm9QdHItPmNsckJrID0gKENPTE9SUkVGKWxQYXJhbTsKKworICAgIC8qIEZJWE1FOiByZWRyYXcgKi8KKworICAgIHJldHVybiAoTFJFU1VMVCljbHJUZW1wOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIExSRVNVTFQKK1BBR0VSX1NldEJvcmRlciAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQQUdFUl9JTkZPICppbmZvUHRyID0gUEFHRVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIElOVDMyIG5UZW1wID0gaW5mb1B0ci0+aUJvcmRlcjsKKworICAgIGluZm9QdHItPmlCb3JkZXIgPSAoSU5UMzIpbFBhcmFtOworCisgICAgLyogRklYTUU6IHJlZHJhdyAqLworCisgICAgcmV0dXJuIChMUkVTVUxUKW5UZW1wOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIExSRVNVTFQKK1BBR0VSX1NldEJ1dHRvblNpemUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUEFHRVJfSU5GTyAqaW5mb1B0ciA9IFBBR0VSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBJTlQzMiBuVGVtcCA9IGluZm9QdHItPmlCdXR0b25TaXplOworCisgICAgaW5mb1B0ci0+aUJ1dHRvblNpemUgPSAoSU5UMzIpbFBhcmFtOworCisgICAgLyogRklYTUU6IHJlZHJhdyAqLworCisgICAgcmV0dXJuIChMUkVTVUxUKW5UZW1wOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIExSRVNVTFQKK1BBR0VSX1NldENoaWxkIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFBBR0VSX0lORk8gKmluZm9QdHIgPSBQQUdFUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICBpbmZvUHRyLT5od25kQ2hpbGQgPSAoSFdORDMyKWxQYXJhbTsKKworICAgIC8qIEZJWE1FOiByZWRyYXcgKi8KKworICAgIHJldHVybiAwOworfQorCisKKworc3RhdGljIExSRVNVTFQKK1BBR0VSX0NyZWF0ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBQQUdFUl9JTkZPICppbmZvUHRyOworCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBpbmZvIHN0cnVjdHVyZSAqLworICAgIGluZm9QdHIgPSAoUEFHRVJfSU5GTyAqKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQQUdFUl9JTkZPKSk7CisgICAgd25kUHRyLT53RXh0cmFbMF0gPSAoRFdPUkQpaW5mb1B0cjsKKworICAgIGlmIChpbmZvUHRyID09IE5VTEwpIHsKKwlFUlIgKHRyZWV2aWV3LCAiY291bGQgbm90IGFsbG9jYXRlIGluZm8gbWVtb3J5IVxuIik7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKChQQUdFUl9JTkZPKil3bmRQdHItPndFeHRyYVswXSAhPSBpbmZvUHRyKSB7CisJRVJSIChwYWdlciwgInBvaW50ZXIgYXNzaWdubWVudCBlcnJvciFcbiIpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIHNldCBkZWZhdWx0IHNldHRpbmdzICovCisgICAgaW5mb1B0ci0+aHduZENoaWxkID0gMDsKKyAgICBpbmZvUHRyLT5jbHJCayA9IEdldFN5c0NvbG9yMzIgKENPTE9SX0JUTkZBQ0UpOworICAgIGluZm9QdHItPmlCb3JkZXIgPSAwOworICAgIGluZm9QdHItPmlCdXR0b25TaXplID0gMDsKKworCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1BBR0VSX0Rlc3Ryb3kgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgUEFHRVJfSU5GTyAqaW5mb1B0ciA9IFBBR0VSX0dldEluZm9QdHIod25kUHRyKTsKKworCisKKworICAgIC8qIGZyZWUgdHJlZSB2aWV3IGluZm8gZGF0YSAqLworICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgaW5mb1B0cik7CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorUEFHRVJfRXJhc2VCYWNrZ3JvdW5kIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFBBR0VSX0lORk8gKmluZm9QdHIgPSBQQUdFUl9HZXRJbmZvUHRyKHduZFB0cik7CisgICAgSEJSVVNIMzIgaEJydXNoID0gQ3JlYXRlU29saWRCcnVzaDMyIChpbmZvUHRyLT5jbHJCayk7CisgICAgUkVDVDMyIHJlY3Q7CisKKyAgICBHZXRDbGllbnRSZWN0MzIgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0KTsKKyAgICBGaWxsUmVjdDMyICgoSERDMzIpd1BhcmFtLCAmcmVjdCwgaEJydXNoKTsKKyAgICBEZWxldGVPYmplY3QzMiAoaEJydXNoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworCisKIExSRVNVTFQgV0lOQVBJCiBQYWdlcldpbmRvd1Byb2MgKEhXTkQzMiBod25kLCBVSU5UMzIgdU1zZywgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewpAQCAtMzEsMTEgKzE3Nyw0NCBAQAogCiAgICAgc3dpdGNoICh1TXNnKQogICAgIHsKLS8vCWNhc2UgV01fQ1JFQVRFOgotLy8JICAgIHJldHVybiBQQUdFUl9DcmVhdGUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworLy8JY2FzZSBQR01fRk9SV0FSRE1PVVNFOgogCi0vLwljYXNlIFdNX0RFU1RST1k6Ci0vLwkgICAgcmV0dXJuIFBBR0VSX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCWNhc2UgUEdNX0dFVEJLQ09MT1I6CisJICAgIHJldHVybiBQQUdFUl9HZXRCa0NvbG9yICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgUEdNX0dFVEJPUkRFUjoKKwkgICAgcmV0dXJuIFBBR0VSX0dldEJvcmRlciAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFBHTV9HRVRCVVRUT05TSVpFOgorCSAgICByZXR1cm4gUEFHRVJfR2V0QnV0dG9uU2l6ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgUEdNX0dFVEJVVFRPTlNUQVRFOgorLy8JY2FzZSBQR01fR0VURFJPUFRBUkdFVDoKKy8vCWNhc2UgUEdNX0dFVFBPUzoKKy8vCWNhc2UgUEdNX1JFQ0FMQ1NJWkU6CisKKwljYXNlIFBHTV9TRVRCS0NPTE9SOgorCSAgICByZXR1cm4gUEFHRVJfU2V0QmtDb2xvciAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFBHTV9TRVRCT1JERVI6CisJICAgIHJldHVybiBQQUdFUl9TZXRCb3JkZXIgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBQR01fU0VUQlVUVE9OU0laRToKKwkgICAgcmV0dXJuIFBBR0VSX1NldEJ1dHRvblNpemUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBQR01fU0VUQ0hJTEQ6CisJICAgIHJldHVybiBQQUdFUl9TZXRDaGlsZCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgUEdNX1NFVFBPUzoKKworCWNhc2UgV01fQ1JFQVRFOgorCSAgICByZXR1cm4gUEFHRVJfQ3JlYXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgV01fREVTVFJPWToKKwkgICAgcmV0dXJuIFBBR0VSX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisJY2FzZSBXTV9FUkFTRUJLR05EOgorCSAgICByZXR1cm4gUEFHRVJfRXJhc2VCYWNrZ3JvdW5kICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBXTV9NT1VTRU1PVkU6CiAvLwkgICAgcmV0dXJuIFBBR0VSX01vdXNlTW92ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CmRpZmYgLS1naXQgYS9jb250cm9scy9zdGF0dXMuYyBiL2NvbnRyb2xzL3N0YXR1cy5jCmluZGV4IDkzMTEzZTEuLmYwYmNkMjggMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3N0YXR1cy5jCisrKyBiL2NvbnRyb2xzL3N0YXR1cy5jCkBAIC0xOTAsMTUgKzE5MCwxNSBAQAogfQogCiAKLXN0YXRpYyBMUkVTVUxUCi1TV19HZXRCb3JkZXJzKFNUQVRVU1dJTkRPV0lORk8gKnNlbGYsIEhXTkQzMiBod25kLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitfX2lubGluZV9fIHN0YXRpYyBMUkVTVUxUCitTV19HZXRCb3JkZXJzIChMUEFSQU0gbFBhcmFtKQogewotICAgIExQSU5UMzIJb3V0OworICAgIExQSU5UMzIgb3V0ID0gKExQSU5UMzIpIGxQYXJhbTsKIAotICAgIG91dCA9IChMUElOVDMyKSBsUGFyYW07CiAgICAgb3V0WzBdID0gSE9SWl9CT1JERVI7IC8qIGhvcml6b250YWwgYm9yZGVyIHdpZHRoICovCiAgICAgb3V0WzFdID0gVkVSVF9CT1JERVI7IC8qIHZlcnRpY2FsIGJvcmRlciB3aWR0aCAqLwogICAgIG91dFsyXSA9IEhPUlpfR0FQOyAvKiB3aWR0aCBvZiBib3JkZXIgYmV0d2VlbiByZWN0YW5nbGVzICovCisKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNzY2LDcgKzc2Niw3IEBACiAKICAgICBzd2l0Y2ggKG1zZykgewogICAgIGNhc2UgU0JfR0VUQk9SREVSUzoKLQlyZXR1cm4gU1dfR2V0Qm9yZGVycyhzZWxmLCBod25kLCB3UGFyYW0sIGxQYXJhbSk7CisJcmV0dXJuIFNXX0dldEJvcmRlcnMgKGxQYXJhbSk7CiAgICAgY2FzZSBTQl9HRVRJQ09OOgogICAgICAgICByZXR1cm4gU1dfR2V0SWNvbihzZWxmLCBod25kLCB3UGFyYW0sIGxQYXJhbSk7CiAgICAgY2FzZSBTQl9HRVRQQVJUUzoKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3Rvb2xiYXIuYyBiL2NvbnRyb2xzL3Rvb2xiYXIuYwppbmRleCBiNTYyZGYxLi5jNjA0OTU0IDEwMDY0NAotLS0gYS9jb250cm9scy90b29sYmFyLmMKKysrIGIvY29udHJvbHMvdG9vbGJhci5jCkBAIC0zMjUsNiArMzI1LDkgQEAKICAgICAKICAgICBidG5QdHIgPSBpbmZvUHRyLT5idXR0b25zOwogICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvUHRyLT5uTnVtQnV0dG9uczsgaSsrLCBidG5QdHIrKykgeworCWlmIChidG5QdHItPmZzU3RhdGUgJiBUQlNUQVRFX0hJRERFTikKKwkgICAgY29udGludWU7CisKIAlpZiAoYnRuUHRyLT5mc1N0eWxlICYgVEJTVFlMRV9TRVApIHsKIAkgICAgaWYgKFB0SW5SZWN0MzIgKCZidG5QdHItPnJlY3QsICpscFB0KSkgewogCQlUUkFDRSAodG9vbGJhciwgIiBPTiBTRVBBUkFUT1IgJWQhXG4iLCBpKTsKQEAgLTYxMSwzNyArNjE0LDI0IEBACiAKICAgICBGSVhNRSAodG9vbGJhciwgImF1dG8gc2l6ZSFcbiIpOwogCi0JcGFyZW50ID0gR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpOwotCUdldENsaWVudFJlY3QzMihwYXJlbnQsICZwYXJlbnRfcmVjdCk7CisgICAgcGFyZW50ID0gR2V0UGFyZW50MzIgKHduZFB0ci0+aHduZFNlbGYpOworICAgIEdldENsaWVudFJlY3QzMihwYXJlbnQsICZwYXJlbnRfcmVjdCk7CiAKLQlpZiAod25kUHRyLT5kd1N0eWxlICYgQ0NTX05PUkVTSVpFKQotCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PU0laRTsKLQllbHNlIHsKLQkgICAgaW5mb1B0ci0+bldpZHRoID0gcGFyZW50X3JlY3QucmlnaHQgLSBwYXJlbnRfcmVjdC5sZWZ0OwotCSAgICBUT09MQkFSX0NhbGNUb29sYmFyICh3bmRQdHIpOwotCSAgICBjeSA9IGluZm9QdHItPm5IZWlnaHQ7Ci0JICAgIGN4ID0gaW5mb1B0ci0+bldpZHRoOwotCX0KKyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgQ0NTX05PUkVTSVpFKSB7CisJdVBvc0ZsYWdzIHw9IFNXUF9OT1NJWkU7CisJY3ggPSAwOworCWN5ID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisJaW5mb1B0ci0+bldpZHRoID0gcGFyZW50X3JlY3QucmlnaHQgLSBwYXJlbnRfcmVjdC5sZWZ0OworCVRPT0xCQVJfQ2FsY1Rvb2xiYXIgKHduZFB0cik7CisJY3kgPSBpbmZvUHRyLT5uSGVpZ2h0OworCWN4ID0gaW5mb1B0ci0+bldpZHRoOworICAgIH0KIAotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9QQVJFTlRBTElHTikgewotCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PTU9WRTsKLS8vCSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgKENDU19UT1AgfCBDQ1NfQk9UVE9NKSkKLS8vCQljeSA9IChJTlQzMilISVdPUkQobFBhcmFtKTsKLQl9Ci0jaWYgMAotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9SRVNJWkUpIHsKLQkgICAgdVBvc0ZsYWdzIHw9IFNXUF9OT1NJWkU7Ci0vLwkgICAgY3ggPSAoSU5UMzIpTE9XT1JEKGxQYXJhbSk7Ci0vLwkgICAgY3kgPSAoSU5UMzIpSElXT1JEKGxQYXJhbSk7Ci0gICAgICAgIH0KLQllbHNlIHsKLQkgICAgIC8qIEZJWE1FOiBoYW5kbGUgQ0NTX05PTU9WRVggYW5kIENDU19OT01PVkVZICovCisgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT1BBUkVOVEFMSUdOKQorCXVQb3NGbGFncyB8PSBTV1BfTk9NT1ZFOwogCi0JfQotCi0JaW5mb1B0ci0+bldpZHRoID0gY3g7Ci0JaW5mb1B0ci0+bkhlaWdodCA9IGN5OwotI2VuZGlmCiAgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgQ0NTX05PRElWSURFUikpCiAJY3kgKz0gMjsKIApAQCAtOTI1LDkgKzkxNSwzNSBAQAogCiAvLyA8PCBUT09MQkFSX0dldEJ1dHRvblRleHQzMlcgPj4KIC8vIDw8IFRPT0xCQVJfR2V0Q29sb3JTY2hlbWUgPj4KLS8vIDw8IFRPT0xCQVJfR2V0RGlzYWJsZWRJbWFnZUxpc3QgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9HZXREaXNhYmxlZEltYWdlTGlzdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBUQlNUWUxFX0ZMQVQpCisJcmV0dXJuIChMUkVTVUxUKWluZm9QdHItPmhpbWxEaXM7CisgICAgZWxzZQorCXJldHVybiAwOworfQorCisKIC8vIDw8IFRPT0xCQVJfR2V0RXh0ZW5kZWRTdHlsZSA+PgotLy8gPDwgVE9PTEJBUl9HZXRIb3RJbWFnZUxpc3QgPj4KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9HZXRIb3RJbWFnZUxpc3QgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CisKKyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgVEJTVFlMRV9GTEFUKQorCXJldHVybiAoTFJFU1VMVClpbmZvUHRyLT5oaW1sSG90OworICAgIGVsc2UKKwlyZXR1cm4gMDsKK30KKworCiAvLyA8PCBUT09MQkFSX0dldEhvdEl0ZW0gPj4KIAogCkBAIC05MzUsNyArOTUxLDExIEBACiBUT09MQkFSX0dldEltYWdlTGlzdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKLSAgICByZXR1cm4gKExSRVNVTFQpaW5mb1B0ci0+aGltbERlZjsgCisKKyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgVEJTVFlMRV9GTEFUKQorCXJldHVybiAoTFJFU1VMVClpbmZvUHRyLT5oaW1sRGVmOworICAgIGVsc2UKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC05NjksNyArOTg5LDE4IEBACiB9CiAKIAotLy8gPDwgVE9PTEJBUl9HZXRNYXhTaXplID4+CitzdGF0aWMgTFJFU1VMVAorVE9PTEJBUl9HZXRNYXhTaXplIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExQU0laRTMyIGxwU2l6ZSA9IChMUFNJWkUzMilsUGFyYW07CisKKworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKwogLy8gPDwgVE9PTEJBUl9HZXRPYmplY3QgPj4KIC8vIDw8IFRPT0xCQVJfR2V0UGFkZGluZyA+PgogLy8gPDwgVE9PTEJBUl9HZXRSZWN0ID4+CkBAIC0xMzQ5LDEwICsxMzgwLDYwIEBACiAKIAogLy8gPDwgVE9PTEJBUl9TZXRDb2xvclNjaGVtZSA+PgotLy8gPDwgVE9PTEJBUl9TZXREaXNhYmxlZEltYWdlTGlzdCA+PgorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MQkFSX1NldERpc2FibGVkSW1hZ2VMaXN0IChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIEhJTUFHRUxJU1QgaGltbFRlbXA7CisKKyAgICBpZiAoISh3bmRQdHItPmR3U3R5bGUgJiBUQlNUWUxFX0ZMQVQpKQorCXJldHVybiAwOworCisgICAgaGltbFRlbXAgPSBpbmZvUHRyLT5oaW1sRGlzOworICAgIGluZm9QdHItPmhpbWxEaXMgPSAoSElNQUdFTElTVClsUGFyYW07CisKKyAgICAvKiBGSVhNRTogcmVkcmF3ID8gKi8KKworICAgIHJldHVybiAoTFJFU1VMVCloaW1sVGVtcDsgCit9CisKKwogLy8gPDwgVE9PTEJBUl9TZXREcmF3VGV4dEZsYWdzID4+Ci0vLyA8PCBUT09MQkFSX1NldEV4dGVuZGVkU3R5bGUgPj4KLS8vIDw8IFRPT0xCQVJfU2V0SG90SW1hZ2VMaXN0ID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xCQVJfU2V0RXh0ZW5kZWRTdHlsZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBEV09SRCBkd1RlbXA7CisKKyAgICBkd1RlbXAgPSBpbmZvUHRyLT5kd0V4U3R5bGU7CisgICAgaW5mb1B0ci0+ZHdFeFN0eWxlID0gKERXT1JEKWxQYXJhbTsKKworICAgIHJldHVybiAoTFJFU1VMVClkd1RlbXA7IAorfQorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MQkFSX1NldEhvdEltYWdlTGlzdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MQkFSX0lORk8gKmluZm9QdHIgPSBUT09MQkFSX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBISU1BR0VMSVNUIGhpbWxUZW1wOworCisgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgVEJTVFlMRV9GTEFUKSkKKwlyZXR1cm4gMDsKKworICAgIGhpbWxUZW1wID0gaW5mb1B0ci0+aGltbEhvdDsKKyAgICBpbmZvUHRyLT5oaW1sSG90ID0gKEhJTUFHRUxJU1QpbFBhcmFtOworCisgICAgLyogRklYTUU6IHJlZHJhdyA/ICovCisKKyAgICByZXR1cm4gKExSRVNVTFQpaGltbFRlbXA7IAorfQorCisKIC8vIDw8IFRPT0xCQVJfU2V0SG90SXRlbSA+PgogCiAKQEAgLTEzNjIsNiArMTQ0Myw5IEBACiAgICAgVE9PTEJBUl9JTkZPICppbmZvUHRyID0gVE9PTEJBUl9HZXRJbmZvUHRyKHduZFB0cik7CiAgICAgSElNQUdFTElTVCBoaW1sVGVtcDsKIAorICAgIGlmICghKHduZFB0ci0+ZHdTdHlsZSAmIFRCU1RZTEVfRkxBVCkpCisJcmV0dXJuIDA7CisKICAgICBoaW1sVGVtcCA9IGluZm9QdHItPmhpbWxEZWY7CiAgICAgaW5mb1B0ci0+aGltbERlZiA9IChISU1BR0VMSVNUKWxQYXJhbTsKIApAQCAtMTUyNiw2ICsxNjEwLDE0IEBACiAgICAgU3lzdGVtUGFyYW1ldGVyc0luZm8zMkEgKFNQSV9HRVRJQ09OVElUTEVMT0dGT05ULCAwLCAmbG9nRm9udCwgMCk7CiAgICAgaW5mb1B0ci0+aEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3QzMkEgKCZsb2dGb250KTsKIAorICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBUQlNUWUxFX1RPT0xUSVBTKSB7CisJLyogQ3JlYXRlIHRvb2x0aXAgY29udHJvbCAqLworLy8JaW5mb1B0ci0+aHduZFRvb2xUaXAgPSBDcmVhdGVXaW5kb3dFeDMyQSAoLi4uLik7CisKKwkvKiBTZW5kIE5NX1RPT0xUSVBTQ1JFQVRFRCBub3RpZmljYXRpb24gKi8KKworICAgIH0KKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTM1LDcgKzE2MjcsNyBAQAogewogICAgIFRPT0xCQVJfSU5GTyAqaW5mb1B0ciA9IFRPT0xCQVJfR2V0SW5mb1B0cih3bmRQdHIpOwogCi0gICAgLyogZGVsZXRlIHRvb2wgdGlwICovCisgICAgLyogZGVsZXRlIHRvb2x0aXAgY29udHJvbCAqLwogICAgIGlmIChpbmZvUHRyLT5od25kVG9vbFRpcCkKIAlEZXN0cm95V2luZG93MzIgKGluZm9QdHItPmh3bmRUb29sVGlwKTsKIApAQCAtMTg3MSw2ICsxOTYzLDcgQEAKICAgICBJTlQzMiAgZmxhZ3M7CiAgICAgVUlOVDMyIHVQb3NGbGFncyA9IDA7CiAKKyAgICAvKiBSZXNpemUgZGVhZGxvY2sgY2hlY2sgKi8KICAgICBpZiAoaW5mb1B0ci0+YkF1dG9TaXplKSB7CiAJaW5mb1B0ci0+YkF1dG9TaXplID0gRkFMU0U7CiAJcmV0dXJuIDA7CkBAIC0xODg5LDggKzE5ODIsMTcgQEAKIAlwYXJlbnQgPSBHZXRQYXJlbnQzMiAod25kUHRyLT5od25kU2VsZik7CiAJR2V0Q2xpZW50UmVjdDMyKHBhcmVudCwgJnBhcmVudF9yZWN0KTsKIAotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9SRVNJWkUpCisJaWYgKHduZFB0ci0+ZHdTdHlsZSAmIENDU19OT1JFU0laRSkgewogCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PU0laRTsKKworCSAgICAvKiBGSVhNRSAqLworLy8JICAgIGluZm9QdHItPm5XaWR0aCA9IHBhcmVudF9yZWN0LnJpZ2h0IC0gcGFyZW50X3JlY3QubGVmdDsKKwkgICAgY3kgPSBpbmZvUHRyLT5uSGVpZ2h0OworCSAgICBjeCA9IGluZm9QdHItPm5XaWR0aDsKKwkgICAgVE9PTEJBUl9DYWxjVG9vbGJhciAod25kUHRyKTsKKwkgICAgaW5mb1B0ci0+bldpZHRoID0gY3g7CisJICAgIGluZm9QdHItPm5IZWlnaHQgPSBjeTsKKwl9CiAJZWxzZSB7CiAJICAgIGluZm9QdHItPm5XaWR0aCA9IHBhcmVudF9yZWN0LnJpZ2h0IC0gcGFyZW50X3JlY3QubGVmdDsKIAkgICAgVE9PTEJBUl9DYWxjVG9vbGJhciAod25kUHRyKTsKQEAgLTE5MDAsMjMgKzIwMDIsMTAgQEAKIAogCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9QQVJFTlRBTElHTikgewogCSAgICB1UG9zRmxhZ3MgfD0gU1dQX05PTU9WRTsKLS8vCSAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgKENDU19UT1AgfCBDQ1NfQk9UVE9NKSkKLS8vCQljeSA9IChJTlQzMilISVdPUkQobFBhcmFtKTsKLQl9Ci0jaWYgMAotCWlmICh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9SRVNJWkUpIHsKLQkgICAgdVBvc0ZsYWdzIHw9IFNXUF9OT1NJWkU7Ci0vLwkgICAgY3ggPSAoSU5UMzIpTE9XT1JEKGxQYXJhbSk7Ci0vLwkgICAgY3kgPSAoSU5UMzIpSElXT1JEKGxQYXJhbSk7Ci0gICAgICAgIH0KLQllbHNlIHsKLQkgICAgIC8qIEZJWE1FOiBoYW5kbGUgQ0NTX05PTU9WRVggYW5kIENDU19OT01PVkVZICovCi0KKwkgICAgY3kgPSBpbmZvUHRyLT5uSGVpZ2h0OworCSAgICBjeCA9IGluZm9QdHItPm5XaWR0aDsKIAl9CiAKLQlpbmZvUHRyLT5uV2lkdGggPSBjeDsKLQlpbmZvUHRyLT5uSGVpZ2h0ID0gY3k7Ci0jZW5kaWYKIAlpZiAoISh3bmRQdHItPmR3U3R5bGUgJiBDQ1NfTk9ESVZJREVSKSkKIAkgICAgY3kgKz0gMjsKIApAQCAtMjAwMCw5ICsyMDg5LDE1IEBACiAKIC8vCWNhc2UgVEJfR0VUQlVUVE9OVEVYVDMyVzoKIC8vCWNhc2UgVEJfR0VUQ09MT1JTQ0hFTUU6CQkJLyogNC43MSAqLwotLy8JY2FzZSBUQl9HRVRESVNBQkxFRElNQUdFTElTVDoJCS8qIDQuNzAgKi8KKworCWNhc2UgVEJfR0VURElTQUJMRURJTUFHRUxJU1Q6CisJICAgIHJldHVybiBUT09MQkFSX0dldERpc2FibGVkSW1hZ2VMaXN0ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwogLy8JY2FzZSBUQl9HRVRFWFRFTkRFRFNUWUxFOgkJLyogNC43MSAqLwotLy8JY2FzZSBUQl9HRVRIT1RJTUFHRUxJU1Q6CQkvKiA0LjcwICovCisKKwljYXNlIFRCX0dFVEhPVElNQUdFTElTVDoKKwkgICAgcmV0dXJuIFRPT0xCQVJfR2V0SG90SW1hZ2VMaXN0ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwogLy8JY2FzZSBUQl9HRVRIT1RJVEVNOgkJCS8qIDQuNzEgKi8KIAogCWNhc2UgVEJfR0VUSU1BR0VMSVNUOgpAQCAtMjAxNCw3ICsyMTA5LDkgQEAKIAljYXNlIFRCX0dFVElURU1SRUNUOgogCSAgICByZXR1cm4gVE9PTEJBUl9HZXRJdGVtUmVjdCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgVEJfR0VUTUFYU0laRToJCQkvKiA0LjcxICovCisJY2FzZSBUQl9HRVRNQVhTSVpFOgorCSAgICByZXR1cm4gVE9PTEJBUl9HZXRNYXhTaXplICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwogLy8JY2FzZSBUQl9HRVRPQkpFQ1Q6CQkJLyogNC43MSAqLwogLy8JY2FzZSBUQl9HRVRQQURESU5HOgkJCS8qIDQuNzEgKi8KIC8vCWNhc2UgVEJfR0VUUkVDVDoJCQkvKiA0LjcwICovCkBAIC0yMDk5LDEwICsyMTk2LDE4IEBACiAJICAgIHJldHVybiBUT09MQkFSX1NldENtZElkICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUQl9TRVRDT0xPUlNDSEVNRToJCQkvKiA0LjcxICovCi0vLwljYXNlIFRCX1NFVERJU0FCTEVESU1BR0VMSVNUOgkJLyogNC43MCAqLworCisJY2FzZSBUQl9TRVRESVNBQkxFRElNQUdFTElTVDoKKwkgICAgcmV0dXJuIFRPT0xCQVJfU2V0RGlzYWJsZWRJbWFnZUxpc3QgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCiAvLwljYXNlIFRCX1NFVERSQVdURVhURkxBR1M6CQkvKiA0LjcxICovCi0vLwljYXNlIFRCX1NFVEVYVEVOREVEU1RZTEU6CQkvKiA0LjcxICovCi0vLwljYXNlIFRCX1NFVEhPVElNQUdFTElTVDoJCS8qIDQuNzAgKi8KKworCWNhc2UgVEJfU0VURVhURU5ERURTVFlMRToKKwkgICAgcmV0dXJuIFRPT0xCQVJfU2V0RXh0ZW5kZWRTdHlsZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRCX1NFVEhPVElNQUdFTElTVDoKKwkgICAgcmV0dXJuIFRPT0xCQVJfU2V0SG90SW1hZ2VMaXN0ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKwogLy8JY2FzZSBUQl9TRVRIT1RJVEVNOgkJCS8qIDQuNzEgKi8KIAogCWNhc2UgVEJfU0VUSU1BR0VMSVNUOgpAQCAtMjEzNyw2ICsyMjQyLDcgQEAKIAljYXNlIFRCX1NFVFVOSUNPREVGT1JNQVQ6CiAJICAgIHJldHVybiBUT09MQkFSX1NldFVuaWNvZGVGb3JtYXQgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCisKIAljYXNlIFdNX0NSRUFURToKIAkgICAgcmV0dXJuIFRPT0xCQVJfQ3JlYXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvdG9vbHRpcHMuYyBiL2NvbnRyb2xzL3Rvb2x0aXBzLmMKaW5kZXggM2VmY2Y4Ny4uNjlhMDBlZiAxMDA2NDQKLS0tIGEvY29udHJvbHMvdG9vbHRpcHMuYworKysgYi9jb250cm9scy90b29sdGlwcy5jCkBAIC0zLDE1ICszLDggQEAKICAqCiAgKiBDb3B5cmlnaHQgMTk5OCBFcmljIEtvaGwKICAqCi0gKiBOT1RFUwotICogICBQTEVBU0UgZG9uJ3QgdHJ5IHRvIGltcHJvdmUgb3IgY2hhbmdlIHRoaXMgY29kZSByaWdodCBub3cuIE1hbnkKLSAqICAgZmVhdHVyZXMgYXJlIHN0aWxsIG1pc3NpbmcsIGJ1dCBJJ20gd29ya2luZyBvbiBpdC4gSSB3YW50IHRvIGF2b2lkCi0gKiAgIGFueSBjb25mdXNpb24uIFRoaXMgbm90ZSB3aWxsIGJlIHJlbW92ZWQgYXMgc29vbiBhcyBtb3N0IG9mIHRoZQotICogICBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQuCi0gKiAgICAgRXJpYyA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+Ci0gKgogICogVE9ETzoKLSAqICAgLSBNb3N0IG1lc3NhZ2VzLgorICogICAtIFNvbWUgbWVzc2FnZXMuCiAgKiAgIC0gQWxsIG5vdGlmaWNhdGlvbnMuCiAgKgogICogVGVzdGluZzoKQEAgLTIwLDggKzEzLDggQEAKICAqICAgLSBhZGRpdGlvbmFsIGZlYXR1cmVzLgogICoKICAqIEZJWE1FOgotICogICAtIERlbFRvb2wzMkEgaW5jb21wbGV0ZS4KLSAqICAgLSBHZXRDdXJyZW50VG9vbDMyQSBpbmNvbXBsZXRlLgorICogICAtIERpc3BsYXkgY29kZS4KKyAqICAgLSBNaXNzaW5nIFVuaWNvZGUgc3VwcG9ydC4KICAqLwogCiAjaW5jbHVkZSAid2luZG93cy5oIgpAQCAtMzIsMTEgKzI1LDExOCBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAKIAorI2RlZmluZSBJRF9USU1FUjEgIDEKKyNkZWZpbmUgSURfVElNRVIyICAyCisKICNkZWZpbmUgVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpICgoVE9PTFRJUFNfSU5GTyAqKXduZFB0ci0+d0V4dHJhWzBdKQogCiAKK3N0YXRpYyBWT0lECitUT09MVElQU19SZWZyZXNoIChXTkQgKnduZFB0ciwgSERDMzIgaGRjKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgUkVDVDMyIHJjOworICAgIElOVDMyIG9sZEJrTW9kZTsKKyAgICBIRk9OVDMyIGhPbGRGb250OworCisgICAgR2V0Q2xpZW50UmVjdDMyICh3bmRQdHItPmh3bmRTZWxmLCAmcmMpOworICAgIG9sZEJrTW9kZSA9IFNldEJrTW9kZTMyIChoZGMsIFRSQU5TUEFSRU5UKTsKKyAgICBTZXRUZXh0Q29sb3IzMiAoaGRjLCBpbmZvUHRyLT5jbHJUZXh0KTsKKyAgICBoT2xkRm9udCA9IFNlbGVjdE9iamVjdDMyIChoZGMsIGluZm9QdHItPmhGb250KTsKKyAgICBEcmF3VGV4dDMyQSAoaGRjLCBpbmZvUHRyLT5zelRpcFRleHQsIC0xLCAmcmMsIERUX0VYVEVSTkFMTEVBRElORyk7CisgICAgU2VsZWN0T2JqZWN0MzIgKGhkYywgaE9sZEZvbnQpOworICAgIGlmIChvbGRCa01vZGUgIT0gVFJBTlNQQVJFTlQpCisJU2V0QmtNb2RlMzIgKGhkYywgb2xkQmtNb2RlKTsKK30KKworCitzdGF0aWMgVk9JRAorVE9PTFRJUFNfR2V0VGlwVGV4dCAoV05EICp3bmRQdHIsIFRPT0xUSVBTX0lORk8gKmluZm9QdHIpCit7CisgICAgVFRUT09MX0lORk8gKnRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbaW5mb1B0ci0+bkN1cnJlbnRUb29sXTsKKworICAgIGlmICh0b29sUHRyLT5oaW5zdCkgeworCUxvYWRTdHJpbmczMkEgKHRvb2xQdHItPmhpbnN0LCAoVUlOVDMyKXRvb2xQdHItPmxwc3pUZXh0LAorCQkgICAgICAgaW5mb1B0ci0+c3pUaXBUZXh0LCBJTkZPVElQU0laRSk7CisgICAgfQorICAgIGVsc2UgaWYgKHRvb2xQdHItPmxwc3pUZXh0KSB7CisJaWYgKHRvb2xQdHItPmxwc3pUZXh0ID09IExQU1RSX1RFWFRDQUxMQkFDSzMyQSkgeworCSAgICBOTVRURElTUElORk9BIHR0bm1kaTsKKworCSAgICAvKiBmaWxsIE5NSERSIHN0cnVjdCAqLworCSAgICB0dG5tZGkuaGRyLmh3bmRGcm9tID0gd25kUHRyLT5od25kU2VsZjsKKwkgICAgdHRubWRpLmhkci5pZEZyb20gPSBpbmZvUHRyLT5uQ3VycmVudFRvb2w7CisJICAgIHR0bm1kaS5oZHIuY29kZSA9IFRUTl9HRVRESVNQSU5GT0E7CisKKwkgICAgU2VuZE1lc3NhZ2UzMkEgKEdldFBhcmVudDMyICh3bmRQdHItPmh3bmRTZWxmKSwgV01fTk9USUZZLAorCQkJICAgIChXUEFSQU0zMil3bmRQdHItPndJRG1lbnUsIChMUEFSQU0pJnR0bm1kaSk7CisKKwkgICAgLyogRklYTUU6IHBhcnRpYWwgKi8KKwkgICAgbHN0cmNweW4zMkEgKGluZm9QdHItPnN6VGlwVGV4dCwgdHRubWRpLnN6VGV4dCwgSU5GT1RJUFNJWkUpOworCisJfQorCWVsc2UKKwkgICAgbHN0cmNweW4zMkEgKGluZm9QdHItPnN6VGlwVGV4dCwgdG9vbFB0ci0+bHBzelRleHQsIElORk9USVBTSVpFKTsKKyAgICB9Cit9CisKKworc3RhdGljIFZPSUQKK1RPT0xUSVBTX0NhbGNUaXBTaXplIChXTkQgKnduZFB0ciwgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciwgTFBTSVpFMzIgbHBTaXplKQoreworICAgIEhEQzMyIGhkYzsKKyAgICBIRk9OVDMyIGhPbGRGb250OworICAgIFJFQ1QzMiByYzsKKworICAgIGhkYyA9IEdldERDMzIgKHduZFB0ci0+aHduZFNlbGYpOworICAgIGhPbGRGb250ID0gU2VsZWN0T2JqZWN0MzIgKGhkYywgaW5mb1B0ci0+aEZvbnQpOworICAgIERyYXdUZXh0MzJBIChoZGMsIGluZm9QdHItPnN6VGlwVGV4dCwgLTEsICZyYywgRFRfRVhURVJOQUxMRUFESU5HIHwgRFRfQ0FMQ1JFQ1QpOworICAgIFNlbGVjdE9iamVjdDMyIChoZGMsIGhPbGRGb250KTsKKyAgICBSZWxlYXNlREMzMiAoaGRjLCB3bmRQdHItPmh3bmRTZWxmKTsKKworICAgIGxwU2l6ZS0+Y3ggPSByYy5yaWdodCAtIHJjLmxlZnQgKyA0OworICAgIGxwU2l6ZS0+Y3kgPSByYy5ib3R0b20gLSByYy50b3AgKyA0OworfQorCisKK3N0YXRpYyBWT0lECitUT09MVElQU19TaG93IChXTkQgKnduZFB0ciwgVE9PTFRJUFNfSU5GTyAqaW5mb1B0cikKK3sKKyAgICBQT0lOVDMyIHB0OworICAgIFNJWkUzMiBzaXplOworCisgICAgaW5mb1B0ci0+bkN1cnJlbnRUb29sID0gaW5mb1B0ci0+blRvb2w7CisgICAgRklYTUUgKHRvb2x0aXBzLCAiU2hvdyB0b29sdGlwICVkIVxuIiwgaW5mb1B0ci0+bkN1cnJlbnRUb29sKTsKKworICAgIEdldEN1cnNvclBvczMyICgmcHQpOworCisgICAgVE9PTFRJUFNfR2V0VGlwVGV4dCAod25kUHRyLCBpbmZvUHRyKTsKKyAgICBUUkFDRSAodG9vbHRpcHMsICJcIiVzXCJcbiIsIGluZm9QdHItPnN6VGlwVGV4dCk7CisKKyAgICBUT09MVElQU19DYWxjVGlwU2l6ZSAod25kUHRyLCBpbmZvUHRyLCAmc2l6ZSk7CisKKyAgICBTZXRXaW5kb3dQb3MzMiAod25kUHRyLT5od25kU2VsZiwgSFdORF9UT1AsIHB0LngsIHB0LnkgKyAyMCwKKwkJICAgIHNpemUuY3gsIHNpemUuY3ksIFNXUF9TSE9XV0lORE9XKTsKKworICAgIFNldFRpbWVyMzIgKHduZFB0ci0+aHduZFNlbGYsIElEX1RJTUVSMiwgaW5mb1B0ci0+bkF1dG9Qb3BUaW1lLCAwKTsKK30KKworCitzdGF0aWMgVk9JRAorVE9PTFRJUFNfSGlkZSAoV05EICp3bmRQdHIsIFRPT0xUSVBTX0lORk8gKmluZm9QdHIpCit7CisgICAgaWYgKGluZm9QdHItPm5DdXJyZW50VG9vbCA9PSAtMSkKKwlyZXR1cm47CisKKyAgICBGSVhNRSAodG9vbHRpcHMsICJIaWRlIHRvb2x0aXAgJWQhXG4iLCBpbmZvUHRyLT5uQ3VycmVudFRvb2wpOworICAgIEtpbGxUaW1lcjMyICh3bmRQdHItPmh3bmRTZWxmLCBJRF9USU1FUjIpOworICAgIGluZm9QdHItPm5DdXJyZW50VG9vbCA9IC0xOworICAgIFNldFdpbmRvd1BvczMyICh3bmRQdHItPmh3bmRTZWxmLCBIV05EX1RPUCwgMCwgMCwgMCwgMCwgU1dQX0hJREVXSU5ET1cpOworfQorCisKIHN0YXRpYyBJTlQzMgotVE9PTFRJUFNfR2V0SW5kZXhGcm9tSW5mb0EgKFRPT0xUSVBTX0lORk8gKmluZm9QdHIsIExQVE9PTElORk9BIGxwVG9vbEluZm8pCitUT09MVElQU19HZXRJbmRleEZyb21JbmZvQSAoVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciwgTFBUVFRPT0xJTkZPQSBscFRvb2xJbmZvKQogewogICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOwogICAgIElOVDMyIG5JbmRleDsKQEAgLTUyLDI4ICsxNTIsMzIgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKLS8qCisKIHN0YXRpYyBJTlQzMgotVE9PTFRJUFNfR2V0SW5kZXhGcm9tUG9pbnQgKFRPT0xUSVBTX0lORk8gKmluZm9QdHIsIExQUE9JTlQzMiBscFB0KQorVE9PTFRJUFNfR2V0SW5kZXhGcm9tUG9pbnQgKFRPT0xUSVBTX0lORk8gKmluZm9QdHIsIEhXTkQzMiBod25kLCBMUFBPSU5UMzIgbHBQdCkKIHsKICAgICBUVFRPT0xfSU5GTyAqdG9vbFB0cjsKLSAgICBJTlQzMiBuSW5kZXg7CisgICAgSU5UMzIgIG5JbmRleDsKIAogICAgIGZvciAobkluZGV4ID0gMDsgbkluZGV4IDwgaW5mb1B0ci0+dU51bVRvb2xzOyBuSW5kZXgrKykgewogCXRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbbkluZGV4XTsKIAotCWlmIChscFRvb2xJbmZvLT51RmxhZ3MgJiBUVEZfSURJU0hXTkQpIHsKLQkgICAgaWYgKFB0SW5SZWN0ICgKKwlpZiAodG9vbFB0ci0+dUZsYWdzICYgVFRGX0lESVNIV05EKSB7CisJICAgIGlmICgoSFdORDMyKXRvb2xQdHItPnVJZCA9PSBod25kKQorCQlyZXR1cm4gbkluZGV4OwogCX0KIAllbHNlIHsKLQorCSAgICBpZiAoaHduZCAhPSB0b29sUHRyLT5od25kKQorCQljb250aW51ZTsKKwkgICAgaWYgKCFQdEluUmVjdDMyICgmdG9vbFB0ci0+cmVjdCwgKmxwUHQpKQorCQljb250aW51ZTsKIAkgICAgcmV0dXJuIG5JbmRleDsKIAl9CiAgICAgfQogCiAgICAgcmV0dXJuIC0xOwogfQotKi8KKwogCiBzdGF0aWMgTFJFU1VMVAogVE9PTFRJUFNfQWN0aXZhdGUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCkBAIC05Nyw3ICsyMDEsNyBAQAogVE9PTFRJUFNfQWRkVG9vbDMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwotICAgIExQVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUT09MSU5GT0EpbFBhcmFtOworICAgIExQVFRUT09MSU5GT0EgbHBUb29sSW5mbyA9IChMUFRUVE9PTElORk9BKWxQYXJhbTsKICAgICBUVFRPT0xfSU5GTyAqdG9vbFB0cjsKIAogICAgIGlmIChscFRvb2xJbmZvID09IE5VTEwpIHJldHVybiBGQUxTRTsKQEAgLTE0MiwxMCArMjQ2LDkgQEAKIAl9CiAgICAgfQogCi0gICAgaWYgKGxwVG9vbEluZm8tPmNiU2l6ZSA+PSBzaXplb2YoVE9PTElORk9BKSkKKyAgICBpZiAobHBUb29sSW5mby0+Y2JTaXplID49IHNpemVvZihUVFRPT0xJTkZPQSkpCiAJdG9vbFB0ci0+bFBhcmFtID0gbHBUb29sSW5mby0+bFBhcmFtOwogCi0KICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMTU3LDcgKzI2MCw3IEBACiBUT09MVElQU19EZWxUb29sMzJBIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7Ci0gICAgTFBUT09MSU5GT0EgbHBUb29sSW5mbyA9IChMUFRPT0xJTkZPQSlsUGFyYW07CisgICAgTFBUVFRPT0xJTkZPQSBscFRvb2xJbmZvID0gKExQVFRUT09MSU5GT0EpbFBhcmFtOwogICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOwogICAgIElOVDMyIG5JbmRleDsKIApAQCAtMTY5LDE5ICsyNzIsMzcgQEAKIAogICAgIFRSQUNFICh0b29sdGlwcywgImluZGV4PSVkXG4iLCBuSW5kZXgpOwogCi0KLS8qICAgIGRlbGV0ZSB0b29sIGZyb20gdG9vbCBsaXN0ICovCi0vKgorICAgIC8qIGRlbGV0ZSB0ZXh0IHN0cmluZyAqLwogICAgIHRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbbkluZGV4XTsgCi0KLSAgICAvLyBkZWxldGUgdGV4dCBzdHJpbmcKICAgICBpZiAoKHRvb2xQdHItPmhpbnN0KSAmJiAodG9vbFB0ci0+bHBzelRleHQpKSB7CiAJaWYgKHRvb2xQdHItPmxwc3pUZXh0ICE9IExQU1RSX1RFWFRDQUxMQkFDSzMyQSkKIAkgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCB0b29sUHRyLT5scHN6VGV4dCk7CiAgICAgfQogCisgICAgLyogZGVsZXRlIHRvb2wgZnJvbSB0b29sIGxpc3QgKi8KKyAgICBpZiAoaW5mb1B0ci0+dU51bVRvb2xzID09IDEpIHsKKwlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGluZm9QdHItPnRvb2xzKTsKKwlpbmZvUHRyLT50b29scyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgeworCVRUVE9PTF9JTkZPICpvbGRUb29scyA9IGluZm9QdHItPnRvb2xzOworCWluZm9QdHItPnRvb2xzID0KKwkgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgSEVBUF9aRVJPX01FTU9SWSwKKwkJICAgICAgIHNpemVvZihUVFRPT0xfSU5GTykgKiAoaW5mb1B0ci0+dU51bVRvb2xzIC0gMSkpOwogCi0qLworCWlmIChuSW5kZXggPiAwKQorCSAgICBtZW1jcHkgKCZpbmZvUHRyLT50b29sc1swXSwgJm9sZFRvb2xzWzBdLAorCQkgICAgbkluZGV4ICogc2l6ZW9mKFRUVE9PTF9JTkZPKSk7CisKKwlpZiAobkluZGV4IDwgaW5mb1B0ci0+dU51bVRvb2xzIC0gMSkKKwkgICAgbWVtY3B5ICgmaW5mb1B0ci0+dG9vbHNbbkluZGV4XSwgJm9sZFRvb2xzW25JbmRleCArIDFdLAorCQkgICAgKGluZm9QdHItPnVOdW1Ub29scyAtIG5JbmRleCAtIDEpICogc2l6ZW9mKFRUVE9PTF9JTkZPKSk7CisKKwlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG9sZFRvb2xzKTsKKyAgICB9CisKKyAgICBpbmZvUHRyLT51TnVtVG9vbHMtLTsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTQsNyArMzE1LDcgQEAKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwogICAgIFVJTlQzMiB1SW5kZXggPSAoVUlOVDMyKXdQYXJhbTsKLSAgICBMUFRPT0xJTkZPQSBscFRvb2xJbmZvID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBMUFRUVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUVFRPT0xJTkZPQSlsUGFyYW07CiAgICAgVFRUT09MX0lORk8gKnRvb2xQdHI7CiAKICAgICBpZiAodUluZGV4ID49IGluZm9QdHItPnVOdW1Ub29scykgcmV0dXJuIEZBTFNFOwpAQCAtMjEyLDcgKzMzMyw3IEBACiAgICAgbHBUb29sSW5mby0+aGluc3QgICAgPSB0b29sUHRyLT5oaW5zdDsKICAgICBscFRvb2xJbmZvLT5scHN6VGV4dCA9IHRvb2xQdHItPmxwc3pUZXh0OwogCi0gICAgaWYgKGxwVG9vbEluZm8tPmNiU2l6ZSA+PSBzaXplb2YoVE9PTElORk9BKSkKKyAgICBpZiAobHBUb29sSW5mby0+Y2JTaXplID49IHNpemVvZihUVFRPT0xJTkZPQSkpCiAJbHBUb29sSW5mby0+bFBhcmFtID0gdG9vbFB0ci0+bFBhcmFtOwogCiAgICAgcmV0dXJuIFRSVUU7CkBAIC0yMjYsMTEgKzM0NywyMSBAQAogVE9PTFRJUFNfR2V0Q3VycmVudFRvb2wzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKLSAgICBMUFRPT0xJTkZPQSBscHRpID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBMUFRUVE9PTElORk9BIGxwdGkgPSAoTFBUVFRPT0xJTkZPQSlsUGFyYW07CisgICAgVFRUT09MX0lORk8gKnRvb2xQdHI7CiAKICAgICBpZiAobHB0aSkgewotCWlmIChpbmZvUHRyLT5pQ3VycmVudFRvb2wgPiAtMSkgewotCSAgICAvKiBGSVhNRSAqLworCWlmIChpbmZvUHRyLT5uQ3VycmVudFRvb2wgPiAtMSkgeworCSAgICB0b29sUHRyID0gJmluZm9QdHItPnRvb2xzW2luZm9QdHItPm5DdXJyZW50VG9vbF07CisKKwkgICAgLyogY29weSB0b29sIGRhdGEgKi8KKwkgICAgbHB0aS0+dUZsYWdzICAgPSB0b29sUHRyLT51RmxhZ3M7CisJICAgIGxwdGktPnJlY3QgICAgID0gdG9vbFB0ci0+cmVjdDsKKwkgICAgbHB0aS0+aGluc3QgICAgPSB0b29sUHRyLT5oaW5zdDsKKwkgICAgbHB0aS0+bHBzelRleHQgPSB0b29sUHRyLT5scHN6VGV4dDsKKworCSAgICBpZiAobHB0aS0+Y2JTaXplID49IHNpemVvZihUVFRPT0xJTkZPQSkpCisJCWxwdGktPmxQYXJhbSA9IHRvb2xQdHItPmxQYXJhbTsKIAogCSAgICByZXR1cm4gVFJVRTsKIAl9CkBAIC0yMzgsMTUgKzM2OSw1MSBAQAogCSAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogICAgIGVsc2UKLQlyZXR1cm4gKGluZm9QdHItPmlDdXJyZW50VG9vbCAhPSAtMSk7CisJcmV0dXJuIChpbmZvUHRyLT5uQ3VycmVudFRvb2wgIT0gLTEpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCiAKIC8vIDw8IFRPT0xUSVBTX0dldEN1cnJlbnRUb29sMzJXID4+Ci0vLyA8PCBUT09MVElQU19HZXREZWxheVRpbWUgPj4KLS8vIDw8IFRPT0xUSVBTX0dldE1hcmdpbiA+PgorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19HZXREZWxheVRpbWUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIHN3aXRjaCAod1BhcmFtKSB7CisJY2FzZSBUVERUX0FVVE9NQVRJQzoKKwkgICAgcmV0dXJuIGluZm9QdHItPm5BdXRvbWF0aWNUaW1lOworCisJY2FzZSBUVERUX1JFU0hPVzoKKwkgICAgcmV0dXJuIGluZm9QdHItPm5SZXNob3dUaW1lOworCisJY2FzZSBUVERUX0FVVE9QT1A6CisJICAgIHJldHVybiBpbmZvUHRyLT5uQXV0b1BvcFRpbWU7CisKKwljYXNlIFRURFRfSU5JVElBTDoKKwkgICAgcmV0dXJuIGluZm9QdHItPm5Jbml0aWFsVGltZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfR2V0TWFyZ2luIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgTFBSRUNUMzIgbHBSZWN0ID0gKExQUkVDVDMyKWxQYXJhbTsKKworICAgIGxwUmVjdC0+bGVmdCAgID0gaW5mb1B0ci0+cmNNYXJnaW4ubGVmdDsKKyAgICBscFJlY3QtPnJpZ2h0ICA9IGluZm9QdHItPnJjTWFyZ2luLnJpZ2h0OworICAgIGxwUmVjdC0+Ym90dG9tID0gaW5mb1B0ci0+cmNNYXJnaW4uYm90dG9tOworICAgIGxwUmVjdC0+dG9wICAgID0gaW5mb1B0ci0+cmNNYXJnaW4udG9wOworCisgICAgcmV0dXJuIDA7Cit9CiAKIAogc3RhdGljIExSRVNVTFQKQEAgLTI1NCw3ICs0MjEsNyBAQAogewogICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CiAKLSAgICByZXR1cm4gaW5mb1B0ci0+aU1heFRpcFdpZHRoOworICAgIHJldHVybiBpbmZvUHRyLT5uTWF4VGlwV2lkdGg7CiB9CiAKIApAQCAtMjYyLDExICs0MjksMTEgQEAKIFRPT0xUSVBTX0dldFRleHQzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKLSAgICBMUFRPT0xJTkZPQSBscHRpID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBMUFRUVE9PTElORk9BIGxwdGkgPSAoTFBUVFRPT0xJTkZPQSlsUGFyYW07CiAgICAgSU5UMzIgbkluZGV4OwogCiAgICAgaWYgKCEobHB0aSkpIHJldHVybiAwOwotICAgIGlmIChscHRpLT5jYlNpemUgPCBzaXplb2YoVE9PTElORk9BKSkgcmV0dXJuIDA7CisgICAgaWYgKGxwdGktPmNiU2l6ZSA8IHNpemVvZihUVFRPT0xJTkZPQSkpIHJldHVybiAwOwogCiAgICAgbkluZGV4ID0gVE9PTFRJUFNfR2V0SW5kZXhGcm9tSW5mb0EgKGluZm9QdHIsIGxwdGkpOwogICAgIGlmIChuSW5kZXggPT0gLTEpIHJldHVybiAwOwpAQCAtMzA4LDcgKzQ3NSw3IEBACiBUT09MVElQU19HZXRUb29sSW5mbzMyQSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwotICAgIExQVE9PTElORk9BIGxwVG9vbEluZm8gPSAoTFBUT09MSU5GT0EpbFBhcmFtOworICAgIExQVFRUT09MSU5GT0EgbHBUb29sSW5mbyA9IChMUFRUVE9PTElORk9BKWxQYXJhbTsKICAgICBUVFRPT0xfSU5GTyAqdG9vbFB0cjsKICAgICBJTlQzMiBuSW5kZXg7CiAKQEAgLTMyOCw3ICs0OTUsNyBAQAogICAgIGxwVG9vbEluZm8tPmhpbnN0ICAgID0gdG9vbFB0ci0+aGluc3Q7CiAgICAgbHBUb29sSW5mby0+bHBzelRleHQgPSB0b29sUHRyLT5scHN6VGV4dDsKIAotICAgIGlmIChscFRvb2xJbmZvLT5jYlNpemUgPj0gc2l6ZW9mKFRPT0xJTkZPQSkpCisgICAgaWYgKGxwVG9vbEluZm8tPmNiU2l6ZSA+PSBzaXplb2YoVFRUT09MSU5GT0EpKQogCWxwVG9vbEluZm8tPmxQYXJhbSA9IHRvb2xQdHItPmxQYXJhbTsKIAogICAgIHJldHVybiBUUlVFOwpAQCAtMzM2LDcgKzUwMyw0MCBAQAogCiAKIC8vIDw8IFRPT0xUSVBTX0dldFRvb2xJbmZvMzJXID4+Ci0vLyA8PCBUT09MVElQU19IaXRUZXN0MzJBID4+CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX0hpdFRlc3QzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBMUFRUSElUVEVTVElORk9BIGxwdHRoaXQgPSAoTFBUVEhJVFRFU1RJTkZPQSlsUGFyYW07CisgICAgVFRUT09MX0lORk8gKnRvb2xQdHI7CisgICAgSU5UMzIgblRvb2w7CisKKyAgICBpZiAobHB0dGhpdCA9PSAwKQorCXJldHVybiBGQUxTRTsKKworICAgIG5Ub29sID0gVE9PTFRJUFNfR2V0SW5kZXhGcm9tUG9pbnQgKGluZm9QdHIsIGxwdHRoaXQtPmh3bmQsICZscHR0aGl0LT5wdCk7CisgICAgaWYgKG5Ub29sID09IC0xKQorCXJldHVybiBGQUxTRTsKKworICAgIFRSQUNFICh0b29sdGlwcywgIm5Ub29sID0gJWQhXG4iLCBuVG9vbCk7CisKKyAgICAvKiBjb3B5IHRvb2wgZGF0YSAqLworICAgIHRvb2xQdHIgPSAmaW5mb1B0ci0+dG9vbHNbblRvb2xdOworICAgIGxwdHRoaXQtPnRpLmNiU2l6ZSAgID0gc2l6ZW9mKFRUVE9PTElORk9BKTsKKyAgICBscHR0aGl0LT50aS51RmxhZ3MgICA9IHRvb2xQdHItPnVGbGFnczsKKyAgICBscHR0aGl0LT50aS5od25kICAgICA9IHRvb2xQdHItPmh3bmQ7CisgICAgbHB0dGhpdC0+dGkudUlkICAgICAgPSB0b29sUHRyLT51SWQ7CisgICAgbHB0dGhpdC0+dGkucmVjdCAgICAgPSB0b29sUHRyLT5yZWN0OworICAgIGxwdHRoaXQtPnRpLmhpbnN0ICAgID0gdG9vbFB0ci0+aGluc3Q7CisgICAgbHB0dGhpdC0+dGkubHBzelRleHQgPSB0b29sUHRyLT5scHN6VGV4dDsKKyAgICBscHR0aGl0LT50aS5sUGFyYW0gICA9IHRvb2xQdHItPmxQYXJhbTsKKworICAgIHJldHVybiBUUlVFOworfQorCisKIC8vIDw8IFRPT0xUSVBTX0hpdFRlc3QzMlcgPj4KIAogCkBAIC0zNDQsMTEgKzU0NCwxMSBAQAogVE9PTFRJUFNfTmV3VG9vbFJlY3QzMkEgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CiAgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKLSAgICBMUFRPT0xJTkZPQSBscHRpID0gKExQVE9PTElORk9BKWxQYXJhbTsKKyAgICBMUFRUVE9PTElORk9BIGxwdGkgPSAoTFBUVFRPT0xJTkZPQSlsUGFyYW07CiAgICAgSU5UMzIgbkluZGV4OwogCiAgICAgaWYgKCEobHB0aSkpIHJldHVybiAwOwotICAgIGlmIChscHRpLT5jYlNpemUgPCBzaXplb2YoVE9PTElORk9BKSkgcmV0dXJuIDA7CisgICAgaWYgKGxwdGktPmNiU2l6ZSA8IHNpemVvZihUVFRPT0xJTkZPQSkpIHJldHVybiAwOwogCiAgICAgbkluZGV4ID0gVE9PTFRJUFNfR2V0SW5kZXhGcm9tSW5mb0EgKGluZm9QdHIsIGxwdGkpOwogICAgIGlmIChuSW5kZXggPT0gLTEpIHJldHVybiAwOwpAQCAtMzYwLDQwICs1NjAsMTI2IEBACiAKIAogLy8gPDwgVE9PTFRJUFNfTmV3VG9vbFJlY3QzMlcgPj4KLS8vIDw8IFRPT0xUSVBTX1BvcCA+PgorCisKK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19Qb3AgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIFRPT0xUSVBTX0hpZGUgKHduZFB0ciwgaW5mb1B0cik7CisKKyAgICByZXR1cm4gMDsKK30KIAogCiBzdGF0aWMgTFJFU1VMVAogVE9PTFRJUFNfUmVsYXlFdmVudCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwotICAgIExQTVNHMTYgbHBNc2cgPSAoTFBNU0cxNilsUGFyYW07CisgICAgTFBNU0czMiBscE1zZyA9IChMUE1TRzMyKWxQYXJhbTsKKyAgICBQT0lOVDMyIHB0OwogCi0gICAgaWYgKGxwTXNnID09IE5VTEwpIHJldHVybiAwOwotCi0gICAgaWYgKGxwTXNnLT5tZXNzYWdlID09IFdNX01PVVNFTU9WRSkgewotCUZJWE1FICh0b29sdGlwcywgIldNX01PVVNFTU9WRSAoJWQgJWQpXG4iLCBscE1zZy0+cHQueCwgbHBNc2ctPnB0LnkpOworICAgIGlmIChscE1zZyA9PSBOVUxMKSB7CisJV0FSTiAodG9vbHRpcHMsICJscE1zZyA9PSBOVUxMIVxuIik7CisJcmV0dXJuIDA7CiAgICAgfQogCi0vLyAgICBGSVhNRSAodG9vbHRpcHMsICJlbXB0eSBzdHViIVxuIik7CisgICAgcHQgPSBscE1zZy0+cHQ7CisgICAgU2NyZWVuVG9DbGllbnQzMiAobHBNc2ctPmh3bmQsICZwdCk7CisgICAgaW5mb1B0ci0+bk9sZFRvb2wgPSBpbmZvUHRyLT5uVG9vbDsKKyAgICBpbmZvUHRyLT5uVG9vbCA9IFRPT0xUSVBTX0dldEluZGV4RnJvbVBvaW50IChpbmZvUHRyLCBscE1zZy0+aHduZCwgJnB0KTsKKyAgICBUUkFDRSAodG9vbHRpcHMsICJuVG9vbCA9ICVkXG4iLCBpbmZvUHRyLT5uVG9vbCk7CisKKyAgICBzd2l0Y2ggKGxwTXNnLT5tZXNzYWdlKSB7CisJY2FzZSBXTV9MQlVUVE9ORE9XTjoKKwljYXNlIFdNX0xCVVRUT05VUDoKKwljYXNlIFdNX01CVVRUT05ET1dOOgorCWNhc2UgV01fTUJVVFRPTlVQOgorCWNhc2UgV01fUkJVVFRPTkRPV046CisJY2FzZSBXTV9SQlVUVE9OVVA6CisJICAgIFRPT0xUSVBTX0hpZGUgKHduZFB0ciwgaW5mb1B0cik7CisJICAgIGJyZWFrOworCisJY2FzZSBXTV9NT1VTRU1PVkU6CisJICAgIFRSQUNFICh0b29sdGlwcywgIldNX01PVVNFTU9WRSAoJWQgJWQpXG4iLCBwdC54LCBwdC55KTsKKwkgICAgaWYgKGluZm9QdHItPm5Ub29sICE9IGluZm9QdHItPm5PbGRUb29sKSB7CisJCWlmIChpbmZvUHRyLT5uT2xkVG9vbCA9PSAtMSkKKwkJICAgIFNldFRpbWVyMzIgKHduZFB0ci0+aHduZFNlbGYsIElEX1RJTUVSMSwgaW5mb1B0ci0+bkluaXRpYWxUaW1lLCAwKTsKKwkJZWxzZQorCQkgICAgVE9PTFRJUFNfSGlkZSAod25kUHRyLCBpbmZvUHRyKTsKKwkJICAgIFNldFRpbWVyMzIgKHduZFB0ci0+aHduZFNlbGYsIElEX1RJTUVSMSwgaW5mb1B0ci0+blJlc2hvd1RpbWUsIDApOworCSAgICB9CisJICAgIGJyZWFrOworICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCiAKLS8vIDw8IFRPT0xUSVBTX1NldERlbGF5VGltZSA+PgotLy8gPDwgVE9PTFRJUFNfU2V0TWFyZ2luID4+CitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfU2V0RGVsYXlUaW1lIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7CisgICAgSU5UMzIgblRpbWUgPSAoSU5UMzIpTE9XT1JEKGxQYXJhbSk7CisKKyAgICBzd2l0Y2ggKHdQYXJhbSkgeworCWNhc2UgVFREVF9BVVRPTUFUSUM6CisJICAgIGlmIChuVGltZSA9PSAwKSB7CisJCWluZm9QdHItPm5BdXRvbWF0aWNUaW1lID0gNTAwOworCQlpbmZvUHRyLT5uUmVzaG93VGltZSAgICA9IDEwMDsKKwkJaW5mb1B0ci0+bkF1dG9Qb3BUaW1lICAgPSA1MDAwOworCQlpbmZvUHRyLT5uSW5pdGlhbFRpbWUgICA9IDUwMDsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJaW5mb1B0ci0+bkF1dG9tYXRpY1RpbWUgPSBuVGltZTsKKwkJaW5mb1B0ci0+blJlc2hvd1RpbWUgICAgPSBuVGltZSAvIDU7CisJCWluZm9QdHItPm5BdXRvUG9wVGltZSAgID0gblRpbWUgKiAxMDsKKwkJaW5mb1B0ci0+bkluaXRpYWxUaW1lICAgPSBuVGltZTsKKwkgICAgfQorCSAgICBicmVhazsKKworCWNhc2UgVFREVF9SRVNIT1c6CisJICAgIGluZm9QdHItPm5SZXNob3dUaW1lID0gblRpbWU7CisJICAgIGJyZWFrOworCisJY2FzZSBUVERUX0FVVE9QT1A6CisJICAgIGluZm9QdHItPm5BdXRvUG9wVGltZSA9IG5UaW1lOworCSAgICBicmVhazsKKworCWNhc2UgVFREVF9JTklUSUFMOgorCSAgICBpbmZvUHRyLT5uSW5pdGlhbFRpbWUgPSBuVGltZTsKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIExSRVNVTFQKK1RPT0xUSVBTX1NldE1hcmdpbiAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIExQUkVDVDMyIGxwUmVjdCA9IChMUFJFQ1QzMilsUGFyYW07CisKKyAgICBpbmZvUHRyLT5yY01hcmdpbi5sZWZ0ICAgPSBscFJlY3QtPmxlZnQ7CisgICAgaW5mb1B0ci0+cmNNYXJnaW4ucmlnaHQgID0gbHBSZWN0LT5yaWdodDsKKyAgICBpbmZvUHRyLT5yY01hcmdpbi5ib3R0b20gPSBscFJlY3QtPmJvdHRvbTsKKyAgICBpbmZvUHRyLT5yY01hcmdpbi50b3AgICAgPSBscFJlY3QtPnRvcDsKKworICAgIHJldHVybiAwOworfQogCiAKIHN0YXRpYyBMUkVTVUxUCiBUT09MVElQU19TZXRNYXhUaXBXaWR0aCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwotICAgIElOVDMyIGlUZW1wID0gaW5mb1B0ci0+aU1heFRpcFdpZHRoOworICAgIElOVDMyIG5UZW1wID0gaW5mb1B0ci0+bk1heFRpcFdpZHRoOwogCi0gICAgaW5mb1B0ci0+aU1heFRpcFdpZHRoID0gKElOVDMyKWxQYXJhbTsKKyAgICBpbmZvUHRyLT5uTWF4VGlwV2lkdGggPSAoSU5UMzIpbFBhcmFtOwogCi0gICAgcmV0dXJuIGlUZW1wOworICAgIHJldHVybiBuVGVtcDsKIH0KIAogCkBAIC00MjMsNyArNzA5LDcgQEAKIFRPT0xUSVBTX1NldFRvb2xJbmZvMzJBIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHIgPSBUT09MVElQU19HZXRJbmZvUHRyKHduZFB0cik7Ci0gICAgTFBUT09MSU5GT0EgbHBUb29sSW5mbyA9IChMUFRPT0xJTkZPQSlsUGFyYW07CisgICAgTFBUVFRPT0xJTkZPQSBscFRvb2xJbmZvID0gKExQVFRUT09MSU5GT0EpbFBhcmFtOwogICAgIFRUVE9PTF9JTkZPICp0b29sUHRyOwogICAgIElOVDMyIG5JbmRleDsKIApAQCAtNDMyLDcgKzcxOCw3IEBACiAgICAgbkluZGV4ID0gVE9PTFRJUFNfR2V0SW5kZXhGcm9tSW5mb0EgKGluZm9QdHIsIGxwVG9vbEluZm8pOwogICAgIGlmIChuSW5kZXggPT0gLTEpIHJldHVybiAwOwogCi0gICAgVFJBQ0UgKHRvb2x0aXBzLCAiaW5kZXg9JWRcbiIsIG5JbmRleCk7CisgICAgVFJBQ0UgKHRvb2x0aXBzLCAibkluZGV4PSVkXG4iLCBuSW5kZXgpOwogCiAgICAgdG9vbFB0ciA9ICZpbmZvUHRyLT50b29sc1tuSW5kZXhdOwogCkBAIC00NDMsNyArNzI5LDEwIEBACiAgICAgdG9vbFB0ci0+cmVjdCAgID0gbHBUb29sSW5mby0+cmVjdDsKICAgICB0b29sUHRyLT5oaW5zdCAgPSBscFRvb2xJbmZvLT5oaW5zdDsKIAotICAgIGlmIChscFRvb2xJbmZvLT5scHN6VGV4dCkgeworICAgIGlmIChscFRvb2xJbmZvLT5oaW5zdCkgeworCXRvb2xQdHItPmxwc3pUZXh0ID0gbHBUb29sSW5mby0+bHBzelRleHQ7CisgICAgfQorICAgIGVsc2UgaWYgKGxwVG9vbEluZm8tPmxwc3pUZXh0KSB7CiAJaWYgKGxwVG9vbEluZm8tPmxwc3pUZXh0ID09IExQU1RSX1RFWFRDQUxMQkFDSzMyQSkKIAkgICAgdG9vbFB0ci0+bHBzelRleHQgPSBscFRvb2xJbmZvLT5scHN6VGV4dDsKIAllbHNlIHsKQEAgLTQ1NSw3ICs3NDQsNyBAQAogCX0KICAgICB9CiAKLSAgICBpZiAobHBUb29sSW5mby0+Y2JTaXplID49IHNpemVvZihUT09MSU5GT0EpKQorICAgIGlmIChscFRvb2xJbmZvLT5jYlNpemUgPj0gc2l6ZW9mKFRUVE9PTElORk9BKSkKIAl0b29sUHRyLT5sUGFyYW0gPSBscFRvb2xJbmZvLT5sUGFyYW07CiAKICAgICByZXR1cm4gMDsKQEAgLTQ3NSw2ICs3NjQsNyBAQAogVE9PTFRJUFNfQ3JlYXRlIChXTkQgKnduZFB0ciwgV1BBUkFNMzIgd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogewogICAgIFRPT0xUSVBTX0lORk8gKmluZm9QdHI7CisgICAgTE9HRk9OVDMyQSBsb2dGb250OwogCiAgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBpbmZvIHN0cnVjdHVyZSAqLwogICAgIGluZm9QdHIgPSAoVE9PTFRJUFNfSU5GTyAqKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCkBAIC00OTAsOSArNzgwLDE5IEBACiAgICAgaW5mb1B0ci0+YkFjdGl2ZSA9IFRSVUU7CiAgICAgaW5mb1B0ci0+Y2xyQmsgICA9IEdldFN5c0NvbG9yMzIgKENPTE9SX0lORk9CSyk7CiAgICAgaW5mb1B0ci0+Y2xyVGV4dCA9IEdldFN5c0NvbG9yMzIgKENPTE9SX0lORk9URVhUKTsKLSAgICBpbmZvUHRyLT5oRm9udCAgID0gTlVMTDsKLSAgICBpbmZvUHRyLT5pTWF4VGlwV2lkdGggPSAtMTsKLSAgICBpbmZvUHRyLT5pQ3VycmVudFRvb2wgPSAtMTsKKworICAgIFN5c3RlbVBhcmFtZXRlcnNJbmZvMzJBKCBTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwgMCwgJmxvZ0ZvbnQsIDAgKTsKKyAgICBpbmZvUHRyLT5oRm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdDMyQSggJmxvZ0ZvbnQgKTsKKworICAgIGluZm9QdHItPm5NYXhUaXBXaWR0aCA9IC0xOworICAgIGluZm9QdHItPm5Ub29sID0gLTE7CisgICAgaW5mb1B0ci0+bk9sZFRvb2wgPSAtMTsKKyAgICBpbmZvUHRyLT5uQ3VycmVudFRvb2wgPSAtMTsKKworICAgIGluZm9QdHItPm5BdXRvbWF0aWNUaW1lID0gNTAwOworICAgIGluZm9QdHItPm5SZXNob3dUaW1lICAgID0gMTAwOworICAgIGluZm9QdHItPm5BdXRvUG9wVGltZSAgID0gNTAwMDsKKyAgICBpbmZvUHRyLT5uSW5pdGlhbFRpbWUgICA9IDUwMDsKIAogICAgIHJldHVybiAwOwogfQpAQCAtNTI0LDYgKzgyNCwyMiBAQAogCiAKIHN0YXRpYyBMUkVTVUxUCitUT09MVElQU19FcmFzZUJhY2tncm91bmQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBSRUNUMzIgcmVjdDsKKyAgICBIQlJVU0gzMiBoQnJ1c2g7CisKKyAgICBoQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIgKGluZm9QdHItPmNsckJrKTsKKyAgICBHZXRDbGllbnRSZWN0MzIgKHduZFB0ci0+aHduZFNlbGYsICZyZWN0KTsKKyAgICBGaWxsUmVjdDMyICgoSERDMzIpd1BhcmFtLCAmcmVjdCwgaEJydXNoKTsKKyAgICBEZWxldGVPYmplY3QzMiAoaEJydXNoKTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworCitzdGF0aWMgTFJFU1VMVAogVE9PTFRJUFNfR2V0Rm9udCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKICAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOwpAQCAtNTMyLDggKzg0OCwzOSBAQAogfQogCiAKLS8vIDw8IFRPT0xUSVBTX01vdXNlTW92ZSA+PgotLy8gPDwgVE9PTFRJUFNfUGFpbnQgPj4KK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19Nb3VzZU1vdmUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVE9PTFRJUFNfSU5GTyAqaW5mb1B0ciA9IFRPT0xUSVBTX0dldEluZm9QdHIod25kUHRyKTsKKworICAgIFRPT0xUSVBTX0hpZGUgKHduZFB0ciwgaW5mb1B0cik7CisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfTmNDcmVhdGUgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgd25kUHRyLT5kd1N0eWxlICY9IDB4MDAwMEZGRkY7CisgICAgd25kUHRyLT5kd1N0eWxlIHw9IChXU19QT1BVUCB8IFdTX0JPUkRFUik7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVE9PTFRJUFNfUGFpbnQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgSERDMzIgaGRjOworICAgIFBBSU5UU1RSVUNUMzIgcHM7CisKKyAgICBoZGMgPSB3UGFyYW09PTAgPyBCZWdpblBhaW50MzIgKHduZFB0ci0+aHduZFNlbGYsICZwcykgOiAoSERDMzIpd1BhcmFtOworICAgIFRPT0xUSVBTX1JlZnJlc2ggKHduZFB0ciwgaGRjKTsKKyAgICBpZiAoIXdQYXJhbSkKKwlFbmRQYWludDMyICh3bmRQdHItPmh3bmRTZWxmLCAmcHMpOworICAgIHJldHVybiAwOworfQogCiAKIHN0YXRpYyBMUkVTVUxUCkBAIC01NTIsNyArODk5LDI2IEBACiB9CiAKIAotLy8gPDwgVE9PTFRJUFNfVGltZXIgPj4KK3N0YXRpYyBMUkVTVUxUCitUT09MVElQU19UaW1lciAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUT09MVElQU19JTkZPICppbmZvUHRyID0gVE9PTFRJUFNfR2V0SW5mb1B0cih3bmRQdHIpOworCisgICAgc3dpdGNoICh3UGFyYW0pCisgICAgeworCWNhc2UgSURfVElNRVIxOgorCSAgICBLaWxsVGltZXIzMiAod25kUHRyLT5od25kU2VsZiwgSURfVElNRVIxKTsKKwkgICAgVE9PTFRJUFNfU2hvdyAod25kUHRyLCBpbmZvUHRyKTsKKwkgICAgYnJlYWs7CisKKwljYXNlIElEX1RJTUVSMjoKKwkgICAgVE9PTFRJUFNfSGlkZSAod25kUHRyLCBpbmZvUHRyKTsKKwkgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKIC8vIDw8IFRPT0xUSVBTX1dpbkluaUNoYW5nZSA+PgogCiAKQEAgLTU4NSw4ICs5NTEsMTIgQEAKIAkgICAgcmV0dXJuIFRPT0xUSVBTX0dldEN1cnJlbnRUb29sMzJBICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUVE1fR0VUQ1VSUkVOVFRPT0wzMlc6Ci0vLwljYXNlIFRUTV9HRVRERUxBWVRJTUU6CQkJLyogNC43MCAqLwotLy8JY2FzZSBUVE1fR0VUTUFSR0lOOgkJCS8qIDQuNzAgKi8KKworCWNhc2UgVFRNX0dFVERFTEFZVElNRToKKwkgICAgcmV0dXJuIFRPT0xUSVBTX0dldERlbGF5VGltZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9HRVRNQVJHSU46CisJICAgIHJldHVybiBUT09MVElQU19HZXRNYXJnaW4gKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBUVE1fR0VUTUFYVElQV0lEVEg6CiAJICAgIHJldHVybiBUT09MVElQU19HZXRNYXhUaXBXaWR0aCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC02MDksMjAgKzk3OSwyOCBAQAogCSAgICByZXR1cm4gVE9PTFRJUFNfR2V0VG9vbEluZm8zMkEgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCiAvLwljYXNlIFRUTV9HRVRUT09MSU5GTzMyVzoKLS8vCWNhc2UgVFRNX0hJVFRFU1QzMkE6CisKKwljYXNlIFRUTV9ISVRURVNUMzJBOgorCSAgICByZXR1cm4gVE9PTFRJUFNfSGl0VGVzdDMyQSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKIC8vCWNhc2UgVFRNX0hJVFRFU1QzMlc6CiAKIAljYXNlIFRUTV9ORVdUT09MUkVDVDMyQToKIAkgICAgcmV0dXJuIFRPT0xUSVBTX05ld1Rvb2xSZWN0MzJBICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBUVE1fTkVXVE9PTFJFQ1QzMlc6Ci0vLwljYXNlIFRUTV9QT1A6CQkJCS8qIDQuNzAgKi8KKworCWNhc2UgVFRNX1BPUDoKKwkgICAgcmV0dXJuIFRPT0xUSVBTX1BvcCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKIAljYXNlIFRUTV9SRUxBWUVWRU5UOgogCSAgICByZXR1cm4gVE9PTFRJUFNfUmVsYXlFdmVudCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgVFRNX1NFVERFTEFZVElNRToJCQkvKiA0LjcwICovCi0vLwljYXNlIFRUTV9TRVRNQVJHSU46CQkJLyogNC43MCAqLworCWNhc2UgVFRNX1NFVERFTEFZVElNRToKKwkgICAgcmV0dXJuIFRPT0xUSVBTX1NldERlbGF5VGltZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFRUTV9TRVRNQVJHSU46CisJICAgIHJldHVybiBUT09MVElQU19TZXRNYXJnaW4gKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBUVE1fU0VUTUFYVElQV0lEVEg6CiAJICAgIHJldHVybiBUT09MVElQU19TZXRNYXhUaXBXaWR0aCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CkBAIC02NTEsMTkgKzEwMjksMjYgQEAKIAljYXNlIFdNX0RFU1RST1k6CiAJICAgIHJldHVybiBUT09MVElQU19EZXN0cm95ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAorCWNhc2UgV01fRVJBU0VCS0dORDoKKwkgICAgcmV0dXJuIFRPT0xUSVBTX0VyYXNlQmFja2dyb3VuZCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKIAljYXNlIFdNX0dFVEZPTlQ6CiAJICAgIHJldHVybiBUT09MVElQU19HZXRGb250ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAotLy8JY2FzZSBXTV9NT1VTRU1PVkU6Ci0vLwkgICAgcmV0dXJuIFRPT0xUSVBTX01vdXNlTW92ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisJY2FzZSBXTV9NT1VTRU1PVkU6CisJICAgIHJldHVybiBUT09MVElQU19Nb3VzZU1vdmUgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCi0vLwljYXNlIFdNX1BBSU5UOgotLy8JICAgIHJldHVybiBUT09MVElQU19QYWludCAod25kUHRyLCB3UGFyYW0pOworCWNhc2UgV01fTkNDUkVBVEU6CisJICAgIHJldHVybiBUT09MVElQU19OY0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFdNX1BBSU5UOgorCSAgICByZXR1cm4gVE9PTFRJUFNfUGFpbnQgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOwogCiAJY2FzZSBXTV9TRVRGT05UOgogCSAgICByZXR1cm4gVE9PTFRJUFNfU2V0Rm9udCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgV01fVElNRVI6CisJY2FzZSBXTV9USU1FUjoKKwkgICAgcmV0dXJuIFRPT0xUSVBTX1RpbWVyICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKIAogLy8JY2FzZSBXTV9XSU5JTklDSEFOR0U6CiAKZGlmZiAtLWdpdCBhL2NvbnRyb2xzL3RyZWV2aWV3LmMgYi9jb250cm9scy90cmVldmlldy5jCmluZGV4IDY1YzFlNmUuLmYwNGY0MGUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3RyZWV2aWV3LmMKKysrIGIvY29udHJvbHMvdHJlZXZpZXcuYwpAQCAtMjQsNiArMjQsOTAgQEAKICNkZWZpbmUgVFJFRVZJRVdfR2V0SW5mb1B0cih3bmRQdHIpICgoVFJFRVZJRVdfSU5GTyAqKXduZFB0ci0+d0V4dHJhWzBdKQogCiAKKworc3RhdGljIExSRVNVTFQKK1RSRUVWSUVXX1NldEltYWdlTGlzdCAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkVFVklFV19JTkZPICppbmZvUHRyID0gVFJFRVZJRVdfR2V0SW5mb1B0cih3bmRQdHIpOworICAgIEhJTUFHRUxJU1QgaGltbFRlbXA7CisKKyAgICBpZiAoKElOVDMyKXdQYXJhbSA9PSBUVlNJTF9OT1JNQUwpIHsKKwloaW1sVGVtcCA9IGluZm9QdHItPmhpbWxOb3JtYWw7CisJaW5mb1B0ci0+aGltbE5vcm1hbCA9IChISU1BR0VMSVNUKWxQYXJhbTsKKyAgICB9CisgICAgZWxzZSBpZiAoKElOVDMyKXdQYXJhbSA9PSBUVlNJTF9TVEFURSkgeworCWhpbWxUZW1wID0gaW5mb1B0ci0+aGltbFN0YXRlOworCWluZm9QdHItPmhpbWxTdGF0ZSA9IChISU1BR0VMSVNUKWxQYXJhbTsKKyAgICB9CisgICAgZWxzZQorCXJldHVybiBOVUxMOworCisgICAgcmV0dXJuIChMUkVTVUxUKWhpbWxUZW1wOworfQorCisKKworc3RhdGljIExSRVNVTFQKK1RSRUVWSUVXX0NyZWF0ZSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkVFVklFV19JTkZPICppbmZvUHRyOworCisgICAgLyogYWxsb2NhdGUgbWVtb3J5IGZvciBpbmZvIHN0cnVjdHVyZSAqLworICAgIGluZm9QdHIgPSAoVFJFRVZJRVdfSU5GTyAqKUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIEhFQVBfWkVST19NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUUkVFVklFV19JTkZPKSk7CisgICAgd25kUHRyLT53RXh0cmFbMF0gPSAoRFdPUkQpaW5mb1B0cjsKKworICAgIGlmIChpbmZvUHRyID09IE5VTEwpIHsKKwlFUlIgKHRyZWV2aWV3LCAiY291bGQgbm90IGFsbG9jYXRlIGluZm8gbWVtb3J5IVxuIik7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKChUUkVFVklFV19JTkZPKil3bmRQdHItPndFeHRyYVswXSAhPSBpbmZvUHRyKSB7CisJRVJSICh0cmVldmlldywgInBvaW50ZXIgYXNzaWdubWVudCBlcnJvciFcbiIpOworCXJldHVybiAwOworICAgIH0KKworICAgIC8qIHNldCBkZWZhdWx0IHNldHRpbmdzICovCisgICAgaW5mb1B0ci0+Y2xyQmsgPSBHZXRTeXNDb2xvcjMyIChDT0xPUl9XSU5ET1cpOworICAgIGluZm9QdHItPmNsclRleHQgPSBHZXRTeXNDb2xvcjMyIChDT0xPUl9CVE5URVhUKTsKKyAgICBpbmZvUHRyLT5oaW1sTm9ybWFsID0gTlVMTDsKKyAgICBpbmZvUHRyLT5oaW1sU3RhdGUgPSBOVUxMOworCisKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgTFJFU1VMVAorVFJFRVZJRVdfRGVzdHJveSAoV05EICp3bmRQdHIsIFdQQVJBTTMyIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBUUkVFVklFV19JTkZPICppbmZvUHRyID0gVFJFRVZJRVdfR2V0SW5mb1B0cih3bmRQdHIpOworCisKKworCisgICAgLyogZnJlZSB0cmVlIHZpZXcgaW5mbyBkYXRhICovCisgICAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBpbmZvUHRyKTsKKworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBMUkVTVUxUCitUUkVFVklFV19FcmFzZUJhY2tncm91bmQgKFdORCAqd25kUHRyLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVFJFRVZJRVdfSU5GTyAqaW5mb1B0ciA9IFRSRUVWSUVXX0dldEluZm9QdHIod25kUHRyKTsKKyAgICBIQlJVU0gzMiBoQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIgKGluZm9QdHItPmNsckJrKTsKKyAgICBSRUNUMzIgcmVjdDsKKworICAgIEdldENsaWVudFJlY3QzMiAod25kUHRyLT5od25kU2VsZiwgJnJlY3QpOworICAgIEZpbGxSZWN0MzIgKChIREMzMil3UGFyYW0sICZyZWN0LCBoQnJ1c2gpOworICAgIERlbGV0ZU9iamVjdDMyIChoQnJ1c2gpOworICAgIHJldHVybiBUUlVFOworfQorCisKKwogTFJFU1VMVCBXSU5BUEkKIFRyZWV2aWV3V2luZG93UHJvYyAoSFdORDMyIGh3bmQsIFVJTlQzMiB1TXNnLCBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7CkBAIC0zMSwxMSArMTE1LDMyIEBACiAKICAgICBzd2l0Y2ggKHVNc2cpCiAgICAgewotLy8JY2FzZSBXTV9DUkVBVEU6Ci0vLwkgICAgcmV0dXJuIFRSRUVWSUVXX0NyZWF0ZSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CiAKLS8vCWNhc2UgV01fREVTVFJPWToKLS8vCSAgICByZXR1cm4gVFJFRVZJRVdfRGVzdHJveSAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKy8vCWNhc2UgVFZNX0dFVElNQUdFTElTVDoKKy8vCSAgICByZXR1cm4gVFJFRVZJRVdfR2V0SW1hZ2VMaXN0ICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCisKKwljYXNlIFRWTV9TRVRJTUFHRUxJU1Q6CisJICAgIHJldHVybiBUUkVFVklFV19TZXRJbWFnZUxpc3QgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisKKworCWNhc2UgV01fQ1JFQVRFOgorCSAgICByZXR1cm4gVFJFRVZJRVdfQ3JlYXRlICh3bmRQdHIsIHdQYXJhbSwgbFBhcmFtKTsKKworCWNhc2UgV01fREVTVFJPWToKKwkgICAgcmV0dXJuIFRSRUVWSUVXX0Rlc3Ryb3kgKHduZFB0ciwgd1BhcmFtLCBsUGFyYW0pOworCisvLwljYXNlIEVNX0VOQUJMRToKKworCWNhc2UgV01fRVJBU0VCS0dORDoKKwkgICAgcmV0dXJuIFRSRUVWSUVXX0VyYXNlQmFja2dyb3VuZCAod25kUHRyLCB3UGFyYW0sIGxQYXJhbSk7CisKKwljYXNlIFdNX0dFVERMR0NPREU6CisJICAgIHJldHVybiBETEdDX1dBTlRBUlJPV1MgfCBETEdDX1dBTlRDSEFSUzsKKwogCiAvLwljYXNlIFdNX1BBSU5UOgogLy8JICAgIHJldHVybiBUUkVFVklFV19QYWludCAod25kUHRyLCB3UGFyYW0pOwpAQCAtNDQsNyArMTQ5LDcgQEAKIAogLy8JY2FzZSBXTV9USU1FUjoKIAotLy8JY2FzZSBXTV9XSU5JTklDSEFOR0U6CisvLwljYXNlIFdNX1ZTQ1JPTEw6CiAKIAlkZWZhdWx0OgogCSAgICBpZiAodU1zZyA+PSBXTV9VU0VSKQpkaWZmIC0tZ2l0IGEvZGVidWdnZXIvZGJnLnkgYi9kZWJ1Z2dlci9kYmcueQppbmRleCAxNGZkM2IwLi40MDY2ODI0IDEwMDY0NAotLS0gYS9kZWJ1Z2dlci9kYmcueQorKysgYi9kZWJ1Z2dlci9kYmcueQpAQCAtNDc0LDcgKzQ3NCw2IEBACiAKICAgICAgICAgLyogUHV0IHRoZSBkaXNwbGF5IGluIGEgY29ycmVjdCBzdGF0ZSAqLwogCi0gICAgICAgIFhVbmdyYWJQb2ludGVyKCBkaXNwbGF5LCBDdXJyZW50VGltZSApOwogICAgICAgICBYVW5ncmFiU2VydmVyKCBkaXNwbGF5ICk7CiAgICAgICAgIFhGbHVzaCggZGlzcGxheSApOwogCmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9kYmdtYWluLmMgYi9kZWJ1Z2dlci9kYmdtYWluLmMKaW5kZXggMTc4NTcxNC4uZTJiNTJhMSAxMDA2NDQKLS0tIGEvZGVidWdnZXIvZGJnbWFpbi5jCisrKyBiL2RlYnVnZ2VyL2RiZ21haW4uYwpAQCAtMjMsMTIgKzIzLDYgQEAKIERpc3BsYXkgKiBkaXNwbGF5OwogCiBpbnQKLVhVbmdyYWJQb2ludGVyKCBEaXNwbGF5ICogZCwgVGltZSB0KQotewotICByZXR1cm4oMCk7Ci19Ci0KLWludAogWFVuZ3JhYlNlcnZlciggRGlzcGxheSAqIGQgKQogewogICByZXR1cm4oMCk7CmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uIGIvZG9jdW1lbnRhdGlvbi9SRUFETUUuZG9jdW1lbnRhdGlvbgppbmRleCA2YTkxZGM2Li5hOTRkNGI5IDEwMDY0NAotLS0gYS9kb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uCisrKyBiL2RvY3VtZW50YXRpb24vUkVBRE1FLmRvY3VtZW50YXRpb24KQEAgLTEyLDE5ICsxMiwyMyBAQAogICBUZXhpbmZvIHNvdXJjZSBmb3IgcHJlbGltaW5hcnkgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGluCiB0aGlzIGRpcmVjdG9yeS4gIFVzZSAnbWFrZSBpbmZvJyBpbiB0aGlzIGRpcmVjdG9yeSB0byBnZW5lcmF0ZSB0aGUgR05VCiBpbmZvIHZlcnNpb24sICdtYWtlIGR2aScgdG8gZ2VuZXJhdGUgdGhlIERWSSB2ZXJzaW9uIChoaXQgJ3InIHRvCi1pZ25vcmUgZXJyb3JzKSwgb3IgJ21ha2UgYWxsJyBmb3IgYm90aC4gSXQgaXMgbm8gbG9uZ2VyIGluc3RhbGxlZCBieQoraWdub3JlIGVycm9ycyksIG9yICdtYWtlIGFsbCcgZm9yIGJvdGguIEl0IGlzIG5vdCBpbnN0YWxsZWQgYnkKIGRlZmF1bHQuCiAKIFdpbmUgQVBJIGRvY3VtZW50YXRpb24KIAogICBEbyBhICdtYWtlIG1hbnBhZ2VzJyBpbiB0aGUgV2luZSB0b3BsZXZlbCBkaXJlY3RvcnkgdG8gZ2VuZXJhdGUgdGhlCiBBUEkgbWFucGFnZXMgZnJvbSB0aGUgV2luZSBzb3VyY2UsIG9yICdtYWtlIG1hbicgaW4gYW55IHNvdXJjZQotc3ViZGlyZWN0b3J5IHRvIGdlbmVyYXRlIG1hbnBhZ2VzIGZyb20gb25seSB0aGF0IGRpcmVjdG9yeS4gVGhlCi1tYW5wYWdlcyB3aWxsIGJlIGRlcG9zaXRlZCBpbiBbZG9jdW1lbnRhdGlvbi9tYW4zd10uICBZb3Ugd2lsbCBuZWVkCi1jMm1hbiwgYXZhaWxhYmxlIGFzIHNvdXJjZSBmcm9tIGh0dHA6Ly93d3cuZGViaWFuLm9yZy8gYW5kIG90aGVyCi1wbGFjZXMuIEFwcGx5IHRoZSBwYXRjaCBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgaW1wcm92ZWQKLXRlcnNlIGRlc2NyaXB0aW9uIGZvcm1hdHRpbmcuICBUaGUgbWFuIHBhZ2VzIGFyZSBub3QgaW5zdGFsbGVkCi1hdXRvbWF0aWNhbGx5Lgorc3ViZGlyZWN0b3J5IHRvIGdlbmVyYXRlIG1hbnBhZ2VzIGZyb20gb25seSB0aGF0IGRpcmVjdG9yeS4gT25seQorZnVuY3Rpb25zIG1lbnRpb25lZCBpbiBXaW5lIHNwZWMgZmlsZXMgd2lsbCBiZSBkb2N1bWVudGVkOyB0aGUKK3NwZWNpZmljIC5zcGVjIGZpbGVzIGNoZWNrZWQgYXJlIHNldCBieSB0aGUgTUFOU1BFQ1MgdmFyaWFibGUgaW4KK01ha2UucnVsZXMuIFRoZSBtYW5wYWdlcyB3aWxsIGJlIGdlbmVyYXRlZCBpbnRvCitbZG9jdW1lbnRhdGlvbi9tYW4zd10uIEZvciBIVE1MIGZvcm1hdHRlZCBtYW5wYWdlcywgZG8gJ21ha2UKK2h0bWxwYWdlcycgZnJvbSB0aGUgdG9wbGV2ZWwsIG9yICdtYWtlIGh0bWwnIGZyb20gYW55CitzdWJkaXJlY3RvcnkuIEhUTUwgZm9ybWF0dGVkIHBhZ2VzIGFyZSBnZW5lcmF0ZWQgaW50bworW2RvY3VtZW50YXRpb24vaHRtbF0uIFlvdSB3aWxsIG5lZWQgYzJtYW4gYXMgbW9kaWZpZWQgZm9yIFdpbmUsCithdmFpbGFibGUgYXMgc291cmNlIG9yIGJpbmFyeSBmcm9tIGZ0cDovL2Z0cC53aW5laHEuY29tL3B1Yi93aW5lLy4KK1RoZSBtYW4gcGFnZXMgYXJlIG5vdCBpbnN0YWxsZWQgYnkgJ21ha2UgaW5zdGFsbCcuCiAKIE90aGVyIFJFQURNRXMKIApAQCAtNDMsODAgKzQ3LDU5IEBACiBleGlzdGluZyBzb3VyY2UuIEZvciBleGFtcGxlLAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgIFBsYXlNZXRhRmlsZTMyIChHREkzMi4yNjUpIFJlbmRlciBtZXRhZmlsZSB0byBkZXZpY2UKKyAqICAgICAgICAgQ29weU1ldGFGaWxlMzJBICAgKEdESTMyLjIzKQogICoKLSAqICAgIFRoZSBtZXRhZmlsZSBpcyByZW5kZXJlZCBpbiB0aGUgZGV2aWNlIGNvbnRleHQgc3BlY2lmaWVkIGJ5IGhkYy4KKyAqICBDb3BpZXMgdGhlIG1ldGFmaWxlIGNvcnJlc3BvbmRpbmcgdG8gaFNyY01ldGFGaWxlIHRvIGVpdGhlcgorICogIGEgZGlzayBmaWxlLCBpZiBhIGZpbGVuYW1lIGlzIGdpdmVuLCBvciB0byBhIG5ldyBtZW1vcnkgYmFzZWQKKyAqICBtZXRhZmlsZSwgaWYgbHBGaWxlTmFtZSBpcyBOVUxMLgogICoKLSAqICBSRVRVUk5TCisgKiBSRVRVUk5TCiAgKgotICogICAgQWx3YXlzIHJldHVybnMgVFJVRS4KKyAqICBIYW5kbGUgdG8gbWV0YWZpbGUgY29weSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAgKgotICogRklYTUUKLSAqICAgIFdpbmUgbWV0YWZpbGVzIGFyZSBub3QgMTAwJSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIE1pY3Jvc29mdCBXaW5kb3dzCi0gKiAgICBtZXRhZmlsZXMuCisgKiBCVUdTCisgKgorICogIENvcHlpbmcgdG8gZGlzayByZXR1cm5zIE5VTEwgZXZlbiBpZiBzdWNjZXNzZnVsLgogICovCi1CT09MMzIgV0lOQVBJIFBsYXlNZXRhRmlsZTMyKAotICAgICAgICBIREMzMiBoZGMsIC8qIGhhbmRsZSBvZiBkZXZpY2UgY29udGV4dCBpbiB3aGljaCB0byByZW5kZXIgbWV0YWZpbGUgKi8KLSAgICAgICAgSE1FVEFGSUxFMzIgaG1mIC8qIG1ldGFmaWxlIGhhbmRsZSAqLwotKSB7CitITUVUQUZJTEUzMiBXSU5BUEkgQ29weU1ldGFGaWxlMzJBKAorCQkgICBITUVUQUZJTEUzMiBoU3JjTWV0YUZpbGUsIC8qIGhhbmRsZSBvZiBtZXRhZmlsZSB0byBjb3B5ICovCisJCSAgIExQQ1NUUiBscEZpbGVuYW1lIC8qIGZpbGVuYW1lIGlmIGNvcHlpbmcgdG8gYSBmaWxlICovCispIHsgLi4uIH0KIAogYmVjb21lcywgYWZ0ZXIgcHJvY2Vzc2luZyB3aXRoIGMybWFuIGFuZCBucm9mZiAtbWFuLAogCi0KLVBsYXlNZXRhRmlsZTMyKDN3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheU1ldGFGaWxlMzIoM3cpCitDb3B5TWV0YUZpbGVBKDN3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5TWV0YUZpbGVBKDN3KQogCiAKIE5BTUUKLSAgICAgICBQbGF5TWV0YUZpbGUzMiAgIC0gICBQbGF5TWV0YUZpbGUzMiAgIChHREkzMi4yNjUpICAgUmVuZGVyCi0gICAgICAgbWV0YWZpbGUgdG8gZGV2aWNlCisgICAgICAgQ29weU1ldGFGaWxlQSAtIENvcHlNZXRhRmlsZTMyQSAgIChHREkzMi4yMykKIAogU1lOT1BTSVMKLSAgICAgICBCT09MMzIgUGxheU1ldGFGaWxlMzIKKyAgICAgICBITUVUQUZJTEUzMiBDb3B5TWV0YUZpbGVBCiAgICAgICAgKAotICAgICAgICAgICAgSERDMzIgaGRjLAotICAgICAgICAgICAgSE1FVEFGSUxFMzIgaG1mCisgICAgICAgICAgICBITUVUQUZJTEUzMiBoU3JjTWV0YUZpbGUsCisgICAgICAgICAgICBMUENTVFIgbHBGaWxlbmFtZQogICAgICAgICk7CiAKIFBBUkFNRVRFUlMKLSAgICAgICBIREMzMiBoZGMKLSAgICAgICAgICAgICAgSGFuZGxlICBvZiAgZGV2aWNlICBjb250ZXh0ICBpbiAgd2hpY2ggIHRvICAgcmVuZGVyCi0gICAgICAgICAgICAgIG1ldGFmaWxlLgorICAgICAgIEhNRVRBRklMRTMyIGhTcmNNZXRhRmlsZQorICAgICAgICAgICAgICBIYW5kbGUgb2YgbWV0YWZpbGUgdG8gY29weS4KIAotICAgICAgIEhNRVRBRklMRTMyIGhtZgotICAgICAgICAgICAgICBNZXRhZmlsZSBoYW5kbGUuCisgICAgICAgTFBDU1RSIGxwRmlsZW5hbWUKKyAgICAgICAgICAgICAgRmlsZW5hbWUgaWYgY29weWluZyB0byBhIGZpbGUuCiAKIERFU0NSSVBUSU9OCi0gICAgICAgVGhlICBtZXRhZmlsZSAgaXMgcmVuZGVyZWQgaW4gdGhlIGRldmljZSBjb250ZXh0IHNwZWNpZmllZAotICAgICAgIGJ5IGhkYy4KKyAgICAgICBDb3BpZXMgIHRoZSAgbWV0YWZpbGUgIGNvcnJlc3BvbmRpbmcgIHRvICBoU3JjTWV0YUZpbGUgIHRvCisgICAgICAgZWl0aGVyIGEgZGlzayBmaWxlLCBpZiBhIGZpbGVuYW1lIGlzIGdpdmVuLCBvciAgdG8gIGEgIG5ldworICAgICAgIG1lbW9yeSBiYXNlZCBtZXRhZmlsZSwgaWYgbHBGaWxlTmFtZSBpcyBOVUxMLgogCiBSRVRVUk5TCi0gICAgICAgQWx3YXlzIHJldHVybnMgVFJVRS4KKyAgICAgICBIYW5kbGUgdG8gbWV0YWZpbGUgY29weSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCiAKLUZJWE1FCi0gICAgICAgV2luZSAgbWV0YWZpbGVzICBhcmUgIG5vdCAgMTAwJSAgYmluYXJ5ICBjb21wYXRpYmxlICAgd2l0aAotICAgICAgIE1pY3Jvc29mdCBXaW5kb3dzIG1ldGFmaWxlcy4KK0JVR1MKKyAgICAgICBDb3B5aW5nIHRvIGRpc2sgcmV0dXJucyBOVUxMIGV2ZW4gaWYgc3VjY2Vzc2Z1bC4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUGF0Y2ggZm9yIGMybWFuOgotCi1kaWZmIC11IGMybWFuLTIuNDEub3JpZy9tYW5wYWdlLmMgYzJtYW4tMi40MS9tYW5wYWdlLmMKLS0tLSBjMm1hbi0yLjQxLm9yaWcvbWFucGFnZS5jCVR1ZSBBcHIgMjMgMjE6MTM6NDQgMTk5NgotKysrIGMybWFuLTIuNDEvbWFucGFnZS5jCVRodSBEZWMgMTggMTM6MjA6MDggMTk5NwotQEAgLTU4NSwxMCArNTg1LDE1IEBACi0gCQkgICAgY29uc3QgY2hhciAqZW5kdGVyc2UsICphZnRlcmRhc2ggPSBza2lwZGFzaChzdGFydF9saW5lKTsKLSAKLSAJCSAgICAvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIHRlcnNlIGNvbW1lbnQgKi8KLS0JCSAgICB3aGlsZSAoKmMgJiYgKmMgIT0gJy4nICYmICpjICE9ICdcbicpCi0rCQkgICAgd2hpbGUgKCpjICYmICpjICE9ICdcbicpCi0rCQkgICAgewotIAkJCWMrKzsKLSsJCSAgICAgIC8qICcuJyBlbmRzIHRlcnNlIGRlc2NyaXB0aW9uIG9ubHkgaWYgaXQgZW5kcyBzZW50ZW5jZSAqLwotKwkJCWlmICgqKGMtMSk9PScuJyAmJiAqYyAmJiBpc3NwYWNlKCpjKSkgCi0rCQkJICBicmVhazsKLSsJCSAgICB9Ci0gCi0tCQkgICAgZW5kdGVyc2UgPSAqYyA9PSAnLicgPyBjKzEgOiBjOwotKwkJICAgIGVuZHRlcnNlID0gYzsKLSAJCSAgICAqdGVyc2UgPSBhbGxvY19zdHJpbmcoCi0gCQkJYWZ0ZXJkYXNoIDwgZW5kdGVyc2UgPyBhZnRlcmRhc2ggOiBzdGFydF9saW5lLAotIAkJCWVuZHRlcnNlKTsKK1NFRSBBTFNPCisgICAgICAgR2V0TWV0YUZpbGVBKDN3KSwgICBHZXRNZXRhRmlsZVcoM3cpLCAgIENvcHlNZXRhRmlsZVcoM3cpLAorICAgICAgIFBsYXlNZXRhRmlsZSgzdyksICBTZXRNZXRhRmlsZUJpdHNFeCgzdyksICBHZXRNZXRhRmlsZUJpdC0KKyAgICAgICBzRXgoM3cpCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVscyBiL2RvY3VtZW50YXRpb24vY2Ryb20tbGFiZWxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Mjk3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL2Nkcm9tLWxhYmVscwpAQCAtMCwwICsxLDQyIEBACitJZiBhIHByb2dyYW0gZGVwZW5kcyBvbiB0aGUgY29ycmVjdCBsYWJlbCBhbmQvb3Igc2VyaWFsIG51bWJlciBmb3IgdGhlCitDRC1Sb20sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBleHRyYWN0IHRoYXQgaW5mb3JtYXRpb246CisKKyAgICAgIGRkIGlmPTx5b3VyIGNkcm9tIGRldmljZT4gYnM9MSBza2lwPTMyODA4IGNvdW50PTMyCisKK1lvdSBuZWVkIHJlYWQgYWNjZXNzIHRvIHRoZSBkZXZpY2UsIHNvIHBlcmhhcHMgeW91IGhhdmUgdG8gZG8gaXQgYXMgcm9vdC4KK1B1dCB0aGUgcmVzdWx0aW5nIHN0cmluZyAod2l0aG91dCB0cmFpbGluZyBibGFua3MpIGludG8geW91cgord2luZS5pbmkvLndpbmVyYyBmaWxlIGxpa2U6CitMYWJlbD08dGhlIGxhYmVsPgorCitbRklYTUU6IGlmIHNvbWVvbmUga25vd3MgaG93IHRvIGdldCB0aGUgc2VyaWFsIG51bWJlciBpbiBMaW51eCwgcGxlYXNlCisgICAgICAgIHB1dCB0aGlzIGluZm9ybWF0aW9uIGhlcmVdLgorCitJZiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYSBXaW4zMiBzeXN0ZW0gYW5kIEMtY29tcGlsZXIsIHlvdSBjYW4gY29tcGlsZSB0aGUKK2ZvbGxvd2luZyBwcm9ncmFtIHRvIGV4dHJhY3QgdGhpcyBpbmZvcm1hdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBiZWdpbiB2b2xpbmZvLmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2W10pCit7CisgICAgY2hhciAgZHJpdmUsIHJvb3RbXT0iQzpcXCIsIGxhYmVsWzEwMDJdLCBmc25hbWVbMTAwMl07CisgICAgRFdPUkQgc2VyaWFsLCBmbGFncywgZmlsZW5hbWVsZW4sIGxhYmVsbGVuID0gMTAwMCwgZnNuYW1lbGVuID0gMTAwMDsKKworICAgIHByaW50ZigiRHJpdmUgU2VyaWFsICAgICBGbGFncyAgICAgIEZpbGVuYW1lLUxlbmd0aCAiCisgICAgICAgICAgICJMYWJlbCAgICAgICAgICAgICAgICAgRnNuYW1lXG4iKTsKKyAgICBmb3IgKGRyaXZlID0gJ0MnOyBkcml2ZSA8PSAnWic7IGRyaXZlKyspCisgICAgeworICAgICAgICByb290WzBdID0gZHJpdmU7CisgICAgICAgIGlmIChHZXRWb2x1bWVJbmZvcm1hdGlvbkEocm9vdCxsYWJlbCxsYWJlbGxlbiwmc2VyaWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlbmFtZWxlbiwmZmxhZ3MsZnNuYW1lLGZzbmFtZWxlbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmNhdChsYWJlbCwiXCIiKTsgc3RyY2F0IChmc25hbWUsIlwiIik7CisgICAgICAgICAgICBwcmludGYoIiVjOlxcICAgMHglMDhseCAweCUwOGx4ICUxNWxkIFwiJS0yMHMgXCIlLTIwc1xuIiwKKyAgICAgICAgICAgICAgICAgICBkcml2ZSwgKGxvbmcpIHNlcmlhbCwgKGxvbmcpIGZsYWdzLCAobG9uZykgZmlsZW5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgbGFiZWwsIGZzbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVuZCB2b2xpbmZvLmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vY29tbW9uX2NvbnRyb2xzIGIvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKaW5kZXggODNjY2RiOC4uNzIyZWRlYyAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKKysrIGIvZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHMKQEAgLTEwMCwxMyArMTAwLDEwIEBACiAzLjEwIExpc3QgVmlldyBDb250cm9sCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEF1dGhvcjoKLSAgICAgIER1bW15IHdyaXR0ZW4gYnkgRXJpYyBLb2hsLgorICAgICAgSmFtZXMgTWljaGFlbCBNYXN0cm9zIDxyb290QGplbm5pZmVyLXVuaXguZHluLm1sLm9yZz4KIAogICBTdGF0dXM6Ci0gICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCi0KLSAgTm90ZXM6Ci0gICAgICBUaGlzIGNvbnRyb2wgaXMgTkVFREVEIGluIG1hbnkgcGxhY2VzLiBBbnkgdm9sdW50ZWVycz8/CisgICAgICAtIERldmVsb3BtZW50IGluIHByb2dyZXNzLgogCiAKIDMuMTEgTW9udGggQ2FsZW5kYXIgQ29udHJvbApAQCAtMjEzLDEwICsyMTAsMTAgQEAKICAgICAgIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CiAKICAgU3RhdHVzOgotICAgICAgLSBEZXZlbG9wbWVudCBpbiBwcm9ncmVzcy4KKyAgICAgIC0gRGV2ZWxvcG1lbnQgaW4gcHJvZ3Jlc3MuIEFsbW9zdCBkb25lLgogCiAgIE5vdGVzCi0gICAgICBUaGUgY29udHJvbCBkb2VzIG5vdCBzaG93LgorICAgICAgVGhlIGNvbnRyb2wgZG9lcyBub3QgYmVoYXZlIHZlcnkgd2VsbC4gVGhpcyB3aWxsIGJlIGZpeGVkCiAKIAogMy4yMCBUcmFja2JhciBDb250cm9sCkBAIC0yMzMsOSArMjMwLDE0IEBACiAKIDMuMjEgVHJlZSBWaWV3IENvbnRyb2wKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXV0aG9yOgorICAgICAgRHVtbXkgd3JpdHRlbiBieSBFcmljIEtvaGwuCisKICAgU3RhdHVzOgotICAgICAgLSBOb3RoaW5nIGRvbmUgYXQgYWxsLgotICAgICAgLSBuZWVkZWQuCisgICAgICAtIER1bW15IGNvbnRyb2wuIE5vIGZ1bmN0aW9uYWxpdHkuCisKKyAgTm90ZXM6CisgICAgICBBdXRob3IgbmVlZGVkISEgQW55IHZvbHVudGVlcnM/PwogCiAKIDMuMjIgVXBkb3duIENvbnRyb2wKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vZGVidWdnaW5nIGIvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcKaW5kZXggZGNjOWRlMC4uYjkyOWM4ZiAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcKKysrIGIvZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcKQEAgLTI1NywzICsyNTcsODIgQEAKIAogV3JpdHRlbiBieSBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4sCiBhZGRpdGlvbnMgd2VsY29tZS4KKy0tLS0tLS0KKworSGVyZSBhcmUgc29tZSB1c2VmdWwgZGVidWdnaW5nIHRpcHMsIGFkZGVkIGJ5IEFuZHJlYXMgTW9ocjoKKworCithKSBJZiB5b3UgaGF2ZSBhIHByb2dyYW0gY3Jhc2hpbmcgYXQgc3VjaCBhbiBlYXJseSBsb2FkZXIgcGhhc2UgdGhhdCB5b3UgY2FuJ3QKK3VzZSB0aGUgV2luZSBkZWJ1Z2dlciBub3JtYWxseSwgYnV0IFdpbmUgYWxyZWFkeSBleGVjdXRlcyB0aGUgcHJvZ3JhbSdzCitzdGFydCBjb2RlLCB0aGVuIHlvdSBtYXkgdXNlIGEgc3BlY2lhbCB0cmljazoKK1lvdSBzaG91bGQgZG8gYQord2luZSAtZGVidWdtc2cgK3JlbGF5IHByb2dyYW0KK3RvIGdldCBhIGxpc3Rpbmcgb2YgdGhlIGZ1bmN0aW9ucyB0aGUgcHJvZ3JhbSBjYWxscyBpbiBpdHMgc3RhcnQgZnVuY3Rpb24uCitOb3cgeW91IGRvIGEKK3dpbmUgLWRlYnVnIHdpbmZpbGUuZXhlCitUaGlzIHdheSwgeW91IGdldCBpbnRvIFdpbmUtZGJnLiBOb3cgeW91IGNhbiBzZXQgYSBicmVha3BvaW50IG9uIGFueQorZnVuY3Rpb24gdGhlIHByb2dyYW0gY2FsbHMgaW4gdGhlIHN0YXJ0IGZ1bmN0aW9uIGFuZCBqdXN0IHR5cGUgImMiIHRvIGJ5cGFzcwordGhlIGV2ZW50dWFsIGNhbGxzIG9mIFdpbmZpbGUgdG8gdGhpcyBmdW5jdGlvbiB1bnRpbCB5b3UgYXJlIGZpbmFsbHkgYXQgdGhlCitwbGFjZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBjcmFzaGluZyBzdGFydCBmdW5jdGlvbi4KK05vdyB5b3UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIGRlYnVnZ2luZyBhcyB1c3VhbC4KKworCitiKSBJZiB5b3UgdHJ5IHRvIHJ1biBhIHByb2dyYW0gYW5kIGl0IHF1aXRzIGFmdGVyIHNob3dpbmcgYW4gZXJyb3IgbWVzc2FnZWJveCwKK3RoZSBwcm9ibGVtIGNhbiB1c3VhbGx5IGJlIGlkZW50aWZpZWQgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBvbmUgb2YgdGhlCitmdW5jdGlvbnMgZXhlY3V0ZWQgYmVmb3JlIE1lc3NhZ2VCb3goKS4KK1RoYXQncyB3aHkgeW91IHNob3VsZCByZS1ydW4gdGhlIHByb2dyYW0gd2l0aCBlLmcuCit3aW5lIC1kZWJ1Z21zZyArcmVsYXkgPHByb2dyYW0gbmFtZT4gJj5yZWxtc2cKK1RoZW4gZG8gYSAibW9yZSByZWxtc2ciIGFuZCBzZWFyY2ggZm9yIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBjYWxsIHRvIHRoZSBzdHJpbmcgIk1FU1NBR0VCT1giLgorVGhpcyBpcyBhIGxpbmUgbGlrZQorQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKKworSW4gbXkgZXhhbXBsZSB0aGUgbGluZXMgYmVmb3JlIHRoZSBjYWxsIHRvIE1lc3NhZ2VCb3goKSBsb29rIGxpa2UgdGhhdDoKKworQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDM0NykgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCitDYWxsVG8xNihmdW5jPTAzM2Y6MDA3Mixkcz0wMWZmLDB4MDAwMCkKK1JldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCitDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzZmKSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKK0NhbGxUbzE2KGZ1bmM9MDM2NzowMDcyLGRzPTAxZmYsMHgwMDAwKQorUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKK0NhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzMWYpIHJldD0wMWNmOjEwNWMgZHM9MDFmZgorQ2FsbFRvMTYoZnVuYz0wMzE3OjAwNzIsZHM9MDFmZiwweDAwMDApCitSZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwNWMgZHM9MDFmZgorQ2FsbCBVU0VSLjE3MTogV0lOSEVMUCgweDAyYWMsMHgwMWZmMDViNCAiQ09NRVQuSExQIiwweDAwMDIsMHgwMDAwMDAwMCkgcmV0PTAxY2Y6MTA3MCBkcz0wMWZmCitDYWxsVG8xNihmdW5jPTAxMTc6MDA4MCxkcz0wMWZmKQorQ2FsbCBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldD0wMGE3OjBhMmQgZHM9MDAyYgorUmV0ICBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldHZhbD0weDAwMDAgcmV0PTAwYTc6MGEyZCBkcz0wMDJiCitSZXQgIFVTRVIuMTcxOiBXSU5IRUxQKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDcwIGRzPTAxZmYKK0NhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAxYmUpIHJldD0wMWRmOjNlMjkgZHM9MDFmZgorUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDFkZjozZTI5IGRzPTAxZmYKK0NhbGwgS0VSTkVMLjUyOiBGUkVFUFJPQ0lOU1RBTkNFKDB4MDJjZjAwYmEpIHJldD0wMWY3OjE0NjAgZHM9MDFmZgorUmV0ICBLRVJORUwuNTI6IEZSRUVQUk9DSU5TVEFOQ0UoKSByZXR2YWw9MHgwMDAxIHJldD0wMWY3OjE0NjAgZHM9MDFmZgorQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKKworSSB0aGluayB0aGF0IHRoZSBjYWxsIHRvIE1lc3NhZ2VCb3goKSBpbiB0aGlzIGV4YW1wbGUgaXMgX25vdF8gY2F1c2VkIGJ5IGEgd3JvbmcgcmVzdWx0IHZhbHVlIG9mIHNvbWUgcHJldmlvdXNseSBleGVjdXRlZCBmdW5jdGlvbiAoaXQncyBoYXBwZW5pbmcgcXVpdGUgb2Z0ZW4gbGlrZSB0aGF0KSwgYnV0IGluc3RlYWQgdGhlIG1lc3NhZ2Vib3ggY29tcGxhaW5zIGFib3V0IGEgcnVudGltZSBlcnJvciBhdCAweDAwMDQ6MHgxMDU2LgorQXMgdGhlIHNlZ21lbnQgdmFsdWUgb2YgdGhlIGFkZHJlc3MgaXMgb25seSAiNCIsIEkgdGhpbmsgdGhhdCB0aGF0IGlzIG9ubHkgYW4gaW50ZXJuYWwgcHJvZ3JhbSB2YWx1ZS4gQnV0IHRoZSBvZmZzZXQgYWRkcmVzcyByZXZlYWxzIHNvbWV0aGluZyBxdWl0ZSBpbnRlcmVzdGluZzoKK09mZnNldCAxMDU2IGlzIF92ZXJ5XyBjbG9zZSB0byB0aGUgcmV0dXJuIGFkZHJlc3Mgb2YgRlJFRUxJQlJBUlkoKToKKworQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDMxZikgcmV0PTAxY2Y6MTA1YyBkcz0wMWZmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eCitQcm92aWRlZCB0aGF0IHNlZ21lbnQgMHgwMDA0IGlzIGluZGVlZCBzZWdtZW50IDB4MWNmLCB3ZSBub3cgd2UgY2FuIHVzZSBJREEgKGF2YWlsYWJsZSBhdCBmdHA6Ly9mdHAudW5pLWtvZWxuLmRlL3BjL21zZG9zL3Byb2dyYW1taW5nL2Fzc2VtYmxlci9pZGEzNWJ4LnppcCkgdG8KK2Rpc2Fzc2VtYmxlIHRoZSBwYXJ0IHRoYXQgY2F1c2VkIHRoZSBlcnJvci4gV2UganVzdCBoYXZlIHRvIGZpbmQgdGhlIGFkZHJlc3Mgb2YKK3RoZSBjYWxsIHRvIEZyZWVMaWJyYXJ5KCkuIFNvbWUgbGluZXMgYmVmb3JlIHRoYXQgdGhlIHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQuCitCdXQgYmUgY2FyZWZ1bCAhIEluIHNvbWUgY2FzZXMgeW91IGRvbid0IGhhdmUgdG8gZGlzYXNzZW1ibGUgdGhlIG1haW4gcHJvZ3JhbSwgYnV0IGluc3RlYWQgc29tZSBETEwgY2FsbGVkIGJ5IGl0IGluIG9yZGVyIHRvIGZpbmQgdGhlIGNvcnJlY3QgcGxhY2Ugd2hlcmUgdGhlIHJ1bnRpbWUgZXJyb3Igb2NjdXJyZWQuIFRoYXQgY2FuIGJlIGRldGVybWluZWQgYnkgZmluZGluZyB0aGUgb3JpZ2luIG9mIHRoZSBzZWdtZW50IHZhbHVlIChpbiB0aGlzIGNhc2UgMHgxY2YpLgorCitjKSBJZiB5b3UgaGF2ZSBjcmVhdGVkIGEgcmVsYXkgZmlsZSBvZiBzb21lIGNyYXNoaW5nIHByb2dyYW0gYW5kIHdhbnQgdG8gc2V0IGEKK2JyZWFrcG9pbnQgYXQgYSBjZXJ0YWluIGxvY2F0aW9uIHdoaWNoIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGFzIHRoZQorcHJvZ3JhbSBsb2FkcyB0aGUgYnJlYWtwb2ludCdzIHNlZ21lbnQgZHVyaW5nIGV4ZWN1dGlvbiwKK3lvdSBtYXkgc2V0IGEgYnJlYWtwb2ludCB0byBHZXRWZXJzaW9uMTYvMzIgYXMgdGhvc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQKK3Zlcnkgb2Z0ZW4uCitUaGVuIGRvIGEgImMiIHVudGlsIHlvdSBhcmUgYWJsZSB0byBzZXQgdGhpcyBicmVha3BvaW50IHdpdGhvdXQgZXJyb3IgbWVzc2FnZS4KKworZCkgU29tZSB1c2VmdWwgcHJvZ3JhbXM6CitJREE6IGZ0cDovL2Z0cC51bmkta29lbG4uZGUvcGMvbXNkb3MvcHJvZ3JhbW1pbmcvYXNzZW1ibGVyL2lkYTM1YnguemlwCisqVmVyeSogZ29vZCBET1MgZGlzYXNzZW1ibGVyICEgSXQncyBiYWRseSBuZWVkZWQgZm9yIGRlYnVnZ2luZyBXaW5lIHNvbWV0aW1lcy4KKworWFJBWTogZnRwOi8vZnRwLnRoLWRhcm1zdGFkdC5kZS9wdWIvbWFjaGluZXMvbXMtZG9zL1NpbVRlbC9tc2Rvcy9hc211dGlsL3hyYXkxNS56aXAKK1RyYWNlcyBET1MgY2FsbHMgKEludCAyMWgsIERQTUksIC4uLikuIFVzZSBpdCB3aXRoIFdpbmRvd3MgdG8gY29ycmVjdAorZmlsZSBtYW5hZ2VtZW50IHByb2JsZW1zIGV0Yy4KKworcGVkdW1wOiBodHRwOi8vb2FrLm9ha2xhbmQuZWR1L3B1Yi9zaW10ZWxuZXQvd2luOTUvcHJvZy9wZWR1bXAuemlwCitEdW1wcyB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBvZiBhIFBFIChQb3J0YWJsZSBFeGVjdXRhYmxlKSBETEwuCmRpZmYgLS1naXQgYS9kb2N1bWVudGF0aW9uL3dpbjk1bG9vayBiL2RvY3VtZW50YXRpb24vd2luOTVsb29rCmluZGV4IGM1N2U3YWUuLmJkMDRiZjkgMTAwNjQ0Ci0tLSBhL2RvY3VtZW50YXRpb24vd2luOTVsb29rCisrKyBiL2RvY3VtZW50YXRpb24vd2luOTVsb29rCkBAIC0zMCw5ICszMCw2IEBACiBNZW51SGlnaGxpZ2h0TGVmdE51ZGdlPTxwaXhlbHM+ICMgTnVkZ2VzIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGhpZ2hsaWdodCBiYXIKIE1lbnVIaWdobGlnaHRSaWdodE51ZGdlPTxwaXhlbHM+ICMgTnVkZ2VzIHRoZSByaWdodCBzaWRlIG9mIHRoZSBoaWdobGlnaHQgYmFyCiBNZW51SGlnaGxpZ2h0Qm90dG9tTnVkZ2U9PHBpeGVscz4gIyBOdWRnZXMgdGhlIGJvdHRvbSBvZiB0aGUgaGlnaGxpZ2h0IGJhcgotQ2FwdGlvbkhlaWdodD08cGl4ZWxzPiAgICAgICAgIyBTZXRzIHRoZSBoZWlnaHQgb2Ygd2luZG93IGNhcHRpb25zCi1DYXB0aW9uTGVmdE51ZGdlPTxwaXhlbHM+ICAgICAjIE51ZGdlcyB0aGUgY2FwdGlvbiB0ZXh0IG9mIHdpbmRvd3MgZG93bi91cAotQ2FwdGlvblRvcE51ZGdlPTxwaXhlbHM+ICAgICAgIyBOdWRnZXMgdGhlIGNhcHRpb24gdGV4dCBvZiB3aW5kb3dzIGxlZnQvcmlnaHQKIENhcHRpb25BbGlnbm1lbnQ9W2xlZnR8cmlnaHR8Y2VudGVyXSAjIFNldHMgdGhlIGFsaWdubWVudCBvZiBjYXB0aW9uIHRleHQKIFN5c0NvbnRyb2xOdWRnZT08cGl4ZWxzPiAgICAgICMgTnVkZ2VzIHRoZSBzeXN0ZW0gbWVudSBsZWZ0L3JpZ2h0CiBNYXhDb250cm9sTnVkZ2U9PHBpeGVscz4gICAgICAjIE51ZGdlcyB0aGUgbWF4aW1pemUgY29udHJvbCBsZWZ0L3JpZ2h0CmRpZmYgLS1naXQgYS9maWxlcy9kaXJlY3RvcnkuYyBiL2ZpbGVzL2RpcmVjdG9yeS5jCmluZGV4IDI2ZGVkMzEuLjk4MzVhN2QgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2RpcmVjdG9yeS5jCisrKyBiL2ZpbGVzL2RpcmVjdG9yeS5jCkBAIC0yODUsNyArMjg1LDcgQEAKICAgICBET1NfRlVMTF9OQU1FIGZ1bGxfbmFtZTsKIAogICAgIFRSQUNFKGZpbGUsICIoJXMsJXApXG4iLCBwYXRoLCBscHNlY2F0dHJpYnMgKTsKLSAgICBpZiAoRE9TRlNfSXNEZXZpY2UoIHBhdGggKSkKKyAgICBpZiAoRE9TRlNfR2V0RGV2aWNlKCBwYXRoICkpCiAgICAgewogICAgICAgICBUUkFDRShmaWxlLCAiY2Fubm90IHVzZSBkZXZpY2UgJyVzJyFcbiIscGF0aCk7CiAgICAgICAgIERPU19FUlJPUiggRVJfQWNjZXNzRGVuaWVkLCBFQ19BY2Nlc3NEZW5pZWQsIFNBX0Fib3J0LCBFTF9EaXNrICk7CkBAIC0zNTMsNyArMzUzLDcgQEAKIAogICAgIFRSQUNFKGZpbGUsICInJXMnXG4iLCBwYXRoICk7CiAKLSAgICBpZiAoRE9TRlNfSXNEZXZpY2UoIHBhdGggKSkKKyAgICBpZiAoRE9TRlNfR2V0RGV2aWNlKCBwYXRoICkpCiAgICAgewogICAgICAgICBUUkFDRShmaWxlLCAiY2Fubm90IHJlbW92ZSBkZXZpY2UgJyVzJyFcbiIsIHBhdGgpOwogICAgICAgICBET1NfRVJST1IoIEVSX0ZpbGVOb3RGb3VuZCwgRUNfTm90Rm91bmQsIFNBX0Fib3J0LCBFTF9EaXNrICk7CmRpZmYgLS1naXQgYS9maWxlcy9kb3NfZnMuYyBiL2ZpbGVzL2Rvc19mcy5jCmluZGV4IDhjMTY1OWQuLjEyMDRkMDkgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2Rvc19mcy5jCisrKyBiL2ZpbGVzL2Rvc19mcy5jCkBAIC00NiwxMSArNDYsMjUgQEAKIC8qIENoYXJzIHdlIGRvbid0IHdhbnQgdG8gc2VlIGluIERPUyBmaWxlIG5hbWVzICovCiAjZGVmaW5lIElOVkFMSURfRE9TX0NIQVJTICAiKj88PnxcIis9LDtbXSBcMzQ1IgogCi1zdGF0aWMgY29uc3QgY2hhciAqRE9TRlNfRGV2aWNlc1tdID0gewotIkNPTiIsIlBSTiIsIk5VTCIsIkFVWCIsIkxQVDEiLCJMUFQyIiwiTFBUMyIsIkxQVDQiLCJDT00xIiwiQ09NMiIsIkNPTTMiLCJDT000IiwiU0NTSU1HUiQiCitzdGF0aWMgY29uc3QgRE9TX0RFVklDRSBET1NGU19EZXZpY2VzW10gPQorLyogbmFtZSwgZGV2aWNlIGZsYWdzIChzZWUgSW50IDIxL0FYPTB4NDQwMCkgKi8KK3sKKyAgICB7ICJDT04iLAkJMHhjMGQzIH0sCisgICAgeyAiUFJOIiwJCTB4YTBjMCB9LAorICAgIHsgIk5VTCIsCQkweDgwYzQgfSwKKyAgICB7ICJBVVgiLAkJMHg4MGMwIH0sCisgICAgeyAiTFBUMSIsCQkweGEwYzAgfSwKKyAgICB7ICJMUFQyIiwJCTB4YTBjMCB9LAorICAgIHsgIkxQVDMiLAkJMHhhMGMwIH0sCisgICAgeyAiTFBUNCIsCQkweGMwZDMgfSwKKyAgICB7ICJDT00xIiwJCTB4ODBjMCB9LAorICAgIHsgIkNPTTIiLAkJMHg4MGMwIH0sCisgICAgeyAiQ09NMyIsCQkweDgwYzAgfSwKKyAgICB7ICJDT000IiwJCTB4ODBjMCB9LAorICAgIHsgIlNDU0lNR1IkIiwJMHhjMGMwIH0sCisgICAgeyAiSFBTQ0FOIiwJCTB4YzBjMCB9CiB9OwogCi0KICNkZWZpbmUgR0VUX0RSSVZFKHBhdGgpIFwKICAgICAoKChwYXRoKVsxXSA9PSAnOicpID8gdG91cHBlcigocGF0aClbMF0pIC0gJ0EnIDogRE9TRlNfQ3VyRHJpdmUpCiAKQEAgLTU1NCwxMSArNTY4LDExIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRE9TRlNfSXNEZXZpY2UKKyAqICAgICAgICAgICBET1NGU19HZXREZXZpY2UKICAqCi0gKiBDaGVjayBpZiBhIERPUyBmaWxlIG5hbWUgcmVwcmVzZW50cyBhIERPUyBkZXZpY2UuCisgKiBDaGVjayBpZiBhIERPUyBmaWxlIG5hbWUgcmVwcmVzZW50cyBhIERPUyBkZXZpY2UgYW5kIHJldHVybiB0aGUgZGV2aWNlLgogICovCi1CT09MMzIgRE9TRlNfSXNEZXZpY2UoIGNvbnN0IGNoYXIgKm5hbWUgKQorY29uc3QgRE9TX0RFVklDRSAqRE9TRlNfR2V0RGV2aWNlKCBjb25zdCBjaGFyICpuYW1lICkKIHsKICAgICBpbnQJaTsKICAgICBjb25zdCBjaGFyICpwOwpAQCAtNTY4LDE0ICs1ODIsMTQgQEAKICAgICBpZiAoKHAgPSBzdHJyY2hyKCBuYW1lLCAnXFwnICkpKSBuYW1lID0gcCArIDE7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihET1NGU19EZXZpY2VzKS9zaXplb2YoRE9TRlNfRGV2aWNlc1swXSk7IGkrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmRldiA9IERPU0ZTX0RldmljZXNbaV07CisgICAgICAgIGNvbnN0IGNoYXIgKmRldiA9IERPU0ZTX0RldmljZXNbaV0ubmFtZTsKICAgICAgICAgaWYgKCFsc3RybmNtcGkzMkEoIGRldiwgbmFtZSwgc3RybGVuKGRldikgKSkKICAgICAgICAgewogICAgICAgICAgICAgcCA9IG5hbWUgKyBzdHJsZW4oIGRldiApOwotICAgICAgICAgICAgaWYgKCEqcCB8fCAoKnAgPT0gJy4nKSkgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICBpZiAoISpwIHx8ICgqcCA9PSAnLicpKSByZXR1cm4gJkRPU0ZTX0RldmljZXNbaV07CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBOVUxMOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU5NSwxNSArNjA5LDE1IEBACiAgICAgaWYgKChwID0gc3RycmNociggbmFtZSwgJ1xcJyApKSkgbmFtZSA9IHAgKyAxOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoRE9TRlNfRGV2aWNlcykvc2l6ZW9mKERPU0ZTX0RldmljZXNbMF0pOyBpKyspCiAgICAgewotICAgICAgICBjb25zdCBjaGFyICpkZXYgPSBET1NGU19EZXZpY2VzW2ldOworICAgICAgICBjb25zdCBjaGFyICpkZXYgPSBET1NGU19EZXZpY2VzW2ldLm5hbWU7CiAgICAgICAgIGlmICghbHN0cm5jbXBpMzJBKCBkZXYsIG5hbWUsIHN0cmxlbihkZXYpICkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHAgPSBuYW1lICsgc3RybGVuKCBkZXYgKTsKICAgICAgICAgICAgIGlmICghKnAgfHwgKCpwID09ICcuJykpIHsKIAkgICAgCS8qIGdvdCBpdCAqLwotCQlpZiAoIXN0cmNtcChET1NGU19EZXZpY2VzW2ldLCJOVUwiKSkKKwkJaWYgKCFzdHJjbXAoRE9TRlNfRGV2aWNlc1tpXS5uYW1lLCJOVUwiKSkKIAkJCXJldHVybiBGSUxFX09wZW5Vbml4RmlsZSgiL2Rldi9udWxsIix1bml4bW9kZSk7Ci0JCWlmICghc3RyY21wKERPU0ZTX0RldmljZXNbaV0sIkNPTiIpKSB7CisJCWlmICghc3RyY21wKERPU0ZTX0RldmljZXNbaV0ubmFtZSwiQ09OIikpIHsKIAkJCXN3aXRjaCAodW5peG1vZGUpIHsKIAkJCWNhc2UgT19SRE9OTFk6CiAJCQkJcmV0dXJuIEdldFN0ZEhhbmRsZSggU1REX0lOUFVUX0hBTkRMRSApOwpAQCAtNjE3LDcgKzYzMSw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYgKCFzdHJjbXAoRE9TRlNfRGV2aWNlc1tpXSwiU0NTSU1HUiQiKSkgeworCQlpZiAoIXN0cmNtcChET1NGU19EZXZpY2VzW2ldLm5hbWUsIlNDU0lNR1IkIikpIHsKIAkJICAgICAgICBpZiAoKGhhbmRsZSA9IEZJTEVfQWxsb2MoICZmaWxlICkpID09IElOVkFMSURfSEFORExFX1ZBTFVFMzIpCiAJCQkJcmV0dXJuIEhGSUxFX0VSUk9SMzI7CiAJCQllbHNlIHsKQEAgLTYyNSw3ICs2MzksMTUgQEAKIAkJCQlyZXR1cm4gaGFuZGxlOwogCQkJfQogCQl9Ci0JCUZJWE1FKGRvc2ZzLCJkZXZpY2Ugb3BlbiAlcyBub3Qgc3VwcG9ydGVkICh5ZXQpXG4iLERPU0ZTX0RldmljZXNbaV0pOworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKERPU0ZTX0RldmljZXNbaV0ubmFtZSwiSFBTQ0FOIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlID0gRklMRV9BbGxvYyggJmZpbGUgKSkgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUzMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEhGSUxFX0VSUk9SMzI7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+dW5peF9uYW1lID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBuYW1lICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCQlGSVhNRShkb3NmcywiZGV2aWNlIG9wZW4gJXMgbm90IHN1cHBvcnRlZCAoeWV0KVxuIixET1NGU19EZXZpY2VzW2ldLm5hbWUpOwogICAgIAkJcmV0dXJuIEhGSUxFX0VSUk9SMzI7CiAJICAgIH0KICAgICAgICAgfQpAQCAtNzcwLDcgKzc5MiwxMiBAQAogICAgICAgICAgICAgICAgICAgIChwX3MgPCBmdWxsLT5zaG9ydF9uYW1lICsgc2l6ZW9mKGZ1bGwtPnNob3J0X25hbWUpIC0gMSkgJiYKICAgICAgICAgICAgICAgICAgICAocF9sIDwgZnVsbC0+bG9uZ19uYW1lICsgc2l6ZW9mKGZ1bGwtPmxvbmdfbmFtZSkgLSAxKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcF9sKysgPSAqcF9zKysgPSB0b2xvd2VyKCpuYW1lKTsKKyAgICAgICAgICAgICAgICAqcF9zKysgPSB0b2xvd2VyKCpuYW1lKTsKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgZHJpdmUgaXMgY2FzZS1zZW5zaXRpdmUgd2Ugd2FudCB0byBjcmVhdGUgbmV3ICovCisgICAgICAgICAgICAgICAgLyogZmlsZXMgaW4gbG93ZXItY2FzZSBvdGhlcndpc2Ugd2UgY2FuJ3QgcmVvcGVuIHRoZW0gICAqLworICAgICAgICAgICAgICAgIC8qIHVuZGVyIHRoZSBzYW1lIHNob3J0IG5hbWUuICovCisJICAgIAlpZiAoZmxhZ3MgJiBEUklWRV9DQVNFX1NFTlNJVElWRSkgKnBfbCsrID0gdG9sb3dlcigqbmFtZSk7CisJCWVsc2UgKnBfbCsrID0gKm5hbWU7CiAgICAgICAgICAgICAgICAgbmFtZSsrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKnBfbCA9ICpwX3MgPSAnXDAnOwpkaWZmIC0tZ2l0IGEvZmlsZXMvZHJpdmUuYyBiL2ZpbGVzL2RyaXZlLmMKaW5kZXggZGUyNTQ5MS4uOGRjZjY5ZSAxMDA2NDQKLS0tIGEvZmlsZXMvZHJpdmUuYworKysgYi9maWxlcy9kcml2ZS5jCkBAIC05NzEsNiArOTcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQU1RSIGZzbmFtZSwgRFdPUkQgZnNuYW1lX2xlbiApCiB7CiAgICAgaW50IGRyaXZlOworICAgIGNoYXIgKmNwOwogCiAgICAgLyogRklYTUUsIFNldExhc3RFcnJvcnMgbWlzc2luZyAqLwogCkBAIC05ODUsNyArOTg2LDEzIEBACiAgICAgICAgIGRyaXZlID0gdG91cHBlcihyb290WzBdKSAtICdBJzsKICAgICB9CiAgICAgaWYgKCFEUklWRV9Jc1ZhbGlkKCBkcml2ZSApKSByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKGxhYmVsKSBsc3RyY3B5bjMyQSggbGFiZWwsIERPU0RyaXZlc1tkcml2ZV0ubGFiZWwsIGxhYmVsX2xlbiApOworICAgIGlmIChsYWJlbCkKKyAgICB7CisgICAgICAgbHN0cmNweW4zMkEoIGxhYmVsLCBET1NEcml2ZXNbZHJpdmVdLmxhYmVsLCBsYWJlbF9sZW4gKTsKKyAgICAgICBmb3IgKGNwID0gbGFiZWw7ICpjcDsgY3ArKyk7CisgICAgICAgd2hpbGUgKGNwICE9IGxhYmVsICYmICooY3AtMSkgPT0gJyAnKSBjcC0tOworICAgICAgICpjcCA9ICdcMCc7CisgICAgfQogICAgIGlmIChzZXJpYWwpICpzZXJpYWwgPSBET1NEcml2ZXNbZHJpdmVdLnNlcmlhbDsKIAogICAgIC8qIFNldCB0aGUgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZmlsZXMvZmlsZS5jIGIvZmlsZXMvZmlsZS5jCmluZGV4IGM0OGJiYzYuLmQ5YWM5NzcgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2ZpbGUuYworKysgYi9maWxlcy9maWxlLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICoKICAqIFJlbGVhc2UgYSBET1MgZmlsZSBvYnRhaW5lZCB3aXRoIEZJTEVfR2V0RmlsZS4KICAqLwotc3RhdGljIHZvaWQgRklMRV9SZWxlYXNlRmlsZSggRklMRV9PQkpFQ1QgKmZpbGUgKQordm9pZCBGSUxFX1JlbGVhc2VGaWxlKCBGSUxFX09CSkVDVCAqZmlsZSApCiB7CiAgICAgSzMyT0JKX0RlY0NvdW50KCAmZmlsZS0+aGVhZGVyICk7CiB9CkBAIC0zNTAsNyArMzUwLDcgQEAKIAogICAgIGlmICghcGF0aCkgcmV0dXJuIEhGSUxFX0VSUk9SMzI7CiAKLSAgICBpZiAoRE9TRlNfSXNEZXZpY2UoIHBhdGggKSkKKyAgICBpZiAoRE9TRlNfR2V0RGV2aWNlKCBwYXRoICkpCiAgICAgewogICAgIAlIRklMRTMyCXJldDsKIApAQCAtMzg4LDcgKzM4OCw3IEBACiAKICAgICBpZiAoIXBhdGgpIHJldHVybiBJTlZBTElEX0hBTkRMRV9WQUxVRTMyOwogCi0gICAgaWYgKERPU0ZTX0lzRGV2aWNlKCBwYXRoICkpCisgICAgaWYgKERPU0ZTX0dldERldmljZSggcGF0aCApKQogICAgIHsKICAgICAgICAgV0FSTihmaWxlLCAiY2Fubm90IGNyZWF0ZSBET1MgZGV2aWNlICclcychXG4iLCBwYXRoKTsKICAgICAgICAgRE9TX0VSUk9SKCBFUl9BY2Nlc3NEZW5pZWQsIEVDX05vdEZvdW5kLCBTQV9BYm9ydCwgRUxfRGlzayApOwpAQCAtMTI3OCw3ICsxMjc4LDcgQEAKIAogICAgIFRSQUNFKGZpbGUsICInJXMnXG4iLCBwYXRoICk7CiAKLSAgICBpZiAoRE9TRlNfSXNEZXZpY2UoIHBhdGggKSkKKyAgICBpZiAoRE9TRlNfR2V0RGV2aWNlKCBwYXRoICkpCiAgICAgewogICAgICAgICBXQVJOKGZpbGUsICJjYW5ub3QgcmVtb3ZlIERPUyBkZXZpY2UgJyVzJyFcbiIsIHBhdGgpOwogICAgICAgICBET1NfRVJST1IoIEVSX0ZpbGVOb3RGb3VuZCwgRUNfTm90Rm91bmQsIFNBX0Fib3J0LCBFTF9EaXNrICk7CmRpZmYgLS1naXQgYS9maWxlcy9wcm9maWxlLmMgYi9maWxlcy9wcm9maWxlLmMKaW5kZXggNDExMGU3MS4uYzFmMGRhZiAxMDA2NDQKLS0tIGEvZmlsZXMvcHJvZmlsZS5jCisrKyBiL2ZpbGVzL3Byb2ZpbGUuYwpAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAiZmlsZS5oIgogI2luY2x1ZGUgImhlYXAuaCIKQEAgLTM2LDExICszOCwxNiBAQAogICAgIGNoYXIgICAgICAgICAgICAqZG9zX25hbWU7CiAgICAgY2hhciAgICAgICAgICAgICp1bml4X25hbWU7CiAgICAgY2hhciAgICAgICAgICAgICpmaWxlbmFtZTsKKyAgICB0aW1lX3QgICAgICAgICAgIG10aW1lOwogfSBQUk9GSUxFOwogCiAKLS8qIENhY2hlZCBwcm9maWxlIGZpbGUgKi8KLXN0YXRpYyBQUk9GSUxFIEN1clByb2ZpbGUgPSB7IEZBTFNFLCBOVUxMLCBOVUxMIH07CisjZGVmaW5lIE5fQ0FDSEVEX1BST0ZJTEVTIDEwCisKKy8qIENhY2hlZCBwcm9maWxlIGZpbGVzICovCitzdGF0aWMgUFJPRklMRSAqTVJVUHJvZmlsZVtOX0NBQ0hFRF9QUk9GSUxFU109e05VTEx9OworCisjZGVmaW5lIEN1clByb2ZpbGUgKE1SVVByb2ZpbGVbMF0pCiAKIC8qIHdpbmUuaW5pIHByb2ZpbGUgY29udGVudCAqLwogc3RhdGljIFBST0ZJTEVTRUNUSU9OICpXaW5lUHJvZmlsZTsKQEAgLTIwNSwxNyArMjEyLDIyIEBACiAgICAgICAgICAgICAgICAgbmV4dF9zZWN0aW9uICA9ICZzZWN0aW9uLT5uZXh0OwogICAgICAgICAgICAgICAgIG5leHRfa2V5ICAgICAgPSAmc2VjdGlvbi0+a2V5OwogICAgICAgICAgICAgICAgIHByZXZfa2V5ICAgICAgPSBOVUxMOworCisgICAgICAgICAgICAgICAgVFJBQ0UocHJvZmlsZSwgIk5ldyBzZWN0aW9uOiAnJXMnXG4iLHNlY3Rpb24tPm5hbWUpOworCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBwMj1wK3N0cmxlbihwKSAtIDE7CisgICAgICAgIHdoaWxlICgocDIgPiBwKSAmJiAoKCpwMiA9PSAnXG4nKSB8fCBQUk9GSUxFX2lzc3BhY2UoKnAyKSkpICpwMi0tPSdcMCc7CisKICAgICAgICAgaWYgKChwMiA9IHN0cmNociggcCwgJz0nICkpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNoYXIgKnAzID0gcDIgLSAxOwogICAgICAgICAgICAgd2hpbGUgKChwMyA+IHApICYmIFBST0ZJTEVfaXNzcGFjZSgqcDMpKSAqcDMtLSA9ICdcMCc7CiAgICAgICAgICAgICAqcDIrKyA9ICdcMCc7CiAgICAgICAgICAgICB3aGlsZSAoKnAyICYmIFBST0ZJTEVfaXNzcGFjZSgqcDIpKSBwMisrOwotICAgICAgICAgICAgcDMgPSBwMiArIHN0cmxlbihwMikgLSAxOwotICAgICAgICAgICAgd2hpbGUgKChwMyA+IHAyKSAmJiAoKCpwMyA9PSAnXG4nKSB8fCBQUk9GSUxFX2lzc3BhY2UoKnAzKSkpICpwMy0tPSdcMCc7CiAgICAgICAgIH0KIAogICAgICAgICBpZigqcCB8fCAhcHJldl9rZXkgfHwgKnByZXZfa2V5LT5uYW1lKQpAQCAtMzQxLDkgKzM1MywxNiBAQAogICAgIGNoYXIgKnAsIGJ1ZmZlcltNQVhfUEFUSE5BTUVfTEVOXTsKICAgICBjb25zdCBjaGFyICp1bml4X25hbWU7CiAgICAgRklMRSAqZmlsZSA9IE5VTEw7CisgICAgc3RydWN0IHN0YXQgYnVmOwogCi0gICAgaWYgKCFDdXJQcm9maWxlLmNoYW5nZWQgfHwgIUN1clByb2ZpbGUuZG9zX25hbWUpIHJldHVybiBUUlVFOwotICAgIGlmICghKHVuaXhfbmFtZSA9IEN1clByb2ZpbGUudW5peF9uYW1lKSB8fCAhKGZpbGUgPSBmb3Blbih1bml4X25hbWUsICJ3IikpKQorICAgIGlmKCFDdXJQcm9maWxlKQorICAgIHsKKyAgICAgICAgV0FSTihwcm9maWxlLCAiTm8gY3VycmVudCBwcm9maWxlIVxuIik7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBpZiAoIUN1clByb2ZpbGUtPmNoYW5nZWQgfHwgIUN1clByb2ZpbGUtPmRvc19uYW1lKSByZXR1cm4gVFJVRTsKKyAgICBpZiAoISh1bml4X25hbWUgPSBDdXJQcm9maWxlLT51bml4X25hbWUpIHx8ICEoZmlsZSA9IGZvcGVuKHVuaXhfbmFtZSwgInciKSkpCiAgICAgewogICAgICAgICAvKiBUcnkgdG8gY3JlYXRlIGl0IGluICRIT01FLy53aW5lICovCiAgICAgICAgIC8qIEZJWE1FOiB0aGlzIHdpbGwgbmVlZCBhIG1vcmUgZ2VuZXJhbCBzb2x1dGlvbiAqLwpAQCAtMzUyLDcgKzM3MSw3IEBACiAgICAgICAgICAgICBzdHJjcHkoIGJ1ZmZlciwgcCApOwogICAgICAgICAgICAgc3RyY2F0KCBidWZmZXIsICIvLndpbmUvIiApOwogICAgICAgICAgICAgcCA9IGJ1ZmZlciArIHN0cmxlbihidWZmZXIpOwotICAgICAgICAgICAgc3RyY3B5KCBwLCBzdHJyY2hyKCBDdXJQcm9maWxlLmRvc19uYW1lLCAnXFwnICkgKyAxICk7CisgICAgICAgICAgICBzdHJjcHkoIHAsIHN0cnJjaHIoIEN1clByb2ZpbGUtPmRvc19uYW1lLCAnXFwnICkgKyAxICk7CiAgICAgICAgICAgICBDaGFyTG93ZXIzMkEoIHAgKTsKICAgICAgICAgICAgIGZpbGUgPSBmb3BlbiggYnVmZmVyLCAidyIgKTsKICAgICAgICAgICAgIHVuaXhfbmFtZSA9IGJ1ZmZlcjsKQEAgLTM2MSwxNCArMzgwLDE2IEBACiAgICAgCiAgICAgaWYgKCFmaWxlKQogICAgIHsKLSAgICAgICAgV0FSTihwcm9maWxlLCAiY291bGQgbm90IHNhdmUgcHJvZmlsZSBmaWxlICVzXG4iLCBDdXJQcm9maWxlLmRvc19uYW1lKTsKKyAgICAgICAgV0FSTihwcm9maWxlLCAiY291bGQgbm90IHNhdmUgcHJvZmlsZSBmaWxlICVzXG4iLCBDdXJQcm9maWxlLT5kb3NfbmFtZSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKLSAgICBUUkFDRShwcm9maWxlLCAiU2F2aW5nICclcycgaW50byAnJXMnXG4iLCBDdXJQcm9maWxlLmRvc19uYW1lLCB1bml4X25hbWUgKTsKLSAgICBQUk9GSUxFX1NhdmUoIGZpbGUsIEN1clByb2ZpbGUuc2VjdGlvbiApOworICAgIFRSQUNFKHByb2ZpbGUsICJTYXZpbmcgJyVzJyBpbnRvICclcydcbiIsIEN1clByb2ZpbGUtPmRvc19uYW1lLCB1bml4X25hbWUgKTsKKyAgICBQUk9GSUxFX1NhdmUoIGZpbGUsIEN1clByb2ZpbGUtPnNlY3Rpb24gKTsKICAgICBmY2xvc2UoIGZpbGUgKTsKLSAgICBDdXJQcm9maWxlLmNoYW5nZWQgPSBGQUxTRTsKKyAgICBDdXJQcm9maWxlLT5jaGFuZ2VkID0gRkFMU0U7CisgICAgaWYoIXN0YXQodW5peF9uYW1lLCZidWYpKQorICAgICAgIEN1clByb2ZpbGUtPm10aW1lPWJ1Zi5zdF9tdGltZTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtMzg0LDEzICs0MDUsMjUgQEAKICAgICBjaGFyIGJ1ZmZlcltNQVhfUEFUSE5BTUVfTEVOXTsKICAgICBjaGFyICpuZXdkb3NfbmFtZSwgKnA7CiAgICAgRklMRSAqZmlsZSA9IE5VTEw7CisgICAgaW50IGksajsKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgUFJPRklMRSAqdGVtcFByb2ZpbGU7CiAKLSAgICBpZiAoQ3VyUHJvZmlsZS5maWxlbmFtZSAmJiAhc3RyY21wKCBmaWxlbmFtZSwgQ3VyUHJvZmlsZS5maWxlbmFtZSApKQotICAgIHsKLSAgICAgICAgVFJBQ0UocHJvZmlsZSwgIiglcyk6IGFscmVhZHkgb3BlbmVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICk7Ci0gICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KKyAgICAvKiBGaXJzdCB0aW1lIGFyb3VuZCAqLworCisgICAgaWYoIUN1clByb2ZpbGUpCisgICAgICAgZm9yKGk9MDtpPE5fQ0FDSEVEX1BST0ZJTEVTO2krKykKKyAgICAgICAgIHsKKyAgICAgICAgICBNUlVQcm9maWxlW2ldPUhFQVBfeGFsbG9jKCBTeXN0ZW1IZWFwLCAwLCBzaXplb2YoUFJPRklMRSkgKTsKKyAgICAgICAgICBNUlVQcm9maWxlW2ldLT5jaGFuZ2VkPUZBTFNFOworICAgICAgICAgIE1SVVByb2ZpbGVbaV0tPnNlY3Rpb249TlVMTDsKKyAgICAgICAgICBNUlVQcm9maWxlW2ldLT5kb3NfbmFtZT1OVUxMOworICAgICAgICAgIE1SVVByb2ZpbGVbaV0tPnVuaXhfbmFtZT1OVUxMOworICAgICAgICAgIE1SVVByb2ZpbGVbaV0tPmZpbGVuYW1lPU5VTEw7CisgICAgICAgICAgTVJVUHJvZmlsZVtpXS0+bXRpbWU9MDsKKyAgICAgICAgIH0KKworICAgIC8qIENoZWNrIGZvciBhIG1hdGNoICovCiAKICAgICBpZiAoc3RyY2hyKCBmaWxlbmFtZSwgJy8nICkgfHwgc3RyY2hyKCBmaWxlbmFtZSwgJ1xcJyApIHx8IAogICAgICAgICBzdHJjaHIoIGZpbGVuYW1lLCAnOicgKSkKQEAgLTQwNCwyNSArNDM3LDYxIEBACiAgICAgICAgIHN0cmNhdCggYnVmZmVyLCBmaWxlbmFtZSApOwogICAgICAgICBpZiAoIURPU0ZTX0dldEZ1bGxOYW1lKCBidWZmZXIsIEZBTFNFLCAmZnVsbF9uYW1lICkpIHJldHVybiBGQUxTRTsKICAgICB9Ci0gICAgaWYgKEN1clByb2ZpbGUuZG9zX25hbWUgJiYKLSAgICAgICAgIXN0cmNtcCggZnVsbF9uYW1lLnNob3J0X25hbWUsIEN1clByb2ZpbGUuZG9zX25hbWUgKSkKLSAgICB7Ci0gICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJXMpOiBhbHJlYWR5IG9wZW5lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSApOwotICAgICAgICByZXR1cm4gVFJVRTsKLSAgICB9CiAKLSAgICAvKiBGbHVzaCB0aGUgcHJldmlvdXMgcHJvZmlsZSAqLworICAgIGZvcihpPTA7aTxOX0NBQ0hFRF9QUk9GSUxFUztpKyspCisgICAgICB7CisgICAgICAgaWYgKChNUlVQcm9maWxlW2ldLT5maWxlbmFtZSAmJiAhc3RyY21wKCBmaWxlbmFtZSwgTVJVUHJvZmlsZVtpXS0+ZmlsZW5hbWUgKSkgfHwKKyAgICAgICAgICAgKE1SVVByb2ZpbGVbaV0tPmRvc19uYW1lICYmICFzdHJjbXAoIGZ1bGxfbmFtZS5zaG9ydF9uYW1lLCBNUlVQcm9maWxlW2ldLT5kb3NfbmFtZSApKSkKKyAgICAgICAgIHsKKyAgICAgICAgICBpZihpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgIFBST0ZJTEVfRmx1c2hGaWxlKCk7CisgICAgICAgICAgICAgdGVtcFByb2ZpbGU9TVJVUHJvZmlsZVtpXTsKKyAgICAgICAgICAgICBmb3Ioaj1pO2o+MDtqLS0pCisgICAgICAgICAgICAgICAgTVJVUHJvZmlsZVtqXT1NUlVQcm9maWxlW2otMV07CisgICAgICAgICAgICAgQ3VyUHJvZmlsZT10ZW1wUHJvZmlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZighc3RhdChDdXJQcm9maWxlLT51bml4X25hbWUsJmJ1ZikgJiYgQ3VyUHJvZmlsZS0+bXRpbWU9PWJ1Zi5zdF9tdGltZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICBUUkFDRShwcm9maWxlLCAiKCVzKTogYWxyZWFkeSBvcGVuZWQgKG1ydT0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgaSApOworICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJXMpOiBhbHJlYWR5IG9wZW5lZCwgbmVlZHMgcmVmcmVzaGluZyAobXJ1PSVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBpICk7CisgICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBSb3RhdGUgdGhlIG9sZGVzdCB0byB0aGUgdG9wIHRvIGJlIHJlcGxhY2VkICovCisKKyAgICBpZihpPT1OX0NBQ0hFRF9QUk9GSUxFUykKKyAgICAgIHsKKyAgICAgICB0ZW1wUHJvZmlsZT1NUlVQcm9maWxlW05fQ0FDSEVEX1BST0ZJTEVTLTFdOworICAgICAgIGZvcihpPU5fQ0FDSEVEX1BST0ZJTEVTLTE7aT4wO2ktLSkKKyAgICAgICAgICBNUlVQcm9maWxlW2ldPU1SVVByb2ZpbGVbaS0xXTsKKyAgICAgICBDdXJQcm9maWxlPXRlbXBQcm9maWxlOworICAgICAgfQorCisgICAgLyogRmx1c2ggdGhlIHByb2ZpbGUgKi8KKworICAgIGlmKEN1clByb2ZpbGUtPmZpbGVuYW1lKQorICAgICAgeworICAgICAgIFBST0ZJTEVfRmx1c2hGaWxlKCk7CisgICAgICAgUFJPRklMRV9GcmVlKCBDdXJQcm9maWxlLT5zZWN0aW9uICk7CisgICAgICAgaWYgKEN1clByb2ZpbGUtPmRvc19uYW1lKSBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgQ3VyUHJvZmlsZS0+ZG9zX25hbWUgKTsKKyAgICAgICBpZiAoQ3VyUHJvZmlsZS0+dW5peF9uYW1lKSBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgQ3VyUHJvZmlsZS0+dW5peF9uYW1lICk7CisgICAgICAgaWYgKEN1clByb2ZpbGUtPmZpbGVuYW1lKSBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgQ3VyUHJvZmlsZS0+ZmlsZW5hbWUgKTsKKyAgICAgICBDdXJQcm9maWxlLT5jaGFuZ2VkPUZBTFNFOworICAgICAgIEN1clByb2ZpbGUtPnNlY3Rpb249TlVMTDsKKyAgICAgICBDdXJQcm9maWxlLT5kb3NfbmFtZT1OVUxMOworICAgICAgIEN1clByb2ZpbGUtPnVuaXhfbmFtZT1OVUxMOworICAgICAgIEN1clByb2ZpbGUtPmZpbGVuYW1lPU5VTEw7CisgICAgICAgQ3VyUHJvZmlsZS0+bXRpbWU9MDsKKyAgICAgIH0KIAogICAgIG5ld2Rvc19uYW1lID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBmdWxsX25hbWUuc2hvcnRfbmFtZSApOwotICAgIFBST0ZJTEVfRmx1c2hGaWxlKCk7Ci0gICAgUFJPRklMRV9GcmVlKCBDdXJQcm9maWxlLnNlY3Rpb24gKTsKLSAgICBpZiAoQ3VyUHJvZmlsZS5kb3NfbmFtZSkgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIEN1clByb2ZpbGUuZG9zX25hbWUgKTsKLSAgICBpZiAoQ3VyUHJvZmlsZS51bml4X25hbWUpIEhlYXBGcmVlKCBTeXN0ZW1IZWFwLCAwLCBDdXJQcm9maWxlLnVuaXhfbmFtZSApOwotICAgIGlmIChDdXJQcm9maWxlLmZpbGVuYW1lKSBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgQ3VyUHJvZmlsZS5maWxlbmFtZSApOwotICAgIEN1clByb2ZpbGUuc2VjdGlvbiAgID0gTlVMTDsKLSAgICBDdXJQcm9maWxlLmRvc19uYW1lICA9IG5ld2Rvc19uYW1lOwotICAgIEN1clByb2ZpbGUuZmlsZW5hbWUgID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBmaWxlbmFtZSApOworICAgIEN1clByb2ZpbGUtPmRvc19uYW1lICA9IG5ld2Rvc19uYW1lOworICAgIEN1clByb2ZpbGUtPmZpbGVuYW1lICA9IEhFQVBfc3RyZHVwQSggU3lzdGVtSGVhcCwgMCwgZmlsZW5hbWUgKTsKIAogICAgIC8qIFRyeSB0byBvcGVuIHRoZSBwcm9maWxlIGZpbGUsIGZpcnN0IGluICRIT01FLy53aW5lICovCiAKQEAgLTQzOCwxMyArNTA3LDEzIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJXMpOiBmb3VuZCBpdCBpbiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGJ1ZmZlciApOwotICAgICAgICAgICAgQ3VyUHJvZmlsZS51bml4X25hbWUgPSBIRUFQX3N0cmR1cEEoIFN5c3RlbUhlYXAsIDAsIGJ1ZmZlciApOworICAgICAgICAgICAgQ3VyUHJvZmlsZS0+dW5peF9uYW1lID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLCBidWZmZXIgKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghZmlsZSkKICAgICB7Ci0gICAgICAgIEN1clByb2ZpbGUudW5peF9uYW1lID0gSEVBUF9zdHJkdXBBKCBTeXN0ZW1IZWFwLCAwLAorICAgICAgICBDdXJQcm9maWxlLT51bml4X25hbWUgPSBIRUFQX3N0cmR1cEEoIFN5c3RlbUhlYXAsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsX25hbWUubG9uZ19uYW1lICk7CiAgICAgICAgIGlmICgoZmlsZSA9IGZvcGVuKCBmdWxsX25hbWUubG9uZ19uYW1lLCAiciIgKSkpCiAgICAgICAgICAgICBUUkFDRShwcm9maWxlLCAiKCVzKTogZm91bmQgaXQgaW4gJXNcbiIsCkBAIC00NTMsOCArNTIyLDEwIEBACiAKICAgICBpZiAoZmlsZSkKICAgICB7Ci0gICAgICAgIEN1clByb2ZpbGUuc2VjdGlvbiA9IFBST0ZJTEVfTG9hZCggZmlsZSApOworICAgICAgICBDdXJQcm9maWxlLT5zZWN0aW9uID0gUFJPRklMRV9Mb2FkKCBmaWxlICk7CiAgICAgICAgIGZjbG9zZSggZmlsZSApOworICAgICAgICBpZighc3RhdChDdXJQcm9maWxlLT51bml4X25hbWUsJmJ1ZikpCisgICAgICAgICAgIEN1clByb2ZpbGUtPm10aW1lPWJ1Zi5zdF9tdGltZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTQ4MSw3ICs1NTIsNyBAQAogICAgICAgICBpZiAoc2VjdGlvbi0+bmFtZSAmJiAhc3RyY2FzZWNtcCggc2VjdGlvbi0+bmFtZSwgc2VjdGlvbl9uYW1lICkpCiAgICAgICAgIHsKICAgICAgICAgICAgIFVJTlQzMiBvbGRsZW4gPSBsZW47Ci0gICAgICAgICAgICBmb3IgKGtleSA9IHNlY3Rpb24tPmtleTsga2V5OyBrZXkgPSBrZXktPm5leHQpCisgICAgICAgICAgICBmb3IgKGtleSA9IHNlY3Rpb24tPmtleTsga2V5ICYmICooa2V5LT5uYW1lKTsga2V5ID0ga2V5LT5uZXh0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gMikgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKElTX0VOVFJZX0NPTU1FTlQoa2V5LT5uYW1lKSkgY29udGludWU7ICAvKiBTa2lwIGNvbW1lbnRzICovCkBAIC01MDcsNyArNTc4LDcgQEAKIAkJYnVmZmVyWy0xXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZGxlbiAtIDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2xkbGVuIC0gbGVuICsgMTsKKyAgICAgICAgICAgIHJldHVybiBvbGRsZW4gLSBsZW47CiAgICAgICAgIH0KICAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb24tPm5leHQ7CiAgICAgfQpAQCAtNTI5LDE0ICs2MDAsMTQgQEAKICAgICBpZiAoIWRlZl92YWwpIGRlZl92YWwgPSAiIjsKICAgICBpZiAoa2V5X25hbWUgJiYga2V5X25hbWVbMF0pCiAgICAgewotICAgICAgICBrZXkgPSBQUk9GSUxFX0ZpbmQoICZDdXJQcm9maWxlLnNlY3Rpb24sIHNlY3Rpb24sIGtleV9uYW1lLCBGQUxTRSApOworICAgICAgICBrZXkgPSBQUk9GSUxFX0ZpbmQoICZDdXJQcm9maWxlLT5zZWN0aW9uLCBzZWN0aW9uLCBrZXlfbmFtZSwgRkFMU0UgKTsKICAgICAgICAgUFJPRklMRV9Db3B5RW50cnkoIGJ1ZmZlciwgKGtleSAmJiBrZXktPnZhbHVlKSA/IGtleS0+dmFsdWUgOiBkZWZfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCBGQUxTRSApOwogICAgICAgICBUUkFDRShwcm9maWxlLCAiKCclcycsJyVzJywnJXMnKTogcmV0dXJuaW5nICclcydcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwga2V5X25hbWUsIGRlZl92YWwsIGJ1ZmZlciApOwogICAgICAgICByZXR1cm4gc3RybGVuKCBidWZmZXIgKTsKICAgICB9Ci0gICAgcmV0dXJuIFBST0ZJTEVfR2V0U2VjdGlvbihDdXJQcm9maWxlLnNlY3Rpb24sIHNlY3Rpb24sIGJ1ZmZlciwgbGVuLAorICAgIHJldHVybiBQUk9GSUxFX0dldFNlY3Rpb24oQ3VyUHJvZmlsZS0+c2VjdGlvbiwgc2VjdGlvbiwgYnVmZmVyLCBsZW4sCiAJCQkJRkFMU0UsIEZBTFNFKTsKIH0KIApAQCAtNTUyLDggKzYyMyw4IEBACiAgICAgaWYgKCFrZXlfbmFtZSkgIC8qIERlbGV0ZSBhIHdob2xlIHNlY3Rpb24gKi8KICAgICB7CiAgICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJyVzJylcbiIsIHNlY3Rpb25fbmFtZSk7Ci0gICAgICAgIEN1clByb2ZpbGUuY2hhbmdlZCB8PSBQUk9GSUxFX0RlbGV0ZVNlY3Rpb24oICZDdXJQcm9maWxlLnNlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25fbmFtZSApOworICAgICAgICBDdXJQcm9maWxlLT5jaGFuZ2VkIHw9IFBST0ZJTEVfRGVsZXRlU2VjdGlvbiggJkN1clByb2ZpbGUtPnNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX25hbWUgKTsKICAgICAgICAgcmV0dXJuIFRSVUU7ICAgICAgICAgLyogRXZlbiBpZiBQUk9GSUxFX0RlbGV0ZVNlY3Rpb24oKSBoYXMgZmFpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIG5vdCBhbiBlcnJvciBvbiBhcHBsaWNhdGlvbidzIGxldmVsLiovCiAgICAgfQpAQCAtNTYxLDEzICs2MzIsMTMgQEAKICAgICB7CiAgICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJyVzJywnJXMnKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX25hbWUsIGtleV9uYW1lICk7Ci0gICAgICAgIEN1clByb2ZpbGUuY2hhbmdlZCB8PSBQUk9GSUxFX0RlbGV0ZUtleSggJkN1clByb2ZpbGUuc2VjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX25hbWUsIGtleV9uYW1lICk7CisgICAgICAgIEN1clByb2ZpbGUtPmNoYW5nZWQgfD0gUFJPRklMRV9EZWxldGVLZXkoICZDdXJQcm9maWxlLT5zZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uX25hbWUsIGtleV9uYW1lICk7CiAgICAgICAgIHJldHVybiBUUlVFOyAgICAgICAgICAvKiBzYW1lIGVycm9yIGhhbmRsaW5nIGFzIGFib3ZlICovCiAgICAgfQogICAgIGVsc2UgIC8qIFNldCB0aGUga2V5IHZhbHVlICovCiAgICAgewotICAgICAgICBQUk9GSUxFS0VZICprZXkgPSBQUk9GSUxFX0ZpbmQoICZDdXJQcm9maWxlLnNlY3Rpb24sIHNlY3Rpb25fbmFtZSwKKyAgICAgICAgUFJPRklMRUtFWSAqa2V5ID0gUFJPRklMRV9GaW5kKCAmQ3VyUHJvZmlsZS0+c2VjdGlvbiwgc2VjdGlvbl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9uYW1lLCBUUlVFICk7CiAgICAgICAgIFRSQUNFKHByb2ZpbGUsICIoJyVzJywnJXMnLCclcycpOiBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbl9uYW1lLCBrZXlfbmFtZSwgdmFsdWUgKTsKQEAgLTU4NCw3ICs2NTUsNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgVFJBQ0UocHJvZmlsZSwgIiAgY3JlYXRpbmcga2V5XG4iICk7CiAgICAgICAgIGtleS0+dmFsdWUgPSBIRUFQX3N0cmR1cEEoIFN5c3RlbUhlYXAsIDAsIHZhbHVlICk7Ci0gICAgICAgIEN1clByb2ZpbGUuY2hhbmdlZCA9IFRSVUU7CisgICAgICAgIEN1clByb2ZpbGUtPmNoYW5nZWQgPSBUUlVFOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKIH0KQEAgLTEwMTMsNyArMTA4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbGVuLCBMUENTVFIgZmlsZW5hbWUgKQogewogICAgIGlmIChQUk9GSUxFX09wZW4oIGZpbGVuYW1lICkpCi0gICAgICAgIHJldHVybiBQUk9GSUxFX0dldFNlY3Rpb24oQ3VyUHJvZmlsZS5zZWN0aW9uLCBzZWN0aW9uLCBidWZmZXIsIGxlbiwKKyAgICAgICAgcmV0dXJuIFBST0ZJTEVfR2V0U2VjdGlvbihDdXJQcm9maWxlLT5zZWN0aW9uLCBzZWN0aW9uLCBidWZmZXIsIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIFRSVUUpOwogCiAgICAgcmV0dXJuIDA7CkBAIC0xMDkyLDcgKzExNjMsNyBAQAogICAgIGlmIChQUk9GSUxFX09wZW4oIGZpbGVuYW1lICkpIHsKIAlidWY9YnVmZmVyOwogCWN1cnNpemU9MDsKLQlzZWN0aW9uPUN1clByb2ZpbGUuc2VjdGlvbjsKKwlzZWN0aW9uPUN1clByb2ZpbGUtPnNlY3Rpb247CiAJZm9yICggOyBzZWN0aW9uOyBzZWN0aW9uID0gc2VjdGlvbi0+bmV4dCkgCiAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+bmFtZSkgewogCQlsPXN0cmxlbiAoc2VjdGlvbi0+bmFtZSk7CkBAIC0xMTIyLDcgKzExOTMsNyBAQAogICAgIFBST0ZJTEVLRVkgKms7CiAKICAgICBpZiAoUFJPRklMRV9PcGVuKCBmaWxlbmFtZSApKSB7Ci0gICAgICAgIGs9UFJPRklMRV9GaW5kICggJkN1clByb2ZpbGUuc2VjdGlvbiwgc2VjdGlvbiwga2V5LCBGQUxTRSk7CisgICAgICAgIGs9UFJPRklMRV9GaW5kICggJkN1clByb2ZpbGUtPnNlY3Rpb24sIHNlY3Rpb24sIGtleSwgRkFMU0UpOwogCWlmICghaykgcmV0dXJuIEZBTFNFOwogICAgIAlsc3RyY3B5bjMyQSggYnVmLCBrLT52YWx1ZSwgc3RybGVuKGstPnZhbHVlKSk7CiAgICAgICAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvZGRyYXcuYyBiL2dyYXBoaWNzL2RkcmF3LmMKaW5kZXggMmM1YWRkNS4uNDQyMDg5MSAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvZGRyYXcuYworKysgYi9ncmFwaGljcy9kZHJhdy5jCkBAIC03MSw5ICs3MSwxMSBAQAogI2luY2x1ZGUgImQzZC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiY29tcG9iai5oIgorI2luY2x1ZGUgInNweS5oIgorI2luY2x1ZGUgIm1lc3NhZ2UuaCIKIAogI2lmZGVmIEhBVkVfTElCWFhGODZER0EKLSNpbmNsdWRlIDxYMTEvZXh0ZW5zaW9ucy94Zjg2ZGdhLmg+CisjaW5jbHVkZSAidHNfeGY4NmRnYS5oIgogI2VuZGlmCiAKIC8qIHJlc3RvcmUgc2lnbmFsIGhhbmRsZXJzIG92ZXJ3cml0dGVuIGJ5IFhGODZER0EgCkBAIC0xMDUsOCArMTA3LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlM19WVGFibGUJZGdhX2RkczN2dCwgeHNobV9kZHMzdnQsIHhsaWJfZGRzM3Z0Owotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UyX1ZUYWJsZQlkZ2FfZGRzMnZ0LCB4c2htX2RkczJ2dCwgeGxpYl9kZHMydnQ7Ci1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZV9WVGFibGUJCWRnYV9kZHN2dCwgeHNobV9kZHN2dCwgeGxpYl9kZHN2dDsKIHN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdfVlRhYmxlCQlkZ2FfZGR2dCwgeHNobV9kZHZ0LCB4bGliX2RkdnQ7CiBzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3Ml9WVGFibGUJCWRnYV9kZDJ2dCwgeHNobV9kZDJ2dCwgeGxpYl9kZDJ2dDsKIHN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdDbGlwcGVyX1ZUYWJsZQlkZGNsaXB2dDsKQEAgLTExNCwxMiArMTE0LDIzIEBACiBzdGF0aWMgc3RydWN0IElEaXJlY3QzRF9WVGFibGUJCQlkM2R2dDsKIHN0YXRpYyBzdHJ1Y3QgSURpcmVjdDNEMl9WVGFibGUJCQlkM2QydnQ7CiAKK3ZvaWQgWGxpYl9NZXNzYWdlUHVtcChIV05EMzIgaHduZCkgeworCU1TRzMyCW1zZzMyOworCisJd2hpbGUgKFBlZWtNZXNzYWdlMzJBKCZtc2czMiwwLDAsMCxQTV9OT1lJRUxEKSkgeworCQlHZXRNZXNzYWdlMzJBKCZtc2czMiwwLDAsMCk7CisJCVRyYW5zbGF0ZU1lc3NhZ2UzMigmbXNnMzIpOworCQlEaXNwYXRjaE1lc3NhZ2UzMkEoJm1zZzMyKTsKKwl9Cit9CisKKwogQk9PTDMyCiBERFJBV19ER0FfQXZhaWxhYmxlKCkKIHsKICNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCiAJaW50IGV2YmFzZSwgZXZyZXQ7Ci0JcmV0dXJuIChnZXR1aWQoKSA9PSAwKSAmJiBYRjg2REdBUXVlcnlFeHRlbnNpb24oZGlzcGxheSwmZXZiYXNlLCZldnJldCk7CisJcmV0dXJuIChnZXR1aWQoKSA9PSAwKSYmVFNYRjg2REdBUXVlcnlFeHRlbnNpb24oZGlzcGxheSwmZXZiYXNlLCZldnJldCk7CiAjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCiAJcmV0dXJuIDA7CiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYRjg2REdBKSAqLwpAQCAtMTM4LDEyICsxNDksMTMgQEAKIEhSRVNVTFQgV0lOQVBJCiBEaXJlY3REcmF3RW51bWVyYXRlMzJBKExQRERFTlVNQ0FMTEJBQ0szMkEgZGRlbnVtcHJvYyxMUFZPSUQgZGF0YSkgewogCWlmIChERFJBV19ER0FfQXZhaWxhYmxlKCkpIHsKLQkJZGRlbnVtcHJvYygmREdBX0RpcmVjdERyYXdfR1VJRCwiV0lORSB3aXRoIFhGcmVlODYgREdBIiwid2luZS1kZ2EiLGRhdGEpOworCQlkZGVudW1wcm9jKCZER0FfRGlyZWN0RHJhd19HVUlELCJXSU5FIHdpdGggWEZyZWU4NiBER0EiLCJkaXNwbGF5IixkYXRhKTsKIAl9CiAJaWYgKEREUkFXX1hTaG1fQXZhaWxhYmxlKCkpIHsKLQkJZGRlbnVtcHJvYygmWFNITV9EaXJlY3REcmF3X0dVSUQsIldJTkUgd2l0aCBNSVQgWFNobSIsIndpbmUteHNobSIsZGF0YSk7CisJCWRkZW51bXByb2MoJlhTSE1fRGlyZWN0RHJhd19HVUlELCJXSU5FIHdpdGggTUlUIFhTaG0iLCJkaXNwbGF5IixkYXRhKTsKIAl9Ci0JZGRlbnVtcHJvYygmWExJQl9EaXJlY3REcmF3X0dVSUQsIldJTkUgd2l0aCBYbGliIiwid2luZS14bGliIixkYXRhKTsKKwlkZGVudW1wcm9jKCZYTElCX0RpcmVjdERyYXdfR1VJRCwiV0lORSB3aXRoIFhsaWIiLCJkaXNwbGF5IixkYXRhKTsKKwlkZGVudW1wcm9jKE5VTEwsIldJTkUiLCJkaXNwbGF5IixkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg1LDUyICsyOTcsNiBAQAogCURVTVAoIlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIF9kdW1wX0REQ0FQUyhEV09SRCBmbGFnbWFzaykgewotCWludAlpOwotCWNvbnN0IHN0cnVjdCB7Ci0JCURXT1JECW1hc2s7Ci0JCWNoYXIJKm5hbWU7Ci19IGZsYWdzW10gPSB7Ci0jZGVmaW5lIEZFKHgpIHsgeCwgI3h9LAotCQlGRShERENBUFNfM0QpCi0JCUZFKEREQ0FQU19BTElHTkJPVU5EQVJZREVTVCkKLQkJRkUoRERDQVBTX0FMSUdOU0laRURFU1QpCi0JCUZFKEREQ0FQU19BTElHTkJPVU5EQVJZU1JDKQotCQlGRShERENBUFNfQUxJR05TSVpFU1JDKQotCQlGRShERENBUFNfQUxJR05TVFJJREUpCi0JCUZFKEREQ0FQU19CTFQpCi0JCUZFKEREQ0FQU19CTFRRVUVVRSkKLQkJRkUoRERDQVBTX0JMVEZPVVJDQykKLQkJRkUoRERDQVBTX0JMVFNUUkVUQ0gpCi0JCUZFKEREQ0FQU19HREkpCi0JCUZFKEREQ0FQU19PVkVSTEFZKQotCQlGRShERENBUFNfT1ZFUkxBWUNBTlRDTElQKQotCQlGRShERENBUFNfT1ZFUkxBWUZPVVJDQykKLQkJRkUoRERDQVBTX09WRVJMQVlTVFJFVENIKQotCQlGRShERENBUFNfUEFMRVRURSkKLQkJRkUoRERDQVBTX1BBTEVUVEVWU1lOQykKLQkJRkUoRERDQVBTX1JFQURTQ0FOTElORSkKLQkJRkUoRERDQVBTX1NURVJFT1ZJRVcpCi0JCUZFKEREQ0FQU19WQkkpCi0JCUZFKEREQ0FQU19aQkxUUykKLQkJRkUoRERDQVBTX1pPVkVSTEFZUykKLQkJRkUoRERDQVBTX0NPTE9SS0VZKQotCQlGRShERENBUFNfQUxQSEEpCi0JCUZFKEREQ0FQU19DT0xPUktFWUhXQVNTSVNUKQotCQlGRShERENBUFNfTk9IQVJEV0FSRSkKLQkJRkUoRERDQVBTX0JMVENPTE9SRklMTCkKLQkJRkUoRERDQVBTX0JBTktTV0lUQ0hFRCkKLQkJRkUoRERDQVBTX0JMVERFUFRIRklMTCkKLQkJRkUoRERDQVBTX0NBTkNMSVApCi0JCUZFKEREQ0FQU19DQU5DTElQU1RSRVRDSEVEKQotCQlGRShERENBUFNfQ0FOQkxUU1lTTUVNKQotCX07Ci0JZm9yIChpPTA7aTxzaXplb2YoZmxhZ3MpL3NpemVvZihmbGFnc1swXSk7aSsrKQotCQlpZiAoZmxhZ3NbaV0ubWFzayAmIGZsYWdtYXNrKQotCQkJRFVNUCgiJXMgIixmbGFnc1tpXS5uYW1lKTsKLQlEVU1QKCJcbiIpOwotfQotCiBzdGF0aWMgdm9pZCBfZHVtcF9ERFNEKERXT1JEIGZsYWdtYXNrKSB7CiAJaW50CWk7CiAJY29uc3Qgc3RydWN0IHsKQEAgLTM5MiwxMSArMzU4LDE0IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJSURpcmVjdERyYXdTdXJmYWNlCisgKgkJSURpcmVjdERyYXdTdXJmYWNlLElEaXJlY3REcmF3U3VyZmFjZTIsSURpcmVjdERyYXdTdXJmYWNlMworICoKKyAqIFNpbmNlIEREUzMgYW5kIEREUzIgYXJlIHN1cGVyc2V0cyBvZiBERFMsIHdlIGltcGxlbWVudCBERFMzIGFuZCBsZXQKKyAqIEREUyBhbmQgRERTMiB1c2UgdGhvc2UgZnVuY3Rpb25zLiAoRnVuY3Rpb24gY2FsbHMgZGlkIG5vdCBjaGFuZ2UgKGV4Y2VwdAorICogdXNpbmcgZGlmZmVyZW50IERpcmVjdERyYXdTdXJmYWNlWCB2ZXJzaW9uKSwganVzdCBhZGRlZCBmbGFncyBhbmQgZnVuY3Rpb25zKQogICovCi0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfTG9jaygKLSAgICBMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsTFBSRUNUMzIgbHByZWN0LExQRERTVVJGQUNFREVTQyBscGRkc2QsRFdPUkQgZmxhZ3MsIEhBTkRMRTMyIGhuZAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfTG9jaygKKyAgICBMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQUkVDVDMyIGxwcmVjdCxMUEREU1VSRkFDRURFU0MgbHBkZHNkLERXT1JEIGZsYWdzLCBIQU5ETEUzMiBobmQKICkgewogICAgICAgICBUUkFDRShkZHJhdywgIiglcCktPkxvY2soJXAsJXAsJTA4bHgsJTA4bHgpXG4iLAogCQl0aGlzLGxwcmVjdCxscGRkc2QsZmxhZ3MsKERXT1JEKWhuZCk7CkBAIC00MTIsNiArMzgxLDcgQEAKIAkJCShscHJlY3QtPnRvcCp0aGlzLT5zLmxwaXRjaCkgKwogCQkJKGxwcmVjdC0+bGVmdCoodGhpcy0+cy5kZHJhdy0+ZC5kZXB0aC84KSk7CiAJfSBlbHNlIHsKKwkJYXNzZXJ0KHRoaXMtPnMuc3VyZmFjZSk7CiAJCWxwZGRzZC0+eS5scFN1cmZhY2UgPSB0aGlzLT5zLnN1cmZhY2U7CiAJfQogCWxwZGRzZC0+ZHdGbGFncyA9IEREU0RfV0lEVEh8RERTRF9IRUlHSFR8RERTRF9QSVhFTEZPUk1BVHxERFNEX1BJVENIfEREU0RfTFBTVVJGQUNFOwpAQCAtNDIyLDIxICszOTIsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUFZPSUQgc3VyZmFjZQorc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaygKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQVk9JRCBzdXJmYWNlCiApIHsKIAlUUkFDRShkZHJhdywiKCVwKS0+VW5sb2NrKCVwKVxuIix0aGlzLHN1cmZhY2UpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUFZPSUQgc3VyZmFjZQorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2soCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgc3VyZmFjZQogKSB7CiAjaWZkZWYgSEFWRV9MSUJYWFNITQogCVRSQUNFKGRkcmF3LCIoJXApLT5VbmxvY2soJXApXG4iLHRoaXMsc3VyZmFjZSk7Ci0JaWYgKCF0aGlzLT50LnhzaG0uc3VyZmFjZV9pc19pbWFnZV9kYXRhKSB7Ci0JCUZJWE1FKGRkcmF3LCIoJXApLT5VbmxvY2soJXApIG5lZWRzIGFuIGltYWdlIGNvcHkhXG4iLHRoaXMsc3VyZmFjZSk7Ci0JfQogCS8qIEZJWE1FOiBpcyBpdCByZWFsbHkgcmlnaHQgdG8gZGlzcGxheSB0aGUgaW1hZ2Ugb24gdW5sb2NrPwogCSAqIG9yIHNob3VsZCBpdCB3YWl0IGZvciBhIEZsaXAoKT8gKi8KIAlUU1hTaG1QdXRJbWFnZShkaXNwbGF5LApAQCAtNDQ3LDQxICs0MTQsNDAgQEAKIAkJCQkgICB0aGlzLT50LnhzaG0uaW1hZ2UtPndpZHRoLAogCQkJCSAgIHRoaXMtPnQueHNobS5pbWFnZS0+aGVpZ2h0LAogCQkJCSAgIEZhbHNlKTsKKy8qCiAJaWYgKHRoaXMtPnMucGFsZXR0ZSAmJiB0aGlzLT5zLnBhbGV0dGUtPmNtKSB7CiAJCVRTWEluc3RhbGxDb2xvcm1hcChkaXNwbGF5LHRoaXMtPnMucGFsZXR0ZS0+Y20pOwogCX0KLQlUU1hTeW5jKGRpc3BsYXksRmFsc2UpOworKi8KKwkvKlRTWFN5bmMoZGlzcGxheSxGYWxzZSk7Ki8KKwlFVkVOVF9TeW5jaHJvbml6ZSgpOwogCXJldHVybiAwOwogI2Vsc2UgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLwogCXJldHVybiBFX1VORVhQRUNURUQ7CiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX0xJQlhYU0hNKSAqLwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUFZPSUQgc3VyZmFjZQorc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2soCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgc3VyZmFjZQogKSB7CisJWGxpYl9NZXNzYWdlUHVtcCh0aGlzLT5zLmRkcmF3LT5lLnhsaWIud2luZG93KTsKKwogCVRSQUNFKGRkcmF3LCIoJXApLT5VbmxvY2soJXApXG4iLHRoaXMsc3VyZmFjZSk7Ci0JaWYgKCF0aGlzLT50LnhzaG0uc3VyZmFjZV9pc19pbWFnZV9kYXRhKSB7Ci0JCUZJWE1FKGRkcmF3LCIoJXApLT5VbmxvY2soJXApIG5lZWRzIGFuIGltYWdlIGNvcHkhXG4iLHRoaXMsc3VyZmFjZSk7Ci0JfQotCS8qIEZJWE1FOiBpcyBpdCByZWFsbHkgcmlnaHQgdG8gZGlzcGxheSB0aGUgaW1hZ2Ugb24gdW5sb2NrPwotCSAqIG9yIHNob3VsZCBpdCB3YWl0IGZvciBhIEZsaXAoKT8gKi8KLQlUU1hQdXRJbWFnZShkaXNwbGF5LAorCVRTWFB1dEltYWdlKAkJZGlzcGxheSwKIAkJCQl0aGlzLT5zLmRkcmF3LT5lLnhsaWIuZHJhd2FibGUsCiAJCQkJRGVmYXVsdEdDT2ZTY3JlZW4oc2NyZWVuKSwKIAkJCQl0aGlzLT50LnhsaWIuaW1hZ2UsCiAJCQkJMCwgMCwgMCwgMCwKIAkJCQl0aGlzLT50LnhsaWIuaW1hZ2UtPndpZHRoLAotCQkJCXRoaXMtPnQueGxpYi5pbWFnZS0+d2lkdGgpOwotCWlmICh0aGlzLT5zLnBhbGV0dGUgJiYgdGhpcy0+cy5wYWxldHRlLT5jbSkgewotCQlUU1hJbnN0YWxsQ29sb3JtYXAoZGlzcGxheSx0aGlzLT5zLnBhbGV0dGUtPmNtKTsKLQl9Ci0JVFNYU3luYyhkaXNwbGF5LEZhbHNlKTsKKwkJCQl0aGlzLT50LnhsaWIuaW1hZ2UtPmhlaWdodAorCSk7CisJLypUU1hTZXRXaW5kb3dDb2xvcm1hcChkaXNwbGF5LHRoaXMtPnMuZGRyYXctPmUueGxpYi5kcmF3YWJsZSx0aGlzLT5zLnBhbGV0dGUtPmNtKTsqLworCUVWRU5UX1N5bmNocm9uaXplKCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UgZmxpcHRvLERXT1JEIGR3RmxhZ3MKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlM19GbGlwKAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTMgZmxpcHRvLERXT1JEIGR3RmxhZ3MKICkgewogI2lmZGVmIEhBVkVfTElCWFhGODZER0EKIAlUUkFDRShkZHJhdywiKCVwKS0+RmxpcCglcCwlMDhseClcbiIsdGhpcyxmbGlwdG8sZHdGbGFncyk7CkBAIC00OTEsMTEgKzQ1NywxMiBAQAogCQllbHNlCiAJCQlmbGlwdG8gPSB0aGlzOwogCX0KLQlYRjg2REdBU2V0Vmlld1BvcnQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDAsZmxpcHRvLT50LmRnYS5mYl9oZWlnaHQpOworCVRTWEY4NkRHQVNldFZpZXdQb3J0KGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwwLGZsaXB0by0+dC5kZ2EuZmJfaGVpZ2h0KTsKKwogCWlmIChmbGlwdG8tPnMucGFsZXR0ZSAmJiBmbGlwdG8tPnMucGFsZXR0ZS0+Y20pIHsKLQkJWEY4NkRHQUluc3RhbGxDb2xvcm1hcChkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKKwkJVFNYRjg2REdBSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSxmbGlwdG8tPnMucGFsZXR0ZS0+Y20pOwogCX0KLQl3aGlsZSAoIVhGODZER0FWaWV3UG9ydENoYW5nZWQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDIpKSB7CisJd2hpbGUgKCFUU1hGODZER0FWaWV3UG9ydENoYW5nZWQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDIpKSB7CiAJfQogCWlmIChmbGlwdG8hPXRoaXMpIHsKIAkJaW50CXRtcDsKQEAgLTUxNSw4ICs0ODIsOCBAQAogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UgZmxpcHRvLERXT1JEIGR3RmxhZ3MKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UzIGZsaXB0byxEV09SRCBkd0ZsYWdzCiApIHsKICNpZmRlZiBIQVZFX0xJQlhYU0hNCiAJVFJBQ0UoZGRyYXcsIiglcCktPkZsaXAoJXAsJTA4bHgpXG4iLHRoaXMsZmxpcHRvLGR3RmxhZ3MpOwpAQCAtNTM0LDEwICs1MDEsMTIgQEAKIAkJCQkgICBmbGlwdG8tPnQueHNobS5pbWFnZS0+d2lkdGgsCiAJCQkJICAgZmxpcHRvLT50LnhzaG0uaW1hZ2UtPmhlaWdodCwKIAkJCQkgICBGYWxzZSk7CisvKgogCWlmIChmbGlwdG8tPnMucGFsZXR0ZSAmJiBmbGlwdG8tPnMucGFsZXR0ZS0+Y20pIHsKIAkJVFNYSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksZmxpcHRvLT5zLnBhbGV0dGUtPmNtKTsKIAl9Ci0JVFNYU3luYyhkaXNwbGF5LEZhbHNlKTsKKyovCisJRVZFTlRfU3luY2hyb25pemUoKTsKIAlpZiAoZmxpcHRvIT10aGlzKSB7CiAJCVhJbWFnZSAqdG1wOwogCQl0bXAgPSB0aGlzLT50LnhzaG0uaW1hZ2U7CkBAIC01NTAsOCArNTE5LDggQEAKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUERJUkVDVERSQVdTVVJGQUNFIGZsaXB0byxEV09SRCBkd0ZsYWdzCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX0ZsaXAoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUERJUkVDVERSQVdTVVJGQUNFMyBmbGlwdG8sRFdPUkQgZHdGbGFncwogKSB7CiAJVFJBQ0UoZGRyYXcsIiglcCktPkZsaXAoJXAsJTA4bHgpXG4iLHRoaXMsZmxpcHRvLGR3RmxhZ3MpOwogCWlmICghZmxpcHRvKSB7CkBAIC01NjYsMzAgKzUzNSwzMiBAQAogCQkJCWZsaXB0by0+dC54bGliLmltYWdlLAogCQkJCTAsIDAsIDAsIDAsCiAJCQkJZmxpcHRvLT50LnhsaWIuaW1hZ2UtPndpZHRoLAotCQkJCWZsaXB0by0+dC54bGliLmltYWdlLT53aWR0aCk7Ci0JaWYgKGZsaXB0by0+cy5wYWxldHRlICYmIGZsaXB0by0+cy5wYWxldHRlLT5jbSkgewotCQlUU1hJbnN0YWxsQ29sb3JtYXAoZGlzcGxheSxmbGlwdG8tPnMucGFsZXR0ZS0+Y20pOwotCX0KLQlUU1hTeW5jKGRpc3BsYXksRmFsc2UpOworCQkJCWZsaXB0by0+dC54bGliLmltYWdlLT5oZWlnaHQpOworCVRTWFNldFdpbmRvd0NvbG9ybWFwKGRpc3BsYXksdGhpcy0+cy5kZHJhdy0+ZS54bGliLmRyYXdhYmxlLHRoaXMtPnMucGFsZXR0ZS0+Y20pOworCUVWRU5UX1N5bmNocm9uaXplKCk7CiAJaWYgKGZsaXB0byE9dGhpcykgewogCQlYSW1hZ2UgKnRtcDsKLQkJdG1wID0gdGhpcy0+dC54c2htLmltYWdlOwotCQl0aGlzLT50LnhzaG0uaW1hZ2UgPSBmbGlwdG8tPnQueHNobS5pbWFnZTsKLQkJZmxpcHRvLT50LnhzaG0uaW1hZ2UgPSB0bXA7CisJCUxQVk9JRAkqc3VyZjsKKwkJdG1wID0gdGhpcy0+dC54bGliLmltYWdlOworCQl0aGlzLT50LnhsaWIuaW1hZ2UgPSBmbGlwdG8tPnQueGxpYi5pbWFnZTsKKwkJZmxpcHRvLT50LnhsaWIuaW1hZ2UgPSB0bXA7CisJCXN1cmYgPSB0aGlzLT5zLnN1cmZhY2U7CisJCXRoaXMtPnMuc3VyZmFjZSA9IGZsaXB0by0+cy5zdXJmYWNlOworCQlmbGlwdG8tPnMuc3VyZmFjZSA9IHN1cmY7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX1NldFBhbGV0dGUoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBV1BBTEVUVEUgcGFsCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19TZXRQYWxldHRlKAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXUEFMRVRURSBwYWwKICkgewogCVRSQUNFKGRkcmF3LCIoJXApLT5TZXRQYWxldHRlKCVwKVxuIix0aGlzLHBhbCk7CiAJdGhpcy0+cy5wYWxldHRlID0gcGFsOyAvKiBwcm9iYWJseSBhZGRyZWYgaXQgdG9vICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfQmx0KAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUFJFQ1QzMiByZHN0LExQRElSRUNURFJBV1NVUkZBQ0Ugc3JjLExQUkVDVDMyIHJzcmMsRFdPUkQgZHdGbGFncyxMUEREQkxURlggbHBibHRmeAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfQmx0KAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBSRUNUMzIgcmRzdCxMUERJUkVDVERSQVdTVVJGQUNFMyBzcmMsTFBSRUNUMzIgcnNyYyxEV09SRCBkd0ZsYWdzLExQRERCTFRGWCBscGJsdGZ4CiApIHsKIAlSRUNUMzIJeGRzdCx4c3JjOwogCWludAlpLGo7CkBAIC02NTYsOCArNjI3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9CbHRGYXN0KAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxEV09SRCBkc3R4LERXT1JEIGRzdHksTFBESVJFQ1REUkFXU1VSRkFDRSBzcmMsTFBSRUNUMzIgcnNyYyxEV09SRCB0cmFucworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfQmx0RmFzdCgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLERXT1JEIGRzdHgsRFdPUkQgZHN0eSxMUERJUkVDVERSQVdTVVJGQUNFMyBzcmMsTFBSRUNUMzIgcnNyYyxEV09SRCB0cmFucwogKSB7CiAJaW50CWksYnBwOwogCWlmIChUUkFDRV9PTihkZHJhdykpIHsKQEAgLTY3Nyw4ICs2NDgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0JsdEJhdGNoKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUEREQkxUQkFUQ0ggZGRibHRiYXRjaCxEV09SRCB4LERXT1JEIHkKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdEJhdGNoKAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBEREJMVEJBVENIIGRkYmx0YmF0Y2gsRFdPUkQgeCxEV09SRCB5CiApIHsKIAlUUkFDRShkZHJhdywiKCVwKS0+Qmx0QmF0Y2goJXAsJTA4bHgsJTA4bHgpLHN0dWIhXG4iLAogCQl0aGlzLGRkYmx0YmF0Y2gseCx5CkBAIC02ODYsMTYgKzY1NywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0dldENhcHMoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRERTQ0FQUyBjYXBzCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19HZXRDYXBzKAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBERFNDQVBTIGNhcHMKICkgewogCVRSQUNFKGRkcmF3LCIoJXApLT5HZXRDYXBzKCVwKVxuIix0aGlzLGNhcHMpOwogCWNhcHMtPmR3Q2FwcyA9IEREQ0FQU19QQUxFVFRFOyAvKiBwcm9iYWJseSBtb3JlICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0U3VyZmFjZURlc2MoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRERTVVJGQUNFREVTQyBkZHNkCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19HZXRTdXJmYWNlRGVzYygKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRERTVVJGQUNFREVTQyBkZHNkCiApIHsgCiAJaWYgKFRSQUNFX09OKGRkcmF3KSkgewogCQlUUkFDRShkZHJhdywgIiglcCktPkdldFN1cmZhY2VEZXNjKCVwKVxuIiwKQEAgLTcxOCwxMiArNjg5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0FkZFJlZihMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMpIHsKK3N0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19BZGRSZWYoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgewogCVRSQUNFKGRkcmF3LCIoJXApLT5BZGRSZWYoKVxuIix0aGlzKTsKIAlyZXR1cm4gKysodGhpcy0+cmVmKTsKIH0KIAotc3RhdGljIFVMT05HIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzKSB7CitzdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgewogCVRSQUNFKGRkcmF3LCIoJXApLT5SZWxlYXNlKClcbiIsdGhpcyk7CiAjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCWlmICghLS0odGhpcy0+cmVmKSkgewpAQCAtNzQxLDE2ICs3MTIsMTUgQEAKIAlyZXR1cm4gdGhpcy0+cmVmOwogfQogCi1zdGF0aWMgVUxPTkcgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzKSB7CitzdGF0aWMgVUxPTkcgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMpIHsKIAlUUkFDRShkZHJhdywiKCVwKS0+UmVsZWFzZSgpXG4iLHRoaXMpOwogI2lmZGVmIEhBVkVfTElCWFhTSE0KIAlpZiAoIS0tKHRoaXMtPnJlZikpIHsKIAkJdGhpcy0+cy5kZHJhdy0+bHB2dGJsLT5mblJlbGVhc2UodGhpcy0+cy5kZHJhdyk7Ci0JCWlmICghdGhpcy0+dC54c2htLnN1cmZhY2VfaXNfaW1hZ2VfZGF0YSkgewotCQkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMtPnMuc3VyZmFjZSk7Ci0JCX0KLQkJWFNobURldGFjaChkaXNwbGF5LCZ0aGlzLT50LnhzaG0uc2htaW5mbyk7Ci0JCVhEZXN0cm95SW1hZ2UodGhpcy0+dC54c2htLmltYWdlKTsKKwkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMtPnMuc3VyZmFjZSk7CisJCXRoaXMtPnQueHNobS5pbWFnZS0+ZGF0YSA9IE5VTEw7CisJCVRTWFNobURldGFjaChkaXNwbGF5LCZ0aGlzLT50LnhzaG0uc2htaW5mbyk7CisJCVRTWERlc3Ryb3lJbWFnZSh0aGlzLT50LnhzaG0uaW1hZ2UpOwogCQlzaG1kdCh0aGlzLT50LnhzaG0uc2htaW5mby5zaG1hZGRyKTsKIAkJc2htY3RsKHRoaXMtPnQueHNobS5zaG1pbmZvLnNobWlkLCBJUENfUk1JRCwgMCk7CiAJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKQEAgLTc2MCwyMiArNzMwLDIyIEBACiAJcmV0dXJuIHRoaXMtPnJlZjsKIH0KIAotc3RhdGljIFVMT05HIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcykgeworc3RhdGljIFVMT05HIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZShMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzKSB7CiAJVFJBQ0UoZGRyYXcsIiglcCktPlJlbGVhc2UoKVxuIix0aGlzKTsKIAlpZiAoIS0tKHRoaXMtPnJlZikpIHsKIAkJdGhpcy0+cy5kZHJhdy0+bHB2dGJsLT5mblJlbGVhc2UodGhpcy0+cy5kZHJhdyk7Ci0JCWlmICghdGhpcy0+dC54c2htLnN1cmZhY2VfaXNfaW1hZ2VfZGF0YSkgewotCQkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMtPnMuc3VyZmFjZSk7Ci0JCX0KLQkJWERlc3Ryb3lJbWFnZSh0aGlzLT50LnhzaG0uaW1hZ2UpOworCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsdGhpcy0+cy5zdXJmYWNlKTsKKwkJdGhpcy0+dC54bGliLmltYWdlLT5kYXRhID0gTlVMTDsKKwkJVFNYRGVzdHJveUltYWdlKHRoaXMtPnQueGxpYi5pbWFnZSk7CisJCXRoaXMtPnQueGxpYi5pbWFnZSA9IDA7CiAJCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCx0aGlzKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiB0aGlzLT5yZWY7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UgKmxwZHNmCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19HZXRBdHRhY2hlZFN1cmZhY2UoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UzICpscGRzZgogKSB7CiAgICAgICAgIFRSQUNFKGRkcmF3LCAiKCVwKS0+R2V0QXR0YWNoZWRTdXJmYWNlKCVwLCVwKVxuIiwKIAkJICAgICB0aGlzLCBscGRkc2QsIGxwZHNmKTsKQEAgLTc5Miw2NzQgKzc2Miw4MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0luaXRpYWxpemUoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBVyBkZHJhdyxMUEREU1VSRkFDRURFU0MgbHBkc2ZkCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19Jbml0aWFsaXplKAorCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXIGRkcmF3LExQRERTVVJGQUNFREVTQyBscGRzZmQKICkgewogCXJldHVybiBEREVSUl9BTFJFQURZSU5JVElBTElaRUQ7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0UGl4ZWxGb3JtYXQoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRERQSVhFTEZPUk1BVCBwZgotKSB7Ci0JcmV0dXJuIF9nZXRwaXhlbGZvcm1hdCh0aGlzLT5zLmRkcmF3LHBmKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9HZXRCbHRTdGF0dXMoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLERXT1JEIGR3RmxhZ3MpIHsKLQlGSVhNRShkZHJhdywiKCVwKS0+KDB4JTA4bHgpLHN0dWIhXG4iLAotCQl0aGlzLGR3RmxhZ3MKLQkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0dldE92ZXJsYXlQb3NpdGlvbigKLQlMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsTFBMT05HIHgxLExQTE9ORyB4MgotKSB7Ci0JRklYTUUoZGRyYXcsIiglcCktPiglcCwlcCksc3R1YiFcbiIsCi0JCXRoaXMseDEseDIKLQkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX1NldENsaXBwZXIoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBV0NMSVBQRVIgY2xpcHBlcgotKSB7Ci0JRklYTUUoZGRyYXcsIiglcCktPiglcCksc3R1YiFcbiIsdGhpcyxjbGlwcGVyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZV9BZGRBdHRhY2hlZFN1cmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0Ugc3VyZgotKSB7Ci0JRklYTUUoZGRyYXcsIiglcCktPiglcCksc3R1YiFcbiIsdGhpcyxzdXJmKTsKLQl0aGlzLT5zLmJhY2tidWZmZXIgPSBzdXJmOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlX0dldERDKExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxIREMzMiogbHBoZGMpIHsKLQlGSVhNRShkZHJhdywiKCVwKS0+R2V0REMoJXApLHN0dWIhXG4iLHRoaXMsbHBoZGMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZShMUERJUkVDVERSQVdTVVJGQUNFIHRoaXMsUkVGSUlEIHJlZmlpZCxMUFZPSUQgKm9iaikgewotICAgICAgICBjaGFyICAgIHhyZWZpaWRbNTBdOwotCi0gICAgICAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJlZmlpZCx4cmVmaWlkKTsKLSAgICAgICAgVFJBQ0UoZGRyYXcsIiglcCktPiglcywlcClcbiIsdGhpcyx4cmVmaWlkLG9iaik7Ci0JCi0JLyogdGhhdHMgdmVyc2lvbiAzIChEaXJlY3RYIDUpICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UzLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTMpKSkgewotCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJmRnYV9kZHMzdnQ7Ci0JCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0JCSpvYmogPSB0aGlzOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhhdHMgdmVyc2lvbiAyIChEaXJlY3RYIDMpICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTIpKSkgewotCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJmRnYV9kZHMydnQ7Ci0JCSpvYmogPSB0aGlzOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhhdHMgdXMgKi8KLQlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3U3VyZmFjZSxyZWZpaWQsc2l6ZW9mKElJRF9JRGlyZWN0RHJhd1N1cmZhY2UpKSkgewotCQl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOwotCQkqb2JqID0gdGhpczsKLQkJcmV0dXJuIDA7Ci0JfQotCVdBUk4oZGRyYXcsIiglcCk6aW50ZXJmYWNlIGZvciBJSUQgJXMgX05PVF8gZm91bmQhXG4iLHRoaXMseHJlZmlpZCk7Ci0JcmV0dXJuIE9MRV9FX0VOVU1fTk9NT1JFOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoTFBESVJFQ1REUkFXU1VSRkFDRSB0aGlzLFJFRklJRCByZWZpaWQsTFBWT0lEICpvYmopIHsKLSAgICAgICAgY2hhciAgICB4cmVmaWlkWzUwXTsKLQotICAgICAgICBXSU5FX1N0cmluZ0Zyb21DTFNJRCgoTFBDTFNJRClyZWZpaWQseHJlZmlpZCk7Ci0gICAgICAgIFRSQUNFKGRkcmF3LCIoJXApLT4oJXMsJXApXG4iLHRoaXMseHJlZmlpZCxvYmopOwotCQotCS8qIHRoYXRzIHZlcnNpb24gMyAoRGlyZWN0WCA1KSAqLwotCWlmICgJIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3U3VyZmFjZTMscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlMykpKSB7Ci0JCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0JCXRoaXMtPmxwdnRibCA9IChMUERJUkVDVERSQVdTVVJGQUNFX1ZUQUJMRSkmeHNobV9kZHMzdnQ7Ci0JCSpvYmogPSB0aGlzOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhhdHMgdmVyc2lvbiAyIChEaXJlY3RYIDMpICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTIpKSkgewotCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJnhzaG1fZGRzMnZ0OwotCQkqb2JqID0gdGhpczsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIHRoYXRzIHVzICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlKSkpIHsKLQkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKLQkJKm9iaiA9IHRoaXM7Ci0JCXJldHVybiAwOwotCX0KLQlXQVJOKGRkcmF3LCIoJXApOmludGVyZmFjZSBmb3IgSUlEICVzIF9OT1RfIGZvdW5kIVxuIix0aGlzLHhyZWZpaWQpOwotCXJldHVybiBPTEVfRV9FTlVNX05PTU9SRTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcyxSRUZJSUQgcmVmaWlkLExQVk9JRCAqb2JqKSB7Ci0gICAgICAgIGNoYXIgICAgeHJlZmlpZFs1MF07Ci0KLSAgICAgICAgV0lORV9TdHJpbmdGcm9tQ0xTSUQoKExQQ0xTSUQpcmVmaWlkLHhyZWZpaWQpOwotICAgICAgICBUUkFDRShkZHJhdywiKCVwKS0+KCVzLCVwKVxuIix0aGlzLHhyZWZpaWQsb2JqKTsKLQkKLQkvKiB0aGF0cyB2ZXJzaW9uIDMgKERpcmVjdFggNSkgKi8KLQlpZiAoIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3U3VyZmFjZTMscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlMykpKSB7Ci0JCXRoaXMtPmxwdnRibCA9IChMUERJUkVDVERSQVdTVVJGQUNFX1ZUQUJMRSkmeGxpYl9kZHMzdnQ7Ci0JCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7Ci0JCSpvYmogPSB0aGlzOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhhdHMgdmVyc2lvbiAyIChEaXJlY3RYIDMpICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UyLHJlZmlpZCxzaXplb2YoSUlEX0lEaXJlY3REcmF3U3VyZmFjZTIpKSkgewotCQl0aGlzLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJnhsaWJfZGRzMnZ0OwotCQkqb2JqID0gdGhpczsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIHRoYXRzIHVzICovCi0JaWYgKCFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UscmVmaWlkLHNpemVvZihJSURfSURpcmVjdERyYXdTdXJmYWNlKSkpIHsKLQkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKLQkJKm9iaiA9IHRoaXM7Ci0JCXJldHVybiAwOwotCX0KLQlXQVJOKGRkcmF3LCIoJXApOmludGVyZmFjZSBmb3IgSUlEICVzIF9OT1RfIGZvdW5kIVxuIix0aGlzLHhyZWZpaWQpOwotICAgIAlyZXR1cm4gT0xFX0VfRU5VTV9OT01PUkU7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2VfSXNMb3N0KExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcykgewotCXJldHVybiAwOyAvKiBobW0gKi8KLX0KLQotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2VfVlRhYmxlIGRnYV9kZHN2dCA9IHsKLQlER0FfSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlLAotCUlEaXJlY3REcmF3U3VyZmFjZV9BZGRSZWYsCi0JREdBX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlLAotCUlEaXJlY3REcmF3U3VyZmFjZV9BZGRBdHRhY2hlZFN1cmZhY2UsCi0JKHZvaWQqKTUsCi0JSURpcmVjdERyYXdTdXJmYWNlX0JsdCwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0QmF0Y2gsCi0JSURpcmVjdERyYXdTdXJmYWNlX0JsdEZhc3QsCi0JKHZvaWQqKTksCi0JKHZvaWQqKTEwLAotCSh2b2lkKikxMSwKLQlER0FfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Qmx0U3RhdHVzLAotCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRDYXBzLAotCSh2b2lkKikxNiwKLQkodm9pZCopMTcsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldERDLAotCSh2b2lkKikxOSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0T3ZlcmxheVBvc2l0aW9uLAotCSh2b2lkKikyMSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0UGl4ZWxGb3JtYXQsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldFN1cmZhY2VEZXNjLAotCUlEaXJlY3REcmF3U3VyZmFjZV9Jbml0aWFsaXplLAotCUlEaXJlY3REcmF3U3VyZmFjZV9Jc0xvc3QsCi0JSURpcmVjdERyYXdTdXJmYWNlX0xvY2ssCi0JKHZvaWQqKTI3LAotCSh2b2lkKikyOCwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0Q2xpcHBlciwKLQkodm9pZCopMzAsCi0JKHZvaWQqKTMxLAotCUlEaXJlY3REcmF3U3VyZmFjZV9TZXRQYWxldHRlLAotCURHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrLAotCSh2b2lkKikzNCwKLQkodm9pZCopMzUsCi0JKHZvaWQqKTM2LAotfTsKLQotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2VfVlRhYmxlIHhzaG1fZGRzdnQgPSB7Ci0JWFNobV9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UsCi0JSURpcmVjdERyYXdTdXJmYWNlX0FkZFJlZiwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlLAotCUlEaXJlY3REcmF3U3VyZmFjZV9BZGRBdHRhY2hlZFN1cmZhY2UsCi0JKHZvaWQqKTUsCi0JSURpcmVjdERyYXdTdXJmYWNlX0JsdCwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0QmF0Y2gsCi0JSURpcmVjdERyYXdTdXJmYWNlX0JsdEZhc3QsCi0JKHZvaWQqKTksCi0JKHZvaWQqKTEwLAotCSh2b2lkKikxMSwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwLAotCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldEJsdFN0YXR1cywKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Q2FwcywKLQkodm9pZCopMTYsCi0JKHZvaWQqKTE3LAotCUlEaXJlY3REcmF3U3VyZmFjZV9HZXREQywKLQkodm9pZCopMTksCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldE92ZXJsYXlQb3NpdGlvbiwKLQkodm9pZCopMjEsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldFBpeGVsRm9ybWF0LAotCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRTdXJmYWNlRGVzYywKLQlJRGlyZWN0RHJhd1N1cmZhY2VfSW5pdGlhbGl6ZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfSXNMb3N0LAotCUlEaXJlY3REcmF3U3VyZmFjZV9Mb2NrLAotCSh2b2lkKikyNywKLQkodm9pZCopMjgsCi0JSURpcmVjdERyYXdTdXJmYWNlX1NldENsaXBwZXIsCi0JKHZvaWQqKTMwLAotCSh2b2lkKikzMSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0UGFsZXR0ZSwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2ssCi0JKHZvaWQqKTM0LAotCSh2b2lkKikzNSwKLQkodm9pZCopMzYsCi19OwotCi1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZV9WVGFibGUgeGxpYl9kZHN2dCA9IHsKLQlYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfQWRkUmVmLAotCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UsCi0JSURpcmVjdERyYXdTdXJmYWNlX0FkZEF0dGFjaGVkU3VyZmFjZSwKLQkodm9pZCopNSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0LAotCUlEaXJlY3REcmF3U3VyZmFjZV9CbHRCYXRjaCwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfQmx0RmFzdCwKLQkodm9pZCopOSwKLQkodm9pZCopMTAsCi0JKHZvaWQqKTExLAotCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Qmx0U3RhdHVzLAotCUlEaXJlY3REcmF3U3VyZmFjZV9HZXRDYXBzLAotCSh2b2lkKikxNiwKLQkodm9pZCopMTcsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldERDLAotCSh2b2lkKikxOSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0T3ZlcmxheVBvc2l0aW9uLAotCSh2b2lkKikyMSwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfR2V0UGl4ZWxGb3JtYXQsCi0JSURpcmVjdERyYXdTdXJmYWNlX0dldFN1cmZhY2VEZXNjLAotCUlEaXJlY3REcmF3U3VyZmFjZV9Jbml0aWFsaXplLAotCUlEaXJlY3REcmF3U3VyZmFjZV9Jc0xvc3QsCi0JSURpcmVjdERyYXdTdXJmYWNlX0xvY2ssCi0JKHZvaWQqKTI3LAotCSh2b2lkKikyOCwKLQlJRGlyZWN0RHJhd1N1cmZhY2VfU2V0Q2xpcHBlciwKLQkodm9pZCopMzAsCi0JKHZvaWQqKTMxLAotCUlEaXJlY3REcmF3U3VyZmFjZV9TZXRQYWxldHRlLAotCVhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaywKLQkodm9pZCopMzQsCi0JKHZvaWQqKTM1LAotCSh2b2lkKikzNiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJSURpcmVjdERyYXdTdXJmYWNlMgotICoKLSAqIGNhbGxzIElEaXJlY3REcmF3U3VyZmFjZSBtZXRob2RzIHdoZXJlIHBvc3NpYmxlCi0gKi8KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UyX0xvY2soCi0gICAgTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUFJFQ1QzMiBscHJlY3QsTFBERFNVUkZBQ0VERVNDIGxwZGRzZCxEV09SRCBmbGFncywgSEFORExFMzIgaG5kCi0pIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX0xvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscHJlY3QsbHBkZHNkLGZsYWdzLGhuZCk7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlMl9VbmxvY2soCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUFZPSUQgc3VyZmFjZQotKSB7Ci0JcmV0dXJuIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfVW5sb2NrKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsc3VyZmFjZSk7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBWT0lEIHN1cmZhY2UKLSkgewotCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHN1cmZhY2UpOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX1VubG9jaygKLQlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQVk9JRCBzdXJmYWNlCi0pIHsKLQlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxzdXJmYWNlKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfU2V0UGFsZXR0ZSgKLQlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQRElSRUNURFJBV1BBTEVUVEUgcGFsCi0pIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX1NldFBhbGV0dGUoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxwYWwpOwotfQotCi1zdGF0aWMgVUxPTkcgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfQWRkUmVmKExQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMpIHsKLQlUUkFDRShkZHJhdywiKCVwKS0+QWRkUmVmKClcbiIsdGhpcyk7Ci0JcmV0dXJuICsrKHRoaXMtPnJlZik7Ci19Ci0KLXN0YXRpYyBVTE9ORyBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfUmVsZWFzZShMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzKSB7Ci0JcmV0dXJuIERHQV9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzKTsKLX0KLQotc3RhdGljIFVMT05HIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfUmVsZWFzZShMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzKSB7Ci0JcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyk7Ci19Ci0KLXN0YXRpYyBVTE9ORyBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcykgewotCXJldHVybiBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMpOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlMl9CbHQoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUFJFQ1QzMiByZHN0LExQRElSRUNURFJBV1NVUkZBQ0UyIHNyYyxMUFJFQ1QzMiByc3JjLERXT1JEIGR3RmxhZ3MsTFBEREJMVEZYIGxwYmx0ZngKLSkgewotCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfQmx0KChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsIHJkc3QsIChMUERJUkVDVERSQVdTVVJGQUNFKXNyYywgcnNyYywgZHdGbGFncyxscGJsdGZ4KTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfQmx0RmFzdCgKLQlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLERXT1JEIGRzdHgsRFdPUkQgZHN0eSxMUERJUkVDVERSQVdTVVJGQUNFMiBzcmMsTFBSRUNUMzIgcnNyYyxEV09SRCB0cmFucwotKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3U3VyZmFjZV9CbHRGYXN0KChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsZHN0eCxkc3R5LChMUERJUkVDVERSQVdTVVJGQUNFKXNyYyxyc3JjLHRyYW5zKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfQmx0QmF0Y2goCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUEREQkxUQkFUQ0ggZGRibHRiYXRjaCxEV09SRCB4LERXT1JEIHkKLSkgewotCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfQmx0QmF0Y2goKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxkZGJsdGJhdGNoLHgseSk7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlMl9HZXRBdHRhY2hlZFN1cmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UyICpscGRzZgotKSB7Ci0JSFJFU1VMVAlyZXQ7Ci0KLQlyZXQgPSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZik7Ci0KLQlpZiAoIXJldCkgewotCQkoKmxwZHNmKS0+bHB2dGJsID0gJmRnYV9kZHMydnQ7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfR2V0QXR0YWNoZWRTdXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsTFBERFNDQVBTIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFMiAqbHBkc2YKLSkgewotCUhSRVNVTFQJcmV0OwotCi0JcmV0ID0gSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwZGRzZCwoTFBESVJFQ1REUkFXU1VSRkFDRSopbHBkc2YpOwotCi0JaWYgKCFyZXQpIHsKLQkJKCpscGRzZiktPmxwdnRibCA9ICZ4c2htX2RkczJ2dDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlMl9HZXRBdHRhY2hlZFN1cmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUEREU0NBUFMgbHBkZHNkLExQRElSRUNURFJBV1NVUkZBQ0UyICpscGRzZgotKSB7Ci0JSFJFU1VMVAlyZXQ7Ci0KLQlyZXQgPSBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0QXR0YWNoZWRTdXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsbHBkZHNkLChMUERJUkVDVERSQVdTVVJGQUNFKilscGRzZik7Ci0KLQlpZiAoIXJldCkgewotCQkoKmxwZHNmKS0+bHB2dGJsID0gJnhsaWJfZGRzMnZ0OwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfRmxpcCgKLQlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UyIGZsaXB0byxEV09SRCBkd0ZsYWdzCi0pIHsKLQlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsKExQRElSRUNURFJBV1NVUkZBQ0UpZmxpcHRvLGR3RmxhZ3MpOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX0ZsaXAoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUERJUkVDVERSQVdTVVJGQUNFMiBmbGlwdG8sRFdPUkQgZHdGbGFncwotKSB7Ci0JcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcywoTFBESVJFQ1REUkFXU1VSRkFDRSlmbGlwdG8sZHdGbGFncyk7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTJfRmxpcCgKLQlMUERJUkVDVERSQVdTVVJGQUNFMiB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UyIGZsaXB0byxEV09SRCBkd0ZsYWdzCi0pIHsKLQlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfRmxpcCgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLChMUERJUkVDVERSQVdTVVJGQUNFKWZsaXB0byxkd0ZsYWdzKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfRW51bUF0dGFjaGVkU3VyZmFjZXMoTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxMUFZPSUQgY29udGV4dCxMUERERU5VTVNVUkZBQ0VTQ0FMTEJBQ0sgZXNmY2IpIHsKLQlGSVhNRShkZHJhdywiKCVwKS0+KCVwLCVwKSxzdHViIVxuIix0aGlzLGNvbnRleHQsZXNmY2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfUXVlcnlJbnRlcmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCi0pIHsKLQlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHJpaWQscHBvYmopOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UyX1F1ZXJ5SW50ZXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMsUkVGSUlEIHJpaWQsTFBWT0lEICpwcG9iagotKSB7Ci0JcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMscmlpZCxwcG9iaik7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTJfUXVlcnlJbnRlcmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTIgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCi0pIHsKLQlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyaWlkLHBwb2JqKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTJfSXNMb3N0KExQRElSRUNURFJBV1NVUkZBQ0UyIHRoaXMpIHsKLQlyZXR1cm4gMDsgLyogaG1tICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgSURpcmVjdERyYXdTdXJmYWNlMl9WVGFibGUgZGdhX2RkczJ2dCA9IHsKLQlER0FfSURpcmVjdERyYXdTdXJmYWNlMl9RdWVyeUludGVyZmFjZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0FkZFJlZiwKLQlER0FfSURpcmVjdERyYXdTdXJmYWNlMl9SZWxlYXNlLAotCSh2b2lkKik0LAotCSh2b2lkKik1LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0QmF0Y2gsCi0JSURpcmVjdERyYXdTdXJmYWNlMl9CbHRGYXN0LAotCSh2b2lkKik5LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfRW51bUF0dGFjaGVkU3VyZmFjZXMsCi0JKHZvaWQqKTExLAotCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UyX0ZsaXAsCi0JREdBX0lEaXJlY3REcmF3U3VyZmFjZTJfR2V0QXR0YWNoZWRTdXJmYWNlLAotCSh2b2lkKikxNCwKLQkodm9pZCopMTUvKklEaXJlY3REcmF3U3VyZmFjZV9HZXRDYXBzKi8sCi0JKHZvaWQqKTE2LAotCSh2b2lkKikxNywKLQkodm9pZCopMTgsCi0JKHZvaWQqKTE5LAotCSh2b2lkKikyMCwKLQkodm9pZCopMjEsCi0JKHZvaWQqKTIyLAotCSh2b2lkKikyMy8qSURpcmVjdERyYXdTdXJmYWNlX0dldFN1cmZhY2VEZXNjKi8sCi0JKHZvaWQqKTI0LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfSXNMb3N0LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfTG9jaywKLQkodm9pZCopMjcsCi0JKHZvaWQqKTI4LAotCSh2b2lkKikyOSwKLQkodm9pZCopMzAsCi0JKHZvaWQqKTMxLAotCUlEaXJlY3REcmF3U3VyZmFjZTJfU2V0UGFsZXR0ZSwKLQlER0FfSURpcmVjdERyYXdTdXJmYWNlMl9VbmxvY2ssCi0JKHZvaWQqKTM0LAotCSh2b2lkKikzNSwKLQkodm9pZCopMzYsCi0JKHZvaWQqKTM3LAotCSh2b2lkKikzOCwKLQkodm9pZCopMzksCi19OwotCi1zdGF0aWMgc3RydWN0IElEaXJlY3REcmF3U3VyZmFjZTJfVlRhYmxlIHhzaG1fZGRzMnZ0ID0gewotCVhTaG1fSURpcmVjdERyYXdTdXJmYWNlMl9RdWVyeUludGVyZmFjZSwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0FkZFJlZiwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfUmVsZWFzZSwKLQkodm9pZCopNCwKLQkodm9pZCopNSwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdCwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdEJhdGNoLAotCUlEaXJlY3REcmF3U3VyZmFjZTJfQmx0RmFzdCwKLQkodm9pZCopOSwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0VudW1BdHRhY2hlZFN1cmZhY2VzLAotCSh2b2lkKikxMSwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfRmxpcCwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfR2V0QXR0YWNoZWRTdXJmYWNlLAotCSh2b2lkKikxNCwKLQkodm9pZCopMTUvKklEaXJlY3REcmF3U3VyZmFjZV9HZXRDYXBzKi8sCi0JKHZvaWQqKTE2LAotCSh2b2lkKikxNywKLQkodm9pZCopMTgsCi0JKHZvaWQqKTE5LAotCSh2b2lkKikyMCwKLQkodm9pZCopMjEsCi0JKHZvaWQqKTIyLAotCSh2b2lkKikyMy8qSURpcmVjdERyYXdTdXJmYWNlX0dldFN1cmZhY2VEZXNjKi8sCi0JKHZvaWQqKTI0LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfSXNMb3N0LAotCUlEaXJlY3REcmF3U3VyZmFjZTJfTG9jaywKLQkodm9pZCopMjcsCi0JKHZvaWQqKTI4LAotCSh2b2lkKikyOSwKLQkodm9pZCopMzAsCi0JKHZvaWQqKTMxLAotCUlEaXJlY3REcmF3U3VyZmFjZTJfU2V0UGFsZXR0ZSwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTJfVW5sb2NrLAotCSh2b2lkKikzNCwKLQkodm9pZCopMzUsCi0JKHZvaWQqKTM2LAotCSh2b2lkKikzNywKLQkodm9pZCopMzgsCi0JKHZvaWQqKTM5LAotfTsKLQotc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UyX1ZUYWJsZSB4bGliX2RkczJ2dCA9IHsKLQlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTJfUXVlcnlJbnRlcmZhY2UsCi0JSURpcmVjdERyYXdTdXJmYWNlMl9BZGRSZWYsCi0JWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX1JlbGVhc2UsCi0JKHZvaWQqKTQsCi0JKHZvaWQqKTUsCi0JSURpcmVjdERyYXdTdXJmYWNlMl9CbHQsCi0JSURpcmVjdERyYXdTdXJmYWNlMl9CbHRCYXRjaCwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0JsdEZhc3QsCi0JKHZvaWQqKTksCi0JSURpcmVjdERyYXdTdXJmYWNlMl9FbnVtQXR0YWNoZWRTdXJmYWNlcywKLQkodm9pZCopMTEsCi0JWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX0ZsaXAsCi0JWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX0dldEF0dGFjaGVkU3VyZmFjZSwKLQkodm9pZCopMTQsCi0JKHZvaWQqKTE1LypJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Q2FwcyovLAotCSh2b2lkKikxNiwKLQkodm9pZCopMTcsCi0JKHZvaWQqKTE4LAotCSh2b2lkKikxOSwKLQkodm9pZCopMjAsCi0JKHZvaWQqKTIxLAotCSh2b2lkKikyMiwKLQkodm9pZCopMjMvKklEaXJlY3REcmF3U3VyZmFjZV9HZXRTdXJmYWNlRGVzYyovLAotCSh2b2lkKikyNCwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0lzTG9zdCwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX0xvY2ssCi0JKHZvaWQqKTI3LAotCSh2b2lkKikyOCwKLQkodm9pZCopMjksCi0JKHZvaWQqKTMwLAotCSh2b2lkKikzMSwKLQlJRGlyZWN0RHJhd1N1cmZhY2UyX1NldFBhbGV0dGUsCi0JWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UyX1VubG9jaywKLQkodm9pZCopMzQsCi0JKHZvaWQqKTM1LAotCSh2b2lkKikzNiwKLQkodm9pZCopMzcsCi0JKHZvaWQqKTM4LAotCSh2b2lkKikzOSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQkJSURpcmVjdERyYXdTdXJmYWNlMwotICovCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19TZXRQYWxldHRlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXUEFMRVRURSBwYWwKLSkgewotCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfU2V0UGFsZXR0ZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHBhbCk7Ci19Ci0KIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0dldFBpeGVsRm9ybWF0KAogCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBERFBJWEVMRk9STUFUIHBmCiApIHsKIAlyZXR1cm4gX2dldHBpeGVsZm9ybWF0KHRoaXMtPnMuZGRyYXcscGYpOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBERFNDQVBTIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFMyAqbHBkc2YKLSkgewotCUhSRVNVTFQJcmV0OwotCi0JcmV0ID0gSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwZGRzZCwoTFBESVJFQ1REUkFXU1VSRkFDRSopbHBkc2YpOwotCi0JaWYgKCFyZXQpIHsKLQkJKCpscGRzZiktPmxwdnRibCA9ICZkZ2FfZGRzM3Z0OwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX0dldEF0dGFjaGVkU3VyZmFjZSgKLQlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRERTQ0FQUyBscGRkc2QsTFBESVJFQ1REUkFXU1VSRkFDRTMgKmxwZHNmCi0pIHsKLQlIUkVTVUxUCXJldDsKLQotCXJldCA9IElEaXJlY3REcmF3U3VyZmFjZV9HZXRBdHRhY2hlZFN1cmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscGRkc2QsKExQRElSRUNURFJBV1NVUkZBQ0UqKWxwZHNmKTsKLQotCWlmICghcmV0KSB7Ci0JCSgqbHBkc2YpLT5scHZ0YmwgPSAmeHNobV9kZHMzdnQ7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBERFNDQVBTIGxwZGRzZCxMUERJUkVDVERSQVdTVVJGQUNFMyAqbHBkc2YKLSkgewotCUhSRVNVTFQJcmV0OwotCi0JcmV0ID0gSURpcmVjdERyYXdTdXJmYWNlX0dldEF0dGFjaGVkU3VyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLGxwZGRzZCwoTFBESVJFQ1REUkFXU1VSRkFDRSopbHBkc2YpOwotCi0JaWYgKCFyZXQpIHsKLQkJKCpscGRzZiktPmxwdnRibCA9ICZ4bGliX2RkczN2dDsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIFVMT05HIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZFJlZihMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzKSB7Ci0JVFJBQ0UoZGRyYXcsIiglcCktPkFkZFJlZigpXG4iLHRoaXMpOwotCXJldHVybiArKyh0aGlzLT5yZWYpOwotfQotCi1zdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgewotCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1JlbGVhc2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyk7Ci19Ci0KLXN0YXRpYyBVTE9ORyBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2UoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgewotCXJldHVybiBYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9SZWxlYXNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMpOwotfQotCi1zdGF0aWMgVUxPTkcgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19SZWxlYXNlKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMpIHsKLQlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUmVsZWFzZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfQmx0KAotICAgICAgICBMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQUkVDVDMyIHJkc3QsTFBESVJFQ1REUkFXU1VSRkFDRTMgc3JjLAotCUxQUkVDVDMyIHJzcmMsRFdPUkQgZHdGbGFncyxMUEREQkxURlggbHBibHRmeAotKSB7Ci0JcmV0dXJuIElEaXJlY3REcmF3U3VyZmFjZV9CbHQoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyZHN0LChMUERJUkVDVERSQVdTVVJGQUNFKXNyYyxyc3JjLGR3RmxhZ3MsbHBibHRmeCk7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0lzTG9zdChMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzKSB7Ci0JcmV0dXJuIDA7IC8qIGhtbSAqLwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19SZXN0b3JlKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMpIHsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0dldEJsdFN0YXR1cyhMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLERXT1JEIGR3RmxhZ3MpIHsKKwlGSVhNRShkZHJhdywiKCVwKS0+KDB4JTA4bHgpLHN0dWIhXG4iLHRoaXMsZHdGbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0dldEJsdFN0YXR1cygKLQlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLERXT1JEIGR3ZmxhZ3MKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0dldE92ZXJsYXlQb3NpdGlvbigKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQTE9ORyB4MSxMUExPTkcgeDIKICkgewotCXJldHVybiBJRGlyZWN0RHJhd1N1cmZhY2VfR2V0Qmx0U3RhdHVzKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsZHdmbGFncyk7CisJRklYTUUoZGRyYXcsIiglcCktPiglcCwlcCksc3R1YiFcbiIsdGhpcyx4MSx4Mik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBER0FfSURpcmVjdERyYXdTdXJmYWNlM19GbGlwKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTMgZmxpcHRvLERXT1JEIGR3RmxhZ3MKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX1NldENsaXBwZXIoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUERJUkVDVERSQVdDTElQUEVSIGNsaXBwZXIKICkgewotCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX0ZsaXAoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcywoTFBESVJFQ1REUkFXU1VSRkFDRSlmbGlwdG8sZHdGbGFncyk7CisJRklYTUUoZGRyYXcsIiglcCktPiglcCksc3R1YiFcbiIsdGhpcyxjbGlwcGVyKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlM19GbGlwKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTMgZmxpcHRvLERXT1JEIGR3RmxhZ3MKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZEF0dGFjaGVkU3VyZmFjZSgKKwlMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLExQRElSRUNURFJBV1NVUkZBQ0UzIHN1cmYKICkgewotCXJldHVybiBYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsKExQRElSRUNURFJBV1NVUkZBQ0UpZmxpcHRvLGR3RmxhZ3MpOworCUZJWE1FKGRkcmF3LCIoJXApLT4oJXApLHN0dWIhXG4iLHRoaXMsc3VyZik7CisJdGhpcy0+cy5iYWNrYnVmZmVyID0gc3VyZjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19GbGlwKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXU1VSRkFDRTMgZmxpcHRvLERXT1JEIGR3RmxhZ3MKLSkgewotCXJldHVybiBYbGliX0lEaXJlY3REcmF3U3VyZmFjZV9GbGlwKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMsKExQRElSRUNURFJBV1NVUkZBQ0UpZmxpcHRvLGR3RmxhZ3MpOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfR2V0REMoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxIREMzMiogbHBoZGMpIHsKKwlGSVhNRShkZHJhdywiKCVwKS0+R2V0REMoJXApXG4iLHRoaXMsbHBoZGMpOworCSpscGhkYyA9IEdldERDMzIodGhpcy0+cy5kZHJhdy0+ZS54bGliLndpbmRvdyk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX0xvY2soCi0gICAgTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFJFQ1QzMiBscHJlY3QsTFBERFNVUkZBQ0VERVNDIGxwZGRzZCxEV09SRCBmbGFncywgSEFORExFMzIgaG5kCi0pIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX0xvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxscHJlY3QsbHBkZHNkLGZsYWdzLGhuZCk7IAorc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZURDKExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsSERDMzIgaGRjKSB7CisJRklYTUUoZGRyYXcsIiglcCktPigweCUwOGx4KSxzdHViIVxuIix0aGlzLChsb25nKWhkYyk7CisJUmVsZWFzZURDMzIodGhpcy0+cy5kZHJhdy0+ZS54bGliLndpbmRvdyxoZGMpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBWT0lEIHN1cmZhY2UKLSkgewotCXJldHVybiBER0FfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHN1cmZhY2UpOworCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZShMUERJUkVDVERSQVdTVVJGQUNFMyB0aGlzLFJFRklJRCByZWZpaWQsTFBWT0lEICpvYmopIHsKKyAgICAgICAgY2hhciAgICB4cmVmaWlkWzUwXTsKKworICAgICAgICBXSU5FX1N0cmluZ0Zyb21DTFNJRCgoTFBDTFNJRClyZWZpaWQseHJlZmlpZCk7CisgICAgICAgIFRSQUNFKGRkcmF3LCIoJXApLT4oJXMsJXApXG4iLHRoaXMseHJlZmlpZCxvYmopOworCQorCS8qIERpcmVjdERyYXdTdXJmYWNlLERpcmVjdERyYXdTdXJmYWNlMiBhbmQgRGlyZWN0RHJhd1N1cmZhY2UzIHVzZQorCSAqIHRoZSBzYW1lIGludGVyZmFjZS4gQW5kIElVbmtub3duIGRvZXMgdGhhdCB0b28gb2YgY291cnNlLgorCSAqLworCWlmICgJIW1lbWNtcCgmSUlEX0lEaXJlY3REcmF3U3VyZmFjZTMscmVmaWlkLHNpemVvZihJSUQpKQl8fAorCQkhbWVtY21wKCZJSURfSURpcmVjdERyYXdTdXJmYWNlMixyZWZpaWQsc2l6ZW9mKElJRCkpCXx8CisJCSFtZW1jbXAoJklJRF9JRGlyZWN0RHJhd1N1cmZhY2UscmVmaWlkLHNpemVvZihJSUQpKQl8fAorCQkhbWVtY21wKCZJSURfSVVua25vd24scmVmaWlkLHNpemVvZihJSUQpKQorCSkgeworCQkqb2JqID0gdGhpczsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJcmV0dXJuIDA7CisJfQorCUZJWE1FKGRkcmF3LCIoJXApOmludGVyZmFjZSBmb3IgSUlEICVzIE5PVCBmb3VuZCFcbiIsdGhpcyx4cmVmaWlkKTsKKwlyZXR1cm4gT0xFX0VfRU5VTV9OT01PUkU7CiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfVW5sb2NrKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBWT0lEIHN1cmZhY2UKLSkgewotCXJldHVybiBYU2htX0lEaXJlY3REcmF3U3VyZmFjZV9VbmxvY2soKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxzdXJmYWNlKTsKLX0KLQotc3RhdGljIEhSRVNVTFQgV0lOQVBJIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlM19VbmxvY2soCi0JTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgc3VyZmFjZQotKSB7Ci0JcmV0dXJuIFhsaWJfSURpcmVjdERyYXdTdXJmYWNlX1VubG9jaygoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHN1cmZhY2UpOworc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfSXNMb3N0KExQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMpIHsKKwlGSVhNRShkZHJhdywiKCVwKS0+KCksIHN0dWIhXG4iLHRoaXMpOworCXJldHVybiAwOyAvKiBobW0gKi8KIH0KIAogc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfRW51bUF0dGFjaGVkU3VyZmFjZXMoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxMUFZPSUQgY29udGV4dCxMUERERU5VTVNVUkZBQ0VTQ0FMTEJBQ0sgZXNmY2IpIHsKQEAgLTE0NjcsNjEgKzg0Niw0OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdTdXJmYWNlM19TZXRDbGlwcGVyKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsTFBESVJFQ1REUkFXQ0xJUFBFUiBjbGlwcGVyCi0pIHsKLQlyZXR1cm4gSURpcmVjdERyYXdTdXJmYWNlX1NldENsaXBwZXIoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxjbGlwcGVyKTsKK3N0YXRpYyBIUkVTVUxUIFdJTkFQSSBJRGlyZWN0RHJhd1N1cmZhY2UzX1Jlc3RvcmUoTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcykgeworCUZJWE1FKGRkcmF3LCIoJXApLT4oKSxzdHViIVxuIix0aGlzKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIEhSRVNVTFQgV0lOQVBJIERHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1F1ZXJ5SW50ZXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsUkVGSUlEIHJpaWQsTFBWT0lEICpwcG9iagorc3RhdGljIEhSRVNVTFQgV0lOQVBJIElEaXJlY3REcmF3U3VyZmFjZTNfU2V0Q29sb3JLZXkoCisJTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxEV09SRCB4LExQRERDT0xPUktFWSBja2V5CiApIHsKLQlyZXR1cm4gREdBX0lEaXJlY3REcmF3U3VyZmFjZV9RdWVyeUludGVyZmFjZSgoTFBESVJFQ1REUkFXU1VSRkFDRSl0aGlzLHJpaWQscHBvYmopOwotfQotCi1zdGF0aWMgSFJFU1VMVCBXSU5BUEkgWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX1F1ZXJ5SW50ZXJmYWNlKAotCUxQRElSRUNURFJBV1NVUkZBQ0UzIHRoaXMsUkVGSUlEIHJpaWQsTFBWT0lEICpwcG9iagotKSB7Ci0JcmV0dXJuIFhTaG1fSURpcmVjdERyYXdTdXJmYWNlX1F1ZXJ5SW50ZXJmYWNlKChMUERJUkVDVERSQVdTVVJGQUNFKXRoaXMscmlpZCxwcG9iaik7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UoCi0JTFBESVJFQ1REUkFXU1VSRkFDRTMgdGhpcyxSRUZJSUQgcmlpZCxMUFZPSUQgKnBwb2JqCi0pIHsKLQlyZXR1cm4gWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2VfUXVlcnlJbnRlcmZhY2UoKExQRElSRUNURFJBV1NVUkZBQ0UpdGhpcyxyaWlkLHBwb2JqKTsKKwlGSVhNRShkZHJhdywiKCVwKS0+KDB4JTA4bHgsJXApLHN0dWIhXG4iLHRoaXMseCxja2V5KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZSBkZ2FfZGRzM3Z0ID0gewotCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1F1ZXJ5SW50ZXJmYWNlLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UsCiAJSURpcmVjdERyYXdTdXJmYWNlM19BZGRSZWYsCiAJREdBX0lEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZSwKLQkodm9pZCopNCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZEF0dGFjaGVkU3VyZmFjZSwKIAkodm9pZCopNSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdCwKLQkodm9pZCopNywKLQkodm9pZCopOCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdEJhdGNoLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfQmx0RmFzdCwKIAkodm9pZCopOSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0VudW1BdHRhY2hlZFN1cmZhY2VzLAogCSh2b2lkKikxMSwKIAlER0FfSURpcmVjdERyYXdTdXJmYWNlM19GbGlwLAotCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX0dldEF0dGFjaGVkU3VyZmFjZSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldEF0dGFjaGVkU3VyZmFjZSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldEJsdFN0YXR1cywKLQkodm9pZCopMTUsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXRDYXBzLAogCSh2b2lkKikxNiwKIAkodm9pZCopMTcsCi0JKHZvaWQqKTE4LAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0REMsCiAJKHZvaWQqKTE5LAotCSh2b2lkKikyMCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldE92ZXJsYXlQb3NpdGlvbiwKIAkodm9pZCopMjEsCiAJSURpcmVjdERyYXdTdXJmYWNlM19HZXRQaXhlbEZvcm1hdCwKLQkodm9pZCopMjMsCi0JKHZvaWQqKTI0LAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0U3VyZmFjZURlc2MsCisJSURpcmVjdERyYXdTdXJmYWNlM19Jbml0aWFsaXplLAogCUlEaXJlY3REcmF3U3VyZmFjZTNfSXNMb3N0LAogCUlEaXJlY3REcmF3U3VyZmFjZTNfTG9jaywKLQkodm9pZCopMjcsCisJSURpcmVjdERyYXdTdXJmYWNlM19SZWxlYXNlREMsCiAJSURpcmVjdERyYXdTdXJmYWNlM19SZXN0b3JlLAogCUlEaXJlY3REcmF3U3VyZmFjZTNfU2V0Q2xpcHBlciwKLQkodm9pZCopMzAsCisJSURpcmVjdERyYXdTdXJmYWNlM19TZXRDb2xvcktleSwKIAkodm9pZCopMzEsCiAJSURpcmVjdERyYXdTdXJmYWNlM19TZXRQYWxldHRlLAogCURHQV9JRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaywKQEAgLTE1MzUsMzYgKzkwMiwzNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZSB4c2htX2RkczN2dCA9IHsKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZFJlZiwKIAlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZSwKLQkodm9pZCopNCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZEF0dGFjaGVkU3VyZmFjZSwKIAkodm9pZCopNSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdCwKLQkodm9pZCopNywKLQkodm9pZCopOCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdEJhdGNoLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfQmx0RmFzdCwKIAkodm9pZCopOSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0VudW1BdHRhY2hlZFN1cmZhY2VzLAogCSh2b2lkKikxMSwKIAlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCwKLQlYU2htX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAogCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0Qmx0U3RhdHVzLAotCSh2b2lkKikxNSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldENhcHMsCiAJKHZvaWQqKTE2LAogCSh2b2lkKikxNywKLQkodm9pZCopMTgsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXREQywKIAkodm9pZCopMTksCi0JKHZvaWQqKTIwLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0T3ZlcmxheVBvc2l0aW9uLAogCSh2b2lkKikyMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldFBpeGVsRm9ybWF0LAotCSh2b2lkKikyMywKLQkodm9pZCopMjQsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXRTdXJmYWNlRGVzYywKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0luaXRpYWxpemUsCiAJSURpcmVjdERyYXdTdXJmYWNlM19Jc0xvc3QsCiAJSURpcmVjdERyYXdTdXJmYWNlM19Mb2NrLAotCSh2b2lkKikyNywKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2VEQywKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX1Jlc3RvcmUsCiAJSURpcmVjdERyYXdTdXJmYWNlM19TZXRDbGlwcGVyLAotCSh2b2lkKikzMCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX1NldENvbG9yS2V5LAogCSh2b2lkKikzMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX1NldFBhbGV0dGUsCiAJWFNobV9JRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaywKQEAgLTE1NzgsMzYgKzk0NSwzNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2UzX1ZUYWJsZSB4bGliX2RkczN2dCA9IHsKLQlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfUXVlcnlJbnRlcmZhY2UsCisJSURpcmVjdERyYXdTdXJmYWNlM19RdWVyeUludGVyZmFjZSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZFJlZiwKIAlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfUmVsZWFzZSwKLQkodm9pZCopNCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0FkZEF0dGFjaGVkU3VyZmFjZSwKIAkodm9pZCopNSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdCwKLQkodm9pZCopNywKLQkodm9pZCopOCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0JsdEJhdGNoLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfQmx0RmFzdCwKIAkodm9pZCopOSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0VudW1BdHRhY2hlZFN1cmZhY2VzLAogCSh2b2lkKikxMSwKIAlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfRmxpcCwKLQlYbGliX0lEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0QXR0YWNoZWRTdXJmYWNlLAogCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0Qmx0U3RhdHVzLAotCSh2b2lkKikxNSwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldENhcHMsCiAJKHZvaWQqKTE2LAogCSh2b2lkKikxNywKLQkodm9pZCopMTgsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXREQywKIAkodm9pZCopMTksCi0JKHZvaWQqKTIwLAorCUlEaXJlY3REcmF3U3VyZmFjZTNfR2V0T3ZlcmxheVBvc2l0aW9uLAogCSh2b2lkKikyMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX0dldFBpeGVsRm9ybWF0LAotCSh2b2lkKikyMywKLQkodm9pZCopMjQsCisJSURpcmVjdERyYXdTdXJmYWNlM19HZXRTdXJmYWNlRGVzYywKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX0luaXRpYWxpemUsCiAJSURpcmVjdERyYXdTdXJmYWNlM19Jc0xvc3QsCiAJSURpcmVjdERyYXdTdXJmYWNlM19Mb2NrLAotCSh2b2lkKikyNywKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX1JlbGVhc2VEQywKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX1Jlc3RvcmUsCiAJSURpcmVjdERyYXdTdXJmYWNlM19TZXRDbGlwcGVyLAotCSh2b2lkKikzMCwKKwlJRGlyZWN0RHJhd1N1cmZhY2UzX1NldENvbG9yS2V5LAogCSh2b2lkKikzMSwKIAlJRGlyZWN0RHJhd1N1cmZhY2UzX1NldFBhbGV0dGUsCiAJWGxpYl9JRGlyZWN0RHJhd1N1cmZhY2UzX1VubG9jaywKQEAgLTE2NDYsNiArMTAxMywxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSURpcmVjdERyYXdDbGlwcGVyX1NldENsaXBMaXN0KAorCUxQRElSRUNURFJBV0NMSVBQRVIgdGhpcyxMUFJHTkRBVEEgbHByZ24sRFdPUkQgaG1tCispIHsKKwlGSVhNRShkZHJhdywiKCVwLCVwLCVsZCksc3R1YiFcbiIsdGhpcyxscHJnbixobW0pOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3Q2xpcHBlcl9WVGFibGUgZGRjbGlwdnQgPSB7CiAJKHZvaWQqKTEsCiAJKHZvaWQqKTIsCkBAIC0xNjU0LDcgKzEwMjgsNyBAQAogCSh2b2lkKik1LAogCSh2b2lkKik2LAogCSh2b2lkKik3LAotCSh2b2lkKik4LAorCUlEaXJlY3REcmF3Q2xpcHBlcl9TZXRDbGlwTGlzdCwKIAlJRGlyZWN0RHJhd0NsaXBwZXJfU2V0SHduZAogfTsKIApAQCAtMTY2OCw3ICsxMDQyLDcgQEAKIAlpbnQJaTsKIAogCWlmICghdGhpcy0+Y20pIC8qIHNob3VsZCBub3QgaGFwcGVuICovIHsKLQkJVFJBQ0UoZGRyYXcsImFwcCB0cmllZCB0byByZWFkIGNvbG9ybWFwIGZvciBub24tcGFsZXR0aXplZCBtb2RlXG4iKTsKKwkJRklYTUUoZGRyYXcsImFwcCB0cmllZCB0byByZWFkIGNvbG9ybWFwIGZvciBub24tcGFsZXR0aXplZCBtb2RlXG4iKTsKIAkJcmV0dXJuIERERVJSX0dFTkVSSUM7CiAJfQogCWZvciAoaT1zdGFydDtpPGVuZDtpKyspIHsKQEAgLTE2OTEsMTEgKzEwNjUsMTEgQEAKIAkJdGhpcyx4LHN0YXJ0LGVuZCxwYWxlbnQKIAkpOwogCWlmICghdGhpcy0+Y20pIC8qIHNob3VsZCBub3QgaGFwcGVuICovIHsKLQkJVFJBQ0UoZGRyYXcsImFwcCB0cmllZCB0byBzZXQgY29sb3JtYXAgaW4gbm9uLXBhbGV0dGl6ZWQgbW9kZVxuIik7CisJCUZJWE1FKGRkcmF3LCJhcHAgdHJpZWQgdG8gc2V0IGNvbG9ybWFwIGluIG5vbi1wYWxldHRpemVkIG1vZGVcbiIpOwogCQlyZXR1cm4gRERFUlJfR0VORVJJQzsKIAl9CiAJLyogRklYTUU6IGZyZWUgY29sb3JjZWxscyBpbnN0ZWFkIG9mIGZyZWVpbmcgd2hvbGUgbWFwICovCi0JdGhpcy0+Y20gPSBUU1hDb3B5Q29sb3JtYXBBbmRGcmVlKGRpc3BsYXksdGhpcy0+Y20pOworCS8qdGhpcy0+Y20gPSBUU1hDb3B5Q29sb3JtYXBBbmRGcmVlKGRpc3BsYXksdGhpcy0+Y20pOyovCiAJZm9yIChpPXN0YXJ0O2k8ZW5kO2krKykgewogCQl4Yy5yZWQgPSBwYWxlbnRbaS1zdGFydF0ucGVSZWQ8PDg7CiAJCXhjLmJsdWUgPSBwYWxlbnRbaS1zdGFydF0ucGVCbHVlPDw4OwpAQCAtMTcxNywyMyArMTA5MSwxMyBAQAogCUhSRVNVTFQgaHJlczsKIAlocmVzID0gY29tbW9uX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzKHRoaXMseCxzdGFydCxlbmQscGFsZW50KTsKIAlpZiAoaHJlcyAhPSAwKSByZXR1cm4gaHJlczsKLQlYRjg2REdBSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSx0aGlzLT5jbSk7CisJVFNYRjg2REdBSW5zdGFsbENvbG9ybWFwKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSx0aGlzLT5jbSk7CiAJcmV0dXJuIDA7CiAjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCiAJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCiB9CiAKLXN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYbGliX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzKAotCUxQRElSRUNURFJBV1BBTEVUVEUgdGhpcyxEV09SRCB4LERXT1JEIHN0YXJ0LERXT1JEIGVuZCxMUFBBTEVUVEVFTlRSWSBwYWxlbnQKLSkgewotCUhSRVNVTFQgaHJlczsKLQlocmVzID0gY29tbW9uX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzKHRoaXMseCxzdGFydCxlbmQscGFsZW50KTsKLQlpZiAoaHJlcyAhPSAwKSByZXR1cm4gaHJlczsKLQlUU1hJbnN0YWxsQ29sb3JtYXAoZGlzcGxheSx0aGlzLT5jbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBVTE9ORyBXSU5BUEkgSURpcmVjdERyYXdQYWxldHRlX1JlbGVhc2UoTFBESVJFQ1REUkFXUEFMRVRURSB0aGlzKSB7CiAJaWYgKCEtLSh0aGlzLT5yZWYpKSB7CiAJCWlmICh0aGlzLT5jbSkgewpAQCAtMTc3Myw3ICsxMTM3LDcgQEAKIAkodm9pZCopNCwKIAlJRGlyZWN0RHJhd1BhbGV0dGVfR2V0RW50cmllcywKIAlJRGlyZWN0RHJhd1BhbGV0dGVfSW5pdGlhbGl6ZSwKLQlYbGliX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCisJY29tbW9uX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCiB9OwogCiBzdGF0aWMgc3RydWN0IElEaXJlY3REcmF3UGFsZXR0ZV9WVGFibGUgeGxpYl9kZHBhbHZ0ID0gewpAQCAtMTc4Myw3ICsxMTQ3LDcgQEAKIAkodm9pZCopNCwKIAlJRGlyZWN0RHJhd1BhbGV0dGVfR2V0RW50cmllcywKIAlJRGlyZWN0RHJhd1BhbGV0dGVfSW5pdGlhbGl6ZSwKLQlYbGliX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCisJY29tbW9uX0lEaXJlY3REcmF3UGFsZXR0ZV9TZXRFbnRyaWVzCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg1MCw4ICsxMjE0LDcgQEAKICNpZmRlZiBIQVZFX0xJQlhYRjg2REdBCiAJaW50CWk7CiAKLQlUUkFDRShkZHJhdywgIiglcCktPiglcCwlcCwlcClcbiIsCi0JCSAgICAgdGhpcyxscGRkc2QsbHBkc2YsbHB1bmspOworCVRSQUNFKGRkcmF3LCAiKCVwKS0+KCVwLCVwLCVwKVxuIix0aGlzLGxwZGRzZCxscGRzZixscHVuayk7CiAJaWYgKFRSQUNFX09OKGRkcmF3KSkgewogCQlEVU1QKCJbdz0lbGQsaD0lbGQsZmxhZ3MgIixscGRkc2QtPmR3V2lkdGgsbHBkZHNkLT5kd0hlaWdodCk7CiAJCV9kdW1wX0REU0QobHBkZHNkLT5kd0ZsYWdzKTsKQEAgLTE4NjMsMTQgKzEyMjYsMTQgQEAKIAkqbHBkc2YgPSAoTFBESVJFQ1REUkFXU1VSRkFDRSlIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSxIRUFQX1pFUk9fTUVNT1JZLHNpemVvZihJRGlyZWN0RHJhd1N1cmZhY2UpKTsKIAl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOwogCSgqbHBkc2YpLT5yZWYgPSAxOwotCSgqbHBkc2YpLT5scHZ0YmwgPSAmZGdhX2Rkc3Z0OworCSgqbHBkc2YpLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJmRnYV9kZHMzdnQ7CiAJaWYgKAkobHBkZHNkLT5kd0ZsYWdzICYgRERTRF9DQVBTKSAmJiAKIAkJKGxwZGRzZC0+ZGRzQ2Fwcy5kd0NhcHMgJiBERFNDQVBTX09GRlNDUkVFTlBMQUlOKQogCSkgewogCQlpZiAoIShscGRkc2QtPmR3RmxhZ3MgJiBERFNEX1dJRFRIKSkKIAkJCWxwZGRzZC0+ZHdXaWR0aCA9IHRoaXMtPmUuZGdhLmZiX3dpZHRoOwogCQlpZiAoIShscGRkc2QtPmR3RmxhZ3MgJiBERFNEX0hFSUdIVCkpCi0JCQlscGRkc2QtPmR3V2lkdGggPSB0aGlzLT5lLmRnYS5mYl9oZWlnaHQ7CisJCQlscGRkc2QtPmR3SGVpZ2h0ID0gdGhpcy0+ZS5kZ2EuZmJfaGVpZ2h0OwogCQkoKmxwZHNmKS0+cy5zdXJmYWNlID0gKExQQllURSlIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwZGRzZC0+ZHdXaWR0aCpscGRkc2QtPmR3SGVpZ2h0KnRoaXMtPmQuZGVwdGgvOCk7CiAJCSgqbHBkc2YpLT50LmRnYS5mYl9oZWlnaHQgPSAtMTsKIAkJKCpscGRzZiktPnMubHBpdGNoID0gbHBkZHNkLT5kd1dpZHRoKnRoaXMtPmQuZGVwdGgvODsKQEAgLTE4OTQsMTUgKzEyNTcsMTUgQEAKIAkoKmxwZHNmKS0+cy5kZHJhdyA9IHRoaXM7CiAJKCpscGRzZiktPnMuYmFja2J1ZmZlciA9IE5VTEw7CiAJaWYgKGxwZGRzZC0+ZHdGbGFncyAmIEREU0RfQkFDS0JVRkZFUkNPVU5UKSB7Ci0JCUxQRElSRUNURFJBV1NVUkZBQ0UJYmFjazsKKwkJTFBESVJFQ1REUkFXU1VSRkFDRTMJYmFjazsKIAogCQlpZiAobHBkZHNkLT5kd0JhY2tCdWZmZXJDb3VudD4xKQogCQkJRklYTUUoZGRyYXcsInVya3MsIHdhbnRzIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBiYWNrYnVmZmVyICglbGQpIVxuIixscGRkc2QtPmR3QmFja0J1ZmZlckNvdW50KTsKIAotCQkoKmxwZHNmKS0+cy5iYWNrYnVmZmVyID0gYmFjayA9IChMUERJUkVDVERSQVdTVVJGQUNFKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3U3VyZmFjZSkpOworCQkoKmxwZHNmKS0+cy5iYWNrYnVmZmVyID0gYmFjayA9IChMUERJUkVDVERSQVdTVVJGQUNFMylIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSxIRUFQX1pFUk9fTUVNT1JZLHNpemVvZihJRGlyZWN0RHJhd1N1cmZhY2UzKSk7CiAJCXRoaXMtPmxwdnRibC0+Zm5BZGRSZWYodGhpcyk7CiAJCWJhY2stPnJlZiA9IDE7Ci0JCWJhY2stPmxwdnRibCA9ICZkZ2FfZGRzdnQ7CisJCWJhY2stPmxwdnRibCA9IChMUERJUkVDVERSQVdTVVJGQUNFM19WVEFCTEUpJmRnYV9kZHMzdnQ7CiAJCWZvciAoaT0wO2k8MzI7aSsrKQogCQkJaWYgKCEodGhpcy0+ZS5kZ2EudnBtYXNrICYgKDE8PGkpKSkKIAkJCQlicmVhazsKQEAgLTE5MzEsOCArMTI5NCw3IEBACiAjaWZkZWYgSEFWRV9MSUJYWFNITQogCVhJbWFnZSAqaW1nOwogCWludCBzaG1pZDsKLQlUUkFDRShkZHJhdywgIiglcCktPkNyZWF0ZVN1cmZhY2UoJXAsJXAsJXApXG4iLAotCQkgICAgIHRoaXMsbHBkZHNkLGxwZHNmLGxwdW5rKTsKKwlUUkFDRShkZHJhdywiKCVwKS0+Q3JlYXRlU3VyZmFjZSglcCwlcCwlcClcbiIsdGhpcyxscGRkc2QsbHBkc2YsbHB1bmspOwogCWlmIChUUkFDRV9PTihkZHJhdykpIHsKIAkJZnByaW50ZihzdGRlcnIsIlt3PSVsZCxoPSVsZCxmbGFncyAiLGxwZGRzZC0+ZHdXaWR0aCxscGRkc2QtPmR3SGVpZ2h0KTsKIAkJX2R1bXBfRERTRChscGRkc2QtPmR3RmxhZ3MpOwpAQCAtMTk0NSw3ICsxMzA3LDcgQEAKIAkqbHBkc2YgPSAoTFBESVJFQ1REUkFXU1VSRkFDRSlIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSxIRUFQX1pFUk9fTUVNT1JZLHNpemVvZihJRGlyZWN0RHJhd1N1cmZhY2UpKTsKIAl0aGlzLT5scHZ0YmwtPmZuQWRkUmVmKHRoaXMpOwogCSgqbHBkc2YpLT5yZWYgPSAxOwotCSgqbHBkc2YpLT5scHZ0YmwgPSAmeHNobV9kZHN2dDsKKwkoKmxwZHNmKS0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0VfVlRBQkxFKSZ4c2htX2RkczN2dDsKIAkoKmxwZHNmKS0+dC54c2htLmltYWdlID0gaW1nID0KIAkJWFNobUNyZWF0ZUltYWdlKGRpc3BsYXksIC8qRklYTUU6dmlzdWFsKi8wLCAvKkZJWE1FOmRlcHRoKi84LCBaUGl4bWFwLAogCQkJCQkJTlVMTCwgJigqbHBkc2YpLT50LnhzaG0uc2htaW5mbywKQEAgLTE5NTMsOSArMTMxNSw4IEBACiAJKCpscGRzZiktPnQueHNobS5zaG1pbmZvLnNobWlkID0gc2htaWQgPQogCQlzaG1nZXQoSVBDX1BSSVZBVEUsIGltZy0+Ynl0ZXNfcGVyX2xpbmUqaW1nLT5oZWlnaHQsIElQQ19DUkVBVHwwNzc3KTsKIAkoKmxwZHNmKS0+dC54c2htLnNobWluZm8uc2htYWRkciA9IGltZy0+ZGF0YSA9IHNobWF0KHNobWlkLCAwLCAwKTsKLQlYU2htQXR0YWNoKGRpc3BsYXksICYoKmxwZHNmKS0+dC54c2htLnNobWluZm8pOworCVRTWFNobUF0dGFjaChkaXNwbGF5LCAmKCpscGRzZiktPnQueHNobS5zaG1pbmZvKTsKIAkvKiBQT09MRSBGSVhNRTogWFNobTogdGhpcyB3aWxsIGVhc2lseSBicmVhayAqLwotCSgqbHBkc2YpLT50LnhzaG0uc3VyZmFjZV9pc19pbWFnZV9kYXRhID0gVFJVRTsKIAkoKmxwZHNmKS0+cy5zdXJmYWNlID0gaW1nLT5kYXRhOwogCS8qIEVORCBGSVhNRTogWFNobSAqLwogCSgqbHBkc2YpLT5zLmxwaXRjaCA9IGltZy0+Ynl0ZXNfcGVyX2xpbmU7CkBAIC0xOTg2LDIxICsxMzQ3LDc0IEBACiAJKmxwZHNmID0gKExQRElSRUNURFJBV1NVUkZBQ0UpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXdTdXJmYWNlKSk7CiAJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKIAkoKmxwZHNmKS0+cmVmID0gMTsKLQkoKmxwZHNmKS0+bHB2dGJsID0gJnhsaWJfZGRzdnQ7Ci0JVFJBQ0UoZGRyYXcsInVzaW5nIHN0YW5kYXJkIFhJbWFnZSBmb3IgYSBwcmltYXJ5IHN1cmZhY2VcbiIpOwotCS8qIFBPT0xFIEZJWE1FOiBYbGliOiB0aGlzIHdpbGwgZWFzaWx5IGJyZWFrICovCi0JKCpscGRzZiktPnQueHNobS5zdXJmYWNlX2lzX2ltYWdlX2RhdGEgPSBUUlVFOwotCSgqbHBkc2YpLT5zLnN1cmZhY2UgPSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSxIRUFQX1pFUk9fTUVNT1JZLDY0MCo0ODApOwotCSgqbHBkc2YpLT50LnhsaWIuaW1hZ2UgPSBpbWcgPQotCQlYQ3JlYXRlSW1hZ2UoZGlzcGxheSwgLypGSVhNRTp2aXN1YWwqLzAsIC8qRklYTUU6IGRlcHRoKi84LCBaUGl4bWFwLAotCQkJCQkgMCwgKCpscGRzZiktPnMuc3VyZmFjZSwKLQkJCQkJIC8qRklYTUU6d2lkdGgqLzY0MCwgLypGSVhNRTpoZWlnaHQqLzQ4MCwgMCwgNjQwKjEpOwotCS8qIEVORCBGSVhNRTogWGxpYiAqLwotCSgqbHBkc2YpLT5zLmxwaXRjaCA9IGltZy0+Ynl0ZXNfcGVyX2xpbmU7Ci0JKCpscGRzZiktPnMud2lkdGggPSBpbWctPndpZHRoOwotCSgqbHBkc2YpLT5zLmhlaWdodCA9IGltZy0+aGVpZ2h0OworCSgqbHBkc2YpLT5scHZ0YmwgPSAoTFBESVJFQ1REUkFXU1VSRkFDRV9WVEFCTEUpJnhsaWJfZGRzM3Z0OworCWlmICgJKGxwZGRzZC0+ZHdGbGFncyAmIEREU0RfQ0FQUykgJiYgCisJCShscGRkc2QtPmRkc0NhcHMuZHdDYXBzICYgRERTQ0FQU19PRkZTQ1JFRU5QTEFJTikKKwkpIHsKKwkJaWYgKCEobHBkZHNkLT5kd0ZsYWdzICYgRERTRF9XSURUSCkpCisJCQlscGRkc2QtPmR3V2lkdGggPSB0aGlzLT5lLmRnYS5mYl93aWR0aDsKKwkJaWYgKCEobHBkZHNkLT5kd0ZsYWdzICYgRERTRF9IRUlHSFQpKQorCQkJbHBkZHNkLT5kd0hlaWdodCA9IHRoaXMtPmUuZGdhLmZiX2hlaWdodDsKKwkJKCpscGRzZiktPnMuc3VyZmFjZSA9IChMUEJZVEUpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxscGRkc2QtPmR3V2lkdGgqbHBkZHNkLT5kd0hlaWdodCp0aGlzLT5kLmRlcHRoLzgpOworCQlUUkFDRShkZHJhdywidXNpbmcgc3lzdGVtIG1lbW9yeSBmb3IgYSBwcmltYXJ5IHN1cmZhY2VcbiIpOworCX0gZWxzZSB7CisJCVRSQUNFKGRkcmF3LCJ1c2luZyBzdGFuZGFyZCBYSW1hZ2UgZm9yIGEgcHJpbWFyeSBzdXJmYWNlXG4iKTsKKwkJCS8qIEZJWE1FOiAhOCBiaXQgaW1hZ2VzICovCisJCSgqbHBkc2YpLT5zLnN1cmZhY2UgPSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSxIRUFQX1pFUk9fTUVNT1JZLGxwZGRzZC0+ZHdIZWlnaHQqbHBkZHNkLT5kd1dpZHRoKTsKKwkJKCpscGRzZiktPnMud2lkdGggPSB0aGlzLT5kLndpZHRoOworCQkoKmxwZHNmKS0+cy5oZWlnaHQgPSB0aGlzLT5kLmhlaWdodDsKKwl9CiAJKCpscGRzZiktPnMuZGRyYXcgPSB0aGlzOwotCSgqbHBkc2YpLT5zLmJhY2tidWZmZXIgPSBOVUxMOworCSgqbHBkc2YpLT50LnhsaWIuaW1hZ2UgPSBpbWcgPQorCQlUU1hDcmVhdGVJbWFnZSgJZGlzcGxheSwKKwkJCQlEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oc2NyZWVuKSwKKwkJCQkvKkZJWE1FOiBkZXB0aCovOCwKKwkJCQlaUGl4bWFwLAorCQkJCTAsCisJCQkJKCpscGRzZiktPnMuc3VyZmFjZSwKKwkJCQkoKmxwZHNmKS0+cy53aWR0aCwKKwkJCQkoKmxwZHNmKS0+cy5oZWlnaHQsCisJCQkJMzIsCisJCQkJKCpscGRzZiktPnMud2lkdGgqMQorCQkvKiBGSVhNRTogITggYml0IGltYWdlcyAqLworCQkpOworCQkvKiBFTkQgRklYTUU6IFhsaWIgKi8KKwkoKmxwZHNmKS0+cy5scGl0Y2ggPSBpbWctPmJ5dGVzX3Blcl9saW5lOworCWFzc2VydChpbWcpOworCWlmIChscGRkc2QtPmR3RmxhZ3MgJiBERFNEX0JBQ0tCVUZGRVJDT1VOVCkgeworCQlMUERJUkVDVERSQVdTVVJGQUNFMwliYWNrOworCisJCWlmIChscGRkc2QtPmR3QmFja0J1ZmZlckNvdW50PjEpCisJCQlGSVhNRShkZHJhdywidXJrcywgd2FudHMgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGJhY2tidWZmZXIgKCVsZCkhXG4iLGxwZGRzZC0+ZHdCYWNrQnVmZmVyQ291bnQpOworCisJCSgqbHBkc2YpLT5zLmJhY2tidWZmZXIgPSBiYWNrID0gKExQRElSRUNURFJBV1NVUkZBQ0UzKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3U3VyZmFjZTMpKTsKKwkJdGhpcy0+bHB2dGJsLT5mbkFkZFJlZih0aGlzKTsKKwkJYmFjay0+cmVmID0gMTsKKwkJYmFjay0+bHB2dGJsID0gKExQRElSRUNURFJBV1NVUkZBQ0UzX1ZUQUJMRSkmeGxpYl9kZHMzdnQ7CisJCS8qIEZJWE1FOiAhOCBiaXQgaW1hZ2VzICovCisJCWJhY2stPnMuc3VyZmFjZSA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksCisJCQlpbWctPndpZHRoKmltZy0+aGVpZ2h0CisJCSk7CisJCWJhY2stPnQueGxpYi5pbWFnZSA9IFRTWENyZWF0ZUltYWdlKAorCQkJZGlzcGxheSwKKwkJCURlZmF1bHRWaXN1YWxPZlNjcmVlbihzY3JlZW4pLAorCQkJLypGSVhNRTogZGVwdGgqLzgsCisJCQlaUGl4bWFwLAorCQkJMCwKKwkJCWJhY2stPnMuc3VyZmFjZSwKKwkJCXRoaXMtPmQud2lkdGgsCisJCQl0aGlzLT5kLmhlaWdodCwKKwkJCTMyLAorCQkJdGhpcy0+ZC53aWR0aCoxCisJCQkvKiBGSVhNRTogITggYml0IGltYWdlcyAqLworCQkpOworCQliYWNrLT5zLndpZHRoID0gdGhpcy0+ZC53aWR0aDsKKwkJYmFjay0+cy5oZWlnaHQgPSB0aGlzLT5kLmhlaWdodDsKKwkJYmFjay0+cy5kZHJhdyA9IHRoaXM7CisJCWJhY2stPnMubHBpdGNoID0gYmFjay0+dC54bGliLmltYWdlLT5ieXRlc19wZXJfbGluZTsKKwkJYmFjay0+cy5iYWNrYnVmZmVyID0gTlVMTDsgLyogZG9lcyBub3QgaGF2ZSBhIGJhY2tidWZmZXIsIGl0IGlzCisJCQkJCSAgICAqIG9uZSEgKi8KKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNTIsOCArMTQ2Niw3IEBACiAjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCWludAlpLCpkZXB0aHMsZGVwY291bnQ7CiAKLQlUUkFDRShkZHJhdywgIiglcCktPiglbGQsJWxkLCVsZClcbiIsCi0JCSAgICAgIHRoaXMsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKwlUUkFDRShkZHJhdywgIiglcCktPiglbGQsJWxkLCVsZClcbiIsIHRoaXMsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKIAogCWRlcHRocyA9IFRTWExpc3REZXB0aHMoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLCZkZXBjb3VudCk7CiAJZm9yIChpPTA7aTxkZXBjb3VudDtpKyspCkBAIC0yMDY0LDggKzE0NzcsOCBAQAogCQlFUlIoZGRyYXcsIih3PSVsZCxoPSVsZCxkPSVsZCksIHVuc3VwcG9ydGVkIGRlcHRoIVxuIix3aWR0aCxoZWlnaHQsZGVwdGgpOwogCQlyZXR1cm4gRERFUlJfVU5TVVBQT1JURURNT0RFOwogCX0KLQlpZiAodGhpcy0+ZS5kZ2EuZmJfd2lkdGggPCB3aWR0aCkgewotCQlFUlIoZGRyYXcsIlNldERpc3BsYXlNb2RlKHc9JWxkLGg9JWxkLGQ9JWxkKSwgd2lkdGggJWxkIGV4Y2VlZHMgZnJhbWVidWZmZXIgd2lkdGggJWxkXG4iLHdpZHRoLGhlaWdodCxkZXB0aCx3aWR0aCx0aGlzLT5lLmRnYS5mYl93aWR0aCk7CisJaWYgKHRoaXMtPmQud2lkdGggPCB3aWR0aCkgeworCQlFUlIoZGRyYXcsIlNldERpc3BsYXlNb2RlKHc9JWxkLGg9JWxkLGQ9JWxkKSwgd2lkdGggJWxkIGV4Y2VlZHMgZnJhbWVidWZmZXIgd2lkdGggJWxkXG4iLHdpZHRoLGhlaWdodCxkZXB0aCx3aWR0aCx0aGlzLT5kLndpZHRoKTsKIAkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKIAl9CiAJdGhpcy0+ZC53aWR0aAk9IHdpZHRoOwpAQCAtMjA3OSw5ICsxNDkyLDkgQEAKIAkgKiBjYW4gd2Ugc2F2ZSB0aGVtPyBhbmQgcmVzdG9yZSB0aGVtIGxhdGVyPyBJbiBhIHdheSB0aGF0CiAJICogaXQgd29ya3MgZm9yIHRoZSBsaWJyYXJ5IHRvbz8KIAkgKi8KLQlYRjg2REdBRGlyZWN0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLFhGODZER0FEaXJlY3RHcmFwaGljcyk7CisJVFNYRjg2REdBRGlyZWN0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLFhGODZER0FEaXJlY3RHcmFwaGljcyk7CiAvKgotCVhGODZER0FTZXRWaWV3UG9ydChkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksMCx0aGlzLT5kLmZiX2hlaWdodCk7CisJVFNYRjg2REdBU2V0Vmlld1BvcnQoZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDAsdGhpcy0+ZC5mYl9oZWlnaHQpOwogICovCiAKICNpZmRlZiBSRVNUT1JFX1NJR05BTFMKQEAgLTIwODksNyArMTUwMiw3IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKICNlbHNlIC8qIGRlZmluZWQoSEFWRV9MSUJYWEY4NkRHQSkgKi8KLQlyZXR1cm4gRV9VTkVYUEVDVEVECisJcmV0dXJuIEVfVU5FWFBFQ1RFRDsKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCiB9CiAKQEAgLTIxMTMsOSArMTUyNiw4IEBACiAJCU1lc3NhZ2VCb3gzMkEoMCxidWYsIldJTkUgRGlyZWN0RHJhdyIsTUJfT0t8TUJfSUNPTlNUT1ApOwogCQlyZXR1cm4gRERFUlJfVU5TVVBQT1JURURNT0RFOwogCX0KLQkvKiBQT09MRSBGSVhNRTogWFNobSAqLwotCWlmICh0aGlzLT5lLmRnYS5mYl93aWR0aCA8IHdpZHRoKSB7Ci0JCXNwcmludGYoYnVmLCJTZXREaXNwbGF5TW9kZSh3PSVsZCxoPSVsZCxkPSVsZCksIHdpZHRoICVsZCBleGNlZWRzIGZyYW1lYnVmZmVyIHdpZHRoICVsZCIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmUuZGdhLmZiX3dpZHRoKTsKKwlpZiAodGhpcy0+ZC53aWR0aCA8IHdpZHRoKSB7CisJCXNwcmludGYoYnVmLCJTZXREaXNwbGF5TW9kZSh3PSVsZCxoPSVsZCxkPSVsZCksIHdpZHRoICVsZCBleGNlZWRzIGZyYW1lYnVmZmVyIHdpZHRoICVsZCIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmQud2lkdGgpOwogCQlNZXNzYWdlQm94MzJBKDAsYnVmLCJXSU5FIERpcmVjdERyYXciLE1CX09LfE1CX0lDT05TVE9QKTsKIAkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKIAl9CkBAIC0yMTUxLDE5ICsxNTYzLDM0IEBACiAJCU1lc3NhZ2VCb3gzMkEoMCxidWYsIldJTkUgRGlyZWN0RHJhdyIsTUJfT0t8TUJfSUNPTlNUT1ApOwogCQlyZXR1cm4gRERFUlJfVU5TVVBQT1JURURNT0RFOwogCX0KLQkvKiBQT09MRSBGSVhNRTogWGxpYiAqLwotCWlmICh0aGlzLT5lLmRnYS5mYl93aWR0aCA8IHdpZHRoKSB7Ci0JCXNwcmludGYoYnVmLCJTZXREaXNwbGF5TW9kZSh3PSVsZCxoPSVsZCxkPSVsZCksIHdpZHRoICVsZCBleGNlZWRzIGZyYW1lYnVmZmVyIHdpZHRoICVsZCIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmUuZGdhLmZiX3dpZHRoKTsKKwlpZiAodGhpcy0+ZC53aWR0aCA8IHdpZHRoKSB7CisJCXNwcmludGYoYnVmLCJTZXREaXNwbGF5TW9kZSh3PSVsZCxoPSVsZCxkPSVsZCksIHdpZHRoICVsZCBleGNlZWRzIGZyYW1lYnVmZmVyIHdpZHRoICVsZCIsd2lkdGgsaGVpZ2h0LGRlcHRoLHdpZHRoLHRoaXMtPmQud2lkdGgpOwogCQlNZXNzYWdlQm94MzJBKDAsYnVmLCJXSU5FIERpcmVjdERyYXciLE1CX09LfE1CX0lDT05TVE9QKTsKIAkJcmV0dXJuIERERVJSX1VOU1VQUE9SVEVETU9ERTsKIAl9CisJdGhpcy0+ZS54bGliLndpbmRvdyA9IENyZWF0ZVdpbmRvd0V4MzJBKAorCQkwLAorCQkiV0lORV9EaXJlY3REcmF3IiwKKwkJIldJTkVfRGlyZWN0RHJhdyIsCisJCVdTX1ZJU0lCTEV8V1NfU1lTTUVOVXxXU19USElDS0ZSQU1FLAorCQkwLDAsCisJCXdpZHRoLAorCQloZWlnaHQsCisJCTAsCisJCTAsCisJCTAsCisJCU5VTEwKKwkpOworCVNob3dXaW5kb3czMih0aGlzLT5lLnhsaWIud2luZG93LFRSVUUpOworCVVwZGF0ZVdpbmRvdzMyKHRoaXMtPmUueGxpYi53aW5kb3cpOworCWFzc2VydCh0aGlzLT5lLnhsaWIud2luZG93KTsKKwl0aGlzLT5lLnhsaWIuZHJhd2FibGUgPSBXSU5fRmluZFduZFB0cih0aGlzLT5lLnhsaWIud2luZG93KS0+d2luZG93OwogCXRoaXMtPmQud2lkdGgJPSB3aWR0aDsKIAl0aGlzLT5kLmhlaWdodAk9IGhlaWdodDsKIAkvKiBhZGp1c3QgZmJfaGVpZ2h0LCBzbyB3ZSBkb24ndCBvdmVybGFwICovCiAJaWYgKHRoaXMtPmUuZGdhLmZiX2hlaWdodCA8IGhlaWdodCkKIAkJdGhpcy0+ZS5kZ2EuZmJfaGVpZ2h0ID0gaGVpZ2h0OwogCXRoaXMtPmQuZGVwdGgJPSBkZXB0aDsKLQkvKiBFTkQgRklYTUU6IFhsaWIgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0Myw2ICsxNjcwLDcgQEAKIAlpZiAoKmxwZGRwYWwgPT0gTlVMTCkgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CiAJKCpscGRkcGFsKS0+cmVmID0gMTsKIAkoKmxwZGRwYWwpLT5kZHJhdyA9IHRoaXM7CisJKCpscGRkcGFsKS0+aW5zdGFsbGVkID0gMDsKIAlpZiAodGhpcy0+ZC5kZXB0aDw9OCkgewogCQkoKmxwZGRwYWwpLT5jbSA9IFRTWENyZWF0ZUNvbG9ybWFwKGRpc3BsYXksRGVmYXVsdFJvb3RXaW5kb3coZGlzcGxheSksRGVmYXVsdFZpc3VhbE9mU2NyZWVuKHNjcmVlbiksQWxsb2NBbGwpOwogCX0gZWxzZSB7CkBAIC0yMjY5LDkgKzE2OTcsNyBAQAogCUxQRElSRUNURFJBVyB0aGlzLERXT1JEIHgsTFBQQUxFVFRFRU5UUlkgcGFsZW50LExQRElSRUNURFJBV1BBTEVUVEUgKmxwZGRwYWwsTFBVTktOT1dOIGxwdW5rCiApIHsKIAlIUkVTVUxUIHJlczsKLQlUUkFDRShkZHJhdywiKCVwKS0+KCUwOGx4LCVwLCVwLCVwKVxuIiwKLQkJdGhpcyx4LHBhbGVudCxscGRkcGFsLGxwdW5rCi0JKTsKKwlUUkFDRShkZHJhdywiKCVwKS0+KCUwOGx4LCVwLCVwLCVwKVxuIix0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmspOwogCXJlcyA9IGNvbW1vbl9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKHRoaXMseCxwYWxlbnQsbHBkZHBhbCxscHVuayk7CiAJaWYgKHJlcyAhPSAwKSByZXR1cm4gcmVzOwogCSgqbHBkZHBhbCktPmxwdnRibCA9ICZ4c2htX2RkcGFsdnQ7CkBAIC0yMjgxLDIyICsxNzA3LDI4IEBACiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd19DcmVhdGVQYWxldHRlKAogCUxQRElSRUNURFJBVyB0aGlzLERXT1JEIHgsTFBQQUxFVFRFRU5UUlkgcGFsZW50LExQRElSRUNURFJBV1BBTEVUVEUgKmxwZGRwYWwsTFBVTktOT1dOIGxwdW5rCiApIHsKLQlIUkVTVUxUIHJlczsKLQlUUkFDRShkZHJhdywiKCVwKS0+KCUwOGx4LCVwLCVwLCVwKVxuIiwKLQkJdGhpcyx4LHBhbGVudCxscGRkcGFsLGxwdW5rCi0JKTsKLQlyZXMgPSBjb21tb25fSURpcmVjdERyYXdfQ3JlYXRlUGFsZXR0ZSh0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmspOwotCWlmIChyZXMgIT0gMCkgcmV0dXJuIHJlczsKKwlUUkFDRShkZHJhdywiKCVwKS0+KCUwOGx4LCVwLCVwLCVwKVxuIix0aGlzLHgscGFsZW50LGxwZGRwYWwsbHB1bmspOworCSpscGRkcGFsID0gKExQRElSRUNURFJBV1BBTEVUVEUpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXdQYWxldHRlKSk7CisJaWYgKCpscGRkcGFsID09IE5VTEwpIHJldHVybiBFX09VVE9GTUVNT1JZOworCSgqbHBkZHBhbCktPnJlZiA9IDE7CisJKCpscGRkcGFsKS0+aW5zdGFsbGVkID0gMDsKKwkoKmxwZGRwYWwpLT5kZHJhdyA9IHRoaXM7CisJaWYgKHRoaXMtPmQuZGVwdGg8PTgpIHsKKwkJKCpscGRkcGFsKS0+Y20gPSBUU1hDcmVhdGVDb2xvcm1hcChkaXNwbGF5LHRoaXMtPmUueGxpYi5kcmF3YWJsZSxEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oc2NyZWVuKSxBbGxvY0FsbCk7CisJCVRTWEluc3RhbGxDb2xvcm1hcChkaXNwbGF5LCgqbHBkZHBhbCktPmNtKTsKKwkJVFNYU2V0V2luZG93Q29sb3JtYXAoZGlzcGxheSx0aGlzLT5lLnhsaWIuZHJhd2FibGUsKCpscGRkcGFsKS0+Y20pOworCX0gZWxzZQorCQkvKiB3ZSBkb24ndCB3YW50IHBhbGV0dGVzIGluIGhpY29sb3Igb3IgdHJ1ZWNvbG9yICovCisJCSgqbHBkZHBhbCktPmNtID0gMDsKIAkoKmxwZGRwYWwpLT5scHZ0YmwgPSAmeGxpYl9kZHBhbHZ0OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgREdBX0lEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZShMUERJUkVDVERSQVcgdGhpcykgewogI2lmZGVmIEhBVkVfTElCWFhGODZER0EKLQlUUkFDRShkZHJhdywgIiglcCktPigpXG4iLCAKLQkJICAgICAgdGhpcyk7CisJVFJBQ0UoZGRyYXcsICIoJXApLT4oKVxuIix0aGlzKTsKIAlTbGVlcCgxMDAwKTsKLQlYRjg2REdBRGlyZWN0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDApOworCVRTWEY4NkRHQURpcmVjdFZpZGVvKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwwKTsKICNpZmRlZiBSRVNUT1JFX1NJR05BTFMKIAlTSUdOQUxfSW5pdEVtdWxhdG9yKCk7CiAjZW5kaWYKQEAgLTIzMDgsOCArMTc0MCw3IEBACiAKIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBYU2htX0lEaXJlY3REcmF3X1Jlc3RvcmVEaXNwbGF5TW9kZShMUERJUkVDVERSQVcgdGhpcykgewogI2lmZGVmIEhBVkVfTElCWFhGODZER0EKLQlUUkFDRShkZHJhdywgIiglcCktPlJlc3RvcmVEaXNwbGF5TW9kZSgpXG4iLCAKLQkJICAgICAgdGhpcyk7CisJVFJBQ0UoZGRyYXcsICIoJXApLT5SZXN0b3JlRGlzcGxheU1vZGUoKVxuIiwgdGhpcyk7CiAJU2xlZXAoMTAwMCk7CiAJcmV0dXJuIDA7CiAjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhGODZER0EpICovCkBAIC0yMzE4LDggKzE3NDksNyBAQAogfQogCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgWGxpYl9JRGlyZWN0RHJhd19SZXN0b3JlRGlzcGxheU1vZGUoTFBESVJFQ1REUkFXIHRoaXMpIHsKLQlUUkFDRShkZHJhdywgIiglcCktPlJlc3RvcmVEaXNwbGF5TW9kZSgpXG4iLCAKLQkJICAgICAgdGhpcyk7CisJVFJBQ0UoZGRyYXcsICIoJXApLT5SZXN0b3JlRGlzcGxheU1vZGUoKVxuIiwgdGhpcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMzcsNyArMTc2Nyw3IEBACiBzdGF0aWMgVUxPTkcgV0lOQVBJIERHQV9JRGlyZWN0RHJhd19SZWxlYXNlKExQRElSRUNURFJBVyB0aGlzKSB7CiAjaWZkZWYgSEFWRV9MSUJYWEY4NkRHQQogCWlmICghLS0odGhpcy0+cmVmKSkgewotCQlYRjg2REdBRGlyZWN0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLDApOworCQlUU1hGODZER0FEaXJlY3RWaWRlbyhkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksMCk7CiAjaWZkZWYgUkVTVE9SRV9TSUdOQUxTCiAJCVNJR05BTF9Jbml0RW11bGF0b3IoKTsKICNlbmRpZgpAQCAtMzAyMCwyMiArMjQ1MCwyMyBAQAogCSpscGxwREQgPSAoTFBESVJFQ1REUkFXKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3KSk7CiAJKCpscGxwREQpLT5scHZ0YmwgPSAmZGdhX2RkdnQ7CiAJKCpscGxwREQpLT5yZWYgPSAxOwotCVhGODZER0FRdWVyeVZlcnNpb24oZGlzcGxheSwmbWFqb3IsJm1pbm9yKTsKKwlUU1hGODZER0FRdWVyeVZlcnNpb24oZGlzcGxheSwmbWFqb3IsJm1pbm9yKTsKIAlUUkFDRShkZHJhdywiWEY4NkRHQSBpcyB2ZXJzaW9uICVkLiVkXG4iLG1ham9yLG1pbm9yKTsKLQlYRjg2REdBUXVlcnlEaXJlY3RWaWRlbyhkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksJmZsYWdzKTsKKwlUU1hGODZER0FRdWVyeURpcmVjdFZpZGVvKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwmZmxhZ3MpOwogCWlmICghKGZsYWdzICYgWEY4NkRHQURpcmVjdFByZXNlbnQpKQotCQlNU0coImRpcmVjdCB2aWRlbyBpcyBOT1QgRU5BQkxFRC5cbiIpOwotCVhGODZER0FHZXRWaWRlbyhkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksJmFkZHIsJndpZHRoLCZiYW5rc2l6ZSwmbWVtc2l6ZSk7CisJCU1TRygiZGlyZWN0IHZpZGVvIGlzIE5PVCBQUkVTRU5ULlxuIik7CisJVFNYRjg2REdBR2V0VmlkZW8oZGlzcGxheSxEZWZhdWx0U2NyZWVuKGRpc3BsYXkpLCZhZGRyLCZ3aWR0aCwmYmFua3NpemUsJm1lbXNpemUpOwogCVRSQUNFKGRkcmF3LCJ2aWRlbyBmcmFtZWJ1ZmZlcjogYmVnaW4gJXAsIHdpZHRoICVkLGJhbmtzaXplICVkLG1lbXNpemUgJWRcbiIsCiAJCWFkZHIsd2lkdGgsYmFua3NpemUsbWVtc2l6ZQogCSk7CiAJKCpscGxwREQpLT5lLmRnYS5mYl93aWR0aCA9IHdpZHRoOworCSgqbHBscEREKS0+ZC53aWR0aCA9IHdpZHRoOwogCSgqbHBscEREKS0+ZS5kZ2EuZmJfYWRkciA9IGFkZHI7CiAJKCpscGxwREQpLT5lLmRnYS5mYl9tZW1zaXplID0gbWVtc2l6ZTsKIAkoKmxwbHBERCktPmUuZGdhLmZiX2JhbmtzaXplID0gYmFua3NpemU7CiAKLQlYRjg2REdBR2V0Vmlld1BvcnRTaXplKGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwmd2lkdGgsJmhlaWdodCk7Ci0JWEY4NkRHQVNldFZpZXdQb3J0KGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwwLDApOworCVRTWEY4NkRHQUdldFZpZXdQb3J0U2l6ZShkaXNwbGF5LERlZmF1bHRTY3JlZW4oZGlzcGxheSksJndpZHRoLCZoZWlnaHQpOworCVRTWEY4NkRHQVNldFZpZXdQb3J0KGRpc3BsYXksRGVmYXVsdFNjcmVlbihkaXNwbGF5KSwwLDApOwogCSgqbHBscEREKS0+ZS5kZ2EuZmJfaGVpZ2h0ID0gc2NyZWVuSGVpZ2h0OwogCSgqbHBscEREKS0+ZS5kZ2EudnBtYXNrID0gMDsKIApAQCAtMzA1OSw1NCArMjQ5MCw3NyBAQAogCSpscGxwREQgPSAoTFBESVJFQ1REUkFXKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksc2l6ZW9mKElEaXJlY3REcmF3KSk7CiAJKCpscGxwREQpLT5scHZ0YmwgPSAmeHNobV9kZHZ0OwogCSgqbHBscEREKS0+cmVmID0gMTsKLQkoKmxwbHBERCktPmUueHNobS5kcmF3YWJsZSA9IDA7IC8qIEZJWE1FOiBtYWtlIGEgd2luZG93ICovCisJKCpscGxwREQpLT5lLnhzaG0uZHJhd2FibGUgPSBEZWZhdWx0Um9vdFdpbmRvdyhkaXNwbGF5KTsgLyogRklYTUU6IG1ha2UgYSB3aW5kb3cgKi8KIAkoKmxwbHBERCktPmQuZGVwdGggPSBEZWZhdWx0RGVwdGhPZlNjcmVlbihzY3JlZW4pOwotCSgqbHBscEREKS0+ZC5oZWlnaHQgPSAoKmxwbHBERCktPmQud2lkdGggPSAwOyAvKiBGSVhNRSAqLworCSgqbHBscEREKS0+ZC5oZWlnaHQgPSBzY3JlZW5IZWlnaHQ7CisJKCpscGxwREQpLT5kLndpZHRoID0gc2NyZWVuV2lkdGg7CiAJcmV0dXJuIDA7CiAjZWxzZSAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCiAJcmV0dXJuIERERVJSX0lOVkFMSURESVJFQ1REUkFXR1VJRDsKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTElCWFhTSE0pICovCiB9CitMUkVTVUxUIFdJTkFQSSBYbGliX0REV25kUHJvYyhIV05EMzIgaHduZCxVSU5UMzIgbXNnLFdQQVJBTTMyIHdQYXJhbSxMUEFSQU0gbFBhcmFtKSB7CisJTFJFU1VMVAlyZXQ7CisJLypGSVhNRShkZHJhdywiKDB4JTA0eCwlcywweCUwOGx4LDB4JTA4bHgpLHN0dWIhXG4iLChpbnQpaHduZCxTUFlfR2V0TXNnTmFtZShtc2cpLChsb25nKXdQYXJhbSwobG9uZylsUGFyYW0pOyAqLworCXJldCA9IERlZldpbmRvd1Byb2MzMkEoaHduZCxtc2csd1BhcmFtLGxQYXJhbSk7CisJcmV0dXJuIHJldDsKK30KIAogSFJFU1VMVCBXSU5BUEkgWGxpYl9EaXJlY3REcmF3Q3JlYXRlKCBMUERJUkVDVERSQVcgKmxwbHBERCwgTFBVTktOT1dOIHBVbmtPdXRlcikgeworCVdORENMQVNTMzJBCXdjOworCiAJKmxwbHBERCA9IChMUERJUkVDVERSQVcpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSxzaXplb2YoSURpcmVjdERyYXcpKTsKIAkoKmxwbHBERCktPmxwdnRibCA9ICZ4bGliX2RkdnQ7CiAJKCpscGxwREQpLT5yZWYgPSAxOwotCSgqbHBscEREKS0+ZS54c2htLmRyYXdhYmxlID0gMDsgLyogRklYTUU6IG1ha2UgYSB3aW5kb3cgKi8KKwkoKmxwbHBERCktPmUueGxpYi5kcmF3YWJsZSA9IDA7IC8qIGluIFNldERpc3BsYXlNb2RlICovCisJd2Muc3R5bGUJPSBDU19HTE9CQUxDTEFTUzsKKwl3Yy5scGZuV25kUHJvYwk9IFhsaWJfRERXbmRQcm9jOworCXdjLmNiQ2xzRXh0cmEJPSAwOworCXdjLmNiV25kRXh0cmEJPSAwOworCXdjLmhJbnN0YW5jZQk9IDA7CisJd2MuaEljb24JPSAwOworCXdjLmhDdXJzb3IJPSAoSENVUlNPUjMyKUlEQ19BUlJPVzMyQTsKKwl3Yy5oYnJCYWNrZ3JvdW5kPSBOVUxMX0JSVVNIOworCXdjLmxwc3pNZW51TmFtZQk9IDA7CisJd2MubHBzekNsYXNzTmFtZT0gIldJTkVfRGlyZWN0RHJhdyI7CisKKwkoKmxwbHBERCktPmUueGxpYi53aW5jbGFzcyA9IFJlZ2lzdGVyQ2xhc3MzMkEoJndjKTsKKwogCSgqbHBscEREKS0+ZC5kZXB0aCA9IERlZmF1bHREZXB0aE9mU2NyZWVuKHNjcmVlbik7Ci0JKCpscGxwREQpLT5kLmhlaWdodCA9ICgqbHBscEREKS0+ZC53aWR0aCA9IDA7IC8qIEZJWE1FICovCisJKCpscGxwREQpLT5kLmhlaWdodCA9IHNjcmVlbkhlaWdodDsKKwkoKmxwbHBERCktPmQud2lkdGggPSBzY3JlZW5XaWR0aDsKIAlyZXR1cm4gMDsKIH0KIAogSFJFU1VMVCBXSU5BUEkgRGlyZWN0RHJhd0NyZWF0ZSggTFBHVUlEIGxwR1VJRCwgTFBESVJFQ1REUkFXICpscGxwREQsIExQVU5LTk9XTiBwVW5rT3V0ZXIgKSB7CiAJY2hhcgl4Y2xzaWRbNTBdOwogCi0JaWYgKGxwR1VJRCkKKwlpZiAoSElXT1JEKGxwR1VJRCkpCiAJCVdJTkVfU3RyaW5nRnJvbUNMU0lEKGxwR1VJRCx4Y2xzaWQpOwotCWVsc2UKLQkJc3RyY3B5KHhjbHNpZCwiPG51bGw+Iik7CisJZWxzZSB7CisJCXNwcmludGYoeGNsc2lkLCI8Z3VpZC0lMHgwOHg+IiwoaW50KWxwR1VJRCk7CisJCWxwR1VJRCA9IE5VTEw7CisJfQogCiAJVFJBQ0UoZGRyYXcsIiglcywlcCwlcClcbiIseGNsc2lkLGxwbHBERCxwVW5rT3V0ZXIpOwogCiAJaWYgKCFscEdVSUQpIHsKIAkJLyogaWYgdGhleSBkaWRuJ3QgcmVxdWVzdCBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLCB1c2UgdGhlIGJlc3QKIAkJICogc3VwcG9ydGVkIG9uZSAqLwotCQlpZiAoRERSQVdfREdBX0F2YWlsYWJsZSgpKSB7CisJCWlmIChERFJBV19ER0FfQXZhaWxhYmxlKCkpCiAJCQlscEdVSUQgPSAmREdBX0RpcmVjdERyYXdfR1VJRDsKLQkJfSBlbHNlIGlmIChERFJBV19YU2htX0F2YWlsYWJsZSgpKSB7CisJCWVsc2UgaWYgKEREUkFXX1hTaG1fQXZhaWxhYmxlKCkpCiAJCQlscEdVSUQgPSAmWFNITV9EaXJlY3REcmF3X0dVSUQ7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWxwR1VJRCA9ICZYTElCX0RpcmVjdERyYXdfR1VJRDsKLQkJfQogCX0KIAotCWlmICghbWVtY21wKGxwR1VJRCwgJkRHQV9EaXJlY3REcmF3X0dVSUQsIHNpemVvZihHVUlEKSkpIHsKKwlpZiAoIW1lbWNtcChscEdVSUQsICZER0FfRGlyZWN0RHJhd19HVUlELCBzaXplb2YoR1VJRCkpKQogCQlyZXR1cm4gREdBX0RpcmVjdERyYXdDcmVhdGUobHBscERELCBwVW5rT3V0ZXIpOwotCX0gZWxzZSBpZiAoIW1lbWNtcChscEdVSUQsICZYU0hNX0RpcmVjdERyYXdfR1VJRCwgc2l6ZW9mKEdVSUQpKSkgeworCWVsc2UgaWYgKCFtZW1jbXAobHBHVUlELCAmWFNITV9EaXJlY3REcmF3X0dVSUQsIHNpemVvZihHVUlEKSkpCiAJCXJldHVybiBYU2htX0RpcmVjdERyYXdDcmVhdGUobHBscERELCBwVW5rT3V0ZXIpOwotCX0gZWxzZSBpZiAoIW1lbWNtcChscEdVSUQsICZYTElCX0RpcmVjdERyYXdfR1VJRCwgc2l6ZW9mKEdVSUQpKSkgeworCWVsc2UgaWYgKCFtZW1jbXAobHBHVUlELCAmWExJQl9EaXJlY3REcmF3X0dVSUQsIHNpemVvZihHVUlEKSkpCiAJCXJldHVybiBYbGliX0RpcmVjdERyYXdDcmVhdGUobHBscERELCBwVW5rT3V0ZXIpOwotCX0KIAogCWZwcmludGYoc3RkZXJyLCJEaXJlY3REcmF3Q3JlYXRlKCVzLCVwLCVwKTogZGlkIG5vdCByZWNvZ25pemUgcmVxdWVzdGVkIEdVSURcbiIseGNsc2lkLGxwbHBERCxwVW5rT3V0ZXIpOwogCXJldHVybiBEREVSUl9JTlZBTElERElSRUNURFJBV0dVSUQ7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9wYWludGluZy5jIGIvZ3JhcGhpY3MvcGFpbnRpbmcuYwppbmRleCA2NTllOWU4Li42Nzk3ZmNjIDEwMDY0NAotLS0gYS9ncmFwaGljcy9wYWludGluZy5jCisrKyBiL2dyYXBoaWNzL3BhaW50aW5nLmMKQEAgLTExMDQsOCArMTEwNCw4IEBACiAgICAgaWYoIWRjKSByZXR1cm4gRkFMU0U7CiAgICAgaWYoZGMgJiYgUEFUSF9Jc1BhdGhPcGVuKGRjLT53LnBhdGgpKQogICAgICAgICBGSVhNRShnZGksICJQQVRIX1BvbHlCZXppZXIgaXMgbm90IGltcGxlbWVudGVkIVxuIik7Ci0vLyAgICAgICAgaWYoIVBBVEhfUG9seUJlemllcihoZGMsIHgsIHkpKQotLy8JICAgcmV0dXJuIEZBTFNFOworLyogICAgICAgIGlmKCFQQVRIX1BvbHlCZXppZXIoaGRjLCB4LCB5KSkKKwkgICByZXR1cm4gRkFMU0U7ICovCiAgICAgcmV0dXJuIGRjLT5mdW5jcy0+cFBvbHlCZXppZXImJgogICAgIAkgICBkYy0+ZnVuY3MtPnBQb2x5QmV6aWVyKGRjLCBscHB0WzBdLCBscHB0KzEsIGNQb2ludHMtMSk7CiB9CkBAIC0xMTMxLDggKzExMzEsOCBAQAogICAgIHB0Lnk9ZGMtPncuQ3Vyc1Bvc1k7CiAgICAgaWYoZGMgJiYgUEFUSF9Jc1BhdGhPcGVuKGRjLT53LnBhdGgpKQogICAgICAgICBGSVhNRShnZGksICJQQVRIX1BvbHlCZXppZXJUbyBpcyBub3QgaW1wbGVtZW50ZWQhXG4iKTsKLS8vICAgICAgICBpZighUEFUSF9Qb2x5QmV6aWVyKGhkYywgeCwgeSkpCi0vLwkgICByZXR1cm4gRkFMU0U7CisvKiAgICAgICAgaWYoIVBBVEhfUG9seUJlemllcihoZGMsIHgsIHkpKQorCSAgIHJldHVybiBGQUxTRTsgKi8KICAgICByZXQ9IGRjLT5mdW5jcy0+cFBvbHlCZXppZXIgJiYKICAgICAJICAgZGMtPmZ1bmNzLT5wUG9seUJlemllcihkYywgcHQsIGxwcHQsIGNQb2ludHMpOwogICAgIGlmKCBkYy0+ZnVuY3MtPnBNb3ZlVG9FeCkKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3BhdGguYyBiL2dyYXBoaWNzL3BhdGguYwppbmRleCBiNjhkMjg2Li45ZmQyM2NhIDEwMDY0NAotLS0gYS9ncmFwaGljcy9wYXRoLmMKKysrIGIvZ3JhcGhpY3MvcGF0aC5jCkBAIC0xOTksOSArMTk5LDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENsb3NlRmlndXJlMzIgICAgKEdESTMyLjE2KQorICoKKyAqIEZJWE1FOiBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5IAogICovCiBCT09MMzIgV0lOQVBJIENsb3NlRmlndXJlMzIoSERDMzIgaGRjKQotLyogRklYTUU6IENoZWNrIHRoYXQgU2V0TGFzdEVycm9yIGlzIGJlaW5nIGNhbGxlZCBjb3JyZWN0bHkgKi8KIHsKICAgIEdkaVBhdGggKnBQYXRoOwogICAgCkBAIC0yOTMsMTIgKzI5NCwxNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBQYXRoVG9SZWdpb24zMiAgICAoR0RJMzIuMjYxKQotICovCi1IUkdOMzIgV0lOQVBJIFBhdGhUb1JlZ2lvbjMyKEhEQzMyIGhkYykKLS8qIEZJWE1FOiBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5ICovCi0vKiBUaGUgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzdGF0ZSB0aGlzIGV4cGxpY2l0bHksIGJ1dCBhIHRlc3QgdW5kZXIgV2luZG93cworICoKKyAqIEZJWE1FIAorICogICBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5IAorICoKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHN0YXRlIHRoaXMgZXhwbGljaXRseSwgYnV0IGEgdGVzdCB1bmRlciBXaW5kb3dzCiAgKiBzaG93cyB0aGF0IHRoZSByZWdpb24gd2hpY2ggaXMgcmV0dXJuZWQgc2hvdWxkIGJlIGluIGRldmljZSBjb29yZGluYXRlcy4KICAqLworSFJHTjMyIFdJTkFQSSBQYXRoVG9SZWdpb24zMihIREMzMiBoZGMpCiB7CiAgICBHZGlQYXRoICpwUGF0aDsKICAgIEhSR04zMiAgaHJnblJ2YWw7CkBAIC0zMjksOSArMzMyLDExIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEZpbGxQYXRoMzIgICAgKEdESTMyLjEwMCkKKyAqCisgKiBGSVhNRQorICogICAgQ2hlY2sgdGhhdCBTZXRMYXN0RXJyb3IgaXMgYmVpbmcgY2FsbGVkIGNvcnJlY3RseSAKICAqLwogQk9PTDMyIFdJTkFQSSBGaWxsUGF0aDMyKEhEQzMyIGhkYykKLS8qIEZJWE1FOiBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5ICovCiB7CiAgICBHZGlQYXRoICpwUGF0aDsKICAgIElOVDMyICAgbWFwTW9kZSwgZ3JhcGhpY3NNb2RlOwpAQCAtNDEzLDkgKzQxOCwxMCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBTZWxlY3RDbGlwUGF0aDMyICAgIChHREkzMi4yOTYpCisgKiBGSVhNRSAKKyAqICBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5IAogICovCiBCT09MMzIgV0lOQVBJIFNlbGVjdENsaXBQYXRoMzIoSERDMzIgaGRjLCBJTlQzMiBpTW9kZSkKLS8qIEZJWE1FOiBDaGVjayB0aGF0IFNldExhc3RFcnJvciBpcyBiZWluZyBjYWxsZWQgY29ycmVjdGx5ICovCiB7CiAgICBHZGlQYXRoICpwUGF0aDsKICAgIEhSR04zMiAgaHJnblBhdGgsIGhyZ25DbGlwOwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jIGIvZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jCmluZGV4IDEwZGJmNjUuLmUwZjk2OTkgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuYworKysgYi9ncmFwaGljcy93aW4xNmRydi9pbml0LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgIGlmIChsc3RyY21waTMyQShwcmludGVyRW5hYmxlZCwib24iKSkKICAgICB7CiAgICAgICAgIE1TRygiUHJpbnRpbmcgZGlzYWJsZWQgaW4gd2luZS5jb25mIG9yIC53aW5lcmMgZmlsZVxuIik7Ci0gICAgICAgIE1TRygiVXNlIFwicHJpbnRlcj1vblwiIGluIHRoZSBcIlt3aW5lXVwiIHNlY3Rpb24gdG8gZW5hYmxlIGl0LiIpOworICAgICAgICBNU0coIlVzZSBcInByaW50ZXI9b25cIiBpbiB0aGUgXCJbd2luZV1cIiBzZWN0aW9uIHRvIGVuYWJsZSBpdC5cbiIpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmFwaGljcy93aW5nLmMgYi9ncmFwaGljcy93aW5nLmMKaW5kZXggZjZkZmZhMS4uYTY4Y2FjZiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3Mvd2luZy5jCisrKyBiL2dyYXBoaWNzL3dpbmcuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCXsKIAkJICAgIFdPUkQJc2VsID0gMDsKIAotCQkgICAgWFNobUF0dGFjaChkaXNwbGF5LCAmcC0+c2kpOworCQkgICAgVFNYU2htQXR0YWNoKGRpc3BsYXksICZwLT5zaSk7CiAJCSAgICBibXBPYmpQdHItPnBpeG1hcCA9IFhTaG1DcmVhdGVQaXhtYXAoZGlzcGxheSwgcm9vdFdpbmRvdywgCiAJCQkJICBwLT5zaS5zaG1hZGRyLCAmcC0+c2ksIGJtcE9ialB0ci0+Yml0bWFwLmJtV2lkdGgsIAogCQkJCSAgYm1wT2JqUHRyLT5iaXRtYXAuYm1IZWlnaHQsIGJtcGktPmJpQml0Q291bnQgKTsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKaW5kZXggMGYzODVhZC4uZWYxY2YxYyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmMKQEAgLTkyMCw3ICs5MjAsNyBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8qKioqKioqKioqKioqKioqKiogV0FSTklORzogV09SSyBJTiBQUk9HUkVTUyBBSEVBRCAhISEhICoqKioqKioqKioqKioqKioKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIAogICogICAqVmVyeSogc2ltcGxlIGJlemllciBkcmF3aW5nIGNvZGUsIAogICoKQEAgLTkzOCw4MiArOTM4LDcxIEBACiAgICogdG8gYXZvaWQgdHJ1Y2F0aW9uIGVycm9ycyB0aGUgY29vcmRpbmF0ZXMgYXJlCiAgICogc2hpZnRlZCB1cHdhcmRzLiBXaGVuIHVzZWQgaW4gZHJhd2luZyB0aGV5IGFyZQogICAqIHNoaWZ0ZWQgZG93biBhZ2FpbiwgaW5jbHVkaW5nIGNvcnJlY3Qgcm91bmRpbmcKLSAgKiBhbmQgYXZvaWRpbmcgZmxvYXRpbmcgcG9pbnRzCisgICogYW5kIGF2b2lkaW5nIGZsb2F0aW5nIHBvaW50IGFyaXRobWF0aWMKKyAgKiA0IGJpdHMgc2hvdWxkIGFsbG93IDI3IGJpdHMgY29vcmRpbmF0ZXMgd2hpY2ggSSBzYXcKKyAgKiBzb21ld2VyZSBpbiB0aGUgd2luMzIgZG9jJ3MKKyAgKiAKICAgKi8KIAogI2RlZmluZSBCRVpJRVJTSElGVEJJVFMgNAogI2RlZmluZSBCRVpJRVJTSElGVFVQKHgpICAgICgoeCk8PEJFWklFUlNISUZUQklUUykKLSNkZWZpbmUgQkVaSUVSRkFDVE9SICAgICAgICBCRVpJRVJTSElGVFVQKDEpICAgIAorI2RlZmluZSBCRVpJRVJQSVhFTCAgICAgICAgQkVaSUVSU0hJRlRVUCgxKSAgICAKICNkZWZpbmUgQkVaSUVSU0hJRlRET1dOKHgpICAoKCh4KSsoMTw8KEJFWklFUlNISUZUQklUUy0xKSkpPj5CRVpJRVJTSElGVEJJVFMpCiAvKiBtYXhpbXVtIGRlcHRoIG9mIHJlY3Vyc2lvbiAqLwotI2RlZmluZSBCRVpJRVJNQVhERVBUSCAgNgorI2RlZmluZSBCRVpJRVJNQVhERVBUSCAgOAogCiAvKiBzaXplIG9mIGFycmF5IHRvIHN0b3JlIHBvaW50cyBvbiAqLwogLyogZW5vdWdoIGZvciBvbmUgY3VydmUgKi8KLSNkZWZpbmUgQkVaTUFYUE9JTlRTICAgICgoMTw8QkVaSUVSTUFYREVQVEgpKzEpCisjZGVmaW5lIEJFWk1BWFBPSU5UUyAgICAoMTUwKQogCi0vKiBjYWxjdWxhdGUgQmV6aWVyIGF2ZXJhZ2UsIGluIHRoaXMgY2FzZSB0aGUgbWlkZGxlICovCisvKiBjYWxjdWxhdGUgQmV6aWVyIGF2ZXJhZ2UsIGluIHRoaXMgY2FzZSB0aGUgbWlkZGxlIAorICogY29ycmVjdGx5IHJvdW5kZWQuLi4KKyAqICovCiAKICNkZWZpbmUgQkVaSUVSTUlERExFKE1pZCwgUDEsIFAyKSBcCi0gICAgKE1pZCkueD0oKFAxKS54KyhQMikueCkvMjtcCi0gICAgKE1pZCkueT0oKFAxKS55KyhQMikueSkvMjsKKyAgICAoTWlkKS54PSgoUDEpLngrKFAyKS54ICsgMSkvMjtcCisgICAgKE1pZCkueT0oKFAxKS55KyhQMikueSArIDEpLzI7CiAgICAgCi0vKiBjaGVjayB0byB0ZXJtaW5hdGUgcmVjdXJzaW9uICovCi1zdGF0aWMgaW50IEJlemllckNoZWNrKCBpbnQgbGV2ZWwsIFBPSU5UMzIgKlBvaW50cykKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJlemllckNoZWNrIGhlbHBlciBmdW5jdGlvbiB0byBjaGVjaworKiB0aGF0IHJlY3Vyc2lvbiBjYW4gYmUgdGVybWluYXRlZAorKiAgICAgICBQb2ludHNbMF0gYW5kIFBvaW50c1szXSBhcmUgYmVnaW4gYW5kIGVuZHBvaW50CisqICAgICAgIFBvaW50c1sxXSBhbmQgUG9pbnRzWzJdIGFyZSBjb250cm9sIHBvaW50cworKiAgICAgICBsZXZlbCBpcyB0aGUgcmVjdXJzaW9uIGRlcHRoCisqICAgICAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVjdXNpb24gY2FuIGJlIHRlcm1pbmF0ZWQKKyovCitzdGF0aWMgQk9PTDMyIEJlemllckNoZWNrKCBpbnQgbGV2ZWwsIFBPSU5UMzIgKlBvaW50cykKIHsgCi0jaWYgMAotLyogdGhpcyBjb2RlIHdvcmtzLCBpdCBqdXN0IGlzIHRvbyBtdWNoIHdvcmsgZm9yCi0gKiB0aGUgc2F2aW5ncyB0aGF0IGFyZSBjcmVhdGVkLiBUaGlzIHNob3VsZCBiZSBkb25lCi0gKiB3aXRoIGludGVnZXIgYXJpdGhtZXRpYyBhbmQgc2ltcGxlci4KLSAqLwotICAgIGRvdWJsZSBoeXAsIHIxLCByMjsKLSAgICAvKiBmaXJzdCBjaGVjayB0aGF0IHRoZSBjb250cm9sIHBvaW50cyBhcmUgIm5lYXIiICovCi0gICAgaWYoUG9pbnRzWzNdLng+UG9pbnRzWzBdLngpCi0gICAgICAgIGlmKFBvaW50c1sxXS54ID4gUG9pbnRzWzNdLngrQkVaSUVSRkFDVE9SIHx8IAotICAgICAgICAgICAgICAgIFBvaW50c1sxXS54IDwgUG9pbnRzWzBdLngtQkVaSUVSRkFDVE9SIHx8Ci0gICAgICAgICAgICAgICAgUG9pbnRzWzJdLnggPiBQb2ludHNbM10ueCtCRVpJRVJGQUNUT1IgfHwgCi0gICAgICAgICAgICAgICAgUG9pbnRzWzJdLnggPCBQb2ludHNbMF0ueC1CRVpJRVJGQUNUT1IpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBlbHNlCi0gICAgICAgIGlmKFBvaW50c1sxXS54IDwgUG9pbnRzWzNdLngtQkVaSUVSRkFDVE9SIHx8IAotICAgICAgICAgICAgICAgIFBvaW50c1sxXS54ID4gUG9pbnRzWzBdLngrQkVaSUVSRkFDVE9SIHx8Ci0gICAgICAgICAgICAgICAgUG9pbnRzWzJdLnggPCBQb2ludHNbM10ueC1CRVpJRVJGQUNUT1IgfHwgCi0gICAgICAgICAgICAgICAgUG9pbnRzWzJdLnggPiBQb2ludHNbMF0ueCtCRVpJRVJGQUNUT1IpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZihQb2ludHNbM10ueT5Qb2ludHNbMF0ueSkKLSAgICAgICAgaWYoUG9pbnRzWzFdLnkgPiBQb2ludHNbM10ueStCRVpJRVJGQUNUT1IgfHwgCi0gICAgICAgICAgICAgICAgUG9pbnRzWzFdLnkgPCBQb2ludHNbMF0ueS1CRVpJRVJGQUNUT1IgfHwKLSAgICAgICAgICAgICAgICBQb2ludHNbMl0ueSA+IFBvaW50c1szXS55K0JFWklFUkZBQ1RPUiB8fCAKLSAgICAgICAgICAgICAgICBQb2ludHNbMl0ueSA8IFBvaW50c1swXS55LUJFWklFUkZBQ1RPUikKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGVsc2UKLSAgICAgICAgaWYoUG9pbnRzWzFdLnggPCBQb2ludHNbM10ueC1CRVpJRVJGQUNUT1IgfHwgCi0gICAgICAgICAgICAgICAgUG9pbnRzWzFdLnggPiBQb2ludHNbMF0ueCtCRVpJRVJGQUNUT1IgfHwKLSAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA8IFBvaW50c1szXS54LUJFWklFUkZBQ1RPUiB8fCAKLSAgICAgICAgICAgICAgICBQb2ludHNbMl0ueCA+IFBvaW50c1swXS54K0JFWklFUkZBQ1RPUikKLSAgICAgICAgcmV0dXJuIEZBTFNFO28KLSAgICAgICAgCi0gICAgLyogY2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBzcXVhcmVkIG9mIHRoZSBjb250cm9sIHBvaW50IGZyb20KLSAgICAgKiB0aGUgbGluZSBmcm9tIGJlZ2luIGFuZCBlbmRwb2ludAotICAgICAqLwotICAgICAgICAKLSAgICBoeXA9KChkb3VibGUpKFBvaW50c1szXS54LVBvaW50c1swXS54KSooZG91YmxlKShQb2ludHNbM10ueC1Qb2ludHNbMF0ueCkrCi0gICAgICAgICAgIChkb3VibGUpIChQb2ludHNbM10ueS1Qb2ludHNbMF0ueSkqKGRvdWJsZSkoUG9pbnRzWzNdLnktUG9pbnRzWzBdLnkpKTsKLSAgICByMT0oKGRvdWJsZSkoUG9pbnRzWzJdLnktUG9pbnRzWzBdLnkpKihkb3VibGUpKFBvaW50c1szXS54LVBvaW50c1swXS54KS0KLSAgICAgICAgICAgKGRvdWJsZSkgKFBvaW50c1szXS55LVBvaW50c1swXS55KSooZG91YmxlKShQb2ludHNbMl0ueC1Qb2ludHNbMF0ueCkpCi0gICAgICAgICAgIC9CRVpJRVJGQUNUT1I7Ci0gICAgcjI9KChkb3VibGUpKFBvaW50c1sxXS55LVBvaW50c1swXS55KSooZG91YmxlKShQb2ludHNbM10ueC1Qb2ludHNbMF0ueCktCi0gICAgICAgICAgICAoZG91YmxlKShQb2ludHNbM10ueS1Qb2ludHNbMF0ueSkqKGRvdWJsZSkoUG9pbnRzWzFdLngtUG9pbnRzWzBdLngpKQotICAgICAgICAgICAgL0JFWklFUkZBQ1RPUjsKLSAgICByMT1yMSpyMS9oeXA7Ci0gICAgcjE9cjIqcjIvaHlwOwotICAgIGlmKCByMTwxICYmIHIyIDwxKXsgLyogZGlzdGFuY2UgbGVzcyB0aGVuIGEgcGl4ZWwgKi8KLS8vICAgICAgICBmcHJpbnRmKHN0ZGVyciwibGV2ZWwgaXMgJWRcbiIsIGxldmVsKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgSU5UMzIgZHgsIGR5OworICAgIGR4PVBvaW50c1szXS54LVBvaW50c1swXS54OworICAgIGR5PVBvaW50c1szXS55LVBvaW50c1swXS55OworICAgIGlmKEFCUyhkeSk8QUJTKGR4KSl7Lyogc2hhbGxvdyBsaW5lICovCisgICAgICAgIC8qIGNoZWNrIHRoYXQgY29udHJvbCBwb2ludHMgYXJlIGJldHdlZW4gYmVnaW4gYW5kIGVuZCAqLworICAgICAgICBpZiggKFBvaW50c1sxXS54LVBvaW50c1swXS54KSpkeCA8IDAgfHwKKyAgICAgICAgICAgIChQb2ludHNbMl0ueC1Qb2ludHNbMF0ueCkqZHggPCAwICkgcmV0dXJuIEZBTFNFOworICAgICAgICBkeD1CRVpJRVJTSElGVERPV04oZHgpOworICAgICAgICBpZighZHgpIHJldHVybiBUUlVFOworICAgICAgICBpZihhYnMoUG9pbnRzWzFdLnktUG9pbnRzWzBdLnktKGR5L2R4KSoKKyAgICAgICAgICAgICAgICBCRVpJRVJTSElGVERPV04oUG9pbnRzWzFdLngtUG9pbnRzWzBdLngpKSA+IEJFWklFUlBJWEVMIHx8CisgICAgICAgICAgIGFicyhQb2ludHNbMl0ueS1Qb2ludHNbMF0ueS0oZHkvZHgpKgorICAgICAgICAgICAgICAgICAgIEJFWklFUlNISUZURE9XTihQb2ludHNbMl0ueC1Qb2ludHNbMF0ueCkpID4gQkVaSUVSUElYRUwgKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9ZWxzZXsgLyogc3RlZXAgbGluZSAqLworICAgICAgICAvKiBjaGVjayB0aGF0IGNvbnRyb2wgcG9pbnRzIGFyZSBiZXR3ZWVuIGJlZ2luIGFuZCBlbmQgKi8KKyAgICAgICAgaWYoIChQb2ludHNbMV0ueS1Qb2ludHNbMF0ueSkqZHkgPCAwIHx8CisgICAgICAgICAgICAoUG9pbnRzWzJdLnktUG9pbnRzWzBdLnkpKmR5IDwgMCApIHJldHVybiBGQUxTRTsKKyAgICAgICAgZHk9QkVaSUVSU0hJRlRET1dOKGR5KTsKKyAgICAgICAgaWYoIWR5KSByZXR1cm4gVFJVRTsKKyAgICAgICAgaWYoYWJzKFBvaW50c1sxXS54LVBvaW50c1swXS54LShkeC9keSkqCisgICAgICAgICAgICAgICAgQkVaSUVSU0hJRlRET1dOKFBvaW50c1sxXS55LVBvaW50c1swXS55KSkgPiBCRVpJRVJQSVhFTCB8fAorICAgICAgICAgICBhYnMoUG9pbnRzWzJdLngtUG9pbnRzWzBdLngtKGR4L2R5KSoKKyAgICAgICAgICAgICAgICAgICBCRVpJRVJTSElGVERPV04oUG9pbnRzWzJdLnktUG9pbnRzWzBdLnkpKSA+IEJFWklFUlBJWEVMICkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIEZBTFNFOwotICAgIAogfQogICAgIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDIxLDI0ICsxMDEwLDMxIEBACiAgKiAgIERyYXcgYSAtd2hhdCBtaWNyb3NvZnQgY2FsbHMtIGJlemllciBjdXJ2ZQogICogICBUaGUgcm91dGluZSByZWN1cnNpdmVseSBkZXZpZGVzIHRoZSBjdXJ2ZQogICogICBpbiB0d28gcGFydHMgdW50aWwgYSBzdHJhaWdodCBsaW5lIGNhbiBiZSBkcmF3bgorICoKKyAqICAgbGV2ZWwgICAgICByZWN1c2lvbiBkZXB0aCBjb3VudGVkIGJhY2t3YXJkcworICogICBkYyAgICAgICAgIGRldmljZSBjb250ZXh0CisgKiAgIFBvaW50cyAgICAgYXJyYXkgb2YgYmVnaW4oMCksIGVuZCgzKSBhbmQgY29udHJvbCBwb2ludHMoMSBhbmQgMikKKyAqICAgWFBvaW50cyAgICBhcnJheSB3aXRoIHBvaW50cyBjYWxjdWxhdGVkIHNvZmFyCisgKiAgICpwSXggICAgICAgbnIgcG9pbnRzIGNhbGN1bGF0ZWQgc29mYXIKKyAqICAgCiAgKi8KIHN0YXRpYyB2b2lkIFgxMURSVl9CZXppZXIoaW50IGxldmVsLCBEQyAqIGRjLCBQT0lOVDMyICpQb2ludHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBYUG9pbnQqIHhwb2ludHMsIHVuc2lnbmVkIGludCogcGl4KQorICAgICAgICAgICAgICAgICAgICAgICAgICBYUG9pbnQqIHhwb2ludHMsIHVuc2lnbmVkIGludCogcEl4KQogewotICAgIGlmKCpwaXggPT0gQkVaTUFYUE9JTlRTKXsKKyAgICBpZigqcEl4ID09IEJFWk1BWFBPSU5UUyl7CiAgICAgICAgIFRTWERyYXdMaW5lcyggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKLSAgICAgICAgICAgICAgICAgICAgeHBvaW50cywgKnBpeCwgQ29vcmRNb2RlT3JpZ2luICk7Ci0gICAgICAgICpwaXg9MDsKKyAgICAgICAgICAgICAgICAgICAgeHBvaW50cywgKnBJeCwgQ29vcmRNb2RlT3JpZ2luICk7CisgICAgICAgICpwSXg9MDsKICAgICB9CiAgICAgaWYoIWxldmVsIHx8IEJlemllckNoZWNrKGxldmVsLCBQb2ludHMpKSB7Ci0gICAgICAgIGlmKCpwaXggPT0gMCl7Ci0gICAgICAgICAgICB4cG9pbnRzWypwaXhdLng9IGRjLT53LkRDT3JnWCArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueCk7Ci0gICAgICAgICAgICB4cG9pbnRzWypwaXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueSk7Ci0gICAgICAgICAgICAqcGl4PTE7CisgICAgICAgIGlmKCpwSXggPT0gMCl7CisgICAgICAgICAgICB4cG9pbnRzWypwSXhdLng9IGRjLT53LkRDT3JnWCArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueCk7CisgICAgICAgICAgICB4cG9pbnRzWypwSXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbMF0ueSk7CisgICAgICAgICAgICAqcEl4PTE7CiAgICAgICAgIH0KLSAgICAgICAgeHBvaW50c1sqcGl4XS54PSBkYy0+dy5EQ09yZ1ggKyBCRVpJRVJTSElGVERPV04oUG9pbnRzWzNdLngpOwotICAgICAgICB4cG9pbnRzWypwaXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbM10ueSk7Ci0gICAgICAgICgqcGl4KSArKzsKKyAgICAgICAgeHBvaW50c1sqcEl4XS54PSBkYy0+dy5EQ09yZ1ggKyBCRVpJRVJTSElGVERPV04oUG9pbnRzWzNdLngpOworICAgICAgICB4cG9pbnRzWypwSXhdLnk9IGRjLT53LkRDT3JnWSArIEJFWklFUlNISUZURE9XTihQb2ludHNbM10ueSk7CisgICAgICAgICgqcEl4KSArKzsKICAgICB9IGVsc2UgewogICAgICAgICBQT0lOVDMyIFBvaW50czJbNF07IC8qIGZvciB0aGUgc2Vjb25kIHJlY3Vyc2l2ZSBjYWxsICovCiAgICAgICAgIFBvaW50czJbM109UG9pbnRzWzNdOwpAQCAtMTA1Myw4ICsxMDQ5LDggQEAKICAgICAgICAgUG9pbnRzMlswXT1Qb2ludHNbM107CiAKICAgICAgICAgLyogZG8gdGhlIHR3byBoYWx2ZXMgKi8KLSAgICAgICAgWDExRFJWX0JlemllcihsZXZlbC0xLCBkYywgUG9pbnRzLCB4cG9pbnRzLCBwaXgpOwotICAgICAgICBYMTFEUlZfQmV6aWVyKGxldmVsLTEsIGRjLCBQb2ludHMyLCB4cG9pbnRzLCBwaXgpOworICAgICAgICBYMTFEUlZfQmV6aWVyKGxldmVsLTEsIGRjLCBQb2ludHMsIHhwb2ludHMsIHBJeCk7CisgICAgICAgIFgxMURSVl9CZXppZXIobGV2ZWwtMSwgZGMsIFBvaW50czIsIHhwb2ludHMsIHBJeCk7CiAgICAgfQogfQogCkBAIC0xMDgxLDkgKzEwNzcsOSBAQAogICAgICAgICAgICAgKFBvaW50cyswKS0+eCwgKFBvaW50cyswKS0+eSwgCiAgICAgICAgICAgICAoUG9pbnRzKzEpLT54LCAoUG9pbnRzKzEpLT55LCAKICAgICAgICAgICAgIChQb2ludHMrMiktPngsIChQb2ludHMrMiktPnkpOyAKLSAgICBpZighY291bnQgfHwgY291bnQgJSAzKXsKKyAgICBpZighY291bnQgfHwgY291bnQgJSAzKXsvKiBwYXJhbm9pZCAqLwogICAgICAgICBXQVJOKGdyYXBoaWNzLCIgYmFkIHZhbHVlIGZvciBjb3VudCA6ICVsZFxuIiwgY291bnQpOwotICAgICAgICByZXR1cm4gRkFMU0U7IC8qIHBhcmFub2lkICovCisgICAgICAgIHJldHVybiBGQUxTRTsgCiAgICAgfQogICAgIHhwb2ludHM9KFhQb2ludCopIHhtYWxsb2MoIHNpemVvZihYUG9pbnQpKkJFWk1BWFBPSU5UUyk7CiAgICAgUG9pbnRzWzNdLng9QkVaSUVSU0hJRlRVUChYTFBUT0RQKGRjLHN0YXJ0LngpKTsKQEAgLTExMDAsOCArMTA5Niw2IEBACiAgICAgfQogICAgIGlmKCBpeCkgVFNYRHJhd0xpbmVzKCBkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLAogICAgICAgICAgICAgICAgIHhwb2ludHMsIGl4LCBDb29yZE1vZGVPcmlnaW4gKTsKLS8vICAgIGZwcmludGYoc3RkZXJyLCIgaXggaXMgJWRcbiIsaXgpOwogICAgIGZyZWUoeHBvaW50cyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqRU5EIE9GIFdPUksgSU4gUFJPR1JFU1MgKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9ncmFwaGljcy94MTFkcnYveGZvbnQuYyBiL2dyYXBoaWNzL3gxMWRydi94Zm9udC5jCmluZGV4IGVkZWZhZjcuLjcxMjA2ODkgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi94Zm9udC5jCisrKyBiL2dyYXBoaWNzL3gxMWRydi94Zm9udC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIFhfUEZPTlRfTUFHSUMJCSgweEZBREUwMDAwKQogI2RlZmluZSBYX0ZNQ19NQUdJQwkJKDB4MDAwMENBRkUpCiAKLSNkZWZpbmUgTUFYX0ZPTlRfRkFNSUxJRVMJNjQKKyNkZWZpbmUgTUFYX0ZPTlRfRkFNSUxJRVMJMTI4CiAjZGVmaW5lIE1BWF9MRkRfTEVOR1RICQkyNTYKIAogI2RlZmluZSBSRU1PVkVfU1VCU0VUUwkJMQpAQCAtNTc1LDcgKzU3NSw3IEBACiAgICAgICAgIEF0b20gUkFXX0NBUF9IRUlHSFQgPSBUU1hJbnRlcm5BdG9tKGRpc3BsYXksICJSQVdfQ0FQX0hFSUdIVCIsIFRSVUUpOwogCWlmKFRTWEdldEZvbnRQcm9wZXJ0eSh4X2ZzLCBSQVdfQ0FQX0hFSUdIVCwgJmhlaWdodCkpCiAJICAgICpwSUwgPSBYRlQtPmFzY2VudCAtIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQzMikoaHlwb3RmKFhGVC0+YSwgWEZULT5iKSAvIDEwMDAuMCAqIGhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOVDMyKShYRlQtPnBpeGVsc2l6ZSAvIDEwMDAuMCAqIGhlaWdodCk7CiAJZWxzZQogCSAgICAqcElMID0gMDsKIAlyZXR1cm4gYkhhdmVDYXBIZWlnaHQgJiYgeF9mcy0+cGVyX2NoYXI7CkBAIC0yMDE1LDcgKzIwMTUsNyBAQAogICBYR2V0Rm9udFByb3BlcnR5KCBwZm8tPmZzLCBSQVdfQVNDRU5ULCAmUFgtPlJBV19BU0NFTlQgKTsKICAgWEdldEZvbnRQcm9wZXJ0eSggcGZvLT5mcywgUkFXX0RFU0NFTlQsICZQWC0+UkFXX0RFU0NFTlQgKTsKIAotICBQWC0+cGl4ZWxzaXplID0gaHlwb3RmKFBYLT5hLCBQWC0+Yik7CisgIFBYLT5waXhlbHNpemUgPSBoeXBvdChQWC0+YSwgUFgtPmIpOwogICBQWC0+YXNjZW50ID0gUFgtPnBpeGVsc2l6ZSAvIDEwMDAuMCAqIFBYLT5SQVdfQVNDRU5UOwogICBQWC0+ZGVzY2VudCA9IFBYLT5waXhlbHNpemUgLyAxMDAwLjAgKiBQWC0+UkFXX0RFU0NFTlQ7CiAKZGlmZiAtLWdpdCBhL2lmMTYzMi9NYWtlZmlsZS5pbiBiL2lmMTYzMi9NYWtlZmlsZS5pbgppbmRleCAzMjc1NDg3Li4zOTJiNTBhIDEwMDY0NAotLS0gYS9pZjE2MzIvTWFrZWZpbGUuaW4KKysrIGIvaWYxNjMyL01ha2VmaWxlLmluCkBAIC0yNCw2ICsyNCw3IEBACiAJb2xlMnRoay5zcGVjIFwKIAlvbGVjbGkuc3BlYyBcCiAJb2xlc3ZyLnNwZWMgXAorCXJhc2FwaTE2LnNwZWMgXAogCXNoZWxsLnNwZWMgXAogCXNvdW5kLnNwZWMgXAogCXN0b3JhZ2Uuc3BlYyBcCmRpZmYgLS1naXQgYS9pZjE2MzIvYnVpbHRpbi5jIGIvaWYxNjMyL2J1aWx0aW4uYwppbmRleCBiMzAwNzMyLi5jMjBjYTE2IDEwMDY0NAotLS0gYS9pZjE2MzIvYnVpbHRpbi5jCisrKyBiL2lmMTYzMi9idWlsdGluLmMKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiBjb25zdCBXSU4xNl9ERVNDUklQVE9SIE9MRTJfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBXSU4xNl9ERVNDUklQVE9SIE9MRUNMSV9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IFdJTjE2X0RFU0NSSVBUT1IgT0xFU1ZSX0Rlc2NyaXB0b3I7CitleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBSQVNBUEkxNl9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IFdJTjE2X0RFU0NSSVBUT1IgU0hFTExfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBXSU4xNl9ERVNDUklQVE9SIFNPVU5EX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgV0lOMTZfREVTQ1JJUFRPUiBTVE9SQUdFX0Rlc2NyaXB0b3I7CkBAIC0xMDksNiArMTEwLDcgQEAKICAgICB7ICZPTEUyX0Rlc2NyaXB0b3IsICAgICBETExfRkxBR19OT1RfVVNFRCB9LAogICAgIHsgJk9MRUNMSV9EZXNjcmlwdG9yLCAgIERMTF9GTEFHX05PVF9VU0VEIH0sCiAgICAgeyAmT0xFU1ZSX0Rlc2NyaXB0b3IsICAgRExMX0ZMQUdfTk9UX1VTRUQgfSwKKyAgICB7ICZSQVNBUEkxNl9EZXNjcmlwdG9yLCAwIH0sCiAgICAgeyAmU0hFTExfRGVzY3JpcHRvciwgICAgMCB9LAogICAgIHsgJlNPVU5EX0Rlc2NyaXB0b3IsICAgIDAgfSwKICAgICB7ICZTVE9SQUdFX0Rlc2NyaXB0b3IsICBETExfRkxBR19OT1RfVVNFRCB9LApkaWZmIC0tZ2l0IGEvaWYxNjMyL3Jhc2FwaTE2LnNwZWMgYi9pZjE2MzIvcmFzYXBpMTYuc3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRlY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvaWYxNjMyL3Jhc2FwaTE2LnNwZWMKQEAgLTAsMCArMSwxMiBAQAorbmFtZSAgICByYXNhcGkxNgordHlwZSAgICB3aW4xNgorCisjMSBzdHViCVdFUAorIzIgc3R1YglETExFTlRSWVBPSU5UCiszIHN0dWIJUk5BMTYzMl9USFVOS0RBVEExNgorNCBzdHViCVJhc0dldEVycm9yU3RyaW5nCis1IHN0dWIJUmFzRW51bUNvbm5lY3Rpb25zCis2IHN0dWIJUmFzSGFuZ1VwCis3IHN0dWIJUmFzRW51bUVudHJpZXMKKzggc3R1YglSYXNHZXRDb25uZWN0U3RhdHVzCis5IHN0dWIJUmFzRGlhbApkaWZmIC0tZ2l0IGEvaWYxNjMyL3Nub29wLmMgYi9pZjE2MzIvc25vb3AuYwppbmRleCAzOTM1OTAxLi4xZjk0NjY1IDEwMDY0NAotLS0gYS9pZjE2MzIvc25vb3AuYworKysgYi9pZjE2MzIvc25vb3AuYwpAQCAtNjAsNiArNjAsNyBAQAogCURXT1JECQlvcmRpbmFsOwogCVdPUkQJCW9yaWdTUDsKIAlXT1JECQkqYXJnczsJCS8qIHNhdmVkIGFyZ3MgYWNyb3NzIGEgc3RkY2FsbCAqLworCUJZVEUJCXNob3c7CiB9IFNOT09QMTZfUkVUVVJORU5UUlk7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NOT09QMTZfUkVUVVJORU5UUklFUyB7CkBAIC0yMTMsNiArMjE0LDggQEAKIAlTTk9PUDE2X1JFVFVSTkVOVFJJRVMJKipyZXRzID0gJmZpcnN0cmV0czsKIAlTTk9PUDE2X1JFVFVSTkVOVFJZCSpyZXQ7CiAJaW50CQlpLG1heDsKKwkvKiBmcm9tIHJlbGF5MzIvc25vb3AuYyAqLworCWV4dGVybiBpbnQgU05PT1BfU2hvd0RlYnVnbXNnU25vb3AoY29uc3QgY2hhciAqZGxsLGludCBvcmQsY29uc3QgY2hhciAqZm5hbWUpOwogCiAJd2hpbGUgKGRsbCkgewogCQlpZiAoeGNzID09IGRsbC0+ZnVuaGFuZGxlKSB7CkBAIC0yNjYsNiArMjY5LDggQEAKIAlJUF9yZWcoY29udGV4dCk9IExPV09SRChmdW4tPm9yaWdmdW4pOwogCUNTX3JlZyhjb250ZXh0KT0gSElXT1JEKGZ1bi0+b3JpZ2Z1bik7CiAKKwlyZXQtPnNob3cgPSBTTk9PUF9TaG93RGVidWdtc2dTbm9vcChkbGwtPm5hbWUsIG9yZGluYWwsIGZ1bi0+bmFtZSk7CisJaWYoIXJldC0+c2hvdykgcmV0dXJuOwogCURQUklOVEYoIkNhbGwgJXMuJWxkOiAlcygiLGRsbC0+bmFtZSxvcmRpbmFsLGZ1bi0+bmFtZSk7CiAJaWYgKGZ1bi0+bnJvZmFyZ3M+MCkgewogCQltYXggPSBmdW4tPm5yb2ZhcmdzOyBpZiAobWF4PjE2KSBtYXg9MTY7CkBAIC0yNzgsNyArMjgzLDcgQEAKIAkJcmV0LT5hcmdzID0gSGVhcEFsbG9jKFN5c3RlbUhlYXAsMCwxNipzaXplb2YoV09SRCkpOwogCQltZW1jcHkocmV0LT5hcmdzLChMUEJZVEUpKFBUUl9TRUdfT0ZGX1RPX0xJTihTU19yZWcoY29udGV4dCksU1BfcmVnKGNvbnRleHQpKSs4KSxzaXplb2YoV09SRCkqMTYpOwogCX0KLQlEUFJJTlRGKCIpIHJldD0lMDR4OiUwNHhcbiIsSElXT1JEKChEV09SRCkoKnJldHMpLT5lbnRyeVtpXS5vcmlncmV0dXJuKSxMT1dPUkQoKERXT1JEKSgqcmV0cyktPmVudHJ5W2ldLm9yaWdyZXR1cm4pKTsKKwlEUFJJTlRGKCIpIHJldD0lMDR4OiUwNHhcbiIsSElXT1JEKHJldC0+b3JpZ3JldHVybiksTE9XT1JEKHJldC0+b3JpZ3JldHVybikpOwogfQogCiB2b2lkIFdJTkFQSSBTTk9PUDE2X1JldHVybihDT05URVhUICpjb250ZXh0KSB7CkBAIC0yOTMsNyArMjk4LDkgQEAKIAkJcmV0LT5kbGwtPmZ1bnNbcmV0LT5vcmRpbmFsXS5ucm9mYXJncz0oU1BfcmVnKGNvbnRleHQpLXJldC0+b3JpZ1NQLTQpLzI7CiAJSVBfcmVnKGNvbnRleHQpID0gTE9XT1JEKHJldC0+b3JpZ3JldHVybik7CiAJQ1NfcmVnKGNvbnRleHQpID0gSElXT1JEKHJldC0+b3JpZ3JldHVybik7Ci0JaWYgKHJldC0+YXJncykgeworCWlmKCFyZXQtPnNob3cpIHsKKwkJOworCX0gZWxzZSBpZiAocmV0LT5hcmdzKSB7CiAJCWludAlpLG1heDsKIAogCQlEUFJJTlRGKCJSZXQgICVzLiVsZDogJXMoIixyZXQtPmRsbC0+bmFtZSxyZXQtPm9yZGluYWwscmV0LT5kbGwtPmZ1bnNbcmV0LT5vcmRpbmFsXS5uYW1lKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNjb25maWcuaCBiL2luY2x1ZGUvYWNjb25maWcuaAppbmRleCAxZmFkNWRhLi5mMDI4N2VhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hY2NvbmZpZy5oCkBAIC0xMiw2ICsxMiw5IEBACiAvKiBEZWZpbmUgaWYgdW5pb24gc2VtdW4gaXMgZGVmaW5lZCBpbiBzeXMvc2VtLmggKi8KICN1bmRlZiBIQVZFX1VOSU9OX1NFTVVOCiAKKy8qIERlZmluZSBpZiBzdHJ1Y3QgbXNnaGRyIGNvbnRhaW5zIG1zZ19hY2NyaWdodHMgKi8KKyN1bmRlZiBIQVZFX01TR0hEUl9BQ0NSSUdIVFMKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBYeGY4NmRnYSBsaWJyYXJ5ICgtbFh4Zjg2ZGdhKS4gICovCiAjdW5kZWYgSEFWRV9MSUJYWEY4NkRHQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1jdHJsLmggYi9pbmNsdWRlL2NvbW1jdHJsLmgKaW5kZXggMzJhNTM3Mi4uZDRlNzY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tY3RybC5oCisrKyBiL2luY2x1ZGUvY29tbWN0cmwuaApAQCAtNzEyLDEwICs3MTIsMTIgQEAKICNkZWZpbmUgVE9PTFRJUFNfQ0xBU1MzMlcgICAgICAgTCJ0b29sdGlwc19jbGFzczMyIgogI2RlZmluZSBUT09MVElQU19DTEFTUzMyQSAgICAgICAgInRvb2x0aXBzX2NsYXNzMzIiCiAjZGVmaW5lIFRPT0xUSVBTX0NMQVNTICAgICAgICAgIFdJTkVMSUJfTkFNRV9BVyhUT09MVElQU19DTEFTUykKKworI2RlZmluZSBJTkZPVElQU0laRSAgICAgICAgICAgICAxMDI0CiAgCiAjZGVmaW5lIFRUU19BTFdBWVNUSVAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgVFRTX05PUFJFRklYICAgICAgICAgICAgMHgwMgotIAorCiAjZGVmaW5lIFRURl9JRElTSFdORCAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBUVEZfQ0VOVEVSVElQICAgICAgICAgICAweDAwMDIKICNkZWZpbmUgVFRGX1JUTFJFQURJTkcgICAgICAgICAgMHgwMDA0CkBAIC03ODEsNiArNzgzLDE1IEBACiAjZGVmaW5lIFRUTV9QT1AgICAgICAgICAgICAgICAgIChXTV9VU0VSKzI4KQogI2RlZmluZSBUVE1fVVBEQVRFICAgICAgICAgICAgICAoV01fVVNFUisyOSkKIAorCisjZGVmaW5lIFRUTl9GSVJTVCAgICAgICAgICAgICAgICgwVS01MjBVKQorI2RlZmluZSBUVE5fTEFTVCAgICAgICAgICAgICAgICAoMFUtNTQ5VSkKKyNkZWZpbmUgVFROX0dFVERJU1BJTkZPQSAgICAgICAgKFRUTl9GSVJTVC0wKQorI2RlZmluZSBUVE5fR0VURElTUElORk9XICAgICAgICAoVFROX0ZJUlNULTEwKQorI2RlZmluZSBUVE5fU0hPVyAgICAgICAgICAgICAgICAoVFROX0ZJUlNULTEpCisjZGVmaW5lIFRUTl9QT1AgICAgICAgICAgICAgICAgIChUVE5fRklSU1QtMikKKworCiB0eXBlZGVmIHN0cnVjdCB0YWdUT09MSU5GT0EgewogICAgIFVJTlQzMiBjYlNpemU7CiAgICAgVUlOVDMyIHVGbGFnczsKQEAgLTc5MCw3ICs4MDEsNyBAQAogICAgIEhJTlNUQU5DRTMyIGhpbnN0OwogICAgIExQU1RSIGxwc3pUZXh0OwogICAgIExQQVJBTSBsUGFyYW07Ci19IFRPT0xJTkZPQSwgKlBUT09MSU5GT0EsICpMUFRPT0xJTkZPQTsKK30gVFRUT09MSU5GT0EsICpQVE9PTElORk9BLCAqTFBUVFRPT0xJTkZPQTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnVE9PTElORk9XIHsKICAgICBVSU5UMzIgY2JTaXplOwpAQCAtODAxLDkgKzgxMiw0MSBAQAogICAgIEhJTlNUQU5DRTMyIGhpbnN0OwogICAgIExQV1NUUiBscHN6VGV4dDsKICAgICBMUEFSQU0gbFBhcmFtOwotfSBUT09MSU5GT1csICpQVE9PTElORk9XLCAqTFBUT09MSU5GT1c7Cit9IFRUVE9PTElORk9XLCAqUFRPT0xJTkZPVywgKkxQVFRUT09MSU5GT1c7CiAKK3R5cGVkZWYgc3RydWN0IF9UVF9ISVRURVNUSU5GT0EKK3sKKyAgICBIV05EMzIgICAgICBod25kOworICAgIFBPSU5UMzIgICAgIHB0OworICAgIFRUVE9PTElORk9BIHRpOworfSBUVEhJVFRFU1RJTkZPQSwgKkxQVFRISVRURVNUSU5GT0E7CiAKK3R5cGVkZWYgc3RydWN0IF9UVF9ISVRURVNUSU5GT1cKK3sKKyAgICBIV05EMzIgICAgICBod25kOworICAgIFBPSU5UMzIgICAgIHB0OworICAgIFRUVE9PTElORk9XIHRpOworfSBUVEhJVFRFU1RJTkZPVywgKkxQVFRISVRURVNUSU5GT1c7CisKK3R5cGVkZWYgc3RydWN0IHRhZ05NVFRESVNQSU5GT0EKK3sKKyAgICBOTUhEUiBoZHI7CisgICAgTFBTVFIgbHBzelRleHQ7CisgICAgQ0hBUiAgc3pUZXh0WzgwXTsKKyAgICBISU5TVEFOQ0UzMiBoaW5zdDsKKyAgICBVSU5UMzIgICAgICB1RmxhZ3M7CisgICAgTFBBUkFNICAgICAgbFBhcmFtOworfSBOTVRURElTUElORk9BLCAqTFBOTVRURElTUElORk9BOworCit0eXBlZGVmIHN0cnVjdCB0YWdOTVRURElTUElORk9XCit7CisgICAgTk1IRFIgICAgICAgaGRyOworICAgIExQV1NUUiAgICAgIGxwc3pUZXh0OworICAgIFdDSEFSICAgICAgIHN6VGV4dFs4MF07CisgICAgSElOU1RBTkNFMzIgaGluc3Q7CisgICAgVUlOVDMyICAgICAgdUZsYWdzOworICAgIExQQVJBTSAgICAgIGxQYXJhbTsKK30gTk1UVERJU1BJTkZPVywgKkxQTk1UVERJU1BJTkZPVzsKIAogCiAKQEAgLTg2Myw2ICs5MDYsMzcgQEAKICNkZWZpbmUgV0NfUEFHRVNDUk9MTEVSMzJXICAgICAgTCJTeXNQYWdlciIKICNkZWZpbmUgV0NfUEFHRVNDUk9MTEVSICBXSU5FTElCX05BTUVfQVcoV0NfUEFHRVNDUk9MTEVSKQogCisjZGVmaW5lIFBHU19WRVJUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUEdTX0hPUlogICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQR1NfQVVUT1NDUk9MTCAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFBHU19EUkFHTkRST1AgICAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBQR0ZfSU5WSVNJQkxFICAgICAgICAgICAwCisjZGVmaW5lIFBHRl9OT1JNQUwgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEdGX0dSQVlFRCAgICAgICAgICAgICAgMgorI2RlZmluZSBQR0ZfREVQUkVTU0VEICAgICAgICAgICA0CisjZGVmaW5lIFBHRl9IT1QgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBQR0JfVE9QT1JMRUZUICAgICAgICAgICAwCisjZGVmaW5lIFBHQl9CT1RUT01PUlJJR0hUICAgICAgIDEKKworI2RlZmluZSBQR01fRklSU1QgICAgICAgICAgICAgICAweDE0MDAKKworI2RlZmluZSBQR01fU0VUQ0hJTEQgICAgICAgICAgICAoUEdNX0ZJUlNUKzEpCisjZGVmaW5lIFBHTV9SRUNBTENTSVpFICAgICAgICAgIChQR01fRklSU1QrMikKKyNkZWZpbmUgUEdNX0ZPUldBUkRNT1VTRSAgICAgICAgKFBHTV9GSVJTVCszKQorI2RlZmluZSBQR01fU0VUQktDT0xPUiAgICAgICAgICAoUEdNX0ZJUlNUKzQpCisjZGVmaW5lIFBHTV9HRVRCS0NPTE9SICAgICAgICAgIChQR01fRklSU1QrNSkKKyNkZWZpbmUgUEdNX1NFVEJPUkRFUiAgICAgICAgICAgKFBHTV9GSVJTVCs2KQorI2RlZmluZSBQR01fR0VUQk9SREVSICAgICAgICAgICAoUEdNX0ZJUlNUKzcpCisjZGVmaW5lIFBHTV9TRVRQT1MgICAgICAgICAgICAgIChQR01fRklSU1QrOCkKKyNkZWZpbmUgUEdNX0dFVFBPUyAgICAgICAgICAgICAgKFBHTV9GSVJTVCs5KQorI2RlZmluZSBQR01fU0VUQlVUVE9OU0laRSAgICAgICAoUEdNX0ZJUlNUKzEwKQorI2RlZmluZSBQR01fR0VUQlVUVE9OU0laRSAgICAgICAoUEdNX0ZJUlNUKzExKQorI2RlZmluZSBQR01fR0VUQlVUVE9OU1RBVEUgICAgICAoUEdNX0ZJUlNUKzEyKQorI2RlZmluZSBQR01fR0VURFJPUFRBUkdFVCAgICAgICBDQ01fR0VURFJPUFRBUkdFVAorCisKIAogLyogVHJlZXZpZXcgY29udHJvbCAqLwogCkBAIC04NzAsNyArOTQ0LDE1IEBACiAjZGVmaW5lIFdDX1RSRUVWSUVXMzJXICAgICAgICAgIEwiU3lzVHJlZVZpZXczMiIKICNkZWZpbmUgV0NfVFJFRVZJRVcgIFdJTkVMSUJfTkFNRV9BVyhXQ19UUkVFVklFVykKIAotI2RlZmluZSBUVl9GSVJTVCAgICAgIDB4MTEwMAorI2RlZmluZSBUVlNJTF9OT1JNQUwgICAgICAgICAgICAwCisjZGVmaW5lIFRWU0lMX1NUQVRFICAgICAgICAgICAgIDIKKworI2RlZmluZSBUVl9GSVJTVCAgICAgICAgICAgICAgICAweDExMDAKKworCisjZGVmaW5lIFRWTV9HRVRJTUFHRUxJU1QgICAgICAgIChUVl9GSVJTVCs4KQorI2RlZmluZSBUVk1fU0VUSU1BR0VMSVNUICAgICAgICAoVFZfRklSU1QrOSkKKwogCiAKIC8qIExpc3R2aWV3IGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnLmguaW4gYi9pbmNsdWRlL2NvbmZpZy5oLmluCmluZGV4IDIxZTE4ZTEuLjMwZmUyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlnLmguaW4KKysrIGIvaW5jbHVkZS9jb25maWcuaC5pbgpAQCAtMjQsNiArMjQsOSBAQAogLyogRGVmaW5lIGlmIHVuaW9uIHNlbXVuIGlzIGRlZmluZWQgaW4gc3lzL3NlbS5oICovCiAjdW5kZWYgSEFWRV9VTklPTl9TRU1VTgogCisvKiBEZWZpbmUgaWYgc3RydWN0IG1zZ2hkciBjb250YWlucyBtc2dfYWNjcmlnaHRzICovCisjdW5kZWYgSEFWRV9NU0dIRFJfQUNDUklHSFRTCisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgWHhmODZkZ2EgbGlicmFyeSAoLWxYeGY4NmRnYSkuICAqLwogI3VuZGVmIEhBVkVfTElCWFhGODZER0EKIApAQCAtMTAyLDYgKzEwNSw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jZHJvbS5oPiBoZWFkZXIgZmlsZS4gICovCiAjdW5kZWYgSEFWRV9MSU5VWF9DRFJPTV9ICiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3VjZHJvbS5oPiBoZWFkZXIgZmlsZS4gICovCisjdW5kZWYgSEFWRV9MSU5VWF9VQ0RST01fSAorCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxtYWNoaW5lL3NvdW5kY2FyZC5oPiBoZWFkZXIgZmlsZS4gICovCiAjdW5kZWYgSEFWRV9NQUNISU5FX1NPVU5EQ0FSRF9ICiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGRyYXcuaCBiL2luY2x1ZGUvZGRyYXcuaAppbmRleCBjYzA4MThlLi41OGVhNmZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RkcmF3LmgKKysrIGIvaW5jbHVkZS9kZHJhdy5oCkBAIC04MTcsNiArODE3LDcgQEAKICAgICBMUERJUkVDVERSQVcJCWRkcmF3OwogICAgIENvbG9ybWFwCQkJY207CiAgICAgUEFMRVRURUVOVFJZCQlwYWxlbnRzWzI1Nl07CisgICAgaW50CQkJCWluc3RhbGxlZDsKIH07CiAjdW5kZWYgVEhJUwogCkBAIC04ODksNiArODkwLDkgQEAKICAgICAvKiBhcmUgdGhlc2UgbmVlZGVkIGZvciBhbnl0aGluZz8gKGRyYXdfc3VyZiBpcyB0aGUgYWN0aXZlIHN1cmZhY2UpCiAgICAgICAgSURpcmVjdERyYXdTdXJmYWNlCSpzdXJmczsKICAgICAgICBEV09SRAkJbnVtX3N1cmZzLCBhbGxvY19zdXJmcywgZHJhd19zdXJmOyAqLworCisgICAgICAgQVRPTQkJd2luY2xhc3M7CisgICAgICAgSFdORDMyCQl3aW5kb3c7CiB9OwogCiBzdHJ1Y3QgSURpcmVjdERyYXcgewpAQCAtOTYyLDExICs5NjYsMTEgQEAKIAogI2RlZmluZSBUSElTIExQRElSRUNURFJBV1NVUkZBQ0UgdGhpcwogc3RydWN0IF9jb21tb25fZGlyZWN0ZHJhd3N1cmZhY2UgewotICAgIExQRElSRUNURFJBV1BBTEVUVEUJcGFsZXR0ZTsKLSAgICBMUERJUkVDVERSQVcJZGRyYXc7Ci0gICAgTFBESVJFQ1REUkFXU1VSRkFDRQliYWNrYnVmZmVyOwotICAgIExQVk9JRAkJc3VyZmFjZTsKLSAgICBEV09SRAkJbHBpdGNoLHdpZHRoLGhlaWdodDsKKyAgICBMUERJUkVDVERSQVdQQUxFVFRFCQlwYWxldHRlOworICAgIExQRElSRUNURFJBVwkJZGRyYXc7CisgICAgTFBESVJFQ1REUkFXU1VSRkFDRTMJYmFja2J1ZmZlcjsKKyAgICBMUFZPSUQJCQlzdXJmYWNlOworICAgIERXT1JECQkJbHBpdGNoLHdpZHRoLGhlaWdodDsKIH07CiAKIHN0cnVjdCBfZGdhX2RpcmVjdGRyYXdzdXJmYWNlIHsKQEAgLTk3NSw3ICs5NzksNiBAQAogCiBzdHJ1Y3QgX3hzaG1fZGlyZWN0ZHJhd3N1cmZhY2UgewogICAgIFhJbWFnZQkJKmltYWdlOwotICAgIEJPT0wzMgkJc3VyZmFjZV9pc19pbWFnZV9kYXRhOwogI2lmZGVmIEhBVkVfTElCWFhTSE0KICAgICBYU2htU2VnbWVudEluZm8Jc2htaW5mbzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9maWxlLmggYi9pbmNsdWRlL2ZpbGUuaAppbmRleCA5YzJhYmVhLi41NjQzMTRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZpbGUuaAorKysgYi9pbmNsdWRlL2ZpbGUuaApAQCAtMzMsOSArMzMsMTcgQEAKIAogI2RlZmluZSBJU19FTkRfT0ZfTkFNRShjaCkgICghKGNoKSB8fCAoKGNoKSA9PSAnLycpIHx8ICgoY2gpID09ICdcXCcpKQogCisvKiBET1MgZGV2aWNlIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhciAqbmFtZTsKKyAgICBpbnQgZmxhZ3M7Cit9IERPU19ERVZJQ0U7CisKIAogLyogZmlsZXMvZmlsZS5jICovCiBleHRlcm4gRklMRV9PQkpFQ1QgKkZJTEVfR2V0RmlsZSggSEZJTEUzMiBoYW5kbGUgKTsKK2V4dGVybiB2b2lkIEZJTEVfUmVsZWFzZUZpbGUoIEZJTEVfT0JKRUNUICpmaWxlICk7CiBleHRlcm4gSEZJTEUzMiBGSUxFX0FsbG9jKCBGSUxFX09CSkVDVCAqKmZpbGUgKTsKIGV4dGVybiB2b2lkIEZJTEVfU2V0RG9zRXJyb3Iodm9pZCk7CiBleHRlcm4gSEZJTEUzMiBGSUxFX0R1cFVuaXhIYW5kbGUoIGludCBmZCApOwpAQCAtNjgsNyArNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCByZW1haW5kZXIgKTsKIGV4dGVybiB0aW1lX3QgRE9TRlNfRmlsZVRpbWVUb1VuaXhUaW1lKCBjb25zdCBGSUxFVElNRSAqZnQsIERXT1JEICpyZW1haW5kZXIgKTsKIGV4dGVybiBCT09MMzIgRE9TRlNfVG9Eb3NGQ0JGb3JtYXQoIExQQ1NUUiBuYW1lLCBMUFNUUiBidWZmZXIgKTsKLWV4dGVybiBCT09MMzIgRE9TRlNfSXNEZXZpY2UoIGNvbnN0IGNoYXIgKm5hbWUgKTsKK2V4dGVybiBjb25zdCBET1NfREVWSUNFICpET1NGU19HZXREZXZpY2UoIGNvbnN0IGNoYXIgKm5hbWUgKTsKIGV4dGVybiBIRklMRTMyIERPU0ZTX09wZW5EZXZpY2UoIGNvbnN0IGNoYXIgKm5hbWUsIElOVDMyIG1vZGUgKTsKIGV4dGVybiBCT09MMzIgRE9TRlNfRmluZFVuaXhOYW1lKCBMUENTVFIgcGF0aCwgTFBDU1RSIG5hbWUsIExQU1RSIGxvbmdfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVDMyIGxvbmdfbGVuLCBMUFNUUiBzaG9ydF9idWYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2hlYXAuaCBiL2luY2x1ZGUvaGVhcC5oCmluZGV4IDJhZDMwOTguLjg0ZjZkYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaGVhcC5oCisrKyBiL2luY2x1ZGUvaGVhcC5oCkBAIC0zMiw4ICszMiwxMSBAQAogICAgICAgICAgKEhJV09SRChzdHIpID8gSEVBUF9zdHJkdXBBKCBTZWdwdHJIZWFwLCAwLCAoc3RyKSApIDogKExQU1RSKShzdHIpKQogI2RlZmluZSBTRUdQVFJfU1RSRFVQX1d0b0Eoc3RyKSBcCiAgICAgICAgICAoSElXT1JEKHN0cikgPyBIRUFQX3N0cmR1cFd0b0EoIFNlZ3B0ckhlYXAsIDAsIChzdHIpICkgOiAoTFBTVFIpKHN0cikpCi0jZGVmaW5lIFNFR1BUUl9HRVQocHRyKSBcCi0gICAgICAgICAoSElXT1JEKHB0cikgPyBIRUFQX0dldFNlZ3B0ciggU2VncHRySGVhcCwgMCwgKHB0cikgKSA6IChTRUdQVFIpKHB0cikpCisJLyogZGVmaW5lIGFuIGlubGluZSBmdW5jdGlvbiwgYSBtYWNybyB3b24ndCBkbyAqLworc3RhdGljIF9faW5saW5lX18gU0VHUFRSIFNFR1BUUl9HZXQoTFBDVk9JRCBwdHIpIHsKKyAgICAgICAgIHJldHVybiAoSElXT1JEKHB0cikgPyBIRUFQX0dldFNlZ3B0ciggU2VncHRySGVhcCwgMCwgcHRyICkgOiAoU0VHUFRSKXB0cik7Cit9CisjZGVmaW5lIFNFR1BUUl9HRVQocHRyKSBTRUdQVFJfR2V0KHB0cikKICNkZWZpbmUgU0VHUFRSX0ZSRUUocHRyKSBcCiAgICAgICAgICAoSElXT1JEKHB0cikgPyBIZWFwRnJlZSggU2VncHRySGVhcCwgMCwgKHB0cikgKSA6IDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGFnZXIuaCBiL2luY2x1ZGUvcGFnZXIuaAppbmRleCA0MjhhOGYwLi5mZTk5MmZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BhZ2VyLmgKKysrIGIvaW5jbHVkZS9wYWdlci5oCkBAIC0xMCw3ICsxMCwxMSBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdQQUdFUl9JTkZPCiB7Ci0gICAgVUlOVDMyICB1RHVtbXk7ICAvKiB0aGlzIGlzIGp1c3QgYSBkdW1teSB0byBrZWVwIHRoZSBjb21waWxlciBoYXBweSAqLworICAgIEhXTkQzMiAgIGh3bmRDaGlsZDsKKyAgICBDT0xPUlJFRiBjbHJCazsKKyAgICBJTlQzMiAgICBpQm9yZGVyOworICAgIElOVDMyICAgIGlCdXR0b25TaXplOworCiAKIH0gUEFHRVJfSU5GTzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wZWV4ZS5oIGIvaW5jbHVkZS9wZWV4ZS5oCmluZGV4IDg0OGVkOTQuLjlkMWE2MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGVleGUuaAorKysgYi9pbmNsdWRlL3BlZXhlLmgKQEAgLTIzOCw5ICsyMzgsOSBAQAogLyogSW1wb3J0IHRodW5rICovCiB0eXBlZGVmIHN0cnVjdCBfSU1BR0VfVEhVTktfREFUQSB7CiAJdW5pb24gewotCQlMUEJZVEUJRm9yd2FyZGVyU3RyaW5nOwotCQlMUERXT1JECUZ1bmN0aW9uOwotCQlEV09SRAlPcmRpbmFsOworCQlMUEJZVEUgICAgRm9yd2FyZGVyU3RyaW5nOworCQlGQVJQUk9DMzIgRnVuY3Rpb247CisJCURXT1JEICAgICBPcmRpbmFsOwogCQlMUElNQUdFX0lNUE9SVF9CWV9OQU1FCUFkZHJlc3NPZkRhdGE7CiAJfSB1MTsKIH0gSU1BR0VfVEhVTktfREFUQSwqTFBJTUFHRV9USFVOS19EQVRBOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZXJ2ZXIuaCBiL2luY2x1ZGUvc2VydmVyLmgKaW5kZXggYWIzZGNjOC4uZDY1MDFmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zZXJ2ZXIuaAorKysgYi9pbmNsdWRlL3NlcnZlci5oCkBAIC0xOCw2ICsxOCwxNSBAQAogLyogbWF4IG1zZyBsZW5ndGggKG5vdCBpbmNsdWRpbmcgdGhlIGhlYWRlcikgKi8KICNkZWZpbmUgTUFYX01TR19MRU5HVEggKDE2Mzg0IC0gc2l6ZW9mKHN0cnVjdCBoZWFkZXIpKQogCisvKiBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgYW4gZmQgd2l0aCBzZW5kbXNnL3JlY3Ztc2cgKi8KK3N0cnVjdCBjbXNnX2ZkCit7CisgICAgaW50IGxlbjsgICAvKiBzaXplb2Ygc3RydWN0dXJlICovCisgICAgaW50IGxldmVsOyAvKiBTT0xfU09DS0VUICovCisgICAgaW50IHR5cGU7ICAvKiBTQ01fUklHSFRTICovCisgICAgaW50IGZkOyAgICAvKiBmZCB0byBwYXNzICovCit9OworCiAvKiByZXF1ZXN0IGZyb20gY2xpZW50IHRvIHNlcnZlciAqLwogCiBlbnVtIHJlcXVlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2hsb2JqLmggYi9pbmNsdWRlL3NobG9iai5oCmluZGV4IDNkZWViNDAuLjRhZWQ0NDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2hsb2JqLmgKKysrIGIvaW5jbHVkZS9zaGxvYmouaApAQCAtMTIsNiArMTIsNzUgQEAKICNkZWZpbmUgRkFSCiAjZGVmaW5lIFRISVNfIFRISVMsCiAKKy8qIGNvbW1vbiBzaGVsbCBmaWxlIHN0cnVjdHVyZXMqLworI2RlZmluZSBGT19NT1ZFICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgRk9fQ09QWSAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEZPX0RFTEVURSAgICAgICAgIDB4MDAwMworI2RlZmluZSBGT19SRU5BTUUgICAgICAgICAweDAwMDQKKworI2RlZmluZSBGT0ZfTVVMVElERVNURklMRVMgICAgICAgICAweDAwMDEKKyNkZWZpbmUgRk9GX0NPTkZJUk1NT1VTRSAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEZPRl9TSUxFTlQgICAgICAgICAgICAgICAgIDB4MDAwNCAgCisjZGVmaW5lIEZPRl9SRU5BTUVPTkNPTExJU0lPTiAgICAgIDB4MDAwOAorI2RlZmluZSBGT0ZfTk9DT05GSVJNQVRJT04gICAgICAgICAweDAwMTAgIAorI2RlZmluZSBGT0ZfV0FOVE1BUFBJTkdIQU5ETEUgICAgICAweDAwMjAgIAorI2RlZmluZSBGT0ZfQUxMT1dVTkRPICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgRk9GX0ZJTEVTT05MWSAgICAgICAgICAgICAgMHgwMDgwICAKKyNkZWZpbmUgRk9GX1NJTVBMRVBST0dSRVNTICAgICAgICAgMHgwMTAwICAKKyNkZWZpbmUgRk9GX05PQ09ORklSTU1LRElSICAgICAgICAgMHgwMjAwICAKKyNkZWZpbmUgRk9GX05PRVJST1JVSSAgICAgICAgICAgICAgMHgwNDAwICAKK3R5cGVkZWYgV09SRCBGSUxFT1BfRkxBR1M7CisKKyNkZWZpbmUgUE9fREVMRVRFICAgICAgIDB4MDAxMyAgCisjZGVmaW5lIFBPX1JFTkFNRSAgICAgICAweDAwMTQgIAorI2RlZmluZSBQT19QT1JUQ0hBTkdFICAgMHgwMDIwICAKKwordHlwZWRlZiBXT1JEIFBSSU5URVJPUF9GTEFHUzsKKwordHlwZWRlZiBzdHJ1Y3QgX1NIRklMRU9QU1RSVUNUQQoreyBIV05EMzIgICAgICAgICAgaHduZDsKKyAgVUlOVDMyICAgICAgICAgIHdGdW5jOworICBMUENTVFIgICAgICAgICAgcEZyb207CisgIExQQ1NUUiAgICAgICAgICBwVG87CisgIEZJTEVPUF9GTEFHUyAgICBmRmxhZ3M7CisgIEJPT0wzMiAgICAgICAgICBmQW55T3BlcmF0aW9uc0Fib3J0ZWQ7CisgIExQVk9JRCAgICAgICAgICBoTmFtZU1hcHBpbmdzOworICBMUENTVFIgICAgICAgICAgbHBzelByb2dyZXNzVGl0bGU7Cit9IFNIRklMRU9QU1RSVUNUMzJBLCBGQVIgKkxQU0hGSUxFT1BTVFJVQ1QzMkE7CisKK3R5cGVkZWYgc3RydWN0IF9TSEZJTEVPUFNUUlVDVFcKK3sgSFdORDMyICAgICAgICAgIGh3bmQ7CisgIFVJTlQzMiAgICAgICAgICB3RnVuYzsKKyAgTFBDV1NUUiAgICAgICAgIHBGcm9tOworICBMUENXU1RSICAgICAgICAgcFRvOworICBGSUxFT1BfRkxBR1MgICAgZkZsYWdzOworICBCT09MMzIgICAgICAgICAgZkFueU9wZXJhdGlvbnNBYm9ydGVkOworICBMUFZPSUQgICAgICAgICAgaE5hbWVNYXBwaW5nczsKKyAgTFBDV1NUUiAgICAgICAgIGxwc3pQcm9ncmVzc1RpdGxlOworfSBTSEZJTEVPUFNUUlVDVDMyVywgRkFSICpMUFNIRklMRU9QU1RSVUNUMzJXOworCit0eXBlZGVmIFNIRklMRU9QU1RSVUNUMzJBIFNIRklMRU9QU1RSVUNUMzI7Cit0eXBlZGVmIExQU0hGSUxFT1BTVFJVQ1QzMkEgTFBTSEZJTEVPUFNUUlVDVDMyOworCisvKmNvbW1vbiBJRExpc3Qgc3RydWN0dXJlcyovCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRAkJY2I7CS8qIG5yIG9mIGJ5dGVzIGluIHRoaXMgaXRlbSAqLworCUJZVEUJCWFiSURbMV07LyogZmlyc3QgYnl0ZSBpbiB0aGlzIGl0ZW0gKi8KK30gU0hJVEVNSUQsKkxQU0hJVEVNSUQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTSElURU1JRAlta2lkOyAvKiBmaXJzdCBpdGVtaWQgaW4gbGlzdCAqLworfSBJVEVNSURMSVNULCpMUElURU1JRExJU1QsKkxQQ0lURU1JRExJU1Q7CisKKy8qIGZvciBTSENoYW5nZU5vdGlmeVJlZ2lzdGVyKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIExQSVRFTUlETElTVCBwaWRsOworICAgRFdPUkQgdW5rbm93bjsKK30gSURTVFJVQ1Q7CisKKy8qIGZvciBTSEFkZFRvUmVjZW50RG9jcyovCisjZGVmaW5lIFNIQVJEX1BJREwgICAgICAweDAwMDAwMDAxTAorI2RlZmluZSBTSEFSRF9QQVRIICAgICAgMHgwMDAwMDAwMkwKIAogdHlwZWRlZiBMUFZPSUQJTFBCQzsgLyogKklCaW5kQ3R4IHJlYWxseSAqLwogCkBAIC00OCwxNiArMTE3LDYgQEAKICAgfXU7CiB9IFNUUlJFVCwqTFBTVFJSRVQ7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQlXT1JECQljYjsJLyogbnIgb2YgYnl0ZXMgaW4gdGhpcyBpdGVtICovCi0JQllURQkJYWJJRFsxXTsvKiBmaXJzdCBieXRlIGluIHRoaXMgaXRlbSAqLwotfSBTSElURU1JRCwqTFBTSElURU1JRDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCVNISVRFTUlECW1raWQ7IC8qIGZpcnN0IGl0ZW1pZCBpbiBsaXN0ICovCi19IElURU1JRExJU1QsKkxQSVRFTUlETElTVCwqTFBDSVRFTUlETElTVDsKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSU5URVJOQUwgQ0xBU1M6IFBJREwtTWFuYWdlcgogICogU291cmNlOiBIT1dUTyBleHRlbmQgdGhlIGV4cGxvcmVyIG5hbWVzcGFjZQpAQCAtNjYsOSArMTI1LDEyIEBACiAjZGVmaW5lIFRISVMgTFBQSURMTUdSIHRoaXMKIHR5cGVkZWYgZW51bSB0YWdQSURMVFlQRQogeyBQVF9ERVNLVE9QID0gMHgwMDAwMDAwMCwKLSAgUFRfRFJJVkUgPSAgIDB4MDAwMDAwMDEsCi0gIFBUX0ZPTERFUiA9ICAweDAwMDAwMDAyLAotCVBUX1ZBTFVFID0gICAweDAwMDAwMDA0LAorICBQVF9NWUNPTVAgPSAgMHgwMDAwMDAwMSwKKwlQVF9DT05UUk9MID0gMHgwMDAwMDAwMiwKKwlQVF9SRUNZQ0xFUiA9MHgwMDAwMDAwNCwKKyAgUFRfRFJJVkUgPSAgIDB4MDAwMDAwMDgsCisgIFBUX0ZPTERFUiA9ICAweDAwMDAwMDEwLAorCVBUX1ZBTFVFID0gICAweDAwMDAwMDIwLAogICBQVF9URVhUID0gUFRfRk9MREVSIHwgUFRfVkFMVUUKIH0gUElETFRZUEU7CiAKQEAgLTc4LDggKzE0MCw5IEBACiB9UElETERBVEEsIEZBUiAqTFBQSURMREFUQTsKIAogdHlwZWRlZiBzdHJ1Y3QgcGlkbG1nciBwaWRsbWdyLCpMUFBJRExNR1I7Ci10eXBlZGVmIHN0cnVjdCBQaWRsTWdyX1ZUYWJsZSB7Ci0gICBTVERNRVRIT0RfKExQSVRFTUlETElTVCwgQ3JlYXRlRGVza3RvcCkgKFRISVMpOwordHlwZWRlZiBzdHJ1Y3QgUGlkbE1ncl9WVGFibGUKK3sgIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBDcmVhdGVEZXNrdG9wKSAoVEhJUyk7CisgICBTVERNRVRIT0RfKExQSVRFTUlETElTVCwgQ3JlYXRlTXlDb21wdXRlcikgKFRISVMpOwogICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENyZWF0ZURyaXZlKSAoVEhJU18gTFBDU1RSKTsKICAgIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBDcmVhdGVGb2xkZXIpIChUSElTXyBMUENTVFIpOwogICAgU1RETUVUSE9EXyhMUElURU1JRExJU1QsIENyZWF0ZVZhbHVlKSAoVEhJU18gTFBDU1RSKTsKQEAgLTkyLDYgKzE1NSw3IEBACiAJIFNURE1FVEhPRF8oTFBJVEVNSURMSVNULCBHZXRMYXN0SXRlbSkgKFRISVNfIExQQ0lURU1JRExJU1QpOwogICAgU1RETUVUSE9EXyhEV09SRCwgR2V0SXRlbVRleHQpIChUSElTXyBMUENJVEVNSURMSVNULCBMUFNUUiwgVUlOVDE2KTsKICAgIFNURE1FVEhPRF8oQk9PTDMyLCBJc0Rlc2t0b3ApIChUSElTXyBMUENJVEVNSURMSVNUKTsKKyAgIFNURE1FVEhPRF8oQk9PTDMyLCBJc015Q29tcHV0ZXIpIChUSElTXyBMUENJVEVNSURMSVNUKTsKICAgIFNURE1FVEhPRF8oQk9PTDMyLCBJc0RyaXZlKSAoVEhJU18gTFBDSVRFTUlETElTVCk7CiAgICBTVERNRVRIT0RfKEJPT0wzMiwgSXNGb2xkZXIpIChUSElTXyBMUENJVEVNSURMSVNUKTsKICAgIFNURE1FVEhPRF8oQk9PTDMyLCBJc1ZhbHVlKSAoVEhJU18gTFBDSVRFTUlETElTVCk7CkBAIC0xMTQsOCArMTc4LDggQEAKIAogfSAqTFBQSURMTUdSX1ZUQUJMRSxQaWRsTWdyX1ZUYWJsZTsKIAotc3RydWN0IHBpZGxtZ3IgewotCUxQUElETE1HUl9WVEFCTEUJbHB2dGJsOworc3RydWN0IHBpZGxtZ3IgCit7CUxQUElETE1HUl9WVEFCTEUJbHB2dGJsOwogfTsKICNpZmRlZiBfX1dJTkVfXwogZXh0ZXJuIExQUElETE1HUiBQaWRsTWdyX0NvbnN0cnVjdG9yKCk7CkBAIC0xNzQsMTggKzIzOCwxNiBAQAogCiAvKiBJU2hlbGxGb2xkZXI6OkdldERpc3BsYXlOYW1lT2YvU2V0TmFtZU9mIHVGbGFncyAqLwogdHlwZWRlZiBlbnVtCi17Ci0gICAgU0hHRE5fTk9STUFMICAgICAgICAgICAgPSAwLCAgICAgICAgLyogZGVmYXVsdCAoZGlzcGxheSBwdXJwb3NlKSAqLwotICAgIFNIR0ROX0lORk9MREVSICAgICAgICAgID0gMSwgICAgICAgIC8qIGRpc3BsYXllZCB1bmRlciBhIGZvbGRlciAocmVsYXRpdmUpKi8KLSAgICBTSEdETl9GT1JQQVJTSU5HICAgICAgICA9IDB4ODAwMCAgICAvKiBmb3IgUGFyc2VEaXNwbGF5TmFtZSBvciBwYXRoICovCit7IFNIR0ROX05PUk1BTCAgICAgICAgICAgID0gMCwgICAgICAgIC8qIGRlZmF1bHQgKGRpc3BsYXkgcHVycG9zZSkgKi8KKyAgU0hHRE5fSU5GT0xERVIgICAgICAgICAgPSAxLCAgICAgICAgLyogZGlzcGxheWVkIHVuZGVyIGEgZm9sZGVyIChyZWxhdGl2ZSkqLworICBTSEdETl9GT1JQQVJTSU5HICAgICAgICA9IDB4ODAwMCAgICAvKiBmb3IgUGFyc2VEaXNwbGF5TmFtZSBvciBwYXRoICovCiB9IFNIR05POwogCiAvKiBJU2hlbGxGb2xkZXI6OkVudW1PYmplY3RzICovCiB0eXBlZGVmIGVudW0gdGFnU0hDT05URgotewotICAgIFNIQ09OVEZfRk9MREVSUyAgICAgICAgID0gMzIsICAgICAgIC8qIGZvciBzaGVsbCBicm93c2VyICovCi0gICAgU0hDT05URl9OT05GT0xERVJTICAgICAgPSA2NCwgICAgICAgLyogZm9yIGRlZmF1bHQgdmlldyAqLwotICAgIFNIQ09OVEZfSU5DTFVERUhJRERFTiAgID0gMTI4ICAgICAgIC8qIGZvciBoaWRkZW4vc3lzdGVtIG9iamVjdHMgKi8KK3sgU0hDT05URl9GT0xERVJTICAgICAgICAgPSAzMiwgICAgICAgLyogZm9yIHNoZWxsIGJyb3dzZXIgKi8KKyAgU0hDT05URl9OT05GT0xERVJTICAgICAgPSA2NCwgICAgICAgLyogZm9yIGRlZmF1bHQgdmlldyAqLworICBTSENPTlRGX0lOQ0xVREVISURERU4gICA9IDEyOCAgICAgICAvKiBmb3IgaGlkZGVuL3N5c3RlbSBvYmplY3RzICovCiB9IFNIQ09OVEY7CiAKIC8qIGZyb20gb2xlaWRsLmggKi8KQEAgLTIyNSw3ICsyODcsNyBAQAogICAgIFNURE1FVEhPRF8oVUxPTkcsQWRkUmVmKSAoVEhJUykgIFBVUkU7CiAgICAgU1RETUVUSE9EXyhVTE9ORyxSZWxlYXNlKSAoVEhJUykgUFVSRTsKICAgICAvKiAqKiogSVBlcnNpc3QgRm9sZGVyIG1ldGhvZHMgKioqICovCi0JCVNURE1FVEhPRChJbml0aWFsaXplKShUSElTXyBMUENJVEVNSURMSVNUIHBpZGwpIFBVUkU7CisvKgkJU1RETUVUSE9EKEluaXRpYWxpemUpKFRISVNfIExQQ0lURU1JRExJU1QgcGlkbCkgUFVSRTsgKi8KICAgICAvKiAqKiogSVNoZWxsRm9sZGVyIG1ldGhvZHMgKioqICovCiAgICAgU1RETUVUSE9EKFBhcnNlRGlzcGxheU5hbWUpIChUSElTXyBIV05EMzIgaHduZE93bmVyLAogICAgICAgICBMUEJDIHBiY1Jlc2VydmVkLCBMUE9MRVNUUjMyIGxwc3pEaXNwbGF5TmFtZSwKQEAgLTI1OCw3ICszMjAsNyBAQAogCUxQSVRFTUlETElTVCBtcGlkbE5TUm9vdDsKIAlMUFNIRUxMRk9MREVSIG1wU0ZQYXJlbnQ7CiB9OwotCitleHRlcm4gTFBTSEVMTEZPTERFUiBwZGVza3RvcGZvbGRlcjsKICN1bmRlZiBUSElTCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMzMsOSArMzk1LDYgQEAKIGV4dGVybiBMUEVOVU1JRExJU1QgSUVudW1JRExpc3RfQ29uc3RydWN0b3IoTFBDU1RSLERXT1JELEhSRVNVTFQqKTsKICNlbmRpZgogCi1EV09SRCBXSU5BUEkgU0hFTEwzMl9EbGxHZXRDbGFzc09iamVjdChMUENMU0lELFJFRklJRCxMUFZPSUQqKTsKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0hCcm93c2VGb3JGb2xkZXIgQVBJCiAgKi8KQEAgLTM5MywxMCArNDUyLDkgQEAKICNkZWZpbmUgQkZGTV9TRVRTRUxFQ1RJT05XICAgICAgKFdNX1VTRVIrMTAzKQogI2RlZmluZSBCRkZNX1NFVFNUQVRVU1RFWFRXICAgICAoV01fVVNFUisxMDQpCiAKLUxQSVRFTUlETElTVCBXSU5BUEkgU0hCcm93c2VGb3JGb2xkZXIzMkEoTFBCUk9XU0VJTkZPMzJBIGxwYmkpOwotLyoKLUxQSVRFTUlETElTVCBXSU5BUEkgU0hCcm93c2VGb3JGb2xkZXIzMlcoTFBCUk9XU0VJTkZPMzJXIGxwYmkpOwogCisKKy8qCiAjaWZkZWYgVU5JQ09ERQogI2RlZmluZSBTSEJyb3dzZUZvckZvbGRlciAgIFNIQnJvd3NlRm9yRm9sZGVyVwogI2RlZmluZSBCRkZNX1NFVFNUQVRVU1RFWFQgIEJGRk1fU0VUU1RBVFVTVEVYVFcKQEAgLTQxMiw2ICs0NzAsNDEgQEAKICNlbmRpZiAKICovCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzaGx2aWV3IHN0cnVjdHVyZXMKKyAqLwordHlwZWRlZiBIUkVTVUxUKENBTExCQUNLICpTSEVMTFZJRVdQUk9DKShEV09SRCBkd1VzZXJQYXJhbSxMUFNIRUxMRk9MREVSIHBzZixIV05EMzIgaHduZCxVSU5UMzIgdU1zZyxVSU5UMzIgd1BhcmFtLExQQVJBTSBsUGFyYW0pOworCisvKiBORiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSAidmlld21vZGUiIGl0ZW0gb2YgdGhlIFNIRUxMVEVNUExBVEUqLworI2RlZmluZSBORl9JTkhFUklUVklFVyAgICAweDAwMDAKKyNkZWZpbmUgTkZfTE9DQUxWSUVXICAgICAgICAweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgX1NIRUxMVklFV0RBVEEgICAvLyBpZGwKK3sgRFdPUkQgICAgICAgICAgIGR3U2l6ZTsKKyAgTFBTSEVMTEZPTERFUiAgIHBTaGVsbEZvbGRlcjsKKyAgRFdPUkQgICAgICAgICAgIGR3VXNlclBhcmFtOworICBMUENJVEVNSURMSVNUICAgcGlkbDsKKyAgRFdPUkQgICAgICAgICAgIHYzOyAgICAgICAgLy8gYWx3YXlzIDAKKyAgU0hFTExWSUVXUFJPQyAgIHBDYWxsQmFjazsKKyAgRFdPUkQgICAgICAgICAgIHZpZXdtb2RlOyAgLy8gTkZfKiBlbnVtCit9IFNIRUxMVklFV0RBVEEsICogTFBTSEVMTFZJRVdEQVRBOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZnVuY3Rpb25zCisgKi8KKworRFdPUkQgIFdJTkFQSSBJTEdldFNpemUoTFBJVEVNSURMSVNUIGlpbCk7CitEV09SRCAgV0lOQVBJIFNIQWRkVG9SZWNlbnREb2NzKFVJTlQzMiB1RmxhZ3MsIExQQ1ZPSUQgcHYpOworTFBWT0lEIFdJTkFQSSBTSEFsbG9jKERXT1JEIGxlbik7CitMUElURU1JRExJU1QgV0lOQVBJIFNIQnJvd3NlRm9yRm9sZGVyMzJBKExQQlJPV1NFSU5GTzMyQSBscGJpKTsKKy8qTFBJVEVNSURMSVNUIFdJTkFQSSBTSEJyb3dzZUZvckZvbGRlcjMyVyhMUEJST1dTRUlORk8zMlcgbHBiaSk7Ki8KK0RXT1JEICBXSU5BUEkgU0hDaGFuZ2VOb3RpZnlSZWdpc3RlcihIV05EMzIgaHduZCxMT05HIGV2ZW50czEsTE9ORyBldmVudHMyLERXT1JEIG1zZyxpbnQgY291bnQsSURTVFJVQ1QgKmlkbGlzdCk7CitEV09SRCAgV0lOQVBJIFNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QoTFBDTFNJRCxSRUZJSUQsTFBWT0lEKik7CitEV09SRCAgV0lOQVBJIFNIRmlsZU9wZXJhdGlvbjMyKExQU0hGSUxFT1BTVFJVQ1QzMiBscEZpbGVPcCk7CitMUFNUUiAgV0lOQVBJIFBhdGhBZGRCYWNrc2xhc2goTFBTVFIgcGF0aCk7CQorTFBTVFIgIFdJTkFQSSBQYXRoUmVtb3ZlQmxhbmtzKExQU1RSIHN0cik7CisKKwogI3VuZGVmIFBVUkUKICN1bmRlZiBGQVIKICN1bmRlZiBUSElTCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Rvb2xiYXIuaCBiL2luY2x1ZGUvdG9vbGJhci5oCmluZGV4IGUwMzZhMTIuLmZjMDU3MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdG9vbGJhci5oCisrKyBiL2luY2x1ZGUvdG9vbGJhci5oCkBAIC01MSw2ICs1MSw3IEBACiAgICAgSFdORDMyICAgICBod25kTm90aWZ5OyAgICAgIC8qIGhhbmRsZSB0byB0aGUgd2luZG93IHRoYXQgZ2V0cyBub3RpZmljYXRpb25zICovCiAgICAgQk9PTDMyICAgICBiVHJhbnNwYXJlbnQ7ICAgIC8qIGJhY2tncm91bmQgdHJhbnNwYXJlbmN5IGZsYWcgKi8KICAgICBCT09MMzIgICAgIGJBdXRvU2l6ZTsKKyAgICBEV09SRCAgICAgIGR3RXhTdHlsZTsgICAgICAgLyogZXh0ZW5kZWQgdG9vbGJhciBzdHlsZSAqLwogCiAgICAgQ09MT1JSRUYgICBjbHJJbnNlcnRNYXJrOyAgIC8qIGluc2VydCBtYXJrIGNvbG9yICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdG9vbHRpcHMuaCBiL2luY2x1ZGUvdG9vbHRpcHMuaAppbmRleCAxYzA3MTM1Li45NWUyYTZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Rvb2x0aXBzLmgKKysrIGIvaW5jbHVkZS90b29sdGlwcy5oCkBAIC0xOCwxOCArMTgsMjggQEAKICAgICBMUFNUUiAgbHBzelRleHQ7CiAgICAgTFBBUkFNIGxQYXJhbTsKIAorCiB9IFRUVE9PTF9JTkZPOyAKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdUT09MVElQU19JTkZPCiB7CisgICAgQ0hBUiAgICAgICBzelRpcFRleHRbSU5GT1RJUFNJWkVdOwogICAgIEJPT0wzMiAgICAgYkFjdGl2ZTsKICAgICBVSU5UMzIgICAgIHVOdW1Ub29sczsKICAgICBDT0xPUlJFRiAgIGNsckJrOwogICAgIENPTE9SUkVGICAgY2xyVGV4dDsKICAgICBIRk9OVDMyICAgIGhGb250OwotICAgIElOVDMyICAgICAgaU1heFRpcFdpZHRoOwotICAgIElOVDMyICAgICAgaUN1cnJlbnRUb29sOworICAgIElOVDMyICAgICAgbk1heFRpcFdpZHRoOworICAgIElOVDMyICAgICAgblRvb2w7CisgICAgSU5UMzIgICAgICBuT2xkVG9vbDsKKyAgICBJTlQzMiAgICAgIG5DdXJyZW50VG9vbDsKKworICAgIElOVDMyICAgICAgbkF1dG9tYXRpY1RpbWU7CisgICAgSU5UMzIgICAgICBuUmVzaG93VGltZTsKKyAgICBJTlQzMiAgICAgIG5BdXRvUG9wVGltZTsKKyAgICBJTlQzMiAgICAgIG5Jbml0aWFsVGltZTsKKyAgICBSRUNUMzIgICAgIHJjTWFyZ2luOwogCiAgICAgVFRUT09MX0lORk8gKnRvb2xzOwogfSBUT09MVElQU19JTkZPOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmVldmlldy5oIGIvaW5jbHVkZS90cmVldmlldy5oCmluZGV4IDJkOTJhODAuLjBjMzE1ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJlZXZpZXcuaAorKysgYi9pbmNsdWRlL3RyZWV2aWV3LmgKQEAgLTksNyArOSwxMiBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdUUkVFVklFV19JTkZPCiB7Ci0gICAgVUlOVDMyICB1RHVtbXk7ICAvKiB0aGlzIGlzIGp1c3QgYSBkdW1teSB0byBrZWVwIHRoZSBjb21waWxlciBoYXBweSAqLworICAgIENPTE9SUkVGIGNsckJrOworICAgIENPTE9SUkVGIGNsclRleHQ7CisKKyAgICBISU1BR0VMSVNUIGhpbWxOb3JtYWw7CisgICAgSElNQUdFTElTVCBoaW1sU3RhdGU7CisKIAogfSBUUkVFVklFV19JTkZPOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RzX3hmODZkZ2EuaCBiL2luY2x1ZGUvdHNfeGY4NmRnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjllZTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RzX3hmODZkZ2EuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogVGhyZWFkIHNhZmUgd3JhcHBlcnMgYXJvdW5kIHhmODZkZ2EgY2FsbHMuCisgKiBBbHdheXMgaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVhZCBvZiA8WDExL3hmODZkZ2EuaD4uCisgKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRvb2xzL21ha2VfWDExd3JhcHBlcnMKKyAqCisgKiBDb3B5cmlnaHQgMTk5OCBLcmlzdGlhbiBOaWVsc2VuCisgKi8KKworI2lmbmRlZiBfX1dJTkVfVFNYRjg2REdBX0gKKyNkZWZpbmUgX19XSU5FX1RTWEY4NkRHQV9ICisKKyNpbmNsdWRlIDxYMTEvWGxpYi5oPgorI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL3hmODZkZ2EuaD4KKworZXh0ZXJuIEJvb2wgVFNYRjg2REdBUXVlcnlWZXJzaW9uKERpc3BsYXkqLGludCosaW50Kik7CitleHRlcm4gQm9vbCBUU1hGODZER0FRdWVyeUV4dGVuc2lvbihEaXNwbGF5KixpbnQqLGludCopOworZXh0ZXJuIFN0YXR1cyBUU1hGODZER0FHZXRWaWRlbyhEaXNwbGF5KixpbnQsY2hhcioqLGludCosaW50KixpbnQqKTsKK2V4dGVybiBTdGF0dXMgVFNYRjg2REdBRGlyZWN0VmlkZW8oRGlzcGxheSosaW50LGludCk7CitleHRlcm4gU3RhdHVzIFRTWEY4NkRHQUdldFZpZXdQb3J0U2l6ZShEaXNwbGF5KixpbnQsaW50KixpbnQqKTsKK2V4dGVybiBTdGF0dXMgVFNYRjg2REdBU2V0Vmlld1BvcnQoRGlzcGxheSosaW50LGludCxpbnQpOworZXh0ZXJuIFN0YXR1cyBUU1hGODZER0FJbnN0YWxsQ29sb3JtYXAoRGlzcGxheSosaW50LENvbG9ybWFwKTsKK2V4dGVybiBTdGF0dXMgVFNYRjg2REdBUXVlcnlEaXJlY3RWaWRlbyhEaXNwbGF5KixpbnQsaW50Kik7CitleHRlcm4gU3RhdHVzIFRTWEY4NkRHQVZpZXdQb3J0Q2hhbmdlZChEaXNwbGF5KixpbnQsaW50KTsKKworI2VuZGlmIC8qIF9fV0lORV9UU1hGODZER0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90c194bGliLmggYi9pbmNsdWRlL3RzX3hsaWIuaAppbmRleCBmNDliZGVlLi5mNzgxNzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RzX3hsaWIuaAorKysgYi9pbmNsdWRlL3RzX3hsaWIuaApAQCAtODMsNyArODMsNiBAQAogZXh0ZXJuIGludCAgVFNYR2V0U2NyZWVuU2F2ZXIoRGlzcGxheSosIGludCosIGludCosIGludCosIGludCopOwogZXh0ZXJuIGludCAgVFNYR2V0V2luZG93UHJvcGVydHkoRGlzcGxheSosIFdpbmRvdywgQXRvbSwgbG9uZywgbG9uZywgaW50LCBBdG9tLCBBdG9tKiwgaW50KiwgdW5zaWduZWQgbG9uZyosIHVuc2lnbmVkIGxvbmcqLCB1bnNpZ25lZCBjaGFyKiopOwogZXh0ZXJuIGludCAgIFRTWEdldFdpbmRvd0F0dHJpYnV0ZXMoRGlzcGxheSosIFdpbmRvdywgWFdpbmRvd0F0dHJpYnV0ZXMqKTsKLWV4dGVybiBpbnQgIFRTWEdyYWJQb2ludGVyKERpc3BsYXkqLCBXaW5kb3csIGludCwgdW5zaWduZWQgaW50LCBpbnQsIGludCwgV2luZG93LCBDdXJzb3IsIFRpbWUpOwogZXh0ZXJuIGludCAgVFNYR3JhYlNlcnZlcihEaXNwbGF5Kik7CiBleHRlcm4gaW50ICBUU1hJbnN0YWxsQ29sb3JtYXAoRGlzcGxheSosIENvbG9ybWFwKTsKIGV4dGVybiBLZXlDb2RlICBUU1hLZXlzeW1Ub0tleWNvZGUoRGlzcGxheSosIEtleVN5bSk7CkBAIC0xMTUsMTIgKzExNCwxMiBAQAogZXh0ZXJuIGludCAgVFNYU2V0U2NyZWVuU2F2ZXIoRGlzcGxheSosIGludCwgaW50LCBpbnQsIGludCk7CiBleHRlcm4gaW50ICBUU1hTZXRTZWxlY3Rpb25Pd25lcihEaXNwbGF5KiwgQXRvbSwgV2luZG93LCBUaW1lKTsKIGV4dGVybiBpbnQgIFRTWFNldFN1YndpbmRvd01vZGUoRGlzcGxheSosIEdDLCBpbnQpOworZXh0ZXJuIGludCAgVFNYU2V0V2luZG93Q29sb3JtYXAoRGlzcGxheSosIFdpbmRvdywgQ29sb3JtYXApOwogZXh0ZXJuIGludCAgVFNYU3RvcmVDb2xvcihEaXNwbGF5KiwgQ29sb3JtYXAsIFhDb2xvciopOwogZXh0ZXJuIGludCAgVFNYU3RvcmVOYW1lKERpc3BsYXkqLCBXaW5kb3csIGNvbnN0ICBjaGFyKik7CiBleHRlcm4gaW50ICBUU1hTeW5jKERpc3BsYXkqLCBpbnQpOwogZXh0ZXJuIGludCAgVFNYVGV4dEV4dGVudHMoWEZvbnRTdHJ1Y3QqLCBjb25zdCAgY2hhciosIGludCwgaW50KiwgaW50KiwgaW50KiwgWENoYXJTdHJ1Y3QqKTsKIGV4dGVybiBpbnQgIFRTWFRleHRXaWR0aChYRm9udFN0cnVjdCosIGNvbnN0ICBjaGFyKiwgaW50KTsKLWV4dGVybiBpbnQgIFRTWFVuZ3JhYlBvaW50ZXIoRGlzcGxheSosIFRpbWUpOwogZXh0ZXJuIGludCAgVFNYVW5ncmFiU2VydmVyKERpc3BsYXkqKTsKIGV4dGVybiBpbnQgIFRTWFVuaW5zdGFsbENvbG9ybWFwKERpc3BsYXkqLCBDb2xvcm1hcCk7CiBleHRlcm4gaW50ICBUU1hVbm1hcFdpbmRvdyhEaXNwbGF5KiwgV2luZG93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmVyc2lvbi5oIGIvaW5jbHVkZS92ZXJzaW9uLmgKaW5kZXggMDU1NGEwZS4uMmVlZGE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS92ZXJzaW9uLmgKQEAgLTEgKzEgQEAKLSNkZWZpbmUgV0lORV9SRUxFQVNFX0lORk8gIldpbmUgcmVsZWFzZSA5ODA3MTIiCisjZGVmaW5lIFdJTkVfUkVMRUFTRV9JTkZPICJXaW5lIHJlbGVhc2UgOTgwNzI2IgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5kb3dzLmggYi9pbmNsdWRlL3dpbmRvd3MuaAppbmRleCA1MTg0MjczLi5hOGJlZThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmRvd3MuaAorKysgYi9pbmNsdWRlL3dpbmRvd3MuaApAQCAtNTUyMCw2ICs1NTIwLDEyIEBACiAjZGVmaW5lIERNX0NPTE9SCQkweDAwMDAwODAwTAogI2RlZmluZSBETV9EVVBMRVgJCTB4MDAwMDEwMDBMCiAKKyNkZWZpbmUgRE1fQklUU1BFUlBFTCAgICAgICAgICAgMHgwMDA0MDAwMEwKKyNkZWZpbmUgRE1fUEVMU1dJRFRIICAgICAgICAgICAgMHgwMDA4MDAwMEwKKyNkZWZpbmUgRE1fUEVMU0hFSUdIVCAgICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgRE1fRElTUExBWUZMQUdTICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgRE1fRElTUExBWUZSRVFVRU5DWSAgICAgMHgwMDQwMDAwMEwKKwogLyogZXRjLi4uLiAqLwogCiAjZGVmaW5lIERNT1JJRU5UX1BPUlRSQUlUCTEKQEAgLTU1NjcsNiArNTU3MywxNiBAQAogREVDTF9XSU5FTElCX1RZUEVfQVcoUFJJTlRFUl9ERUZBVUxUUykKIERFQ0xfV0lORUxJQl9UWVBFX0FXKExQUFJJTlRFUl9ERUZBVUxUUykKIAorICAgICAvKiBDaGFuZ2VEaXNwbGF5U2V0dGluZ3MgcmV0dXJuIGNvZGVzICovCisKKyNkZWZpbmUgRElTUF9DSEFOR0VfU1VDQ0VTU0ZVTCAwCisjZGVmaW5lIERJU1BfQ0hBTkdFX1JFU1RBUlQgICAgMQorI2RlZmluZSBESVNQX0NIQU5HRV9GQUlMRUQgICAgICgtMSkKKyNkZWZpbmUgRElTUF9DSEFOR0VfQkFETU9ERSAgICAoLTIpCisjZGVmaW5lIERJU1BfQ0hBTkdFX05PVFVQREFURUQgKC0zKQorI2RlZmluZSBESVNQX0NIQU5HRV9CQURGTEFHUyAgICgtNCkKKworCiB0eXBlZGVmIHN0cnVjdCBfU1lTVEVNX1BPV0VSX1NUQVRVUwogewogICBCT09MMTYgIEFDTGluZVN0YXR1czsKQEAgLTY1MjAsNiArNjUzNiw3IEBACiAjZGVmaW5lICAgICBHZXRGdWxsUGF0aE5hbWUgV0lORUxJQl9OQU1FX0FXKEdldEZ1bGxQYXRoTmFtZSkKIElOVDMyICAgICAgIFdJTkFQSSBHZXRHcmFwaGljc01vZGUoSERDMzIpOwogQk9PTDMyICAgICAgV0lOQVBJIEdldEhhbmRsZUluZm9ybWF0aW9uKEhBTkRMRTMyLExQRFdPUkQpOworQk9PTDMyICAgICAgV0lOQVBJIEdldEljb25JbmZvKEhJQ09OMzIsTFBJQ09OSU5GTyk7CiBEV09SRCAgICAgICBXSU5BUEkgR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplKEhBTkRMRTMyKTsKIFZPSUQgICAgICAgIFdJTkFQSSBHZXRMb2NhbFRpbWUoTFBTWVNURU1USU1FKTsKIERXT1JEICAgICAgIFdJTkFQSSBHZXRMb2dpY2FsRHJpdmVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvbG9hZGVyL25lL3NlZ21lbnQuYyBiL2xvYWRlci9uZS9zZWdtZW50LmMKaW5kZXggZmNhYTA4NS4uMWM0N2RkMSAxMDA2NDQKLS0tIGEvbG9hZGVyL25lL3NlZ21lbnQuYworKysgYi9sb2FkZXIvbmUvc2VnbWVudC5jCkBAIC0yMTMsMTAgKzIxMywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChCWVRFICopcE1vZHVsZSArIHBNb2R1bGUtPm5hbWVfdGFibGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKXBNb2R1bGUgKyBwTW9kdWxlLT5uYW1lX3RhYmxlICsgMSApOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgV0FSTihtb2R1bGUsICJObyBoYW5kbGVyIGZvciAlLipzLiVkLCBzZXR0aW5nIHRvIDA6MFxuIiwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEVSUihmaXh1cCwgIk5vIGhhbmRsZXIgZm9yICUuKnMuJWQsIHNldHRpbmcgdG8gMHhkZWFkYmVlZlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChCWVRFICopcFRhcmdldCArIHBUYXJnZXQtPm5hbWVfdGFibGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopcFRhcmdldCArIHBUYXJnZXQtPm5hbWVfdGFibGUgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGluYWwgKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IDB4ZGVhZGJlZWY7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFRSQUNFX09OKGZpeHVwKSkKICAgICAgICAgICAgIHsKQEAgLTI0MSwxMCArMjQ0LDExIEBACiAgICAgICAgICAgICBpZiAoRVJSX09OKGZpeHVwKSAmJiAhYWRkcmVzcykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBORV9NT0RVTEUgKnBUYXJnZXQgPSBORV9HZXRQdHIoIG1vZHVsZSApOwotICAgICAgICAgICAgICAgIEVSUihmaXh1cCwgIldhcm5pbmc6IG5vIGhhbmRsZXIgZm9yICUuKnMuJXMsIHNldHRpbmcgdG8gMDowXG4iLAorICAgICAgICAgICAgICAgIEVSUihmaXh1cCwgIldhcm5pbmc6IG5vIGhhbmRsZXIgZm9yICUuKnMuJXMsIHNldHRpbmcgdG8gMHhkZWFkYmVlZlxuIiwKICAgICAgICAgICAgICAgICAgICAgKigoQllURSAqKXBUYXJnZXQgKyBwVGFyZ2V0LT5uYW1lX3RhYmxlKSwKICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilwVGFyZ2V0ICsgcFRhcmdldC0+bmFtZV90YWJsZSArIDEsIGZ1bmNfbmFtZSApOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhZGRyZXNzKSBhZGRyZXNzID0gMHhkZWFkYmVlZjsKICAgICAgICAgICAgIGlmIChUUkFDRV9PTihmaXh1cCkpCiAgICAgICAgICAgICB7CiAJICAgICAgICBORV9NT0RVTEUgKnBUYXJnZXQgPSBORV9HZXRQdHIoIG1vZHVsZSApOwpkaWZmIC0tZ2l0IGEvbG9hZGVyL3BlX2ltYWdlLmMgYi9sb2FkZXIvcGVfaW1hZ2UuYwppbmRleCAzMDI3M2NiLi41ZDVhNTFjIDEwMDY0NAotLS0gYS9sb2FkZXIvcGVfaW1hZ2UuYworKysgYi9sb2FkZXIvcGVfaW1hZ2UuYwpAQCAtMzEwLDIyICszMTAsMjQgQEAKIAkJICAgIGludCBvcmRpbmFsID0gSU1BR0VfT1JESU5BTChpbXBvcnRfbGlzdC0+dTEuT3JkaW5hbCk7CiAKIAkJICAgIFRSQUNFKHdpbjMyLCAiLS0tIE9yZGluYWwgJXMsJWRcbiIsIG5hbWUsIG9yZGluYWwpOwotCQkgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb249KExQRFdPUkQpTU9EVUxFX0dldFByb2NBZGRyZXNzMzIoCisJCSAgICB0aHVua19saXN0LT51MS5GdW5jdGlvbj1NT0RVTEVfR2V0UHJvY0FkZHJlc3MzMigKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIGhJbXBNb2R1bGUsIChMUENTVFIpb3JkaW5hbAogCQkgICAgKTsKIAkJICAgIGlmICghdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24pIHsKLQkJCUVSUih3aW4zMiwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkLCBzZXR0aW5nIHRvIE5VTExcbiIsCisJCQlFUlIod2luMzIsIk5vIGltcGxlbWVudGF0aW9uIGZvciAlcy4lZCwgc2V0dGluZyB0byAweGRlYWRiZWVmXG4iLAogCQkJCW5hbWUsIG9yZGluYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24gPSAoRkFSUFJPQzMyKTB4ZGVhZGJlZWY7CiAJCSAgICB9CiAJCX0gZWxzZSB7CQkvKiBpbXBvcnQgYnkgbmFtZSAqLwogCQkgICAgcGVfbmFtZSA9IChMUElNQUdFX0lNUE9SVF9CWV9OQU1FKVJWQShpbXBvcnRfbGlzdC0+dTEuQWRkcmVzc09mRGF0YSk7CiAJCSAgICBUUkFDRSh3aW4zMiwgIi0tLSAlcyAlcy4lZFxuIiwgcGVfbmFtZS0+TmFtZSwgbmFtZSwgcGVfbmFtZS0+SGludCk7Ci0JCSAgICB0aHVua19saXN0LT51MS5GdW5jdGlvbj0oTFBEV09SRClNT0RVTEVfR2V0UHJvY0FkZHJlc3MzMigKKwkJICAgIHRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uPU1PRFVMRV9HZXRQcm9jQWRkcmVzczMyKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaEltcE1vZHVsZSwgcGVfbmFtZS0+TmFtZQogCQkgICAgKTsKIAkJICAgIGlmICghdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24pIHsKLQkJCUVSUih3aW4zMiwiTm8gaW1wbGVtZW50YXRpb24gZm9yICVzLiVkKCVzKSwgc2V0dGluZyB0byBOVUxMXG4iLAorCQkJRVJSKHdpbjMyLCJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQoJXMpLCBzZXR0aW5nIHRvIDB4ZGVhZGJlZWZcbiIsCiAJCQkJbmFtZSxwZV9uYW1lLT5IaW50LHBlX25hbWUtPk5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24gPSAoRkFSUFJPQzMyKTB4ZGVhZGJlZWY7CiAJCSAgICB9CiAJCX0KIAkJaW1wb3J0X2xpc3QrKzsKQEAgLTM0MCwyMyArMzQyLDI1IEBACiAJCSAgICBpbnQgb3JkaW5hbCA9IElNQUdFX09SRElOQUwodGh1bmtfbGlzdC0+dTEuT3JkaW5hbCk7CiAKIAkJICAgIFRSQUNFKHdpbjMyLCItLS0gT3JkaW5hbCAlcy4lZFxuIixuYW1lLG9yZGluYWwpOwotCQkgICAgdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb249KExQRFdPUkQpTU9EVUxFX0dldFByb2NBZGRyZXNzMzIoCisJCSAgICB0aHVua19saXN0LT51MS5GdW5jdGlvbj1NT0RVTEVfR2V0UHJvY0FkZHJlc3MzMigKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIGhJbXBNb2R1bGUsIChMUENTVFIpIG9yZGluYWwKIAkJICAgICk7CiAJCSAgICBpZiAoIXRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uKSB7Ci0JCQlFUlIod2luMzIsICJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQsIHNldHRpbmcgdG8gTlVMTFxuIiwKKwkJCUVSUih3aW4zMiwgIk5vIGltcGxlbWVudGF0aW9uIGZvciAlcy4lZCwgc2V0dGluZyB0byAweGRlYWRiZWVmXG4iLAogCQkJCW5hbWUsb3JkaW5hbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHVua19saXN0LT51MS5GdW5jdGlvbiA9IChGQVJQUk9DMzIpMHhkZWFkYmVlZjsKIAkJICAgIH0KIAkJfSBlbHNlIHsKIAkJICAgIHBlX25hbWU9KExQSU1BR0VfSU1QT1JUX0JZX05BTUUpIFJWQSh0aHVua19saXN0LT51MS5BZGRyZXNzT2ZEYXRhKTsKIAkJICAgIFRSQUNFKHdpbjMyLCItLS0gJXMgJXMuJWRcbiIsCiAJCSAgIAkJICBwZV9uYW1lLT5OYW1lLG5hbWUscGVfbmFtZS0+SGludCk7Ci0JCSAgICB0aHVua19saXN0LT51MS5GdW5jdGlvbj0oTFBEV09SRClNT0RVTEVfR2V0UHJvY0FkZHJlc3MzMigKKwkJICAgIHRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uPU1PRFVMRV9HZXRQcm9jQWRkcmVzczMyKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzcywgaEltcE1vZHVsZSwgcGVfbmFtZS0+TmFtZQogCQkgICAgKTsKIAkJICAgIGlmICghdGh1bmtfbGlzdC0+dTEuRnVuY3Rpb24pIHsKLQkJICAgIAlFUlIod2luMzIsICJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQsIHNldHRpbmcgdG8gTlVMTFxuIiwKKwkJICAgIAlFUlIod2luMzIsICJObyBpbXBsZW1lbnRhdGlvbiBmb3IgJXMuJWQsIHNldHRpbmcgdG8gMHhkZWFkYmVlZlxuIiwKIAkJCQluYW1lLCBwZV9uYW1lLT5IaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRodW5rX2xpc3QtPnUxLkZ1bmN0aW9uID0gKEZBUlBST0MzMikweGRlYWRiZWVmOwogCQkgICAgfQogCQl9CiAJCXRodW5rX2xpc3QrKzsKZGlmZiAtLWdpdCBhL21lbW9yeS9zZWxlY3Rvci5jIGIvbWVtb3J5L3NlbGVjdG9yLmMKaW5kZXggZjYyOTBkOC4uZGJlNjhmZSAxMDA2NDQKLS0tIGEvbWVtb3J5L3NlbGVjdG9yLmMKKysrIGIvbWVtb3J5L3NlbGVjdG9yLmMKQEAgLTE3OSw2ICsxNzksOCBAQAogICAgICAgICAgICAgV0FSTihzZWxlY3RvciwgIkZyZWVpbmcgJSVmcyBzZWxlY3RvciAoJTA0eCksIG5vdCBnb29kLlxuIiwgZnMgKTsKICAgICAgICAgICAgIFNFVF9GUyggMCApOwogICAgICAgICB9CisgICAgICAgIGZzID0gVEhSRUFEX0N1cnJlbnQoKS0+c2F2ZWRfZnM7CisgICAgICAgIGlmICgoZnMgPj0gc2VsKSAmJiAoZnMgPCBuZXh0c2VsKSkgVEhSRUFEX0N1cnJlbnQoKS0+c2F2ZWRfZnMgPSAwOwogICAgICAgICBHRVRfR1MoZ3MpOwogICAgICAgICBpZiAoKGdzID49IHNlbCkgJiYgKGdzIDwgbmV4dHNlbCkpIFNFVF9HUyggMCApOwogICAgIH0KZGlmZiAtLWdpdCBhL21pc2MvYXNwaS5jIGIvbWlzYy9hc3BpLmMKaW5kZXggYWFkN2YwNS4uZTQ1OTJhOSAxMDA2NDQKLS0tIGEvbWlzYy9hc3BpLmMKKysrIGIvbWlzYy9hc3BpLmMKQEAgLTQ3NSw4ICs0NzUsOSBAQAogICAgICAgIFVuTWFwTFMoc3BTUkIpOwogfQogCi12b2lkIEFTUElfRE9TX0hhbmRsZUludChDT05URVhUICpjb250ZXh0KQorCiAvKiByZXR1cm5zIGEgcmVhbCBtb2RlIGNhbGwgYWRkcmVzcyB0byBBU1BJX0RPU19mdW5jKCkgKi8KK3ZvaWQgQVNQSV9ET1NfSGFuZGxlSW50KENPTlRFWFQgKmNvbnRleHQpCiB7CiAjaWZkZWYgbGludXgKICAgICAgICBGQVJQUk9DMTYgRE9TX2Z1bmM7CkBAIC00OTcsMyArNDk4LDE5IEBACiAgICAgICAgU0VUX0NGTEFHKGNvbnRleHQpOwogI2VuZGlmCiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgR2V0QVNQSTMyU3VwcG9ydEluZm8JCVtXTkFTUEkzMi4wXQorICoKKyAqIENoZWNrcyBpZiB0aGUgQVNQSSBzdWJzeXN0ZW0gaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LgorICoKKyAqIFJFVFVSTlMKKyAqICAgIEhJV09SRDogMC4KKyAqICAgIEhJQllURSBvZiBMT1dPUkQ6IHN0YXR1cyAoU1NfQ09NUCBvciBTU19GQUlMRURfSU5JVCkKKyAqICAgIExPQllURSBvZiBMT1dPUkQ6ICMgb2YgaG9zdCBhZGFwdGVycy4gIAorICovCitEV09SRCBXSU5BUEkgR2V0QVNQSTMyU3VwcG9ydEluZm8oKQoreworICAgIHJldHVybiAoU1NfQ09NUCA8PCA4KSB8IDE7IC8qIEZJWE1FOiBnZXQgIyBvZiBob3N0IGFkYXB0ZXJzIGluc3RhbGxlZCAqLworfQorCmRpZmYgLS1naXQgYS9taXNjL2NvbW1kbGcuYyBiL21pc2MvY29tbWRsZy5jCmluZGV4IDAzZTU3ZjkuLmRiMjEzNzcgMTAwNjQ0Ci0tLSBhL21pc2MvY29tbWRsZy5jCisrKyBiL21pc2MvY29tbWRsZy5jCkBAIC0xNDQ3LDcgKzE0NDcsMTMgQEAKIEJPT0wzMiBXSU5BUEkgUHJpbnREbGczMkEoIExQUFJJTlRETEczMkEgcHJpbnRkbGcgKQogewogICAgIEZJWE1FKGNvbW1kbGcsICJlbXB0eSBzdHViXG4iICk7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIC8qIEFsdG91Z2ggcmV0dXJuaW5nIEZBTFNFIGlzIHRoZW9yaWNhbHkgdGhlIHJpZ2h0IHRoaW5nCisgICAgICogbW9zdCBwcm9ncmFtcyBjaGVjayBmb3IgYSBwcmludGVyIGF0IHN0YXJ0dXAsIGFuZCBpZgorICAgICAqIG5vbmUgaXMgZm91bmQgcG9wdXAgUHJpbnREbGczMkEoKSwgaWYgaXQgZmFpbHMgdGhlIHByb2dyYW0KKyAgICAgKiB0ZXJtaW5hdGVzOyBieSByZXR1cm5pbmcgVFJVRSB0aGUgcHJvZ3JhbXMgY2FuIHN0aWxsIHJ1bgorICAgICAqIGFzIGxvbmcgYXMgbm8gcHJpbnRlciByZWxhdGVkIHN0dWZmIGlzIHVzZWQKKyAgICAgKi8gCisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIApAQCAtMzYzMSw3ICszNjM3LDcgQEAKIH0KIAogCi1zdGF0aWMgQk9PTDMyIENvbW1kbGdfR2V0RmlsZU5hbWUzMkEoIEJPT0wxNiAoKmRvZnVuY3Rpb24pKCksCitzdGF0aWMgQk9PTDMyIENvbW1kbGdfR2V0RmlsZU5hbWUzMkEoIEJPT0wxNiAoQ0FMTEJBQ0sgKmRvZnVuY3Rpb24pKFNFR1BUUiB4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBPUEVORklMRU5BTUUzMkEgb2ZuICkKIHsKIAlCT09MMTYgcmV0OwpAQCAtMzY2MSw4ICszNjY3LDggQEAKIAkJcyA9IChMUFNUUilvZm4tPmxwc3RyQ3VzdG9tRmlsdGVyOwogCQl3aGlsZSAoKnMpCiAJCQlzID0gcytzdHJsZW4ocykrMTsKLQkJeCA9IFNFR1BUUl9BTExPQyhzLW9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpOwogCQlzKys7CisJCXggPSBTRUdQVFJfQUxMT0Mocy1vZm4tPmxwc3RyQ3VzdG9tRmlsdGVyKTsKIAkJbWVtY3B5KHgsb2ZuLT5scHN0ckN1c3RvbUZpbHRlcixzLW9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpOwogCQlvZm4xNi0+bHBzdHJDdXN0b21GaWx0ZXIgPSBTRUdQVFJfR0VUKHgpOwogCX0KQEAgLTM3MjEsNyArMzcyNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIEJPT0wzMiBDb21tZGxnX0dldEZpbGVOYW1lMzJXKCBCT09MMTYgKCpkb2Z1bmN0aW9uKSgpLCAKK3N0YXRpYyBCT09MMzIgQ29tbWRsZ19HZXRGaWxlTmFtZTMyVyggQk9PTDE2IChDQUxMQkFDSyAqZG9mdW5jdGlvbikoU0VHUFRSIHgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBPUEVORklMRU5BTUUzMlcgb2ZuICkKIHsKIAlCT09MMTYgcmV0OwpAQCAtMzgzMCw3ICszODM2LDcgQEAKICAqLwogQk9PTDMyIFdJTkFQSSBHZXRPcGVuRmlsZU5hbWUzMkEoIExQT1BFTkZJTEVOQU1FMzJBIG9mbiApCiB7Ci0gICBCT09MMTYgKFdJTkFQSSAqIGRvZnVuY3Rpb24pKFNFR1BUUiBvZm4xNikgPSBHZXRPcGVuRmlsZU5hbWUxNjsKKyAgIEJPT0wxNiAoQ0FMTEJBQ0sgKiBkb2Z1bmN0aW9uKShTRUdQVFIgb2ZuMTYpID0gR2V0T3BlbkZpbGVOYW1lMTY7CiAgICByZXR1cm4gQ29tbWRsZ19HZXRGaWxlTmFtZTMyQShkb2Z1bmN0aW9uLG9mbik7CiB9CiAKQEAgLTM4MzksNyArMzg0NSw3IEBACiAgKi8KIEJPT0wzMiBXSU5BUEkgR2V0T3BlbkZpbGVOYW1lMzJXKCBMUE9QRU5GSUxFTkFNRTMyVyBvZm4gKQogewotICAgQk9PTDE2IChXSU5BUEkgKiBkb2Z1bmN0aW9uKShTRUdQVFIgb2ZuMTYpID0gR2V0T3BlbkZpbGVOYW1lMTY7CisgICBCT09MMTYgKENBTExCQUNLICogZG9mdW5jdGlvbikoU0VHUFRSIG9mbjE2KSA9IEdldE9wZW5GaWxlTmFtZTE2OwogICAgcmV0dXJuIENvbW1kbGdfR2V0RmlsZU5hbWUzMlcoZG9mdW5jdGlvbixvZm4pOwogfQogCkBAIC0zODQ4LDcgKzM4NTQsNyBAQAogICovCiBCT09MMzIgV0lOQVBJIEdldFNhdmVGaWxlTmFtZTMyQSggTFBPUEVORklMRU5BTUUzMkEgb2ZuICkKIHsKLSAgIEJPT0wxNiAoV0lOQVBJICogZG9mdW5jdGlvbikoU0VHUFRSIG9mbjE2KSA9IEdldFNhdmVGaWxlTmFtZTE2OworICAgQk9PTDE2IChDQUxMQkFDSyAqIGRvZnVuY3Rpb24pKFNFR1BUUiBvZm4xNikgPSBHZXRTYXZlRmlsZU5hbWUxNjsKICAgIHJldHVybiBDb21tZGxnX0dldEZpbGVOYW1lMzJBKGRvZnVuY3Rpb24sb2ZuKTsKIH0KIApAQCAtMzg1Nyw3ICszODYzLDcgQEAKICAqLwogQk9PTDMyIFdJTkFQSSBHZXRTYXZlRmlsZU5hbWUzMlcoIExQT1BFTkZJTEVOQU1FMzJXIG9mbiApCiB7Ci0gICBCT09MMTYgKFdJTkFQSSAqIGRvZnVuY3Rpb24pKFNFR1BUUiBvZm4xNikgPSBHZXRTYXZlRmlsZU5hbWUxNjsKKyAgIEJPT0wxNiAoQ0FMTEJBQ0sgKiBkb2Z1bmN0aW9uKShTRUdQVFIgb2ZuMTYpID0gR2V0U2F2ZUZpbGVOYW1lMTY7CiAgICByZXR1cm4gQ29tbWRsZ19HZXRGaWxlTmFtZTMyVyhkb2Z1bmN0aW9uLG9mbik7CiB9CiAKZGlmZiAtLWdpdCBhL21pc2MvZGVidWdzdHIuYyBiL21pc2MvZGVidWdzdHIuYwppbmRleCA3ODgyYjBmLi5iNzUxYjQ2IDEwMDY0NAotLS0gYS9taXNjL2RlYnVnc3RyLmMKKysrIGIvbWlzYy9kZWJ1Z3N0ci5jCkBAIC0xODIsNCArMTgyLDMgQEAKICAgZnB1dGMgKCciJywgc3RkZXJyKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvbWlzYy9pbWFnZWxpc3QuYyBiL21pc2MvaW1hZ2VsaXN0LmMKaW5kZXggMDUxNGMwZi4uNGMzMTI1ZCAxMDA2NDQKLS0tIGEvbWlzYy9pbWFnZWxpc3QuYworKysgYi9taXNjL2ltYWdlbGlzdC5jCkBAIC0zMCw5ICszMCw3IEBACiAgKiBhbiBlbXB0eSBzdHJ1Y3R1cmUuIEl0J3MganVzdCB0byBrZWVwIGNvbXBhdGliaWxpdHkuCiAgKi8KICNkZWZpbmUgX19XSU5FX0lNQUdFTElTVF9DCi0gCi0vKiBUaGlzIG11c3QgYmUgZGVmaW5lZCB1bnRpbCAiR2V0SWNvbkluZm8iIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZC4gKi8KLSNkZWZpbmUgX19HRVRfSUNPTl9JTkZPX0hBQ0tfXyAKKwogIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJjb21wb2JqLmgiCkBAIC00MSwxMCArMzksNiBAQAogI2luY2x1ZGUgImNvbW1jdHJsLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAotI2lmZGVmIF9fR0VUX0lDT05fSU5GT19IQUNLX18KLSNpbmNsdWRlICJiaXRtYXAuaCIKLSNlbmRpZgotCiAKICNkZWZpbmUgX01BWChhLGIpICgoKGEpPihiKSk/KGEpOihiKSkKICNkZWZpbmUgX01JTihhLGIpICgoKGEpPihiKSk/KGIpOihhKSkKQEAgLTExMiw3ICsxMDYsNyBAQAogCiAgICAgaWYgKGhpbWwtPmhibU1hc2spIHsKICAgICAgICAgaGJtTmV3Qml0bWFwID0gCi0gICAgICAgICAgICBDcmVhdGVCaXRtYXAzMiAobk5ld1dpZHRoLCBoaW1sLT5jeSwgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CisgICAgICAgICAgICBDcmVhdGVCaXRtYXAzMiAobk5ld1dpZHRoLCBoaW1sLT5jeSwgMSwgMSwgTlVMTCk7CiAKICAgICAgICAgaWYgKGhibU5ld0JpdG1hcCA9PSAwKQogICAgICAgICAgICAgRVJSIChpbWFnZWxpc3QsICJjcmVhdGluZyBuZXcgbWFzayBiaXRtYXAhIik7CkBAIC00MzgsNyArNDMyLDcgQEAKICAgICAgICAgaGJtVGVtcEltYWdlID0gQ3JlYXRlQml0bWFwMzIgKGhpbWxTcmMtPmN4LCBoaW1sU3JjLT5jeSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbWxTcmMtPnVCaXRzUGl4ZWwsIE5VTEwpOwogICAgICAgICBoYm1UZW1wTWFzayA9IENyZWF0ZUJpdG1hcDMyIChoaW1sU3JjLT5jeCwgaGltbFNyYy0+Y3ksIDEsCi0JCQkJICAgICAgaGltbFNyYy0+dUJpdHNQaXhlbCwgTlVMTCk7CisJCQkJICAgICAgMSwgTlVMTCk7CiAKICAgICAgICAgLyogY29weSAoYW5kIHN0cmV0Y2gpIGRlc3RpbmF0aW9uIHRvIHRlbXBvcmFyeSBiaXRtYXBzLihzYXZlKSAqLwogICAgICAgICAvKiBpbWFnZSAqLwpAQCAtNTQ2LDYgKzU0MCw4IEBACiAgICAgICAgIHsweDU1NTUsIDB4QUFBQSwgMHg1NTU1LCAweEFBQUEsIDB4NTU1NSwgMHhBQUFBLCAweDU1NTUsIDB4QUFBQSwKICAgICAgICAgIDB4NTU1NSwgMHhBQUFBLCAweDU1NTUsIDB4QUFBQSwgMHg1NTU1LCAweEFBQUEsIDB4NTU1NSwgMHhBQUFBfTsKIAorICAgIFRSQUNFIChpbWFnZWxpc3QsICIoJWQgJWQgMHgleCAlZCAlZClcbiIsIGN4LCBjeSwgZmxhZ3MsIGNJbml0aWFsLCBjR3Jvdyk7CisKICAgICBoaW1sID0gKEhJTUFHRUxJU1QpTG9jYWxBbGxvYzMyIChMTUVNX0ZJWEVEIHwgTE1FTV9aRVJPSU5JVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IF9JTUFHRUxJU1QpKTsKICAgICBpZiAoIWhpbWwpCkBAIC01NzksNyArNTc1LDcgQEAKIAogICAgIGlmIChoaW1sLT5mbGFncyAmIElMQ19NQVNLKSB7CiAgICAgICAgIGhpbWwtPmhibU1hc2sgPSBDcmVhdGVCaXRtYXAzMiAoaGltbC0+Y3ggKiBoaW1sLT5jTWF4SW1hZ2UsIGhpbWwtPmN5LAotCQkJCQkxLCBoaW1sLT51Qml0c1BpeGVsLCBOVUxMKTsKKwkJCQkJMSwgMSwgTlVMTCk7CiAgICAgICAgIGlmIChoaW1sLT5oYm1NYXNrID09IDApIHsKICAgICAgICAgICAgIEVSUihpbWFnZWxpc3QsICJFcnJvciBjcmVhdGluZyBtYXNrIGJpdG1hcCFcbiIpOwogICAgICAgICAgICAgaWYgKGhpbWwtPmhibUltYWdlKQpAQCAtMTI0Miw3ICsxMjM4LDcgQEAKICAgICBpaS54SG90c3BvdCA9IDA7CiAgICAgaWkueUhvdHNwb3QgPSAwOwogICAgIGlpLmhibU1hc2sgID0gQ3JlYXRlQml0bWFwMzIgKG5XaWR0aCwgbkhlaWdodCwgMSwgMSwgTlVMTCk7Ci0gICAgaWkuaGJtQ29sb3IgPSBDcmVhdGVCaXRtYXAzMiAobldpZHRoLCBuSGVpZ2h0LCAxLCAxLCBOVUxMKTsKKyAgICBpaS5oYm1Db2xvciA9IENyZWF0ZUJpdG1hcDMyIChuV2lkdGgsIG5IZWlnaHQsIDEsIGhpbWwtPnVCaXRzUGl4ZWwsIE5VTEwpOwogCiAgICAgaGRjID0gQ3JlYXRlQ29tcGF0aWJsZURDMzIoMCk7CiAKQEAgLTE0MzEsMzYgKzE0MjcsMTYgQEAKICAgICAgICAgSW1hZ2VMaXN0X0FkZE1hc2tlZCAoaGltbCwgKEhCSVRNQVAzMiloYW5kbGUsIGNsck1hc2spOwogICAgIH0KICAgICBlbHNlIGlmICgodVR5cGUgPT0gSU1BR0VfSUNPTikgfHwgKHVUeXBlID09IElNQUdFX0NVUlNPUikpIHsKLSNpZmRlZiBfX0dFVF9JQ09OX0lORk9fSEFDS19fCi0gICAgICAgIEhCSVRNQVAzMiBoYm1JbWFnZTsKLSAgICAgICAgSEJJVE1BUDMyIGhibU1hc2s7Ci0gICAgICAgIENVUlNPUklDT05JTkZPICpwdHI7Ci0KLSAgICAgICAgaWYgKCEocHRyID0gKENVUlNPUklDT05JTkZPICopR2xvYmFsTG9jazE2KGhhbmRsZSkpKSByZXR1cm4gKE5VTEwpOwotICAgICAgICBoYm1NYXNrICA9IENyZWF0ZUJpdG1hcDMyIChwdHItPm5XaWR0aCwgcHRyLT5uSGVpZ2h0LCAxLCAxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikocHRyICsgMSkpOwotICAgICAgICBoYm1JbWFnZSA9IENyZWF0ZUJpdG1hcDMyIChwdHItPm5XaWR0aCwgcHRyLT5uSGVpZ2h0LCBwdHItPmJQbGFuZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ci0+YkJpdHNQZXJQaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikocHRyICsgMSkgKyBwdHItPm5IZWlnaHQgKiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUTUFQX1dJRFRIX0JZVEVTKHB0ci0+bldpZHRoLCAxKSk7Ci0gICAgICAgIEdsb2JhbFVubG9jazE2IChoYW5kbGUpOwotICAgICAgICBoaW1sID0gSW1hZ2VMaXN0X0NyZWF0ZSAocHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElMQ19NQVNLIHwgSUxDX0NPTE9SLCAxLCBjR3Jvdyk7Ci0gICAgICAgIEltYWdlTGlzdF9BZGQgKGhpbWwsIGhibUltYWdlLCBoYm1NYXNrKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGhibUltYWdlKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGhibU1hc2spOwotI2Vsc2UKLSAgICAgICAgSUNPTklORk8zMiBpaTsKKyAgICAgICAgSUNPTklORk8gaWk7CiAgICAgICAgIEJJVE1BUDMyIGJtcDsKIAotICAgICAgICBHZXRJY29uSW5mbyAoaEljb24sICZpaSk7Ci0gICAgICAgIEdldE9iamVjdDMyQSAoaWktPmhibUNvbG9yLCBzaXplb2YoQklUTUFQMzIpLCAoTFBWT0lEKSZibXApOworICAgICAgICBHZXRJY29uSW5mbyAoaGFuZGxlLCAmaWkpOworICAgICAgICBHZXRPYmplY3QzMkEgKGlpLmhibUNvbG9yLCBzaXplb2YoQklUTUFQMzIpLCAoTFBWT0lEKSZibXApOwogICAgICAgICBoaW1sID0gSW1hZ2VMaXN0X0NyZWF0ZSAoYm1wLmJtV2lkdGgsIGJtcC5ibUhlaWdodCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTENfTUFTSyB8IElMQ19DT0xPUiwgMSwgY0dyb3cpOwotICAgICAgICBJbWFnZUxpc3RfQWRkIChoaW1sLCBpaS0+aGJtQ29sb3IsIGlpLT5oYm1NYXNrKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGlpLT5oYm1Db2xvcik7Ci0gICAgICAgIERlbGV0ZU9iamVjdDMyIChpaS0+aGJtTWFzayk7Ci0jZW5kaWYKKyAgICAgICAgSW1hZ2VMaXN0X0FkZCAoaGltbCwgaWkuaGJtQ29sb3IsIGlpLmhibU1hc2spOworICAgICAgICBEZWxldGVPYmplY3QzMiAoaWkuaGJtQ29sb3IpOworICAgICAgICBEZWxldGVPYmplY3QzMiAoaWkuaGJtTWFzayk7CiAgICAgfQogCiAgICAgRGVsZXRlT2JqZWN0MzIgKGhhbmRsZSk7CkBAIC0xNTE1LDM2ICsxNDkxLDE2IEBACiAgICAgICAgIEltYWdlTGlzdF9BZGRNYXNrZWQgKGhpbWwsIChIQklUTUFQMzIpaGFuZGxlLCBjbHJNYXNrKTsKICAgICB9CiAgICAgZWxzZSBpZiAoKHVUeXBlID09IElNQUdFX0lDT04pIHx8ICh1VHlwZSA9PSBJTUFHRV9DVVJTT1IpKSB7Ci0jaWZkZWYgX19HRVRfSUNPTl9JTkZPX0hBQ0tfXwotICAgICAgICBIQklUTUFQMzIgaGJtSW1hZ2U7Ci0gICAgICAgIEhCSVRNQVAzMiBoYm1NYXNrOwotICAgICAgICBDVVJTT1JJQ09OSU5GTyAqcHRyOwotCi0gICAgICAgIGlmICghKHB0ciA9IChDVVJTT1JJQ09OSU5GTyAqKUdsb2JhbExvY2sxNihoYW5kbGUpKSkgcmV0dXJuIChOVUxMKTsKLSAgICAgICAgaGJtTWFzayAgPSBDcmVhdGVCaXRtYXAzMiAocHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgMSwgMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKHB0ciArIDEpKTsKLSAgICAgICAgaGJtSW1hZ2UgPSBDcmVhdGVCaXRtYXAzMiAocHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwgcHRyLT5iUGxhbmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHItPmJCaXRzUGVyUGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKHB0ciArIDEpICsgcHRyLT5uSGVpZ2h0ICogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVE1BUF9XSURUSF9CWVRFUyhwdHItPm5XaWR0aCwgMSkpOwotICAgICAgICBoaW1sID0gSW1hZ2VMaXN0X0NyZWF0ZSAocHRyLT5uV2lkdGgsIHB0ci0+bkhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElMQ19NQVNLIHwgSUxDX0NPTE9SLCAxLCBjR3Jvdyk7Ci0gICAgICAgIEltYWdlTGlzdF9BZGQgKGhpbWwsIGhibUltYWdlLCBoYm1NYXNrKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGhibUltYWdlKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGhibU1hc2spOwotICAgICAgICBHbG9iYWxVbmxvY2sxNiAoaGFuZGxlKTsKLSNlbHNlCi0gICAgICAgIElDT05JTkZPMzIgaWk7CisgICAgICAgIElDT05JTkZPIGlpOwogICAgICAgICBCSVRNQVAzMiBibXA7CiAKLSAgICAgICAgR2V0SWNvbkluZm8gKGhJY29uLCAmaWkpOwotICAgICAgICBHZXRPYmplY3QzMkEgKGlpLT5oYm1NYXNrLCBzaXplb2YoQklUTUFQMzIpLCAoTFBWT0lEKSZibXApOworICAgICAgICBHZXRJY29uSW5mbyAoaGFuZGxlLCAmaWkpOworICAgICAgICBHZXRPYmplY3QzMkEgKGlpLmhibU1hc2ssIHNpemVvZihCSVRNQVAzMiksIChMUFZPSUQpJmJtcCk7CiAgICAgICAgIGhpbWwgPSBJbWFnZUxpc3RfQ3JlYXRlIChibXAuYm1XaWR0aCwgYm1wLmJtSGVpZ2h0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElMQ19NQVNLIHwgSUxDX0NPTE9SLCAxLCBjR3Jvdyk7Ci0gICAgICAgIEltYWdlTGlzdF9BZGQgKGhpbWwsIGlpLT5oYm1Db2xvciwgaWktPmhibU1hc2spOwotICAgICAgICBEZWxldGVPYmplY3QzMiAoaWktPmhibUNvbG9yKTsKLSAgICAgICAgRGVsZXRlT2JqZWN0MzIgKGlpLT5oYm1NYXNrKTsKLSNlbmRpZgorICAgICAgICBJbWFnZUxpc3RfQWRkIChoaW1sLCBpaS5oYm1Db2xvciwgaWkuaGJtTWFzayk7CisgICAgICAgIERlbGV0ZU9iamVjdDMyIChpaS5oYm1Db2xvcik7CisgICAgICAgIERlbGV0ZU9iamVjdDMyIChpaS5oYm1NYXNrKTsKICAgICB9CiAKICAgICBEZWxldGVPYmplY3QzMiAoaGFuZGxlKTsKQEAgLTE3NDcsNyArMTcwMyw3IEBACiAgICAgICAgICAgICBEZWxldGVPYmplY3QzMiAoaGltbC0+aGJtTWFzayk7CiAgICAgICAgICAgICBoaW1sLT5oYm1NYXNrID0KICAgICAgICAgICAgICAgICBDcmVhdGVCaXRtYXAzMiAoaGltbC0+Y01heEltYWdlICogaGltbC0+Y3gsIGhpbWwtPmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBoaW1sLT51Qml0c1BpeGVsLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwgTlVMTCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xNzY2LDcgKzE3MjIsNyBAQAogICAgICAgICAgICAgQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKGhpbWwtPmhibU1hc2spCi0gICAgICAgICAgICBoYm1OZXdNYXNrID0gQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgaGltbC0+dUJpdHNQaXhlbCwgTlVMTCk7CisgICAgICAgICAgICBoYm1OZXdNYXNrID0gQ3JlYXRlQml0bWFwMzIgKGN4TmV3LCBoaW1sLT5jeSwgMSwgMSwgTlVMTCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGhibU5ld01hc2sgPSAwOyAgLyogSnVzdCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5ISAqLwogCkBAIC0xOTA3LDM2ICsxODYzLDIxIEBACiB7CiAgICAgSERDMzIgICAgIGhkY0ltYWdlTGlzdCwgaGRjSW1hZ2U7CiAgICAgSU5UMzIgICAgIG5JbmRleDsKLSNpZmRlZiBfX0dFVF9JQ09OX0lORk9fSEFDS19fCi0gICAgSEJJVE1BUDMyIGhibUltYWdlOwotICAgIEhCSVRNQVAzMiBoYm1NYXNrOwotICAgIENVUlNPUklDT05JTkZPICpwdHI7Ci0jZWxzZSAgICAKLSAgICBJQ09OSU5GTzMyIGlpOworICAgIEhCSVRNQVAzMiBoYm1PbGRTcmMsIGhibU9sZERzdDsKKyAgICBJQ09OSU5GTyBpaTsKICAgICBCSVRNQVAzMiBibXA7Ci0jZW5kaWYKIAotICAgIFRSQUNFIChpbWFnZWxpc3QsICIoMHgleCAweCV4IDB4JXgpXG4iLCBoaW1sLCBpLCBoSWNvbik7CisgICAgVFJBQ0UgKGltYWdlbGlzdCwgIigweCVseCAweCV4IDB4JXgpXG4iLCAoRFdPUkQpaGltbCwgaSwgaEljb24pOwogCiAgICAgaWYgKGhpbWwgPT0gTlVMTCkgcmV0dXJuICgtMSk7CiAgICAgaWYgKChpID49IGhpbWwtPmNDdXJJbWFnZSkgfHwgKGkgPCAtMSkpIHJldHVybiAoLTEpOwogCi0jaWZkZWYgX19HRVRfSUNPTl9JTkZPX0hBQ0tfXwotICAgIGlmICghKHB0ciA9IChDVVJTT1JJQ09OSU5GTyAqKUdsb2JhbExvY2sxNihoSWNvbikpKSByZXR1cm4gKC0xKTsKLSAgICBoYm1NYXNrICA9IENyZWF0ZUJpdG1hcDMyIChwdHItPm5XaWR0aCwgcHRyLT5uSGVpZ2h0LCAxLCAxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKShwdHIgKyAxKSk7Ci0gICAgaWYgKCEoaGJtTWFzaykpCi0JRVJSIChpbWFnZWxpc3QsICIgbm8gbWFzayFcbiIpOwotICAgIGhibUltYWdlID0gQ3JlYXRlQml0bWFwMzIgKHB0ci0+bldpZHRoLCBwdHItPm5IZWlnaHQsIHB0ci0+YlBsYW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHItPmJCaXRzUGVyUGl4ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikocHRyICsgMSkgKyBwdHItPm5IZWlnaHQgKiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRNQVBfV0lEVEhfQllURVMocHRyLT5uV2lkdGgsIDEpKTsKLSAgICBpZiAoIShoYm1NYXNrKSkKLQlFUlIgKGltYWdlbGlzdCwgIiBubyBpbWFnZSFcbiIpOwotI2Vsc2UKICAgICBHZXRJY29uSW5mbyAoaEljb24sICZpaSk7Ci0gICAgR2V0T2JqZWN0MzJBIChpaS0+aGJtTWFzaywgc2l6ZW9mKEJJVE1BUDMyKSwgKExQVk9JRCkmYm1wKTsKLSNlbmRpZgorICAgIGlmIChpaS5oYm1NYXNrID09IDApCisJRVJSIChpbWFnZWxpc3QsICJubyBtYXNrIVxuIik7CisgICAgaWYgKGlpLmhibUNvbG9yID09IDApCisJRVJSIChpbWFnZWxpc3QsICJubyBjb2xvciFcbiIpOworICAgIEdldE9iamVjdDMyQSAoaWkuaGJtTWFzaywgc2l6ZW9mKEJJVE1BUDMyKSwgKExQVk9JRCkmYm1wKTsKIAogICAgIGlmIChpID09IC0xKSB7CiAgICAgICAgIGlmIChoaW1sLT5jQ3VySW1hZ2UgKyAxID49IGhpbWwtPmNNYXhJbWFnZSkKQEAgLTE5NDksNDIgKzE4OTAsNDIgQEAKICAgICAgICAgbkluZGV4ID0gaTsKIAogICAgIGhkY0ltYWdlTGlzdCA9IENyZWF0ZUNvbXBhdGlibGVEQzMyICgwKTsKLSAgICBoZGNJbWFnZSA9IENyZWF0ZUNvbXBhdGlibGVEQzMyICgwKTsKKyAgICBUUkFDRSAoaW1hZ2VsaXN0LCAiaGRjSW1hZ2VMaXN0PTB4JXghXG4iLCBoZGNJbWFnZUxpc3QpOworICAgIGlmIChoZGNJbWFnZUxpc3QgPT0gMCkKKwlFUlIgKGltYWdlbGlzdCwgImludmFsaWQgaGRjSW1hZ2VMaXN0IVxuIik7CiAKLSNpZmRlZiBfX0dFVF9JQ09OX0lORk9fSEFDS19fCi0gICAgU2VsZWN0T2JqZWN0MzIgKGhkY0ltYWdlTGlzdCwgaGltbC0+aGJtSW1hZ2UpOwotICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZSwgaGJtSW1hZ2UpOwotICAgIFN0cmV0Y2hCbHQzMiAoaGRjSW1hZ2VMaXN0LCBuSW5kZXggKiBoaW1sLT5jeCwgMCwgaGltbC0+Y3gsIGhpbWwtPmN5LAotICAgICAgICAgICAgICAgICAgaGRjSW1hZ2UsIDAsIDAsIHB0ci0+bldpZHRoLCBwdHItPm5IZWlnaHQsIFNSQ0NPUFkpOwotI2Vsc2UKLSAgICBTZWxlY3RPYmplY3QzMiAoaGRjSW1hZ2UsIGlpLT5oYm1Db2xvcik7CisgICAgaGRjSW1hZ2UgPSBDcmVhdGVDb21wYXRpYmxlREMzMiAoMCk7CisgICAgVFJBQ0UgKGltYWdlbGlzdCwgImhkY0ltYWdlPTB4JXghXG4iLCBoZGNJbWFnZSk7CisgICAgaWYgKGhkY0ltYWdlID09IDApCisJRVJSIChpbWFnZWxpc3QsICJpbnZhbGlkIGhkY0ltYWdlIVxuIik7CisKKyAgICBoYm1PbGREc3QgPSBTZWxlY3RPYmplY3QzMiAoaGRjSW1hZ2VMaXN0LCBoaW1sLT5oYm1JbWFnZSk7CisgICAgU2V0VGV4dENvbG9yMzIoIGhkY0ltYWdlTGlzdCwgUkdCKDAsMCwwKSk7CisgICAgU2V0QmtDb2xvcjMyKCBoZGNJbWFnZUxpc3QsIFJHQigyNTUsMjU1LDI1NSkpOworICAgIGhibU9sZFNyYyA9IFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZSwgaWkuaGJtQ29sb3IpOwogICAgIFN0cmV0Y2hCbHQzMiAoaGRjSW1hZ2VMaXN0LCBuSW5kZXggKiBoaW1sLT5jeCwgMCwgaGltbC0+Y3gsIGhpbWwtPmN5LAogICAgICAgICAgICAgICAgICAgaGRjSW1hZ2UsIDAsIDAsIGJtcC5ibVdpZHRoLCBibXAuYm1IZWlnaHQsIFNSQ0NPUFkpOwotI2VuZGlmCiAKICAgICBpZiAoaGltbC0+aGJtTWFzaykgewotI2lmZGVmIF9fR0VUX0lDT05fSU5GT19IQUNLX18KICAgICAgICAgU2VsZWN0T2JqZWN0MzIgKGhkY0ltYWdlTGlzdCwgaGltbC0+aGJtTWFzayk7Ci0gICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZSwgaGJtTWFzayk7Ci0gICAgICAgIFN0cmV0Y2hCbHQzMiAoaGRjSW1hZ2VMaXN0LCBuSW5kZXggKiBoaW1sLT5jeCwgMCwgaGltbC0+Y3gsIGhpbWwtPmN5LAotICAgICAgICAgICAgICAgICAgICAgIGhkY0ltYWdlLCAwLCAwLCBwdHItPm5XaWR0aCwgcHRyLT5uSGVpZ2h0LCBTUkNDT1BZKTsKLSNlbHNlCi0gICAgICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZSwgaWktPmhibU1hc2spOworICAgICAgICBTZWxlY3RPYmplY3QzMiAoaGRjSW1hZ2UsIGlpLmhibU1hc2spOwogICAgICAgICBTdHJldGNoQmx0MzIgKGhkY0ltYWdlTGlzdCwgbkluZGV4ICogaGltbC0+Y3gsIDAsIGhpbWwtPmN4LCBoaW1sLT5jeSwKICAgICAgICAgICAgICAgICAgICAgICBoZGNJbWFnZSwgMCwgMCwgYm1wLmJtV2lkdGgsIGJtcC5ibUhlaWdodCwgU1JDQ09QWSk7Ci0jZW5kaWYKICAgICB9CiAKLSAgICBEZWxldGVEQzMyIChoZGNJbWFnZUxpc3QpOwotICAgIERlbGV0ZURDMzIgKGhkY0ltYWdlKTsKLSNpZmRlZiBfX0dFVF9JQ09OX0lORk9fSEFDS19fCi0gICAgRGVsZXRlT2JqZWN0MzIgKGhibUltYWdlKTsKLSAgICBEZWxldGVPYmplY3QzMiAoaGJtTWFzayk7Ci0gICAgR2xvYmFsVW5sb2NrMTYgKGhJY29uKTsKLSNlbHNlCi0gICAgRGVsZXRlT2JqZWN0MzIgKGlpLT5oYm1Db2xvcik7Ci0gICAgRGVsZXRlT2JqZWN0MzIgKGlpLT5oYm1NYXNrKTsKLSNlbmRpZgorICAgIFNlbGVjdE9iamVjdDMyIChoZGNJbWFnZSwgaGJtT2xkU3JjKTsKKyAgICBTZWxlY3RPYmplY3QzMiAoaGRjSW1hZ2VMaXN0LCBoYm1PbGREc3QpOworCisgICAgaWYgKGhkY0ltYWdlTGlzdCkKKwlEZWxldGVEQzMyIChoZGNJbWFnZUxpc3QpOworICAgIGlmIChoZGNJbWFnZSkKKwlEZWxldGVEQzMyIChoZGNJbWFnZSk7CisKKy8vICAgIEZJWE1FIChpbWFnZWxpc3QsICJkZWxldGluZyBoYm1Db2xvciFcbiIpOworICAgIERlbGV0ZU9iamVjdDMyIChpaS5oYm1Db2xvcik7CisvLyAgICBGSVhNRSAoaW1hZ2VsaXN0LCAiZGVsZXRlZCBoYm1Db2xvciFcbiIpOworICAgIERlbGV0ZU9iamVjdDMyIChpaS5oYm1NYXNrKTsKKwogICAgIHJldHVybiAobkluZGV4KTsKIH0KIApAQCAtMjA4NCw3ICsyMDI1LDcgQEAKIEJPT0wzMiBXSU5BUEkKIEltYWdlTGlzdF9TZXRGaWx0ZXIgKEhJTUFHRUxJU1QgaGltbCwgSU5UMzIgaSwgRFdPUkQgZHdGaWx0ZXIpCiB7Ci0gICAgRklYTUUgKGltYWdlbGlzdCwgIiglcCAweCUwOHggMHglMDh4KTplbXB0eSBzdHViIVxuIiwKKyAgICBGSVhNRSAoaW1hZ2VsaXN0LCAiKCVwIDB4JXggMHglbHgpOmVtcHR5IHN0dWIhXG4iLAogCSAgIGhpbWwsIGksIGR3RmlsdGVyKTsKIAogICAgIHJldHVybiBGQUxTRTsKQEAgLTIxMzIsNyArMjA3Myw3IEBACiAgICAgICAgIERlbGV0ZU9iamVjdDMyIChoaW1sLT5oYm1NYXNrKTsKICAgICAgICAgaGltbC0+aGJtTWFzayA9CiAgICAgICAgICAgICBDcmVhdGVCaXRtYXAzMiAoaGltbC0+Y01heEltYWdlICogaGltbC0+Y3gsIGhpbWwtPmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGhpbWwtPnVCaXRzUGl4ZWwsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIE5VTEwpOwogICAgIH0KIAogICAgIHJldHVybiAoVFJVRSk7CkBAIC0yMTg5LDcgKzIxMzAsNyBAQAogICAgIGlmIChoaW1sLT5oYm1NYXNrKQogICAgIHsKICAgICAgICAgaGJtTmV3Qml0bWFwID0gQ3JlYXRlQml0bWFwMzIgKG5OZXdDb3VudCAqIGhpbWwtPmN4LCBoaW1sLT5jeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGhpbWwtPnVCaXRzUGl4ZWwsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwgTlVMTCk7CiAgICAgICAgIGlmIChoYm1OZXdCaXRtYXAgIT0gMCkKICAgICAgICAgewogICAgICAgICAgICAgU2VsZWN0T2JqZWN0MzIgKGhkY0ltYWdlTGlzdCwgaGltbC0+aGJtTWFzayk7CmRpZmYgLS1naXQgYS9taXNjL21haW4uYyBiL21pc2MvbWFpbi5jCmluZGV4IDZhNDU5ZGEuLmQ3MTRhYWQgMTAwNjQ0Ci0tLSBhL21pc2MvbWFpbi5jCisrKyBiL21pc2MvbWFpbi5jCkBAIC01MTgsNiArNTE4LDcgQEAKIAogICAgICAgLyogQ3JlYXRlIHdpbmRvdyAqLwogCisgICAgd2luX2F0dHIuYmFja2dyb3VuZF9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwwKTsKICAgICB3aW5fYXR0ci5ldmVudF9tYXNrID0gRXhwb3N1cmVNYXNrIHwgS2V5UHJlc3NNYXNrIHwgS2V5UmVsZWFzZU1hc2sgfAogCSAgICAgICAgICAgICAgICAgUG9pbnRlck1vdGlvbk1hc2sgfCBCdXR0b25QcmVzc01hc2sgfAogCQkJIEJ1dHRvblJlbGVhc2VNYXNrIHwgRW50ZXJXaW5kb3dNYXNrOwpAQCAtNTI2LDcgKzUyNyw3IEBACiAgICAgcm9vdFdpbmRvdyA9IFRTWENyZWF0ZVdpbmRvdyggZGlzcGxheSwgRGVmYXVsdFJvb3RXaW5kb3coZGlzcGxheSksCiAJCQkgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIDAsCiAJCQkgICAgICAgIENvcHlGcm9tUGFyZW50LCBJbnB1dE91dHB1dCwgQ29weUZyb21QYXJlbnQsCi0JCQkgICAgICAgIENXRXZlbnRNYXNrIHwgQ1dDdXJzb3IsICZ3aW5fYXR0ciApOworCQkJICAgICAgICBDV0JhY2tQaXhlbCB8IENXRXZlbnRNYXNrIHwgQ1dDdXJzb3IsICZ3aW5fYXR0ciApOwogCiAgICAgICAvKiBTZXQgd2luZG93IG1hbmFnZXIgcHJvcGVydGllcyAqLwogCmRpZmYgLS1naXQgYS9taXNjL250ZGxsLmMgYi9taXNjL250ZGxsLmMKaW5kZXggZmFlZTRkOC4uNjBmN2Y4YyAxMDA2NDQKLS0tIGEvbWlzYy9udGRsbC5jCisrKyBiL21pc2MvbnRkbGwuYwpAQCAtODMsNyArODMsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsQWRkQWNlCQkJCVtOVERMTF0KICAqLwotRFdPUkQgLyogTlRTVEFUVVMgKi8gIFdJTkFQSSBSdGxBZGRBY2UoTFBBQ0wgYWNsLERXT1JEIHJldixEV09SRCB4bnJvZmFjZXMsCitEV09SRCAvKiBOVFNUQVRVUyAqLyAgCitXSU5BUEkgUnRsQWRkQWNlKExQQUNMIGFjbCxEV09SRCByZXYsRFdPUkQgeG5yb2ZhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBBQ0VfSEVBREVSIGFjZXN0YXJ0LERXT1JEIGFjZWxlbikKIHsKIAlMUEFDRV9IRUFERVIJYWNlLHRhcmdldGFjZTsKQEAgLTEwOCw3ICsxMDksOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsQ3JlYXRlU2VjdXJpdHlEZXNjcmlwdG9yCQlbTlRETExdCiAgKi8KLURXT1JEIC8qIE5UU1RBVFVTICovIFdJTkFQSSBSdGxDcmVhdGVTZWN1cml0eURlc2NyaXB0b3IoTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsRFdPUkQgcmV2KQorRFdPUkQgLyogTlRTVEFUVVMgKi8gCitXSU5BUEkgUnRsQ3JlYXRlU2VjdXJpdHlEZXNjcmlwdG9yKExQU0VDVVJJVFlfREVTQ1JJUFRPUiBscHNkLERXT1JEIHJldikKIHsKIAlpZiAocmV2IT1TRUNVUklUWV9ERVNDUklQVE9SX1JFVklTSU9OKQogCQlyZXR1cm4gU1RBVFVTX1VOS05PV05fUkVWSVNJT047CkBAIC0xMjAsNyArMTIyLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IJCVtOVERMTF0KICAqLwotRFdPUkQgLyogTlRTVEFUVVMgKi8gV0lOQVBJIFJ0bFNldERhY2xTZWN1cml0eURlc2NyaXB0b3IgKCBMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgbHBzZCxCT09MMzIgZGFjbHByZXNlbnQsTFBBQ0wgZGFjbCxCT09MMzIgZGFjbGRlZmF1bHRlZCApCitEV09SRCAvKiBOVFNUQVRVUyAqLyAKK1dJTkFQSSBSdGxTZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yICggTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsQk9PTDMyIGRhY2xwcmVzZW50LExQQUNMIGRhY2wsQk9PTDMyIGRhY2xkZWZhdWx0ZWQgKQogewogCWlmIChscHNkLT5SZXZpc2lvbiE9U0VDVVJJVFlfREVTQ1JJUFRPUl9SRVZJU0lPTikKIAkJcmV0dXJuIFNUQVRVU19VTktOT1dOX1JFVklTSU9OOwpAQCAtMTQyLDcgKzE0NSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBSdGxTZXRTYWNsU2VjdXJpdHlEZXNjcmlwdG9yCQlbTlRETExdCiAgKi8KLURXT1JEIC8qIE5UU1RBVFVTICovIFdJTkFQSSBSdGxTZXRTYWNsU2VjdXJpdHlEZXNjcmlwdG9yICgKK0RXT1JEIC8qIE5UU1RBVFVTICovIAorV0lOQVBJIFJ0bFNldFNhY2xTZWN1cml0eURlc2NyaXB0b3IgKAogTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsQk9PTDMyIHNhY2xwcmVzZW50LExQQUNMIHNhY2wsQk9PTDMyIHNhY2xkZWZhdWx0ZWQKICkKIHsKQEAgLTE2Niw3ICsxNzAsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsU2V0T3duZXJTZWN1cml0eURlc2NyaXB0b3IJCVtOVERMTF0KICAqLwotRFdPUkQgLyogTlRTVEFUVVMgKi8gV0lOQVBJIFJ0bFNldE93bmVyU2VjdXJpdHlEZXNjcmlwdG9yIChMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgbHBzZCxMUFNJRCBvd25lcixCT09MMzIgb3duZXJkZWZhdWx0ZWQpCitEV09SRCAvKiBOVFNUQVRVUyAqLyAKK1dJTkFQSSBSdGxTZXRPd25lclNlY3VyaXR5RGVzY3JpcHRvciAoTFBTRUNVUklUWV9ERVNDUklQVE9SIGxwc2QsTFBTSUQgb3duZXIsQk9PTDMyIG93bmVyZGVmYXVsdGVkKQogewogCWlmIChscHNkLT5SZXZpc2lvbiE9U0VDVVJJVFlfREVTQ1JJUFRPUl9SRVZJU0lPTikKIAkJcmV0dXJuIFNUQVRVU19VTktOT1dOX1JFVklTSU9OOwpAQCAtMTg0LDcgKzE4OSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICBSdGxTZXRPd25lclNlY3VyaXR5RGVzY3JpcHRvcgkJW05URExMXQogICovCi1EV09SRCAvKiBOVFNUQVRVUyAqLyBXSU5BUEkgUnRsU2V0R3JvdXBTZWN1cml0eURlc2NyaXB0b3IgKExQU0VDVVJJVFlfREVTQ1JJUFRPUiBscHNkLExQU0lEIGdyb3VwLEJPT0wzMiBncm91cGRlZmF1bHRlZCkKK0RXT1JEIC8qIE5UU1RBVFVTICovIAorV0lOQVBJIFJ0bFNldEdyb3VwU2VjdXJpdHlEZXNjcmlwdG9yIChMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgbHBzZCxMUFNJRCBncm91cCxCT09MMzIgZ3JvdXBkZWZhdWx0ZWQpCiB7CiAJaWYgKGxwc2QtPlJldmlzaW9uIT1TRUNVUklUWV9ERVNDUklQVE9SX1JFVklTSU9OKQogCQlyZXR1cm4gU1RBVFVTX1VOS05PV05fUkVWSVNJT047CkBAIC0yNTUsNyArMjYxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIFJ0bEFuc2lTdHJpbmdUb1VuaWNvZGVTdHJpbmcJCVtOVERMTF0KICAqLwotRFdPUkQgLyogTlRTVEFUVVMgKi8gV0lOQVBJIFJ0bEFuc2lTdHJpbmdUb1VuaWNvZGVTdHJpbmcoTFBVTklDT0RFX1NUUklORyB1bmksTFBBTlNJX1NUUklORyBhbnNpLEJPT0wzMiBkb2FsbG9jKQorRFdPUkQgLyogTlRTVEFUVVMgKi8gCitXSU5BUEkgUnRsQW5zaVN0cmluZ1RvVW5pY29kZVN0cmluZyhMUFVOSUNPREVfU1RSSU5HIHVuaSxMUEFOU0lfU1RSSU5HIGFuc2ksQk9PTDMyIGRvYWxsb2MpCiB7CiAJRFdPUkQJdW5pbGVuID0gKGFuc2ktPkxlbmd0aCsxKSpzaXplb2YoV0NIQVIpOwogCkBAIC0yNzcsNyArMjg0LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIFJ0bE9lbVN0cmluZ1RvVW5pY29kZVN0cmluZwkJW05URExMXQogICovCi1EV09SRCAvKiBOVFNUQVRVUyAqLyBXSU5BUEkgUnRsT2VtU3RyaW5nVG9Vbmljb2RlU3RyaW5nKExQVU5JQ09ERV9TVFJJTkcgdW5pLExQU1RSSU5HIGFuc2ksQk9PTDMyIGRvYWxsb2MpCitEV09SRCAvKiBOVFNUQVRVUyAqLyAKK1dJTkFQSSBSdGxPZW1TdHJpbmdUb1VuaWNvZGVTdHJpbmcoTFBVTklDT0RFX1NUUklORyB1bmksTFBTVFJJTkcgYW5zaSxCT09MMzIgZG9hbGxvYykKIHsKIAlEV09SRAl1bmlsZW4gPSAoYW5zaS0+TGVuZ3RoKzEpKnNpemVvZihXQ0hBUik7CiAKQEAgLTI5OSw3ICszMDcsOCBAQAogICogICAgICAgICAgICAgICAgIFJ0bE11bHRpQnl0ZVRvVW5pY29kZU4JCVtOVERMTF0KICAqIEZJWE1FOiBtdWx0aWJ5dGUgc3VwcG9ydAogICovCi1EV09SRCAvKiBOVFNUQVRVUyAqLyBXSU5BUEkgUnRsTXVsdGlCeXRlVG9Vbmljb2RlTihMUFdTVFIgdW5pc3RyLERXT1JEIHVuaWxlbixMUERXT1JEIHJlc2xlbixMUFNUUiBvZW1zdHIsRFdPUkQgb2VtbGVuKQorRFdPUkQgLyogTlRTVEFUVVMgKi8gCitXSU5BUEkgUnRsTXVsdGlCeXRlVG9Vbmljb2RlTihMUFdTVFIgdW5pc3RyLERXT1JEIHVuaWxlbixMUERXT1JEIHJlc2xlbixMUFNUUiBvZW1zdHIsRFdPUkQgb2VtbGVuKQogewogCURXT1JECWxlbjsKIAlMUFdTVFIJeDsKQEAgLTMxNyw3ICszMjYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsT2VtVG9Vbmljb2RlTgkJCVtOVERMTF0KICAqLwotRFdPUkQgLyogTlRTVEFUVVMgKi8gV0lOQVBJIFJ0bE9lbVRvVW5pY29kZU4oTFBXU1RSIHVuaXN0cixEV09SRCB1bmlsZW4sTFBEV09SRCByZXNsZW4sTFBTVFIgb2Vtc3RyLERXT1JEIG9lbWxlbikKK0RXT1JEIC8qIE5UU1RBVFVTICovIAorV0lOQVBJIFJ0bE9lbVRvVW5pY29kZU4oTFBXU1RSIHVuaXN0cixEV09SRCB1bmlsZW4sTFBEV09SRCByZXNsZW4sTFBTVFIgb2Vtc3RyLERXT1JEIG9lbWxlbikKIHsKIAlEV09SRAlsZW47CiAJTFBXU1RSCXg7CkBAIC0zODIsNyArMzkyLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIFJ0bFVuaWNvZGVUb09lbU4JCQlbTlRETExdCiAgKi8KLURXT1JEIC8qIE5UU1RBVFVTICovIFdJTkFQSSBSdGxVbmljb2RlVG9PZW1OKExQU1RSIG9lbXN0cixEV09SRCBvZW1sZW4sTFBEV09SRCByZXNsZW4sTFBXU1RSIHVuaXN0cixEV09SRCB1bmlsZW4pCitEV09SRCAvKiBOVFNUQVRVUyAqLyAKK1dJTkFQSSBSdGxVbmljb2RlVG9PZW1OKExQU1RSIG9lbXN0cixEV09SRCBvZW1sZW4sTFBEV09SRCByZXNsZW4sTFBXU1RSIHVuaXN0cixEV09SRCB1bmlsZW4pCiB7CiAJRFdPUkQJbGVuOwogCUxQU1RSCXg7CkBAIC00MDAsNyArNDExLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIFJ0bFVuaWNvZGVTdHJpbmdUb09lbVN0cmluZwkJW05URExMXQogICovCi1EV09SRCAvKiBOVFNUQVRVUyAqLyBXSU5BUEkgUnRsVW5pY29kZVN0cmluZ1RvT2VtU3RyaW5nKExQQU5TSV9TVFJJTkcgb2VtLExQVU5JQ09ERV9TVFJJTkcgdW5pLEJPT0wzMiBhbGxvYykKK0RXT1JEIC8qIE5UU1RBVFVTICovIAorV0lOQVBJIFJ0bFVuaWNvZGVTdHJpbmdUb09lbVN0cmluZyhMUEFOU0lfU1RSSU5HIG9lbSxMUFVOSUNPREVfU1RSSU5HIHVuaSxCT09MMzIgYWxsb2MpCiB7CiAJaWYgKGFsbG9jKSB7CiAJCW9lbS0+QnVmZmVyID0gKExQU1RSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLEhFQVBfWkVST19NRU1PUlksdW5pLT5MZW5ndGgvMikrMTsKQEAgLTQxNCw3ICs0MjYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgUnRsVW5pY29kZVN0cmluZ1RvQW5zaVN0cmluZwkJW05URExMXQogICovCi1EV09SRCAvKiBOVFNUQVRVUyAqLyBXSU5BUEkgUnRsVW5pY29kZVN0cmluZ1RvQW5zaVN0cmluZyhMUFVOSUNPREVfU1RSSU5HIHVuaSxMUEFOU0lfU1RSSU5HIG9lbSxCT09MMzIgYWxsb2MpCitEV09SRCAvKiBOVFNUQVRVUyAqLyAKK1dJTkFQSSBSdGxVbmljb2RlU3RyaW5nVG9BbnNpU3RyaW5nKExQVU5JQ09ERV9TVFJJTkcgdW5pLExQQU5TSV9TVFJJTkcgb2VtLEJPT0wzMiBhbGxvYykKIHsKIAlpZiAoYWxsb2MpIHsKIAkJb2VtLT5CdWZmZXIgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksSEVBUF9aRVJPX01FTU9SWSx1bmktPkxlbmd0aC8yKSsxOwpAQCAtNjcxLDcgKzY4NCw4IEBACiAgKiBOb3RlOiBUaGlzIGV2ZW4gd29ya3MsIHNpbmNlIGdjYyByZXR1cm5zIDY0Yml0IHZhbHVlcyBpbiBlYXgvZWR4IGp1c3QgbGlrZQogICogdGhlIGNhbGxlciBleHBlY3RzLiBIb3dldmVyLi4uIFRoZSByZWxheSBjb2RlIHdvbid0IGdyb2sgdGhpcyBJIHRoaW5rLgogICovCi1sb25nIGxvbmcgLypMQVJHRV9JTlRFR0VSKi8gV0lOQVBJIFJ0bEV4dGVuZGVkSW50ZWdlck11bHRpcGx5KAorbG9uZyBsb25nIC8qTEFSR0VfSU5URUdFUiovIAorV0lOQVBJIFJ0bEV4dGVuZGVkSW50ZWdlck11bHRpcGx5KAogCUxBUkdFX0lOVEVHRVIgZmFjdG9yMSxJTlQzMiBmYWN0b3IyCiApIHsKICNpZiBTSVpFT0ZfTE9OR19MT05HPT04CmRpZmYgLS1naXQgYS9taXNjL3NoZWxsLmMgYi9taXNjL3NoZWxsLmMKaW5kZXggNzVkODMwZi4uNjcxOTE0YyAxMDA2NDQKLS0tIGEvbWlzYy9zaGVsbC5jCisrKyBiL21pc2Mvc2hlbGwuYwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAKIAkgIGlmKElzRXF1YWxDTFNJRChyY2xzaWQsICZDTFNJRF9TaGVsbExpbmspKSAgICAgICAgIC8qZGVidWcqLwogCSAgICBUUkFDRShzaGVsbCwicmVxdWVzdGVkIENMU0lEX1NoZWxsTGlua1xuIik7CiAKLSAgICAvKiBmaXhtZTogdGhlIElDbGFzc0ZhY3RvcnlfQ29uc3RydWN0b3IgYXQgdGhlIG1vbWVudCBvbmx5IAorICAgIC8qIGZpeG1lOiB0aGUgSUNsYXNzRmFjdG9yeV9Db25zdHJ1Y3RvciBpcyBhdCB0aGUgbW9tZW50IG9ubHkgCiAJCSBmb3IgcmNsc2lkPUNMU0lEX1NoZWxsRGVza3RvcCwgc28gd2UgZ2V0IHRoZSByaWdodCBJbnRlcmZhY2UgKGpzY2gpKi8KIAkgIGxwY2xmID0gSUNsYXNzRmFjdG9yeV9Db25zdHJ1Y3RvcigpOwogICAgIGlmKGxwY2xmKQpAQCAtMTY0MSw2ICsxNjQxLDggQEAKICAqIFJFVFVSTlMKICAqICAgdGhlIGludGVyZmFjZSB0byB0aGUgc2hlbGwgZGVza3RvcCBmb2xkZXIuCiAgKgorICogRklYTUUKKyAqICAgdGhlIHBkZXNrdG9wZm9sZGVyIGhhcyB0byBiZSByZWxlYXNlZCBhdCB0aGUgZW5kIChhdCBkbGwgdW5sb2FkaW5nPz8/KQogICovCiBMUFNIRUxMRk9MREVSIHBkZXNrdG9wZm9sZGVyPU5VTEw7CiAKQEAgLTE2NDgsMjMgKzE2NTAsMjggQEAKIHsgSFJFU1VMVAlocmVzID0gRV9PVVRPRk1FTU9SWTsKICAgTFBDTEFTU0ZBQ1RPUlkgbHBjbGY7CiAJVFJBQ0Uoc2hlbGwsIiVwLT4oJXApXG4iLHNoZWxsZm9sZGVyLCpzaGVsbGZvbGRlcik7Ci0JCisKICAgaWYgKHBkZXNrdG9wZm9sZGVyKQotCXsgKnNoZWxsZm9sZGVyID0gcGRlc2t0b3Bmb2xkZXI7Ci0JICBocmVzID0gTk9FUlJPUjsKKwl7CWhyZXMgPSBOT0VSUk9SOwogCX0KLSAgZWxzZQotCXsgbHBjbGYgPSBJQ2xhc3NGYWN0b3J5X0NvbnN0cnVjdG9yKCk7CisJZWxzZQorICB7IGxwY2xmID0gSUNsYXNzRmFjdG9yeV9Db25zdHJ1Y3RvcigpOwogICAgIC8qIGZpeG1lOiB0aGUgYnVpbGRpbiBJQ2xhc3NGYWN0b3J5X0NvbnN0cnVjdG9yIGlzIGF0IHRoZSBtb21lbnQgb25seSAKICAJCWZvciByY2xzaWQ9Q0xTSURfU2hlbGxEZXNrdG9wLCBzbyB3ZSBnZXQgdGhlIHJpZ2h0IEludGVyZmFjZSAoanNjaCkqLwogICAgIGlmKGxwY2xmKQogICAgIHsgaHJlcyA9IGxwY2xmLT5scHZ0YmwtPmZuQ3JlYXRlSW5zdGFuY2UobHBjbGYsTlVMTCwoUkVGSUlEKSZJSURfSVNoZWxsRm9sZGVyLCAodm9pZCopJnBkZXNrdG9wZm9sZGVyKTsKIAkgCSAgbHBjbGYtPmxwdnRibC0+Zm5SZWxlYXNlKGxwY2xmKTsKIAkgIH0gIAotCX0JCi0JaWYgKHBkZXNrdG9wZm9sZGVyKQotCXsgKnNoZWxsZm9sZGVyID0gcGRlc2t0b3Bmb2xkZXI7CQorICB9CisJCisgIGlmIChwZGVza3RvcGZvbGRlcikKKwl7ICpzaGVsbGZvbGRlciA9IHBkZXNrdG9wZm9sZGVyOworICAgIHBkZXNrdG9wZm9sZGVyLT5scHZ0YmwtPmZuQWRkUmVmKHBkZXNrdG9wZm9sZGVyKTsKIAl9CisgIGVsc2UKKwl7ICpzaGVsbGZvbGRlcj1OVUxMOworCX0JCisKICAgVFJBQ0Uoc2hlbGwsIi0tICVwLT4oJXApXG4iLHNoZWxsZm9sZGVyLCAqc2hlbGxmb2xkZXIpOwogCXJldHVybiBocmVzOwogfQpAQCAtMTY4NiwxMDkgKzE2OTMsMjQ4IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCSBTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbglbU0hFTEwzMi4yMjNdCi0gKiAgbkZvbGRlciBpcyBhIENTSURMX3h4eHh4LgorICogZ2V0cyB0aGUgZm9sZGVyIGxvY2F0aW9ucyBmcm9tIHRoZSByZWdpc3RyeSBhbmQgY3JlYXRlcyBhIHBpZGwKKyAqIGNyZWF0ZXMgbWlzc2luZyByZWcga2V5cyBhbmQgZGlyZWN0b3J5cworICogCisgKiBQQVJBTVMKKyAqICAgaHduZE93bmVyIFtJXQorICogICBuRm9sZGVyICAgW0ldIENTSURMX3h4eHh4CisgKiAgIHBwaWRsICAgICBbT10gUElETCBvZiBhIHNwZWNpYWwgZm9sZGVyCiAgKgogICogUkVUVVJOUwotICogICAgcmV0dXJucyB0aGUgUElETCBvZiBhIHNwZWNpYWwgZm9sZGVyCisgKiAgICBIUmVzdWx0CiAgKgogICogRklYTUUKLSAqICAgdGhlIHBhdGggaXMgZXZlcnkgdGltZSB4Olxcd2luZG93c1xcZGVza3RvcAotICogICB3ZSBzaG91bGQgZ2V0IHRoZSBwYXRoJ3MgZnJvbSB0aGUgcmVnaXN0cnkKKyAqICAgLSBsb29rIGZvciAiVXNlciBTaGVsbCBGb2xkZXIiIGZpcnN0CisgKgogICovCi1IUkVTVUxUIFdJTkFQSSBTSEdldFNwZWNpYWxGb2xkZXJMb2NhdGlvbigKLSAgICBIV05EMzIgaHduZE93bmVyLAotCQlJTlQzMiBuRm9sZGVyLAotICAgIExQSVRFTUlETElTVCAqIHBwaWRsKQorSFJFU1VMVCBXSU5BUEkgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24oSFdORDMyIGh3bmRPd25lciwgSU5UMzIgbkZvbGRlciwgTFBJVEVNSURMSVNUICogcHBpZGwpCiB7CUxQU0hFTExGT0xERVIgc2hlbGxmb2xkZXI7Ci0gIERXT1JEICBwY2hFYXRlbjsKLQlDSEFSICAgcHN6VGVtcFsyNTZdOworICBEV09SRCAgcGNoRWF0ZW4sdHBhdGhsZW49TUFYX1BBVEgsdHlwZSxkd2Rpc3AscmVzOworCUNIQVIgICBwc3pUZW1wWzI1Nl0sYnVmZmVyWzI1Nl0sdHBhdGhbTUFYX1BBVEhdLG5wYXRoW01BWF9QQVRIXTsKIAlMUFdTVFIgbHBzekRpc3BsYXlOYW1lID0gKExQV1NUUikmcHN6VGVtcFswXTsKLQkKLSAgRklYTUUoc2hlbGwsIiglMDR4LCVkLCVwKSxzdHViIVxuIiwgaHduZE93bmVyLG5Gb2xkZXIscHBpZGwpOworCUhLRVkJIGtleTsKIAotICBMb2NhbFRvV2lkZUNoYXIzMihscHN6RGlzcGxheU5hbWUsICJ4Olxcd2luZG93c1xcZGVza3RvcFxcIiwgMjU2KTsKLSAgCi0JaWYgKFNIR2V0RGVza3RvcEZvbGRlcigmc2hlbGxmb2xkZXIpPT1TX09LKQotCXsgc2hlbGxmb2xkZXItPmxwdnRibC0+Zm5QYXJzZURpc3BsYXlOYW1lKHNoZWxsZm9sZGVyLGh3bmRPd25lciwKLQlOVUxMLGxwc3pEaXNwbGF5TmFtZSwmcGNoRWF0ZW4scHBpZGwsTlVMTCk7CisgIGVudW0gCisJewlGVF9VTktOT1dOPSAweDAwMDAwMDAwLAorCSAgRlRfRElSPSAgICAgMHgwMDAwMDAwMSwgCisJICBGVF9ERVNLVE9QPSAweDAwMDAwMDAyCisJfSB0Rm9sZGVyOyAKKworICBUUkFDRShzaGVsbCwiKCUwNHgsJWQsJXApXG4iLCBod25kT3duZXIsbkZvbGRlcixwcGlkbCk7CisKKyAgc3RyY3B5KGJ1ZmZlciwiU29mdHdhcmVcXE1pY3Jvc29mdFxcV2luZG93c1xcQ3VycmVudFZlcnNpb25cXEV4cGxvcmVyXFxTaGVsbCBGb2xkZXJzXFwiKTsKKworICByZXM9UmVnQ3JlYXRlS2V5RXgzMkEoSEtFWV9DVVJSRU5UX1VTRVIsYnVmZmVyLDAsTlVMTCxSRUdfT1BUSU9OX05PTl9WT0xBVElMRSxLRVlfV1JJVEUsTlVMTCwma2V5LCZkd2Rpc3ApOworCWlmIChyZXMpCisJeyBFUlIoc2hlbGwsIkNvdWxkIG5vdCBjcmVhdGUga2V5ICVzICUwOGx4IFxuIixidWZmZXIscmVzKTsKKwkgIHJldHVybiBFX09VVE9GTUVNT1JZOwogCX0KIAorCXRGb2xkZXI9RlRfRElSOwkKIAlzd2l0Y2ggKG5Gb2xkZXIpCiAJewljYXNlIENTSURMX0JJVEJVQ0tFVDoKLSAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgUmVjeWNlbGVyXG4iKTsKKwkJCXN0cmNweSAoYnVmZmVyLCJ4eHgiKTsJCQkvKm5vdCBpbiB0aGUgcmVnaXN0cnkqLworCQkJVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBSZWN5Y2xlclxuIik7CisJCQl0Rm9sZGVyPUZUX1VOS05PV047CiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9DT05UUk9MUzoKKwkJCXN0cmNweSAoYnVmZmVyLCJ4eHgiKTsJCQkvKnZpcnR1YWwgZm9sZGVyKi8KICAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgQ29udHJvbFxuIik7CisJCQl0Rm9sZGVyPUZUX1VOS05PV047CiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9ERVNLVE9QOgotCQkgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRGVza3RvcFxuIik7CisJCQlzdHJjcHkgKGJ1ZmZlciwieHh4Iik7CQkJLyp2aXJ0dWFsIGZvbGRlciovCisJCQlUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIERlc2t0b3BcbiIpOworCQkJdEZvbGRlcj1GVF9ERVNLVE9QOwkJCQogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfREVTS1RPUERJUkVDVE9SWToKLSAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgRGVza0RpclxuIik7CisJCQlzdHJjcHkgKGJ1ZmZlciwiRGVza3RvcCIpOwogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfRFJJVkVTOgorCQkJc3RyY3B5IChidWZmZXIsInh4eCIpOwkJCS8qdmlydHVhbCBmb2xkZXIqLwogICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBEcml2ZXNcbiIpOworCQkJdEZvbGRlcj1GVF9VTktOT1dOOwogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfRk9OVFM6Ci0gICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIEZvbnRzXG4iKTsKKwkJCXN0cmNweSAoYnVmZmVyLCJGb250cyIpOwkJCQogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfTkVUSE9PRDoKLSAgICAgIFRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgTmV0aG9vZFxuIik7CisJCQlzdHJjcHkgKGJ1ZmZlciwiTmV0SG9vZCIpOwkJCQogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfTkVUV09SSzoKLQkJICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIE5ldHdvcmtcbiIpOworCQkJc3RyY3B5IChidWZmZXIsInh4eCIpOwkJCQkvKnZpcnR1YWwgZm9sZGVyKi8KKwkJCVRSQUNFIChzaGVsbCwibG9va2luZyBmb3IgTmV0d29ya1xuIik7CisJCQl0Rm9sZGVyPUZUX1VOS05PV047CiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9QRVJTT05BTDoKLQkJICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFBlcnNvbmFsXG4iKTsKKwkJCXN0cmNweSAoYnVmZmVyLCJQZXJzb25hbCIpOwkJCQorICAgICAgYnJlYWs7CisJCWNhc2UgQ1NJRExfRkFWT1JJVEVTOgorCQkJc3RyY3B5IChidWZmZXIsIkZhdm9yaXRlcyIpOwkJCQogICAgICAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfUFJJTlRFUlM6Ci0gICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFByaW50ZXJzXG4iKTsKKwkJCXN0cmNweSAoYnVmZmVyLCJQcmludEhvb2QiKTsJCQkKICAgICAgIGJyZWFrOwogCQljYXNlIENTSURMX1BST0dSQU1TOgotICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBQcm9ncmFtbXNcbiIpOworCQkJc3RyY3B5IChidWZmZXIsIlByb2dyYW1zIik7CQkJCiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9SRUNFTlQ6Ci0gICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFJlY2VudFxuIik7CisJCQlzdHJjcHkgKGJ1ZmZlciwiUmVjZW50Iik7CiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9TRU5EVE86Ci0gICAgICBUUkFDRSAoc2hlbGwsImxvb2tpbmcgZm9yIFNlbmR0b1xuIik7Ci0gICAgICBicmVhazsKKwkJCXN0cmNweSAoYnVmZmVyLCJTZW5kVG8iKTsKKyAJCSAgYnJlYWs7CiAJCWNhc2UgQ1NJRExfU1RBUlRNRU5VOgotICAgICAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTdGFydG1lbnVcbiIpOworCQkJc3RyY3B5IChidWZmZXIsIlN0YXJ0IE1lbnUiKTsKICAgICAgIGJyZWFrOwogCQljYXNlIENTSURMX1NUQVJUVVA6Ci0JCSAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBTdGFydHVwXG4iKTsKKwkJCXN0cmNweSAoYnVmZmVyLCJTdGFydHVwIik7CQkJCiAgICAgICBicmVhazsKIAkJY2FzZSBDU0lETF9URU1QTEFURVM6Ci0JCSAgVFJBQ0UgKHNoZWxsLCJsb29raW5nIGZvciBUZW1wbGF0ZXNcbiIpOworCQkJc3RyY3B5IChidWZmZXIsIlRlbXBsYXRlcyIpOwkJCQogICAgICAgYnJlYWs7CiAJCWRlZmF1bHQ6CiAgICAgICBFUlIgKHNoZWxsLCJ1bmtub3duIENTSURMXG4iKTsKKwkJCXRGb2xkZXI9RlRfVU5LTk9XTjsJCQkKICAgICAgIGJyZWFrOwogCX0KIAotCVRSQUNFKHNoZWxsLCAiLS0gKG5ldyBwaWRsICVwKVxuIiwqcHBpZGwpOworICBUUkFDRShzaGVsbCwiS2V5PSVzXG4iLGJ1ZmZlcik7CiAKKyAgdHlwZT1SRUdfU1o7CisKKyAgc3dpdGNoICh0Rm9sZGVyKQorCXsgY2FzZSBGVF9ESVI6CisJICAgIC8qIERpcmVjdG9yeTogZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSByZWdpc3RyeSwgaWYgaXRzIG5vdCB0aGVyZSAKKwkJCWNyZWF0ZSBpdCBhbmQgdGhlIGRpcmVjdG9yeSovCisgICAgCWlmIChSZWdRdWVyeVZhbHVlRXgzMkEoa2V5LGJ1ZmZlcixOVUxMLCZ0eXBlLHRwYXRoLCZ0cGF0aGxlbikpCisgIAkgIHsgR2V0V2luZG93c0RpcmVjdG9yeTMyQShucGF0aCxNQVhfUEFUSCk7CisJICAgICAgUGF0aEFkZEJhY2tzbGFzaChucGF0aCk7CisgIAkJCXN3aXRjaCAobkZvbGRlcikKKyAgCQkJewljYXNlIENTSURMX0RFU0tUT1BESVJFQ1RPUlk6CisgICAgICAJCQlzdHJjYXQgKG5wYXRoLCJEZXNrdG9wIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgIAkJY2FzZSBDU0lETF9GT05UUzoKKyAgICAgIAkJCXN0cmNhdCAobnBhdGgsIkZvbnRzIik7CQkJCisgICAgICAgICAgICBicmVhazsKKyAgICAgIAkJY2FzZSBDU0lETF9ORVRIT09EOgorICAgICAgCQkJc3RyY2F0IChucGF0aCwiTmV0SG9vZCIpOwkJCQorICAgICAgICAgICAgYnJlYWs7CisgIAkJICAgIGNhc2UgQ1NJRExfUEVSU09OQUw6CisgICAgICAJCQlzdHJjcHkgKG5wYXRoLCJDOlxcUGVyc29uYWwiKTsJCQkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgCQljYXNlIENTSURMX0ZBVk9SSVRFUzoKKyAgICAgIAkJCXN0cmNhdCAobnBhdGgsIkZhdm9yaXRlcyIpOwkJCQorICAgICAgICAgICAgYnJlYWs7CisgIAkJICAgIGNhc2UgQ1NJRExfUFJJTlRFUlM6CisgICAgICAJCQlzdHJjYXQgKG5wYXRoLCJQcmludEhvb2QiKTsJCQkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgCQljYXNlIENTSURMX1BST0dSQU1TOgorICAgICAgCQkJc3RyY2F0IChucGF0aCwiU3RhcnQgTWVudSIpOwkJCQorICAJCQkJCUNyZWF0ZURpcmVjdG9yeTMyQShucGF0aCxOVUxMKTsKKyAgICAgIAkJCXN0cmNhdCAobnBhdGgsIlxcUHJvZ3JhbXMiKTsJCQkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgCQljYXNlIENTSURMX1JFQ0VOVDoKKyAgICAgIAkJCXN0cmNhdCAobnBhdGgsIlJlY2VudCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAJCWNhc2UgQ1NJRExfU0VORFRPOgorICAgICAgCQkJc3RyY2F0IChucGF0aCwiU2VuZFRvIik7CisgICAgICAJCQlicmVhazsKKyAgICAgIAkJY2FzZSBDU0lETF9TVEFSVE1FTlU6CisgICAgICAJCQlzdHJjYXQgKG5wYXRoLCJTdGFydCBNZW51Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgIAkJY2FzZSBDU0lETF9TVEFSVFVQOgorICAgICAgCQkJc3RyY2F0IChucGF0aCwiU3RhcnQgTWVudSIpOwkJCQorICAJCQkJCUNyZWF0ZURpcmVjdG9yeTMyQShucGF0aCxOVUxMKTsKKyAgICAgIAkJCXN0cmNhdCAobnBhdGgsIlxcU3RhcnR1cCIpOwkJCQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAJCWNhc2UgQ1NJRExfVEVNUExBVEVTOgorICAgICAgCQkJc3RyY2F0IChucGF0aCwiVGVtcGxhdGVzIik7CQkJCisgICAgICAgICAgICBicmVhazsKKyAgCQkJCWRlZmF1bHQ6CisgICAgICAgICAJICBSZWdDbG9zZUtleShrZXkpOworICAgICAgICAJICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgCQkJfQorICAgIAkJaWYgKFJlZ1NldFZhbHVlRXgzMkEoa2V5LGJ1ZmZlciwwLFJFR19TWixucGF0aCxzaXplb2YobnBhdGgpKzEpKQorICAgICAgICB7CUVSUihzaGVsbCwiY291bGQgbm90IGNyZWF0ZSB2YWx1ZSAlc1xuIixidWZmZXIpOworICAgICAgCSAgUmVnQ2xvc2VLZXkoa2V5KTsKKyAgICAgIAkgIHJldHVybiBFX09VVE9GTUVNT1JZOworICAgIAkJfQorICAgIAkJVFJBQ0Uoc2hlbGwsInZhbHVlICVzPSVzIGNyZWF0ZWRcbiIsYnVmZmVyLG5wYXRoKTsKKyAgICAJICBDcmVhdGVEaXJlY3RvcnkzMkEobnBhdGgsTlVMTCk7CisgICAgICB9CisJCQlicmVhazsKKwkJY2FzZSBGVF9ERVNLVE9QOgorCQkJc3RyY3B5ICh0cGF0aCwiRGVza3RvcCIpOwkJCQorCQkgIGJyZWFrOworCSAgZGVmYXVsdDoKKyAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7CisgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKwkJICBicmVhazsKKyAgfQorCisJUmVnQ2xvc2VLZXkoa2V5KTsKKworICBUUkFDRShzaGVsbCwiVmFsdWU9JXNcbiIsdHBhdGgpOworICBMb2NhbFRvV2lkZUNoYXIzMihscHN6RGlzcGxheU5hbWUsIHRwYXRoLCAyNTYpOworICAKKwlpZiAoU0hHZXREZXNrdG9wRm9sZGVyKCZzaGVsbGZvbGRlcik9PVNfT0spCisJeyBzaGVsbGZvbGRlci0+bHB2dGJsLT5mblBhcnNlRGlzcGxheU5hbWUoc2hlbGxmb2xkZXIsaHduZE93bmVyLCBOVUxMLGxwc3pEaXNwbGF5TmFtZSwmcGNoRWF0ZW4scHBpZGwsTlVMTCk7CisJICBzaGVsbGZvbGRlci0+bHB2dGJsLT5mblJlbGVhc2Uoc2hlbGxmb2xkZXIpOworCX0KKworCVRSQUNFKHNoZWxsLCAiLS0gKG5ldyBwaWRsICVwKVxuIiwqcHBpZGwpOwogCXJldHVybiBOT0VSUk9SOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkgU0hHZXRQYXRoRnJvbUlETGlzdAkJW1NIRUxMMzIuMjIxXQotICogcmV0dXJucyB0aGUgcGF0aCBmcm9tIGEgcGFzc2VkIFBJREwuCisgKiBTSEdldFBhdGhGcm9tSURMaXN0MzJBICAgICAgICBbU0hFTEwzMi4yNjFdW05UIDQuMDogU0hFTEwzMi4yMjBdCisgKgorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBuYW1lCisgKiBGSVhNRQorICogIGZuR2V0RGlzcGxheU5hbWVPZiBjYW4gcmV0dXJuIGRpZmZlcmVudCB0eXBlcyBvZiBPTEVTdHJpbmcKICAqLwotQk9PTDMyIFdJTkFQSSBTSEdldFBhdGhGcm9tSURMaXN0KExQQ0lURU1JRExJU1QgcGlkbCxMUFNUUiBwc3pQYXRoKSAKLXsgU1RSUkVUIGxwTmFtZTsKK0RXT1JEIFdJTkFQSSBTSEdldFBhdGhGcm9tSURMaXN0MzJBICgKKyAgICBMUENJVEVNSURMSVNUIHBpZGwsIC8qIFtJTl0gcGlkbCAqLworCQlMUFNUUiBwc3pQYXRoKSAgICAgIC8qIFtPVVRdIHBhdGggKi8KK3sJU1RSUkVUIGxwTmFtZTsKIAlMUFNIRUxMRk9MREVSIHNoZWxsZm9sZGVyOwogCVRSQUNFKHNoZWxsLCIocGlkbD0lcCwlcClcbiIscGlkbCxwc3pQYXRoKTsKIAogCWlmIChTSEdldERlc2t0b3BGb2xkZXIoJnNoZWxsZm9sZGVyKT09U19PSykKIAl7IHNoZWxsZm9sZGVyLT5scHZ0YmwtPmZuR2V0RGlzcGxheU5hbWVPZihzaGVsbGZvbGRlcixwaWRsLFNIR0ROX0ZPUlBBUlNJTkcsJmxwTmFtZSk7CisJICBzaGVsbGZvbGRlci0+bHB2dGJsLT5mblJlbGVhc2Uoc2hlbGxmb2xkZXIpOwogCX0KLSAgV2lkZUNoYXJUb0xvY2FsMzIocHN6UGF0aCwgbHBOYW1lLnUucE9sZVN0ciwgTUFYX1BBVEgpOworICAvKldpZGVDaGFyVG9Mb2NhbDMyKHBzelBhdGgsIGxwTmFtZS51LnBPbGVTdHIsIE1BWF9QQVRIKTsqLworCXN0cmNweShwc3pQYXRoLGxwTmFtZS51LmNTdHIpOwogCS8qIGZpeG1lIGZyZWUgdGhlIG9sZXN0cmluZyovCiAJVFJBQ0Uoc2hlbGwsIi0tICglcylcbiIscHN6UGF0aCk7CiAJcmV0dXJuIE5PRVJST1I7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0hHZXRQYXRoRnJvbUlETGlzdDMyVyBbU0hFTEwzMi4yNjJdCisgKgorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBuYW1lCisgKi8KK0RXT1JEIFdJTkFQSSBTSEdldFBhdGhGcm9tSURMaXN0MzJXIChEV09SRCBkd1BhcmFtMSxEV09SRCBkd1BhcmFtMikKK3sgRklYTUUgKHNoZWxsLCIoMHglMDhseCwweCUwOGx4KTpzdHViLlxuIiwgZHdQYXJhbTEsIGR3UGFyYW0yKTsKKyAgcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCQkgU0hHZXRQYXRoRnJvbUlETGlzdAkJW1NIRUxMMzIuMjIxXVtOVCA0LjA6IFNIRUxMMzIuMjE5XQorICoKKyAqIHJldHVybnMgdGhlIHBhdGggZnJvbSBhIHBhc3NlZCBQSURMLgorICovCitCT09MMzIgV0lOQVBJIFNIR2V0UGF0aEZyb21JRExpc3QoIAorICAgIExQQ0lURU1JRExJU1QgcGlkbCwgLyogW0lOXSBwaWRsICovCisJCUxQU1RSIHBzelBhdGgpICAgICAgLyogW09VVF0gcGF0aCAqLworeyBUUkFDRShzaGVsbCwiKHBpZGw9JXAsJXApXG4iLHBpZGwscHN6UGF0aCk7CisKKyAgcmV0dXJuIFNIR2V0UGF0aEZyb21JRExpc3QzMkEocGlkbCxwc3pQYXRoKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNISGVscFNob3J0Y3V0c19SdW5ETEwgW1NIRUxMMzIuMjI0XQpkaWZmIC0tZ2l0IGEvbWlzYy9zaGVsbG9yZC5jIGIvbWlzYy9zaGVsbG9yZC5jCmluZGV4IDJmNmEzNDMuLjY2NjE3ODAgMTAwNjQ0Ci0tLSBhL21pc2Mvc2hlbGxvcmQuYworKysgYi9taXNjL3NoZWxsb3JkLmMKQEAgLTMyLDE1ICszMiwzMCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0hDaGFuZ2VOb3RpZnlSZWdpc3RlciBbU0hFTEwzMi4yXQorICogTk9URVMKKyAqICAgSWRsaXN0IGlzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMgYW5kIENvdW50IHNwZWNpZmllcyBob3cgbWFueSBpdGVtcyBpbiB0aGUgYXJyYXkKKyAqICAgKHVzdWFsbHkganVzdCBvbmUgSSB0aGluaykuCiAgKi8KIERXT1JEIFdJTkFQSQotU0hDaGFuZ2VOb3RpZnlSZWdpc3RlcihIV05EMzIgaHduZCxEV09SRCB4MixEV09SRCB4MyxEV09SRCB4NCxEV09SRCB4NSxEV09SRCB4NikgewotCUZJWE1FKHNoZWxsLCIoMHglMDR4LDB4JTA4bHgsMHglMDhseCwweCUwOGx4LDB4JTA4bHgsMHglMDhseCk6c3R1Yi5cbiIsCi0JCWh3bmQseDIseDMseDQseDUseDYKLQkpOworU0hDaGFuZ2VOb3RpZnlSZWdpc3RlcigKKyAgICBIV05EMzIgaHduZCwKKyAgICBMT05HIGV2ZW50czEsCisgICAgTE9ORyBldmVudHMyLAorICAgIERXT1JEIG1zZywKKyAgICBpbnQgY291bnQsCisgICAgSURTVFJVQ1QgKmlkbGlzdCkKK3sJRklYTUUoc2hlbGwsIigweCUwNHgsMHglMDhseCwweCUwOGx4LDB4JTA4bHgsMHglMDh4LCVwKTpzdHViLlxuIiwKKwkJaHduZCxldmVudHMxLGV2ZW50czIsbXNnLGNvdW50LGlkbGlzdCk7CiAJcmV0dXJuIDA7CiB9Ci0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTSENoYW5nZU5vdGlmeURlcmVnaXN0ZXIgW1NIRUxMMzIuNF0KKyAqLworRFdPUkQgV0lOQVBJCitTSENoYW5nZU5vdGlmeURlcmVnaXN0ZXIoTE9ORyB4MSxMT05HIHgyKQorewlGSVhNRShzaGVsbCwiKDB4JTA4bHgsMHglMDhseCk6c3R1Yi5cbiIseDEseDIpOworCXJldHVybiAwOworfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSAJCSBJTEdldERpc3BsYXlOYW1lCQkJW1NIRUxMMzIuMTVdCiAgKiBnZXRfcGF0aF9mcm9tX2l0ZW1saXN0KGl0ZW1saXN0LHBhdGgpOyA/IG5vdCBzdXJlLi4uCkBAIC02Nyw2ICs4Miw1OCBAQAogCX0KIAlyZXR1cm4gbGFzdHNpaTsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTEZpbmRMYXN0SUQgW1NIRUxMMzIuMTddCisgKiBOT1RFUworICogIENyZWF0ZXMgYSBuZXcgbGlzdCB3aXRoIHRoZSBsYXN0IHRpZW0gcmVtb3ZlZAorICovCisgTFBJVEVNSURMSVNUIFdJTkFQSSBJTFJlbW92ZUxhc3RJRChMUENJVEVNSURMSVNUKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSUxDbG9uZSBbU0hFTEwzMi4xOF0KKyAqCisgKiBOT1RFUworICogICAgZHVwaWNhdGUgYW4gaWRsaXN0CisgKi8KK0xQSVRFTUlETElTVCBXSU5BUEkgSUxDbG9uZSAoTFBJVEVNSURMSVNUIGlpbCkgeworCURXT1JECQlsZW47CisJTFBJVEVNSURMSVNUCW5ld2lpbDsKKyAgVFJBQ0Uoc2hlbGwsIiVwXG4iLGlpbCk7CisJbGVuID0gSUxHZXRTaXplKGlpbCk7CisJbmV3aWlsID0gKExQSVRFTUlETElTVClTSEFsbG9jKGxlbik7CisJaWYgKG5ld2lpbCkKKwkJbWVtY3B5KG5ld2lpbCxpaWwsbGVuKTsKKwlyZXR1cm4gbmV3aWlsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSUxDbG9uZUZpcnN0IFtTSEVMTDMyLjE5XQorICoKKyAqIE5PVEVTCisgKiAgZHVwbGljYXRlcyB0aGUgZmlyc3QgaWRsaXN0IG9mIGEgY29tcGxleCBwaWRsCisgKi8KK0xQSVRFTUlETElTVCBXSU5BUEkgSUxDbG9uZUZpcnN0KExQQ0lURU1JRExJU1QgcGlkbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTENvbWJpbmUgW1NIRUxMMzIuMjVdCisgKgorICogTk9URVMKKyAqICBDb25jYXRlbmF0ZXMgdHdvIGNvbXBsZXggaWRsaXN0cy4KKyAqICBUaGUgcGlkbCBpcyB0aGUgZmlyc3Qgb25lLCBwaWRsc3ViIHRoZSBuZXh0IG9uZQorICogIERvZXMgbm90IGRlc3Ryb3kgdGhlIHBhc3NlZCBpbiBpZGxpc3RzIQorICovCitMUElURU1JRExJU1QgV0lOQVBJIElMQ29tYmluZShMUElURU1JRExJU1QgaWlsMSxMUElURU1JRExJU1QgaWlsMikgeworCURXT1JECQlsZW4xLGxlbjI7CisJTFBJVEVNSURMSVNUCW5ld2lpbDsKKwlUUkFDRShzaGVsbCwiJXAgJXBcbiIsaWlsMSxpaWwyKTsKKwlsZW4xIAk9IElMR2V0U2l6ZShpaWwxKS0yOworCWxlbjIJPSBJTEdldFNpemUoaWlsMik7CisJbmV3aWlsCT0gU0hBbGxvYyhsZW4xK2xlbjIpOworCW1lbWNweShuZXdpaWwsaWlsMSxsZW4xKTsKKwltZW1jcHkoKChjaGFyKiluZXdpaWwpK2xlbjEsaWlsMixsZW4yKTsKKwlyZXR1cm4gbmV3aWlsOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUGF0aElzUm9vdCBbU0hFTEwzMi4yOV0KQEAgLTEyNSwxNiArMTkyLDE3IEBACiAgKiBOT1RFUwogICogICAgIGFwcGVuZCBcIGlmIHRoZXJlIGlzIG5vbmUKICAqLwotTFBTVFIgV0lOQVBJIFBhdGhBZGRCYWNrc2xhc2goTFBTVFIgcGF0aCkgewotICAgIGludCBsZW47CitMUFNUUiBXSU5BUEkgUGF0aEFkZEJhY2tzbGFzaChMUFNUUiBwYXRoKQoreyBpbnQgbGVuOwogICBUUkFDRShzaGVsbCwiJXAtPiVzXG4iLHBhdGgscGF0aCk7Ci0gICAgbGVuID0gbHN0cmxlbjMyQShwYXRoKTsKLSAgICBpZiAobGVuICYmIHBhdGhbbGVuLTFdIT0nXFwnKSB7Ci0gICAgCXBhdGhbbGVuKzBdPSdcXCc7Ci0JcGF0aFtsZW4rMV09J1wwJzsKLQlyZXR1cm4gcGF0aCtsZW4rMTsKLSAgICB9IGVsc2UKLSAgICAJcmV0dXJuIHBhdGgrbGVuOworICBsZW4gPSBzdHJsZW4ocGF0aCk7CisgIGlmIChsZW4gJiYgcGF0aFtsZW4tMV0hPSdcXCcpIAorCXsgcGF0aFtsZW4rMF09J1xcJzsKKyAgICBwYXRoW2xlbisxXT0nXDAnOworICAgIHJldHVybiBwYXRoK2xlbisxOworICB9CisJZWxzZQorICAgIHJldHVybiBwYXRoK2xlbjsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0MywyMCArMjExLDIwIEBACiAgKiBOT1RFUwogICogICAgIHJlbW92ZSBzcGFjZXMgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBwYXNzZWQgc3RyaW5nCiAgKi8KLUxQU1RSIFdJTkFQSSBQYXRoUmVtb3ZlQmxhbmtzKExQU1RSIHN0cikgewotICAgIExQU1RSIHggPSBzdHI7Ci0gIFRSQUNFKHNoZWxsLCJQYXRoUmVtb3ZlQmxhbmtzICVzXG4iLHN0cik7Ci0gICAgd2hpbGUgKCp4PT0nICcpIHgrKzsKLSAgICBpZiAoeCE9c3RyKQotCWxzdHJjcHkzMkEoc3RyLHgpOwotICAgIGlmICghKnN0cikKLQlyZXR1cm4gc3RyOwotICAgIHg9c3RyK3N0cmxlbihzdHIpLTE7Ci0gICAgd2hpbGUgKCp4PT0nICcpCi0JeC0tOwotICAgIGlmICgqeD09JyAnKQotCSp4PSdcMCc7Ci0gICAgcmV0dXJuIHg7CitMUFNUUiBXSU5BUEkgUGF0aFJlbW92ZUJsYW5rcyhMUFNUUiBzdHIpCit7IExQU1RSIHggPSBzdHI7CisgIFRSQUNFKHNoZWxsLCIlc1xuIixzdHIpOworICB3aGlsZSAoKng9PScgJykgeCsrOworICBpZiAoeCE9c3RyKQorCSAgc3RyY3B5KHN0cix4KTsKKyAgaWYgKCEqc3RyKQorCSAgcmV0dXJuIHN0cjsKKyAgeD1zdHIrc3RybGVuKHN0ciktMTsKKyAgd2hpbGUgKCp4PT0nICcpCisJICB4LS07CisgIGlmICgqeD09JyAnKQorCSAgKng9J1wwJzsKKyAgcmV0dXJuIHg7CiB9CiAKIApAQCAtMTY4LDcgKzIzNiw3IEBACiAgKi8KIExQU1RSIFdJTkFQSSBQYXRoRmluZEZpbGVuYW1lKExQU1RSIGZuKSB7CiAgICAgTFBTVFIgYmFzZWZuOwotICBUUkFDRShzaGVsbCwiUGF0aEZpbmRGaWxlbmFtZSAlc1xuIixmbik7CisgIFRSQUNFKHNoZWxsLCIlc1xuIixmbik7CiAgICAgYmFzZWZuID0gZm47CiAgICAgd2hpbGUgKGZuWzBdKSB7CiAgICAgCWlmICgoKGZuWzBdPT0nXFwnKSB8fCAoZm5bMF09PSc6JykpICYmIGZuWzFdICYmIGZuWzFdIT0nXFwnKQpAQCAtMzkyLDcgKzQ2MCwxOSBAQAogdm9pZCBXSU5BUEkgU2hlbGxfR2V0Q2FjaGVkSW1hZ2VJbmRleChMUFNUUiB4LERXT1JEIHksRFdPUkQgeikgewogCUZJWE1FKHNoZWxsLCIoJXMsJTA4bHgsJTA4bHgpOnN0dWIuXG4iLHgseSx6KTsKIH0KLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNIU2hlbGxGb2xkZXJWaWV3X01lc3NhZ2UgW1NIRUxMMzIuNzNdCisgKiBOT1RFUworICogIE1lc3NhZ2UgU0ZWTV9SRUFSUkFOR0UgPSAxCisgKiAgICBUaGlzIG1lc3NhZ2UgZ2V0cyBzZW50IHdoZW4gYSBjb2x1bW4gZ2V0cyBjbGlja2VkIHRvIGluc3RydWN0IHRoZQorICogICAgc2hlbGwgdmlldyB0byByZS1zb3J0IHRoZSBpdGVtIGxpc3QuIGxQYXJhbSBpZGVudGlmaWVzIHRoZSBjb2x1bW4KKyAqICAgIHRoYXQgd2FzIGNsaWNrZWQuCisgKi8KK2ludCBXSU5BUEkgU0hTaGVsbEZvbGRlclZpZXdfTWVzc2FnZSgKKyAgICBIV05EMzIgaHduZENhYmluZXQsIC8qIFRoaXMgaHduZCBkZWZpbmVzIHRoZSBleHBsb3JlciBjYWJpbmV0IHdpbmRvdyB0aGF0IGNvbnRhaW5zIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbHZpZXcgeW91IG5lZWQgdG8gY29tbXVuaWNhdGUgd2l0aCovCisJCVVJTlQzMiB1TXNnLCAgICAgICAgLyogQSBwYXJhbWV0ZXIgaWRlbnRpZnlpbmcgdGhlIFNGVk0gZW51bSB0byBwZXJmb3JtICovCisJCUxQQVJBTSBsUGFyYW0pOwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNIQ2xvbmVTcGVjaWFsSURMaXN0IFtTSEVMTDMyLjg5XQogICogCkBAIC00NTgsMjYgKzUzOCwzOCBAQAogICogCiAgKiBOT1RFUwogICogICAgIGV4cG9ydGVkIGJ5IG9yZGluYWwKKyAqCiAgKi8KIERXT1JEIFdJTkFQSQotU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleChEV09SRCB4LERXT1JEIHksRFdPUkQgeikgewotCUZJWE1FKHNoZWxsLCIoJTA4bHgsJTA4bHgsJTA4bHgpOnN0dWIuXG4iLHgseSx6KTsKK1NITWFwUElETFRvU3lzdGVtSW1hZ2VMaXN0SW5kZXgoCisgICAgRFdPUkQgeCwJLyogcG9pbnRlciB0byBhbiBpbnN0YW5jZSBvZiBJU2hlbGxGb2xkZXIgKi8KKwkJRFdPUkQgeSwKKwkJRFdPUkQgeikKK3sJRklYTUUoc2hlbGwsIiglMDhseCwlMDhseCwlMDhseCk6c3R1Yi5cbiIseCx5LHopOwogCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogCSAJCSBTSEVMTDMyXzc5ICAgCQkJW1NIRUxMMzIuNzldCi0gKiBjcmVhdGVfZGlyZWN0b3J5X2FuZF9ub3RpZnkoLi4uKQorICogT2xlU3RyVG9TdHJOCVtTSEVMTDMyLjc4XQogICogCiAgKiBOT1RFUwotICogKGlzbid0IGl0IFN0clRvT2xlU3RyTiA/Pz8ganNjaCkKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCiAgKi8KLURXT1JEIFdJTkFQSSBTSEVMTDMyXzc5KExQQ1NUUiBkaXIsTFBWT0lEIHh2b2lkKSB7Ci0JVFJBQ0Uoc2hlbGwsIm1rZGlyICVzLCVwXG4iLGRpcix4dm9pZCk7Ci0JaWYgKCFDcmVhdGVEaXJlY3RvcnkzMkEoZGlyLHh2b2lkKSkKLQkJcmV0dXJuIEZBTFNFOwotCS8qIFNIQ2hhbmdlTm90aWZ5KDgsMSxkaXIsMCk7ICovCi0JcmV0dXJuIFRSVUU7CitCT09MMzIgV0lOQVBJCitPbGVTdHJUb1N0ck4gKExQU1RSIGxwTXVsdGksIElOVDMyIG5NdWx0aSwgTFBDV1NUUiBscFdpZGUsIElOVDMyIG5XaWRlKSB7CisgICAgcmV0dXJuIFdpZGVDaGFyVG9NdWx0aUJ5dGUgKDAsIDAsIGxwV2lkZSwgbldpZGUsCisJCQkJbHBNdWx0aSwgbk11bHRpLCBOVUxMLCBOVUxMKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFN0clRvT2xlU3RyTglbU0hFTEwzMi43OV0KKyAqIAorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCisgKi8KK0JPT0wzMiBXSU5BUEkKK1N0clRvT2xlU3RyTiAoTFBXU1RSIGxwV2lkZSwgSU5UMzIgbldpZGUsIExQQ1NUUiBscE11bHRpLCBJTlQzMiBuTXVsdGkpIHsKKyAgICByZXR1cm4gTXVsdGlCeXRlVG9XaWRlQ2hhciAoMCwgMCwgbHBNdWx0aSwgbk11bHRpLCBscFdpZGUsIG5XaWRlKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUxMiwxNCArNjA0LDIxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqLwotc3RhdGljIERXT1JEIFNIX2dldF9pbnN0YW5jZShSRUZDTFNJRCBjbHNpZCxMUFNUUiBkbGxuYW1lLAotCUxQVk9JRAl1bmtub3dub3V0ZXIsUkVGSUlEIHJlZmlpZCxMUFZPSUQgaW5zdAotKSB7Ci0gICAgICAgIEdldENsYXNzUHRyICAgICBkbGxnZXRjbGFzc29iOworc3RhdGljIERXT1JEIFNIX2dldF9pbnN0YW5jZSgKKyAgICBSRUZDTFNJRCBjbHNpZCwKKwkJTFBTVFIgZGxsbmFtZSwKKwkgIExQVk9JRCB1bmtub3dub3V0ZXIsCisJCVJFRklJRCByZWZpaWQsCisJCUxQVk9JRCBpbnN0KSAKK3sgR2V0Q2xhc3NQdHIgICAgIGRsbGdldGNsYXNzb2I7CiAJRFdPUkQJCWhyZXM7CiAJTFBDTEFTU0ZBQ1RPUlkJY2xhc3NmYWM7CiAKLSAgVFJBQ0Uoc2hlbGwsIiVzXG4iLGRsbG5hbWUpOworICBjaGFyCXhjbHNpZFs1MF0seHJlZmlpZFs1MF07CisgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKWNsc2lkLHhjbHNpZCk7CisgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJlZmlpZCx4cmVmaWlkKTsKKyAgVFJBQ0Uoc2hlbGwsIlxuXHRDTFNJRDolcywlcywlcCxcblx0SUlEOiVzLCVwXG4iLAorCSAgIHhjbHNpZCwgZGxsbmFtZSx1bmtub3dub3V0ZXIseHJlZmlpZCxpbnN0KTsKIAkKIAlkbGxnZXRjbGFzc29iID0gU0hfZmluZF9tb2R1bGVwcm9jKGRsbG5hbWUsTlVMTCwiRGxsR2V0Q2xhc3NPYmplY3QiKTsKIAlpZiAoIWRsbGdldGNsYXNzb2IpCkBAIC02NjMsNyArNzYyLDggQEAKICAqIElMR2V0U2l6ZSBbU0hFTEwzMi4xNTJdCiAgKgogICogTk9URVMKLSAqICAgICBleHBvcnRlZCBieSBvcmRpbmFsCisgKiAgZXhwb3J0ZWQgYnkgb3JkaW5hbAorICogIEdldHMgdGhlIGJ5dGUgc2l6ZSBvZiBhbiBpZGxpc3QgaW5jbHVkaW5nIHplcm8gdGVybWluYXRvcgogICovCiBEV09SRCBXSU5BUEkgSUxHZXRTaXplKExQSVRFTUlETElTVCBpaWwpIHsKIAlMUFNISVRFTUlECXNpOwpAQCAtNjc5LDYgKzc3OSwxNiBAQAogCX0KIAlyZXR1cm4gbGVuOwogfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElMQXBwZW5kIFtTSEVMTDMyLjE1NF0KKyAqCisgKiBOT1RFUworICogIEFkZHMgdGhlIHNpbmdsZSBpdGVtIHRvIHRoZSBpZGxpc3QgaW5kaWNhdGVkIGJ5IHBpZGwuCisgKiAgaWYgYkVuZCBpcyAwLCBhZGRzIHRoZSBpdGVtIHRvIHRoZSBmcm9udCBvZiB0aGUgbGlzdCwKKyAqICBvdGhlcndpc2UgYWRkcyB0aGUgaXRlbSB0byB0aGUgZW5kLgorICogIERlc3Ryb3lzIHRoZSBwYXNzZWQgaW4gaWRsaXN0IQorICovCitMUElURU1JRExJU1QgV0lOQVBJIElMQXBwZW5kKExQSVRFTUlETElTVCBwaWRsLExQQ0lURU1JRExJU1QgaXRlbSxCT09MMzIgYkVuZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQYXRoR2V0RXh0ZW5zaW9uIFtTSEVMTDMyLjE1OF0KQEAgLTczNiwzNiArODQ2LDYgQEAKIAlyZXR1cm4gKExQVk9JRClMb2NhbEFsbG9jMzIobGVuLExNRU1fWkVST0lOSVQpOyAvKiBGSVhNRSAqLwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSUxDbG9uZSBbU0hFTEwzMi4xOF0KLSAqCi0gKi8KLUxQSVRFTUlETElTVCBXSU5BUEkgSUxDbG9uZSAoTFBJVEVNSURMSVNUIGlpbCkgewotCURXT1JECQlsZW47Ci0JTFBJVEVNSURMSVNUCW5ld2lpbDsKLSAgVFJBQ0Uoc2hlbGwsIiVwXG4iLGlpbCk7Ci0JbGVuID0gSUxHZXRTaXplKGlpbCk7Ci0JbmV3aWlsID0gKExQSVRFTUlETElTVClTSEFsbG9jKGxlbik7Ci0JaWYgKG5ld2lpbCkKLQkJbWVtY3B5KG5ld2lpbCxpaWwsbGVuKTsKLQlyZXR1cm4gbmV3aWlsOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSUxDb21iaW5lIFtTSEVMTDMyLjI1XQotICoKLSAqLwotTFBJVEVNSURMSVNUIFdJTkFQSSBJTENvbWJpbmUoTFBJVEVNSURMSVNUIGlpbDEsTFBJVEVNSURMSVNUIGlpbDIpIHsKLQlEV09SRAkJbGVuMSxsZW4yOwotCUxQSVRFTUlETElTVAluZXdpaWw7Ci0JVFJBQ0Uoc2hlbGwsIiVwICVwXG4iLGlpbDEsaWlsMik7Ci0JbGVuMSAJPSBJTEdldFNpemUoaWlsMSktMjsKLQlsZW4yCT0gSUxHZXRTaXplKGlpbDIpOwotCW5ld2lpbAk9IFNIQWxsb2MobGVuMStsZW4yKTsKLQltZW1jcHkobmV3aWlsLGlpbDEsbGVuMSk7Ci0JbWVtY3B5KCgoY2hhciopbmV3aWlsKStsZW4xLGlpbDIsbGVuMik7Ci0JcmV0dXJuIG5ld2lpbDsKLX0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElMRnJlZSBbU0hFTEwzMi4xNTVdCkBAIC04OTMsMyArOTczLDU3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTSEFkZFRvUmVjZW50RG9jcyBbU0hFTEwzMi4yMzRdCisgKgorICogTk9URVMKKyAqICAgICBleHBvcnRlZCBieSBuYW1lCisgKi8KK0RXT1JEIFdJTkFQSSBTSEFkZFRvUmVjZW50RG9jczMyICgKKyAgICBVSU5UMzIgdUZsYWdzLCAgLyogW0lOXSBTSEFSRF9QQVRIIG9yIFNIQVJEX1BJREwgKi8KKwkJTFBDVk9JRCBwdikgICAgIC8qIFtJTl0gc3RyaW5nIG9yIHBpZGwsIE5VTEwgY2xlYXJzIHRoZSBsaXN0ICovCit7IGlmIChTSEFSRF9QSURMPT11RmxhZ3MpCisgIHsgRklYTUUgKHNoZWxsLCIoMHglMDh4LHBpZGw9JXApOnN0dWIuXG4iLCB1RmxhZ3MscHYpOworCX0KKwllbHNlCisJeyBGSVhNRSAoc2hlbGwsIigweCUwOHgsJXMpOnN0dWIuXG4iLCB1RmxhZ3MsKGNoYXIqKXB2KTsKKwl9CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0hGaWxlT3BlcmF0aW9uIFtTSEVMTDMyLjI0Ml0KKyAqCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG5hbWUKKyAqLworRFdPUkQgV0lOQVBJIFNIRmlsZU9wZXJhdGlvbjMyICgKKyAgICBMUFNIRklMRU9QU1RSVUNUMzIgbHBGaWxlT3ApICAgCit7IEZJWE1FIChzaGVsbCwiKCVwKTpzdHViLlxuIiwgbHBGaWxlT3ApOworICByZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNIQ2hhbmdlTm90aWZ5IFtTSEVMTDMyLjIzOV0KKyAqCisgKiBOT1RFUworICogICAgIGV4cG9ydGVkIGJ5IG5hbWUKKyAqLworRFdPUkQgV0lOQVBJIFNIQ2hhbmdlTm90aWZ5MzIgKAorICAgIElOVDMyICAgd0V2ZW50SWQsICAvKiBbSU5dIGZsYWdzIHRoYXQgc3BlY2lmaWVzIHRoZSBldmVudCovCisgICAgVUlOVDMyICB1RmxhZ3MsICAgLyogW0lOXSB0aGUgbWVhbmluZyBvZiBkd0l0ZW1bMXwyXSovCisJCUxQQ1ZPSUQgZHdJdGVtMSwKKwkJTFBDVk9JRCBkd0l0ZW0yKQoreyBGSVhNRSAoc2hlbGwsIigweCUwOHgsMHglMDh1eCwlcCwlcCk6c3R1Yi5cbiIsIHdFdmVudElkLHVGbGFncyxkd0l0ZW0xLGR3SXRlbTIpOworICByZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTSENyZWF0ZVNoZWxsRm9sZGVyVmlld0V4IFtTSEVMTDMyLjE3NF0KKyAqCisgKi8KK0hSRVNVTFQgV0lOQVBJIFNIQ3JlYXRlU2hlbGxGb2xkZXJWaWV3RXgzMigKKyAgTFBTSEVMTFZJRVdEQVRBIHBzdmNiaSwgLypbaW4gXSBzaGVsbHRlbXBsYXRlIHN0cnVjdCovCisgIExQVk9JRCogcHB2KSAgICAgICAgICAgIC8qW291dF0gSVNoZWxsVmlldyBwb2ludGVyKi8KK3sgRklYTUUgKHNoZWxsLCIoJXAsJXApOnN0dWIuXG4iLCBwc3ZjYmkscHB2KTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9taXNjL3R3ZWFrLmMgYi9taXNjL3R3ZWFrLmMKaW5kZXggNWU3ZTZhZi4uMTFjMTlhNCAxMDA2NDQKLS0tIGEvbWlzYy90d2Vhay5jCisrKyBiL21pc2MvdHdlYWsuYwpAQCAtMzYsMTQgKzM2LDkgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAKIC8qIFBhcmFtZXRlcnMgZm9yIHdpbmRvd3Mvbm9uY2xpZW50LmMgKi8KLWV4dGVybiBpbnQgIE5DX0NhcHRpb25MZWZ0TnVkZ2U7Ci1leHRlcm4gaW50ICBOQ19DYXB0aW9uVG9wTnVkZ2U7Ci1leHRlcm4gaW50ICBOQ19TeXNDb250cm9sTnVkZ2U7CiBleHRlcm4gaW50ICBOQ19NYXhDb250cm9sTnVkZ2U7CiBleHRlcm4gaW50ICBOQ19NaW5Db250cm9sTnVkZ2U7CiBleHRlcm4gVUlOVDMyICBOQ19DYXB0aW9uVGV4dEZsYWdzOwotZXh0ZXJuIEhCUlVTSDMyICBOQ19XaW5IaWdobGlnaHQ5NTsKLWV4dGVybiBIQlJVU0gzMiAgTkNfV2luU2hhZG93OTU7CiAKIC8qIFBhcmFtZXRlcnMgZm9yIGNvbnRyb2xzL21lbnUuYyAqLwogZXh0ZXJuIFVJTlQzMiAgTUVOVV9CYXJJdGVtVG9wTnVkZ2U7CkBAIC0xMjUsMjAgKzEyMCwxMSBAQAogewogICAgIGNoYXIgIGtleV92YWx1ZVsyXTsKIAotICAgIE5DX0NhcHRpb25MZWZ0TnVkZ2UgPQotCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIkNhcHRpb25MZWZ0TnVkZ2UiLCAwKTsKLSAgICBOQ19DYXB0aW9uVG9wTnVkZ2UgPQotCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIkNhcHRpb25Ub3BOdWRnZSIsIDApOwotICAgIE5DX1N5c0NvbnRyb2xOdWRnZSA9Ci0JUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiU3lzQ29udHJvbE51ZGdlIiwgMCk7CiAgICAgTkNfTWF4Q29udHJvbE51ZGdlID0KIAlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJNYXhDb250cm9sTnVkZ2UiLCAwKTsKICAgICBOQ19NaW5Db250cm9sTnVkZ2UgPQogCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1pbkNvbnRyb2xOdWRnZSIsIDApOwogCi0gICAgTkNfV2luSGlnaGxpZ2h0OTUgPSBDcmVhdGVTb2xpZEJydXNoMzIoUkdCKDB4YzAsIDB4YzAsIDB4YzApKTsKLSAgICBOQ19XaW5TaGFkb3c5NSA9IENyZWF0ZVNvbGlkQnJ1c2gzMihSR0IoMHgwMCwgMHgwMCwgMHgwMCkpOwotCiAgICAgTkNfQ2FwdGlvblRleHRGbGFncyA9IERUX1NJTkdMRUxJTkUgfCBEVF9WQ0VOVEVSIHwgRFRfTk9QUkVGSVg7CiAKICAgICBQUk9GSUxFX0dldFdpbmVJbmlTdHJpbmcoIlR3ZWFrLkxheW91dCIsICJDYXB0aW9uQWxpZ25tZW50IiwgCmRpZmYgLS1naXQgYS9taXNjL3dpbnNvY2tfZG5zLmMgYi9taXNjL3dpbnNvY2tfZG5zLmMKaW5kZXggYmFmOWI5Zi4uY2Y4NDE3MiAxMDA2NDQKLS0tIGEvbWlzYy93aW5zb2NrX2Rucy5jCisrKyBiL21pc2Mvd2luc29ja19kbnMuYwpAQCAtNDcsNyArNDcsOCBAQAogI2RlZmluZSBGQVNZTkMgRklPQVNZTkMKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCAgICAgICAgICAvKiBhc3luYyBETlMgb3AgY29udHJvbCBzdHJ1Y3QgKi8KKy8qIGFzeW5jIEROUyBvcCBjb250cm9sIHN0cnVjdCAqLwordHlwZWRlZiBzdHJ1Y3QgICAgICAgICAgCiB7CiAgIHdzX2FzeW5jX29wKiAgd3NfYW9wOwogICBjaGFyKiAgICAgICAgIGJ1ZmZlcjsKQEAgLTI2Myw3ICsyNjQsOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnZXRYYnlZIHJlcXVlc3RzICovCiAKLXN0YXRpYwkgd3NfYXN5bmNfY3RsCWFzeW5jX2N0bDsgLyogY2hpbGQgcHJvY2VzcyBjb250cm9sIHN0cnVjdCAqLworLyogY2hpbGQgcHJvY2VzcyBjb250cm9sIHN0cnVjdCAqLworc3RhdGljCSB3c19hc3luY19jdGwJYXN5bmNfY3RsOyAKIAogc3RhdGljIGludCBhb3BfY29udHJvbCh3c19hc3luY19vcCogcF9hb3AsIGludCBmbGFnICkKIHsKZGlmZiAtLWdpdCBhL21zZG9zL2Nkcm9tLmMgYi9tc2Rvcy9jZHJvbS5jCmluZGV4IDM3ZDczYTguLjE4ODFjNzcgMTAwNjQ0Ci0tLSBhL21zZG9zL2Nkcm9tLmMKKysrIGIvbXNkb3MvY2Ryb20uYwpAQCAtNywxMiArNywxNyBAQAogCiAjaWZkZWYgbGludXgKIAorI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAvKiBGSVhNRSAtIGhvdyB0byBtYWtlIHRoaXMgT1MgaW5kZXBlbmRlbnQgPz8gKi8KLSNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgotI2luY2x1ZGUgPGxpbnV4L3VjZHJvbS5oPgorI2lmZGVmIEhBVkVfTElOVVhfQ0RST01fSAorIyBpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9MSU5VWF9VQ0RST01fSAorIyBpbmNsdWRlIDxsaW51eC91Y2Ryb20uaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAibGR0LmgiCiAjaW5jbHVkZSAiZHJpdmUuaCIKQEAgLTEwNyw3ICsxMTIsNyBAQAogaWYgKCFkcml2ZXJfcmVxdWVzdCkgCiAgICAgIHsgICAgICAgICAgICAgLyogRklYTUUgLSB0byBiZSBkZWxldGVkID8/ICovCiAJRVJSKGludCwiICAgRVM6Qlg9PTAgISBTRUdGQVVMVCA/XG4iKTsKLQlFUlIoaW50LCIgLS0+Qlg9MHglMDRYLCBFUz0weCUwNFgsIERTPTB4JTA0WCwgQ1g9MHglMDRYXG5cbiIsCisJRVJSKGludCwiIC0tPkJYPTB4JTA0eCwgRVM9MHglMDRseCwgRFM9MHglMDRseCwgQ1g9MHglMDR4XG5cbiIsCiAJCUJYX3JlZyhjb250ZXh0KSwKIAkJRVNfcmVnKGNvbnRleHQpLAogCQlEU19yZWcoY29udGV4dCksCkBAIC0xNTUsNyArMTYwLDcgQEAKIAkgaW9fc3RydVsyXT0xOyAvKiBzdXBwb3J0cyBhdWRpbyBjaGFubmVscyAoPz8gRklYTUUgPz8pICovCiAJIGlvX3N0cnVbMV09MTY7IC8qIGRhdGEgcmVhZCBhbmQgcGxheXMgYXVkaW8gcmFja3MgKi8KIAkgaW9fc3RydVsxXXw9KGlvY3RsKGZkY2QsQ0RST01fRFJJVkVfU1RBVFVTLDApPT1DRFNfVFJBWV9PUEVOKTsKLSAgICAgICAgIFRSQUNFKGludCwiIC0tLS0+IERFVklDRSBTVEFUVVMgPDB4JTA4WD5cblxuIiwoRFdPUkQpaW9fc3RydVsxXSk7IAorICAgICAgICAgVFJBQ0UoaW50LCIgLS0tLT4gREVWSUNFIFNUQVRVUyA8MHglMDhseD5cblxuIiwoRFdPUkQpaW9fc3RydVsxXSk7IAogCSBicmVhazsKIAogCWNhc2UgOTogLyogbWVkaWEgY2hhbmdlZCA/ICovCmRpZmYgLS1naXQgYS9tc2Rvcy9pbnQyMS5jIGIvbXNkb3MvaW50MjEuYwppbmRleCBlYzg1NDM5Li5iMzk1OTJmIDEwMDY0NAotLS0gYS9tc2Rvcy9pbnQyMS5jCisrKyBiL21zZG9zL2ludDIxLmMKQEAgLTIwOSw5ICsyMDksMjYgQEAKIAogc3RhdGljIHZvaWQgaW9jdGxHZXREZXZpY2VJbmZvKCBDT05URVhUICpjb250ZXh0ICkKIHsKLSAgICBpbnQgY3Vycl9kcml2ZTsKKyAgICBpbnQgY3Vycl9kcml2ZSwgaTsKKyAgICBGSUxFX09CSkVDVCAqZmlsZTsKKwogICAgIFRSQUNFKGludDIxLCAiKCVkKVxuIiwgQlhfcmVnKGNvbnRleHQpKTsKICAgICAKKyAgICBSRVNFVF9DRkxBRyhjb250ZXh0KTsKKworICAgIC8qIERPUyBkZXZpY2UgPyAqLworICAgIGlmICgoZmlsZSA9IEZJTEVfR2V0RmlsZSggQlhfcmVnKGNvbnRleHQpICkpKQorICAgIHsKKyAgICAgICAgY29uc3QgRE9TX0RFVklDRSAqZGV2ID0gRE9TRlNfR2V0RGV2aWNlKCBmaWxlLT51bml4X25hbWUgKTsKKyAgICAgICAgRklMRV9SZWxlYXNlRmlsZSggZmlsZSApOworICAgICAgICBpZiAoZGV2KQorICAgICAgICB7CisJICAgIERYX3JlZyhjb250ZXh0KSA9IGRldi0+ZmxhZ3M7CisJICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGl0IHNlZW1zIHRvIGJlIGEgZmlsZSAqLwogICAgIGN1cnJfZHJpdmUgPSBEUklWRV9HZXRDdXJyZW50RHJpdmUoKTsKICAgICBEWF9yZWcoY29udGV4dCkgPSAweDAxNDAgKyBjdXJyX2RyaXZlICsgKChjdXJyX2RyaXZlID4gMSkgPyAweDA4MDAgOiAwKTsgCiAgICAgLyogbm8gZmxvcHB5ICovCkBAIC0yMjIsNyArMjM5LDYgQEAKICAgICAgKiBiaXQgMTQgLSBkb24ndCBzZXQgZmlsZSBkYXRlL3RpbWUgb24gY2xvc2luZwogICAgICAqIGJpdCAxNSAtIGZpbGUgaXMgcmVtb3RlCiAgICAgICovCi0gICAgUkVTRVRfQ0ZMQUcoY29udGV4dCk7CiB9CiAKIHN0YXRpYyBCT09MMzIgaW9jdGxHZW5lcmljQmxrRGV2UmVxKCBDT05URVhUICpjb250ZXh0ICkKQEAgLTEzMjMsOCArMTMzOSw5IEBACiAgICAgICAgIGNhc2UgMHgwMjp7CiAgICAgICAgICAgIEZJTEVfT0JKRUNUICpmaWxlOwogICAgICAgICAgICBmaWxlID0gRklMRV9HZXRGaWxlKEJYX3JlZyhjb250ZXh0KSk7Ci0gICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoZmlsZS0+dW5peF9uYW1lLCAiU0NTSU1HUiQiKSkKKyAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKGZpbGUtPnVuaXhfbmFtZSwgIlNDU0lNR1IkIikpCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1BJX0RPU19IYW5kbGVJbnQoY29udGV4dCk7CisgICAgICAgICAgIEZJTEVfUmVsZWFzZUZpbGUoIGZpbGUgKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogCWNhc2UgMHgwNTp7CS8qIElPQ1RMIC0gV1JJVEUgVE8gQkxPQ0sgREVWSUNFIENPTlRST0wgQ0hBTk5FTCAqLwpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9kc291bmQuYyBiL211bHRpbWVkaWEvZHNvdW5kLmMKaW5kZXggODkyNmFmMy4uZDNhZGM3NiAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9kc291bmQuYworKysgYi9tdWx0aW1lZGlhL2Rzb3VuZC5jCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CkBAIC05NzcsNiArOTc4LDggQEAKIAkJd2hpbGUgKGN1cmxlZnQgPCBzaXplb2YocGxheWJ1ZikpIHsKIAkJCXJlcyA9IHdyaXRlKGF1ZGlvZmQsKExQQllURSlwbGF5YnVmK2N1cmxlZnQsc2l6ZW9mKHBsYXlidWYpLWN1cmxlZnQpOwogCQkJaWYgKHJlcz09LTEpIHsKKwkJCQlpZiAoZXJybm89PUVJTlRSKQorCQkJCQljb250aW51ZTsKIAkJCQlwZXJyb3IoIndyaXRlIGF1ZGlvZmQiKTsKIAkJCQlFeGl0VGhyZWFkKDApOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbXVsdGltZWRpYS9tbXN5c3RlbS5jIGIvbXVsdGltZWRpYS9tbXN5c3RlbS5jCmluZGV4IDM2YzkyNjEuLjNkYmM3YzEgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbW1zeXN0ZW0uYworKysgYi9tdWx0aW1lZGlhL21tc3lzdGVtLmMKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInhtYWxsb2MuaCIKICNpbmNsdWRlICJjYWxsYmFjay5oIgorI2luY2x1ZGUgIm1vZHVsZS5oIgorI2luY2x1ZGUgInNlbGVjdG9ycy5oIgogCiBzdGF0aWMgaW50CUluc3RhbGxlZENvdW50Owogc3RhdGljIGludAlJbnN0YWxsZWRMaXN0TGVuOwpAQCAtMzcwOCwxOCArMzcxMCw2MSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAJCQkJbW1UYXNrQ3JlYXRlCQlbTU1TWVNURU0uOTAwXQogICovCi1MUkVTVUxUIFdJTkFQSSBtbVRhc2tDcmVhdGUxNihMUFdPUkQgbHBobmQsRFdPUkQgeDEsRFdPUkQgeDIpIHsKLQlGSVhNRShtbXN5cywiKCVwLCUwOGx4LCUwOGx4KTogc3R1YiFcbiIsbHBobmQseDEseDIpOwotCSpscGhuZCA9IDB4Y2FmZTsKLQlyZXR1cm4gMDsKK0hJTlNUQU5DRTE2IFdJTkFQSSBtbVRhc2tDcmVhdGUxNihMUFdPUkQgbHBobmQsSElOU1RBTkNFMTYgKmhNbVRhc2ssRFdPUkQgeDIpCit7CisgICAgRFdPUkQgc2hvd0NtZCA9IDB4NDAwMDI7CisgICAgTFBTVFIgY21kbGluZTsKKyAgICBXT1JEIHNlbDEsIHNlbDI7CisgICAgTE9BRFBBUkFNUyAqbHA7CisgICAgSElOU1RBTkNFMTYgcmV0LCBoYW5kbGU7CisKKyAgICBUUkFDRShtbXN5cywiKCVwLCVwLCUwOGx4KTtcbiIsbHBobmQsaE1tVGFzayx4Mik7CisgICAgY21kbGluZSA9IChMUFNUUilIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgMHgwZCk7CisgICAgY21kbGluZVswXSA9IDB4MGQ7CisgICAgKERXT1JEKWNtZGxpbmVbMV0gPSAoRFdPUkQpbHBobmQ7CisgICAgKERXT1JEKWNtZGxpbmVbNV0gPSB4MjsKKyAgICAoRFdPUkQpY21kbGluZVs5XSA9IDA7CisKKyAgICBzZWwxID0gU0VMRUNUT1JfQWxsb2NCbG9jayhjbWRsaW5lLCAweDBkLCBTRUdNRU5UX0RBVEEsIEZBTFNFLCBGQUxTRSk7CisgICAgc2VsMiA9IFNFTEVDVE9SX0FsbG9jQmxvY2soJnNob3dDbWQsIHNpemVvZihzaG93Q21kKSwKKwkJU0VHTUVOVF9EQVRBLCBGQUxTRSwgRkFMU0UpOworCisgICAgbHAgPSAoTE9BRFBBUkFNUyAqKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplb2YoTE9BRFBBUkFNUykpOworICAgIGxwLT5oRW52aXJvbm1lbnQgPSAwOworICAgIGxwLT5jbWRMaW5lID0gUFRSX1NFR19PRkZfVE9fU0VHUFRSKHNlbDEsIDApOworICAgIGxwLT5zaG93Q21kID0gUFRSX1NFR19PRkZfVE9fU0VHUFRSKHNlbDIsIDApOworICAgIGxwLT5yZXNlcnZlZCA9IDA7CisKKyAgICByZXQgPSBMb2FkTW9kdWxlMTYoImM6XFx3aW5kb3dzXFxtbXRhc2sudHNrIiwgbHApOworICAgIGlmIChyZXQgPCAzMikgeworCWlmIChyZXQpCisJICAgIHJldCA9IDE7CisJZWxzZQorCSAgICByZXQgPSAyOworCWhhbmRsZSA9IDA7CisgICAgfQorICAgIGVsc2UgeworCWhhbmRsZSA9IHJldDsKKwlyZXQgPSAwOworICAgIH0KKyAgICBpZiAoaE1tVGFzaykKKwkqKEhJTlNUQU5DRTE2ICopUFRSX1NFR19UT19MSU4oaE1tVGFzaykgPSBoYW5kbGU7CisKKyAgICBVbk1hcExTKFBUUl9TRUdfT0ZGX1RPX1NFR1BUUihzZWwyLCAwKSk7CisgICAgVW5NYXBMUyhQVFJfU0VHX09GRl9UT19TRUdQVFIoc2VsMSwgMCkpOworCisgICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgbHApOworICAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksIDAsIGNtZGxpbmUpOworCisgICAgcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAJCQkJbW1UYXNrU2lnbmFsCQlbTU1TWVNURU0uOTAzXQogICovCiBMUkVTVUxUIFdJTkFQSSBtbVRhc2tTaWduYWwxNihIVEFTSzE2IGh0KSB7Ci0JRklYTUUobW1zeXMsIiglMDR4KTogc3R1YiFcbiIsaHQpOwotCXJldHVybiBQb3N0QXBwTWVzc2FnZTE2KGh0LDB4NDAwLDAsMCk7CisJVFJBQ0UobW1zeXMsIiglMDR4KTtcbiIsaHQpOworCXJldHVybiBQb3N0QXBwTWVzc2FnZTE2KGh0LFdNX1VTRVIsMCwwKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9vYmplY3RzL2N1cnNvcmljb24uYyBiL29iamVjdHMvY3Vyc29yaWNvbi5jCmluZGV4IGY2NTY4YzguLjQ1ZDFjYzYgMTAwNjQ0Ci0tLSBhL29iamVjdHMvY3Vyc29yaWNvbi5jCisrKyBiL29iamVjdHMvY3Vyc29yaWNvbi5jCkBAIC04NjEsNyArODYxLDkgQEAKICAqLwogQk9PTDE2IFdJTkFQSSBEZXN0cm95SWNvbjE2KCBISUNPTjE2IGhJY29uICkKIHsKLSAgICByZXR1cm4gRGVzdHJveUljb24zMiggaEljb24gKTsKKyAgICBUUkFDRShpY29uLCAiJTA0eFxuIiwgaEljb24gKTsKKyAgICAvKiBGSVhNRTogc2hvdWxkIGNoZWNrIGZvciBPRU0vZ2xvYmFsIGhlYXAgaWNvbiBoZXJlICovCisgICAgcmV0dXJuIChGcmVlUmVzb3VyY2UxNiggaEljb24gKSA9PSAwKTsKIH0KIAogCkBAIC04NzEsOCArODczLDggQEAKIEJPT0wzMiBXSU5BUEkgRGVzdHJveUljb24zMiggSElDT04zMiBoSWNvbiApCiB7CiAgICAgVFJBQ0UoaWNvbiwgIiUwNHhcbiIsIGhJY29uICk7Ci0gICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBmb3IgT0VNIGljb24gaGVyZSAqLwotICAgIHJldHVybiAoRnJlZVJlc291cmNlMTYoIGhJY29uICkgPT0gMCk7CisgICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBmb3IgT0VNL2dsb2JhbCBoZWFwIGljb24gaGVyZSAqLworICAgIHJldHVybiAoRnJlZVJlc291cmNlMzIoIGhJY29uICkgPT0gMCk7CiB9CiAKIApAQCAtODgxLDcgKzg4Myw5IEBACiAgKi8KIEJPT0wxNiBXSU5BUEkgRGVzdHJveUN1cnNvcjE2KCBIQ1VSU09SMTYgaEN1cnNvciApCiB7Ci0gICAgcmV0dXJuIERlc3Ryb3lDdXJzb3IzMiggaEN1cnNvciApOworICAgIFRSQUNFKGN1cnNvciwgIiUwNHhcbiIsIGhDdXJzb3IgKTsKKyAgICAvKiBGSVhNRTogc2hvdWxkIGNoZWNrIGZvciBPRU0vZ2xvYmFsIGhlYXAgY3Vyc29yIGhlcmUgKi8KKyAgICByZXR1cm4gKEZyZWVSZXNvdXJjZTE2KCBoQ3Vyc29yICkgPT0gMCk7CiB9CiAKIApAQCAtODkxLDggKzg5NSw4IEBACiBCT09MMzIgV0lOQVBJIERlc3Ryb3lDdXJzb3IzMiggSENVUlNPUjMyIGhDdXJzb3IgKQogewogICAgIFRSQUNFKGN1cnNvciwgIiUwNHhcbiIsIGhDdXJzb3IgKTsKLSAgICAvKiBGSVhNRTogc2hvdWxkIGNoZWNrIGZvciBPRU0gY3Vyc29yIGhlcmUgKi8KLSAgICByZXR1cm4gKEZyZWVSZXNvdXJjZTE2KCBoQ3Vyc29yICkgPT0gMCk7CisgICAgLyogRklYTUU6IHNob3VsZCBjaGVjayBmb3IgT0VNL2dsb2JhbCBoZWFwIGN1cnNvciBoZXJlICovCisgICAgcmV0dXJuIChGcmVlUmVzb3VyY2UzMiggaEN1cnNvciApID09IDApOwogfQogCiAKQEAgLTE1MzEsNyArMTUzNSwxNyBAQAogICAgIGljb25pbmZvLT54SG90c3BvdCA9IGNpY29uaW5mby0+cHRIb3RTcG90Lng7CiAgICAgaWNvbmluZm8tPnlIb3RzcG90ID0gY2ljb25pbmZvLT5wdEhvdFNwb3QueTsKICAgICBpY29uaW5mby0+Zkljb24gICAgPSBUUlVFOyAvKiBobW0gKi8KLSAgICAvKiBGSVhNRSAuLi4gYWRkIGJvdGggYml0bWFwcyAqLworCisgICAgaWNvbmluZm8tPmhibUNvbG9yID0gQ3JlYXRlQml0bWFwMzIgKCBjaWNvbmluZm8tPm5XaWR0aCwgY2ljb25pbmZvLT5uSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWNvbmluZm8tPmJQbGFuZXMsIGNpY29uaW5mby0+YkJpdHNQZXJQaXhlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikoY2ljb25pbmZvICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjaWNvbmluZm8tPm5IZWlnaHQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVRNQVBfV0lEVEhfQllURVMoY2ljb25pbmZvLT5uV2lkdGgsMSkgKTsKKyAgICBpY29uaW5mby0+aGJtTWFzayA9IENyZWF0ZUJpdG1hcDMyICggY2ljb25pbmZvLT5uV2lkdGgsIGNpY29uaW5mby0+bkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwgKGNoYXIgKikoY2ljb25pbmZvICsgMSkpOworCisgICAgR2xvYmFsVW5sb2NrMTYoaEljb24pOworCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKZGlmZiAtLWdpdCBhL29iamVjdHMvZm9udC5jIGIvb2JqZWN0cy9mb250LmMKaW5kZXggOWMxZDYzOC4uOGRhNzA4OSAxMDA2NDQKLS0tIGEvb2JqZWN0cy9mb250LmMKKysrIGIvb2JqZWN0cy9mb250LmMKQEAgLTY1OSw5ICs2NTksMTMgQEAKICAgICBpZiAoIWRjKSByZXR1cm4gMDsKICAgICBpZiAoIShmb250ID0gKEZPTlRPQkogKikgR0RJX0dldE9ialB0ciggZGMtPncuaEZvbnQsIEZPTlRfTUFHSUMgKSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGxzdHJjcHluMzJBKCBuYW1lLCBmb250LT5sb2dmb250LmxmRmFjZU5hbWUsIGNvdW50ICk7CisgICAgaWYgKG5hbWUpIAorICAgICAgICBsc3RyY3B5bjMyQSggbmFtZSwgZm9udC0+bG9nZm9udC5sZkZhY2VOYW1lLCBjb3VudCApOwogICAgIEdESV9IRUFQX1VOTE9DSyggZGMtPncuaEZvbnQgKTsKLSAgICByZXR1cm4gc3RybGVuKG5hbWUpOworICAgIGlmIChuYW1lKQorICAgICAgICByZXR1cm4gc3RybGVuKG5hbWUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cmxlbihmb250LT5sb2dmb250LmxmRmFjZU5hbWUpICsgMTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9vYmplY3RzL3BhbGV0dGUuYyBiL29iamVjdHMvcGFsZXR0ZS5jCmluZGV4IGMyM2M3ODQuLmI0OGI3YzggMTAwNjQ0Ci0tLSBhL29iamVjdHMvcGFsZXR0ZS5jCisrKyBiL29iamVjdHMvcGFsZXR0ZS5jCkBAIC0xNjIsMTggKzE2MiwyMiBAQAogICAgIGlmICghcGFsUHRyKSByZXR1cm4gMDsKIAogICAgIG51bUVudHJpZXMgPSBwYWxQdHItPmxvZ3BhbGV0dGUucGFsTnVtRW50cmllczsKLSAgICBpZiAoc3RhcnQgPj0gbnVtRW50cmllcykgCi0gICAgewotICAgICAgR0RJX0hFQVBfVU5MT0NLKCBocGFsZXR0ZSApOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIGlmIChzdGFydCtjb3VudCA+IG51bUVudHJpZXMpIGNvdW50ID0gbnVtRW50cmllcyAtIHN0YXJ0OwotICAgIG1lbWNweSggZW50cmllcywgJnBhbFB0ci0+bG9ncGFsZXR0ZS5wYWxQYWxFbnRyeVtzdGFydF0sCi0JICAgIGNvdW50ICogc2l6ZW9mKFBBTEVUVEVFTlRSWSkgKTsKLSAgICBmb3IoIG51bUVudHJpZXMgPSAwOyBudW1FbnRyaWVzIDwgY291bnQgOyBudW1FbnRyaWVzKysgKQotICAgICAgICAgaWYgKGVudHJpZXNbbnVtRW50cmllc10ucGVGbGFncyAmIDB4RjApCi0gICAgICAgICAgICAgZW50cmllc1tudW1FbnRyaWVzXS5wZUZsYWdzID0gMDsKLSAgICBHRElfSEVBUF9VTkxPQ0soIGhwYWxldHRlICk7CisgICAgaWYgKGVudHJpZXMpCisgICAgeyAKKyAgICAgIGlmIChzdGFydCA+PSBudW1FbnRyaWVzKSAKKyAgICAgIHsKKwlHRElfSEVBUF9VTkxPQ0soIGhwYWxldHRlICk7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBtZW1jcHkoIGVudHJpZXMsICZwYWxQdHItPmxvZ3BhbGV0dGUucGFsUGFsRW50cnlbc3RhcnRdLAorCSAgICAgIGNvdW50ICogc2l6ZW9mKFBBTEVUVEVFTlRSWSkgKTsKKyAgICAgIGZvciggbnVtRW50cmllcyA9IDA7IG51bUVudHJpZXMgPCBjb3VudCA7IG51bUVudHJpZXMrKyApCisJICAgaWYgKGVudHJpZXNbbnVtRW50cmllc10ucGVGbGFncyAmIDB4RjApCisJICAgICAgIGVudHJpZXNbbnVtRW50cmllc10ucGVGbGFncyA9IDA7CisgICAgICBHRElfSEVBUF9VTkxPQ0soIGhwYWxldHRlICk7CisgICAgfQorCiAgICAgcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9vbGUvZm9sZGVycy5jIGIvb2xlL2ZvbGRlcnMuYwppbmRleCBhNzRhMmE3Li43YmU0MmVkIDEwMDY0NAotLS0gYS9vbGUvZm9sZGVycy5jCisrKyBiL29sZS9mb2xkZXJzLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJRFdPUkQgZHdPdXQpICAgLypbSU5dIGxlbmd0aCBvZiBwc3pPdXQqLwogeyBMUFNUUiAgIHBzelRhaWwgPSBwc3pOZXh0OwogICBEV09SRCBkd0NvcHk7Ci0gIFRSQUNFKHNoZWxsLCIoJXMgJXAgJWx4KVxuIixwc3pOZXh0LAlwc3pPdXQsIGR3T3V0KTsKKyAgVFJBQ0Uoc2hlbGwsIiglcyAlcCAweCUwOGx4KVxuIixwc3pOZXh0LAlwc3pPdXQsIGR3T3V0KTsKIAogICBpZighcHN6TmV4dCB8fCAhKnBzek5leHQpCiAgICAgcmV0dXJuIE5VTEw7CkBAIC01Miw3ICs1Miw3IEBACiAgIHsgIHBzelRhaWwrKzsKIAl9CiAKLSAgVFJBQ0Uoc2hlbGwsIi0tKCVzICVzICVseClcbiIscHN6TmV4dCwJcHN6T3V0LCBkd091dCk7CisgIFRSQUNFKHNoZWxsLCItLSglcyAlcyAweCUwOGx4KVxuIixwc3pOZXh0LAlwc3pPdXQsIGR3T3V0KTsKICAgcmV0dXJuIHBzelRhaWw7CiB9CiAKQEAgLTEzOCwzMiArMTM4LDM2IEBACiAgKi8KIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJQ2xhc3NGYWN0b3J5X0NyZWF0ZUluc3RhbmNlKAogICBMUENMQVNTRkFDVE9SWSB0aGlzLCBMUFVOS05PV04gcFVua25vd24sIFJFRklJRCByaWlkLCBMUFZPSUQgKnBwT2JqZWN0KQoteyBMUFNIRUxMRk9MREVSIHBTSEZvbGRlcjsKLSAgSFJFU1VMVCBoUmVzdWx0PUVfT1VUT0ZNRU1PUlk7Ci0gIAoreyBJVW5rbm93biAqcE9iaiA9IE5VTEw7CisJSFJFU1VMVCBocmVzOwogCWNoYXIJeHJpaWRbNTBdOworCiAgIFdJTkVfU3RyaW5nRnJvbUNMU0lEKChMUENMU0lEKXJpaWQseHJpaWQpOwogICBUUkFDRShzaGVsbCwiJXAtPiglcCxcblx0SUlEOlx0JXMpXG4iLHRoaXMscFVua25vd24seHJpaWQpOwogCi0gICpwcE9iamVjdCA9IE5VTEw7Ci0JCisJKnBwT2JqZWN0ID0gTlVMTDsKKwkJCiAJaWYocFVua25vd24pCi0JewlyZXR1cm4gQ0xBU1NfRV9OT0FHR1JFR0FUSU9OOworCXsJcmV0dXJuKENMQVNTX0VfTk9BR0dSRUdBVElPTik7CiAJfQogCiAJaWYgKElzRXF1YWxJSUQocmlpZCwgJklJRF9JU2hlbGxGb2xkZXIpKQotICB7IHBTSEZvbGRlciA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3RvcihOVUxMLE5VTEwpOwotICAgIGlmKHBTSEZvbGRlcikKLSAgCXsgaFJlc3VsdCA9IHBTSEZvbGRlci0+bHB2dGJsLT5mblF1ZXJ5SW50ZXJmYWNlKHBTSEZvbGRlcixyaWlkLCBwcE9iamVjdCk7Ci0gICAgICBwU0hGb2xkZXItPmxwdnRibC0+Zm5SZWxlYXNlKHBTSEZvbGRlcik7Ci0gIAkJVFJBQ0Uoc2hlbGwsIi0tIFNoZWxsRm9sZGVyIGNyZWF0ZWQ6ICglcCktPiVwXG4iLHRoaXMsKnBwT2JqZWN0KTsKLSAgCX0KLQl9CQorICB7IHBPYmogPSAoSVVua25vd24gKilJU2hlbGxGb2xkZXJfQ29uc3RydWN0b3IoTlVMTCxOVUxMKTsKKyAgfSAKIAllbHNlCi0JeyAgRklYTUUoc2hlbGwsInVua25vd24gSUlEIHJlcXVlc3RlZFxuXHRJSUQ6XHQlc1xuIix4cmlpZCk7Ci0JICAgaFJlc3VsdD1FX05PSU5URVJGQUNFOworCXsgRVJSKHNoZWxsLCJ1bmtub3duIElJRCByZXF1ZXN0ZWRcblx0SUlEOlx0JXNcbiIseHJpaWQpOworCSAgcmV0dXJuKEVfTk9JTlRFUkZBQ0UpOwogCX0KLSAgcmV0dXJuIGhSZXN1bHQ7CisJCisgIGlmICghcE9iaikKKyAgeyByZXR1cm4oRV9PVVRPRk1FTU9SWSk7CisgIH0KKwkgCisJaHJlcyA9IHBPYmotPmxwdnRibC0+Zm5RdWVyeUludGVyZmFjZShwT2JqLHJpaWQsIHBwT2JqZWN0KTsKKyAgcE9iai0+bHB2dGJsLT5mblJlbGVhc2UocE9iaik7CisgIFRSQUNFKHNoZWxsLCItLSBPYmplY3QgY3JlYXRlZDogKCVwKS0+JXBcbiIsdGhpcywqcHBPYmplY3QpOworCisgIHJldHVybiBocmVzOwogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSUNsYXNzRmFjdG9yeV9Mb2NrU2VydmVyCkBAIC0yMTcsNyArMjIxLDcgQEAKIAlscGVpZGwtPm1wTGFzdD1OVUxMOwogCWxwZWlkbC0+bXBDdXJyZW50PU5VTEw7CiAKLSAgVFJBQ0Uoc2hlbGwsIiglcCktPiglcyAlbHggJXApXG4iLGxwZWlkbCxscHN6UGF0aCxkd0ZsYWdzLHBSZXN1bHQpOworICBUUkFDRShzaGVsbCwiKCVwKS0+KCVzIDB4JTA4bHggJXApXG4iLGxwZWlkbCxscHN6UGF0aCxkd0ZsYWdzLHBSZXN1bHQpOwogCiAJbHBlaWRsLT5tcFBpZGxNZ3I9UGlkbE1ncl9Db25zdHJ1Y3RvcigpOwogICBpZiAoIWxwZWlkbC0+bXBQaWRsTWdyKQpAQCAtMzY4LDYwICszNzIsNjMgQEAKICAgV0lOMzJfRklORF9EQVRBMzJBIHN0ZmZpbGU7CQogICBIQU5ETEUzMiBoRmlsZTsKIAkKLSAgVFJBQ0Uoc2hlbGwsIiglcCktPiglcyAlbHgpIFxuIix0aGlzLGxwc3pQYXRoLGR3RmxhZ3MpOworICBUUkFDRShzaGVsbCwiKCVwKS0+KCVzIDB4JTA4bHgpIFxuIix0aGlzLGxwc3pQYXRoLGR3RmxhZ3MpOwogCiAgIC8qZW51bWVyYXRlIHRoZSBmb2xkZXJzKi8KICAgaWYoZHdGbGFncyAmIFNIQ09OVEZfRk9MREVSUykKLSAgeyAvKiBzcGVjaWFsIGNhc2UgLSB3ZSBjYW4ndCBlbnVtZXJhdGUgdGhlIERlc2t0b3AgbGV2ZWwgT2JqZWN0cyAoTXlDb21wdXRlcixOZXRob29kLi4uCi0gICBzbyB3ZSBuZWVkIHRvIGZha2UgYW4gZW51bWVyYXRpb24gb2YgdGhvc2UuKi8KLSAgIGlmKCFscHN6UGF0aCkKLSAgIHsgLy9jcmVhdGUgdGhlIHBpZGwgZm9yIHRoaXMgaXRlbQotICAgICBwaWRsID0gdGhpcy0+bXBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlRGVza3RvcCh0aGlzLT5tcFBpZGxNZ3IpOwotICAgICBpZihwaWRsKQotICAgICB7IGlmKCFJRW51bUlETGlzdF9BZGRUb0VudW1MaXN0KHRoaXMsIHBpZGwpKQotICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICB9CisgIHsJLyogc3BlY2lhbCBjYXNlIC0gd2UgY2FuJ3QgZW51bWVyYXRlIHRoZSBEZXNrdG9wIGxldmVsIE9iamVjdHMgKE15Q29tcHV0ZXIsTmV0aG9vZC4uLgorICAgIHNvIHdlIG5lZWQgdG8gZmFrZSBhbiBlbnVtZXJhdGlvbiBvZiB0aG9zZS4qLworCSAgaWYoIWxwc3pQYXRoKQorICAgIHsgVFJBQ0UgKHNoZWxsLCIoJXApLT4gZW51bWVyYXRlIHRoZSBzcGVjaWFsLWZvbGRlciBpdGVtc1xuIix0aGlzKTsKKyAgCQkvL2NyZWF0ZSB0aGUgcGlkbCBmb3IgdGhpcyBpdGVtCisgICAgICBwaWRsID0gdGhpcy0+bXBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlRGVza3RvcCh0aGlzLT5tcFBpZGxNZ3IpOworICAgICAgaWYocGlkbCkKKyAgICAgIHsgaWYoIUlFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QodGhpcywgcGlkbCkpCisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeyByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgIH0gICAKICAgICAgZWxzZQotICAgICB7IHJldHVybiBGQUxTRTsKLSAgICAgfQotICAgfSAgIAotICAgZWxzZQotICAgeyAgaEZpbGUgPSBGaW5kRmlyc3RGaWxlMzJBKGxwc3pQYXRoLCZzdGZmaWxlKTsKLSAgICAgIGRvCi0gICAgICB7IGlmIChzdGZmaWxlLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCi0JCQkgIC8vY3JlYXRlIHRoZSBwaWRsIGZvciB0aGlzIGl0ZW0KLQkJCQkvKiBmaXhtZTogdGhlIHNob3J0bmFtZSBzaG91bGQgYmUgZ2l2ZW4gdG9vKi8KLSAgICAgICAgcGlkbCA9IHRoaXMtPm1wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZUZvbGRlcih0aGlzLT5tcFBpZGxNZ3IsIHN0ZmZpbGUuY0ZpbGVOYW1lKTsKLSAgICAgICAgaWYocGlkbCkKLSAgICAgICAgeyBpZighSUVudW1JRExpc3RfQWRkVG9FbnVtTGlzdCh0aGlzLCBwaWRsKSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsgcmV0dXJuIEZBTFNFOwotICAgICAgICB9ICAgCisgICAgIHsgVFJBQ0UgKHNoZWxsLCIoJXApLT4gZW51bWVyYXRlIHRoZSBmb2xkZXIgaXRlbXMgZm9yICVzXG4iLHRoaXMsbHBzelBhdGgpOworCQkgICBoRmlsZSA9IEZpbmRGaXJzdEZpbGUzMkEobHBzelBhdGgsJnN0ZmZpbGUpOworICAgICAgIGRvCisgICAgICAgeyBpZiAoc3RmZmlsZS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKQorICAgICAgICAgLy9jcmVhdGUgdGhlIHBpZGwgZm9yIHRoaXMgaXRlbQorICAgICAgICAgLyogZml4bWU6IHRoZSBzaG9ydG5hbWUgc2hvdWxkIGJlIGdpdmVuIHRvbyovCisgICAgICAgICBwaWRsID0gdGhpcy0+bXBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlRm9sZGVyKHRoaXMtPm1wUGlkbE1nciwgc3RmZmlsZS5jRmlsZU5hbWUpOworICAgICAgICAgaWYocGlkbCkKKyAgICAgICAgIHsgaWYoIUlFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QodGhpcywgcGlkbCkpCisgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgfQorICAgICAgICAgZWxzZQorICAgICAgICAgeyByZXR1cm4gRkFMU0U7CisgICAgICAgICB9ICAgCiAgICAgICB9IHdoaWxlKCBGaW5kTmV4dEZpbGUzMkEoaEZpbGUsJnN0ZmZpbGUpKTsKIAkJCUZpbmRDbG9zZTMyIChoRmlsZSk7CiAgICAgfQogICB9ICAgCiAgIC8vZW51bWVyYXRlIHRoZSBub24tZm9sZGVyIGl0ZW1zICh2YWx1ZXMpCiAgIGlmKGR3RmxhZ3MgJiBTSENPTlRGX05PTkZPTERFUlMpCi0gIHsgICBoRmlsZSA9IEZpbmRGaXJzdEZpbGUzMkEobHBzelBhdGgsJnN0ZmZpbGUpOwotICAgICAgZG8KLSAgICAgIHsgaWYgKCEgKHN0ZmZpbGUuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgKQotCQkJICAvL2NyZWF0ZSB0aGUgcGlkbCBmb3IgdGhpcyBpdGVtCi0JCQkJLyogZml4bWU6IHRoZSBzaG9ydG5hbWUgc2hvdWxkIGJlIGdpdmVuIHRvbyovCi0gICAgICAgIHBpZGwgPSB0aGlzLT5tcFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVGb2xkZXIodGhpcy0+bXBQaWRsTWdyLCBzdGZmaWxlLmNGaWxlTmFtZSk7Ci0gICAgICAgIGlmKHBpZGwpCi0gICAgICAgIHsgaWYoIUlFbnVtSURMaXN0X0FkZFRvRW51bUxpc3QodGhpcywgcGlkbCkpCi0gICAgICAgICAgeyByZXR1cm4gRkFMU0U7Ci0JCQkJCX0KLSAgICAgICAgfQotICAgICAgICBlbHNlCisgIHsgVFJBQ0UgKHNoZWxsLCIoJXApLT4gZW51bWVyYXRlIHRoZSBub24tZm9sZGVyIGl0ZW1zICh2YWx1ZXMpIG9mICVzXG4iLHRoaXMsbHBzelBhdGgpOworCSAgaEZpbGUgPSBGaW5kRmlyc3RGaWxlMzJBKGxwc3pQYXRoLCZzdGZmaWxlKTsKKyAgICBkbworICAgIHsgaWYgKCEgKHN0ZmZpbGUuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgKQorCQkgIC8vY3JlYXRlIHRoZSBwaWRsIGZvciB0aGlzIGl0ZW0KKwkJCS8qIGZpeG1lOiB0aGUgc2hvcnRuYW1lIHNob3VsZCBiZSBnaXZlbiB0b28qLworICAgICAgcGlkbCA9IHRoaXMtPm1wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZUZvbGRlcih0aGlzLT5tcFBpZGxNZ3IsIHN0ZmZpbGUuY0ZpbGVOYW1lKTsKKyAgICAgIGlmKHBpZGwpCisgICAgICB7IGlmKCFJRW51bUlETGlzdF9BZGRUb0VudW1MaXN0KHRoaXMsIHBpZGwpKQogICAgICAgICB7IHJldHVybiBGQUxTRTsKLSAgICAgICAgfSAgIAotICAgICAgfSB3aGlsZSggRmluZE5leHRGaWxlMzJBKGhGaWxlLCZzdGZmaWxlKSk7Ci0JCQlGaW5kQ2xvc2UzMiAoaEZpbGUpOwotICAgfSAKKwkJCSAgfQorICAgICAgfQorICAgICAgZWxzZQorICAgICAgeyByZXR1cm4gRkFMU0U7CisgICAgICB9ICAgCisgICAgfSB3aGlsZSggRmluZE5leHRGaWxlMzJBKGhGaWxlLCZzdGZmaWxlKSk7CisJICBGaW5kQ2xvc2UzMiAoaEZpbGUpOworICB9IAogICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNTA0LDcgKzUxMSw3IEBACiAgIElTaGVsbEZvbGRlcl9RdWVyeUludGVyZmFjZSwKIAlJU2hlbGxGb2xkZXJfQWRkUmVmLAogCUlTaGVsbEZvbGRlcl9SZWxlYXNlLAotCUlTaGVsbEZvbGRlcl9Jbml0aWFsaXplLAorLyoJSVNoZWxsRm9sZGVyX0luaXRpYWxpemUsKi8KIAlJU2hlbGxGb2xkZXJfUGFyc2VEaXNwbGF5TmFtZSwKIAlJU2hlbGxGb2xkZXJfRW51bU9iamVjdHMsCiAJSVNoZWxsRm9sZGVyX0JpbmRUb09iamVjdCwKQEAgLTUzMCw4ICs1MzcsOSBAQAogICBzZi0+bWxwc3pGb2xkZXI9TlVMTDsKIAlzZi0+bXBTRlBhcmVudD1wUGFyZW50OwogCi0JVFJBQ0Uoc2hlbGwsIiglcCktPihwYXJlbnQ6JXAsIHBpZGw9JXApXG4iLHNmLHBQYXJlbnQsIHBpZGwpOworCVRSQUNFKHNoZWxsLCIoJXApLT4ocGFyZW50PSVwLCBwaWRsPSVwKVxuIixzZixwUGFyZW50LCBwaWRsKTsKIAkKKwkvKiBjcmVhdGUgb3duIHBpZGwtbWFuYWdlciovCiAgIHNmLT5wUGlkbE1nciAgPSBQaWRsTWdyX0NvbnN0cnVjdG9yKCk7CiAJaWYgKCEgc2YtPnBQaWRsTWdyICkKIAl7IEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxzZik7CkBAIC01MzksMTAgKzU0NywxMSBAQAogCSAgcmV0dXJuIE5VTEw7CiAJfQogCisgIC8qIGtlZXAgYSBjb3B5IG9mIHRoZSBwaWRsIGluIHRoZSBpbnN0YW5jZSovCiAJc2YtPm1waWRsID0gc2YtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ29weShzZi0+cFBpZGxNZ3IsIHBpZGwpOwogCXNmLT5tcGlkbE5TUm9vdCA9IE5VTEw7CiAJCi0gIGlmKHNmLT5tcGlkbCkKKyAgaWYoc2YtPm1waWRsKSAgICAgICAgLyogZG8gd2UgaGF2ZSBhIHBpZGw/Ki8KICAgeyAvKmlmKHNmLT5wUGlkbE1nci0+bHB2dGJsLT5mbklzRGVza3RvcChzZi0+cFBpZGxNZ3Isc2YtPm1waWRsKSkKICAgICB7IHNmLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldERlc2t0b3Aoc2YtPnBQaWRsTWdyLHNmLT5tcGlkbCk7CiAgICAgfSovCkBAIC01NjYsNyArNTc1LDcgQEAKICAgICB9CiAgIH0KIAkKLQlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwLCVwKVxuIixzZixwUGFyZW50LCBwaWRsKTsKKwlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwLCVwLCVzKVxuIixzZixwUGFyZW50LCBwaWRsLCBkZWJ1Z3N0cl9hKHNmLT5tbHBzekZvbGRlcikpOwogCXJldHVybiBzZjsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjEyLDYgKzYyMSwxMCBAQAogeyBUUkFDRShzaGVsbCwiKCVwKS0+KGNvdW50PSVsdSlcbiIsdGhpcyx0aGlzLT5yZWYpOwogCWlmICghLS0odGhpcy0+cmVmKSkgewogCQlUUkFDRShzaGVsbCwiLS0gZGVzdHJveWluZyBJU2hlbGxGb2xkZXIoJXApXG4iLHRoaXMpOworCQlpZiAocGRlc2t0b3Bmb2xkZXI9PXRoaXMpCisJCXsgcGRlc2t0b3Bmb2xkZXI9TlVMTDsKKwkJICBUUkFDRShzaGVsbCwiLS0gZGVzdHJveWVkIElTaGVsbEZvbGRlciglcCkgd2FzIERlc2t0b3Bmb2xkZXJcbiIsdGhpcyk7CisJCX0KIAkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRoaXMpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02MzIsNjYgKzY0NSw3MCBAQAogCUxQSVRFTUlETElTVCAqcHBpZGwsICAgICAgICAgICAvKiBbb3V0XSB0aGUgcGlkbCovCiAJRFdPUkQgKnBkd0F0dHJpYnV0ZXMpCiB7CUhSRVNVTFQgICAgICAgIGhyPUVfT1VUT0ZNRU1PUlk7Ci0gIExQSVRFTUlETElTVCAgIHBpZGxGdWxsPU5VTEw7Ci0gIERXT1JEICAgICAgICAgIGR3Q2hhcnM9bHN0cmxlbjMyVyhscHN6RGlzcGxheU5hbWUpICsgMTsKLSAgTFBTVFIgICAgICAgICAgcHN6VGVtcD0oTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxkd0NoYXJzICogc2l6ZW9mKENIQVIpKTsKKyAgTFBJVEVNSURMSVNUICAgcGlkbEZ1bGw9TlVMTCwgcGlkbFRlbXAgPSBOVUxMLCBwaWRsT2xkID0gTlVMTDsKICAgTFBTVFIgICAgICAgICAgcHN6TmV4dD1OVUxMOwogICBDSEFSICAgICAgICAgICBzekVsZW1lbnRbTUFYX1BBVEhdOwogICBCT09MMzIgICAgICAgICBiVHlwZTsKLSAgTFBJVEVNSURMSVNUICAgcGlkbFRlbXAgPSBOVUxMOwotICBMUElURU1JRExJU1QgICBwaWRsT2xkID0gTlVMTDsKKworICBEV09SRCAgICAgICAgICBkd0NoYXJzPWxzdHJsZW4zMlcobHBzekRpc3BsYXlOYW1lKSArIDE7CisgIExQU1RSICAgICAgICAgIHBzelRlbXA9KExQU1RSKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsZHdDaGFycyAqIHNpemVvZihDSEFSKSk7CiAgICAgICAgCi0gIFRSQUNFKHNoZWxsLCIoJXApLT4oJXgsJXAsJXA9JXMsJXAscGlkbD0lcCwlcClcbiIsCi0JdGhpcyxod25kT3duZXIscGJjUmVzZXJ2ZWQsbHBzekRpc3BsYXlOYW1lLGRlYnVnc3RyX3cobHBzekRpc3BsYXlOYW1lKSxwY2hFYXRlbixwcGlkbCxwZHdBdHRyaWJ1dGVzCi0JKTsKKyAgVFJBQ0Uoc2hlbGwsIiglcCktPihIV05EPTB4JTA4eCwlcCwlcD0lcywlcCxwaWRsPSVwLCVwKVxuIiwKKwl0aGlzLGh3bmRPd25lcixwYmNSZXNlcnZlZCxscHN6RGlzcGxheU5hbWUsZGVidWdzdHJfdyhscHN6RGlzcGxheU5hbWUpLHBjaEVhdGVuLHBwaWRsLHBkd0F0dHJpYnV0ZXMpOworCiAgIGlmKHBzelRlbXApCiAgIHsgaHIgPSBFX0ZBSUw7CiAgICAgV2lkZUNoYXJUb0xvY2FsMzIocHN6VGVtcCwgbHBzekRpc3BsYXlOYW1lLCBkd0NoYXJzKTsKICAgICBpZigqcHN6VGVtcCkKLSAgICB7IHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVEZXNrdG9wKHRoaXMtPnBQaWRsTWdyKTsKKyAgICB7IGlmIChzdHJjbXAocHN6VGVtcCwiRGVza3RvcCIpPT0wKQorCQkgIHsgcGlkbEZ1bGwgPSAoTFBJVEVNSURMSVNUKUhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsc2l6ZW9mKElURU1JRExJU1QpKTsKKwkJCSAgcGlkbEZ1bGwtPm1raWQuY2IgPSAwOworICAgICAgICBwaWRsRnVsbC0+bWtpZC5hYklEWzBdID0gMDsKKwkJCX0KKwkJICBlbHNlCisJCQl7IHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVNeUNvbXB1dGVyKHRoaXMtPnBQaWRsTWdyKTsKIAotICAgICAgLyogY2hlY2sgaWYgdGhlIGxwc3pEaXNwbGF5TmFtZSBpcyBGb2xkZXIgb3IgRmlsZSovCi0JCQliVHlwZSA9ICEgKEdldEZpbGVBdHRyaWJ1dGVzMzJBKHBzek5leHQpJkZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSk7Ci0JCQkKLQkJCXBzek5leHQgPSBHZXROZXh0RWxlbWVudChwc3pUZW1wLCBzekVsZW1lbnQsIE1BWF9QQVRIKTsKLQotICAgICAgcGlkbFRlbXAgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZURyaXZlKHRoaXMtPnBQaWRsTWdyLHN6RWxlbWVudCk7CQkJCi0gICAgICBwaWRsT2xkID0gcGlkbEZ1bGw7Ci0gICAgICBwaWRsRnVsbCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ29uY2F0ZW5hdGUodGhpcy0+cFBpZGxNZ3IscGlkbEZ1bGwscGlkbFRlbXApOwotCSAgICB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkRlbGV0ZSh0aGlzLT5wUGlkbE1ncixwaWRsT2xkKTsKLQotCQkJaWYocGlkbEZ1bGwpCi0gICAgICB7IHdoaWxlKChwc3pOZXh0PUdldE5leHRFbGVtZW50KHBzek5leHQsIHN6RWxlbWVudCwgTUFYX1BBVEgpKSkKLSAgICAgICAgeyBpZighKnBzek5leHQgJiYgYlR5cGUpCi0JCQkJCXsgcGlkbFRlbXAgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZVZhbHVlKHRoaXMtPnBQaWRsTWdyLHN6RWxlbWVudCk7Ci0JCQkJCX0KLQkJCQkJZWxzZQkJCQkKLSAgICAgICAgICB7IHBpZGxUZW1wID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVGb2xkZXIodGhpcy0+cFBpZGxNZ3Isc3pFbGVtZW50KTsKLQkJCQkJfQotICAgICAgICAgIHBpZGxPbGQgPSBwaWRsRnVsbDsKLSAgICAgICAgICBwaWRsRnVsbCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ29uY2F0ZW5hdGUodGhpcy0+cFBpZGxNZ3IscGlkbEZ1bGwscGlkbFRlbXApOwotICAgICAgICAgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuRGVsZXRlKHRoaXMtPnBQaWRsTWdyLHBpZGxPbGQpOwotICAgICAgICAgfQotICAgICAgICAgaHIgPSBTX09LOwotICAgICAgIH0KLSAgICAgfQotCQlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAscHN6VGVtcCk7CisgICAgICAgIC8qIGNoZWNrIGlmIHRoZSBscHN6RGlzcGxheU5hbWUgaXMgRm9sZGVyIG9yIEZpbGUqLworICAJCQliVHlwZSA9ICEgKEdldEZpbGVBdHRyaWJ1dGVzMzJBKHBzek5leHQpJkZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSk7CisgIAkJCXBzek5leHQgPSBHZXROZXh0RWxlbWVudChwc3pUZW1wLCBzekVsZW1lbnQsIE1BWF9QQVRIKTsKKyAgCisgICAgICAgIHBpZGxUZW1wID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5DcmVhdGVEcml2ZSh0aGlzLT5wUGlkbE1ncixzekVsZW1lbnQpOwkJCQorICAgICAgICBwaWRsT2xkID0gcGlkbEZ1bGw7CisgICAgICAgIHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db25jYXRlbmF0ZSh0aGlzLT5wUGlkbE1ncixwaWRsRnVsbCxwaWRsVGVtcCk7CisgIAkgICAgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5EZWxldGUodGhpcy0+cFBpZGxNZ3IscGlkbE9sZCk7CisgIAorICAJCQlpZihwaWRsRnVsbCkKKyAgICAgICAgeyB3aGlsZSgocHN6TmV4dD1HZXROZXh0RWxlbWVudChwc3pOZXh0LCBzekVsZW1lbnQsIE1BWF9QQVRIKSkpCisgICAgICAgICAgeyBpZighKnBzek5leHQgJiYgYlR5cGUpCisgIAkJCQkJeyBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuQ3JlYXRlVmFsdWUodGhpcy0+cFBpZGxNZ3Isc3pFbGVtZW50KTsKKyAgCQkJCQl9CisgIAkJCQkJZWxzZQkJCQkKKyAgICAgICAgICAgIHsgcGlkbFRlbXAgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkNyZWF0ZUZvbGRlcih0aGlzLT5wUGlkbE1ncixzekVsZW1lbnQpOworICAJCQkJCX0KKyAgICAgICAgICAgIHBpZGxPbGQgPSBwaWRsRnVsbDsKKyAgICAgICAgICAgIHBpZGxGdWxsID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Db25jYXRlbmF0ZSh0aGlzLT5wUGlkbE1ncixwaWRsRnVsbCxwaWRsVGVtcCk7CisgICAgICAgICAgICB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkRlbGV0ZSh0aGlzLT5wUGlkbE1ncixwaWRsT2xkKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaHIgPSBTX09LOworICAgICAgICB9CisgICAgICB9CisJCX0KICAgfQorCUhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxwc3pUZW1wKTsKICAgKnBwaWRsID0gcGlkbEZ1bGw7CiAgIHJldHVybiBocjsKLQotCi0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCQlJU2hlbGxGb2xkZXJfRW51bU9iamVjdHMKICovCiBzdGF0aWMgSFJFU1VMVCBXSU5BUEkgSVNoZWxsRm9sZGVyX0VudW1PYmplY3RzKAotCUxQU0hFTExGT0xERVIgdGhpcyxIV05EMzIgaHduZE93bmVyLERXT1JEIGR3RmxhZ3MsCisJTFBTSEVMTEZPTERFUiB0aGlzLAorCUhXTkQzMiBod25kT3duZXIsCisJRFdPUkQgZHdGbGFncywKIAlMUEVOVU1JRExJU1QqIHBwRW51bUlETGlzdCkKIHsgSFJFU1VMVCAgaHI7Ci0JVFJBQ0Uoc2hlbGwsIiglcCktPigleCwlbHgsJXApXG4iLHRoaXMsaHduZE93bmVyLGR3RmxhZ3MscHBFbnVtSURMaXN0KTsKKwlUUkFDRShzaGVsbCwiKCVwKS0+KEhXTkQ9MHglMDh4LDB4JTA4bHgsJXApXG4iLHRoaXMsaHduZE93bmVyLGR3RmxhZ3MscHBFbnVtSURMaXN0KTsKIAogICAqcHBFbnVtSURMaXN0ID0gTlVMTDsKIAkqcHBFbnVtSURMaXN0ID0gSUVudW1JRExpc3RfQ29uc3RydWN0b3IgKHRoaXMtPm1scHN6Rm9sZGVyLCBkd0ZsYWdzLCAmaHIpOwpAQCAtNzI2LDE5ICs3NDMsMjAgQEAKIAlMUEJDIHBiY1Jlc2VydmVkLAogCVJFRklJRCByaWlkLAogCUxQVk9JRCAqIHBwdk91dCkKLXsJY2hhcgkgICAgICAgIHhjbHNpZFs1MF07Cit7CWNoYXIJICAgICAgICB4cmlpZFs1MF07CiAgIEhSRVNVTFQgICAgICAgaHI7CiAJTFBTSEVMTEZPTERFUiBwU2hlbGxGb2xkZXI7CiAJCi0JV0lORV9TdHJpbmdGcm9tQ0xTSUQocmlpZCx4Y2xzaWQpOworCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseHJpaWQpOwogCi0JVFJBQ0Uoc2hlbGwsIiglcCktPihwaWRsPSVwLCVwLFxuXHRTSUQ6JXMsJXApXG4iLHRoaXMscGlkbCxwYmNSZXNlcnZlZCx4Y2xzaWQscHB2T3V0KTsKKwlUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAsJXAsXG5cdElJRDolcywlcClcbiIsdGhpcyxwaWRsLHBiY1Jlc2VydmVkLHhyaWlkLHBwdk91dCk7CiAKICAgKnBwdk91dCA9IE5VTEw7CiAgIHBTaGVsbEZvbGRlciA9IElTaGVsbEZvbGRlcl9Db25zdHJ1Y3Rvcih0aGlzLCBwaWRsKTsKICAgaWYoIXBTaGVsbEZvbGRlcikKICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKLSAgcFNoZWxsRm9sZGVyLT5scHZ0YmwtPmZuSW5pdGlhbGl6ZShwU2hlbGxGb2xkZXIsIHRoaXMtPm1waWRsTlNSb290KTsKKy8qICBwU2hlbGxGb2xkZXItPmxwdnRibC0+Zm5Jbml0aWFsaXplKHBTaGVsbEZvbGRlciwgdGhpcy0+bXBpZGxOU1Jvb3QpOyovCisgIElTaGVsbEZvbGRlcl9Jbml0aWFsaXplKHBTaGVsbEZvbGRlciwgdGhpcy0+bXBpZGxOU1Jvb3QpOwogICBociA9IHBTaGVsbEZvbGRlci0+bHB2dGJsLT5mblF1ZXJ5SW50ZXJmYWNlKHBTaGVsbEZvbGRlciwgcmlpZCwgcHB2T3V0KTsKICAgcFNoZWxsRm9sZGVyLT5scHZ0YmwtPmZuUmVsZWFzZShwU2hlbGxGb2xkZXIpOwogCVRSQUNFKHNoZWxsLCItLSAoJXApLT4oaW50ZXJmYWNlPSVwKVxuIix0aGlzLCBwcHZPdXQpOwpAQCAtNzU0LDEwICs3NzIsMTAgQEAKICAgICBMUEJDIHBiY1Jlc2VydmVkLCAKICAgICBSRUZJSUQgcmlpZCwgCiAgICAgTFBWT0lEICpwcHZPdXQpCi17CWNoYXIJICAgICAgICB4Y2xzaWRbNTBdOwotCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseGNsc2lkKTsKK3sJY2hhciB4cmlpZFs1MF07CisJV0lORV9TdHJpbmdGcm9tQ0xTSUQocmlpZCx4cmlpZCk7CiAKLQlGSVhNRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAsJXAsXG5cdFNJRDolcywlcCkgc3R1YlxuIix0aGlzLHBpZGwscGJjUmVzZXJ2ZWQseGNsc2lkLHBwdk91dCk7CisJRklYTUUoc2hlbGwsIiglcCktPihwaWRsPSVwLCVwLFxuXHRJSUQ6JXMsJXApIHN0dWJcbiIsdGhpcyxwaWRsLHBiY1Jlc2VydmVkLHhyaWlkLHBwdk91dCk7CiAKICAgKnBwdk91dCA9IE5VTEw7CiAgIHJldHVybiBFX05PVElNUEw7CkBAIC03NzYsNyArNzk0LDcgQEAKICAgaW50ICAgblJldHVybjsKICAgTFBDSVRFTUlETElTVCAgcGlkbFRlbXAxID0gcGlkbDEsIHBpZGxUZW1wMiA9IHBpZGwyOwogCi0gIFRSQUNFKHNoZWxsLCIoJXApLT4oJWx4LHBpZGwxPSVwLHBpZGwyPSVwKSBzdHViXG4iLHRoaXMsbFBhcmFtLHBpZGwxLHBpZGwyKTsKKyAgVFJBQ0Uoc2hlbGwsIiglcCktPigweCUwOGx4LHBpZGwxPSVwLHBpZGwyPSVwKSBzdHViXG4iLHRoaXMsbFBhcmFtLHBpZGwxLHBpZGwyKTsKIAogICAvKlNwZWNpYWwgY2FzZSAtIElmIG9uZSBvZiB0aGUgaXRlbXMgaXMgYSBQYXRoIGFuZCB0aGUgb3RoZXIgaXMgYSBGaWxlLCBhbHdheXMgCiAgIG1ha2UgdGhlIFBhdGggY29tZSBiZWZvcmUgdGhlIEZpbGUuKi8KQEAgLTgxMywxNiArODMxLDIxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgkgIElTaGVsbEZvbGRlcl9DcmVhdGVWaWV3T2JqZWN0CisqIE5PVEVTCisqICB0aGUgc2FtZSBhcyBTSENyZWF0ZVNoZWxsRm9sZGVyVmlld0V4ID8/PwogKi8KIHN0YXRpYyBIUkVTVUxUIFdJTkFQSSBJU2hlbGxGb2xkZXJfQ3JlYXRlVmlld09iamVjdCgKLQlMUFNIRUxMRk9MREVSIHRoaXMsSFdORDMyIGh3bmRPd25lcixSRUZJSUQgcmlpZCxMUFZPSUQgKnBwdikKLXsJY2hhcgl4Y2xzaWRbNTBdOworCUxQU0hFTExGT0xERVIgdGhpcywKKwlIV05EMzIgaHduZE93bmVyLAorCVJFRklJRCByaWlkLAorCUxQVk9JRCAqcHB2T3V0KQorewljaGFyCXhyaWlkWzUwXTsKIAotCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseGNsc2lkKTsKLQlGSVhNRShzaGVsbCwiKCVwKS0+KDB4JTA0eCxcblx0SUlEOlx0JXMsJXApLHN0dWIhXG4iLHRoaXMsaHduZE93bmVyLHhjbHNpZCxwcHYpOworCVdJTkVfU3RyaW5nRnJvbUNMU0lEKHJpaWQseHJpaWQpOworCUZJWE1FKHNoZWxsLCIoJXApLT4oMHglMDR4LFxuXHRJSUQ6XHQlcywlcCksc3R1YiFcbiIsdGhpcyxod25kT3duZXIseHJpaWQscHB2T3V0KTsKIAkKLQkqKERXT1JEKilwcHYgPSAwOwotCXJldHVybiBFX09VVE9GTUVNT1JZOworCSpwcHZPdXQgPSBOVUxMOworCXJldHVybiBFX05PVElNUEw7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODUxLDEyICs4NzQsMTcgQEAKICAgCiAJV0lORV9TdHJpbmdGcm9tQ0xTSUQocmlpZCx4Y2xzaWQpOwogCi0gIEZJWE1FKHNoZWxsLCIoJXApLT4oJXUgJXUscGlkbD0lcCxcblx0SUlEOiVzLCVwLCVwKSxzdHViIVxuIiwKKyAgRklYTUUoc2hlbGwsIiglcCktPigldSwldSxwaWRsPSVwLFxuXHRJSUQ6JXMsJXAsJXApLHN0dWIhXG4iLAogCSAgdGhpcyxod25kT3duZXIsY2lkbCxhcGlkbCx4Y2xzaWQscHJnZkluT3V0LHBwdk91dCk7Ci0JcmV0dXJuIEVfRkFJTDsKKworCSpwcHZPdXQgPSBOVUxMOwkKKwlyZXR1cm4gRV9OT1RJTVBMOwogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBJU2hlbGxGb2xkZXJfR2V0RGlzcGxheU5hbWVPZgorKgorKiBGSVhNRQorKiAgaWYgdGhlIG5hbWUgaXMgaW4gdGhlIHBpZGwgdGhlIHJldCB2YWx1ZSBzaG91bGQgYmUgYSBTVFJSRVRfT0ZGU0VUCiAqLwogI2RlZmluZSBHRVRfU0hHRE5fRk9SKGR3RmxhZ3MpICAgICAgICAgKChEV09SRClkd0ZsYWdzICYgKERXT1JEKTB4MDAwMEZGMDApCiAjZGVmaW5lIEdFVF9TSEdETl9SRUxBVElPTihkd0ZsYWdzKSAgICAoKERXT1JEKWR3RmxhZ3MgJiAoRFdPUkQpMHgwMDAwMDBGRikKQEAgLTg2Niw0NSArODk0LDEwMCBAQAogICAgIExQQ0lURU1JRExJU1QgcGlkbCwgCiAgICAgRFdPUkQgZHdGbGFncywgCiAgICAgTFBTVFJSRVQgbHBOYW1lKQoteyBDSEFSIHN6VGV4dFtNQVhfUEFUSF07Ci0gIGludCAgIGNjaE9sZVN0cjsKLSAgTFBJVEVNSURMSVNUICAgcGlkbFRlbXA7Cit7IENIQVIgICAgICAgICAgIHN6VGV4dFtNQVhfUEFUSF07CisgIENIQVIgICAgICAgICAgIHN6VGVtcFtNQVhfUEFUSF07CisJQ0hBUiAgICAgICAgICAgc3pTcGVjaWFsW01BWF9QQVRIXTsKKwlDSEFSICAgICAgICAgICBzekRyaXZlW01BWF9QQVRIXTsKKyAgRFdPUkQgICAgICAgICAgZHdWb2x1bWVTZXJpYWxOdW1iZXIsZHdNYXhpbXVtQ29tcG9uZXRMZW5ndGgsZHdGaWxlU3lzdGVtRmxhZ3M7CisgIExQSVRFTUlETElTVCAgIHBpZGxUZW1wPU5VTEw7CisJQk9PTDMyCQkJCSBiU2ltcGxlUGlkbD1GQUxTRTsKKwkJCisgIFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcCwweCUwOGx4LCVwKVxuIix0aGlzLHBpZGwsZHdGbGFncyxscE5hbWUpOwogCi0gIFRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcCwlbHgsJXApXG4iLHRoaXMscGlkbCxkd0ZsYWdzLGxwTmFtZSk7Ci0gIHN3aXRjaChHRVRfU0hHRE5fUkVMQVRJT04oZHdGbGFncykpCi0gIHsgY2FzZSBTSEdETl9OT1JNQUw6Ci0gICAgLy9nZXQgdGhlIGZ1bGwgbmFtZQotICAgIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0UGlkbFBhdGgodGhpcy0+cFBpZGxNZ3IsIHBpZGwsIHN6VGV4dCwgc2l6ZW9mKHN6VGV4dCkpOwotLyogIEZJWE1FIGlmIHRoZSB0ZXh0IGlzIE5VTEwgYW5kIHRoaXMgaXMgYSB2YWx1ZSwgdGhlbiBpcyBzb21ldGhpbmcgd3JvbmcqLwotLyogIGlmKCEqc3pUZXh0ICYmIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuSXNWYWx1ZSh0aGlzLT5wUGlkbE1nciwgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRMYXN0SXRlbSh0aGlzLT5wUGlkbE1nciwgcGlkbCkpKQotICAgIHsgZG9fc29tZXRoaW5nKCkKLSAgICB9Ki8gIAotICAgIGJyZWFrOwotCi0gICAgY2FzZSBTSEdETl9JTkZPTERFUjoKLSAgICAgIHBpZGxUZW1wID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRMYXN0SXRlbSh0aGlzLT5wUGlkbE1ncixwaWRsKTsKLSAgICAgIC8vZ2V0IHRoZSByZWxhdGl2ZSBuYW1lCi0gICAgICB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldEl0ZW1UZXh0KHRoaXMtPnBQaWRsTWdyLCBwaWRsVGVtcCwgc3pUZXh0LCBzaXplb2Yoc3pUZXh0KSk7Ci0vKiAgICBGSVhNRSBpZiB0aGUgdGV4dCBpcyBOVUxMIGFuZCB0aGlzIGlzIGEgdmFsdWUsIHRoZW4gaXMgc29tZXRoaW5nIHdyb25nKi8KLSAgICAgIGlmKCEqc3pUZXh0ICYmIHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuSXNWYWx1ZSh0aGlzLT5wUGlkbE1ncixwaWRsVGVtcCkpCi0vKiAgICB7IGRvX3NvbWV0aGluZygpCi0gICAgICB9Ki8gICAKLSAgICAgYnJlYWs7Ci0gICBkZWZhdWx0OiAgICByZXR1cm4gRV9JTlZBTElEQVJHOworICAvKiB0ZXN0IGlmIHNpbXBsZShyZWxhdGl2ZSkgb3IgY29tcGxleChhYnNvbHV0ZSkgcGlkbCAqLworICBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0TmV4dEl0ZW0odGhpcy0+cFBpZGxNZ3IscGlkbCk7CisJaWYgKHBpZGxUZW1wLT5ta2lkLmNiPT0weDAwKQorCXsgYlNpbXBsZVBpZGwgPSBUUlVFOworCX0KKwlpZiAodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc0Rlc2t0b3AodGhpcy0+cFBpZGxNZ3IsIHBpZGwpKQorCXsgc3RyY3B5IChzelRleHQsIkRlc2t0b3AiKTsKKwl9CisJZWxzZQorCXsJc3pTcGVjaWFsWzBdPTB4MDA7CisJICBpZiAodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc015Q29tcHV0ZXIodGhpcy0+cFBpZGxNZ3IsIHBpZGwpKQorICAgIHsgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRJdGVtVGV4dCh0aGlzLT5wUGlkbE1nciwgcGlkbCwgc3pTcGVjaWFsLCBNQVhfUEFUSCk7CisgICAgfQorCQlzekRyaXZlWzBdPTB4MDA7CisJICBpZiAodGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5Jc0RyaXZlKHRoaXMtPnBQaWRsTWdyLCBwaWRsKSkKKwkJeyBwaWRsVGVtcCA9IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0TGFzdEl0ZW0odGhpcy0+cFBpZGxNZ3IscGlkbCk7CisgIAkJaWYgKHBpZGxUZW1wKQorICAgICAgeyB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldEl0ZW1UZXh0KHRoaXMtPnBQaWRsTWdyLCBwaWRsVGVtcCwgc3pUZW1wLCBNQVhfUEFUSCk7CisgIAkJfQorCQkgIGlmICggZHdGbGFncz09U0hHRE5fTk9STUFMIHx8IGR3RmxhZ3M9PVNIR0ROX0lORk9MREVSKQorICAJCXsgR2V0Vm9sdW1lSW5mb3JtYXRpb24zMkEoc3pUZW1wLHN6RHJpdmUsTUFYX1BBVEgsJmR3Vm9sdW1lU2VyaWFsTnVtYmVyLCZkd01heGltdW1Db21wb25ldExlbmd0aCwmZHdGaWxlU3lzdGVtRmxhZ3MsTlVMTCwwKTsKKwkJCQlpZiAoc3pUZW1wWzJdPT0nXFwnKQorCQkJCXsgc3pUZW1wWzJdPSdcMCc7CisJCQkJfQorICAgICAgICBzdHJjYXQgKHN6RHJpdmUsIiAoIik7CisJCQkJc3RyY2F0IChzekRyaXZlLHN6VGVtcCk7CisJCQkJc3RyY2F0IChzekRyaXZlLCIpIik7IAorICAJCX0KKwkJCWVsc2UKKwkJCXsgIFBhdGhBZGRCYWNrc2xhc2ggKHN6VGVtcCk7CisJCQkgICBzdHJjcHkoc3pEcml2ZSxzelRlbXApOworCQkJfQorCQl9CisJCQorICAJc3dpdGNoKGR3RmxhZ3MpCisgICAgeyBjYXNlIFNIR0ROX05PUk1BTDoKKyAgICAgICAgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRQaWRsUGF0aCh0aGlzLT5wUGlkbE1nciwgcGlkbCwgc3pUZXh0LCBNQVhfUEFUSCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBTSEdETl9JTkZPTERFUjoKKyAgICAgICAgcGlkbFRlbXAgPSB0aGlzLT5wUGlkbE1nci0+bHB2dGJsLT5mbkdldExhc3RJdGVtKHRoaXMtPnBQaWRsTWdyLHBpZGwpOworICAJCQlpZiAocGlkbFRlbXApCisgICAgICAgIHsgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRJdGVtVGV4dCh0aGlzLT5wUGlkbE1nciwgcGlkbFRlbXAsIHN6VGV4dCwgTUFYX1BBVEgpOworICAJCQl9CisgICAJCQlicmVhazsJCQkJCisgICAJCWNhc2UJU0hHRE5fRk9SUEFSU0lORzoKKwkJCSAgaWYgKGJTaW1wbGVQaWRsKQorCQkJCXsgLyogaWYgdGhlIElTaGVsbEZvbGRlciBoYXMgcGFyZW50cywgZ2V0IHRoZSBwYXRoIGZyb20gdGhlCisJCQkJICBwYXJlbnQgYW5kIGFkZCB0aGUgSXRlbU5hbWUqLworCQkJCSAgaWYgKHRoaXMtPm1scHN6Rm9sZGVyICYmIHN0cmxlbiAodGhpcy0+bWxwc3pGb2xkZXIpKQorICAJCQkgIHsgc3RyY3B5IChzelRleHQsdGhpcy0+bWxwc3pGb2xkZXIpOworICAJCQkgICAgUGF0aEFkZEJhY2tzbGFzaCAoc3pUZXh0KTsKKyAgCQkJICB9CisgICAgCQkJZWxzZQorICAgIAkJCXsgc3RyY3B5KHN6VGV4dCwiIik7CisgIAkJICAJfQorICAgICAgICAgIHBpZGxUZW1wID0gdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRMYXN0SXRlbSh0aGlzLT5wUGlkbE1ncixwaWRsKTsKKyAgICAgICAgCWlmIChwaWRsVGVtcCkKKyAgICAgICAgICB7IHRoaXMtPnBQaWRsTWdyLT5scHZ0YmwtPmZuR2V0SXRlbVRleHQodGhpcy0+cFBpZGxNZ3IsIHBpZGxUZW1wLCBzelRlbXAsIE1BWF9QQVRIICk7CisgICAgICAgIAl9IAorCQkJCQlzdHJjYXQoc3pUZXh0LHN6VGVtcCk7CisJCQkJfQorCQkJCWVsc2UJCQkJCQorCQkJCXsgLyogaWYgdGhlIHBpZGwgaXMgYWJzb2x1dGUsIGdldCBldmVyeXRoaW5nIGZyb20gdGhlIHBpZGwqLworCQkJCSAgdGhpcy0+cFBpZGxNZ3ItPmxwdnRibC0+Zm5HZXRQaWRsUGF0aCh0aGlzLT5wUGlkbE1nciwgcGlkbCwgc3pUZXh0LCBNQVhfUEFUSCk7CisJCQkJfQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgIHJldHVybiBFX0lOVkFMSURBUkc7CisgICAgfQorCQlpZiAoKHN6VGV4dFswXT09MHgwMCAmJiBzekRyaXZlWzBdIT0weDAwKXx8IChiU2ltcGxlUGlkbCAmJiBzekRyaXZlWzBdIT0weDAwKSkKKwkJeyBzdHJjcHkoc3pUZXh0LHN6RHJpdmUpOworCQl9CisJCWlmIChzelRleHRbMF09PTB4MDAgJiYgc3pTcGVjaWFsWzBdIT0weDAwKQorCQl7IHN0cmNweShzelRleHQsc3pTcGVjaWFsKTsKKwkJfQorIAogICB9CisgIAorICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVzLCVzLCVzKVxuIix0aGlzLHN6U3BlY2lhbCxzekRyaXZlLHN6VGV4dCk7CiAKLSAgLy9nZXQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkCi0gIGNjaE9sZVN0ciA9IHN0cmxlbihzelRleHQpICsgMTsKLQotICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVzKVxuIix0aGlzLHN6VGV4dCk7Ci0gIC8vYWxsb2NhdGUgdGhlIHdpZGUgY2hhcmFjdGVyIHN0cmluZwotICBscE5hbWUtPnUucE9sZVN0ciA9IChMUFdTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxjY2hPbGVTdHIgKiBzaXplb2YoV0NIQVIpKTsKLQotICBpZighKGxwTmFtZS0+dS5wT2xlU3RyKSkKKyAgaWYoIShscE5hbWUpKQogICB7ICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKIAl9Ci0gIGxwTmFtZS0+dVR5cGUgPSBTVFJSRVRfV1NUUjsKLSAgTG9jYWxUb1dpZGVDaGFyMzIobHBOYW1lLT51LnBPbGVTdHIsIHN6VGV4dCwgY2NoT2xlU3RyKTsKKyAgbHBOYW1lLT51VHlwZSA9IFNUUlJFVF9DU1RSOwkKKwlzdHJjcHkobHBOYW1lLT51LmNTdHIsc3pUZXh0KTsKICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTk2Nyw2ICsxMDUwLDcgQEAKICoJICBJTlRFUk5BTCBDTEFTUyBwaWRsbWdyCiAqLwogTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlRGVza3RvcChMUFBJRExNR1IpOworTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlTXlDb21wdXRlcihMUFBJRExNR1IpOwogTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ3JlYXRlRHJpdmUoTFBQSURMTUdSLExQQ1NUUik7CiBMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVGb2xkZXIoTFBQSURMTUdSLExQQ1NUUik7CiBMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVWYWx1ZShMUFBJRExNR1IsTFBDU1RSKTsKQEAgLTk3OSw2ICsxMDYzLDcgQEAKIExQSVRFTUlETElTVCBQaWRsTWdyX0dldExhc3RJdGVtKExQUElETE1HUixMUENJVEVNSURMSVNUKTsKIERXT1JEIFBpZGxNZ3JfR2V0SXRlbVRleHQoTFBQSURMTUdSLExQQ0lURU1JRExJU1QsTFBTVFIsVUlOVDE2KTsKIEJPT0wzMiBQaWRsTWdyX0lzRGVza3RvcChMUFBJRExNR1IsTFBDSVRFTUlETElTVCk7CitCT09MMzIgUGlkbE1ncl9Jc015Q29tcHV0ZXIoTFBQSURMTUdSLExQQ0lURU1JRExJU1QpOwogQk9PTDMyIFBpZGxNZ3JfSXNEcml2ZShMUFBJRExNR1IsTFBDSVRFTUlETElTVCk7CiBCT09MMzIgUGlkbE1ncl9Jc0ZvbGRlcihMUFBJRExNR1IsTFBDSVRFTUlETElTVCk7CiBCT09MMzIgUGlkbE1ncl9Jc1ZhbHVlKExQUElETE1HUixMUENJVEVNSURMSVNUKTsKQEAgLTk5Niw3ICsxMDgxLDggQEAKIAogc3RhdGljIHN0cnVjdCBQaWRsTWdyX1ZUYWJsZSBwbWdydnQgPSB7CiAgICAgUGlkbE1ncl9DcmVhdGVEZXNrdG9wLAotICAgIFBpZGxNZ3JfQ3JlYXRlRHJpdmUsCisgICAgUGlkbE1ncl9DcmVhdGVNeUNvbXB1dGVyLAorCQlQaWRsTWdyX0NyZWF0ZURyaXZlLAogICAgIFBpZGxNZ3JfQ3JlYXRlRm9sZGVyLAogICAgIFBpZGxNZ3JfQ3JlYXRlVmFsdWUsCiAJCVBpZGxNZ3JfRGVsZXRlLApAQCAtMTAwOCw3ICsxMDk0LDggQEAKICAgICBQaWRsTWdyX0dldExhc3RJdGVtLAogICAgIFBpZGxNZ3JfR2V0SXRlbVRleHQsCiAgICAgUGlkbE1ncl9Jc0Rlc2t0b3AsCi0gICAgUGlkbE1ncl9Jc0RyaXZlLAorICAgIFBpZGxNZ3JfSXNNeUNvbXB1dGVyLAorCQlQaWRsTWdyX0lzRHJpdmUsCiAgICAgUGlkbE1ncl9Jc0ZvbGRlciwKICAgICBQaWRsTWdyX0lzVmFsdWUsCiAgICAgUGlkbE1ncl9IYXNGb2xkZXJzLApAQCAtMTA1MSwxMSArMTEzOCwxOSBAQAogICovCiBMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVEZXNrdG9wKExQUElETE1HUiB0aGlzKQogeyBUUkFDRShzaGVsbCwiKCVwKS0+KClcbiIsdGhpcyk7Ci0gICAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfREVTS1RPUCwgKHZvaWQgKikiRGVza3RvcCIsIHNpemVvZigiRGVza3RvcCIpKTsKKyAgICByZXR1cm4gUGlkbE1ncl9DcmVhdGUodGhpcyxQVF9ERVNLVE9QLCBOVUxMLCAwKTsKK30KK0xQSVRFTUlETElTVCBQaWRsTWdyX0NyZWF0ZU15Q29tcHV0ZXIoTFBQSURMTUdSIHRoaXMpCit7IFRSQUNFKHNoZWxsLCIoJXApLT4oKVxuIix0aGlzKTsKKyAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfTVlDT01QLCAodm9pZCAqKSJNeSBDb21wdXRlciIsIHNpemVvZigiTXkgQ29tcHV0ZXIiKSk7CiB9CiBMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVEcml2ZShMUFBJRExNR1IgdGhpcywgTFBDU1RSIGxwc3pOZXcpCi17IFRSQUNFKHNoZWxsLCIoJXApLT4oJXMpXG4iLHRoaXMsbHBzek5ldyk7Ci0gIHJldHVybiBQaWRsTWdyX0NyZWF0ZSh0aGlzLFBUX0RSSVZFLCAoTFBWT0lEKWxwc3pOZXcgLCBzdHJsZW4obHBzek5ldykrMSk7Cit7IGNoYXIgc1RlbXBbNF07CisgIHN0cm5jcHkgKHNUZW1wLGxwc3pOZXcsNCk7CisJc1RlbXBbMl09J1xcJzsKKwlzVGVtcFszXT0weDAwOworICBUUkFDRShzaGVsbCwiKCVwKS0+KCVzKVxuIix0aGlzLHNUZW1wKTsKKyAgcmV0dXJuIFBpZGxNZ3JfQ3JlYXRlKHRoaXMsUFRfRFJJVkUsKExQVk9JRCkmc1RlbXBbMF0sNCk7CiB9CiBMUElURU1JRExJU1QgUGlkbE1ncl9DcmVhdGVGb2xkZXIoTFBQSURMTUdSIHRoaXMsIExQQ1NUUiBscHN6TmV3KQogeyBUUkFDRShzaGVsbCwiKCVwKS0+KCVzKVxuIix0aGlzLGxwc3pOZXcpOwpAQCAtMTA3OCw5ICsxMTczLDEzIEBACiAgKiAgUGlkbE1ncl9HZXROZXh0SXRlbSgpCiAgKi8KIExQSVRFTUlETElTVCBQaWRsTWdyX0dldE5leHRJdGVtKExQUElETE1HUiB0aGlzLCBMUElURU1JRExJU1QgcGlkbCkKLXsgVFJBQ0Uoc2hlbGwsIiglcCktPihwaWRsPSVwKVxuIix0aGlzLHBpZGwpOworeyBMUElURU1JRExJU1QgbmV4dHBpZGw7CisKKyAgVFJBQ0Uoc2hlbGwsIiglcCktPihwaWRsPSVwKVxuIix0aGlzLHBpZGwpOwogICBpZihwaWRsKQotICB7ICByZXR1cm4gKExQSVRFTUlETElTVCkoTFBCWVRFKSgoKExQQllURSlwaWRsKSArIHBpZGwtPm1raWQuY2IpOworICB7IG5leHRwaWRsID0gKExQSVRFTUlETElTVCkoTFBCWVRFKSgoKExQQllURSlwaWRsKSArIHBpZGwtPm1raWQuY2IpOworLyogICAgVFJBQ0Uoc2hlbGwsIi0tICglcCktPihuZXh0IHBpZGw9JXApXG4iLHRoaXMsbmV4dHBpZGwpOyovCisJCXJldHVybiBuZXh0cGlkbDsKIAl9CiAgIGVsc2UKICAgeyAgcmV0dXJuIChOVUxMKTsKQEAgLTEwOTQsMTAgKzExOTMsMTAgQEAKIHsgTFBJVEVNSURMSVNUIHBpZGxUYXJnZXQgPSBOVUxMOwogICBVSU5UMTYgY2JTb3VyY2UgPSAwOwogCi0JVFJBQ0Uoc2hlbGwsIi0tICglcCktPihwaWRsPSVwKVxuIix0aGlzLHBpZGxTb3VyY2UpOworCVRSQUNFKHNoZWxsLCIoJXApLT4ocGlkbD0lcClcbiIsdGhpcyxwaWRsU291cmNlKTsKIAogICBpZihOVUxMID09IHBpZGxTb3VyY2UpCi0gCXsgIEVSUihzaGVsbCwiLS0gKCVwKS0+KCVwKVxuIix0aGlzLHBpZGxTb3VyY2UpOworIAl7ICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwKVxuIix0aGlzLHBpZGxTb3VyY2UpOwogICAgICByZXR1cm4gKE5VTEwpOwogCX0KIApAQCAtMTE1MCwxMiArMTI0OSwxMSBAQAogeyBMUElURU1JRExJU1QgICBwaWRsVGVtcD1OVUxMOwogCiAgIFRSQUNFKHNoZWxsLCIoJXApLT4oJXAsJXAsJXUpXG4iLHRoaXMscGlkbCxwT3V0LHVTaXplKTsKLSAgaWYoUGlkbE1ncl9Jc0Rlc2t0b3AodGhpcyxwaWRsKSkKKyAgaWYoUGlkbE1ncl9Jc015Q29tcHV0ZXIodGhpcyxwaWRsKSkKICAgeyBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsKTsKIAl9Ci0JZWxzZSBpZiAoUGlkbE1ncl9Jc0RyaXZlKHRoaXMscGlkbCkpCi0gIHsgcGlkbFRlbXAgPSBQaWRsTWdyX0dldE5leHRJdGVtKHRoaXMscGlkbCk7CSAgCQotICAgIHJldHVybiAoQk9PTDMyKVBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RSSVZFLCBwaWRsVGVtcCwgKExQVk9JRClwT3V0LCB1U2l6ZSk7CisJZWxzZSBpZiAoUGlkbE1ncl9Jc0RyaXZlKHRoaXMscGlkbFRlbXApKQorICB7IHJldHVybiAoQk9PTDMyKVBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RSSVZFLCBwaWRsVGVtcCwgKExQVk9JRClwT3V0LCB1U2l6ZSk7CiAJfQogCXJldHVybiBGQUxTRTsKIH0KQEAgLTExODIsOCArMTI4MCw4IEBACiAgKi8KIERXT1JEIFBpZGxNZ3JfR2V0SXRlbVRleHQoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsLCBMUFNUUiBscHN6VGV4dCwgVUlOVDE2IHVTaXplKQogeyBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAgJXAgJXgpXG4iLHRoaXMscGlkbCxscHN6VGV4dCx1U2l6ZSk7Ci0gIGlmIChQaWRsTWdyX0lzRGVza3RvcCh0aGlzLCBwaWRsKSkKLSAgeyByZXR1cm4gUGlkbE1ncl9HZXREYXRhKHRoaXMsUFRfREVTS1RPUCwgcGlkbCwgKExQVk9JRClscHN6VGV4dCwgdVNpemUpOworICBpZiAoUGlkbE1ncl9Jc015Q29tcHV0ZXIodGhpcywgcGlkbCkpCisgIHsgcmV0dXJuIFBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX01ZQ09NUCwgcGlkbCwgKExQVk9JRClscHN6VGV4dCwgdVNpemUpOwogCX0KIAlpZiAoUGlkbE1ncl9Jc0RyaXZlKHRoaXMsIHBpZGwpKQogCXsgcmV0dXJuIFBpZGxNZ3JfR2V0RGF0YSh0aGlzLFBUX0RSSVZFLCBwaWRsLCAoTFBWT0lEKWxwc3pUZXh0LCB1U2l6ZSk7CkBAIC0xMTk3LDEwICsxMjk1LDE1IEBACiAgKiAgUGlkbE1ncl9Jc1ZhbHVlKCkKICovCiBCT09MMzIgUGlkbE1ncl9Jc0Rlc2t0b3AoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsKQoreyBUUkFDRShzaGVsbCwiJXAtPiglcClcbiIsdGhpcyxwaWRsKTsKKyAgcmV0dXJuICggIHBpZGwtPm1raWQuY2IgPT0gMHgwMCApOworfQorCitCT09MMzIgUGlkbE1ncl9Jc015Q29tcHV0ZXIoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsKQogeyBMUFBJRExEQVRBICBwRGF0YTsKICAgVFJBQ0Uoc2hlbGwsIiVwLT4oJXApXG4iLHRoaXMscGlkbCk7CiAgIHBEYXRhID0gUGlkbE1ncl9HZXREYXRhUG9pbnRlcih0aGlzLHBpZGwpOwotICByZXR1cm4gKFBUX0RFU0tUT1AgPT0gcERhdGEtPnR5cGUpOworICByZXR1cm4gKFBUX01ZQ09NUCA9PSBwRGF0YS0+dHlwZSk7CiB9CiAKIEJPT0wzMiBQaWRsTWdyX0lzRHJpdmUoTFBQSURMTUdSIHRoaXMsTFBDSVRFTUlETElTVCBwaWRsKQpAQCAtMTI0OCw4ICsxMzUxLDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgUGlkbE1ncl9HZXRGb2xkZXJUZXh0KCkKLSAqICBDcmVhdGVzIGEgUGF0aCBzdHJpbmcgZnJvbSBhIFBJREwsIGZpbHRlcmluZyBvdXQgdGhlIERlc2t0b3AgYW5kIHRoZSBEcml2ZQotICogIHZhbHVlLCBpZiBlaXRoZXIgaXMgcHJlc2VudC4KKyAqICBDcmVhdGVzIGEgUGF0aCBzdHJpbmcgZnJvbSBhIFBJREwsIGZpbHRlcmluZyBvdXQgdGhlIHNwZWNpYWwgRm9sZGVycyAKICAqLwogRFdPUkQgUGlkbE1ncl9HZXRGb2xkZXJUZXh0KExQUElETE1HUiB0aGlzLExQQ0lURU1JRExJU1QgcGlkbCwKICAgIExQU1RSIGxwc3pQYXRoLCBEV09SRCBkd1NpemUpCkBAIC0xMjYyLDEyICsxMzY0LDkgQEAKICAgeyByZXR1cm4gMDsKIAl9CiAKLSAgaWYoUGlkbE1ncl9Jc0Rlc2t0b3AodGhpcyxwaWRsKSkKKyAgaWYoUGlkbE1ncl9Jc015Q29tcHV0ZXIodGhpcyxwaWRsKSkKICAgeyBwaWRsVGVtcCA9IFBpZGxNZ3JfR2V0TmV4dEl0ZW0odGhpcyxwaWRsKTsKIAl9Ci0JZWxzZSBpZiAoUGlkbE1ncl9Jc0ZvbGRlcih0aGlzLHBpZGwpKQotICB7IHBpZGxUZW1wID0gUGlkbE1ncl9HZXROZXh0SXRlbSh0aGlzLHBpZGwpOwkgIAkKLQl9CiAgIGVsc2UKICAgeyBwaWRsVGVtcCA9IChMUElURU1JRExJU1QpcGlkbDsKIAl9CkBAIC0xMjg0LDYgKzEzODMsNyBAQAogICAgIH0KIAogICAgIC8vYWRkIG9uZSBmb3IgdGhlIE5VTEwgdGVybWluYXRvcgorCSAgVFJBQ0Uoc2hlbGwsIi0tICglcCktPihzaXplPSVsdSlcbiIsdGhpcyxkd0NvcGllZCk7CiAgICAgcmV0dXJuIGR3Q29waWVkICsgMTsKICAgfQogCkBAIC0xMjk5LDEwICsxMzk5LDEwIEBACiAgICAKICAgICBzdHJjYXQobHBzelBhdGgsIHBEYXRhLT5zelRleHQpOwogICAgIHN0cmNhdChscHN6UGF0aCwgIlxcIik7Ci0KICAgICBkd0NvcGllZCArPSBzdHJsZW4ocERhdGEtPnN6VGV4dCkgKyAxOwotCiAgICAgcGlkbFRlbXAgPSBQaWRsTWdyX0dldE5leHRJdGVtKHRoaXMscGlkbFRlbXApOworCisJCVRSQUNFKHNoZWxsLCItLSAoJXApLT4oc2l6ZT0lbHUsJXMpXG4iLHRoaXMsZHdDb3BpZWQsbHBzelBhdGgpOwogICB9CiAKICAgLy9yZW1vdmUgdGhlIGxhc3QgYmFja3NsYXNoIGlmIG5lY2Vzc2FyeQpAQCAtMTMxMiw2ICsxNDEyLDcgQEAKICAgICAgIGR3Q29waWVkLS07CiAgICAgfQogICB9CisgIFRSQUNFKHNoZWxsLCItLSAoJXApLT4ocGF0aD0lcylcbiIsdGhpcyxscHN6UGF0aCk7CiAgIHJldHVybiBkd0NvcGllZDsKIH0KIApAQCAtMTMyNSw3ICsxNDI2LDcgQEAKIHsgTFBJVEVNSURMSVNUICBwaWRsVGVtcD1waWRsOwogICBDSEFSICAgICAgICAgIHN6VGV4dFtNQVhfUEFUSF07CiAKLSAgVFJBQ0Uoc2hlbGwsIiglcCktPihwaWRsPSVwICVwICVseClcbiIsdGhpcyxwaWRsLGxwc3pWYWx1ZSxkd1NpemUpOworICBUUkFDRShzaGVsbCwiKCVwKS0+KHBpZGw9JXAgJXAgMHglMDhseClcbiIsdGhpcyxwaWRsLGxwc3pWYWx1ZSxkd1NpemUpOwogCiAgIGlmKCFwaWRsKQogICB7IHJldHVybiAwOwpAQCAtMTM0NSwxNCArMTQ0NiwxNiBAQAogICB7IHJldHVybiBzdHJsZW4oc3pUZXh0KSArIDE7CiAgIH0KICAgc3RyY3B5KGxwc3pWYWx1ZSwgc3pUZXh0KTsKLQlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KHBpZGw9JXAgJXA9JXMgJWx4KVxuIix0aGlzLHBpZGwsbHBzelZhbHVlLGxwc3pWYWx1ZSxkd1NpemUpOworCVRSQUNFKHNoZWxsLCItLSAoJXApLT4ocGlkbD0lcCAlcD0lcyAweCUwOGx4KVxuIix0aGlzLHBpZGwsbHBzelZhbHVlLGxwc3pWYWx1ZSxkd1NpemUpOwogICByZXR1cm4gc3RybGVuKGxwc3pWYWx1ZSk7CiB9CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBQaWRsTWdyX0dldFZhbHVlVHlwZSgpCiAgKi8KIEJPT0wzMiBQaWRsTWdyX0dldFZhbHVlVHlwZSggTFBQSURMTUdSIHRoaXMsCi0gTFBDSVRFTUlETElTVCBwaWRsUGF0aCwgTFBDSVRFTUlETElTVCBwaWRsVmFsdWUsIExQRFdPUkQgcGR3VHlwZSkKKyAgIExQQ0lURU1JRExJU1QgcGlkbFBhdGgsCisgICBMUENJVEVNSURMSVNUIHBpZGxWYWx1ZSwKKyAgIExQRFdPUkQgcGR3VHlwZSkKIHsgTFBTVFIgICAgbHBzekZvbGRlciwKICAgICAgICAgICAgbHBzelZhbHVlTmFtZTsKICAgRFdPUkQgICAgZHdOYW1lU2l6ZTsKQEAgLTE0NDksNyArMTU1Miw3IEBACiAgIEhlYXBGcmVlKEdldFByb2Nlc3NIZWFwKCksMCxscHN6Rm9sZGVyKTsKICAgSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLGxwc3pWYWx1ZU5hbWUpOwogCi0gIFRSQUNFKHNoZWxsLCItLSAoJXApLT4oJXA9JXMgJWx4KVxuIix0aGlzLGxwc3pPdXQsbHBzek91dCxkd091dFNpemUpOworICBUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwPSVzIDB4JTA4bHgpXG4iLHRoaXMsbHBzek91dCxscHN6T3V0LGR3T3V0U2l6ZSk7CiAKIAlyZXR1cm4gVFJVRTsKIH0KQEAgLTE1MDIsNyArMTYwNSwxMCBAQAogICogUGlkbE1ncl9Db25jYXRlbmF0ZSgpCiAgKiBDcmVhdGUgYSBuZXcgUElETCBieSBjb21iaW5pbmcgdHdvIGV4aXN0aW5nIFBJRExzLgogICovICAKLUxQSVRFTUlETElTVCBQaWRsTWdyX0NvbmNhdGVuYXRlKExQUElETE1HUiB0aGlzLExQSVRFTUlETElTVCBwaWRsMSwgTFBJVEVNSURMSVNUIHBpZGwyKQorTFBJVEVNSURMSVNUIFBpZGxNZ3JfQ29uY2F0ZW5hdGUoCisgICAgTFBQSURMTUdSIHRoaXMsCisJCUxQSVRFTUlETElTVCBwaWRsMSwKKwkJTFBJVEVNSURMSVNUIHBpZGwyKQogeyBMUElURU1JRExJU1QgICBwaWRsTmV3OwogICBVSU5UMzIgICAgICAgICBjYjEgPSAwLCBjYjIgPSAwOwogCkBAIC0xNTUwLDYgKzE2NTYsMTEgQEAKIAogICBUUkFDRShzaGVsbCwiKCVwKS0+KCV4ICVwICV4KVxuIix0aGlzLHR5cGUscEluLHVJblNpemUpOwogCisgIGlmICggdHlwZSA9PSBQVF9ERVNLVE9QKQorCXsgICBwaWRsT3V0ID0gKExQSVRFTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHNpemVvZihJVEVNSURMSVNUKSk7CisgIAkJbWVtc2V0KHBpZGxPdXQsIDB4MDAsIHNpemVvZihJVEVNSURMSVNUKSk7CisJfQorCiAgIGlmICghIHBJbikKIAl7IHJldHVybiBOVUxMOwogCX0JCkBAIC0xNTU4LDIzICsxNjY5LDI0IEBACiAgIC8qIEFsbG9jYXRlIHRoZSBtZW1vcnksIGFkZGluZyBhbiBhZGRpdGlvbmFsIElURU1JRExJU1QgZm9yIHRoZSBOVUxMIHRlcm1pbmF0aW5nIAogICBJRCBMaXN0LiAqLwogICBwaWRsT3V0ID0gKExQSVRFTUlETElTVClIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwwLHVTaXplICsgc2l6ZW9mKElURU1JRExJU1QpKTsKKwltZW1zZXQocGlkbE91dCwgMHhBQSwgdVNpemUpOwogICBwaWRsVGVtcCA9IHBpZGxPdXQ7CiAgIGlmKHBpZGxPdXQpCiAgIHsgcGlkbFRlbXAtPm1raWQuY2IgPSB1U2l6ZTsKICAgICBwRGF0YSA9IFBpZGxNZ3JfR2V0RGF0YVBvaW50ZXIodGhpcyxwaWRsVGVtcCk7CiAgICAgcERhdGEtPnR5cGUgPSB0eXBlOwogICAgIHN3aXRjaCh0eXBlKQotICAgIHsgY2FzZSBQVF9ERVNLVE9QOiBtZW1jcHkocERhdGEtPnN6VGV4dCwgcEluLCB1SW5TaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0Uoc2hlbGwsIi0tICglcCktPmNyZWF0ZSBEZXNrdG9wOiAlc1xuIix0aGlzLGRlYnVnc3RyX2EocERhdGEtPnN6VGV4dCkpOworICAgIHsgY2FzZSBQVF9NWUNPTVA6ICBtZW1jcHkocERhdGEtPnN6VGV4dCwgcEluLCB1SW5TaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0Uoc2hlbGwsIi0gKCVwKS0+Y3JlYXRlIE15IENvbXB1dGVyOiAlc1xuIix0aGlzLGRlYnVnc3RyX2EocERhdGEtPnN6VGV4dCkpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJCWNhc2UgUFRfRFJJVkU6CSBtZW1jcHkocERhdGEtPnN6VGV4dCwgcEluLCB1SW5TaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0Uoc2hlbGwsIi0tICglcCktPmNyZWF0ZSBEcml2ZTogJXNcbiIsdGhpcyxkZWJ1Z3N0cl9hKHBEYXRhLT5zelRleHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0Uoc2hlbGwsIi0gKCVwKS0+Y3JlYXRlIERyaXZlOiAlc1xuIix0aGlzLGRlYnVnc3RyX2EocERhdGEtPnN6VGV4dCkpOwogCQkJCQkJCQkJCQkgYnJlYWs7CiAgICAgICBjYXNlIFBUX0ZPTERFUjoKICAgICAgIGNhc2UgUFRfVkFMVUU6ICAgbWVtY3B5KHBEYXRhLT5zelRleHQsIHBJbiwgdUluU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKHNoZWxsLCItLSAoJXApLT5jcmVhdGUgVmFsdWU6ICVzXG4iLHRoaXMsZGVidWdzdHJfYShwRGF0YS0+c3pUZXh0KSk7CisgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKHNoZWxsLCItICglcCktPmNyZWF0ZSBWYWx1ZTogJXNcbiIsdGhpcyxkZWJ1Z3N0cl9hKHBEYXRhLT5zelRleHQpKTsKIAkJCQkJCQkJCQkJIGJyZWFrOwotCQkgIGRlZmF1bHQ6ICAgICAgICAgRklYTUUoc2hlbGwsIi0tICglcCkgd3JvbmcgYXJndW1lbnRcbiIsdGhpcyk7CisJCSAgZGVmYXVsdDogICAgICAgICBGSVhNRShzaGVsbCwiLSAoJXApIHdyb25nIGFyZ3VtZW50XG4iLHRoaXMpOwogCQkJICAgICAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAKQEAgLTE2MDcsMjEgKzE3MTksMjEgQEAKIAogICAvL2NvcHkgdGhlIGRhdGEKICAgc3dpdGNoKHR5cGUpCi0gIHsgY2FzZSBQVF9ERVNLVE9QOiBpZih1T3V0U2l6ZSA8IDEpCisgIHsgY2FzZSBQVF9NWUNPTVA6ICBpZih1T3V0U2l6ZSA8IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgaWYoUFRfREVTS1RPUCAhPSBwRGF0YS0+dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmKFBUX01ZQ09NUCAhPSBwRGF0YS0+dHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAJCQkJCQkJCQkJICooTFBTVFIpcE91dCA9IDA7CSAKLSAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkoKExQU1RSKXBPdXQsICJERVNLVE9QIiwgdU91dFNpemUpOworICAgICAgICAgICAgICAgICAgICAgc3RybmNweSgoTFBTVFIpcE91dCwgIk15IENvbXB1dGVyIiwgdU91dFNpemUpOwogCQkJCQkJCQkJCSBkd1JldHVybiA9IHN0cmxlbigoTFBTVFIpcE91dCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogCSBjYXNlIFBUX0RSSVZFOiAgICBpZih1T3V0U2l6ZSA8IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgaWYoUFRfREVTS1RPUCAhPSBwRGF0YS0+dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmKFBUX0RSSVZFICE9IHBEYXRhLT50eXBlKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAkJCQkJCQkJCQkgKihMUFNUUilwT3V0ID0gMDsJIAotICAgICAgICAgICAgICAgICAgICAgc3RybmNweSgoTFBTVFIpcE91dCwgIkRSSVZFIiwgdU91dFNpemUpOworICAgICAgICAgICAgICAgICAgICAgc3RybmNweSgoTFBTVFIpcE91dCwgcERhdGEtPnN6VGV4dCwgdU91dFNpemUpOwogCQkJCQkJCQkJCSBkd1JldHVybiA9IHN0cmxlbigoTFBTVFIpcE91dCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMTYzMSw4ICsxNzQzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgIHN0cm5jcHkoKExQU1RSKXBPdXQsIHBEYXRhLT5zelRleHQsIHVPdXRTaXplKTsKICAgICAgICAgICAgICAgICAgICAgIGR3UmV0dXJuID0gc3RybGVuKChMUFNUUilwT3V0KTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgZGVmYXVsdDogICAgIGJyZWFrOwkJCQkJCQkJCQkgCiAgIH0KLQlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwOiVzICVseClcbiIsdGhpcyxwT3V0LChjaGFyKilwT3V0LGR3UmV0dXJuKTsKKwlUUkFDRShzaGVsbCwiLS0gKCVwKS0+KCVwPSVzIDB4JTA4bHgpXG4iLHRoaXMscE91dCwoY2hhciopcE91dCxkd1JldHVybik7CiAgIHJldHVybiBkd1JldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvb2xlL21vbmlrZXIuYyBiL29sZS9tb25pa2VyLmMKaW5kZXggNzkwNGFiOC4uODQ0ZmM3OCAxMDA2NDQKLS0tIGEvb2xlL21vbmlrZXIuYworKysgYi9vbGUvbW9uaWtlci5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAiaGVhcC5oIgogI2luY2x1ZGUgImNvbXBvYmouaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAic3RvcmFnZS5oIgogI2luY2x1ZGUgInNobG9iai5oIgogI2luY2x1ZGUgImxvY2FsLmgiCiAjaW5jbHVkZSAibW9kdWxlLmgiCkBAIC0zMSwzICszMiwxNCBAQAogCUZJWE1FKG9sZSwiKCVzLCVwKSxzdHViIVxuIixscHN6UGF0aE5hbWUscHBtayk7CiAJcmV0dXJuIEVfRkFJTDsKIH0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkJQ3JlYXRlRmlsZU1vbmlrZXIJKE9MRTMyLjU1KQorICovCitIUkVTVUxUIFdJTkFQSQorQ3JlYXRlRmlsZU1vbmlrZXIzMigKKwlMUENPTEVTVFIzMiBscHN6UGF0aE5hbWUsCS8qIFtpbl0gcGF0aG5hbWUgKi8KKwlMUE1PTklLRVIgKiBwcG1rCQkvKiBbb3V0XSBuZXcgbW9uaWtlciBvYmplY3QgKi8KKykgeworCUZJWE1FKG9sZSwiKCVzLCVwKSxzdHViIVxuIixkZWJ1Z3N0cl93KGxwc3pQYXRoTmFtZSkscHBtayk7CisJcmV0dXJuIEVfRkFJTDsKK30KZGlmZiAtLWdpdCBhL29sZS9ubHMvY2F0Lm5scyBiL29sZS9ubHMvY2F0Lm5scwppbmRleCBmNTUzN2JlLi44NDE1NjEwIDEwMDY0NAotLS0gYS9vbGUvbmxzL2NhdC5ubHMKKysrIGIvb2xlL25scy9jYXQubmxzCkBAIC04LDEwICs4LDEwIEBACiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiQ2F0YWxhbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiY2F0IikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJDYXRhbOAiKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjM0IikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkVzcGFueWEiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3BhaW4iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkVzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJFU1AiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGFueWEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2N6ZS5ubHMgYi9vbGUvbmxzL2N6ZS5ubHMKaW5kZXggODA2NzAzZi4uNDBiZjM4ZCAxMDA2NDQKLS0tIGEvb2xlL25scy9jemUubmxzCisrKyBiL29sZS9ubHMvY3plLm5scwpAQCAtMSwyMSArMSwyMSBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBDemVjaCBSZXB1YmxpYworICoJKEN6ZWNoIHN0cmluZ3MgaW4gaXNvLTg4NTktMikKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkN6ZWNoIFJlcHVibGljIikKK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJDemVjaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiY3plIikKLQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIshlc2v9IGphenlrIikKLS8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0MiIpCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCLIZXNr4SBSZXB1Ymxpa2EiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiQ3plY2ggUmVwdWJsaWMiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkN6IikKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIshlc2vhIFJlcHVibGlrYSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0MiIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg5NSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZGVhLm5scyBiL29sZS9ubHMvZGVhLm5scwppbmRleCBiYWM5MGRlLi4zNWMzZWIwIDEwMDY0NAotLS0gYS9vbGUvbmxzL2RlYS5ubHMKKysrIGIvb2xlL25scy9kZWEubmxzCkBAIC03LDEyICs3LDEyIEBACiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRGV1dHNjaCIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR2VybWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkZWEiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIoBzdGVycmVpY2giKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsItZzdGVycmVpY2giKQogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDEiKQotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwigHN0ZXJyZWljaCAoRGV1dHNjaCkiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwi1nN0ZXJyZWljaCAoRGV1dHNjaCkiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiQXVzdHJpYSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQVRTIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCKAc3RlcnJlaWNoIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCLWc3RlcnJlaWNoIikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiOSIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDEiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKQpAQCAtNzIsNyArNzIsNyBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIlNhIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTbyIpCiAKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIkqAbm5lciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJK5G5uZXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiRmVicnVhciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJN5HJ6IikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIkFwcmlsIikKQEAgLTg2LDcgKzg2LDcgQEAKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJEZXplbWJlciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiSoBuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIkrkbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJGZWIiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiTeRyIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkFwciIpCkBAIC0xMDksNCArMTA5LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSkgKi8KIAotLyogR3JlZ29yaWFuaXNjaGVyIEthbGVuZGVyICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLyogR3JlZ29yaWFuaXNjaGVyIEthbGVuZGVyICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2RldS5ubHMgYi9vbGUvbmxzL2RldS5ubHMKaW5kZXggMjFlNzg5MS4uMjFiZjcxZSAxMDA2NDQKLS0tIGEvb2xlL25scy9kZXUubmxzCisrKyBiL29sZS9ubHMvZGV1Lm5scwpAQCAtMjgsOCArMjgsOCBAQAogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiRE0iKQogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkRFTSIpCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCAiLCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwgIi4iKQogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsICIzOzAiKQogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNhLm5scyBiL29sZS9ubHMvZXNhLm5scwppbmRleCA5OWM1NjAyLi5hNDE2ODY2IDEwMDY0NAotLS0gYS9vbGUvbmxzL2VzYS5ubHMKKysrIGIvb2xlL25scy9lc2EubmxzCkBAIC00LDE4ICs0LDE4IEBACiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJFc3Bh8W9sIikKIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJlc2EiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIlBhbmFtYSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlBhbmFt4SIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJQYW5hbWEiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlBBTiIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiUGFuYW1hIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJQYW5hbeEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC01NywxOSArNTcsMTkgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWnpcmNvbGVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInPhYmFkbyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJz4WIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQpAQCAtOTksOCArOTksOCBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzYi5ubHMgYi9vbGUvbmxzL2VzYi5ubHMKaW5kZXggN2ZhZTU4My4uZWFlMjI4MyAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2IubmxzCisrKyBiL29sZS9ubHMvZXNiLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNiIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJCb2xpdmlhIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiQm9saXZpYSIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJCb2xpdmlhIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJCT0wiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkJvbGl2aWEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC01NywxOSArNTcsMTkgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWnpcmNvbGVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInPhYmFkbyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJz4WIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQpAQCAtOTksOCArOTksOCBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzYy5ubHMgYi9vbGUvbmxzL2VzYy5ubHMKaW5kZXggNWE5YjY3ZC4uNDhhYzRmYyAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2MubmxzCisrKyBiL29sZS9ubHMvZXNjLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNhIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJDb3N0YSBSaWNhIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3Bh8W9sIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiQ29zdGEgUmljYSIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJDb3N0YSBSaWNhIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJDUkkiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkNvc3RhIFJpY2EiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC01NywxOSArNTcsMTkgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWnpcmNvbGVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInPhYmFkbyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJz4WIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQpAQCAtOTksOCArOTksOCBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzZC5ubHMgYi9vbGUvbmxzL2VzZC5ubHMKaW5kZXggYTFlZThjNy4uNDAzNjE0MSAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2QubmxzCisrKyBiL29sZS9ubHMvZXNkLm5scwpAQCAtNCwxOCArNCwxOCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNkIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJSZXA/YmxpY2EgRG9taW5pY2FuYSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlJlcPpibGljYSBEb21pbmljYW5hIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRvbWluaWNhbiBSZXB1YmxpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRE1BIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJFc3BhgGEiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlJlcPpibGljYSBEb21pbmljYW5hIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTAiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLwpAQCAtNTcsMTkgKzU3LDE5IEBACiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p6XJjb2xlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz4WJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWnpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic+FiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkb20iKQogCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJlbmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKQEAgLTk5LDggKzk5LDggQEAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc2UubmxzIGIvb2xlL25scy9lc2UubmxzCmluZGV4IDlhNDEwYWMuLjk3Y2IwOTIgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZXNlLm5scworKysgYi9vbGUvbmxzL2VzZS5ubHMKQEAgLTQsMTggKzQsMTggQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wiKQogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzZSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYYBvbCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkVsIFNhbHZhZG9yIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkVsIFNhbHZhZG9yIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJTVkQiKQotTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVzcGGAYSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRWwgU2FsdmFkb3IiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC01NywxOSArNTcsMTkgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWnpcmNvbGVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInPhYmFkbyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJz4WIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsImVuZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJlcm8iKQpAQCAtOTksOCArOTksOCBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzZi5ubHMgYi9vbGUvbmxzL2VzZi5ubHMKaW5kZXggZWUzZmJlYi4uMjc4NDE5NiAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2YubmxzCisrKyBiL29sZS9ubHMvZXNmLm5scwpAQCAtNCwxMCArNCwxMCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU3BhbmlzaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwiZXNmIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3BhgG9sIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3Bh8W9sIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJFY3VhZG9yIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkVjdWFkb3IiKQpAQCAtMTUsNyArMTUsNyBAQAogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkVjdWFkb3IiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC01NywyMSArNTcsMjEgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1pP3Jjb2xlcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWnpcmNvbGVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJqdWV2ZXMiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZpZXJuZXMiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInM/YWJhZG8iKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInPhYmFkbyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiZG9taW5nbyIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWk/IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsImx1biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwibWFyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImp1ZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwidmllIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJz4WIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRvbSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJlbmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJyZXJvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnpvIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFicmlsIikKQEAgLTk5LDggKzk5LDggQEAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkaWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9lc2cubmxzIGIvb2xlL25scy9lc2cubmxzCmluZGV4IGNlZTNlMjMuLjA3M2M1ODggMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZXNnLm5scworKysgYi9vbGUvbmxzL2VzZy5ubHMKQEAgLTQsMTAgKzQsMTAgQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wiKQogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzZyIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYYBvbCIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiR3VhdGVtYWxhIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkd1YXRlbWFsYSIpCkBAIC0xNSw3ICsxNSw3IEBACiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiR3VhdGVtYWxhIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTAiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLwpAQCAtNTcsMjEgKzU3LDIxIEBACiAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwibWFydGVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT9yY29sZXMiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p6XJjb2xlcyIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwianVldmVzIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJ2aWVybmVzIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP2FiYWRvIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz4WJhZG8iKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImRvbWluZ28iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwibHVuIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJtYXIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIm1pPyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwianVlIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJ2aWUiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJsdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWnpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJqdWUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInZpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic+FiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJkb20iKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiZW5lcm8iKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicmVybyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ6byIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhYnJpbCIpCkBAIC05OSw4ICs5OSw4IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZGljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpCitMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICItIikKIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSVBPU1NZTVBSRUNFREVTLCAiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZXNoLm5scyBiL29sZS9ubHMvZXNoLm5scwppbmRleCBiZDJlNzQzLi40NmFkYjFjIDEwMDY0NAotLS0gYS9vbGUvbmxzL2VzaC5ubHMKKysrIGIvb2xlL25scy9lc2gubmxzCkBAIC00LDEwICs0LDEwIEBACiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi1MT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiRXNwYfFvbCAoSG9uZHVyYXMpIikKLUxPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJTcGFuaXNoIChIb25kdXJhcykiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzaCIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCAoSG9uZHVyYXMpIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJFc3Bh8W9sIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJIb25kdXJhcyIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJIb25kdXJhcyIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2VzaS5ubHMgYi9vbGUvbmxzL2VzaS5ubHMKaW5kZXggNTdiMDUzOC4uMGNhODJkMyAxMDA2NDQKLS0tIGEvb2xlL25scy9lc2kubmxzCisrKyBiL29sZS9ubHMvZXNpLm5scwpAQCAtNCwxMCArNCwxMCBAQAogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wgKE5pY2FyYWd1YSkiKQotTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2ggKE5pY2FyYWd1YSkiKQorTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkVzcGHxb2wiKQorTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNwYW5pc2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImVzaSIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCAoTmljYXJhZ3VhKSIpCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiRXNwYfFvbCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTmljYXJhZ3VhIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIk5pY2FyYWd1YSIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Zvcy5ubHMgYi9vbGUvbmxzL2Zvcy5ubHMKaW5kZXggNWE0YmVhZi4uMWVjZThjNiAxMDA2NDQKLS0tIGEvb2xlL25scy9mb3MubmxzCisrKyBiL29sZS9ubHMvZm9zLm5scwpAQCAtOCw3ICs4LDcgQEAKIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJGYXJvZXNlIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmb3MiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsImY/cm95c2t0IikKLS8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ5IikgKi8KK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjI5OCIpCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiRmFyb2UgSXNsYW5kcyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiRlJTIikKQEAgLTU1LDE5ICs1NSwxOSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJtgG5hZGFndXIiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIj9vc2RhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJt4W5hZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsInT9c2RhZ3VyIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaWt1ZGFndXIiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImg/c2RhZ3VyIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJmcj9nZ2phZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImjzc2RhZ3VyIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJmcu1nZ2phZGFndXIiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImxleWdhcmRhZ3VyIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udWRhZ3VyIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm0/biIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwidD9zIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJt4W4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsInT9cyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywibWlrIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJoP3MiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsImZyPyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiaPNzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJmcu0iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsImxleSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywic3VuIikKIApkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmEubmxzIGIvb2xlL25scy9mcmEubmxzCmluZGV4IGE2MTg4ZDkuLmViNDFjMDcgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZnJhLm5scworKysgYi9vbGUvbmxzL2ZyYS5ubHMKQEAgLTExLDcgKzExLDcgQEAKIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjMzIikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkZyYW5jZSIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJGcmFuY2UiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkZyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJGUkEiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkZyYW5jZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KQEAgLTEwOCw0ICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKLS8qIGNhbGVuZHJpZXIgZ3KAZ29yaWVuICovCisvKiBjYWxlbmRyaWVyIGdy6WdvcmllbiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmIubmxzIGIvb2xlL25scy9mcmIubmxzCmluZGV4IGJlNjRiMWIuLmRiYmQ3YjYgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZnJiLm5scworKysgYi9vbGUvbmxzL2ZyYi5ubHMKQEAgLTExLDcgKzExLDcgQEAKIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjMyIikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIkJlbGdpcXVlIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkJlbGdpdW0iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkJlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJCRUwiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkJlbGdpcXVlIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmMubmxzIGIvb2xlL25scy9mcmMubmxzCmluZGV4IDM4MjkwMTIuLmZmY2RkNDYgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZnJjLm5scworKysgYi9vbGUvbmxzL2ZyYy5ubHMKQEAgLTcsOSArNyw5IEBACiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJGcmVuY2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZyYyIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiZnJhboBhaXMiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsImZyYW7nYWlzIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiQ2FuYWRhIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkNhbmFkYSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiQ0FOIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJDYW5hZGEiKQpAQCAtNzIsMzEgKzcyLDMxIEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiZGltIikKIAogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudmllciIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmgHZyaWVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImbpdnJpZXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFycyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhdnJpbCIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWkiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwianVpbiIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqdWlsbGV0IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImFvgHQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYW/7dCIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1icmUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9jdG9icmUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJlIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkgGNlbWJyZSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZOljZW1icmUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCiAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbnYiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZoB2ciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJm6XZyIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hcnMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXZyIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdWluIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsImp1aWwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYW+AdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb/t0IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcHQiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9jdCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkgGMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImTpYyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KQEAgLTEwOCw0ICsxMDgsNCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIiIpICovCiAKLS8qIGNhbGVuZHJpZXIgZ3KAZ29yaWVuICovCisvKiBjYWxlbmRyaWVyIGdy6WdvcmllbiAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9mcmwubmxzIGIvb2xlL25scy9mcmwubmxzCmluZGV4IGE3MGNjNWQuLmI4NTcxMjMgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvZnJsLm5scworKysgYi9vbGUvbmxzL2ZybC5ubHMKQEAgLTQsMTggKzQsMTggQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIkZyYW7nYWlzIikKIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJGcmVuY2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImZybCIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiZnJhboBhaXMiKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJmcmFu52FpcyIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzNTIiKQogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiTHV4ZW1ib3VyZyIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJMdXhlbWJ1cmciKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkxVWCIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiTHV4ZW1ib3VyZyIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KQEAgLTcyLDMxICs3MiwzMSBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsImRpbSIpIAogCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW52aWVyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImaAdnJpZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZul2cmllciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJzIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImF2cmlsIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1haSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdWluIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImp1aWxsZXQiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiYW+AdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhb/t0IikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInNlcHRlbWJyZSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2N0b2JyZSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwibm92ZW1icmUiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsImSAY2VtYnJlIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJk6WNlbWJyZSIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFudiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmgHZyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImbpdnIiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibWFycyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhdnIiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImp1aW4iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVpbCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJhb4B0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImFv+3QiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwic2VwdCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2N0IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiZOljIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKQogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwpAQCAtMTA4LDQgKzEwOCw0IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KIAotLyogY2FsZW5kcmllciBncoBnb3JpZW4gKi8KKy8qIGNhbGVuZHJpZXIgZ3LpZ29yaWVuICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2Zycy5ubHMgYi9vbGUvbmxzL2Zycy5ubHMKaW5kZXggOWM3OTRmMC4uYTk2YTAyMCAxMDA2NDQKLS0tIGEvb2xlL25scy9mcnMubmxzCisrKyBiL29sZS9ubHMvZnJzLm5scwpAQCAtOCwxMCArOCwxMCBAQAogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkZyZW5jaCAoU3dpdHplcmxhbmQpIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJmcnMiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIkZyYW7nYWlzIChTdWlzc2UpIikKLS8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0MSIpCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJTdWlzc2UiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU3dpdHplcmxhbmQiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkNoIikKKy8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlN1aXNzZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvZ3JjLm5scyBiL29sZS9ubHMvZ3JjLm5scwppbmRleCAxMWZkMDY2Li41NGY4MWFhIDEwMDY0NAotLS0gYS9vbGUvbmxzL2dyYy5ubHMKKysrIGIvb2xlL25scy9ncmMubmxzCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBHcmVlaworICoJKEdyZWVrIHN0cmluZ3MgaW4gaXNvLTg4NTktNykKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KQEAgLTgsOSArOSw5IEBACiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiR3JlZWsiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImdyYyIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzMCIpCiAvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkdyZWVjZSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwpAQCAtMjYsNyArMjcsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCi0vKiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCLk8fciKQogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkdSRCIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KQEAgLTU1LDQ4ICs1Niw0OCBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIsTl9fTd8eEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsItTx3/TnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCLU5fTc8fTnIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCLQ3ezw9OciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsItDh8eHz6uX13iIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwi0+Hi4tz07yIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiyvXx6eHq5yIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJNYSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiVGkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIk9uIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJUbyIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiRnIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkz4IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJT+CIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwixOX1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCLU8ekiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsItTl9CIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwi0OXsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCLQ4fEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsItPh4iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiyvXxIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiyeHt79zx6e/yIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsItbl4vHv3PHp7/IiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywizNzx9Onv8iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCLB8PHf6+nv8iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCLM3Onv8iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCLJ7/3t6e/yIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIsnv/evp7/IiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiwf3j7/Xz9O/yIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksItPl8PTd7OLx6e/yIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCLP6vT+4vHp7/IiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIs3v3ezi8env8iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwixOXq3ezi8env8iIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiyeHtIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsItbl4iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCLM3PEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiwfDxIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIszc6SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCLJ7/3tIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIsnv/esiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiwf3jIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksItPl8CIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiz+r0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCLN790iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIsTl6iIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaHJ2Lm5scyBiL29sZS9ubHMvaHJ2Lm5scwppbmRleCAzNmQ0MzE0Li5iOWY0MmU4IDEwMDY0NAotLS0gYS9vbGUvbmxzL2hydi5ubHMKKysrIGIvb2xlL25scy9ocnYubmxzCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBDcm9hdGlhCisgKgkoQ3JvYXRpYW4gc3RyaW5ncyBpbiBpc28tODg1OS0yKQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwpAQCAtMTEsNyArMTIsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJDcm9hdGlhIikKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJIUlYiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkhSViIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiSHJ2YXRza2EiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCkBAIC01NSw0OSArNTYsNDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwicG9uZWRqIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJlbGphayIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywidXRvcmFrIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJzcmlqZWRhIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJldHZydGFrIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJwZXRhayIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic3Vib3RhIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU/LCJuZWRqZWxqYSIpICovCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwicG9uZWRlbGphayIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwidXRvcmFrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJzcmVkYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwi6GV0dnJ0YWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInBldGFrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzdWJvdGEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIm5lZGVsamEiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJwb24iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsInRvciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywic3JlIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCLoZXQiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsInBldCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwic3ViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJuZWQiKQogCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJzaWplP2FuaiIpIAotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwidmVsamEiKSAKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm8/dWphayIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJ0cmF2YW5qIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsInN2aWJhbmoiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwibGlwYW5qIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsInNycGFuaiIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJrb2xvdm96IikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksInJ1amFuIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJsaXN0b3BhZCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwic3R1ZGVuaSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwicHJvc2luYWMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudWFyIikgCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydWFyIikgCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCJtYXJ0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIm1haiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsImF1Z3VzdCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iYXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdG9iYXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYmFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCJkZWNlbWJhciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwic2lqIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsInZlbCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJvP3UiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwidHJhIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsInN2aSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJsaXAiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywic3JwIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImtvbCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJydWoiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsImxpcyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwic3R1IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJwcm8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImF1ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKIC8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL2h1bi5ubHMgYi9vbGUvbmxzL2h1bi5ubHMKaW5kZXggN2RiMzVmMC4uOWJlYzBiNyAxMDA2NDQKLS0tIGEvb2xlL25scy9odW4ubmxzCisrKyBiL29sZS9ubHMvaHVuLm5scwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKICAqICAgICAgSHVuZ2FyaWFuCisgKgkoSHVuZ2FyaWFuIHN0cmluZ3MgaW4gaXNvLTg4NTktMikKICAqLwogCiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiOSIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL2lybC5ubHMgYi9vbGUvbmxzL2lybC5ubHMKaW5kZXggY2Y5NmU2Zi4uZjdiMTI2NiAxMDA2NDQKLS0tIGEvb2xlL25scy9pcmwubmxzCisrKyBiL29sZS9ubHMvaXJsLm5scwpAQCAtOCwxMyArOCwxMyBAQAogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJFbmdsaXNoIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAiaXJsIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiRW5nbGlzaCIpCi1MT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCAiMzUzIikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJJcmVsYW5kIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJJcmVsYW5kIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCAiSVJMIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCAiRWlyZSIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwNDA5IikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjM1MyIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsICI0MzciKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSwgIjEyNTIiKQogTE9DVkFMKExPQ0FMRV9TTElTVCwgIiwiKQpAQCAtMTA4LDQgKzEwOCw0IEBACiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIjEiKQogTE9DVkFMKExPQ0FMRV9JTkVHU0VQQllTUEFDRSwgIjAiKQogCi0vKiBHcmVnb3JpYW4gQ2FsZW5kYXIgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisvKiBHcmVnb3JpYW4gQ2FsZW5kYXIgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvaXNsLm5scyBiL29sZS9ubHMvaXNsLm5scwppbmRleCBjYTdhNTc5Li4yYzc1NjIwIDEwMDY0NAotLS0gYS9vbGUvbmxzL2lzbC5ubHMKKysrIGIvb2xlL25scy9pc2wubmxzCkBAIC0xLDIwICsxLDIxIEBACiAvKgogICoJT0xFMk5MUyBsaWJyYXJ5CiAgKiAgICAgIEljZWxhbmQKKyAqCShJY2VsYW5kaWMgc3RyaW5ncyBpbiBpc28tODg1OS0xKQogICovCiAKIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKLUxPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCKAc2xlbnNrIikKK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCLNc2xlbnNrIikKIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJJY2VsYW5kaWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsImlzbCIpCi1MT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwigHNsZW5za2EiKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDkiKSAqLwotTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwigHNsYW5kIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCLNc2xlbnNrYSIpCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzNTQiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwizXNsYW5kIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkljZWxhbmQiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIklzIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCKAc2xhbmQiKQorTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIs1zbGFuZCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQwIikgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzNTQiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIExPQ1ZBTChMT0NBTEVfU0xJU1QsIjsiKQpAQCAtNTUsNDcgKzU2LDQ3IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm2AbnVkYWd1ciIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiP2hyaWRqdWRhZ3VyIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJtaT92aWt1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIm3hbnVkYWd1ciIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwi/nJp8Gp1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1p8HZpa3VkYWd1ciIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiZmltbXR1ZGFndXIiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsImaAc3R1ZGFndXIiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsImb2c3R1ZGFndXIiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImxhdWdhcmRhZ3VyIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzdW5udWRhZ3VyIikKIAotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm2AbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiP3JpIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtaT8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm3hbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwi/nJpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJtafAiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsImZpbSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiZoBzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJm9nMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsImxhdSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywic3VuIikKIAotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFugGFyIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnKAYXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFu+mFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnL6YXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFycyIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcHJpbCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYYAiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiaoBugCIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJqgGyAIikKLUxPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIoBnc3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWHtIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImr6bu0iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiavps7SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCLhZ/pzdCIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJzZXB0ZW1iZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIm9rdIBiZXIiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3TzYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJu83ZlbWJlciIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVzZW1iZXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCiAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsImphbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJmZWIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywibeRyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWGAIikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImqAbiIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJqgGwiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwigGeAIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1h7SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJq+m4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiavpsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIuFn+iIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiboB2IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJu83YiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlcyIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIApkaWZmIC0tZ2l0IGEvb2xlL25scy9pdGEubmxzIGIvb2xlL25scy9pdGEubmxzCmluZGV4IDI4MmE4NTcuLmM4NzhiZTMgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvaXRhLm5scworKysgYi9vbGUvbmxzL2l0YS5ubHMKQEAgLTE1LDcgKzE1LDcgQEAKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJJdGFsaWEiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzOSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKQEAgLTU1LDExICs1NSwxMSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJMdW5lZGknIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJNYXJ0ZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiTWVyY29sZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiR2lvdmVkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlZlbmVyZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJMdW5lZOwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIk1hcnRlZOwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIk1lcmNvbGVk7CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiR2lvdmVk7CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiVmVuZXJk7CIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU2FiYXRvIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJEb21lbmljYSIpCiAKZGlmZiAtLWdpdCBhL29sZS9ubHMvaXRzLm5scyBiL29sZS9ubHMvaXRzLm5scwppbmRleCA4YzRiM2ZiLi43NjRkY2ZkIDEwMDY0NAotLS0gYS9vbGUvbmxzL2l0cy5ubHMKKysrIGIvb2xlL25scy9pdHMubmxzCkBAIC0xNSw3ICsxNSw3IEBACiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiU3ZpenplcmEiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI5IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0MSIpCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpIC8qCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKQEAgLTU1LDExICs1NSwxMSBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lZGknIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXJ0ZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWVyY29sZWRpJyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiZ2lvdmVkaSciKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInZlbmVyZGknIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCJsdW5lZOwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcnRlZOwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIm1lcmNvbGVk7CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiZ2lvdmVk7CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmVuZXJk7CIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwic2FiYXRvIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkb21lbmljYSIpCiAKZGlmZiAtLWdpdCBhL29sZS9ubHMvanBuLm5scyBiL29sZS9ubHMvanBuLm5scwppbmRleCA5NDFjZjgxLi4wMjI2ODA4IDEwMDY0NAotLS0gYS9vbGUvbmxzL2pwbi5ubHMKKysrIGIvb2xlL25scy9qcG4ubmxzCkBAIC0xLDIwICsxLDIxIEBACiAvKgogICoJT0xFMk5MUyBsaWJyYXJ5CiAgKiAgICAgIEphcGFuZXNlCisgKgkoSmFwYW5lc2Ugc3RyaW5ncyBpbiBFVUMtSlApCiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCLG/MvcuOwiKQogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkphcGFuZXNlIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJqcG4iKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCLG/MvcuOwiKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiODEiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwixvzL3CIpCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJKYXBhbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiSlBOIikKLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIsb8y9wiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiODEiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCkBAIC0yNiw3ICsyNyw3IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lMWkVSTywiMSIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdOVU1CRVIpICovCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQotLyogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIiIpICovCitMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwisd8iKQogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwgIkpQWSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KQEAgLTM3LDggKzM4LDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR0NVUlIsIjgiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TREFURSwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NUSU1FLCI6IikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU1NIT1JUREFURSwiZGQvTU0teXl5eSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMT05HREFURSwiZGRkLCBkLiBNTU1NIHl5eXkiKSAqLworTE9DVkFMKExPQ0FMRV9TU0hPUlREQVRFLCJ5eXl5Lk1NLmRkIikKK0xPQ1ZBTChMT0NBTEVfU0xPTkdEQVRFLCJ5eXl5x69NTU1NZC7G/KTOZGRkIikKIC8qIExPQ1ZBTChMT0NBTEVfU1RJTUVGT1JNQVQpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lEQVRFLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUxEQVRFKSAqLwpAQCAtNTUsNDggKzU2LDQ4IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwit+7Ny8b8IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCKy0M3LxvwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIr/lzcvG/CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwizNrNy8b8IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCK24s3LxvwiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIsXazcvG/CIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywixvzNy8b8IikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwit+4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIrLQIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCK/5SIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwizNoiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIrbiIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCLF2iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywixvwiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCKw7LfuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIsbzt+4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiu7C37iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCK7zbfuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIrjet+4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiz7u37iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCK8t7fuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIsist+4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwituW37iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwivb237iIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwivb2w7LfuIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCK9vcbzt+4iKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIjG37iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIyt+4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiM7fuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIjS37iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCI1t+4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiNrfuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIje37iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCI4t+4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiObfuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIxMLfuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIxMbfuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIxMrfuIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9sdGgubmxzIGIvb2xlL25scy9sdGgubmxzCmluZGV4IDA1MWMxNDEuLmFhZjVhZWIgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbHRoLm5scworKysgYi9vbGUvbmxzL2x0aC5ubHMKQEAgLTEsMTYgKzEsMTcgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKICAqICAgICAgTGl0aHVhbmlhbgorICoJKExpdGh1YW5pYW4gc3RyaW5ncyBpbiBCQUxUSUMgY2hhcnNldCkKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiTGl0aHVhbmlhbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibHRoIikKIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiTGl0aHVhbmlhIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCkBAIC0yNiwxMCArMjcsMTAgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLworTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkx0IikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkxUTCIpCitMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ1VSUkRJR0lUUywiMiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUykgKi8KQEAgLTU1LDQ4ICs1Niw0OCBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBpcm1hZGllbmlzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJBbnRyYWRpZW5pcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiVHJl52lhZGllbmlzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCJLZXR2aXJ0YWRpZW5pcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwiUGVua3RhZGllbmlzIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCLZZfl0YWRpZW5pcyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiU2VrbWFkaWVuaXMiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJQciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiQW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIlRyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCJLdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiUG4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsItl0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCJTayIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsInNhdXNpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJ2YXNhcmlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsImtvdm8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYmFsYW5k6mlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsImdlZ3Xq4XMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiYmly6mVsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywibGllcG9zIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsInJ1Z3Bq++dpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJydWdz6WlvIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJzcGFsaW8iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsImxhcGtyaedpbyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZ3J1b2TqaW8iKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIlNhdSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCJWYXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiS292IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIkJhbCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCJHZWciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiQmlyIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIkxpZSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCJSZ3AiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiUmdzIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCJTcGEiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIkxhcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiR3JkIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9sdmkubmxzIGIvb2xlL25scy9sdmkubmxzCmluZGV4IDY3ODYzYzcuLjNhMGExYjYgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbHZpLm5scworKysgYi9vbGUvbmxzL2x2aS5ubHMKQEAgLTEsMTYgKzEsMTcgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKICAqICAgICAgTGF0dmlhCisgKgkoTGF0dmlhbiBzdHJpbmdzIGluIEJBTFRJQyBjaGFyc2V0KQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJMYXR2aWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJsdmkiKQogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJMYXR2aWEiKQogLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KQEAgLTI2LDggKzI3LDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMcyIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJMVkwiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KQEAgLTU1LDQ4ICs1Niw0OCBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsInBpcm1kaWVuYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwib3RyZGllbmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsInRyZflkaWVuYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiY2V0dXJ0ZGllbmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsInBpZWt0ZGllbmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInNlc3RkaWVuYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic3bsdGRpZW5hIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUCAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIk8gIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJUICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiQyAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlAgIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiU3YiKQogCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW524nJpcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCJmZWJydeJyaXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFydHMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXBy7mxpcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCJtYWlqcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCJq+2xpanMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiavtuaWpzIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsImF1Z3VzdHMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGVtYnJpcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwib2t0b2JyaXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIm5vdmVtYnJpcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVjZW1icmlzIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJqYW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwiZmViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIm1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJhcHIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwibWFpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsImr7biIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJq+2wiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiYXVnIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksInNlcCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwib2t0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJub3YiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsImRlYyIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvbmxiLm5scyBiL29sZS9ubHMvbmxiLm5scwppbmRleCBmOTk4MDU5Li4xMGY5MzkzIDEwMDY0NAotLS0gYS9vbGUvbmxzL25sYi5ubHMKKysrIGIvb2xlL25scy9ubGIubmxzCkBAIC00LDE4ICs0LDE4IEBACiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJOZWRlcmxhbmRzIikKIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJEdXRjaCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibmxiIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJOZWRlcmxhbmRzIikKLS8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiMzIiKQorTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiQmVsZ2nrIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkJlbGdpdW0iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkJFTCIpCi0vKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiQmVsZ2kiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIkJlbGdp6yIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIzMiIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC0yOCw4ICsyOCw4IEBACiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVESUdJVFMsIjAxMjM0NTY3ODkiKQogTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksIkJGIikKIExPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIkJFRiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KK0xPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKQogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lDVVJSRElHSVRTLCIyIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUlOVExDVVJSRElHSVRTKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy9ubGQubmxzIGIvb2xlL25scy9ubGQubmxzCmluZGV4IGE3MDFkZjMuLjEwOWM2NDUgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbmxkLm5scworKysgYi9vbGUvbmxzL25sZC5ubHMKQEAgLTQsMTggKzQsMTggQEAKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIk5lZGVybGFuZHMiKQogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIkR1dGNoIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJubGQiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIk5lZGVybGFuZHMiKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIzMSIpCitMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJOZWRlcmxhbmQiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiTmV0aGVybGFuZHMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIk5MRCIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiTmVkZXJsYW5kIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjMxIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvbmxzLm5scyBiL29sZS9ubHMvbmxzLm5scwppbmRleCBiYmQ1NmNkLi42ZGE3Yjg3IDEwMDY0NAotLS0gYS9vbGUvbmxzL25scy5ubHMKKysrIGIvb2xlL25scy9ubHMubmxzCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQotICogICAgICBEdXRjaAorICogICAgICBEdXRjaCAoU3VyaW5hbSA/KQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwpAQCAtMTUsNyArMTUsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTUVBU1VSRSwiIikgKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvbm9uLm5scyBiL29sZS9ubHMvbm9uLm5scwppbmRleCBjNmFiOTE1Li44YjQxZDY0IDEwMDY0NAotLS0gYS9vbGUvbmxzL25vbi5ubHMKKysrIGIvb2xlL25scy9ub24ubmxzCkBAIC04LDE0ICs4LDE0IEBACiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiTm9yd2VnaWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJub24iKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIm55bm9yc2siKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NyIpCisvIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJOb3J3YXkiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIk5PUiIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiTm9yZWciKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDciKQorTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFLCI4NTAiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0xJU1QsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIiKSAqLwpAQCAtMjYsOCArMjYsOCBAQAogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJrciIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJOT0siKSAqLworTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksImtyIikKK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIk5PSyIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikgKi8KIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HLCIzOzAiKQpkaWZmIC0tZ2l0IGEvb2xlL25scy9ub3IubmxzIGIvb2xlL25scy9ub3IubmxzCmluZGV4IDI3MjdhZTYuLjQ5MjU2NDggMTAwNjQ0Ci0tLSBhL29sZS9ubHMvbm9yLm5scworKysgYi9vbGUvbmxzL25vci5ubHMKQEAgLTEsMjEgKzEsMjIgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKLSAqICAgICAgTm9yd2F5IChCb2ttP2wpCisgKiAgICAgIE5vcndheSAoQm9rbWFlbCkKKyAqCShOb3J3ZWdpYW4gc3RyaW5ncyBpbiBpc28tODg1OS0xKQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIk5vcndlZ2lhbiAoQm9rbT9sKSIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiTm9yd2VnaWFuIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJOb3JzayAoQm9rbeZsKSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiTm9yd2VnaWFuIChCb2ttYWVsKSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwibm9yIikKLUxPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCJib2ttP2wiKQotLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiYm9rbeZsIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIjQ3IikKK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIk5vcmdlIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIk5vcndheSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiTk9SIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCJOb3JnZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0NyIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg1MCIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCkBAIC02MCwxNiArNjEsMTYgQEAKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJvbnNkYWciKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsInRvcnNkYWciKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsImZyZWRhZyIpCi1MT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwibD9yZGFnIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJzP25kYWciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsImz4cmRhZyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywic/huZGFnIikKIAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIm1hIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJ0aSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywib24iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsInRvIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJmciIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwibD8iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsInM/IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJs+CIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywic/giKQogCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJqYW51YXIiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhciIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL3Bsay5ubHMgYi9vbGUvbmxzL3Bsay5ubHMKaW5kZXggNWQ4NjE4NC4uOWNlNmYyOCAxMDA2NDQKLS0tIGEvb2xlL25scy9wbGsubmxzCisrKyBiL29sZS9ubHMvcGxrLm5scwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKICAqICAgICAgUG9sYW5kCisgKgkoUG9saXNoIHN0cmluZ3MgaW4gaXNvLTg4NTktMikKICAqLwogICAgICAgICAKIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikKQEAgLTI3LDcgKzI4LDcgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUywiMDEyMzQ1Njc4OSIpCiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwielx4QjMiKQotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIlBMWiIpCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVApICovCiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORywiMzswIikKQEAgLTU3LDkgKzU4LDkgQEAKIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBvbmllZHppYVwyNjNlayIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiV3RvcmVrIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJTcm9kYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywipnJvZGEiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIkN6d2FydGVrIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJQaVx4Qjl0ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIlBpsXRlayIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiU29ib3RhIikKIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJOaWVkemllbGEiKQogCkBAIC04MCw3ICs4MSw3IEBACiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJMaXBpZWMiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiU2llcnBpZVx4RjEiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiV3J6ZXNpZVx4RjEiKQotTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIlBhXDIzN2R6aWVybmlrIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJQYbxkemllcm5payIpCiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiTGlzdGFwYWQiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkdydWR6aWVceEYxIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKQpAQCAtOTQsNyArOTUsNyBAQAogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiTGlwIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIlNpZSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJXcnoiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIlBhXHg5RiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiUGG8IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJMaXMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkdydSIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvcHRiLm5scyBiL29sZS9ubHMvcHRiLm5scwppbmRleCBkOWZmYzNhLi44OTkxMTZjIDEwMDY0NAotLS0gYS9vbGUvbmxzL3B0Yi5ubHMKKysrIGIvb2xlL25scy9wdGIubmxzCkBAIC04LDEzICs4LDEzIEBACiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwgIlByb3R1Z3Vlc2UiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsICJwdGIiKQogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsICJQb3J0dWd1XDM1MnMiKQotTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwgIjEiKQorTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwgIjU1IikKIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksICJCcmFzaWwiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwgIkJyYXppbCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIkJSQSIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIkJyYXNpbCIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsICIwNDA5IikKLUxPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMSIpCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwgIjU1IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjg1MCIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCiBMT0NWQUwoTE9DQUxFX1NMSVNULCAiOyIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL3B0Zy5ubHMgYi9vbGUvbmxzL3B0Zy5ubHMKaW5kZXggOWRmZDZjOC4uOThmYTJlMiAxMDA2NDQKLS0tIGEvb2xlL25scy9wdGcubmxzCisrKyBiL29sZS9ubHMvcHRnLm5scwpAQCAtOCwxMyArOCwxMyBAQAogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsICJQcm90dWd1ZXNlIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCAicHRnIikKIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCAiUG9ydHVndVwzNTJzIikKLUxPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIxIikKK0xPQ1ZBTChMT0NBTEVfSUNPVU5UUlksICIzNTEiKQogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwgIlBvcnR1Z2FsIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksICJQb3J0dWdhbCIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwgIlBURyIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwgIlBvcnR1Z2FsIikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwgIjA0MDkiKQotTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksICIxIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCAiMzUxIikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwgIjg1MCIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFLCAiMTI1MiIpCiBMT0NWQUwoTE9DQUxFX1NMSVNULCAiOyIpCmRpZmYgLS1naXQgYS9vbGUvbmxzL3JvbS5ubHMgYi9vbGUvbmxzL3JvbS5ubHMKaW5kZXggODVjMTNhNy4uYTg1ZDJjYiAxMDA2NDQKLS0tIGEvb2xlL25scy9yb20ubmxzCisrKyBiL29sZS9ubHMvcm9tLm5scwpAQCAtMSwyMCArMSwyMSBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBSb21hbmlhCisgKgkoUm9tYW5pYW4gc3RyaW5ncyBpbiBpc28tODg1OS0yKQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiUm9tYW5pYW4iKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlJvbWFuaWFuIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJyb20iKQogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiNDAiKQogLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlJvbWFuaWEiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIlJPTSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIjQwIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMSVNULCIiKSAqLwpAQCAtMjcsNyArMjgsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJMRUkiKQotTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiUk9MKQorTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCwiUk9MIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkRFQ0lNQUxTRVAsIiwiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAsIi4iKSAqLwogTE9DVkFMKExPQ0FMRV9TTU9OR1JPVVBJTkcsIjM7MCIpCkBAIC01NiwyNSArNTcsMjUgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUV0VFS09GWUVBUikgKi8KIAogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsImx1bmkiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIm1hcmNpIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCJtYXL+aSIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywibWllcmN1cmkiKQogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsImpvaSIpCiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwidmluZXJpIikKLUxPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJzP21iP3QiKQotTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsImR1bWluaWM/IikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJz7m1i43TjIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCJkdW1pbmlj4yIpCiAKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCJMPyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiTCAiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIk1hIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJNaSIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiSj8iKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIlY/IikKLUxPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJTPyIpCi1MT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiRD8iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIkogIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJWICIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiUyAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIkQgIikKIAogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiaWFudWFyaWUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwiZmVicnVhcmllIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIm1hcnRpZSIpCi1MT0NWQUwoTE9DQUxFX1NNT05USE5BTUU0LCJhcnBpbGllIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsImFwcmlsaWUiKQogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFpIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsIml1bmllIikKIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIml1bGllIikKZGlmZiAtLWdpdCBhL29sZS9ubHMvcnVzLm5scyBiL29sZS9ubHMvcnVzLm5scwppbmRleCA2M2ZiNjg1Li5kNWMyZjYzIDEwMDY0NAotLS0gYS9vbGUvbmxzL3J1cy5ubHMKKysrIGIvb2xlL25scy9ydXMubmxzCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBSdXNzaWEKKyAqCShydXNzaWFuIHN0cmluZ3MgaW4ga29pOC1yKQogICovCiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwpAQCAtOSwxMCArMTAsMTAgQEAKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJydXMiKQogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIvLP09PJytEiKQogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiUnVzc2lhIikKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiUlVTIikKK0xPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCLyz9PTycrRIikKIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwpAQCAtMjYsNyArMjcsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JTFpFUk8sIjEiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCIwMTIzNDU2Nzg5IikKLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQ1VSUkVOQ1ksItLVwiIpCiBMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJSVVIiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCkBAIC01NSw1MiArNTYsNTIgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUZJUlNUREFZT0ZXRUVLKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JRklSU1RXRUVLT0ZZRUFSKSAqLwogCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTMsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCLwz87FxMXM2M7JyyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwi99TP0s7JyyIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywi89LFxMEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIv7F1NfF0sciKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIvDR1M7Jw8EiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsIvPVwsLP1MEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIvfP08vSxdPFztjFIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwi8M7EIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCL31NIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIuPSxCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwi/tTXIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCLw1M4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIvPVwiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywi99PLIikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCLxztfB0tEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMiwi5sXX0sHM0SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCLtwdLUIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIuHQ0sXM0SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCLtwcoiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwi6cDO0SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCLpwMzRIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIuHXx9XT1MEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwi88XO1NHC0tEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIu/L1NHC0tEiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIu7P0cLS0SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwi5MXLwcLS0SIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCLxztciKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwi5sXXIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIu3B0iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCLh0NIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwi7cHKIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIunAziIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCLpwMwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwi4dfHIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIvPFziIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwi78vUIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCLuz9EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIuTFyyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCkBAIC0xMDgsMyArMTA5LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvc2t5Lm5scyBiL29sZS9ubHMvc2t5Lm5scwppbmRleCBkNmY5ZDg4Li45MGY3ZTA1IDEwMDY0NAotLS0gYS9vbGUvbmxzL3NreS5ubHMKKysrIGIvb2xlL25scy9za3kubmxzCkBAIC0xLDIxICsxLDIyIEBACiAvKgogICoJT0xFMk5MUyBsaWJyYXJ5CiAgKiAgICAgIFNsb3Zha2lhCisgKgkoU2xvdmFraWFuIHN0cmluZ3MgaW4gaXNvLTg4NTktMikKICAqLwogCiAvKiBMT0NWQUwoTE9DQUxFX0lMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIiIpICovCitMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiU2xvdmVu6GluYSIpCitMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiU2xvdmFrIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJza3kiKQotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFTEFOR05BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiU2xvdmVuc2v9IGphenlrIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlNsb3ZlbnNrbyIpCitMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCJTbG92YWtpYSIpCiAvKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUNUUllOQU1FLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlNsb3ZlbnNr4SBSZXB1Ymxpa2EiKQogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCitMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UsIjg5NSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTElTVCwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU1FQVNVUkUsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL3Nsdi5ubHMgYi9vbGUvbmxzL3Nsdi5ubHMKaW5kZXggNmZjZDFjMC4uZGJhMzlkOSAxMDA2NDQKLS0tIGEvb2xlL25scy9zbHYubmxzCisrKyBiL29sZS9ubHMvc2x2Lm5scwpAQCAtMSwxNiArMSwxNyBAQAogLyoKICAqCU9MRTJOTFMgbGlicmFyeQogICogICAgICBTbG92ZW5pYQorICoJKFNsb3ZlbmlhbiBzdHJpbmdzIGluIGlzby04ODU5LTIpCiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlNsb3ZlbmlhbiIpCiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSwic2x2IikKIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRUxBTkdOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdDT1VOVFJZLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiU2xvdmVuaWEiKQogLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSwiIikgKi8KQEAgLTU1LDUyICs1Niw1MiBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsInBvbmVkZWxqZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsInRvcmVrIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUUzLCJzcmVkYSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNCwi6GV0cnRlayIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNSwicGV0ZWsiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTYsInNvYm90YSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNywibmVkZWxqYSIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsInBvbiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwidG9yIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCJzcmUiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIuhldCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwicGV0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCJzb2IiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIm5lZCIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEzLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiamFudWFyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsImZlYnJ1YXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMywibWFyZWMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiYXByaWwiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwibWFqIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTYsImp1bmkiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywianVsaSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU4LCJhdmd1c3QiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOSwic2VwdGVtYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEwLCJva3RvYmVyIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTExLCJub3ZlbWJlciIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMiwiZGVjZW1iZXIiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiamFuIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsImZlYiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCJtYXIiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiYXByIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIm1haiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCJqdW4iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywianVsIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsImF2ZyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCJzZXAiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIm9rdCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwibm92IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJkZWMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCiAKLS8qIExPQ1ZBTChMT0NBTEVfU1BPU0lUSVZFU0lHTiwgIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04sICIiKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQogLyogTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JTkVHU0lHTlBPU04sICIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMsICIiKSAqLwpAQCAtMTA4LDMgKzEwOSw0IEBACiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTWU1QUkVDRURFUywgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFLCAiIikgKi8KIAorLyogY2FsZW5kYXJpbyBncmVnb3JpYW5vICovCmRpZmYgLS1naXQgYS9vbGUvbmxzL3N2ZS5ubHMgYi9vbGUvbmxzL3N2ZS5ubHMKaW5kZXggN2UwMDUxZC4uYzA3NjczMCAxMDA2NDQKLS0tIGEvb2xlL25scy9zdmUubmxzCisrKyBiL29sZS9ubHMvc3ZlLm5scwpAQCAtMTUsOCArMTUsOCBAQAogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIlN2ZXJpZ2UiKQogTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCIxZCIpCiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiNDUiKQotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVENPREVQQUdFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSkgKi8KK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSwiODUwIikKK0xPQ1ZBTChMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UsIjEyNTIiKQogTE9DVkFMKExPQ0FMRV9TTElTVCwiOyIpCiBMT0NWQUwoTE9DQUxFX0lNRUFTVVJFLCIwIikKIExPQ1ZBTChMT0NBTEVfU0RFQ0lNQUwsIiwiKQpAQCAtMjcsNyArMjcsNyBAQAogLyogTE9DVkFMKExPQ0FMRV9JTkVHTlVNQkVSKSAqLwogTE9DVkFMKExPQ0FMRV9TTkFUSVZFRElHSVRTLCAiMDEyMzQ1Njc4OSIpCiBMT0NWQUwoTE9DQUxFX1NDVVJSRU5DWSwia3IiKQotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KK0xPQ1ZBTChMT0NBTEVfU0lOVExTWU1CT0wsIlNFSyIpCiBMT0NWQUwoTE9DQUxFX1NNT05ERUNJTUFMU0VQLCIsIikKIExPQ1ZBTChMT0NBTEVfU01PTlRIT1VTQU5EU0VQLCIuIikKIC8qIExPQ1ZBTChMT0NBTEVfU01PTkdST1VQSU5HKSAqLwpkaWZmIC0tZ2l0IGEvb2xlL25scy90cmsubmxzIGIvb2xlL25scy90cmsubmxzCmluZGV4IGQ5MDQ2MmIuLmMxY2VjZWQgMTAwNjQ0Ci0tLSBhL29sZS9ubHMvdHJrLm5scworKysgYi9vbGUvbmxzL3Ryay5ubHMKQEAgLTEsMTggKzEsMTkgQEAKIC8qCiAgKglPTEUyTkxTIGxpYnJhcnkKICAqICAgICAgVHVya2V5CisgKgkoVHVya2lzaCBzdHJpbmdzIGluIGlzby04ODU5LTkpCiAgKi8KIAogLyogTE9DVkFMKExPQ0FMRV9JTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NMQU5HVUFHRSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCIiKSAqLworTE9DVkFMKExPQ0FMRV9TRU5HTEFOR1VBR0UsIlR1cmtpc2giKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInRyayIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0NPVU5UUlksIlT8cmtpeWUiKQorTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiVHVya2V5IikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCitMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiVPxya2l5ZSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09VTlRSWSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSkgKi8KQEAgLTI2LDggKzI3LDggQEAKIC8qIExPQ1ZBTChMT0NBTEVfSUxaRVJPLCIxIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR05VTUJFUikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfU05BVElWRURJR0lUUykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TSU5UTFNZTUJPTCkgKi8KK0xPQ1ZBTChMT0NBTEVfU0NVUlJFTkNZLCJUTCIpCitMT0NWQUwoTE9DQUxFX1NJTlRMU1lNQk9MLCJUUkwiKQogLyogTE9DVkFMKExPQ0FMRV9TTU9OREVDSU1BTFNFUCwiLCIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05USE9VU0FORFNFUCwiLiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NNT05HUk9VUElORykgKi8KQEAgLTU1LDUyICs1Niw1MiBAQAogLyogTE9DVkFMKExPQ0FMRV9JRklSU1REQVlPRldFRUspICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIpICovCiAKLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUUxLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU0LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TREFZTkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NEQVlOQU1FNiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0RBWU5BTUU3LCIiKSAqLworTE9DVkFMKExPQ0FMRV9TREFZTkFNRTEsIlBhemFydGVzaSIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMiwiU2Fs/SIpCitMT0NWQUwoTE9DQUxFX1NEQVlOQU1FMywix2Fy/mFtYmEiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTQsIlBlcv5lbWJlIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU1LCJDdW1hIikKK0xPQ1ZBTChMT0NBTEVfU0RBWU5BTUU2LCJDdW1hcnRlc2kiKQorTE9DVkFMKExPQ0FMRV9TREFZTkFNRTcsIlBhemFyIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTEsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTQsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTcsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSwiUHp0IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUUyLCJTYWwiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTMsIsdy/iIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCwiUHL+IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkRBWU5BTUU1LCJDdW0iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWREFZTkFNRTYsIkN0cyIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZEQVlOQU1FNywiUGF6IikKIAotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxLCJPY2FrIikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTIsIt51YmF0IikKK0xPQ1ZBTChMT0NBTEVfU01PTlRITkFNRTMsIk1hcnQiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNCwiTmlzYW4iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNSwiTWF5/XMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FNiwiSGF6aXJhbiIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU3LCJUZW1tdXMiKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FOCwiQfB1c3RvcyIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUU5LCJFeWz8bCIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMCwiRWtpbSIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMSwiS2Fz/W0iKQorTE9DVkFMKExPQ0FMRV9TTU9OVEhOQU1FMTIsIkFyYWz9ayIpCitMT0NWQUwoTE9DQUxFX1NNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNywiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTgsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5LCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpICovCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxLCJPY2EiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiwi3nViIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMsIk1hciIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0LCJOaXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSwiTWF5IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYsIkhheiIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3LCJUZW0iKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCwiQfB1IikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTksIkV5bCIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCwiRWtpIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExLCJLYXMiKQorTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIsIkFyYSIpCitMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMywiIikKIAotLyogTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIiIpICovCitMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04sICIiKQorTE9DVkFMKExPQ0FMRV9TTkVHQVRJVkVTSUdOLCAiLSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lORUdTSUdOUE9TTiwgIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIiIpICovCkBAIC0xMDgsMyArMTA5LDQgQEAKIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NZTVBSRUNFREVTLCAiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIiKSAqLwogCisvKiBjYWxlbmRhcmlvIGdyZWdvcmlhbm8gKi8KZGlmZiAtLWdpdCBhL29sZS9ubHMvdWtyLm5scyBiL29sZS9ubHMvdWtyLm5scwppbmRleCBiMWU4YjQyLi5kMmMyN2YzIDEwMDY0NAotLS0gYS9vbGUvbmxzL3Vrci5ubHMKKysrIGIvb2xlL25scy91a3IubmxzCkBAIC01LDEyICs1LDEyIEBACiAKIC8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTEFOR1VBR0UsIiIpICovCi0vKiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0xBTkdVQUdFLCJVa3JhaW5pYW4iKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTEFOR05BTUUsInVrciIpCiAvKiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSwiIikgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSUNPVU5UUlksIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCIiKSAqLwotLyogTE9DVkFMKExPQ0FMRV9TRU5HQ09VTlRSWSwiIikgKi8KK0xPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIlVrcmFpbmlhIikKIC8qIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCIiKSAqLwogLyogTE9DVkFMKExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUsIiIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIiIpICovCmRpZmYgLS1naXQgYS9vbGUvb2xlMmRpc3AuYyBiL29sZS9vbGUyZGlzcC5jCmluZGV4IDE2OWYzMGMuLjU5NDhmOGEgMTAwNjQ0Ci0tLSBhL29sZS9vbGUyZGlzcC5jCisrKyBiL29sZS9vbGUyZGlzcC5jCkBAIC0xMjAsNyArMTIwLDExIEBACiAJcmV0dXJuIHN0cmxlbihCU1RSX0dldEFkZHIoc3RyKSk7CiB9CiAKLU9MRVNUQVRVUyBXSU5BUEkgQ3JlYXRlRGlzcFR5cGVJbmZvKElOVEVSRkFDRURBVEEgKiBwaWRhdGEsTENJRCBsY2lkLExQVk9JRC8qSVR5cGVJbmZvKi8gKiAqIHBwdGluZm8pIHsKK09MRVNUQVRVUyBXSU5BUEkgQ3JlYXRlRGlzcFR5cGVJbmZvKAorCUlOVEVSRkFDRURBVEEgKnBpZGF0YSwKKwlMQ0lEIGxjaWQsCisJTFBWT0lEICoqcHB0aW5mbyAvKklUeXBlSW5mbyovIAorKSB7CiAJRklYTUUob2xlLCIoJXAsJWxkLCVwKSxzdHViXG4iLHBpZGF0YSxsY2lkLHBwdGluZm8pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvb2xlL29sZTJubHMuYyBiL29sZS9vbGUybmxzLmMKaW5kZXggYmY0YjczMi4uN2QxOGU5OSAxMDA2NDQKLS0tIGEvb2xlL29sZTJubHMuYworKysgYi9vbGUvb2xlMm5scy5jCkBAIC0xMjIyLDM0ICsxMjIyLDYgQEAKIAlyZXR1cm4gbGFuZ25hbWVsZW47CiB9CiAgCi1zdGF0aWMgaW50IGlzX3B1bmN0dWF0aW9uKHVuc2lnbmVkIGNoYXIgYykgCi17Ci0gIC8qIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgYXJlIDoKLSAgICAgMS04LCAxNC0zMSwgMzksIDQ1LCAxMjctMTI5LCAxNDEtMTQ0LCAxNTAtMTUxLCAxNTctMTU4LCAxNzMgCi0KLSAgICAgInB1bmN0dWF0aW9uIGNoYXJhY3RlciIgaW4gdGhpcyBjb250ZXh0IGlzIGEgY2hhcmFjdGVyIHdoaWNoIGlzIAotICAgICBjb25zaWRlcmVkICJsZXNzIGltcG9ydGFudCIgZHVyaW5nIHdvcmQgc29ydCBjb21wYXJpc29uLgotICAgICBTZWUgTENNYXBTdHJpbmcgZm9yIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YgImxlc3MgaW1wb3J0YW50Ii4gKi8KLSAgaWYgKGM+PTE0MSkKLSAgewotICAgIGlmIChjPD0xNTEpCi0gICAgICByZXR1cm4gKGM8PTE0NCkgfHwgKGM+PTE1MCk7Ci0gICAgaWYgKGM8PTE1OCkKLSAgICAgIHJldHVybiAoYz49MTU3KTsKLSAgICByZXR1cm4gKGM9PTE3Myk7Ci0gIH0KLSAgaWYgKGM+PTEyNykKLSAgICByZXR1cm4gKGM8PTEyOSk7Ci0gIGlmIChjPj0xNCkKLSAgICByZXR1cm4gKGM8PTMxKSB8fCAoYz09MzkpIHx8IChjPT00NSk7Ci0gIHJldHVybiAoYzw9OCk7Ci19Ci0KLXN0YXRpYyBpbnQgaWRlbnRpdHkoaW50IGMpCi17Ci0gIHJldHVybiBjOwotfQotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBMQ01fVW5pY29kZV9MVVRbXSA9IHsKICAgNiAgICAgICwgICAzLCAvKiAgIC0gICAxICovICAKICAgNiAgICAgICwgICA0LCAvKiAgIC0gICAyICovICAKQEAgLTE2MzksNyArMTYxMSwyNCBAQAogIDE5LCAgLyog/yAtIDI1NSAqLwogfSA7CiAKK3N0YXRpYyBpbnQgaXNfcHVuY3R1YXRpb24odW5zaWduZWQgY2hhciBjKSAKK3sKKyAgLyogInB1bmN0dWF0aW9uIGNoYXJhY3RlciIgaW4gdGhpcyBjb250ZXh0IGlzIGEgY2hhcmFjdGVyIHdoaWNoIGlzIAorICAgICBjb25zaWRlcmVkICJsZXNzIGltcG9ydGFudCIgZHVyaW5nIHdvcmQgc29ydCBjb21wYXJpc29uLgorICAgICBTZWUgTENNYXBTdHJpbmcgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gCisgICAgIG9mICJsZXNzIGltcG9ydGFudCIuICovCisKKyAgcmV0dXJuIChMQ01fVW5pY29kZV9MVVRbLTIrMipjXT09Nik7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRpdHkoaW50IGMpCit7CisgIHJldHVybiBjOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgIExDTWFwU3RyaW5nMzJBICAgICAgICAgICAgICAgIFtLRVJORUwzMi40OTJdCisgKgogICogQ29udmVydCBhIHN0cmluZywgb3IgZ2VuZXJhdGUgYSBzb3J0IGtleSBmcm9tIGl0LgogICoKICAqIElmIChtYXBmbGFncyAmIExDTUFQX1NPUlRLRVkpLCB0aGUgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZQpkaWZmIC0tZ2l0IGEvcmVsYXkzMi9NYWtlZmlsZS5pbiBiL3JlbGF5MzIvTWFrZWZpbGUuaW4KaW5kZXggYThhYTU1Yi4uMGNlNGU0OSAxMDA2NDQKLS0tIGEvcmVsYXkzMi9NYWtlZmlsZS5pbgorKysgYi9yZWxheTMyL01ha2VmaWxlLmluCkBAIC0yNiw2ICsyNiw3IEBACiAJb2xlYXV0MzIuc3BlYyBcCiAJb2xlY2xpMzIuc3BlYyBcCiAJb2xlc3ZyMzIuc3BlYyBcCisJcmFzYXBpMzIuc3BlYyBcCiAJc2hlbGwzMi5zcGVjIFwKIAl0YXBpMzIuc3BlYyBcCiAJdXNlcjMyLnNwZWMgXApkaWZmIC0tZ2l0IGEvcmVsYXkzMi9hZHZhcGkzMi5zcGVjIGIvcmVsYXkzMi9hZHZhcGkzMi5zcGVjCmluZGV4IDJjOTU5MDIuLmNhMmNmM2MgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvYWR2YXBpMzIuc3BlYworKysgYi9yZWxheTMyL2FkdmFwaTMyLnNwZWMKQEAgLTE4Myw4ICsxODMsOCBAQAogMDE3OSBzdHViIFJlcG9ydEV2ZW50VwogMDE4MCBzdHViIFJldmVydFRvU2VsZgogMDE4MSBzdHViIFNldEFjbEluZm9ybWF0aW9uCi0wMTgyIHN0dWIgU2V0RmlsZVNlY3VyaXR5QQotMDE4MyBzdHViIFNldEZpbGVTZWN1cml0eVcKKzAxODIgc3RkY2FsbCBTZXRGaWxlU2VjdXJpdHlBKHN0ciBsb25nIHB0ciApIFNldEZpbGVTZWN1cml0eTMyQQorMDE4MyBzdGRjYWxsIFNldEZpbGVTZWN1cml0eVcod3N0ciBsb25nIHB0cikgU2V0RmlsZVNlY3VyaXR5MzJXCiAwMTg0IHN0dWIgU2V0S2VybmVsT2JqZWN0U2VjdXJpdHkKIDAxODUgc3R1YiBTZXRQcml2YXRlT2JqZWN0U2VjdXJpdHkKIDAxODYgc3RkY2FsbCBTZXRTZWN1cml0eURlc2NyaXB0b3JEYWNsKHB0ciBsb25nIHB0ciBsb25nKSBSdGxTZXREYWNsU2VjdXJpdHlEZXNjcmlwdG9yCmRpZmYgLS1naXQgYS9yZWxheTMyL2J1aWx0aW4zMi5jIGIvcmVsYXkzMi9idWlsdGluMzIuYwppbmRleCBhZmFjOTkzLi5lNWY5Njk1IDEwMDY0NAotLS0gYS9yZWxheTMyL2J1aWx0aW4zMi5jCisrKyBiL3JlbGF5MzIvYnVpbHRpbjMyLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIGV4dGVybiBjb25zdCBCVUlMVElOMzJfREVTQ1JJUFRPUiBPTEVBVVQzMl9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IEJVSUxUSU4zMl9ERVNDUklQVE9SIE9MRUNMSTMyX0Rlc2NyaXB0b3I7CiBleHRlcm4gY29uc3QgQlVJTFRJTjMyX0RFU0NSSVBUT1IgT0xFU1ZSMzJfRGVzY3JpcHRvcjsKK2V4dGVybiBjb25zdCBCVUlMVElOMzJfREVTQ1JJUFRPUiBSQVNBUEkzMl9EZXNjcmlwdG9yOwogZXh0ZXJuIGNvbnN0IEJVSUxUSU4zMl9ERVNDUklQVE9SIFNIRUxMMzJfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBCVUlMVElOMzJfREVTQ1JJUFRPUiBUQVBJMzJfRGVzY3JpcHRvcjsKIGV4dGVybiBjb25zdCBCVUlMVElOMzJfREVTQ1JJUFRPUiBVU0VSMzJfRGVzY3JpcHRvcjsKQEAgLTgxLDYgKzgyLDcgQEAKICAgICB7ICZPTEVBVVQzMl9EZXNjcmlwdG9yLCBGQUxTRSB9LAogICAgIHsgJk9MRUNMSTMyX0Rlc2NyaXB0b3IsIEZBTFNFIH0sCiAgICAgeyAmT0xFU1ZSMzJfRGVzY3JpcHRvciwgRkFMU0UgfSwKKyAgICB7ICZSQVNBUEkzMl9EZXNjcmlwdG9yLCBGQUxTRSB9LAogICAgIHsgJlNIRUxMMzJfRGVzY3JpcHRvciwgIFRSVUUgIH0sCiAgICAgeyAmVEFQSTMyX0Rlc2NyaXB0b3IsICAgRkFMU0UgfSwKICAgICB7ICZVU0VSMzJfRGVzY3JpcHRvciwgICBUUlVFICB9LApkaWZmIC0tZ2l0IGEvcmVsYXkzMi9jb21jdGwzMi5zcGVjIGIvcmVsYXkzMi9jb21jdGwzMi5zcGVjCmluZGV4IDY3ZmU2MTcuLjg3ZTQ0MzkgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvY29tY3RsMzIuc3BlYworKysgYi9yZWxheTMyL2NvbWN0bDMyLnNwZWMKQEAgLTEwOCw3ICsxMDgsNyBAQAogMTY5IHN0dWIgRmluZE1SVURhdGEKIAogMjMzIHN0dWIgU3RyX0dldFB0ckEKLTIzNCBzdHViIFN0cl9TZXRQdHJBCisyMzQgc3RkY2FsbCBTdHJfU2V0UHRyQShsb25nIGxvbmcpIENPTUNUTDMyX1N0cl9TZXRQdHJBCiAyMzUgc3R1YiBTdHJfR2V0UHRyVwogMjM2IHN0dWIgU3RyX1NldFB0clcKIApkaWZmIC0tZ2l0IGEvcmVsYXkzMi9jb21kbGczMi5zcGVjIGIvcmVsYXkzMi9jb21kbGczMi5zcGVjCmluZGV4IGM5MDA2Y2UuLjUyMGI3Y2MgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvY29tZGxnMzIuc3BlYworKysgYi9yZWxheTMyL2NvbWRsZzMyLnNwZWMKQEAgLTE0LDcgKzE0LDcgQEAKIDEwIHN0ZGNhbGwgR2V0T3BlbkZpbGVOYW1lQShwdHIpIEdldE9wZW5GaWxlTmFtZTMyQQogMTEgc3RkY2FsbCBHZXRPcGVuRmlsZU5hbWVXKHB0cikgR2V0T3BlbkZpbGVOYW1lMzJXCiAxMiBzdGRjYWxsIEdldFNhdmVGaWxlTmFtZUEocHRyKSBHZXRTYXZlRmlsZU5hbWUzMkEKLTEzIHN0ZGNhbGwgR2V0U2F2ZUZpbGVOYW1lVyhwdHIpIEdldFNhdmVGaWxlTmFtZTMyQQorMTMgc3RkY2FsbCBHZXRTYXZlRmlsZU5hbWVXKHB0cikgR2V0U2F2ZUZpbGVOYW1lMzJXCiAxNCBzdHViIExvYWRBbHRlckJpdG1hcAogMTUgc3RkY2FsbCBQYWdlU2V0dXBEbGdBKHB0cikgUGFnZVNldHVwRGxnMzJBCiAxNiBzdHViIFBhZ2VTZXR1cERsZ1cKZGlmZiAtLWdpdCBhL3JlbGF5MzIvb2xlMzIuc3BlYyBiL3JlbGF5MzIvb2xlMzIuc3BlYwppbmRleCBjYmJmODMyLi5iYjYxOTdjIDEwMDY0NAotLS0gYS9yZWxheTMyL29sZTMyLnNwZWMKKysrIGIvcmVsYXkzMi9vbGUzMi5zcGVjCkBAIC01NSw3ICs1NSw3IEBACiAgNTIgc3R1YiBDcmVhdGVCaW5kQ3R4CiAgNTMgc3R1YiBDcmVhdGVEYXRhQWR2aXNlSG9sZGVyCiAgNTQgc3R1YiBDcmVhdGVEYXRhQ2FjaGUKLSA1NSBzdHViIENyZWF0ZUZpbGVNb25pa2VyCisgNTUgc3RkY2FsbCBDcmVhdGVGaWxlTW9uaWtlcihwdHIgcHRyKSBDcmVhdGVGaWxlTW9uaWtlcjMyCiAgNTYgc3R1YiBDcmVhdGVHZW5lcmljQ29tcG9zaXRlCiAgNTcgc3R1YiBDcmVhdGVJTG9ja0J5dGVzT25IR2xvYmFsCiAgNTggc3R1YiBDcmVhdGVJdGVtTW9uaWtlcgpkaWZmIC0tZ2l0IGEvcmVsYXkzMi9yYXNhcGkzMi5zcGVjIGIvcmVsYXkzMi9yYXNhcGkzMi5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmZmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxheTMyL3Jhc2FwaTMyLnNwZWMKQEAgLTAsMCArMSw3MyBAQAorbmFtZQlyYXNhcGkzMgordHlwZQl3aW4zMgorCis1MDAgc3R1YglSbmFFbmdpbmVSZXF1ZXN0Cis1MDEgc3R1YglEaWFsRW5naW5lUmVxdWVzdAorNTAyIHN0dWIJU3VwcnZSZXF1ZXN0Cis1MDMgc3R1YglEaWFsSW5NZXNzYWdlCis1MDQgc3R1YglSbmFFbnVtQ29ubkVudHJpZXMKKzUwNSBzdHViCVJuYUdldENvbm5FbnRyeQorNTA2IHN0dWIJUm5hRnJlZUNvbm5FbnRyeQorNTA3IHN0dWIJUm5hU2F2ZUNvbm5FbnRyeQorNTA4IHN0dWIJUm5hRGVsZXRlQ29ubkVudHJ5Cis1MDkgc3R1YglSbmFSZW5hbWVDb25uRW50cnkKKzUxMCBzdHViCVJuYVZhbGlkYXRlRW50cnlOYW1lCis1MTEgc3R1YglSbmFFbnVtRGV2aWNlcworNTEyIHN0dWIJUm5hR2V0RGV2aWNlSW5mbworNTEzIHN0dWIJUm5hR2V0RGVmYXVsdERldkNvbmZpZworNTE0IHN0dWIJUm5hQnVpbGREZXZDb25maWcKKzUxNSBzdHViCVJuYURldkNvbmZpZ0RsZworNTE2IHN0dWIJUm5hRnJlZURldkNvbmZpZworNTE3IHN0dWIJUm5hQWN0aXZhdGVFbmdpbmUKKzUxOCBzdHViCVJuYURlYWN0aXZhdGVFbmdpbmUKKzUxOSBzdHViCVN1cHJ2RW51bUFjY2Vzc0luZm8KKzUyMCBzdHViCVN1cHJ2R2V0QWNjZXNzSW5mbworNTIxIHN0dWIJU3VwcnZTZXRBY2Nlc3NJbmZvCis1MjIgc3R1YglTdXBydkdldEFkbWluQ29uZmlnCis1MjMgc3R1YglTdXBydkluaXRpYWxpemUKKzUyNCBzdHViCVN1cHJ2RGVJbml0aWFsaXplCis1MjUgc3R1YglSbmFVSURpYWwKKzUyNiBzdHViCVJuYUltcGxpY2l0RGlhbAorNTI3IHN0dWIJUmFzRGlhbDE2Cis1Mjggc3R1YglSbmFTTU1JbmZvRGlhbG9nCis1Mjkgc3R1YglSbmFFbnVtZXJhdGVNYWNOYW1lcworNTMwIHN0dWIJUm5hRW51bUNvdW50cnlJbmZvCis1MzEgc3R1YglSbmFHZXRBcmVhQ29kZUxpc3QKKzUzMiBzdHViCVJuYUZpbmREcml2ZXIKKzUzMyBzdHViCVJuYUluc3RhbGxEcml2ZXIKKzUzNCBzdHViCVJuYUdldERpYWxTZXR0aW5ncworNTM1IHN0dWIJUm5hU2V0RGlhbFNldHRpbmdzCis1MzYgc3R1YglSbmFHZXRJUEluZm8KKzUzNyBzdHViCVJuYVNldElQSW5mbworNTM4IHN0dWIJUmFzQ3JlYXRlUGhvbmVib29rRW50cnlBCis1Mzkgc3R1YglSYXNDcmVhdGVQaG9uZWJvb2tFbnRyeVcKKzU0MCBzdHViCVJhc0RpYWxBCis1NDEgc3R1YglSYXNEaWFsVworNTQyIHN0dWIJUmFzRWRpdFBob25lYm9va0VudHJ5QQorNTQzIHN0dWIJUmFzRWRpdFBob25lYm9va0VudHJ5VworNTQ0IHN0dWIJUmFzRW51bUNvbm5lY3Rpb25zQQorNTQ1IHN0dWIJUmFzRW51bUNvbm5lY3Rpb25zVworNTQ2IHN0dWIJUmFzRW51bUVudHJpZXNBCis1NDcgc3R1YglSYXNFbnVtRW50cmllc1cKKzU0OCBzdHViCVJhc0dldENvbm5lY3RTdGF0dXNBCis1NDkgc3R1YglSYXNHZXRDb25uZWN0U3RhdHVzVworNTUwIHN0dWIJUmFzR2V0RW50cnlEaWFsUGFyYW1zQQorNTUxIHN0dWIJUmFzR2V0RW50cnlEaWFsUGFyYW1zVworNTUyIHN0dWIJUmFzR2V0RXJyb3JTdHJpbmdBCis1NTMgc3R1YglSYXNHZXRFcnJvclN0cmluZ1cKKzU1NCBzdHViCVJhc0dldFByb2plY3Rpb25JbmZvQQorNTU1IHN0dWIJUmFzR2V0UHJvamVjdGlvbkluZm9XCis1NTYgc3R1YglSYXNIYW5nVXBBCis1NTcgc3R1YglSYXNIYW5nVXBXCis1NTggc3R1YglSYXNTZXRFbnRyeURpYWxQYXJhbXNBCis1NTkgc3R1YglSYXNTZXRFbnRyeURpYWxQYXJhbXNXCis1NjAgc3R1YglSbmFDbG9zZU1hYworNTYxIHN0dWIJUm5hQ29tcGxldGUKKzU2MiBzdHViCVJuYUdldERldmljZVBvcnQKKzU2MyBzdHViCVJuYUdldFVzZXJQcm9maWxlCis1NjQgc3R1YglSbmFPcGVuTWFjCis1NjUgc3R1YglSbmFTZXNzSW5pdGlhbGl6ZQorNTY2IHN0dWIJUm5hU3RhcnRDYWxsYmFjaworNTY3IHN0dWIJUm5hVGVybWluYXRlCis1Njggc3R1YglSbmFVSUNhbGxiYWNrRGlhbG9nCis1Njkgc3R1YglSbmFVSVVzZXJuYW1lUGFzc3dvcmQKZGlmZiAtLWdpdCBhL3JlbGF5MzIvc2hlbGwzMi5zcGVjIGIvcmVsYXkzMi9zaGVsbDMyLnNwZWMKaW5kZXggODk0ZmYyMi4uNTI0MDYzYSAxMDA2NDQKLS0tIGEvcmVsYXkzMi9zaGVsbDMyLnNwZWMKKysrIGIvcmVsYXkzMi9zaGVsbDMyLnNwZWMKQEAgLTcsMzIgKzcsMzIgQEAKICMgVGhpcyBsaXN0IHdhcyB1cGRhdGVkIHRvIGRsbCB2ZXJzaW9uIDQuNzIKIAogICAgMiBzdGRjYWxsIFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIobG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIQ2hhbmdlTm90aWZ5UmVnaXN0ZXIKLSAgIDMgc3R1YiBDaGVja0VzY2FwZXNBICAgIyBleHBvcnRlZCBieSBuYW1lCi0gICA0IHN0dWIgU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyCi0gICA1IHN0dWIgU0hDaGFuZ2VOb3RpZnlVcGRhdGVFbnRyeUxpc3QKLSAgIDYgc3R1YiBDaGVja0VzY2FwZXNXICAgIyBleHBvcnRlZCBieSBuYW1lCisgICAzIHN0dWIgQ2hlY2tFc2NhcGVzQUA4ICAgIyBleHBvcnRlZCBieSBuYW1lCisgICA0IHN0ZGNhbGwgU0hDaGFuZ2VOb3RpZnlEZXJlZ2lzdGVyIChsb25nIGxvbmcpIFNIQ2hhbmdlTm90aWZ5RGVyZWdpc3RlcgorICAgNSBzdHViIFNIQ2hhbmdlTm90aWZ5VXBkYXRlRW50cnlMaXN0QDE2CisgICA2IHN0dWIgQ2hlY2tFc2NhcGVzV0A4ICAgIyBleHBvcnRlZCBieSBuYW1lCiAgICA3IHN0ZGNhbGwgQ29tbWFuZExpbmVUb0FyZ3ZXKHdzdHIgcHRyKSBDb21tYW5kTGluZVRvQXJndlcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKLSAgIDggc3R1YiBDb250cm9sX0ZpbGxDYWNoZV9SdW5ETEwgICAjIGV4cG9ydGVkIGJ5IG5hbWUKLSAgIDkgc3R1YiBQaWZNZ3JfT3BlblByb3BlcnRpZXMKLSAgMTAgc3R1YiBQaWZNZ3JfR2V0UHJvcGVydGllcwotICAxMSBzdHViIFBpZk1ncl9TZXRQcm9wZXJ0aWVzCisgICA4IHN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMQDE2ICAgIyBleHBvcnRlZCBieSBuYW1lCisgICA5IHN0dWIgUGlmTWdyX09wZW5Qcm9wZXJ0aWVzQDE2CisgIDEwIHN0dWIgUGlmTWdyX0dldFByb3BlcnRpZXNAMjAKKyAgMTEgc3R1YiBQaWZNZ3JfU2V0UHJvcGVydGllc0AyMAogICAxMiBzdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTEEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKLSAgMTMgc3R1YiBQaWZNZ3JfQ2xvc2VQcm9wZXJ0aWVzCi0gIDE0IHN0dWIgQ29udHJvbF9GaWxsQ2FjaGVfUnVuRExMVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQorICAxMyBzdHViIFBpZk1ncl9DbG9zZVByb3BlcnRpZXNAOAorICAxNCBzdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTFdAMTYgICAjIGV4cG9ydGVkIGJ5IG5hbWUKICAgMTUgc3RkY2FsbCBJTEdldERpc3BsYXlOYW1lKHB0ciBwdHIpIElMR2V0RGlzcGxheU5hbWUKICAgMTYgc3RkY2FsbCBJTEZpbmRMYXN0SUQocHRyKSBJTEZpbmRMYXN0SUQKLSAgMTcgc3R1YiBJTFJlbW92ZUxhc3RJRAorICAxNyBzdHViIElMUmVtb3ZlTGFzdElEQDQKICAgMTggc3RkY2FsbCBJTENsb25lKHB0cikgSUxDbG9uZQotICAxOSBzdHViIElMQ2xvbmVGaXJzdAotICAyMCBzdHViIElMR2xvYmFsQ2xvbmUKLSAgMjEgc3R1YiBJTElzRXF1YWwKKyAgMTkgc3R1YiBJTENsb25lRmlyc3RANAorICAyMCBzdHViIElMR2xvYmFsQ2xvbmVANAorICAyMSBzdHViIElMSXNFcXVhbEA4CiAgIDIyIHN0ZGNhbGwgQ29udHJvbF9SdW5ETEwobG9uZyBsb25nIGxvbmcgbG9uZykgQ29udHJvbF9SdW5ETEwgIyBleHBvcnRlZCBieSBuYW1lCi0gIDIzIHN0dWIgSUxJc1BhcmVudAotICAyNCBzdHViIElMRmluZENoaWxkCisgIDIzIHN0dWIgSUxJc1BhcmVudEAxMgorICAyNCBzdHViIElMRmluZENoaWxkQDgKICAgMjUgc3RkY2FsbCBJTENvbWJpbmUocHRyIHB0cikgSUxDb21iaW5lCi0gIDI2IHN0dWIgSUxMb2FkRnJvbVN0cmVhbQotICAyNyBzdHViIElMU2F2ZVRvU3RyZWFtCi0gIDI4IHN0dWIgU0hJTENyZWF0ZUZyb21QYXRoCisgIDI2IHN0dWIgSUxMb2FkRnJvbVN0cmVhbUA4CisgIDI3IHN0dWIgSUxTYXZlVG9TdHJlYW1AOAorICAyOCBzdHViIFNISUxDcmVhdGVGcm9tUGF0aEAxMgogICAyOSBzdGRjYWxsIFBhdGhJc1Jvb3Qoc3RyKSBQYXRoSXNSb290CiAgIDMwIHN0ZGNhbGwgUGF0aEJ1aWxkUm9vdChwdHIgbG9uZykgUGF0aEJ1aWxkUm9vdAogICAzMSBzdGRjYWxsIFBhdGhGaW5kRXh0ZW5zaW9uKHN0cikgUGF0aEZpbmRFeHRlbnNpb24KQEAgLTgyLDkgKzgyLDggQEAKICAgNzUgc3RkY2FsbCBQYXRoWWV0QW5vdGhlck1ha2VVbmlxdWVOYW1lKHB0ciBwdHIpIFBhdGhZZXRBbm90aGVyTWFrZVVuaXF1ZU5hbWUKICAgNzYgc3R1YiBEcmFnUXVlcnlJbmZvCiAgIDc3IHN0ZGNhbGwgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleChsb25nIGxvbmcgbG9uZykgU0hNYXBQSURMVG9TeXN0ZW1JbWFnZUxpc3RJbmRleAotICA3OCBzdHViIE9sZVN0clRvU3RyTkAxNgotIyAgNzkgc3R1YiBTdHJUb09sZVN0ck5AMTYKLSAgNzkgc3RkY2FsbCBTSEVMTDMyXzc5KHN0ciBwdHIpIFNIRUxMMzJfNzkKKyAgNzggc3RkY2FsbCBPbGVTdHJUb1N0ck4oc3RyIGxvbmcgd3N0ciBsb25nKSBPbGVTdHJUb1N0ck4KKyAgNzkgc3RkY2FsbCBTdHJUb09sZVN0ck4od3N0ciBsb25nIHN0ciBsb25nKSBTdHJUb09sZVN0ck4KICAgODAgc3R1YiBEcmFnRmluaXNoICAgIyBleHBvcnRlZCBieSBuYW1lCiAgIDgxIHN0dWIgRHJhZ1F1ZXJ5RmlsZSAgICMgZXhwb3J0ZWQgYnkgbmFtZQogICA4MiBzdHViIERyYWdRdWVyeUZpbGVBICAgIyBleHBvcnRlZCBieSBuYW1lCkBAIC0xNzksNyArMTc4LDcgQEAKICAxNzEgc3R1YiBQYXRoQ2xlYW51cFNwZWMKICAxNzIgc3R1YiBTSENyZWF0ZUxpbmtzCiAgMTczIHN0dWIgU0hWYWxpZGF0ZVVOQwotIDE3NCBzdHViIFNIQ3JlYXRlU2hlbGxGb2xkZXJWaWV3RXgKKyAxNzQgc3RkY2FsbCBTSENyZWF0ZVNoZWxsRm9sZGVyVmlld0V4IChwdHIgcHRyKSBTSENyZWF0ZVNoZWxsRm9sZGVyVmlld0V4MzIKICAxNzUgc3RkY2FsbCBTSEdldFNwZWNpYWxGb2xkZXJQYXRoKGxvbmcgbG9uZyBsb25nIGxvbmcpIFNIR2V0U3BlY2lhbEZvbGRlclBhdGgKICAxNzYgc3R1YiBTSFNldEluc3RhbmNlRXhwbG9yZXIKICAxNzcgc3R1YiBEQURfU2V0RHJhZ0ltYWdlRnJvbUxpc3RWaWV3CkBAIC0yMzksMTUgKzIzOCwxNSBAQAogIDIzMSBzdHViIFJlYWxTaGVsbEV4ZWN1dGVFeFcgICAjIGV4cG9ydGVkIGJ5IG5hbWUKICAyMzIgc3R1YiBSZWFsU2hlbGxFeGVjdXRlVyAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDIzMyBzdHViIFJlZ2VuZXJhdGVVc2VyRW52aXJvbm1lbnRAOCAgICMgZXhwb3J0ZWQgYnkgbmFtZQotIDIzNCBzdHViIFNIQWRkVG9SZWNlbnREb2NzQDggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyMzQgc3RkY2FsbCBTSEFkZFRvUmVjZW50RG9jcyAobG9uZyBwdHIpIFNIQWRkVG9SZWNlbnREb2NzMzIgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDIzNSBzdGRjYWxsIFNIQXBwQmFyTWVzc2FnZShsb25nIHB0cikgU0hBcHBCYXJNZXNzYWdlMzIgICAjIGV4cG9ydGVkIGJ5IG5hbWUKLSAyMzYgc3R1YiBTSEJyb3dzZUZvckZvbGRlckA0ICAgIyBleHBvcnRlZCBieSBuYW1lCisgMjM2IHN0ZGNhbGwgU0hCcm93c2VGb3JGb2xkZXIocHRyKSBTSEJyb3dzZUZvckZvbGRlcjMyQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDIzNyBzdGRjYWxsIFNIQnJvd3NlRm9yRm9sZGVyQShwdHIpIFNIQnJvd3NlRm9yRm9sZGVyMzJBICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjM4IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJXQDQgICAjIGV4cG9ydGVkIGJ5IG5hbWUKLSAyMzkgc3R1YiBTSENoYW5nZU5vdGlmeUAxNiAgICMgZXhwb3J0ZWQgYnkgbmFtZQorIDIzOSBzdGRjYWxsIFNIQ2hhbmdlTm90aWZ5IChsb25nIGxvbmcgcHRyIHB0cikgU0hDaGFuZ2VOb3RpZnkzMiAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjQwIHN0dWIgU0hFbXB0eVJlY3ljbGVCaW5BQDEyICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjQxIHN0dWIgU0hFbXB0eVJlY3ljbGVCaW5XQDEyICAgIyBleHBvcnRlZCBieSBuYW1lCi0gMjQyIHN0dWIgU0hGaWxlT3BlcmF0aW9uQDQgICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNDIgc3RkY2FsbCBTSEZpbGVPcGVyYXRpb24ocHRyKSBTSEZpbGVPcGVyYXRpb24zMiAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI0MyBzdHViIFNIRmlsZU9wZXJhdGlvbkFANCAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI0NCBzdHViIFNIRmlsZU9wZXJhdGlvbldANCAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI0NSBzdHViIFNIRm9ybWF0RHJpdmVAMTYgICAjIGV4cG9ydGVkIGJ5IG5hbWUKQEAgLTI1Niw3ICsyNTUsNyBAQAogIDI0OCBzdHViIFNIR2V0RGF0YUZyb21JRExpc3RXQDIwICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjQ5IHN0dWIgUGF0aFBhcnNlSWNvbkxvY2F0aW9uQDQKICAyNTAgc3R1YiBQYXRoUmVtb3ZlRXh0ZW5zaW9uQDQKLSAyNTEgc3R1YiBQYXRoUmVtb3ZlQXJnc0A1CisgMjUxIHN0dWIgUGF0aFJlbW92ZUFyZ3NANAogIDI1MiBzdGRjYWxsIFNIR2V0RGVza3RvcEZvbGRlcihwdHIpIFNIR2V0RGVza3RvcEZvbGRlciAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI1MyBzdGRjYWxsIFNIR2V0RmlsZUluZm8ocHRyIGxvbmcgcHRyIGxvbmcgbG9uZykgU0hHZXRGaWxlSW5mbzMyQSAgICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI1NCBzdGRjYWxsIFNIR2V0RmlsZUluZm9BKHB0ciBsb25nIHB0ciBsb25nIGxvbmcpIFNIR2V0RmlsZUluZm8zMkEgICAjIGV4cG9ydGVkIGJ5IG5hbWUKQEAgLTI2NSw5ICsyNjQsOSBAQAogIDI1NyBzdGRjYWxsIFNIR2V0TWFsbG9jKHB0cikgU0hHZXRNYWxsb2MgICAjIGV4cG9ydGVkIGJ5IG5hbWUKICAyNTggc3R1YiBTSEdldE5ld0xpbmtJbmZvQDIwICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjU5IHN0ZGNhbGwgU0hHZXRQYXRoRnJvbUlETGlzdChwdHIgcHRyKSBTSEdldFBhdGhGcm9tSURMaXN0ICAgIyBleHBvcnRlZCBieSBuYW1lCi0gMjYwIHN0dWIgU0hHZXRQYXRoRnJvbUlETGlzdEA4ICAgIyBleHBvcnRlZCBieSBuYW1lCi0gMjYxIHN0dWIgU0hHZXRQYXRoRnJvbUlETGlzdEFAOCAgICMgZXhwb3J0ZWQgYnkgbmFtZQotIDI2MiBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RXQDggICAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNjAgc3R1YiBTSEdldFBhdGhGcm9tSURMaXN0QDggIyBleHBvcnRlZCBieSBuYW1lCisgMjYxIHN0ZGNhbGwgU0hHZXRQYXRoRnJvbUlETGlzdEEgKGxvbmcgbG9uZykgU0hHZXRQYXRoRnJvbUlETGlzdDMyQSAjIGV4cG9ydGVkIGJ5IG5hbWUKKyAyNjIgc3RkY2FsbCBTSEdldFBhdGhGcm9tSURMaXN0VyAobG9uZyBsb25nKSBTSEdldFBhdGhGcm9tSURMaXN0MzJXICMgZXhwb3J0ZWQgYnkgbmFtZQogIDI2MyBzdGRjYWxsIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uKGxvbmcgbG9uZyBwdHIpIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjY0IHN0ZGNhbGwgU0hIZWxwU2hvcnRjdXRzX1J1bkRMTChsb25nIGxvbmcgbG9uZyBsb25nKSBTSEhlbHBTaG9ydGN1dHNfUnVuRExMICAgIyBleHBvcnRlZCBieSBuYW1lCiAgMjY1IHN0dWIgU0hIZWxwU2hvcnRjdXRzX1J1bkRMTEFAMTYgICAjIGV4cG9ydGVkIGJ5IG5hbWUKZGlmZiAtLWdpdCBhL3JlbGF5MzIvc25vb3AuYyBiL3JlbGF5MzIvc25vb3AuYwppbmRleCBmNGExMmZiLi41MzQ2MDdkIDEwMDY0NAotLS0gYS9yZWxheTMyL3Nub29wLmMKKysrIGIvcmVsYXkzMi9zbm9vcC5jCkBAIC0yOTAsOCArMjkwLDEwIEBACiAJCSAqLwogCQlMUEJZVEUJcmV0ZWlwID0gKExQQllURSlDQUxMRVIxUkVGOwogCi0JCWlmICgocmV0ZWlwWzBdPT0weDgzKSYmKHJldGVpcFsxXT09MHhjNCkpCi0JCQlmdW4tPm5yb2ZhcmdzPXJldGVpcFsyXS80OworCQlpZiAocmV0ZWlwKSB7CisJCQlpZiAoKHJldGVpcFswXT09MHg4MykmJihyZXRlaXBbMV09PTB4YzQpKQorCQkJCWZ1bi0+bnJvZmFyZ3M9cmV0ZWlwWzJdLzQ7CisJCX0KIAl9CiAKIAl3aGlsZSAoKnJldHMpIHsKQEAgLTMzNCw3ICszMzYsNyBAQAogCQlyZXQtPmFyZ3MgPSBIZWFwQWxsb2MoU3lzdGVtSGVhcCwwLDE2KnNpemVvZihEV09SRCkpOwogCQltZW1jcHkocmV0LT5hcmdzLChMUEJZVEUpKEVTUF9yZWcoY29udGV4dCkrOCksc2l6ZW9mKERXT1JEKSoxNik7CiAJfQotCURQUklOVEYoIikgcmV0PSUwOGx4IGZzPSUwNGx4XG4iLChEV09SRCkoKnJldHMpLT5lbnRyeVtpXS5vcmlncmV0dXJuLEZTX3JlZyhjb250ZXh0KSk7CisJRFBSSU5URigiKSByZXQ9JTA4bHggZnM9JTA0bHhcbiIscmV0LT5vcmlncmV0dXJuLEZTX3JlZyhjb250ZXh0KSk7CiB9CiAKIFJFR1NfRU5UUllQT0lOVChTTk9PUF9SZXR1cm4pIHsKZGlmZiAtLWdpdCBhL3JlbGF5MzIvdXNlcjMyLnNwZWMgYi9yZWxheTMyL3VzZXIzMi5zcGVjCmluZGV4IGZlMjQxYWYuLmFkMzQ0MTQgMTAwNjQ0Ci0tLSBhL3JlbGF5MzIvdXNlcjMyLnNwZWMKKysrIGIvcmVsYXkzMi91c2VyMzIuc3BlYwpAQCAtODMsMTAgKzgzLDggQEAKICA4MCBzdGRjYWxsIENyZWF0ZU1ESVdpbmRvd1cocHRyIHB0ciBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIENyZWF0ZU1ESVdpbmRvd1cKICA4MSBzdGRjYWxsIENyZWF0ZU1lbnUoKSBDcmVhdGVNZW51MzIKICA4MiBzdGRjYWxsIENyZWF0ZVBvcHVwTWVudSgpIENyZWF0ZVBvcHVwTWVudTMyCi0gODMgc3RkY2FsbCBDcmVhdGVXaW5kb3dFeEEobG9uZyBzdHIgc3RyIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgbG9uZyBwdHIpIENyZWF0ZVdpbmRvd0V4MzJBCi0gODQgc3RkY2FsbCBDcmVhdGVXaW5kb3dFeFcobG9uZyB3c3RyIHdzdHIgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBsb25nIHB0cikgQ3JlYXRlV2luZG93RXgzMlcKKyA4MyBzdGRjYWxsIENyZWF0ZVdpbmRvd0V4QShsb25nIHN0ciBzdHIgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIHB0cikgQ3JlYXRlV2luZG93RXgzMkEKKyA4NCBzdGRjYWxsIENyZWF0ZVdpbmRvd0V4Vyhsb25nIHdzdHIgd3N0ciBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyKSBDcmVhdGVXaW5kb3dFeDMyVwogIDg1IHN0dWIgQ3JlYXRlV2luZG93U3RhdGlvbkEKICA4NiBzdHViIENyZWF0ZVdpbmRvd1N0YXRpb25XCiAgODcgc3R1YiBEZGVBYmFuZG9uVHJhbnNhY3Rpb24KQEAgLTU5Miw3ICs1OTAsNyBAQAogNTg3IHN0ZGNhbGwgd3ZzcHJpbnRmQShwdHIgc3RyIHB0cikgd3ZzcHJpbnRmMzJBCiA1ODggc3RkY2FsbCB3dnNwcmludGZXKHB0ciB3c3RyIHB0cikgd3ZzcHJpbnRmMzJXCiAjbGF0ZSBhZGRpdGlvbnMKLTU4OSBzdHViIENoYW5nZURpc3BsYXlTZXR0aW5nc0EKKzU4OSBzdGRjYWxsIENoYW5nZURpc3BsYXlTZXR0aW5nc0EocHRyIGxvbmcpIENoYW5nZURpc3BsYXlTZXR0aW5nczMyQQogNTkwIHN0dWIgQ2hhbmdlRGlzcGxheVNldHRpbmdzVwogNTkxIHN0dWIgRW51bURlc2t0b3BXaW5kb3dzCiA1OTIgc3RkY2FsbCBFbnVtRGlzcGxheVNldHRpbmdzQShzdHIgbG9uZyBwdHIpIEVudW1EaXNwbGF5U2V0dGluZ3MzMkEKZGlmZiAtLWdpdCBhL3JlbGF5MzIvd25hc3BpMzIuc3BlYyBiL3JlbGF5MzIvd25hc3BpMzIuc3BlYwppbmRleCBlOTM0OWJhLi43N2YzMGYxIDEwMDY0NAotLS0gYS9yZWxheTMyL3duYXNwaTMyLnNwZWMKKysrIGIvcmVsYXkzMi93bmFzcGkzMi5zcGVjCkBAIC0xLDYgKzEsNiBAQAogbmFtZQl3bmFzcGkzMgogdHlwZQl3aW4zMgogCi0wIHN0dWIgR2V0QVNQSTMyU3VwcG9ydEluZm8KKzAgc3RkY2FsbCBHZXRBU1BJMzJTdXBwb3J0SW5mbygpIEdldEFTUEkzMlN1cHBvcnRJbmZvCiAxIHN0dWIgU2VuZEFTUEkzMkNvbW1hbmQKIDMgc3R1YiBHZXRBU1BJMzJETExWZXJzaW9uCmRpZmYgLS1naXQgYS9zY2hlZHVsZXIvY2xpZW50LmMgYi9zY2hlZHVsZXIvY2xpZW50LmMKaW5kZXggYzc5MTBiMy4uOThmNGY3NSAxMDA2NDQKLS0tIGEvc2NoZWR1bGVyL2NsaWVudC5jCisrKyBiL3NjaGVkdWxlci9jbGllbnQuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTE3LDYgKzE4LDEwIEBACiAjaW5jbHVkZSAic2VydmVyLmgiCiAjaW5jbHVkZSAid2luZXJyb3IuaCIKIAorLyogU29tZSB2ZXJzaW9ucyBvZiBnbGliYyBkb24ndCBkZWZpbmUgdGhpcyAqLworI2lmbmRlZiBTQ01fUklHSFRTCisjZGVmaW5lIFNDTV9SSUdIVFMgMQorI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIENMSUVOVF9TZW5kUmVxdWVzdF92CkBAIC0yNywyMSArMzIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKnZlYywgaW50IHZlY2xlbiApCiB7CiAgICAgVEhEQiAqdGhkYiA9IFRIUkVBRF9DdXJyZW50KCk7Ci0gICAgc3RydWN0IHsgc3RydWN0IGNtc2doZHIgaGRyOyBpbnQgZmQ7IH0gY21zZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgeyB7IHNpemVvZihjbXNnKSwgU09MX1NPQ0tFVCwgU0NNX1JJR0hUUyB9LCBwYXNzX2ZkIH07Ci0gICAgc3RydWN0IG1zZ2hkciBtc2doZHI7CisjaWZuZGVmIEhBVkVfTVNHSERSX0FDQ1JJR0hUUworICAgIHN0cnVjdCBjbXNnX2ZkIGNtc2cgID0geyBzaXplb2YoY21zZyksIFNPTF9TT0NLRVQsIFNDTV9SSUdIVFMsIHBhc3NfZmQgfTsKKyNlbmRpZgorICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyID0geyBOVUxMLCAwLCB2ZWMsIHZlY2xlbiwgfTsKICAgICBzdHJ1Y3QgaGVhZGVyIGhlYWQ7CiAgICAgaW50IGksIHJldCwgbGVuOwogCi0gICAgbXNnaGRyLm1zZ19uYW1lICAgID0gTlVMTDsKLSAgICBtc2doZHIubXNnX25hbWVsZW4gPSAwOwotCiAgICAgYXNzZXJ0KCB2ZWNsZW4gPiAwICk7Ci0KLSAgICB2ZWNbMF0uaW92X2Jhc2UgICA9ICZoZWFkOwotICAgIHZlY1swXS5pb3ZfbGVuICAgID0gc2l6ZW9mKGhlYWQpOwotICAgIG1zZ2hkci5tc2dfaW92ICAgID0gdmVjOwotICAgIG1zZ2hkci5tc2dfaW92bGVuID0gdmVjbGVuOworICAgIHZlY1swXS5pb3ZfYmFzZSA9ICZoZWFkOworICAgIHZlY1swXS5pb3ZfbGVuICA9IHNpemVvZihoZWFkKTsKICAgICBmb3IgKGkgPSBsZW4gPSAwOyBpIDwgdmVjbGVuOyBpKyspIGxlbiArPSB2ZWNbaV0uaW92X2xlbjsKIAogICAgIGFzc2VydCggbGVuIDw9IE1BWF9NU0dfTEVOR1RIICk7CkBAIC00OSwxNSArNDksMTUgQEAKICAgICBoZWFkLmxlbiAgPSBsZW47CiAgICAgaGVhZC5zZXEgID0gdGhkYi0+c2VxKys7CiAKLSAgICBpZiAocGFzc19mZCA9PSAtMSkgIC8qIG5vIGZkIHRvIHBhc3MgKi8KKyAgICBpZiAocGFzc19mZCAhPSAtMSkgIC8qIHdlIGhhdmUgYW4gZmQgdG8gc2VuZCAqLwogICAgIHsKLSAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sID0gTlVMTDsKLSAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sbGVuID0gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sID0gJmNtc2c7CisjaWZkZWYgSEFWRV9NU0dIRFJfQUNDUklHSFRTCisgICAgICAgIG1zZ2hkci5tc2dfYWNjcmlnaHRzID0gKHZvaWQgKikmcGFzc19mZDsKKyAgICAgICAgbXNnaGRyLm1zZ19hY2NyaWdodHNsZW4gPSBzaXplb2YocGFzc19mZCk7CisjZWxzZQorICAgICAgICBtc2doZHIubXNnX2NvbnRyb2wgICAgPSAmY21zZzsKICAgICAgICAgbXNnaGRyLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKChyZXQgPSBzZW5kbXNnKCB0aGRiLT5zb2NrZXQsICZtc2doZHIsIDAgKSkgPCBsZW4pCkBAIC0xMDcsMjEgKzEwNywxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqdmVjLCBpbnQgdmVjbGVuICkKIHsKICAgICBUSERCICp0aGRiID0gVEhSRUFEX0N1cnJlbnQoKTsKLSAgICBzdHJ1Y3QgeyBzdHJ1Y3QgY21zZ2hkciBoZHI7IGludCBmZDsgfSBjbXNnID0KLSAgICAgICAgICAgICAgICAgICAgICAgICB7IHsgc2l6ZW9mKGNtc2cpLCBTT0xfU09DS0VULCBTQ01fUklHSFRTIH0sIC0xIH07Ci0gICAgc3RydWN0IG1zZ2hkciBtc2doZHI7CisgICAgaW50IHBhc3NfZmQgPSAtMTsKKyNpZmRlZiBIQVZFX01TR0hEUl9BQ0NSSUdIVFMKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2hkciA9IHsgTlVMTCwgMCwgdmVjLCB2ZWNsZW4sICh2b2lkKikmcGFzc19mZCwgc2l6ZW9mKGludCkgfTsKKyNlbHNlCisgICAgc3RydWN0IGNtc2dfZmQgY21zZyAgPSB7IHNpemVvZihjbXNnKSwgU09MX1NPQ0tFVCwgU0NNX1JJR0hUUywgLTEgfTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2hkciA9IHsgTlVMTCwgMCwgdmVjLCB2ZWNsZW4sICZjbXNnLCBzaXplb2YoY21zZyksIDAgfTsKKyNlbmRpZgogICAgIHN0cnVjdCBoZWFkZXIgaGVhZDsKICAgICBpbnQgcmV0LCByZW1haW5pbmc7CiAKICAgICBhc3NlcnQoIHZlY2xlbiA+IDAgKTsKICAgICB2ZWNbMF0uaW92X2Jhc2UgICAgICAgPSAmaGVhZDsKICAgICB2ZWNbMF0uaW92X2xlbiAgICAgICAgPSBzaXplb2YoaGVhZCk7Ci0gICAgbXNnaGRyLm1zZ19uYW1lICAgICAgID0gTlVMTDsKLSAgICBtc2doZHIubXNnX25hbWVsZW4gICAgPSAwOwotICAgIG1zZ2hkci5tc2dfaW92ICAgICAgICA9IHZlYzsKLSAgICBtc2doZHIubXNnX2lvdmxlbiAgICAgPSB2ZWNsZW47Ci0gICAgbXNnaGRyLm1zZ19jb250cm9sICAgID0gJmNtc2c7Ci0gICAgbXNnaGRyLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOwogCiAgICAgaWYgKChyZXQgPSByZWN2bXNnKCB0aGRiLT5zb2NrZXQsICZtc2doZHIsIDAgKSkgPT0gLTEpCiAgICAgewpAQCAtMTUwLDE4ICsxNDgsMjIgQEAKICAgICAgICAgRXhpdFRocmVhZCgxKTsKICAgICB9CiAKKyNpZm5kZWYgSEFWRV9NU0dIRFJfQUNDUklHSFRTCisgICAgcGFzc19mZCA9IGNtc2cuZmQ7CisjZW5kaWYKKwogICAgIGlmIChoZWFkLnR5cGUgIT0gRVJST1JfU1VDQ0VTUykKICAgICB7CiAgICAgICAgIFNldExhc3RFcnJvciggaGVhZC50eXBlICk7CiAgICAgfQogICAgIGVsc2UgaWYgKHBhc3NlZF9mZCkKICAgICB7Ci0gICAgICAgICpwYXNzZWRfZmQgPSBjbXNnLmZkOwotICAgICAgICBjbXNnLmZkID0gLTE7CisgICAgICAgICpwYXNzZWRfZmQgPSBwYXNzX2ZkOworICAgICAgICBwYXNzX2ZkID0gLTE7CiAgICAgfQogCiAgICAgaWYgKGxlbikgKmxlbiA9IHJldCAtIHNpemVvZihoZWFkKTsKLSAgICBpZiAoY21zZy5mZCAhPSAtMSkgY2xvc2UoIGNtc2cuZmQgKTsKKyAgICBpZiAocGFzc19mZCAhPSAtMSkgY2xvc2UoIHBhc3NfZmQgKTsKICAgICByZW1haW5pbmcgPSBoZWFkLmxlbiAtIHJldDsKICAgICB3aGlsZSAocmVtYWluaW5nID4gMCkgIC8qIGRyb3AgcmVtYWluaW5nIGRhdGEgKi8KICAgICB7CkBAIC0yMTYsNyArMjE4LDcgQEAKICAgICBzdHJ1Y3QgbmV3X3RocmVhZF9yZXBseSByZXBseTsKICAgICBpbnQgbGVuLCBmZFsyXTsKIAotICAgIGlmIChzb2NrZXRwYWlyKCBBRl9VTklYLCBTT0NLX1NUUkVBTSwgUEZfVU5JWCwgZmQgKSA9PSAtMSkKKyAgICBpZiAoc29ja2V0cGFpciggQUZfVU5JWCwgU09DS19TVFJFQU0sIDAsIGZkICkgPT0gLTEpCiAgICAgewogICAgICAgICBTZXRMYXN0RXJyb3IoIEVSUk9SX1RPT19NQU5ZX09QRU5fRklMRVMgKTsgIC8qIEZJWE1FICovCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI1NCw3ICsyNTYsNyBAQAogICAgICAgICBpbnQgdG1wZmRbMl07CiAgICAgICAgIGNoYXIgYnVmZmVyWzE2XTsKIAotICAgICAgICBpZiAoc29ja2V0cGFpciggQUZfVU5JWCwgU09DS19TVFJFQU0sIFBGX1VOSVgsIHRtcGZkICkgPT0gLTEpCisgICAgICAgIGlmIChzb2NrZXRwYWlyKCBBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCwgdG1wZmQgKSA9PSAtMSkKICAgICAgICAgewogICAgICAgICAgICAgcGVycm9yKCJzb2NrZXRwYWlyIik7CiAgICAgICAgICAgICBleGl0KDEpOwpkaWZmIC0tZ2l0IGEvc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmMgYi9zY2hlZHVsZXIvY3JpdHNlY3Rpb24uYwppbmRleCBhY2ViMmM5Li5lMTU0YWJlIDEwMDY0NAotLS0gYS9zY2hlZHVsZXIvY3JpdHNlY3Rpb24uYworKysgYi9zY2hlZHVsZXIvY3JpdHNlY3Rpb24uYwpAQCAtMTIzLDcgKzEyMyw5IEBACiAgKi8KIHZvaWQgV0lOQVBJIEVudGVyQ3JpdGljYWxTZWN0aW9uKCBDUklUSUNBTF9TRUNUSU9OICpjcml0ICkKIHsKLSAgICBpZiAoKGNyaXQtPlJlc2VydmVkPT0tMSkgJiYgIShjcml0LT5Mb2NrU2VtYXBob3JlKSkgeworICAgIGlmICgJKGNyaXQtPlJlc2VydmVkPT0tMSkgJiYgIShjcml0LT5Mb2NrU2VtYXBob3JlKSAmJgorCQkoY3JpdCE9SEVBUF9TeXN0ZW1Mb2NrKQorICAgICkgewogICAgIAlGSVhNRSh3aW4zMiwiZW50ZXJpbmcgdW5pbml0aWFsaXplZCBzZWN0aW9uKCVwKT9cbiIsY3JpdCk7CiAgICAgCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oY3JpdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmVyL3NvY2tldC5jIGIvc2VydmVyL3NvY2tldC5jCmluZGV4IGVjYTVlMWMuLjNkZDczYzkgMTAwNjQ0Ci0tLSBhL3NlcnZlci9zb2NrZXQuYworKysgYi9zZXJ2ZXIvc29ja2V0LmMKQEAgLTE4LDkgKzE4LDE1IEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAic2VydmVyLmgiCiAjaW5jbHVkZSAib2JqZWN0LmgiCiAKKy8qIFNvbWUgdmVyc2lvbnMgb2YgZ2xpYmMgZG9uJ3QgZGVmaW5lIHRoaXMgKi8KKyNpZm5kZWYgU0NNX1JJR0hUUworI2RlZmluZSBTQ01fUklHSFRTIDEKKyNlbmRpZgorCiAvKiBjbGllbnQgc3RhdGUgKi8KIGVudW0gc3RhdGUKIHsKQEAgLTc5LDkgKzg1LDExIEBACiB7CiAgICAgc3RydWN0IGNsaWVudCAqY2xpZW50ID0gY2xpZW50c1tjbGllbnRfZmRdOwogICAgIHN0cnVjdCBpb3ZlYyB2ZWNbMl07Ci0gICAgc3RydWN0IHsgc3RydWN0IGNtc2doZHIgaGRyOyBpbnQgZmQ7IH0gY21zZyA9Ci0gICAgICAgICAgICAgICAgIHsgeyBzaXplb2YoY21zZyksIFNPTF9TT0NLRVQsIFNDTV9SSUdIVFMgfSwgY2xpZW50LT5wYXNzX2ZkIH07Ci0gICAgc3RydWN0IG1zZ2hkciBtc2doZHIgPSB7IE5VTEwsIDAsIHZlYywgMiwgTlVMTCwgMCwgMCB9OworI2lmbmRlZiBIQVZFX01TR0hEUl9BQ0NSSUdIVFMKKyAgICBzdHJ1Y3QgY21zZ19mZCBjbXNnICA9IHsgc2l6ZW9mKGNtc2cpLCBTT0xfU09DS0VULCBTQ01fUklHSFRTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQtPnBhc3NfZmQgfTsKKyNlbmRpZgorICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyID0geyBOVUxMLCAwLCB2ZWMsIDIsIH07CiAgICAgaW50IHJldDsKIAogICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZW5kICovCkBAIC0xMDIsMTEgKzExMCwxNSBAQAogICAgICAgICB2ZWNbMF0uaW92X2xlbiAgPSBjbGllbnQtPmhlYWQubGVuIC0gY2xpZW50LT5jb3VudDsKICAgICAgICAgbXNnaGRyLm1zZ19pb3ZsZW4gPSAxOwogICAgIH0KLSAgICBpZiAoY2xpZW50LT5wYXNzX2ZkICE9IC0xKQorICAgIGlmIChjbGllbnQtPnBhc3NfZmQgIT0gLTEpICAvKiB3ZSBoYXZlIGFuIGZkIHRvIHNlbmQgKi8KICAgICB7Ci0gICAgICAgIC8qIHdlIGhhdmUgYW4gZmQgdG8gc2VuZCAqLworI2lmZGVmIEhBVkVfTVNHSERSX0FDQ1JJR0hUUworICAgICAgICBtc2doZHIubXNnX2FjY3JpZ2h0cyA9ICh2b2lkICopJmNsaWVudC0+cGFzc19mZDsKKyAgICAgICAgbXNnaGRyLm1zZ19hY2NyaWdodHNsZW4gPSBzaXplb2YoY2xpZW50LT5wYXNzX2ZkKTsKKyNlbHNlCiAgICAgICAgIG1zZ2hkci5tc2dfY29udHJvbCA9ICZjbXNnOwogICAgICAgICBtc2doZHIubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisjZW5kaWYKICAgICB9CiAgICAgcmV0ID0gc2VuZG1zZyggY2xpZW50X2ZkLCAmbXNnaGRyLCAwICk7CiAgICAgaWYgKHJldCA9PSAtMSkKQEAgLTEzOCw5ICsxNTAsMTMgQEAKIHsKICAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBjbGllbnRzW2NsaWVudF9mZF07CiAgICAgc3RydWN0IGlvdmVjIHZlYzsKLSAgICBzdHJ1Y3QgeyBzdHJ1Y3QgY21zZ2hkciBoZHI7IGludCBmZDsgfSBjbXNnID0geyB7IHNpemVvZihjbXNnKSwgU09MX1NPQ0tFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDTV9SSUdIVFMgfSwgLTEgfTsKKyAgICBpbnQgcGFzc19mZCA9IC0xOworI2lmZGVmIEhBVkVfTVNHSERSX0FDQ1JJR0hUUworICAgIHN0cnVjdCBtc2doZHIgbXNnaGRyID0geyBOVUxMLCAwLCAmdmVjLCAxLCAodm9pZCopJnBhc3NfZmQsIHNpemVvZihpbnQpIH07CisjZWxzZQorICAgIHN0cnVjdCBjbXNnX2ZkIGNtc2cgID0geyBzaXplb2YoY21zZyksIFNPTF9TT0NLRVQsIFNDTV9SSUdIVFMsIC0xIH07CiAgICAgc3RydWN0IG1zZ2hkciBtc2doZHIgPSB7IE5VTEwsIDAsICZ2ZWMsIDEsICZjbXNnLCBzaXplb2YoY21zZyksIDAgfTsKKyNlbmRpZgogICAgIGludCByZXQ7CiAKICAgICBpZiAoY2xpZW50LT5zdGF0ZSA9PSBSVU5OSU5HKSBjbGllbnQtPnN0YXRlID0gU0VORElORzsKQEAgLTE2NiwxMSArMTgyLDE0IEBACiAgICAgICAgIHBlcnJvcigicmVjdm1zZyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChjbXNnLmZkICE9IC0xKQorI2lmbmRlZiBIQVZFX01TR0hEUl9BQ0NSSUdIVFMKKyAgICBwYXNzX2ZkID0gY21zZy5mZDsKKyNlbmRpZgorICAgIGlmIChwYXNzX2ZkICE9IC0xKQogICAgIHsKICAgICAgICAgLyogY2FuIG9ubHkgcmVjZWl2ZSBvbmUgZmQgcGVyIG1lc3NhZ2UgKi8KICAgICAgICAgaWYgKGNsaWVudC0+cGFzc19mZCAhPSAtMSkgY2xvc2UoIGNsaWVudC0+cGFzc19mZCApOwotICAgICAgICBjbGllbnQtPnBhc3NfZmQgPSBjbXNnLmZkOworICAgICAgICBjbGllbnQtPnBhc3NfZmQgPSBwYXNzX2ZkOwogICAgIH0KICAgICBlbHNlIGlmICghcmV0KSByZXR1cm4gLTE7ICAvKiBjbG9zZWQgcGlwZSAqLwogCmRpZmYgLS1naXQgYS90b29scy9tYWtlX1gxMXdyYXBwZXJzIGIvdG9vbHMvbWFrZV9YMTF3cmFwcGVycwppbmRleCA4MGJhYmVlLi4xYTFjMDhiIDEwMDc1NQotLS0gYS90b29scy9tYWtlX1gxMXdyYXBwZXJzCisrKyBiL3Rvb2xzL21ha2VfWDExd3JhcHBlcnMKQEAgLTE3LDcgKzE3LDcgQEAKICRYMTFfaW5jbHVkZV9kaXIgPSAiL3Vzci9YMTFSNi9pbmNsdWRlIjsKICRvdXRkaXIgPSAidHN4MTEiOwogJHdhbnRmaWxlID0gIiRvdXRkaXIvWDExX2NhbGxzIjsKLUBkb2xpc3QgPSAoIlhsaWIiLCAiWHJlc291cmNlIiwgIlh1dGlsIiwgInhwbSIsICJYU2htIik7CitAZG9saXN0ID0gKCJYbGliIiwgIlhyZXNvdXJjZSIsICJYdXRpbCIsICJ4cG0iLCAiWFNobSIsICJ4Zjg2ZGdhIik7CiAKICMgRmlyc3QgcmVhZCBsaXN0IG9mIHdhbnRlZCBmdW5jdGlvbiBuYW1lcy4KIApAQCAtNDQsMTEgKzQ0LDE5IEBACiAKICAgICAkeDExX2luY2wgPSAiIjsKICAgICAkZXh0ZW5zaW9uc19kaXIgPSAiIjsKKyAgICAkcHJlX2ZpbGUgPSAiIjsKKyAgICAkcG9zdF9maWxlID0gIiI7CiAgICAgaWYoJG5hbWUgZXEgIlh1dGlsIiB8fCAkbmFtZSBlcSAiWHJlc291cmNlIiB8fCAkbmFtZSBlcSAiWFNobSIpIHsKIAkkeDExX2luY2wgPSAiI2luY2x1ZGUgPFgxMS9YbGliLmg+XG4iOwogCSMgRm9yIFh1dGlsLCB3ZSBuZWVkIFgxMS9YcmVzb3VyY2UuaCBmb3IgWFVuaXF1ZUNvbnRleHQoKS4KIAkkeDExX2luY2wgLj0gIiNpbmNsdWRlIDxYMTEvWHJlc291cmNlLmg+XG4iIGlmICRuYW1lIGVxICJYdXRpbCI7CiAgICAgfQorICAgIGlmKCRuYW1lIGVxICJ4Zjg2ZGdhIikgIHsKKyAgICAJJHgxMV9pbmNsID0gIiNpbmNsdWRlIDxYMTEvWGxpYi5oPlxuIjsKKwkkZXh0ZW5zaW9uc19kaXIgPSAiZXh0ZW5zaW9ucy8iOworCSRwcmVfZmlsZSA9ICIjaW5jbHVkZSBcImNvbmZpZy5oXCJcbiNpZmRlZiBIQVZFX0xJQlhYRjg2REdBXG4iOworCSRwb3N0X2ZpbGUgPSAiI2VuZGlmIjsKKyAgICB9CiAgICAgaWYoJG5hbWUgZXEgIlhTaG0iKSB7CiAJJGV4dGVuc2lvbnNfZGlyID0gImV4dGVuc2lvbnMvIjsKICAgICB9CkBAIC03NSw3ICs4Myw3IEBACiAgKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRvb2xzL21ha2VfWDExd3JhcHBlcnMKICAqIERPIE5PVCBFRElUIQogICovCi0KKyRwcmVfZmlsZQogJHgxMV9pbmNsI2luY2x1ZGUgPFgxMS8kZXh0ZW5zaW9uc19kaXIkbmFtZS5oPgogI2luY2x1ZGUgIngxMWRydi5oIgogI2luY2x1ZGUgImRlYnVnLmgiCkBAIC0xMDEsNiArMTA5LDUyIEBACiAJb3V0cHV0X2ZuKCJYU2htUHV0SW1hZ2UiLCBTdGF0dXMsCiAJCSAgIkRpc3BsYXkgKiwgRHJhd2FibGUsIEdDLCBYSW1hZ2UgKiwgaW50LCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgQm9vbCIsCiAJCSAgIkRpc3BsYXkgKmEwLCBEcmF3YWJsZSBhMSwgR0MgYTIsIFhJbWFnZSAqYTMsIGludCBhNCwgaW50IGE1LCBpbnQgYTYsIGludCBhNywgdW5zaWduZWQgaW50IGE4LCB1bnNpZ25lZCBpbnQgYTksIEJvb2wgYTEwIiwgImEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAiKTsKKyAgICB9IGVsc2lmKCRuYW1lIGVxICJ4Zjg2ZGdhIikgeworICAgIAlvdXRwdXRfZm4oIlhGODZER0FRdWVyeVZlcnNpb24iLEJvb2wsCisJCSJEaXNwbGF5KixpbnQqLGludCoiLAorCQkiRGlzcGxheSphMCxpbnQqYTEsaW50KmEyIiwKKwkJImEwLGExLGEyIgorCSk7CisgICAgCW91dHB1dF9mbigiWEY4NkRHQVF1ZXJ5RXh0ZW5zaW9uIixCb29sLAorCQkiRGlzcGxheSosaW50KixpbnQqIiwKKwkJIkRpc3BsYXkqYTAsaW50KmExLGludCphMiIsCisJCSJhMCxhMSxhMiIKKwkpOworCW91dHB1dF9mbigiWEY4NkRHQUdldFZpZGVvIixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsY2hhcioqLGludCosaW50KixpbnQqIiwKKwkJIkRpc3BsYXkqYTAsaW50IGExLGNoYXIqKmEyLGludCphMyxpbnQqYTQsaW50KmE1IiwKKwkJImEwLGExLGEyLGEzLGE0LGE1IgorCSk7CisJb3V0cHV0X2ZuKCJYRjg2REdBRGlyZWN0VmlkZW8iLFN0YXR1cywKKwkJIkRpc3BsYXkqLGludCxpbnQiLAorCQkiRGlzcGxheSphMCxpbnQgYTEsaW50IGEyIiwKKwkJImEwLGExLGEyIgorCSk7CisJb3V0cHV0X2ZuKCJYRjg2REdBR2V0Vmlld1BvcnRTaXplIixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsaW50KixpbnQqIiwKKwkJIkRpc3BsYXkqYTAsaW50IGExLGludCAqYTIsaW50ICphMyIsCisJCSJhMCxhMSxhMixhMyIKKwkpOworCW91dHB1dF9mbigiWEY4NkRHQVNldFZpZXdQb3J0IixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsaW50LGludCIsCisJCSJEaXNwbGF5KmEwLGludCBhMSxpbnQgYTIsaW50IGEzIiwKKwkJImEwLGExLGEyLGEzIgorCSk7CisJb3V0cHV0X2ZuKCJYRjg2REdBSW5zdGFsbENvbG9ybWFwIixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsQ29sb3JtYXAiLAorCQkiRGlzcGxheSphMCxpbnQgYTEsQ29sb3JtYXAgYTIiLAorCQkiYTAsYTEsYTIiCisJKTsKKwlvdXRwdXRfZm4oIlhGODZER0FRdWVyeURpcmVjdFZpZGVvIixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsaW50KiIsCisJCSJEaXNwbGF5KmEwLGludCBhMSxpbnQgKmEyIiwKKwkJImEwLGExLGEyIgorCSk7CisJb3V0cHV0X2ZuKCJYRjg2REdBVmlld1BvcnRDaGFuZ2VkIixTdGF0dXMsCisJCSJEaXNwbGF5KixpbnQsaW50IiwKKwkJIkRpc3BsYXkqYTAsaW50IGExLGludCBhMiIsCisJCSJhMCxhMSxhMiIKKwkpOwogICAgIH0gZWxzZSB7CiAJb3BlbihJTiwgImVjaG8gXCIkeDExX2luY2wjaW5jbHVkZSA8WDExLyRleHRlbnNpb25zX2RpciRuYW1lLmg+XCIgfCBnY2MgLUwkWDExX2luY2x1ZGVfZGlyIC1FIC0gfCBncmVwIC12ICdeWyBcdF0qXCQnfCIpIHx8IGRpZSAib3BlbiI7CiAKQEAgLTE3Niw2ICsyMzAsMTEgQEAKIAogI2VuZGlmIC8qIF9fV0lORV9UUyR1Y25hbWVcX0ggKi8KIEVORAorICAgIHByaW50IE9VVEMgPDxFTkQ7CiskcG9zdF9maWxlCitFTkQKKworCiAKIH0KIApkaWZmIC0tZ2l0IGEvdHN4MTEvTWFrZWZpbGUuaW4gYi90c3gxMS9NYWtlZmlsZS5pbgppbmRleCAyZjIwZDEzLi5kNGU2YWE2IDEwMDY0NAotLS0gYS90c3gxMS9NYWtlZmlsZS5pbgorKysgYi90c3gxMS9NYWtlZmlsZS5pbgpAQCAtNiw2ICs2LDcgQEAKIE1PRFVMRSAgICA9IHRzeDExCiAKIENfU1JDUyA9IFwKKwl0c194Zjg2ZGdhLmMgXAogCXRzX3hzaG0uYyBcCiAJdHNfeGxpYi5jIFwKIAl0c194cmVzb3VyY2UuYyBcCmRpZmYgLS1naXQgYS90c3gxMS9YMTFfY2FsbHMgYi90c3gxMS9YMTFfY2FsbHMKaW5kZXggYWVjYTJiNi4uM2Y5MmU1YiAxMDA2NDQKLS0tIGEvdHN4MTEvWDExX2NhbGxzCisrKyBiL3RzeDExL1gxMV9jYWxscwpAQCAtNzYsNyArNzYsNiBAQAogWEdldFdNU2l6ZUhpbnRzCiBYR2V0V2luZG93QXR0cmlidXRlcwogWEdldFdpbmRvd1Byb3BlcnR5Ci1YR3JhYlBvaW50ZXIKIFhHcmFiU2VydmVyCiBYSW5pdFRocmVhZHMKIFhJbnN0YWxsQ29sb3JtYXAKQEAgLTEyOCw2ICsxMjcsNyBAQAogWFNldFNlbGVjdGlvbk93bmVyCiBYU2V0U3Vid2luZG93TW9kZQogWFNldFRyYW5zaWVudEZvckhpbnQKK1hTZXRXaW5kb3dDb2xvcm1hcAogWFNldFdNUHJvcGVydGllcwogWFNldFdNUHJvdG9jb2xzCiBYU2V0V01TaXplSGludHMKQEAgLTE0Niw3ICsxNDYsNiBAQAogWFN5bmNocm9uaXplCiBYVGV4dEV4dGVudHMKIFhUZXh0V2lkdGgKLVhVbmdyYWJQb2ludGVyCiBYVW5ncmFiU2VydmVyCiBYVW5pbnN0YWxsQ29sb3JtYXAKIFhVbmlvblJlY3RXaXRoUmVnaW9uCkBAIC0xNjUsMyArMTY0LDEyIEBACiBYcm1QYXJzZUNvbW1hbmQKIFhybVVuaXF1ZVF1YXJrCiBfWEluaXRJbWFnZUZ1bmNQdHJzCitYRjg2REdBUXVlcnlFeHRlbnNpb24KK1hGODZER0FTZXRWaWV3UG9ydAorWEY4NkRHQUluc3RhbGxDb2xvcm1hcAorWEY4NkRHQVZpZXdQb3J0Q2hhbmdlZAorWEY4NkRHQURpcmVjdFZpZGVvCitYRjg2REdBUXVlcnlWZXJzaW9uCitYRjg2REdBUXVlcnlEaXJlY3RWaWRlbworWEY4NkRHQUdldFZpZGVvCitYRjg2REdBR2V0Vmlld1BvcnRTaXplCmRpZmYgLS1naXQgYS90c3gxMS90c194Zjg2ZGdhLmMgYi90c3gxMS90c194Zjg2ZGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyNTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3RzeDExL3RzX3hmODZkZ2EuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIFRocmVhZCBzYWZlIHdyYXBwZXJzIGFyb3VuZCB4Zjg2ZGdhIGNhbGxzLgorICogVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0b29scy9tYWtlX1gxMXdyYXBwZXJzCisgKiBETyBOT1QgRURJVCEKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmZGVmIEhBVkVfTElCWFhGODZER0EKKworI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMveGY4NmRnYS5oPgorI2luY2x1ZGUgIngxMWRydi5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKK0Jvb2wgVFNYRjg2REdBUXVlcnlWZXJzaW9uKERpc3BsYXkqYTAsaW50KmExLGludCphMikKK3sKKyAgQm9vbCByOworICBUUkFDRSh4MTEsICJDYWxsIFhGODZER0FRdWVyeVZlcnNpb25cbiIpOworICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICByID0gWEY4NkRHQVF1ZXJ5VmVyc2lvbihhMCxhMSxhMik7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYRjg2REdBUXVlcnlWZXJzaW9uXG4iKTsKKyAgcmV0dXJuIHI7Cit9CisKK0Jvb2wgVFNYRjg2REdBUXVlcnlFeHRlbnNpb24oRGlzcGxheSphMCxpbnQqYTEsaW50KmEyKQoreworICBCb29sIHI7CisgIFRSQUNFKHgxMSwgIkNhbGwgWEY4NkRHQVF1ZXJ5RXh0ZW5zaW9uXG4iKTsKKyAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgciA9IFhGODZER0FRdWVyeUV4dGVuc2lvbihhMCxhMSxhMik7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYRjg2REdBUXVlcnlFeHRlbnNpb25cbiIpOworICByZXR1cm4gcjsKK30KKworU3RhdHVzIFRTWEY4NkRHQUdldFZpZGVvKERpc3BsYXkqYTAsaW50IGExLGNoYXIqKmEyLGludCphMyxpbnQqYTQsaW50KmE1KQoreworICBTdGF0dXMgcjsKKyAgVFJBQ0UoeDExLCAiQ2FsbCBYRjg2REdBR2V0VmlkZW9cbiIpOworICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICByID0gWEY4NkRHQUdldFZpZGVvKGEwLGExLGEyLGEzLGE0LGE1KTsKKyAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgVFJBQ0UoeDExLCAiUmV0IFhGODZER0FHZXRWaWRlb1xuIik7CisgIHJldHVybiByOworfQorCitTdGF0dXMgVFNYRjg2REdBRGlyZWN0VmlkZW8oRGlzcGxheSphMCxpbnQgYTEsaW50IGEyKQoreworICBTdGF0dXMgcjsKKyAgVFJBQ0UoeDExLCAiQ2FsbCBYRjg2REdBRGlyZWN0VmlkZW9cbiIpOworICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICByID0gWEY4NkRHQURpcmVjdFZpZGVvKGEwLGExLGEyKTsKKyAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgVFJBQ0UoeDExLCAiUmV0IFhGODZER0FEaXJlY3RWaWRlb1xuIik7CisgIHJldHVybiByOworfQorCitTdGF0dXMgVFNYRjg2REdBR2V0Vmlld1BvcnRTaXplKERpc3BsYXkqYTAsaW50IGExLGludCAqYTIsaW50ICphMykKK3sKKyAgU3RhdHVzIHI7CisgIFRSQUNFKHgxMSwgIkNhbGwgWEY4NkRHQUdldFZpZXdQb3J0U2l6ZVxuIik7CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIHIgPSBYRjg2REdBR2V0Vmlld1BvcnRTaXplKGEwLGExLGEyLGEzKTsKKyAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgVFJBQ0UoeDExLCAiUmV0IFhGODZER0FHZXRWaWV3UG9ydFNpemVcbiIpOworICByZXR1cm4gcjsKK30KKworU3RhdHVzIFRTWEY4NkRHQVNldFZpZXdQb3J0KERpc3BsYXkqYTAsaW50IGExLGludCBhMixpbnQgYTMpCit7CisgIFN0YXR1cyByOworICBUUkFDRSh4MTEsICJDYWxsIFhGODZER0FTZXRWaWV3UG9ydFxuIik7CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIHIgPSBYRjg2REdBU2V0Vmlld1BvcnQoYTAsYTEsYTIsYTMpOworICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICBUUkFDRSh4MTEsICJSZXQgWEY4NkRHQVNldFZpZXdQb3J0XG4iKTsKKyAgcmV0dXJuIHI7Cit9CisKK1N0YXR1cyBUU1hGODZER0FJbnN0YWxsQ29sb3JtYXAoRGlzcGxheSphMCxpbnQgYTEsQ29sb3JtYXAgYTIpCit7CisgIFN0YXR1cyByOworICBUUkFDRSh4MTEsICJDYWxsIFhGODZER0FJbnN0YWxsQ29sb3JtYXBcbiIpOworICBFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICByID0gWEY4NkRHQUluc3RhbGxDb2xvcm1hcChhMCxhMSxhMik7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYRjg2REdBSW5zdGFsbENvbG9ybWFwXG4iKTsKKyAgcmV0dXJuIHI7Cit9CisKK1N0YXR1cyBUU1hGODZER0FRdWVyeURpcmVjdFZpZGVvKERpc3BsYXkqYTAsaW50IGExLGludCAqYTIpCit7CisgIFN0YXR1cyByOworICBUUkFDRSh4MTEsICJDYWxsIFhGODZER0FRdWVyeURpcmVjdFZpZGVvXG4iKTsKKyAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgciA9IFhGODZER0FRdWVyeURpcmVjdFZpZGVvKGEwLGExLGEyKTsKKyAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgVFJBQ0UoeDExLCAiUmV0IFhGODZER0FRdWVyeURpcmVjdFZpZGVvXG4iKTsKKyAgcmV0dXJuIHI7Cit9CisKK1N0YXR1cyBUU1hGODZER0FWaWV3UG9ydENoYW5nZWQoRGlzcGxheSphMCxpbnQgYTEsaW50IGEyKQoreworICBTdGF0dXMgcjsKKyAgVFJBQ0UoeDExLCAiQ2FsbCBYRjg2REdBVmlld1BvcnRDaGFuZ2VkXG4iKTsKKyAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKKyAgciA9IFhGODZER0FWaWV3UG9ydENoYW5nZWQoYTAsYTEsYTIpOworICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOworICBUUkFDRSh4MTEsICJSZXQgWEY4NkRHQVZpZXdQb3J0Q2hhbmdlZFxuIik7CisgIHJldHVybiByOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90c3gxMS90c194bGliLmMgYi90c3gxMS90c194bGliLmMKaW5kZXggMmUxNjNkZi4uNDBkNzI3ZiAxMDA2NDQKLS0tIGEvdHN4MTEvdHNfeGxpYi5jCisrKyBiL3RzeDExL3RzX3hsaWIuYwpAQCAtNzk4LDE3ICs3OTgsNiBAQAogICByZXR1cm4gcjsKIH0KIAotaW50ICBUU1hHcmFiUG9pbnRlcihEaXNwbGF5KiBhMCwgV2luZG93IGExLCBpbnQgYTIsIHVuc2lnbmVkIGludCBhMywgaW50IGE0LCBpbnQgYTUsIFdpbmRvdyBhNiwgQ3Vyc29yIGE3LCBUaW1lIGE4KQotewotICBpbnQgIHI7Ci0gIFRSQUNFKHgxMSwgIkNhbGwgWEdyYWJQb2ludGVyXG4iKTsKLSAgRW50ZXJDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKLSAgciA9IFhHcmFiUG9pbnRlcihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsKLSAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKLSAgVFJBQ0UoeDExLCAiUmV0IFhHcmFiUG9pbnRlclxuIik7Ci0gIHJldHVybiByOwotfQotCiBpbnQgIFRTWEdyYWJTZXJ2ZXIoRGlzcGxheSogYTApCiB7CiAgIGludCAgcjsKQEAgLTExNTAsNiArMTEzOSwxNyBAQAogICByZXR1cm4gcjsKIH0KIAoraW50ICBUU1hTZXRXaW5kb3dDb2xvcm1hcChEaXNwbGF5KiBhMCwgV2luZG93IGExLCBDb2xvcm1hcCBhMikKK3sKKyAgaW50ICByOworICBUUkFDRSh4MTEsICJDYWxsIFhTZXRXaW5kb3dDb2xvcm1hcFxuIik7CisgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIHIgPSBYU2V0V2luZG93Q29sb3JtYXAoYTAsIGExLCBhMik7CisgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgIFRSQUNFKHgxMSwgIlJldCBYU2V0V2luZG93Q29sb3JtYXBcbiIpOworICByZXR1cm4gcjsKK30KKwogaW50ICBUU1hTdG9yZUNvbG9yKERpc3BsYXkqIGEwLCBDb2xvcm1hcCBhMSwgWENvbG9yKiBhMikKIHsKICAgaW50ICByOwpAQCAtMTIwNSwxNyArMTIwNSw2IEBACiAgIHJldHVybiByOwogfQogCi1pbnQgIFRTWFVuZ3JhYlBvaW50ZXIoRGlzcGxheSogYTAsIFRpbWUgYTEpCi17Ci0gIGludCAgcjsKLSAgVFJBQ0UoeDExLCAiQ2FsbCBYVW5ncmFiUG9pbnRlclxuIik7Ci0gIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7Ci0gIHIgPSBYVW5ncmFiUG9pbnRlcihhMCwgYTEpOwotICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOwotICBUUkFDRSh4MTEsICJSZXQgWFVuZ3JhYlBvaW50ZXJcbiIpOwotICByZXR1cm4gcjsKLX0KLQogaW50ICBUU1hVbmdyYWJTZXJ2ZXIoRGlzcGxheSogYTApCiB7CiAgIGludCAgcjsKQEAgLTEyODEsMyArMTI3MCw0IEBACiAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CiAgIFRSQUNFKHgxMSwgIlJldCBfWEluaXRJbWFnZUZ1bmNQdHJzXG4iKTsKIH0KKwpkaWZmIC0tZ2l0IGEvdHN4MTEvdHNfeHBtLmMgYi90c3gxMS90c194cG0uYwppbmRleCBjYjI1MmI0Li5jYTVlMzM0IDEwMDY0NAotLS0gYS90c3gxMS90c194cG0uYworKysgYi90c3gxMS90c194cG0uYwpAQCAtMjksMyArMjksNCBAQAogICBUUkFDRSh4MTEsICJSZXQgWHBtQXR0cmlidXRlc1NpemVcbiIpOwogICByZXR1cm4gcjsKIH0KKwpkaWZmIC0tZ2l0IGEvdHN4MTEvdHNfeHJlc291cmNlLmMgYi90c3gxMS90c194cmVzb3VyY2UuYwppbmRleCA2YWVlOTBkLi41YmI1ZThiIDEwMDY0NAotLS0gYS90c3gxMS90c194cmVzb3VyY2UuYworKysgYi90c3gxMS90c194cmVzb3VyY2UuYwpAQCAtNzAsMyArNzAsNCBAQAogICBMZWF2ZUNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOwogICBUUkFDRSh4MTEsICJSZXQgWHJtUGFyc2VDb21tYW5kXG4iKTsKIH0KKwpkaWZmIC0tZ2l0IGEvdHN4MTEvdHNfeHNobS5jIGIvdHN4MTEvdHNfeHNobS5jCmluZGV4IGRmZTk0MzQuLmI2NzA1YWJhIDEwMDY0NAotLS0gYS90c3gxMS90c194c2htLmMKKysrIGIvdHN4MTEvdHNfeHNobS5jCkBAIC02MywzICs2Myw0IEBACiAgIFRSQUNFKHgxMSwgIlJldCBYU2htUHV0SW1hZ2VcbiIpOwogICByZXR1cm4gcjsKIH0KKwpkaWZmIC0tZ2l0IGEvdHN4MTEvdHNfeHV0aWwuYyBiL3RzeDExL3RzX3h1dGlsLmMKaW5kZXggOTU1NmM4Mi4uMGYxN2VhM2QgMTAwNjQ0Ci0tLSBhL3RzeDExL3RzX3h1dGlsLmMKKysrIGIvdHN4MTEvdHNfeHV0aWwuYwpAQCAtMzU3LDMgKzM1Nyw0IEBACiAgIFRSQUNFKHgxMSwgIlJldCBYVW5pcXVlQ29udGV4dFxuIik7CiAgIHJldHVybiByOwogfQorCmRpZmYgLS1naXQgYS93aW4zMi9NYWtlZmlsZS5pbiBiL3dpbjMyL01ha2VmaWxlLmluCmluZGV4IDM5Nzk4YWEuLmQ3OWM2NzAgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL01ha2VmaWxlLmluCkBAIC0yMSw4ICsyMSw3IEBACiAJc2VjdXJpdHkuYyBcCiAJc3RydWN0MzIuYyBcCiAJdGhyZWFkLmMgXAotCXRpbWUuYyBcCi0JdXNlcjMyLmMKKwl0aW1lLmMKIAogYWxsOiAkKE1PRFVMRSkubwogCmRpZmYgLS1naXQgYS93aW4zMi9hZHZhcGkuYyBiL3dpbjMyL2FkdmFwaS5jCmluZGV4IGQyZmY2NWYuLjkxMTBhZjggMTAwNjQ0Ci0tLSBhL3dpbjMyL2FkdmFwaS5jCisrKyBiL3dpbjMyL2FkdmFwaS5jCkBAIC0yNDYsNiArMjQ2LDMyIEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNldEZpbGVTZWN1cml0eUEgWzMyLjE4Ml0KKyAqIFNldHMgdGhlIHNlY3VyaXR5IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkKKyAqLworCitCT09MMzIgV0lOQVBJIFNldEZpbGVTZWN1cml0eTMyQSggTFBDU1RSIGxwRmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0lORk9STUFUSU9OIFJlcXVlc3RlZEluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgcFNlY3VyaXR5RGVzY3JpcHRvcikKK3sKKyAgRklYTUUoYWR2YXBpLCAiKCVzKSA6IHN0dWJcbiIsIGRlYnVnc3RyX2EobHBGaWxlTmFtZSkpOworICByZXR1cm4gVFJVRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2V0RmlsZVNlY3VyaXR5VyBbMzIuMTgzXQorICogU2V0cyB0aGUgc2VjdXJpdHkgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeQorICovCisKK0JPT0wzMiBXSU5BUEkgU2V0RmlsZVNlY3VyaXR5MzJXKCBMUENXU1RSIGxwRmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0lORk9STUFUSU9OIFJlcXVlc3RlZEluZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFNFQ1VSSVRZX0RFU0NSSVBUT1IgcFNlY3VyaXR5RGVzY3JpcHRvcikKK3sKKyAgRklYTUUoYWR2YXBpLCAiKCVzKSA6IHN0dWJcbiIsIGRlYnVnc3RyX3cobHBGaWxlTmFtZSkgKTsgCisgIHJldHVybiBUUlVFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBPcGVuU2VydmljZTMyQSBbQURWQVBJMzIuMTEyXQogICovCiBIQU5ETEUzMiBXSU5BUEkgT3BlblNlcnZpY2UzMkEoIEhBTkRMRTMyIGhTQ01hbmFnZXIsIExQQ1NUUiBscFNlcnZpY2VOYW1lLApkaWZmIC0tZ2l0IGEvd2luMzIvdXNlcjMyLmMgYi93aW4zMi91c2VyMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmExZmRhMS4uMDAwMDAwMAotLS0gYS93aW4zMi91c2VyMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBXaW4zMiB1c2VyIGZ1bmN0aW9ucwotICoKLSAqIENvcHlyaWdodCAxOTk1IE1hcnRpbiB2b24gTG9ld2lzCi0gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgd3JhcHBlcnMgdG8gZXhpc3RpbmcgV2luZSBmdW5jdGlvbnMgb3IgdHJpdmlhbAotICAgc3R1YnMuICdSZWFsJyBpbXBsZW1lbnRhdGlvbnMgZ28gaW50byBjb250ZXh0IHNwZWNpZmljIGZpbGVzICovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJ3aW5kb3dzLmgiCi0jaW5jbHVkZSAid2luZXJyb3IuaCIKLSNpbmNsdWRlICJoZWFwLmgiCi0jaW5jbHVkZSAic3RydWN0MzIuaCIKLSNpbmNsdWRlICJ3aW4uaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgIEdldE1lc3NhZ2UzMkEgICAoVVNFUjMyLjI3MCkKLSAqLwotQk9PTDMyIFdJTkFQSSBHZXRNZXNzYWdlMzJBKE1TRzMyKiBscG1zZyxIV05EMzIgaHduZCxVSU5UMzIgbWluLFVJTlQzMiBtYXgpCi17Ci0gICAgQk9PTDMyIHJldDsKLSAgICBNU0cxNiAqbXNnID0gU0VHUFRSX05FVyhNU0cxNik7Ci0gICAgaWYgKCFtc2cpIHJldHVybiAwOwotICAgIHJldD1HZXRNZXNzYWdlMTYoU0VHUFRSX0dFVChtc2cpLChIV05EMTYpaHduZCxtaW4sbWF4KTsKLSAgICAvKiBGSVhNRSAqLwotICAgIFNUUlVDVDMyX01TRzE2dG8zMihtc2csbHBtc2cpOwotICAgIFNFR1BUUl9GUkVFKG1zZyk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICBHZXRNZXNzYWdlMzJXICAgKFVTRVIzMi4yNzQpCi0gKi8KLUJPT0wzMiBXSU5BUEkgR2V0TWVzc2FnZTMyVyhNU0czMiogbHBtc2csSFdORDMyIGh3bmQsVUlOVDMyIG1pbixVSU5UMzIgbWF4KQotewotICAgIEJPT0wzMiByZXQ7Ci0gICAgTVNHMTYgKm1zZyA9IFNFR1BUUl9ORVcoTVNHMTYpOwotICAgIGlmICghbXNnKSByZXR1cm4gMDsKLSAgICByZXQ9R2V0TWVzc2FnZTE2KFNFR1BUUl9HRVQobXNnKSwoSFdORDE2KWh3bmQsbWluLG1heCk7Ci0gICAgLyogRklYTUUgKi8KLSAgICBTVFJVQ1QzMl9NU0cxNnRvMzIobXNnLGxwbXNnKTsKLSAgICBTRUdQVFJfRlJFRShtc2cpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBQZWVrTWVzc2FnZUEKLSAqLwotQk9PTDMyIFdJTkFQSSBQZWVrTWVzc2FnZTMyQSggTFBNU0czMiBscG1zZywgSFdORDMyIGh3bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbWluLFVJTlQzMiBtYXgsVUlOVDMyIHdSZW1vdmVNc2cpCi17Ci0JTVNHMTYgbXNnOwotCUJPT0wzMiByZXQ7Ci0JcmV0PVBlZWtNZXNzYWdlMTYoJm1zZyxod25kLG1pbixtYXgsd1JlbW92ZU1zZyk7Ci0gICAgICAgIC8qIEZJWE1FOiBzaG91bGQgdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHRvIFdpbjMyICovCi0JU1RSVUNUMzJfTVNHMTZ0bzMyKCZtc2csbHBtc2cpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBQZWVrTWVzc2FnZVcKLSAqLwotQk9PTDMyIFdJTkFQSSBQZWVrTWVzc2FnZTMyVyggTFBNU0czMiBscG1zZywgSFdORDMyIGh3bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbWluLFVJTlQzMiBtYXgsVUlOVDMyIHdSZW1vdmVNc2cpCi17Ci0JLyogRklYTUU6IFNob3VsZCBwZXJmb3JtIFVuaWNvZGUgdHJhbnNsYXRpb24gb24gc3BlY2lmaWMgbWVzc2FnZXMgKi8KLQlyZXR1cm4gUGVla01lc3NhZ2UzMkEobHBtc2csaHduZCxtaW4sbWF4LHdSZW1vdmVNc2cpOwotfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IDMyNTdkM2QuLjNjYWE0YjkgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTM4NywxOSArMzg3LDIyIEBACiAKICAgICAvKiBQcm9jZXNzIGN1cnJlbnQgWCBldmVudCAoYW5kIHBvc3NpYmx5IG90aGVycyB0aGF0IG9jY3VycmVkIGluIHRoZSBtZWFudGltZSkgKi8KIAotICAgIHdoaWxlIChUU1hQZW5kaW5nKCBkaXNwbGF5ICkpCisgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJlgxMURSVl9Dcml0U2VjdGlvbik7CisgICAgd2hpbGUgKFhQZW5kaW5nKCBkaXNwbGF5ICkpCiAgICAgewogCiAjaWZkZWYgQ09ORklHX0lQQwogICAgICAgICBpZiAoRERFX0dldFJlbW90ZU1lc3NhZ2UoKSkKICAgICAgICAgeworICAgICAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlgxMURSVl9Dcml0U2VjdGlvbik7CiAgICAgICAgICAgICB3aGlsZShEREVfR2V0UmVtb3RlTWVzc2FnZSgpKSA7CiAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgfQogI2VuZGlmICAvKiBDT05GSUdfSVBDICovCiAKLQlUU1hOZXh0RXZlbnQoIGRpc3BsYXksICZldmVudCApOworCVhOZXh0RXZlbnQoIGRpc3BsYXksICZldmVudCApOwogCisgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZYMTFEUlZfQ3JpdFNlY3Rpb24pOwogICAgICAgICBpZiggcGVlayApCiAgICAgICAgIHsKIAkgIFdORCoJCXBXbmQ7CkBAIC00MzMsNyArNDM2LDkgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBFVkVOVF9Qcm9jZXNzRXZlbnQoICZldmVudCApOworICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmWDExRFJWX0NyaXRTZWN0aW9uKTsKICAgICB9CisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlgxMURSVl9Dcml0U2VjdGlvbik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTQ0NywxMiArNDUyLDIwIEBACiB7CiAgICAgWEV2ZW50IGV2ZW50OwogCi0gICAgVFNYU3luYyggZGlzcGxheSwgRmFsc2UgKTsKLSAgICB3aGlsZSAoVFNYUGVuZGluZyggZGlzcGxheSApKQorICAgIC8qIFVzZSBvZiB0aGUgWCBjcml0aWNhbCBzZWN0aW9uIGlzIG5lZWRlZCBvciB3ZSBoYXZlIGEgc21hbGwKKyAgICAgKiByYWNlIGJldHdlZW4gWFBlbmRpbmcoKSBhbmQgWE5leHRFdmVudCgpLgorICAgICAqLworICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CisgICAgWFN5bmMoIGRpc3BsYXksIEZhbHNlICk7CisgICAgd2hpbGUgKFhQZW5kaW5nKCBkaXNwbGF5ICkpCiAgICAgewotCVRTWE5leHRFdmVudCggZGlzcGxheSwgJmV2ZW50ICk7CisJWE5leHRFdmVudCggZGlzcGxheSwgJmV2ZW50ICk7CisJLyogdW5sb2NrIFggY3JpdHNlY3Rpb24gZm9yIEVWRU5UX1Byb2Nlc3NFdmVudCgpIG1pZ2h0IHN3aXRjaCB0YXNrcyAqLworCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCAmWDExRFJWX0NyaXRTZWN0aW9uICk7CiAJRVZFTlRfUHJvY2Vzc0V2ZW50KCAmZXZlbnQgKTsKKwlFbnRlckNyaXRpY2FsU2VjdGlvbiggJlgxMURSVl9Dcml0U2VjdGlvbiApOwogICAgIH0gICAgCisgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oICZYMTFEUlZfQ3JpdFNlY3Rpb24gKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTI2LDE4ICsxMTM5LDEzIEBACiAKICAgICBpZiAoIWh3bmQpCiAgICAgewotICAgICAgICBUU1hVbmdyYWJQb2ludGVyKGRpc3BsYXksIEN1cnJlbnRUaW1lICk7Ci0gICAgICAgIGNhcHR1cmVXbmQgPSBOVUxMOyBjYXB0dXJlSFQgPSAwOyAKKyAgICAgICAgY2FwdHVyZVduZCA9IE5VTEw7CisgICAgICAgIGNhcHR1cmVIVCA9IDA7IAogICAgIH0KLSAgICBlbHNlIGlmICgod2luID0gV0lOX0dldFhXaW5kb3coIGh3bmQgKSkpCisgICAgZWxzZQogICAgIHsKIAlXTkQqIHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7Ci0KLSAgICAgICAgaWYgKCB3bmRQdHIgJiYgCi0JICAgICAoVFNYR3JhYlBvaW50ZXIoZGlzcGxheSwgd2luLCBGYWxzZSwgCi0JCQkgICBCdXR0b25QcmVzc01hc2sgfCBCdXR0b25SZWxlYXNlTWFzayB8IFBvaW50ZXJNb3Rpb25NYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhYk1vZGVBc3luYywgR3JhYk1vZGVBc3luYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIEN1cnJlbnRUaW1lICkgPT0gR3JhYlN1Y2Nlc3MpICkKKyAgICAgICAgaWYgKHduZFB0cikKIAl7CiAgICAgICAgICAgICBUUkFDRSh3aW4sICIoMHglMDR4KVxuIiwgaHduZCApOwogICAgICAgICAgICAgY2FwdHVyZVduZCAgID0gaHduZDsKZGlmZiAtLWdpdCBhL3dpbmRvd3Mva2V5Ym9hcmQuYyBiL3dpbmRvd3Mva2V5Ym9hcmQuYwppbmRleCAxZTIwMzM5Li5hYzRiNTQyIDEwMDY0NAotLS0gYS93aW5kb3dzL2tleWJvYXJkLmMKKysrIGIvd2luZG93cy9rZXlib2FyZC5jCkBAIC0xNjksNiArMTY5LDcgQEAKICAgICBLZXlDb2RlICprY3A7CiAgICAgWEtleUV2ZW50IGUyOwogICAgIFdPUkQgdmtleSwgT0VNdmtleTsKKyAgICBpbnQga2V5YzsKIAogICAgIFRTWERpc3BsYXlLZXljb2RlcyhkaXNwbGF5LCAmbWluX2tleWNvZGUsICZtYXhfa2V5Y29kZSk7CiAgICAga3NwID0gVFNYR2V0S2V5Ym9hcmRNYXBwaW5nKGRpc3BsYXksIG1pbl9rZXljb2RlLApAQCAtMjEwLDggKzIxMSw5IEBACiAgICAgZTIuc3RhdGUgPSAwOwogCiAgICAgT0VNdmtleSA9IFZLX09FTV83OyAvKiBuZXh0IGlzIGF2YWlsYWJsZS4gICovCi0gICAgZm9yIChlMi5rZXljb2RlPW1pbl9rZXljb2RlOyBlMi5rZXljb2RlPD1tYXhfa2V5Y29kZTsgZTIua2V5Y29kZSsrKQorICAgIGZvciAoa2V5YyA9IG1pbl9rZXljb2RlOyBrZXljIDw9IG1heF9rZXljb2RlOyBrZXljKyspCiAgICAgeworICAgICAgICBlMi5rZXljb2RlID0gKEtleUNvZGUpa2V5YzsKICAgICAgICAgVFNYTG9va3VwU3RyaW5nKCZlMiwgTlVMTCwgMCwgJmtleXN5bSwgTlVMTCk7CiAgICAgICAgIHZrZXkgPSAwOwogICAgICAgICBpZiAoa2V5c3ltKSAgLyogb3RoZXJ3aXNlLCBrZXljb2RlIG5vdCB1c2VkICovCkBAIC05NzksNyArOTgxLDcgQEAKIAlzd2l0Y2god01hcFR5cGUpIHsKIAkJY2FzZSAwOgl7IC8qIHZrZXktY29kZSB0byBzY2FuLWNvZGUgKi8KIAkJCS8qIGxldCdzIGRvIHZrZXkgLT4ga2V5Y29kZSAtPiBzY2FuICovCi0JCQlLZXlDb2RlIGtleWM7CisJCQlpbnQga2V5YzsKIAkJCWZvciAoa2V5Yz1taW5fa2V5Y29kZTsga2V5Yzw9bWF4X2tleWNvZGU7IGtleWMrKykgLyogc2VlIGV2ZW50LmMgKi8KIAkJCQlpZiAoKGtleWMydmtleVtrZXljXSAmIDB4RkYpPT0gd0NvZGUpCiAJCQkJCXJldHVybk1WSyAoa2V5YyAtIDgpOwpAQCAtMTA5OSw3ICsxMTAxLDcgQEAKICAgICBLZXlTeW0ga2V5c3ltOwogICAgIHN0YXRpYyBYQ29tcG9zZVN0YXR1cyBjczsKICAgICBJTlQzMiByZXQ7Ci0gICAgV09SRCBrZXljOworICAgIGludCBrZXljOwogCiAgICAgZS5kaXNwbGF5ID0gZGlzcGxheTsKICAgICBlLmtleWNvZGUgPSAwOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZGkuYyBiL3dpbmRvd3MvbWRpLmMKaW5kZXggYjMwNWJhMC4uMzQ3OGNiNCAxMDA2NDQKLS0tIGEvd2luZG93cy9tZGkuYworKysgYi93aW5kb3dzL21kaS5jCkBAIC02MjEsOSArNjIxLDExIEBACiAJICAgIGlmKCB0b3RhbCA8IGNpLT5uQWN0aXZlQ2hpbGRyZW4gKQogCQlkZWx0YSA9IFNZU01FVFJJQ1NfQ1lJQ09OU1BBQ0lORyArIFNZU01FVFJJQ1NfQ1lJQ09OOwogCi0JICAgIC8qIHdhbGsgdGhlIGxpc3QgYW5kIG1vdmUgd2luZG93cyAqLwotCSAgICB3aGlsZSAoICpwcFduZCApCisJICAgIC8qIHdhbGsgdGhlIGxpc3QgKGJhY2t3YXJkcykgYW5kIG1vdmUgd2luZG93cyAqLworICAgICAgICAgICAgd2hpbGUgKCpwcFduZCkgcHBXbmQrKzsKKwkgICAgd2hpbGUgKHBwV25kICE9IGhlYXBQdHIpCiAJICAgIHsKKyAgICAgICAgICAgICAgICBwcFduZC0tOwogCQlUUkFDRShtZGksICJtb3ZlICUwNHggdG8gKCVkLCVkKSBzaXplIFslZCwlZF1cbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqcHBXbmQpLT5od25kU2VsZiwgcG9zWzBdLngsIHBvc1swXS55LCBwb3NbMV0ueCwgcG9zWzFdLnkpOwogCkBAIC02MzEsNyArNjMzLDYgQEAKIAkJU2V0V2luZG93UG9zMzIoICgqcHBXbmQpLT5od25kU2VsZiwgMCwgcG9zWzBdLngsIHBvc1swXS55LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NbMV0ueCwgcG9zWzFdLnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNXUF9EUkFXRlJBTUUgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT1pPUkRFUik7Ci0JCXBwV25kKys7CiAJICAgIH0KIAl9CiAJSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIGhlYXBQdHIgKTsKZGlmZiAtLWdpdCBhL3dpbmRvd3MvbWVzc2FnZS5jIGIvd2luZG93cy9tZXNzYWdlLmMKaW5kZXggODI2MzhlZC4uZmEzNTFiMCAxMDA2NDQKLS0tIGEvd2luZG93cy9tZXNzYWdlLmMKKysrIGIvd2luZG93cy9tZXNzYWdlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJwcm9jZXNzLmgiCiAjaW5jbHVkZSAidGhyZWFkLmgiCiAjaW5jbHVkZSAib3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cnVjdDMyLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIAogI2RlZmluZSBXTV9OQ01PVVNFRklSU1QgICAgICAgICBXTV9OQ01PVVNFTU9WRQpAQCAtOTI3LDYgKzkyOCwyOSBAQAogICAgIHJldHVybiBNU0dfUGVla01lc3NhZ2UoIG1zZywgaHduZCwgZmlyc3QsIGxhc3QsIGZsYWdzLCBUUlVFICk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBQZWVrTWVzc2FnZUEKKyAqLworQk9PTDMyIFdJTkFQSSBQZWVrTWVzc2FnZTMyQSggTFBNU0czMiBscG1zZywgSFdORDMyIGh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbWluLFVJTlQzMiBtYXgsVUlOVDMyIHdSZW1vdmVNc2cpCit7CisJTVNHMTYgbXNnOworCUJPT0wzMiByZXQ7CisJcmV0PVBlZWtNZXNzYWdlMTYoJm1zZyxod25kLG1pbixtYXgsd1JlbW92ZU1zZyk7CisgICAgICAgIC8qIEZJWE1FOiBzaG91bGQgdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHRvIFdpbjMyICovCisJU1RSVUNUMzJfTVNHMTZ0bzMyKCZtc2csbHBtc2cpOworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICBQZWVrTWVzc2FnZVcKKyAqLworQk9PTDMyIFdJTkFQSSBQZWVrTWVzc2FnZTMyVyggTFBNU0czMiBscG1zZywgSFdORDMyIGh3bmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzIgbWluLFVJTlQzMiBtYXgsVUlOVDMyIHdSZW1vdmVNc2cpCit7CisJLyogRklYTUU6IFNob3VsZCBwZXJmb3JtIFVuaWNvZGUgdHJhbnNsYXRpb24gb24gc3BlY2lmaWMgbWVzc2FnZXMgKi8KKwlyZXR1cm4gUGVla01lc3NhZ2UzMkEobHBtc2csaHduZCxtaW4sbWF4LHdSZW1vdmVNc2cpOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRNZXNzYWdlMTYgICAoVVNFUi4xMDgpCkBAIC05NDMsNiArOTY3LDM2IEBACiAgICAgcmV0dXJuIChscG1zZy0+bWVzc2FnZSAhPSBXTV9RVUlUKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICBHZXRNZXNzYWdlMzJBICAgKFVTRVIzMi4yNzApCisgKi8KK0JPT0wzMiBXSU5BUEkgR2V0TWVzc2FnZTMyQShNU0czMiogbHBtc2csSFdORDMyIGh3bmQsVUlOVDMyIG1pbixVSU5UMzIgbWF4KQoreworICAgIEJPT0wzMiByZXQ7CisgICAgTVNHMTYgKm1zZyA9IFNFR1BUUl9ORVcoTVNHMTYpOworICAgIGlmICghbXNnKSByZXR1cm4gMDsKKyAgICByZXQ9R2V0TWVzc2FnZTE2KFNFR1BUUl9HRVQobXNnKSwoSFdORDE2KWh3bmQsbWluLG1heCk7CisgICAgLyogRklYTUUgKi8KKyAgICBTVFJVQ1QzMl9NU0cxNnRvMzIobXNnLGxwbXNnKTsKKyAgICBTRUdQVFJfRlJFRShtc2cpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgR2V0TWVzc2FnZTMyVyAgIChVU0VSMzIuMjc0KQorICovCitCT09MMzIgV0lOQVBJIEdldE1lc3NhZ2UzMlcoTVNHMzIqIGxwbXNnLEhXTkQzMiBod25kLFVJTlQzMiBtaW4sVUlOVDMyIG1heCkKK3sKKyAgICBCT09MMzIgcmV0OworICAgIE1TRzE2ICptc2cgPSBTRUdQVFJfTkVXKE1TRzE2KTsKKyAgICBpZiAoIW1zZykgcmV0dXJuIDA7CisgICAgcmV0PUdldE1lc3NhZ2UxNihTRUdQVFJfR0VUKG1zZyksKEhXTkQxNilod25kLG1pbixtYXgpOworICAgIC8qIEZJWE1FICovCisgICAgU1RSVUNUMzJfTVNHMTZ0bzMyKG1zZyxscG1zZyk7CisgICAgU0VHUFRSX0ZSRUUobXNnKTsKKyAgICByZXR1cm4gcmV0OworfQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFBvc3RNZXNzYWdlMTYgICAoVVNFUi4xMTApCmRpZmYgLS1naXQgYS93aW5kb3dzL25vbmNsaWVudC5jIGIvd2luZG93cy9ub25jbGllbnQuYwppbmRleCBmOTkxN2VlLi44YWI4YWJmIDEwMDY0NAotLS0gYS93aW5kb3dzL25vbmNsaWVudC5jCisrKyBiL3dpbmRvd3Mvbm9uY2xpZW50LmMKQEAgLTI2LDE0ICsyNiw5IEBACiAjaW5jbHVkZSAib3B0aW9ucy5oIgogCiAKLWludCAgTkNfQ2FwdGlvbkxlZnROdWRnZTsKLWludCAgTkNfQ2FwdGlvblRvcE51ZGdlOwotaW50ICBOQ19TeXNDb250cm9sTnVkZ2U7CiBpbnQgIE5DX01heENvbnRyb2xOdWRnZTsKIGludCAgTkNfTWluQ29udHJvbE51ZGdlOwogVUlOVDMyICBOQ19DYXB0aW9uVGV4dEZsYWdzOwotSEJSVVNIMzIgIE5DX1dpbkhpZ2hsaWdodDk1OwotSEJSVVNIMzIgIE5DX1dpblNoYWRvdzk1OwogCiBzdGF0aWMgSEJJVE1BUDE2IGhiaXRtYXBDbG9zZSA9IDA7CiBzdGF0aWMgSEJJVE1BUDE2IGhiaXRtYXBDbG9zZUQgPSAwOwpAQCAtMTc2LDcgKzE3MSw2IEBACiAJCXJlY3QtPnRvcCAtPSBTWVNNRVRSSUNTX0NZU01DQVBUSU9OOwogCSAgICBlbHNlCiAJCXJlY3QtPnRvcCAtPSBTWVNNRVRSSUNTX0NZQ0FQVElPTjsKLS8vICAgICAgICAgICAgcmVjdC0+dG9wIC09IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXTsKICAgICB9CiAKICAgICBpZiAobWVudSkKQEAgLTU3MCw3ICs1NjQsNyBAQAogICoKICAqIEhhbmRsZSBhIFdNX05DSElUVEVTVCBtZXNzYWdlLiBDYWxsZWQgZnJvbSBOQ19IYW5kbGVOQ0hpdFRlc3QoKS4KICAqCi0gKiBGSVhNRTogIEp1c3QgYSBjb3B5IG9mIHRoZSBXaW4gMy4xIHZlcnNpb24uCisgKiBGSVhNRTogIEp1c3QgYSBtb2RpZmllZCBjb3B5IG9mIHRoZSBXaW4gMy4xIHZlcnNpb24uCiAgKi8KIAogTE9ORwpAQCAtODI4LDExICs4MjIsMTUgQEAKIAkgICAgaEljb24gPSB3bmRQdHItPmNsYXNzLT5oSWNvblNtOwogCWVsc2UgaWYgKHduZFB0ci0+Y2xhc3MtPmhJY29uKQogCSAgICBoSWNvbiA9IHduZFB0ci0+Y2xhc3MtPmhJY29uOworLy8JZWxzZQorLy8JICAgIGhJY29uID0gTG9hZEljb24zMkEgKDAsIElESV9BUFBMSUNBVElPTik7CiAKIAlpZiAoaEljb24pCiAJICAgIERyYXdJY29uRXgzMiAoaGRjLCByZWN0LmxlZnQgKyAyLCByZWN0LnRvcCArIDEsIGhJY29uLAotCQkJICBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAzLAotCQkJICBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAzLCAwLCAwLCBESV9OT1JNQUwpOworCQkJICBzeXNNZXRyaWNzW1NNX0NYU01JQ09OXSwKKwkJCSAgc3lzTWV0cmljc1tTTV9DWVNNSUNPTl0sCisJCQkgIDAsIDAsIERJX05PUk1BTCk7CisKIAlyZXR1cm4gKGhJY29uICE9IDApOwogICAgIH0KICAgICByZXR1cm4gRkFMU0U7CmRpZmYgLS1naXQgYS93aW5kb3dzL3VzZXIuYyBiL3dpbmRvd3MvdXNlci5jCmluZGV4IDBhNjYxMWEuLjk3Y2M3NzMgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvdXNlci5jCisrKyBiL3dpbmRvd3MvdXNlci5jCkBAIC0zMDQsNiArMzA0LDMzIEBACiAgICAgcmV0dXJuIEZBTFNFOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIENoYW5nZURpc3BsYXlTZXR0aW5nQSAgICAoVVNFUjMyLjU4OSkKKyAqLworTE9ORyBXSU5BUEkgQ2hhbmdlRGlzcGxheVNldHRpbmdzMzJBKCBMUERFVk1PREUzMkEgZGV2bW9kZSwgRFdPUkQgZmxhZ3MgKQoreworICBGSVhNRShzeXN0ZW0sICI6IHN0dWJcbiIpOworICBpZiAoZGV2bW9kZT09TlVMTCkKKyAgICBGSVhNRShzeXN0ZW0sIiAgIGRldm1vZGU9TlVMTCAocmV0dXJuIHRvIGRlZmF1bHQgbW9kZSlcbiIpOworICBlbHNlIGlmICggKGRldm1vZGUtPmRtQml0c1BlclBlbCAhPSBEZWZhdWx0RGVwdGhPZlNjcmVlbihzY3JlZW4pKSAKKwkgICAgfHwgKGRldm1vZGUtPmRtUGVsc0hlaWdodCAhPSBzY3JlZW5IZWlnaHQpCisJICAgIHx8IChkZXZtb2RlLT5kbVBlbHNXaWR0aCAhPSBzY3JlZW5XaWR0aCkgKQorCisgIHsKKworICAgIGlmIChkZXZtb2RlLT5kbUZpZWxkcyAmIERNX0JJVFNQRVJQRUwpCisgICAgICBGSVhNRShzeXN0ZW0sIiAgIGJwcD0lbGRcbiIsZGV2bW9kZS0+ZG1CaXRzUGVyUGVsKTsKKyAgICBpZiAoZGV2bW9kZS0+ZG1GaWVsZHMgJiBETV9QRUxTV0lEVEgpCisgICAgICBGSVhNRShzeXN0ZW0sIiAgIHdpZHRoPSVsZFxuIixkZXZtb2RlLT5kbVBlbHNXaWR0aCk7CisgICAgaWYgKGRldm1vZGUtPmRtRmllbGRzICYgRE1fUEVMU0hFSUdIVCkKKyAgICAgIEZJWE1FKHN5c3RlbSwiICAgaGVpZ2h0PSVsZFxuIixkZXZtb2RlLT5kbVBlbHNIZWlnaHQpOworICAgIEZJWE1FKHN5c3RlbSwiIChQdXR0aW5nIFggaW4gdGhpcyBtb2RlIGJlZm9yZWhhbmQgbWlnaHQgaGVscClcbiIpOyAKKyAgfQorICByZXR1cm4gRElTUF9DSEFOR0VfU1VDQ0VTU0ZVTDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBFbnVtRGlzcGxheVNldHRpbmdzQSAgIChVU0VSMzIuNTkyKQogICovCg==