LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJsbXBfZnJhbWUuaAogKiBWZXJzaW9uOiAgICAgICAwLjkKICogRGVzY3JpcHRpb246ICAgCiAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiBDcmVhdGVkIGF0OiAgICBUdWUgQXVnIDE5IDAyOjA5OjU5IDE5OTcKICogTW9kaWZpZWQgYXQ6ICAgRnJpIERlYyAxMCAxMzoyMTo1MyAxOTk5CiAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogCiAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCiAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgSVJNTFBfRlJBTUVfSAojZGVmaW5lIElSTUxQX0ZSQU1FX0gKCiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KCiNpbmNsdWRlIDxuZXQvaXJkYS9kaXNjb3ZlcnkuaD4KCi8qIElyTE1QIGZyYW1lIG9wY29kZXMgKi8KI2RlZmluZSBDT05ORUNUX0NNRCAgICAweDAxCiNkZWZpbmUgQ09OTkVDVF9DTkYgICAgMHg4MQojZGVmaW5lIERJU0NPTk5FQ1QgICAgIDB4MDIKI2RlZmluZSBBQ0NFU1NNT0RFX0NNRCAweDAzCiNkZWZpbmUgQUNDRVNTTU9ERV9DTkYgMHg4MwoKI2RlZmluZSBDT05UUk9MX0JJVCAgICAweDgwCgp2b2lkIGlybG1wX3NlbmRfZGF0YV9wZHUoc3RydWN0IGxhcF9jYiAqc2VsZiwgX191OCBkbHNhcCwgX191OCBzbHNhcCwKCQkJCWludCBleHBlZGl0ZWQsIHN0cnVjdCBza19idWZmICpza2IpOwp2b2lkIGlybG1wX3NlbmRfbGNmX3BkdShzdHJ1Y3QgbGFwX2NiICpzZWxmLCBfX3U4IGRsc2FwLCBfX3U4IHNsc2FwLCAKCQkJX191OCBvcGNvZGUsIHN0cnVjdCBza19idWZmICpza2IpOwp2b2lkIGlybG1wX2xpbmtfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKiwgc3RydWN0IHNrX2J1ZmYgKiwgCgkJCQlpbnQgdW5yZWxpYWJsZSk7CiNpZmRlZiBDT05GSUdfSVJEQV9VTFRSQQp2b2lkIGlybG1wX2xpbmtfdW5pdGRhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbGFwX2NiICosIHN0cnVjdCBza19idWZmICopOwojZW5kaWYgLyogQ09ORklHX0lSREFfVUxUUkEgKi8KCnZvaWQgaXJsbXBfbGlua19jb25uZWN0X2luZGljYXRpb24oc3RydWN0IGxhcF9jYiAqLCBfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCgkJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CnZvaWQgaXJsbXBfbGlua19jb25uZWN0X3JlcXVlc3QoX191MzIgZGFkZHIpOwp2b2lkIGlybG1wX2xpbmtfY29ubmVjdF9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLCAKCQkJCXN0cnVjdCBza19idWZmICpza2IpOwp2b2lkIGlybG1wX2xpbmtfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKiwgc3RydWN0IGlybGFwX2NiICosIAoJCQkJICAgICAgTEFQX1JFQVNPTiByZWFzb24sIHN0cnVjdCBza19idWZmICopOyAKdm9pZCBpcmxtcF9saW5rX2Rpc2NvdmVyeV9jb25maXJtKHN0cnVjdCBsYXBfY2IgKnNlbGYsIGhhc2hiaW5fdCAqbG9nKTsKdm9pZCBpcmxtcF9saW5rX2Rpc2NvdmVyeV9pbmRpY2F0aW9uKHN0cnVjdCBsYXBfY2IgKiwgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSk7CgojZW5kaWYK