LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJsYW5fY29tbW9uLmgKICogVmVyc2lvbjogICAgICAgMC44CiAqIERlc2NyaXB0aW9uOiAgIElyREEgTEFOIGFjY2VzcyBsYXllcgogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgU3VuIEF1ZyAzMSAyMDoxNDozNyAxOTk3CiAqIE1vZGlmaWVkIGF0OiAgIFN1biBPY3QgMzEgMTk6NDE6MjQgMTk5OQogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCiAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgSVJMQU5fSAojZGVmaW5lIElSTEFOX0gKCiNpbmNsdWRlIDxhc20vcGFyYW0uaD4gIC8qIGZvciBIWiAqLwoKI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgojaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CgojaW5jbHVkZSA8bmV0L2lyZGEvaXJ0dHAuaD4KCiNkZWZpbmUgSVJMQU5fTVRVICAgICAgICAxNTE4CiNkZWZpbmUgSVJMQU5fVElNRU9VVCAgICAxMCpIWiAvKiAxMCBzZWNvbmRzICovCgovKiBDb21tYW5kIHBhY2tldCB0eXBlcyAqLwojZGVmaW5lIENNRF9HRVRfUFJPVklERVJfSU5GTyAgIDAKI2RlZmluZSBDTURfR0VUX01FRElBX0NIQVIgICAgICAxCiNkZWZpbmUgQ01EX09QRU5fREFUQV9DSEFOTkVMICAgMgojZGVmaW5lIENNRF9DTE9TRV9EQVRBX0NIQU4gICAgIDMKI2RlZmluZSBDTURfUkVDT05ORUNUX0RBVEFfQ0hBTiA0CiNkZWZpbmUgQ01EX0ZJTFRFUl9PUEVSQVRJT04gICAgNQoKLyogU29tZSByZXNwb25zZXMgKi8KI2RlZmluZSBSU1BfU1VDQ0VTUyAgICAgICAgICAgICAgICAgMAojZGVmaW5lIFJTUF9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTICAxCiNkZWZpbmUgUlNQX0lOVkFMSURfQ09NTUFORF9GT1JNQVQgIDIKI2RlZmluZSBSU1BfQ09NTUFORF9OT1RfU1VQUE9SVEVEICAgMwojZGVmaW5lIFJTUF9QQVJBTV9OT1RfU1VQUE9SVEVEICAgICA0CiNkZWZpbmUgUlNQX1ZBTFVFX05PVF9TVVBQT1JURUQgICAgIDUKI2RlZmluZSBSU1BfTk9UX09QRU4gICAgICAgICAgICAgICAgNgojZGVmaW5lIFJTUF9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA3CiNkZWZpbmUgUlNQX0lOVkFMSURfUEFTU1dPUkQgICAgICAgIDgKI2RlZmluZSBSU1BfUFJPVE9DT0xfRVJST1IgICAgICAgICAgOQojZGVmaW5lIFJTUF9BU1lOQ0hST05PVVNfRVJST1IgICAgMjU1CgovKiBNZWRpYSB0eXBlcyAqLwojZGVmaW5lIE1FRElBXzgwMl8zIDEKI2RlZmluZSBNRURJQV84MDJfNSAyCgovKiBGaWx0ZXIgcGFyYW1ldGVycyAqLwojZGVmaW5lIERBVEFfQ0hBTiAgIDEKI2RlZmluZSBGSUxURVJfVFlQRSAyCiNkZWZpbmUgRklMVEVSX01PREUgMwoKLyogRmlsdGVyIHR5cGVzICovCiNkZWZpbmUgSVJMQU5fRElSRUNURUQgICAweDAxCiNkZWZpbmUgSVJMQU5fRlVOQ1RJT05BTCAweDAyCiNkZWZpbmUgSVJMQU5fR1JPVVAgICAgICAweDA0CiNkZWZpbmUgSVJMQU5fTUFDX0ZSQU1FICAweDA4CiNkZWZpbmUgSVJMQU5fTVVMVElDQVNUICAweDEwCiNkZWZpbmUgSVJMQU5fQlJPQURDQVNUICAweDIwCiNkZWZpbmUgSVJMQU5fSVBYX1NPQ0tFVCAweDQwCgovKiBGaWx0ZXIgbW9kZXMgKi8KI2RlZmluZSBBTEwgICAgIDEKI2RlZmluZSBGSUxURVIgIDIKI2RlZmluZSBOT05FICAgIDMKCi8qIEZpbHRlciBvcGVyYXRpb25zICovCiNkZWZpbmUgR0VUICAgICAxCiNkZWZpbmUgQ0xFQVIgICAyCiNkZWZpbmUgQUREICAgICAzCiNkZWZpbmUgUkVNT1ZFICA0CiNkZWZpbmUgRFlOQU1JQyA1CgovKiBBY2Nlc3MgdHlwZXMgKi8KI2RlZmluZSBBQ0NFU1NfRElSRUNUICAxCiNkZWZpbmUgQUNDRVNTX1BFRVIgICAgMgojZGVmaW5lIEFDQ0VTU19IT1NURUQgIDMKCiNkZWZpbmUgSVJMQU5fQllURSAgIDAKI2RlZmluZSBJUkxBTl9TSE9SVCAgMQojZGVmaW5lIElSTEFOX0FSUkFZICAyCgojZGVmaW5lIElSTEFOX01BWF9IRUFERVIgKFRUUF9IRUFERVIrTE1QX0hFQURFUitMQVBfTUFYX0hFQURFUikKCi8qCiAqICBJckxBTiBjbGllbnQKICovCnN0cnVjdCBpcmxhbl9jbGllbnRfY2IgewoJaW50IHN0YXRlOwoKCWludCBvcGVuX3JldHJpZXM7CgoJc3RydWN0IHRzYXBfY2IgKnRzYXBfY3RybDsKCV9fdTMyIG1heF9zZHVfc2l6ZTsKCV9fdTggIG1heF9oZWFkZXJfc2l6ZTsKCQoJaW50IGFjY2Vzc190eXBlOyAgICAgICAgIC8qIEFjY2VzcyB0eXBlIG9mIHByb3ZpZGVyICovCglfX3U4IHJlY29ubmVjdF9rZXlbMjU1XTsKCV9fdTgga2V5X2xlbjsKCQoJX191MTYgcmVjdl9hcmJfdmFsOwoJX191MTYgbWF4X2ZyYW1lOwoJaW50IGZpbHRlcl90eXBlOwoKCWludCB1bmljYXN0X29wZW47CglpbnQgYnJvYWRjYXN0X29wZW47CgoJaW50IHR4X2J1c3k7CglzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsgLyogVHJhbnNtaXQgY29udHJvbCBxdWV1ZSAqLwoKCXN0cnVjdCBpcmlhcF9jYiAqaXJpYXA7CgoJc3RydWN0IHRpbWVyX2xpc3Qga2lja190aW1lcjsKfTsKCi8qCiAqIElyTEFOIHByb3ZpZGVyCiAqLwpzdHJ1Y3QgaXJsYW5fcHJvdmlkZXJfY2IgewoJaW50IHN0YXRlOwoJCglzdHJ1Y3QgdHNhcF9jYiAqdHNhcF9jdHJsOwoJX191MzIgbWF4X3NkdV9zaXplOwoJX191OCAgbWF4X2hlYWRlcl9zaXplOwoKCS8qCgkgKiAgU3RvcmUgc29tZSB2YWx1ZXMgaGVyZSB3aGljaCBhcmUgdXNlZCBieSB0aGUgcHJvdmlkZXIgdG8gcGFyc2UKCSAqICB0aGUgZmlsdGVyIG9wZXJhdGlvbnMKCSAqLwoJaW50IGRhdGFfY2hhbjsKCWludCBmaWx0ZXJfdHlwZTsKCWludCBmaWx0ZXJfbW9kZTsKCWludCBmaWx0ZXJfb3BlcmF0aW9uOwoJaW50IGZpbHRlcl9lbnRyeTsKCWludCBhY2Nlc3NfdHlwZTsgICAgIC8qIEFjY2VzcyB0eXBlICovCglfX3UxNiBzZW5kX2FyYl92YWw7CgoJX191OCBtYWNfYWRkcmVzc1s2XTsgLyogR2VuZXJhdGVkIE1BQyBhZGRyZXNzIGZvciBwZWVyIGRldmljZSAqLwp9OwoKLyoKICogIElyTEFOIGNvbnRyb2wgYmxvY2sKICovCnN0cnVjdCBpcmxhbl9jYiB7CglpbnQgICAgbWFnaWM7CglzdHJ1Y3QgbGlzdF9oZWFkICBkZXZfbGlzdDsKCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgICAvKiBFdGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlKi8KCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwoKCV9fdTMyIHNhZGRyOyAgICAgICAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwoJX191MzIgZGFkZHI7ICAgICAgICAgICAgICAgLyogRGVzdGluYXRpb24gZGV2aWNlIGFkZHJlc3MgKi8KCWludCBkaXNjb25uZWN0X3JlYXNvbjsgICAgIC8qIFdoeSB3ZSBnb3QgZGlzY29ubmVjdGVkICovCgkKCWludCBtZWRpYTsgICAgICAgICAgICAgICAgIC8qIE1lZGlhIHR5cGUgKi8KCV9fdTggdmVyc2lvblsyXTsgICAgICAgICAgIC8qIElyTEFOIHZlcnNpb24gKi8KCQoJc3RydWN0IHRzYXBfY2IgKnRzYXBfZGF0YTsgLyogRGF0YSBUU0FQICovCgoJaW50ICB1c2VfdWRhdGE7ICAgICAgICAgICAgLyogVXNlIFVuaXQgRGF0YSB0cmFuc2ZlcnMgKi8KCglfX3U4IHN0c2FwX3NlbF9kYXRhOyAgICAgICAvKiBTb3VyY2UgZGF0YSBUU0FQIHNlbGVjdG9yICovCglfX3U4IGR0c2FwX3NlbF9kYXRhOyAgICAgICAvKiBEZXN0aW5hdGlvbiBkYXRhIFRTQVAgc2VsZWN0b3IgKi8KCV9fdTggZHRzYXBfc2VsX2N0cmw7ICAgICAgIC8qIERlc3RpbmF0aW9uIGN0cmwgVFNBUCBzZWxlY3RvciAqLwoKCXN0cnVjdCBpcmxhbl9jbGllbnRfY2IgICBjbGllbnQ7ICAgLyogQ2xpZW50IHNwZWNpZmljIGZpZWxkcyAqLwoJc3RydWN0IGlybGFuX3Byb3ZpZGVyX2NiIHByb3ZpZGVyOyAvKiBQcm92aWRlciBzcGVjaWZpYyBmaWVsZHMgKi8KCglfX3UzMiBtYXhfc2R1X3NpemU7CglfX3U4ICBtYXhfaGVhZGVyX3NpemU7CgkKCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKCXN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwp9OwoKdm9pZCBpcmxhbl9jbG9zZShzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwp2b2lkIGlybGFuX2Nsb3NlX3RzYXBzKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CgppbnQgIGlybGFuX3JlZ2lzdGVyX25ldGRldihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwp2b2lkIGlybGFuX2lhc19yZWdpc3RlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIF9fdTggdHNhcF9zZWwpOwp2b2lkIGlybGFuX3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHN0cnVjdCBpcmxhbl9jYiAqc2VsZiwgaW50IHRpbWVvdXQpOwoKdm9pZCBpcmxhbl9vcGVuX2RhdGFfdHNhcChzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwoKaW50IGlybGFuX3J1bl9jdHJsX3R4X3F1ZXVlKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CgpzdHJ1Y3QgaXJsYW5fY2IgKmlybGFuX2dldF9hbnkodm9pZCk7CnZvaWQgaXJsYW5fZ2V0X3Byb3ZpZGVyX2luZm8oc3RydWN0IGlybGFuX2NiICpzZWxmKTsKdm9pZCBpcmxhbl9nZXRfbWVkaWFfY2hhcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYpOwp2b2lkIGlybGFuX29wZW5fZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CnZvaWQgaXJsYW5fY2xvc2VfZGF0YV9jaGFubmVsKHN0cnVjdCBpcmxhbl9jYiAqc2VsZik7CnZvaWQgaXJsYW5fc2V0X211bHRpY2FzdF9maWx0ZXIoc3RydWN0IGlybGFuX2NiICpzZWxmLCBpbnQgc3RhdHVzKTsKdm9pZCBpcmxhbl9zZXRfYnJvYWRjYXN0X2ZpbHRlcihzdHJ1Y3QgaXJsYW5fY2IgKnNlbGYsIGludCBzdGF0dXMpOwoKaW50IGlybGFuX2luc2VydF9ieXRlX3BhcmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKnBhcmFtLCBfX3U4IHZhbHVlKTsKaW50IGlybGFuX2luc2VydF9zaG9ydF9wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpwYXJhbSwgX191MTYgdmFsdWUpOwppbnQgaXJsYW5faW5zZXJ0X3N0cmluZ19wYXJhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpwYXJhbSwgY2hhciAqdmFsdWUpOwppbnQgaXJsYW5faW5zZXJ0X2FycmF5X3BhcmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKm5hbWUsIF9fdTggKnZhbHVlLCAKCQkJICAgICBfX3UxNiB2YWx1ZV9sZW4pOwoKaW50IGlybGFuX2V4dHJhY3RfcGFyYW0oX191OCAqYnVmLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSwgX191MTYgKmxlbik7CgojZW5kaWYKCgo=