LyogdGZtLmgKICoKICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTQgd29sZlNTTCBJbmMuCiAqCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEN5YVNTTC4KICoKICogQ3lhU1NMIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogQ3lhU1NMIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKLyoKICogQmFzZWQgb24gcHVibGljIGRvbWFpbiBUb21zRmFzdE1hdGggMC4xMCBieSBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAaWFodS5jYSwKICogaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCiAqLwoKCi8qKgogKiAgRWRpdGVkIGJ5IE1vaXPpcyBHdWltYXLjZXMgKG1vaXNlcy5ndWltYXJhZXNAcGhvZWJ1cy5jb20uYnIpCiAqICB0byBmaXQgQ3lhU1NMJ3MgbmVlZHMuCiAqLwoKCiNpZm5kZWYgQ1RBT19DUllQVF9URk1fSAojZGVmaW5lIENUQU9fQ1JZUFRfVEZNX0gKCiNpbmNsdWRlIDxjeWFzc2wvY3Rhb2NyeXB0L3R5cGVzLmg+CiNpZm5kZWYgQ0hBUl9CSVQKICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KI2VuZGlmCgoKI2lmZGVmIF9fY3BsdXNwbHVzCiAgICBleHRlcm4gIkMiIHsKI2VuZGlmCgojaWZuZGVmIE1JTgogICAjZGVmaW5lIE1JTih4LHkpICgoeCk8KHkpPyh4KTooeSkpCiNlbmRpZgoKI2lmbmRlZiBNQVgKICAgI2RlZmluZSBNQVgoeCx5KSAoKHgpPih5KT8oeCk6KHkpKQojZW5kaWYKCgojaWZuZGVmIE5PXzY0QklUCi8qIGF1dG9kZXRlY3QgeDg2LTY0IGFuZCBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIDY0LWJpdCBkaWdpdHMgd2l0aCB4ODYtNjQgYXNtICovCiNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiAgICNpZiBkZWZpbmVkKFRGTV9YODYpIHx8IGRlZmluZWQoVEZNX1NTRTIpIHx8IGRlZmluZWQoVEZNX0FSTSkgCiAgICAgICAjZXJyb3IgeDg2LTY0IGRldGVjdGVkLCB4ODYtMzIvU1NFMi9BUk0gb3B0aW1pemF0aW9ucyBhcmUgbm90IHZhbGlkIQogICAjZW5kaWYKICAgI2lmICFkZWZpbmVkKFRGTV9YODZfNjQpICYmICFkZWZpbmVkKFRGTV9OT19BU00pCiAgICAgICNkZWZpbmUgVEZNX1g4Nl82NAogICAjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKFRGTV9YODZfNjQpCiAgICAjaWYgIWRlZmluZWQoRlBfNjRCSVQpCiAgICAgICAjZGVmaW5lIEZQXzY0QklUCiAgICAjZW5kaWYKI2VuZGlmCi8qIHVzZSA2NC1iaXQgZGlnaXQgZXZlbiBpZiBub3QgdXNpbmcgYXNtIG9uIHg4Nl82NCAqLwojaWYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChGUF82NEJJVCkKICAgICNkZWZpbmUgRlBfNjRCSVQKI2VuZGlmCi8qIGlmIGludGVsIGNvbXBpbGVyIGRvZXNuJ3QgcHJvdmlkZSAxMjggYml0IHR5cGUgZG9uJ3QgdHVybiBvbiA2NGJpdCAqLwojaWYgZGVmaW5lZChGUF82NEJJVCkgJiYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSAmJiAhZGVmaW5lZChIQVZFX19fVUlOVDEyOF9UKQogICAgI3VuZGVmIEZQXzY0QklUCiAgICAjdW5kZWYgVEZNX1g4Nl82NAojZW5kaWYKI2VuZGlmIC8qIE5PXzY0QklUICovCgovKiB0cnkgdG8gZGV0ZWN0IHg4Ni0zMiAqLwojaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoVEZNX1NTRTIpCiAgICNpZiBkZWZpbmVkKFRGTV9YODZfNjQpIHx8IGRlZmluZWQoVEZNX0FSTSkgCiAgICAgICAjZXJyb3IgeDg2LTMyIGRldGVjdGVkLCB4ODYtNjQvQVJNIG9wdGltaXphdGlvbnMgYXJlIG5vdCB2YWxpZCEKICAgI2VuZGlmCiAgICNpZiAhZGVmaW5lZChURk1fWDg2KSAmJiAhZGVmaW5lZChURk1fTk9fQVNNKQogICAgICAjZGVmaW5lIFRGTV9YODYKICAgI2VuZGlmCiNlbmRpZgoKLyogbWFrZSBzdXJlIHdlJ3JlIDMyLWJpdCBmb3IgeDg2LTMyL3NzZS9hcm0vcHBjMzIgKi8KI2lmIChkZWZpbmVkKFRGTV9YODYpIHx8IGRlZmluZWQoVEZNX1NTRTIpIHx8IGRlZmluZWQoVEZNX0FSTSkgfHwgZGVmaW5lZChURk1fUFBDMzIpKSAmJiBkZWZpbmVkKEZQXzY0QklUKQogICAjd2FybmluZyB4ODYtMzIsIFNTRTIgYW5kIEFSTSwgUFBDMzIgb3B0aW1pemF0aW9ucyByZXF1aXJlIDMyLWJpdCBkaWdpdHMgKHVuZGVmaW5pbmcpCiAgICN1bmRlZiBGUF82NEJJVAojZW5kaWYKCi8qIG11bHRpIGFzbXM/ICovCiNpZmRlZiBURk1fWDg2CiAgICNkZWZpbmUgVEZNX0FTTQojZW5kaWYKI2lmZGVmIFRGTV9YODZfNjQKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX1NTRTIKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX0FSTQogICAjaWZkZWYgVEZNX0FTTQogICAgICAjZXJyb3IgVEZNX0FTTSBhbHJlYWR5IGRlZmluZWQhCiAgICNlbmRpZgogICAjZGVmaW5lIFRGTV9BU00KI2VuZGlmCiNpZmRlZiBURk1fUFBDMzIKICAgI2lmZGVmIFRGTV9BU00KICAgICAgI2Vycm9yIFRGTV9BU00gYWxyZWFkeSBkZWZpbmVkIQogICAjZW5kaWYKICAgI2RlZmluZSBURk1fQVNNCiNlbmRpZgojaWZkZWYgVEZNX1BQQzY0CiAgICNpZmRlZiBURk1fQVNNCiAgICAgICNlcnJvciBURk1fQVNNIGFscmVhZHkgZGVmaW5lZCEKICAgI2VuZGlmCiAgICNkZWZpbmUgVEZNX0FTTQojZW5kaWYKI2lmZGVmIFRGTV9BVlIzMgogICAjaWZkZWYgVEZNX0FTTQogICAgICAjZXJyb3IgVEZNX0FTTSBhbHJlYWR5IGRlZmluZWQhCiAgICNlbmRpZgogICAjZGVmaW5lIFRGTV9BU00KI2VuZGlmCgovKiB3ZSB3YW50IG5vIGFzbT8gKi8KI2lmZGVmIFRGTV9OT19BU00KICAgI3VuZGVmIFRGTV9YODYKICAgI3VuZGVmIFRGTV9YODZfNjQKICAgI3VuZGVmIFRGTV9TU0UyCiAgICN1bmRlZiBURk1fQVJNCiAgICN1bmRlZiBURk1fUFBDMzIKICAgI3VuZGVmIFRGTV9QUEM2NAogICAjdW5kZWYgVEZNX0FWUjMyCiAgICN1bmRlZiBURk1fQVNNICAgCiNlbmRpZgoKLyogRUNDIGhlbHBlcnMgKi8KI2lmZGVmIFRGTV9FQ0MxOTIKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUwzCiAgICAgICAjZGVmaW5lIFRGTV9TUVIzCiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUw2CiAgICAgICAjZGVmaW5lIFRGTV9TUVI2CiAgICNlbmRpZgojZW5kaWYKCiNpZmRlZiBURk1fRUNDMjI0CiAgICNpZmRlZiBGUF82NEJJVAogICAgICAgI2RlZmluZSBURk1fTVVMNAogICAgICAgI2RlZmluZSBURk1fU1FSNAogICAjZWxzZQogICAgICAgI2RlZmluZSBURk1fTVVMNwogICAgICAgI2RlZmluZSBURk1fU1FSNwogICAjZW5kaWYKI2VuZGlmCgojaWZkZWYgVEZNX0VDQzI1NgogICAjaWZkZWYgRlBfNjRCSVQKICAgICAgICNkZWZpbmUgVEZNX01VTDQKICAgICAgICNkZWZpbmUgVEZNX1NRUjQKICAgI2Vsc2UKICAgICAgICNkZWZpbmUgVEZNX01VTDgKICAgICAgICNkZWZpbmUgVEZNX1NRUjgKICAgI2VuZGlmCiNlbmRpZgoKI2lmZGVmIFRGTV9FQ0MzODQKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUw2CiAgICAgICAjZGVmaW5lIFRGTV9TUVI2CiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUwxMgogICAgICAgI2RlZmluZSBURk1fU1FSMTIKICAgI2VuZGlmCiNlbmRpZgoKI2lmZGVmIFRGTV9FQ0M1MjEKICAgI2lmZGVmIEZQXzY0QklUCiAgICAgICAjZGVmaW5lIFRGTV9NVUw5CiAgICAgICAjZGVmaW5lIFRGTV9TUVI5CiAgICNlbHNlCiAgICAgICAjZGVmaW5lIFRGTV9NVUwxNwogICAgICAgI2RlZmluZSBURk1fU1FSMTcKICAgI2VuZGlmCiNlbmRpZgoKCi8qIHNvbWUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4KICovCiNpZiBkZWZpbmVkKEZQXzY0QklUKQogICAvKiBmb3IgR0NDIG9ubHkgb24gc3VwcG9ydGVkIHBsYXRmb3JtcyAqLwogICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBmcF9kaWdpdDsgICAvKiA2NGJpdCwgMTI4IHVzZXMgbW9kZShUSSkgYmVsb3cgKi8KICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgZnBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKI2Vsc2UKICAgI2lmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSAKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgdWxvbmc2NDsKICAgI2Vsc2UKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxvbmc2NDsKICAgI2VuZGlmCgogICAjaWZuZGVmIE5PXzY0QklUCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgIGZwX2RpZ2l0OwogICAgICB0eXBlZGVmIHVsb25nNjQgICAgICAgICAgICBmcF93b3JkOwogICAjZWxzZQogICAgICAvKiBzb21lIHByb2NzIGxpa2UgY29sZGZpcmUgcHJlZmVyIG5vdCB0byBwbGFjZSBtdWx0aXBseSBpbnRvIDY0Yml0IHR5cGUKICAgICAgICAgZXZlbiB0aG91Z2ggaXQgZXhpc3RzICovCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgIGZwX2RpZ2l0OwogICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICBmcF93b3JkOwogICAjZW5kaWYKI2VuZGlmCgovKiAjIG9mIGRpZ2l0cyB0aGlzIGlzICovCiNkZWZpbmUgRElHSVRfQklUICAoaW50KSgoQ0hBUl9CSVQpICogc2l6ZW9mKGZwX2RpZ2l0KSkKCi8qIE1heCBzaXplIG9mIGFueSBudW1iZXIgaW4gYml0cy4gIEJhc2ljYWxseSB0aGUgbGFyZ2VzdCBzaXplIHlvdSB3aWxsIGJlCiAqIG11bHRpcGx5aW5nIHNob3VsZCBiZSBoYWxmIFtvciBzbWFsbGVyXSBvZiBGUF9NQVhfU0laRS1mb3VyX2RpZ2l0CiAqCiAqIEl0IGRlZmF1bHRzIHRvIDQwOTYtYml0cyBbYWxsb3dpbmcgbXVsdGlwbGljYXRpb25zIHVwdG8gMjA0OHgyMDQ4IGJpdHMgXQogKi8KI2lmbmRlZiBGUF9NQVhfQklUUwogICAgI2RlZmluZSBGUF9NQVhfQklUUyAgICAgICAgICAgNDA5NgojZW5kaWYKI2RlZmluZSBGUF9NQVhfU0laRSAgICAgICAgICAgKEZQX01BWF9CSVRTKyg4KkRJR0lUX0JJVCkpCgovKiB3aWxsIHRoaXMgbGliIHdvcms/ICovCiNpZiAoQ0hBUl9CSVQgJiA3KQogICAjZXJyb3IgQ0hBUl9CSVQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGVpZ2h0LgojZW5kaWYKI2lmIEZQX01BWF9CSVRTICUgQ0hBUl9CSVQKICAgI2Vycm9yIEZQX01BWF9CSVRTIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBDSEFSX0JJVAojZW5kaWYKCiNkZWZpbmUgRlBfTUFTSyAgICAoZnBfZGlnaXQpKC0xKQojZGVmaW5lIEZQX1NJWkUgICAgKEZQX01BWF9TSVpFL0RJR0lUX0JJVCkKCi8qIHNpZ25zICovCiNkZWZpbmUgRlBfWlBPUyAgICAgMAojZGVmaW5lIEZQX05FRyAgICAgIDEKCi8qIHJldHVybiBjb2RlcyAqLwojZGVmaW5lIEZQX09LQVkgICAgIDAKI2RlZmluZSBGUF9WQUwgICAgICAxCiNkZWZpbmUgRlBfTUVNICAgICAgMgoKLyogZXF1YWxpdGllcyAqLwojZGVmaW5lIEZQX0xUICAgICAgICAtMSAgIC8qIGxlc3MgdGhhbiAqLwojZGVmaW5lIEZQX0VRICAgICAgICAgMCAgIC8qIGVxdWFsIHRvICovCiNkZWZpbmUgRlBfR1QgICAgICAgICAxICAgLyogZ3JlYXRlciB0aGFuICovCgovKiByZXBsaWVzICovCiNkZWZpbmUgRlBfWUVTICAgICAgICAxICAgLyogeWVzIHJlc3BvbnNlICovCiNkZWZpbmUgRlBfTk8gICAgICAgICAwICAgLyogbm8gcmVzcG9uc2UgKi8KCi8qIGEgRlAgdHlwZSAqLwp0eXBlZGVmIHN0cnVjdCB7CiAgICBmcF9kaWdpdCBkcFtGUF9TSVpFXTsKICAgIGludCAgICAgIHVzZWQsIAogICAgICAgICAgICAgc2lnbjsKfSBmcF9pbnQ7CgovKiBleHRlcm5hbGx5IGRlZmluZSB0aGlzIHN5bWJvbCB0byBpZ25vcmUgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIHVzZWZ1bCBmb3IgY2hhbmdpbmcgdGhlIGJ1aWxkIGZyb20gdGhlIG1ha2UgcHJvY2VzcyAqLwojaWZuZGVmIFRGTV9BTFJFQURZX1NFVAoKLyogZG8gd2Ugd2FudCB0aGUgbGFyZ2Ugc2V0IG9mIHNtYWxsIG11bHRpcGxpY2F0aW9ucyA/IAogICBFbmFibGUgdGhlc2UgaWYgeW91IGFyZSBnb2luZyB0byBiZSBkb2luZyBhIGxvdCBvZiBzbWFsbCAoPD0gMTYgZGlnaXQpIG11bHRpcGxpY2F0aW9ucyBzYXkgaW4gRUNDCiAgIE9yIGlmIHlvdSdyZSBvbiBhIDY0LWJpdCBtYWNoaW5lIGRvaW5nIFJTQSBhcyBhIDEwMjQtYml0IGludGVnZXIgPT0gMTYgZGlnaXRzIDstKQogKi8KLyogbmVlZCB0byByZWZhY3RvciB0aGUgZnVuY3Rpb24gKi8KLyojZGVmaW5lIFRGTV9TTUFMTF9TRVQgKi8KCi8qIGRvIHdlIHdhbnQgaHVnZSBjb2RlIAogICBFbmFibGUgdGhlc2UgaWYgeW91IGFyZSBkb2luZyAyMCwgMjQsIDI4LCAzMiwgNDgsIDY0IGRpZ2l0IG11bHRpcGxpY2F0aW9ucyAodXNlZnVsIGZvciBSU0EpCiAgIExlc3MgaW1wb3J0YW50IG9uIDY0LWJpdCBtYWNoaW5lcyBhcyAzMiBkaWdpdHMgPT0gMjA0OCBiaXRzCiAqLwojaWYgMAojZGVmaW5lIFRGTV9NVUwzCiNkZWZpbmUgVEZNX01VTDQKI2RlZmluZSBURk1fTVVMNgojZGVmaW5lIFRGTV9NVUw3CiNkZWZpbmUgVEZNX01VTDgKI2RlZmluZSBURk1fTVVMOQojZGVmaW5lIFRGTV9NVUwxMgojZGVmaW5lIFRGTV9NVUwxNwojZW5kaWYKI2lmZGVmIFRGTV9IVUdFX1NFVAojZGVmaW5lIFRGTV9NVUwyMAojZGVmaW5lIFRGTV9NVUwyNAojZGVmaW5lIFRGTV9NVUwyOAojZGVmaW5lIFRGTV9NVUwzMgojaWYgKEZQX01BWF9CSVRTID49IDYxNDQpICYmIGRlZmluZWQoRlBfNjRCSVQpCiAgICAjZGVmaW5lIFRGTV9NVUw0OAojZW5kaWYKI2lmIChGUF9NQVhfQklUUyA+PSA4MTkyKSAmJiBkZWZpbmVkKEZQXzY0QklUKQogICAgI2RlZmluZSBURk1fTVVMNjQKI2VuZGlmCiNlbmRpZgoKI2lmIDAKI2RlZmluZSBURk1fU1FSMwojZGVmaW5lIFRGTV9TUVI0CiNkZWZpbmUgVEZNX1NRUjYKI2RlZmluZSBURk1fU1FSNwojZGVmaW5lIFRGTV9TUVI4CiNkZWZpbmUgVEZNX1NRUjkKI2RlZmluZSBURk1fU1FSMTIKI2RlZmluZSBURk1fU1FSMTcKI2VuZGlmCiNpZmRlZiBURk1fSFVHRV9TRVQKI2RlZmluZSBURk1fU1FSMjAKI2RlZmluZSBURk1fU1FSMjQKI2RlZmluZSBURk1fU1FSMjgKI2RlZmluZSBURk1fU1FSMzIKI2RlZmluZSBURk1fU1FSNDgKI2RlZmluZSBURk1fU1FSNjQKI2VuZGlmCgovKiBkbyB3ZSB3YW50IHNvbWUgb3ZlcmZsb3cgY2hlY2tzCiAgIE5vdCByZXF1aXJlZCBpZiB5b3UgbWFrZSBzdXJlIHlvdXIgbnVtYmVycyBhcmUgd2l0aGluIHJhbmdlIChlLmcuIGJ5IGRlZmF1bHQgYSBtb2R1bHVzIGZvciBmcF9leHB0bW9kKCkgY2FuIG9ubHkgYmUgdXB0byAyMDQ4IGJpdHMgbG9uZykKICovCi8qICNkZWZpbmUgVEZNX0NIRUNLICovCgovKiBJcyB0aGUgdGFyZ2V0IGEgUDQgUHJlc2NvdHQKICovCi8qICNkZWZpbmUgVEZNX1BSRVNDT1RUICovCgovKiBEbyB3ZSB3YW50IHRpbWluZyByZXNpc3RhbnQgZnBfZXhwdG1vZCgpID8KICogVGhpcyBtYWtlcyBpdCBzbG93ZXIgYnV0IGFsc28gdGltaW5nIGludmFyaWFudCB3aXRoIHJlc3BlY3QgdG8gdGhlIGV4cG9uZW50IAogKi8KLyogI2RlZmluZSBURk1fVElNSU5HX1JFU0lTVEFOVCAqLwoKI2VuZGlmIC8qIFRGTV9BTFJFQURZX1NFVCAqLwoKLyogZnVuY3Rpb25zICovCgovKiByZXR1cm5zIGEgVEZNIGlkZW50IHN0cmluZyB1c2VmdWwgZm9yIGRlYnVnZ2luZy4uLiAqLwovKmNvbnN0IGNoYXIgKmZwX2lkZW50KHZvaWQpOyovCgovKiBpbml0aWFsaXplIFtvciB6ZXJvXSBhbiBmcCBpbnQgKi8KI2RlZmluZSBmcF9pbml0KGEpICAodm9pZClYTUVNU0VUKChhKSwgMCwgc2l6ZW9mKGZwX2ludCkpCiNkZWZpbmUgZnBfemVybyhhKSAgZnBfaW5pdChhKQoKLyogemVyby9ldmVuL29kZCA/ICovCiNkZWZpbmUgZnBfaXN6ZXJvKGEpICgoKGEpLT51c2VkID09IDApID8gRlBfWUVTIDogRlBfTk8pCiNkZWZpbmUgZnBfaXNldmVuKGEpICgoKGEpLT51c2VkID49IDAgJiYgKCgoYSktPmRwWzBdICYgMSkgPT0gMCkpID8gRlBfWUVTIDogRlBfTk8pCiNkZWZpbmUgZnBfaXNvZGQoYSkgICgoKGEpLT51c2VkID4gMCAgJiYgKCgoYSktPmRwWzBdICYgMSkgPT0gMSkpID8gRlBfWUVTIDogRlBfTk8pCgovKiBzZXQgdG8gYSBzbWFsbCBkaWdpdCAqLwp2b2lkIGZwX3NldChmcF9pbnQgKmEsIGZwX2RpZ2l0IGIpOwoKLyogY29weSBmcm9tIGEgdG8gYiAqLwojZGVmaW5lIGZwX2NvcHkoYSwgYikgICh2b2lkKSgoKGEpICE9IChiKSkgPyAoKHZvaWQpWE1FTUNQWSgoYiksIChhKSwgc2l6ZW9mKGZwX2ludCkpKSA6ICh2b2lkKTApCiNkZWZpbmUgZnBfaW5pdF9jb3B5KGEsIGIpIGZwX2NvcHkoYiwgYSkKCi8qIGNsYW1wIGRpZ2l0cyAqLwojZGVmaW5lIGZwX2NsYW1wKGEpICAgeyB3aGlsZSAoKGEpLT51c2VkICYmIChhKS0+ZHBbKGEpLT51c2VkLTFdID09IDApIC0tKChhKS0+dXNlZCk7IChhKS0+c2lnbiA9IChhKS0+dXNlZCA/IChhKS0+c2lnbiA6IEZQX1pQT1M7IH0KCi8qIG5lZ2F0ZSBhbmQgYWJzb2x1dGUgKi8KI2RlZmluZSBmcF9uZWcoYSwgYikgIHsgZnBfY29weShhLCBiKTsgKGIpLT5zaWduIF49IDE7IGZwX2NsYW1wKGIpOyB9CiNkZWZpbmUgZnBfYWJzKGEsIGIpICB7IGZwX2NvcHkoYSwgYik7IChiKS0+c2lnbiAgPSAwOyB9CgovKiByaWdodCBzaGlmdCB4IGRpZ2l0cyAqLwp2b2lkIGZwX3JzaGQoZnBfaW50ICphLCBpbnQgeCk7CgovKiByaWdodCBzaGlmdCB4IGJpdHMgKi8Kdm9pZCBmcF9yc2hiKGZwX2ludCAqYSwgaW50IHgpOwoKLyogbGVmdCBzaGlmdCB4IGRpZ2l0cyAqLwp2b2lkIGZwX2xzaGQoZnBfaW50ICphLCBpbnQgeCk7CgovKiBzaWduZWQgY29tcGFyaXNvbiAqLwppbnQgZnBfY21wKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKCi8qIHVuc2lnbmVkIGNvbXBhcmlzb24gKi8KaW50IGZwX2NtcF9tYWcoZnBfaW50ICphLCBmcF9pbnQgKmIpOwoKLyogcG93ZXIgb2YgMiBvcGVyYXRpb25zICovCnZvaWQgZnBfZGl2XzJkKGZwX2ludCAqYSwgaW50IGIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsKdm9pZCBmcF9tb2RfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjKTsKdm9pZCBmcF9tdWxfMmQoZnBfaW50ICphLCBpbnQgYiwgZnBfaW50ICpjKTsKdm9pZCBmcF8yZXhwdCAoZnBfaW50ICphLCBpbnQgYik7CnZvaWQgZnBfbXVsXzIoZnBfaW50ICphLCBmcF9pbnQgKmMpOwp2b2lkIGZwX2Rpdl8yKGZwX2ludCAqYSwgZnBfaW50ICpjKTsKCi8qIENvdW50cyB0aGUgbnVtYmVyIG9mIGxzYnMgd2hpY2ggYXJlIHplcm8gYmVmb3JlIHRoZSBmaXJzdCB6ZXJvIGJpdCAqLwovKmludCBmcF9jbnRfbHNiKGZwX2ludCAqYSk7Ki8KCi8qIGMgPSBhICsgYiAqLwp2b2lkIGZwX2FkZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhIC0gYiAqLwp2b2lkIGZwX3N1YihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhICogYiAqLwp2b2lkIGZwX211bChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGIgPSBhKmEgICovCnZvaWQgZnBfc3FyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKCi8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwppbnQgZnBfZGl2KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMsIGZwX2ludCAqZCk7CgovKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KaW50IGZwX21vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGNvbXBhcmUgYWdhaW5zdCBhIHNpbmdsZSBkaWdpdCAqLwppbnQgZnBfY21wX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKCi8qIGMgPSBhICsgYiAqLwp2b2lkIGZwX2FkZF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhIC0gYiAqLwp2b2lkIGZwX3N1Yl9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGMgPSBhICogYiAqLwp2b2lkIGZwX211bF9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKCi8qIGEvYiA9PiBjYiArIGQgPT0gYSAqLwovKmludCBmcF9kaXZfZChmcF9pbnQgKmEsIGZwX2RpZ2l0IGIsIGZwX2ludCAqYywgZnBfZGlnaXQgKmQpOyovCgovKiBjID0gYSBtb2QgYiwgMCA8PSBjIDwgYiAgKi8KLyppbnQgZnBfbW9kX2QoZnBfaW50ICphLCBmcF9kaWdpdCBiLCBmcF9kaWdpdCAqYyk7Ki8KCi8qIC0tLT4gbnVtYmVyIHRoZW9yeSA8LS0tICovCi8qIGQgPSBhICsgYiAobW9kIGMpICovCi8qaW50IGZwX2FkZG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOyovCgovKiBkID0gYSAtIGIgKG1vZCBjKSAqLwovKmludCBmcF9zdWJtb2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYywgZnBfaW50ICpkKTsqLwoKLyogZCA9IGEgKiBiIChtb2QgYykgKi8KaW50IGZwX211bG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOwoKLyogYyA9IGEgKiBhIChtb2QgYikgKi8KaW50IGZwX3Nxcm1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKCi8qIGMgPSAxL2EgKG1vZCBiKSAqLwppbnQgZnBfaW52bW9kKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwoKLyogYyA9IChhLCBiKSAqLwovKnZvaWQgZnBfZ2NkKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOyovCgovKiBjID0gW2EsIGJdICovCi8qdm9pZCBmcF9sY20oZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7Ki8KCi8qIHNldHVwcyB0aGUgbW9udGdvbWVyeSByZWR1Y3Rpb24gKi8KaW50IGZwX21vbnRnb21lcnlfc2V0dXAoZnBfaW50ICphLCBmcF9kaWdpdCAqbXApOwoKLyogY29tcHV0ZXMgYSA9IEIqKm4gbW9kIGIgd2l0aG91dCBkaXZpc2lvbiBvciBtdWx0aXBsaWNhdGlvbiB1c2VmdWwgZm9yCiAqIG5vcm1hbGl6aW5nIG51bWJlcnMgaW4gYSBNb250Z29tZXJ5IHN5c3RlbS4KICovCnZvaWQgZnBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24oZnBfaW50ICphLCBmcF9pbnQgKmIpOwoKLyogY29tcHV0ZXMgeC9SID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8Kdm9pZCBmcF9tb250Z29tZXJ5X3JlZHVjZShmcF9pbnQgKmEsIGZwX2ludCAqbSwgZnBfZGlnaXQgbXApOwoKLyogZCA9IGEqKmIgKG1vZCBjKSAqLwppbnQgZnBfZXhwdG1vZChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjLCBmcF9pbnQgKmQpOwoKLyogcHJpbWFsaXR5IHN0dWZmICovCgovKiBwZXJmb3JtIGEgTWlsbGVyLVJhYmluIHRlc3Qgb2YgYSB0byB0aGUgYmFzZSBiIGFuZCBzdG9yZSByZXN1bHQgaW4gInJlc3VsdCIgKi8KLyp2b2lkIGZwX3ByaW1lX21pbGxlcl9yYWJpbiAoZnBfaW50ICogYSwgZnBfaW50ICogYiwgaW50ICpyZXN1bHQpOyovCgovKiAyNTYgdHJpYWwgZGl2aXNpb25zICsgOCBNaWxsZXItUmFiaW5zLCByZXR1cm5zIEZQX1lFUyBpZiBwcm9iYWJsZSBwcmltZSAgKi8KLyppbnQgZnBfaXNwcmltZShmcF9pbnQgKmEpOyovCgovKiBQcmltYWxpdHkgZ2VuZXJhdGlvbiBmbGFncyAqLwovKiNkZWZpbmUgVEZNX1BSSU1FX0JCUyAgICAgIDB4MDAwMSAqLyAvKiBCQlMgc3R5bGUgcHJpbWUgKi8KLyojZGVmaW5lIFRGTV9QUklNRV9TQUZFICAgICAweDAwMDIgKi8gLyogU2FmZSBwcmltZSAocC0xKS8yID09IHByaW1lICovCi8qI2RlZmluZSBURk1fUFJJTUVfMk1TQl9PRkYgMHgwMDA0ICovIC8qIGZvcmNlIDJuZCBNU0IgdG8gMCAqLwovKiNkZWZpbmUgVEZNX1BSSU1FXzJNU0JfT04gIDB4MDAwOCAqLyAvKiBmb3JjZSAybmQgTVNCIHRvIDEgKi8KCi8qIGNhbGxiYWNrIGZvciBmcF9wcmltZV9yYW5kb20sIHNob3VsZCBmaWxsIGRzdCB3aXRoIHJhbmRvbSBieXRlcyBhbmQgcmV0dXJuIGhvdyBtYW55IHJlYWQgW3VwdG8gbGVuXSAqLwovKnR5cGVkZWYgaW50IHRmbV9wcmltZV9jYWxsYmFjayh1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHZvaWQgKmRhdCk7Ki8KCi8qI2RlZmluZSBmcF9wcmltZV9yYW5kb20oYSwgdCwgc2l6ZSwgYmJzLCBjYiwgZGF0KSBmcF9wcmltZV9yYW5kb21fZXgoYSwgdCwgKChzaXplKSAqIDgpICsgMSwgKGJicz09MSk/VEZNX1BSSU1FX0JCUzowLCBjYiwgZGF0KSovCgovKmludCBmcF9wcmltZV9yYW5kb21fZXgoZnBfaW50ICphLCBpbnQgdCwgaW50IHNpemUsIGludCBmbGFncywgdGZtX3ByaW1lX2NhbGxiYWNrIGNiLCB2b2lkICpkYXQpOyovCgovKiByYWRpeCBjb25lcnNpb25zICovCmludCBmcF9jb3VudF9iaXRzKGZwX2ludCAqYSk7CmludCBmcF9sZWFkaW5nX2JpdChmcF9pbnQgKmEpOwoKaW50IGZwX3Vuc2lnbmVkX2Jpbl9zaXplKGZwX2ludCAqYSk7CnZvaWQgZnBfcmVhZF91bnNpZ25lZF9iaW4oZnBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CnZvaWQgZnBfdG9fdW5zaWduZWRfYmluKGZwX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYik7CgovKmludCBmcF9zaWduZWRfYmluX3NpemUoZnBfaW50ICphKTsqLwovKnZvaWQgZnBfcmVhZF9zaWduZWRfYmluKGZwX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpOyovCi8qdm9pZCBmcF90b19zaWduZWRfYmluKGZwX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYik7Ki8KCi8qaW50IGZwX3JlYWRfcmFkaXgoZnBfaW50ICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7Ki8KLyppbnQgZnBfdG9yYWRpeChmcF9pbnQgKmEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsqLwovKmludCBmcF90b3JhZGl4X24oZnBfaW50ICogYSwgY2hhciAqc3RyLCBpbnQgcmFkaXgsIGludCBtYXhsZW4pOyovCgoKLyogVkFSSU9VUyBMT1cgTEVWRUwgU1RVRkZTICovCnZvaWQgc19mcF9hZGQoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CnZvaWQgc19mcF9zdWIoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CnZvaWQgZnBfcmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpzLCBpbnQgbGVuKTsKCnZvaWQgZnBfbXVsX2NvbWJhKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwoKI2lmZGVmIFRGTV9TTUFMTF9TRVQKdm9pZCBmcF9tdWxfY29tYmFfc21hbGwoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CiNlbmRpZgoKI2lmZGVmIFRGTV9NVUwzCnZvaWQgZnBfbXVsX2NvbWJhMyhmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMNAp2b2lkIGZwX211bF9jb21iYTQoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CiNlbmRpZgojaWZkZWYgVEZNX01VTDYKdm9pZCBmcF9tdWxfY29tYmE2KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUw3CnZvaWQgZnBfbXVsX2NvbWJhNyhmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMOAp2b2lkIGZwX211bF9jb21iYTgoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CiNlbmRpZgojaWZkZWYgVEZNX01VTDkKdm9pZCBmcF9tdWxfY29tYmE5KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUwxMgp2b2lkIGZwX211bF9jb21iYTEyKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwojZW5kaWYKI2lmZGVmIFRGTV9NVUwxNwp2b2lkIGZwX211bF9jb21iYTE3KGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwojZW5kaWYKCiNpZmRlZiBURk1fTVVMMjAKdm9pZCBmcF9tdWxfY29tYmEyMChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMMjQKdm9pZCBmcF9tdWxfY29tYmEyNChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMMjgKdm9pZCBmcF9tdWxfY29tYmEyOChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMMzIKdm9pZCBmcF9tdWxfY29tYmEzMihmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMNDgKdm9pZCBmcF9tdWxfY29tYmE0OChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCiNpZmRlZiBURk1fTVVMNjQKdm9pZCBmcF9tdWxfY29tYmE2NChmcF9pbnQgKmEsIGZwX2ludCAqYiwgZnBfaW50ICpjKTsKI2VuZGlmCgp2b2lkIGZwX3Nxcl9jb21iYShmcF9pbnQgKmEsIGZwX2ludCAqYik7CgojaWZkZWYgVEZNX1NNQUxMX1NFVAp2b2lkIGZwX3Nxcl9jb21iYV9zbWFsbChmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgoKI2lmZGVmIFRGTV9TUVIzCnZvaWQgZnBfc3FyX2NvbWJhMyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjQKdm9pZCBmcF9zcXJfY29tYmE0KGZwX2ludCAqYSwgZnBfaW50ICpiKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSNgp2b2lkIGZwX3Nxcl9jb21iYTYoZnBfaW50ICphLCBmcF9pbnQgKmIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVI3CnZvaWQgZnBfc3FyX2NvbWJhNyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjgKdm9pZCBmcF9zcXJfY29tYmE4KGZwX2ludCAqYSwgZnBfaW50ICpiKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSOQp2b2lkIGZwX3Nxcl9jb21iYTkoZnBfaW50ICphLCBmcF9pbnQgKmIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVIxMgp2b2lkIGZwX3Nxcl9jb21iYTEyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSMTcKdm9pZCBmcF9zcXJfY29tYmExNyhmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgoKI2lmZGVmIFRGTV9TUVIyMAp2b2lkIGZwX3Nxcl9jb21iYTIwKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSMjQKdm9pZCBmcF9zcXJfY29tYmEyNChmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjI4CnZvaWQgZnBfc3FyX2NvbWJhMjgoZnBfaW50ICphLCBmcF9pbnQgKmIpOwojZW5kaWYKI2lmZGVmIFRGTV9TUVIzMgp2b2lkIGZwX3Nxcl9jb21iYTMyKGZwX2ludCAqYSwgZnBfaW50ICpiKTsKI2VuZGlmCiNpZmRlZiBURk1fU1FSNDgKdm9pZCBmcF9zcXJfY29tYmE0OChmcF9pbnQgKmEsIGZwX2ludCAqYik7CiNlbmRpZgojaWZkZWYgVEZNX1NRUjY0CnZvaWQgZnBfc3FyX2NvbWJhNjQoZnBfaW50ICphLCBmcF9pbnQgKmIpOwojZW5kaWYKLypleHRlcm4gY29uc3QgY2hhciAqZnBfc19ybWFwOyovCgoKLyoqCiAqIFVzZWQgYnkgQ3lhU1NMIAogKi8KCi8qIFR5cGVzICovCiAgICB0eXBlZGVmIGZwX2RpZ2l0IG1wX2RpZ2l0OwogICAgdHlwZWRlZiBmcF93b3JkICBtcF93b3JkOwogICAgdHlwZWRlZiBmcF9pbnQgbXBfaW50OwoKLyogQ29uc3RhbnRzICovCiAgICAjZGVmaW5lIE1QX0xUICAgRlBfTFQgICAvKiBsZXNzIHRoYW4gICAgKi8KICAgICNkZWZpbmUgTVBfRVEgICBGUF9FUSAgIC8qIGVxdWFsIHRvICAgICAqLwogICAgI2RlZmluZSBNUF9HVCAgIEZQX0dUICAgLyogZ3JlYXRlciB0aGFuICovCiAgICAjZGVmaW5lIE1QX09LQVkgRlBfT0tBWSAvKiBvayByZXN1bHQgICAgKi8KICAgICNkZWZpbmUgTVBfTk8gICBGUF9OTyAgIC8qIHllcy9ubyByZXN1bHQgKi8KICAgICNkZWZpbmUgTVBfWUVTICBGUF9ZRVMgIC8qIHllcy9ubyByZXN1bHQgKi8KCi8qIFByb3RvdHlwZXMgKi8KaW50ICBtcF9pbml0IChtcF9pbnQgKiBhKTsKdm9pZCBtcF9jbGVhciAobXBfaW50ICogYSk7CmludCBtcF9pbml0X211bHRpKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMsIG1wX2ludCogZCwgbXBfaW50KiBlLCBtcF9pbnQqIGYpOwoKaW50ICBtcF9hZGQgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOwppbnQgIG1wX3N1YiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CmludCAgbXBfYWRkX2QgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqIGMpOwoKaW50ICBtcF9tdWwgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOwppbnQgIG1wX211bG1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCk7CmludCAgbXBfbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOwppbnQgIG1wX2ludm1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKaW50ICBtcF9leHB0bW9kIChtcF9pbnQgKiBnLCBtcF9pbnQgKiB4LCBtcF9pbnQgKiBwLCBtcF9pbnQgKiB5KTsKCmludCAgbXBfY21wKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKaW50ICBtcF9jbXBfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIpOwoKaW50ICBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcF9pbnQgKiBhKTsKaW50ICBtcF9yZWFkX3Vuc2lnbmVkX2JpbiAobXBfaW50ICogYSwgY29uc3QgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpOwppbnQgIG1wX3RvX3Vuc2lnbmVkX2JpbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYik7CgppbnQgIG1wX3N1Yl9kKGZwX2ludCAqYSwgZnBfZGlnaXQgYiwgZnBfaW50ICpjKTsKaW50ICBtcF9jb3B5KGZwX2ludCogYSwgZnBfaW50KiBiKTsKaW50ICBtcF9pc29kZChtcF9pbnQqIGEpOwppbnQgIG1wX2lzemVybyhtcF9pbnQqIGEpOwppbnQgIG1wX2NvdW50X2JpdHMobXBfaW50ICphKTsKaW50ICBtcF9sZWFkaW5nX2JpdChtcF9pbnQgKmEpOwppbnQgIG1wX3NldF9pbnQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKdm9pZCBtcF9yc2hiKG1wX2ludCAqYSwgaW50IHgpOwoKI2lmZGVmIEhBVkVfRUNDCiAgICBpbnQgbXBfcmVhZF9yYWRpeChtcF9pbnQqIGEsIGNvbnN0IGNoYXIqIHN0ciwgaW50IHJhZGl4KTsKICAgIGludCBtcF9zZXQoZnBfaW50ICphLCBmcF9kaWdpdCBiKTsKICAgIGludCBtcF9zcXIoZnBfaW50ICphLCBmcF9pbnQgKmIpOwogICAgaW50IG1wX21vbnRnb21lcnlfcmVkdWNlKGZwX2ludCAqYSwgZnBfaW50ICptLCBmcF9kaWdpdCBtcCk7CiAgICBpbnQgbXBfbW9udGdvbWVyeV9zZXR1cChmcF9pbnQgKmEsIGZwX2RpZ2l0ICpyaG8pOwogICAgaW50IG1wX2Rpdl8yKGZwX2ludCAqIGEsIGZwX2ludCAqIGIpOwogICAgaW50IG1wX2luaXRfY29weShmcF9pbnQgKiBhLCBmcF9pbnQgKiBiKTsgCiNlbmRpZgoKI2lmIGRlZmluZWQoSEFWRV9FQ0MpIHx8IGRlZmluZWQoQ1lBU1NMX0tFWV9HRU4pCiAgICBpbnQgbXBfc3FybW9kKG1wX2ludCogYSwgbXBfaW50KiBiLCBtcF9pbnQqIGMpOwogICAgaW50IG1wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKI2VuZGlmCgojaWZkZWYgQ1lBU1NMX0tFWV9HRU4KaW50ICBtcF9nY2QoZnBfaW50ICphLCBmcF9pbnQgKmIsIGZwX2ludCAqYyk7CmludCAgbXBfbGNtKGZwX2ludCAqYSwgZnBfaW50ICpiLCBmcF9pbnQgKmMpOwppbnQgIG1wX3ByaW1lX2lzX3ByaW1lKG1wX2ludCogYSwgaW50IHQsIGludCogcmVzdWx0KTsKI2VuZGlmIC8qIENZQVNTTF9LRVlfR0VOICovCgpDWUFTU0xfQVBJIHdvcmQzMiBDaGVja1J1blRpbWVGYXN0TWF0aCh2b2lkKTsKCi8qIElmIHVzZXIgdXNlcyBSU0EsIERILCBEU0EsIG9yIEVDQyBtYXRoIGxpYiBkaXJlY3RseSB0aGVuIGZhc3QgbWF0aCBGUF9TSVpFCiAgIG11c3QgbWF0Y2gsIHJldHVybiAxIGlmIGEgbWF0Y2ggb3RoZXJ3aXNlIDAgKi8KI2RlZmluZSBDaGVja0Zhc3RNYXRoU2V0dGluZ3MoKSAoRlBfU0laRSA9PSBDaGVja1J1blRpbWVGYXN0TWF0aCgpKQojaWZkZWYgX19jcGx1c3BsdXMKICAgfQojZW5kaWYKCgojZW5kaWYgIC8qIENUQU9fQ1JZUFRfVEZNX0ggKi8K