LyogJElkOiBqYWRlLmMsdiAxLjkuMi40IDIwMDQvMDEvMTQgMTY6MDQ6NDgga2VpbCBFeHAgJAogKgogKiBKQURFIHN0dWZmIChkZXJpdmVkIGZyb20gb3JpZ2luYWwgaHNjeC5jKQogKgogKiBBdXRob3IgICAgICAgUm9sYW5kIEtsYWJ1bmRlCiAqIENvcHlyaWdodCAgICBieSBSb2xhbmQgS2xhYnVuZGUgICA8Ui5LbGFidW5kZUBCZXJrb20uZGU+CiAqIAogKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCiAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAqCiAqLwoKCiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlICJoaXNheC5oIgojaW5jbHVkZSAiaHNjeC5oIgojaW5jbHVkZSAiamFkZS5oIgojaW5jbHVkZSAiaXNkbmwxLmgiCiNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KCgppbnQgX19pbml0CkphZGVWZXJzaW9uKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgY2hhciAqcykKewogICAgaW50IHZlcixpOwogICAgaW50IHRvID0gNTA7CiAgICBjcy0+QkNfV3JpdGVfUmVnKGNzLCAtMSwgMHg1MCwgMHgxOSk7CiAgICBpPTA7CiAgICB3aGlsZSAodG8pIHsKICAgIAl1ZGVsYXkoMSk7Cgl2ZXIgPSBjcy0+QkNfUmVhZF9SZWcoY3MsIC0xLCAweDYwKTsKCXRvLS07CglpZiAodmVyKQogICAgCSAgICBicmVhazsKCWlmICghdG8pIHsKCSAgICBwcmludGsoS0VSTl9JTkZPICIlcyBKQURFIHZlcnNpb24gbm90IG9idGFpbmFibGVcbiIsIHMpOwogICAgCSAgICByZXR1cm4gKDApOwogICAgICAgIH0KICAgIH0KICAgIC8qIFdhaXQgZm9yIHRoZSBKQURFICovCiAgICB1ZGVsYXkoMTApOwogICAgLyogUmVhZCB2ZXJzaW9uICovCiAgICB2ZXIgPSBjcy0+QkNfUmVhZF9SZWcoY3MsIC0xLCAweDYwKTsKICAgIHByaW50ayhLRVJOX0lORk8gIiVzIEpBREUgdmVyc2lvbjogJWRcbiIsIHMsIHZlcik7CiAgICByZXR1cm4gKDEpOwp9CgovKiBXcml0ZSB0byBpbmRpcmVjdCBhY2Nlc3NpYmxlIGphZGUgcmVnaXN0ZXIgc2V0ICovCnN0YXRpYyB2b2lkCmphZGVfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCB1X2NoYXIgcmVnLCB1X2NoYXIgdmFsdWUpCnsKICAgIGludCB0byA9IDUwOwogICAgdV9jaGFyIHJldDsKCiAgICAvKiBXcml0ZSB0aGUgZGF0YSAqLwogICAgY3MtPkJDX1dyaXRlX1JlZyhjcywgLTEsIENPTU1fSkFERSsxLCB2YWx1ZSk7CiAgICAvKiBTYXkgSkFERSB3ZSB3YW5uYSB3cml0ZSBpbmRpcmVjdCByZWcgJ3JlZycgKi8KICAgIGNzLT5CQ19Xcml0ZV9SZWcoY3MsIC0xLCBDT01NX0pBREUsIHJlZyk7CiAgICB0byA9IDUwOwogICAgLyogV2FpdCBmb3IgUkRZIGdvZXMgaGlnaCAqLwogICAgd2hpbGUgKHRvKSB7CiAgICAJdWRlbGF5KDEpOwoJcmV0ID0gY3MtPkJDX1JlYWRfUmVnKGNzLCAtMSwgQ09NTV9KQURFKTsKCXRvLS07CglpZiAocmV0ICYgMSkKCSAgICAvKiBHb3QgYWNrbm93bGVkZ2UgKi8KCSAgICBicmVhazsKCWlmICghdG8pIHsKICAgIAkgICAgcHJpbnRrKEtFUk5fSU5GTyAiQ2FuIG5vdCBzZWUgcmVhZHkgYml0IGZyb20gSkFERSBEU1AgKHJlZz0weCVYLCB2YWx1ZT0weCVYKVxuIiwgcmVnLCB2YWx1ZSk7CgkgICAgcmV0dXJuOwoJfQogICAgfQp9CgoKCnZvaWQKbW9kZWphZGUoc3RydWN0IEJDU3RhdGUgKmJjcywgaW50IG1vZGUsIGludCBiYykKewogICAgc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKICAgIGludCBqYWRlID0gYmNzLT5ody5oc2N4LmhzY3g7CgogICAgaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9IU0NYKSB7CgljaGFyIHRtcFs0MF07CglzcHJpbnRmKHRtcCwgImphZGUgJWMgbW9kZSAlZCBpY2hhbiAlZCIsCgkJJ0EnICsgamFkZSwgbW9kZSwgYmMpOwoJZGVidWdsMShjcywgdG1wKTsKICAgIH0KICAgIGJjcy0+bW9kZSA9IG1vZGU7CiAgICBiY3MtPmNoYW5uZWwgPSBiYzsKCQogICAgY3MtPkJDX1dyaXRlX1JlZyhjcywgamFkZSwgamFkZV9IRExDX01PREUsIChtb2RlID09IEwxX01PREVfVFJBTlMgPyBqYWRlTU9ERV9UTU86MHgwMCkpOwogICAgY3MtPkJDX1dyaXRlX1JlZyhjcywgamFkZSwgamFkZV9IRExDX0NDUjAsIChqYWRlQ0NSMF9QVXxqYWRlQ0NSMF9JVEYpKTsKICAgIGNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19DQ1IxLCAweDAwKTsKCiAgICBqYWRlX3dyaXRlX2luZGlyZWN0KGNzLCBqYWRlX0hETEMxU0VSUlhQQVRILCAweDA4KTsKICAgIGphZGVfd3JpdGVfaW5kaXJlY3QoY3MsIGphZGVfSERMQzJTRVJSWFBBVEgsIDB4MDgpOwogICAgamFkZV93cml0ZV9pbmRpcmVjdChjcywgamFkZV9IRExDMVNFUlRYUEFUSCwgMHgwMCk7CiAgICBqYWRlX3dyaXRlX2luZGlyZWN0KGNzLCBqYWRlX0hETEMyU0VSVFhQQVRILCAweDAwKTsKCiAgICBjcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfWENDUiwgMHgwNyk7CiAgICBjcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfUkNDUiwgMHgwNyk7CgogICAgaWYgKGJjID09IDApIHsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19UU0FYLCAweDAwKTsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19UU0FSLCAweDAwKTsKICAgIH0gZWxzZSB7Cgljcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfVFNBWCwgMHgwNCk7Cgljcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfVFNBUiwgMHgwNCk7CiAgICB9CiAgICBzd2l0Y2ggKG1vZGUpIHsKCWNhc2UgKEwxX01PREVfTlVMTCk6CgkJY3MtPkJDX1dyaXRlX1JlZyhjcywgamFkZSwgamFkZV9IRExDX01PREUsIGphZGVNT0RFX1RNTyk7CgkJYnJlYWs7CgljYXNlIChMMV9NT0RFX1RSQU5TKToKCQljcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfTU9ERSwgKGphZGVNT0RFX1RNT3xqYWRlTU9ERV9SQUN8amFkZU1PREVfWEFDKSk7CgkJYnJlYWs7CgljYXNlIChMMV9NT0RFX0hETEMpOgoJCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19NT0RFLCAoamFkZU1PREVfUkFDfGphZGVNT0RFX1hBQykpOwoJCWJyZWFrOwogICAgfQogICAgaWYgKG1vZGUpIHsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19SQ01ELCAoamFkZVJDTURfUlJFU3xqYWRlUkNNRF9STUMpKTsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIGphZGUsIGphZGVfSERMQ19YQ01ELCBqYWRlWENNRF9YUkVTKTsKCS8qIFVubWFzayBpbnRzICovCgljcy0+QkNfV3JpdGVfUmVnKGNzLCBqYWRlLCBqYWRlX0hETENfSU1SLCAweEY4KTsKICAgIH0KICAgIGVsc2UKCS8qIE1hc2sgaW50cyAqLwoJY3MtPkJDX1dyaXRlX1JlZyhjcywgamFkZSwgamFkZV9IRExDX0lNUiwgMHgwMCk7Cn0KCnN0YXRpYyB2b2lkCmphZGVfbDJsMShzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCnsKICAgIHN0cnVjdCBCQ1N0YXRlICpiY3MgPSBzdC0+bDEuYmNzOwogICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFyZzsKICAgIHVfbG9uZyBmbGFnczsKCiAgICBzd2l0Y2ggKHByKSB7CgljYXNlIChQSF9EQVRBIHwgUkVRVUVTVCk6CgkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKCQlpZiAoYmNzLT50eF9za2IpIHsKCQkJc2tiX3F1ZXVlX3RhaWwoJmJjcy0+c3F1ZXVlLCBza2IpOwoJCX0gZWxzZSB7CgkJCWJjcy0+dHhfc2tiID0gc2tiOwoJCQl0ZXN0X2FuZF9zZXRfYml0KEJDX0ZMR19CVVNZLCAmYmNzLT5GbGFnKTsKCQkJYmNzLT5ody5oc2N4LmNvdW50ID0gMDsKCQkJYmNzLT5jcy0+QkNfU2VuZF9EYXRhKGJjcyk7CgkJfQoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKCQlicmVhazsKCWNhc2UgKFBIX1BVTEwgfCBJTkRJQ0FUSU9OKToKCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwoJCWlmIChiY3MtPnR4X3NrYikgewoJCQlwcmludGsoS0VSTl9XQVJOSU5HICJqYWRlX2wybDE6IHRoaXMgc2hvdWxkbid0IGhhcHBlblxuIik7CgkJfSBlbHNlIHsKCQkJdGVzdF9hbmRfc2V0X2JpdChCQ19GTEdfQlVTWSwgJmJjcy0+RmxhZyk7CgkJCWJjcy0+dHhfc2tiID0gc2tiOwoJCQliY3MtPmh3LmhzY3guY291bnQgPSAwOwoJCQliY3MtPmNzLT5CQ19TZW5kX0RhdGEoYmNzKTsKCQl9CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwoJCWJyZWFrOwoJY2FzZSAoUEhfUFVMTCB8IFJFUVVFU1QpOgoJCWlmICghYmNzLT50eF9za2IpIHsKCQkgICAgdGVzdF9hbmRfY2xlYXJfYml0KEZMR19MMV9QVUxMX1JFUSwgJnN0LT5sMS5GbGFncyk7CgkJICAgIHN0LT5sMS5sMWwyKHN0LCBQSF9QVUxMIHwgQ09ORklSTSwgTlVMTCk7CgkJfSBlbHNlCgkJICAgIHRlc3RfYW5kX3NldF9iaXQoRkxHX0wxX1BVTExfUkVRLCAmc3QtPmwxLkZsYWdzKTsKCQlicmVhazsKCWNhc2UgKFBIX0FDVElWQVRFIHwgUkVRVUVTVCk6CgkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKCQl0ZXN0X2FuZF9zZXRfYml0KEJDX0ZMR19BQ1RJViwgJmJjcy0+RmxhZyk7CgkJbW9kZWphZGUoYmNzLCBzdC0+bDEubW9kZSwgc3QtPmwxLmJjKTsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CgkJbDFfbXNnX2Ioc3QsIHByLCBhcmcpOwoJCWJyZWFrOwoJY2FzZSAoUEhfREVBQ1RJVkFURSB8IFJFUVVFU1QpOgoJCWwxX21zZ19iKHN0LCBwciwgYXJnKTsKCQlicmVhazsKCWNhc2UgKFBIX0RFQUNUSVZBVEUgfCBDT05GSVJNKToKCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwoJCXRlc3RfYW5kX2NsZWFyX2JpdChCQ19GTEdfQUNUSVYsICZiY3MtPkZsYWcpOwoJCXRlc3RfYW5kX2NsZWFyX2JpdChCQ19GTEdfQlVTWSwgJmJjcy0+RmxhZyk7CgkJbW9kZWphZGUoYmNzLCAwLCBzdC0+bDEuYmMpOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKCQlzdC0+bDEubDFsMihzdCwgUEhfREVBQ1RJVkFURSB8IENPTkZJUk0sIE5VTEwpOwoJCWJyZWFrOwogICAgfQp9Cgp2b2lkCmNsb3NlX2phZGVzdGF0ZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQp7CiAgICBtb2RlamFkZShiY3MsIDAsIGJjcy0+Y2hhbm5lbCk7CiAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJDX0ZMR19JTklULCAmYmNzLT5GbGFnKSkgewoJaWYgKGJjcy0+aHcuaHNjeC5yY3ZidWYpIHsKCQlrZnJlZShiY3MtPmh3LmhzY3gucmN2YnVmKTsKCQliY3MtPmh3LmhzY3gucmN2YnVmID0gTlVMTDsKCX0KCWlmIChiY3MtPmJsb2cpIHsKCQlrZnJlZShiY3MtPmJsb2cpOwoJCWJjcy0+YmxvZyA9IE5VTEw7Cgl9Cglza2JfcXVldWVfcHVyZ2UoJmJjcy0+cnF1ZXVlKTsKCXNrYl9xdWV1ZV9wdXJnZSgmYmNzLT5zcXVldWUpOwoJaWYgKGJjcy0+dHhfc2tiKSB7CgkJZGV2X2tmcmVlX3NrYl9hbnkoYmNzLT50eF9za2IpOwoJCWJjcy0+dHhfc2tiID0gTlVMTDsKCQl0ZXN0X2FuZF9jbGVhcl9iaXQoQkNfRkxHX0JVU1ksICZiY3MtPkZsYWcpOwoJfQogICAgfQp9CgpzdGF0aWMgaW50Cm9wZW5famFkZXN0YXRlKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgc3RydWN0IEJDU3RhdGUgKmJjcykKewoJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJDX0ZMR19JTklULCAmYmNzLT5GbGFnKSkgewoJCWlmICghKGJjcy0+aHcuaHNjeC5yY3ZidWYgPSBrbWFsbG9jKEhTQ1hfQlVGTUFYLCBHRlBfQVRPTUlDKSkpIHsKCQkJcHJpbnRrKEtFUk5fV0FSTklORwoJCQkgICAgICAgIkhpU2F4OiBObyBtZW1vcnkgZm9yIGhzY3gucmN2YnVmXG4iKTsKCQkJdGVzdF9hbmRfY2xlYXJfYml0KEJDX0ZMR19JTklULCAmYmNzLT5GbGFnKTsKCQkJcmV0dXJuICgxKTsKCQl9CgkJaWYgKCEoYmNzLT5ibG9nID0ga21hbGxvYyhNQVhfQkxPR19TUEFDRSwgR0ZQX0FUT01JQykpKSB7CgkJCXByaW50ayhLRVJOX1dBUk5JTkcKCQkJCSJIaVNheDogTm8gbWVtb3J5IGZvciBiY3MtPmJsb2dcbiIpOwoJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoQkNfRkxHX0lOSVQsICZiY3MtPkZsYWcpOwoJCQlrZnJlZShiY3MtPmh3LmhzY3gucmN2YnVmKTsKCQkJYmNzLT5ody5oc2N4LnJjdmJ1ZiA9IE5VTEw7CgkJCXJldHVybiAoMik7CgkJfQoJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmJjcy0+cnF1ZXVlKTsKCQlza2JfcXVldWVfaGVhZF9pbml0KCZiY3MtPnNxdWV1ZSk7Cgl9CgliY3MtPnR4X3NrYiA9IE5VTEw7Cgl0ZXN0X2FuZF9jbGVhcl9iaXQoQkNfRkxHX0JVU1ksICZiY3MtPkZsYWcpOwoJYmNzLT5ldmVudCA9IDA7CgliY3MtPmh3LmhzY3gucmN2aWR4ID0gMDsKCWJjcy0+dHhfY250ID0gMDsKCXJldHVybiAoMCk7Cn0KCgppbnQKc2V0c3RhY2tfamFkZShzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKewoJYmNzLT5jaGFubmVsID0gc3QtPmwxLmJjOwoJaWYgKG9wZW5famFkZXN0YXRlKHN0LT5sMS5oYXJkd2FyZSwgYmNzKSkKCQlyZXR1cm4gKC0xKTsKCXN0LT5sMS5iY3MgPSBiY3M7CglzdC0+bDIubDJsMSA9IGphZGVfbDJsMTsKCXNldHN0YWNrX21hbmFnZXIoc3QpOwoJYmNzLT5zdCA9IHN0OwoJc2V0c3RhY2tfbDFfQihzdCk7CglyZXR1cm4gKDApOwp9Cgp2b2lkIF9faW5pdApjbGVhcl9wZW5kaW5nX2phZGVfaW50cyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCnsKCWludCB2YWw7CgljaGFyIHRtcFs2NF07CgoJY3MtPkJDX1dyaXRlX1JlZyhjcywgMCwgamFkZV9IRExDX0lNUiwgMHgwMCk7Cgljcy0+QkNfV3JpdGVfUmVnKGNzLCAxLCBqYWRlX0hETENfSU1SLCAweDAwKTsKCgl2YWwgPSBjcy0+QkNfUmVhZF9SZWcoY3MsIDEsIGphZGVfSERMQ19JU1IpOwoJc3ByaW50Zih0bXAsICJqYWRlIEIgSVNUQSAleCIsIHZhbCk7CglkZWJ1Z2wxKGNzLCB0bXApOwoJdmFsID0gY3MtPkJDX1JlYWRfUmVnKGNzLCAwLCBqYWRlX0hETENfSVNSKTsKCXNwcmludGYodG1wLCAiamFkZSBBIElTVEEgJXgiLCB2YWwpOwoJZGVidWdsMShjcywgdG1wKTsKCXZhbCA9IGNzLT5CQ19SZWFkX1JlZyhjcywgMSwgamFkZV9IRExDX1NUQVIpOwoJc3ByaW50Zih0bXAsICJqYWRlIEIgU1RBUiAleCIsIHZhbCk7CglkZWJ1Z2wxKGNzLCB0bXApOwoJdmFsID0gY3MtPkJDX1JlYWRfUmVnKGNzLCAwLCBqYWRlX0hETENfU1RBUik7CglzcHJpbnRmKHRtcCwgImphZGUgQSBTVEFSICV4IiwgdmFsKTsKCWRlYnVnbDEoY3MsIHRtcCk7CgkvKiBVbm1hc2sgaW50cyAqLwoJY3MtPkJDX1dyaXRlX1JlZyhjcywgMCwgamFkZV9IRExDX0lNUiwgMHhGOCk7Cgljcy0+QkNfV3JpdGVfUmVnKGNzLCAxLCBqYWRlX0hETENfSU1SLCAweEY4KTsKfQoKdm9pZCBfX2luaXQKaW5pdGphZGUoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQp7Cgljcy0+YmNzWzBdLkJDX1NldFN0YWNrID0gc2V0c3RhY2tfamFkZTsKCWNzLT5iY3NbMV0uQkNfU2V0U3RhY2sgPSBzZXRzdGFja19qYWRlOwoJY3MtPmJjc1swXS5CQ19DbG9zZSA9IGNsb3NlX2phZGVzdGF0ZTsKCWNzLT5iY3NbMV0uQkNfQ2xvc2UgPSBjbG9zZV9qYWRlc3RhdGU7Cgljcy0+YmNzWzBdLmh3LmhzY3guaHNjeCA9IDA7Cgljcy0+YmNzWzFdLmh3LmhzY3guaHNjeCA9IDE7CgoJLyogU3RvcCBEU1AgYXVkaW8gdHgvcnggKi8KCWphZGVfd3JpdGVfaW5kaXJlY3QoY3MsIDB4MTEsIDB4MGYpOwoJamFkZV93cml0ZV9pbmRpcmVjdChjcywgMHgxNywgMHgyZik7CgoJLyogVHJhbnNwYXJlbnQgTW9kZSwgUnhUeCBpbmFjdGl2ZSwgTm8gVGVzdCwgTm8gUkZTL1RGUyAqLwoJY3MtPkJDX1dyaXRlX1JlZyhjcywgMCwgamFkZV9IRExDX01PREUsIGphZGVNT0RFX1RNTyk7Cgljcy0+QkNfV3JpdGVfUmVnKGNzLCAxLCBqYWRlX0hETENfTU9ERSwgamFkZU1PREVfVE1PKTsKCS8qIFBvd2VyIGRvd24sIDEtSWRsZSwgUnhUeCBsZWFzdCBzaWduaWZpY2FudCBiaXQgZmlyc3QgKi8KCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIDAsIGphZGVfSERMQ19DQ1IwLCAweDAwKTsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIDEsIGphZGVfSERMQ19DQ1IwLCAweDAwKTsKCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIDAsIGphZGVfSERMQ19JTVIsICAweDAwKTsKCWNzLT5CQ19Xcml0ZV9SZWcoY3MsIDEsIGphZGVfSERMQ19JTVIsICAweDAwKTsKCS8qIFNldHVwIGhvc3QgYWNjZXNzIHRvIGhkbGMgY29udHJvbGxlciAqLwoJamFkZV93cml0ZV9pbmRpcmVjdChjcywgamFkZV9IRExDQ05UUkFDQ0VTUywgKGphZGVJTkRJUkVDVF9IQUgxfGphZGVJTkRJUkVDVF9IQUgyKSk7CgkvKiBVbm1hc2sgSERMQyBpbnQgKGRvbrR0IGZvcmdldCBEU1AgaW50IGxhdGVyIG9uKSovCgljcy0+QkNfV3JpdGVfUmVnKGNzLCAtMSxqYWRlX0lOVCwgKGphZGVJTlRfSERMQzF8amFkZUlOVF9IRExDMikpOwoKCS8qIG9uY2UgYWdhaW4gVFJBTlNQQVJFTlQgKi8JCgltb2RlamFkZShjcy0+YmNzLCAwLCAwKTsKCW1vZGVqYWRlKGNzLT5iY3MgKyAxLCAwLCAwKTsKfQoK