From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: [RFC][PATCH] Scheduler interface changes for credit2 Date: Mon, 15 Feb 2010 17:20:08 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0023545306443d014c047fa6d415 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --0023545306443d014c047fa6d415 Content-Type: text/plain; charset=ISO-8859-1 The two attached patches change the scheduler interface to allow credit2 to have several cpus share the same runqueue. The patches should have almost no impact on the current schedulers. The patches and their reasonings are below. I've also attached the patches for the prototype credit2 scheduler, for reference. * Add a context swich callback (sched-context_switch-callback.diff) Add a callback to tell a scheduler that a vcpu has been completely context-switched off a cpu. When sharing a runqueue, we can't put a scheduled-out vcpu back on the runqueue until it's been completely de-scheduled, because it may be grabbed by another processor before it's ready. This callback allows a scheduler to detect when a vcpu on its way out is completely off the processor, so that it can put the vcpu on the runqueue. * Allow sharing of locks between cpus (sched-spin_lock-pointers.diff) Have per-cpu pointers, initialized to per-cpu locks, which the scheduler may change during its init to reconfigure locking granularity. There are a number of race conditions having to do with updating of v->is_running and v->processor, all having to do with the fact that vcpus may change cpus without an explicit migrate. Furthermore, the scheduler needs runqueues to be covered by a lock as well. The cleanest way to solve all of these is to have the scheduler lock and the runqueue lock coincide. * Add a "scheduler" trace class (trace-sched-class.diff) Uses defined on a per-scheduler basis I've been running parallel kernel compiles on a 16-way box (2x4x2) for several hours now without deadlocks or BUG()s. As far as I'm concerned, with these changes, credit2 is now ready to be checked in, as long as it's not set to the default scheduler. All of the above: Signed-off-by: George Dunlap --0023545306443d014c047fa6d415 Content-Type: text/x-patch; charset=US-ASCII; name="sched-context_switch-callback.diff" Content-Disposition: attachment; filename="sched-context_switch-callback.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5pi4clj0 QWRkIGNvbnRleHRfc2F2ZWQgc2NoZWR1bGVyIGNhbGxiYWNrLgoKQmVjYXVzZSBjcmVkaXQyIHNo YXJlcyBhIHJ1bnF1ZXVlIGJldHdlZW4gc2V2ZXJhbCBjcHVzLCBpdCBuZWVkcwp0byBrbm93IHdo ZW4gYSBzY2hlZHVsZWQtb3V0IHByb2Nlc3MgaGFzIGZpbmFsbHkgYmVlbiBjb250ZXh0LXN3aXRj aGVkCmF3YXkgc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHJ1bnF1ZXVlIGFnYWluLiAg KE90aGVyd2lzZSBpdCBtYXkKYmUgZ3JhYmJlZCBieSBhbm90aGVyIHByb2Nlc3NvciBiZWZvcmUg dGhlIGNvbnRleHQgaGFzIGJlZW4gcHJvcGVybHkKc2F2ZWQuKQoKU2lnbmVkLW9mZi1ieTogR2Vv cmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBldS5jaXRyaXguY29tPgoKZGlmZiAtciBjNDRiN2I5 YjYzMDYgeGVuL2NvbW1vbi9zY2hlZHVsZS5jCi0tLSBhL3hlbi9jb21tb24vc2NoZWR1bGUuYwlX ZWQgSmFuIDEzIDEzOjMzOjU3IDIwMTAgKzAwMDAKKysrIGIveGVuL2NvbW1vbi9zY2hlZHVsZS5j CVdlZCBKYW4gMTMgMTM6MzY6MzcgMjAxMCArMDAwMApAQCAtODc3LDYgKzg3Nyw4IEBACiAgICAg LyogQ2hlY2sgZm9yIG1pZ3JhdGlvbiByZXF1ZXN0IC9hZnRlci8gY2xlYXJpbmcgcnVubmluZyBm bGFnLiAqLwogICAgIHNtcF9tYigpOwogCisgICAgU0NIRURfT1AoY29udGV4dF9zYXZlZCwgcHJl dik7CisKICAgICBpZiAoIHVubGlrZWx5KHRlc3RfYml0KF9WUEZfbWlncmF0aW5nLCAmcHJldi0+ cGF1c2VfZmxhZ3MpKSApCiAgICAgICAgIHZjcHVfbWlncmF0ZShwcmV2KTsKIH0KZGlmZiAtciBj NDRiN2I5YjYzMDYgeGVuL2luY2x1ZGUveGVuL3NjaGVkLWlmLmgKLS0tIGEveGVuL2luY2x1ZGUv eGVuL3NjaGVkLWlmLmgJV2VkIEphbiAxMyAxMzozMzo1NyAyMDEwICswMDAwCisrKyBiL3hlbi9p bmNsdWRlL3hlbi9zY2hlZC1pZi5oCVdlZCBKYW4gMTMgMTM6MzY6MzcgMjAxMCArMDAwMApAQCAt NjksNiArNjksNyBAQAogCiAgICAgdm9pZCAgICAgICAgICgqc2xlZXApICAgICAgICAgIChzdHJ1 Y3QgdmNwdSAqKTsKICAgICB2b2lkICAgICAgICAgKCp3YWtlKSAgICAgICAgICAgKHN0cnVjdCB2 Y3B1ICopOworICAgIHZvaWQgICAgICAgICAoKmNvbnRleHRfc2F2ZWQpICAoc3RydWN0IHZjcHUg Kik7CiAKICAgICBzdHJ1Y3QgdGFza19zbGljZSAoKmRvX3NjaGVkdWxlKSAoc190aW1lX3QpOwog Cg== --0023545306443d014c047fa6d415 Content-Type: text/x-patch; charset=US-ASCII; name="sched-spin_lock-pointers.diff" Content-Disposition: attachment; filename="sched-spin_lock-pointers.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5pi4dpy1 ZGlmZiAtciAyOTdkZmZjNmNhNjUgeGVuL2FyY2gvaWE2NC92bXgvdm1tdS5jCi0tLSBhL3hlbi9h cmNoL2lhNjQvdm14L3ZtbXUuYwlUdWUgRmViIDA5IDE0OjQ1OjA5IDIwMTAgKzAwMDAKKysrIGIv eGVuL2FyY2gvaWE2NC92bXgvdm1tdS5jCU1vbiBGZWIgMTUgMTM6NTE6MjMgMjAxMCArMDAwMApA QCAtMzk0LDcgKzM5NCw3IEBACiAgICAgaWYgKGNwdSAhPSBjdXJyZW50LT5wcm9jZXNzb3IpCiAg ICAgICAgIHJldHVybjsKICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0gICAgaWYgKCFzcGlu X3RyeWxvY2soJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9sb2NrKSkKKyAg ICBpZiAoIXNwaW5fdHJ5bG9jayhwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSkuc2NoZWR1bGVf bG9jaykpCiAgICAgICAgIGdvdG8gYmFpbDI7CiAgICAgaWYgKHYtPnByb2Nlc3NvciAhPSBjcHUp CiAgICAgICAgIGdvdG8gYmFpbDE7CkBAIC00MTYsNyArNDE2LDcgQEAKICAgICBpYTY0X2R2X3Nl cmlhbGl6ZV9kYXRhKCk7CiAgICAgYXJncy0+dmNwdSA9IE5VTEw7CiBiYWlsMToKLSAgICBzcGlu X3VubG9jaygmcGVyX2NwdShzY2hlZHVsZV9kYXRhLCBjcHUpLnNjaGVkdWxlX2xvY2spOworICAg IHNwaW5fdW5sb2NrKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9sb2NrKTsK IGJhaWwyOgogICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KQEAgLTQ0Niw3ICs0NDYs NyBAQAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBjcHUgPSB2LT5wcm9jZXNzb3I7CiAgICAg ICAgICAgICBpZiAoY3B1ICE9IGN1cnJlbnQtPnByb2Nlc3NvcikgewotICAgICAgICAgICAgICAg IHNwaW5fYmFycmllcigmcGVyX2NwdShzY2hlZHVsZV9kYXRhLCBjcHUpLnNjaGVkdWxlX2xvY2sp OworICAgICAgICAgICAgICAgIHNwaW5fYmFycmllcihwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNw dSkuc2NoZWR1bGVfbG9jayk7CiAgICAgICAgICAgICAgICAgLyogRmx1c2ggVkhQVCBvbiByZW1v dGUgcHJvY2Vzc29ycy4gKi8KICAgICAgICAgICAgICAgICBzbXBfY2FsbF9mdW5jdGlvbl9zaW5n bGUoY3B1LCAmcHRjX2dhX3JlbW90ZV9mdW5jLCAmYXJncywgMSk7CiAgICAgICAgICAgICB9IGVs c2UgewpkaWZmIC1yIDI5N2RmZmM2Y2E2NSB4ZW4vY29tbW9uL3NjaGVkX2NyZWRpdC5jCi0tLSBh L3hlbi9jb21tb24vc2NoZWRfY3JlZGl0LmMJVHVlIEZlYiAwOSAxNDo0NTowOSAyMDEwICswMDAw CisrKyBiL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0LmMJTW9uIEZlYiAxNSAxMzo1MToyMyAyMDEw ICswMDAwCkBAIC03NzAsNyArNzcwLDcgQEAKIAogICAgIHNwYy0+cnVucV9zb3J0X2xhc3QgPSBz b3J0X2Vwb2NoOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJnBlcl9jcHUoc2NoZWR1bGVfZGF0 YSwgY3B1KS5zY2hlZHVsZV9sb2NrLCBmbGFncyk7CisgICAgc3Bpbl9sb2NrX2lycXNhdmUocGVy X2NwdShzY2hlZHVsZV9kYXRhLCBjcHUpLnNjaGVkdWxlX2xvY2ssIGZsYWdzKTsKIAogICAgIHJ1 bnEgPSAmc3BjLT5ydW5xOwogICAgIGVsZW0gPSBydW5xLT5uZXh0OwpAQCAtNzk1LDcgKzc5NSw3 IEBACiAgICAgICAgIGVsZW0gPSBuZXh0OwogICAgIH0KIAotICAgIHNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9sb2NrLCBmbGFncyk7 CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSku c2NoZWR1bGVfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTExMCw3ICsxMTEw LDcgQEAKICAgICAgICAgICogY2F1c2UgYSBkZWFkbG9jayBpZiB0aGUgcGVlciBDUFUgaXMgYWxz byBsb2FkIGJhbGFuY2luZyBhbmQgdHJ5aW5nCiAgICAgICAgICAqIHRvIGxvY2sgdGhpcyBDUFUu CiAgICAgICAgICAqLwotICAgICAgICBpZiAoICFzcGluX3RyeWxvY2soJnBlcl9jcHUoc2NoZWR1 bGVfZGF0YSwgcGVlcl9jcHUpLnNjaGVkdWxlX2xvY2spICkKKyAgICAgICAgaWYgKCAhc3Bpbl90 cnlsb2NrKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgcGVlcl9jcHUpLnNjaGVkdWxlX2xvY2spICkK ICAgICAgICAgewogICAgICAgICAgICAgQ1NDSEVEX1NUQVRfQ1JBTksoc3RlYWxfdHJ5bG9ja19m YWlsZWQpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMTIwLDcgKzExMjAsNyBAQAogICAg ICAgICAgKiBBbnkgd29yayBvdmVyIHRoZXJlIHRvIHN0ZWFsPwogICAgICAgICAgKi8KICAgICAg ICAgc3BlZXIgPSBjc2NoZWRfcnVucV9zdGVhbChwZWVyX2NwdSwgY3B1LCBzbmV4dC0+cHJpKTsK LSAgICAgICAgc3Bpbl91bmxvY2soJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgcGVlcl9jcHUpLnNj aGVkdWxlX2xvY2spOworICAgICAgICBzcGluX3VubG9jayhwZXJfY3B1KHNjaGVkdWxlX2RhdGEs IHBlZXJfY3B1KS5zY2hlZHVsZV9sb2NrKTsKICAgICAgICAgaWYgKCBzcGVlciAhPSBOVUxMICkK ICAgICAgICAgICAgIHJldHVybiBzcGVlcjsKICAgICB9CmRpZmYgLXIgMjk3ZGZmYzZjYTY1IHhl bi9jb21tb24vc2NoZWR1bGUuYwotLS0gYS94ZW4vY29tbW9uL3NjaGVkdWxlLmMJVHVlIEZlYiAw OSAxNDo0NTowOSAyMDEwICswMDAwCisrKyBiL3hlbi9jb21tb24vc2NoZWR1bGUuYwlNb24gRmVi IDE1IDEzOjUxOjIzIDIwMTAgKzAwMDAKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgIHNfdGltZV90 IGRlbHRhOwogCiAgICAgQVNTRVJUKHYtPnJ1bnN0YXRlLnN0YXRlICE9IG5ld19zdGF0ZSk7Ci0g ICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwZXJfY3B1KHNjaGVkdWxlX2RhdGEsdi0+cHJvY2Vz c29yKS5zY2hlZHVsZV9sb2NrKSk7CisgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKHBlcl9jcHUo c2NoZWR1bGVfZGF0YSx2LT5wcm9jZXNzb3IpLnNjaGVkdWxlX2xvY2spKTsKIAogICAgIHRyYWNl X3J1bnN0YXRlX2NoYW5nZSh2LCBuZXdfc3RhdGUpOwogCkBAIC0yOTksNyArMjk5LDcgQEAKICAg ICBvbGRfY3B1ID0gdi0+cHJvY2Vzc29yOwogICAgIHYtPnByb2Nlc3NvciA9IFNDSEVEX09QKHBp Y2tfY3B1LCB2KTsKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKAotICAgICAgICAmcGVyX2Nw dShzY2hlZHVsZV9kYXRhLCBvbGRfY3B1KS5zY2hlZHVsZV9sb2NrLCBmbGFncyk7CisgICAgICAg IHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgb2xkX2NwdSkuc2NoZWR1bGVfbG9jaywgZmxhZ3MpOwog CiAgICAgLyogV2FrZSBvbiBuZXcgQ1BVLiAqLwogICAgIHZjcHVfd2FrZSh2KTsKQEAgLTgwNiw3 ICs4MDYsNyBAQAogCiAgICAgc2QgPSAmdGhpc19jcHUoc2NoZWR1bGVfZGF0YSk7CiAKLSAgICBz cGluX2xvY2tfaXJxKCZzZC0+c2NoZWR1bGVfbG9jayk7CisgICAgc3Bpbl9sb2NrX2lycShzZC0+ c2NoZWR1bGVfbG9jayk7CiAKICAgICBzdG9wX3RpbWVyKCZzZC0+c190aW1lcik7CiAgICAgCkBA IC04MjIsNyArODIyLDcgQEAKIAogICAgIGlmICggdW5saWtlbHkocHJldiA9PSBuZXh0KSApCiAg ICAgewotICAgICAgICBzcGluX3VubG9ja19pcnEoJnNkLT5zY2hlZHVsZV9sb2NrKTsKKyAgICAg ICAgc3Bpbl91bmxvY2tfaXJxKHNkLT5zY2hlZHVsZV9sb2NrKTsKICAgICAgICAgdHJhY2VfY29u dGludWVfcnVubmluZyhuZXh0KTsKICAgICAgICAgcmV0dXJuIGNvbnRpbnVlX3J1bm5pbmcocHJl dik7CiAgICAgfQpAQCAtODUwLDcgKzg1MCw3IEBACiAgICAgQVNTRVJUKCFuZXh0LT5pc19ydW5u aW5nKTsKICAgICBuZXh0LT5pc19ydW5uaW5nID0gMTsKIAotICAgIHNwaW5fdW5sb2NrX2lycSgm c2QtPnNjaGVkdWxlX2xvY2spOworICAgIHNwaW5fdW5sb2NrX2lycShzZC0+c2NoZWR1bGVfbG9j ayk7CiAKICAgICBwZXJmY19pbmNyKHNjaGVkX2N0eCk7CiAKQEAgLTkyMiw3ICs5MjIsOSBAQAog CiAgICAgZm9yX2VhY2hfcG9zc2libGVfY3B1ICggaSApCiAgICAgewotICAgICAgICBzcGluX2xv Y2tfaW5pdCgmcGVyX2NwdShzY2hlZHVsZV9kYXRhLCBpKS5zY2hlZHVsZV9sb2NrKTsKKyAgICAg ICAgc3Bpbl9sb2NrX2luaXQoJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgaSkuX2xvY2spOworICAg ICAgICBwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGkpLnNjaGVkdWxlX2xvY2sKKyAgICAgICAgICAg ID0gJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgaSkuX2xvY2s7CiAgICAgICAgIGluaXRfdGltZXIo JnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgaSkuc190aW1lciwgc190aW1lcl9mbiwgTlVMTCwgaSk7 CiAgICAgfQogCkBAIC05NTYsMTAgKzk1OCwxMCBAQAogCiAgICAgZm9yX2VhY2hfb25saW5lX2Nw dSAoIGkgKQogICAgIHsKLSAgICAgICAgc3Bpbl9sb2NrKCZwZXJfY3B1KHNjaGVkdWxlX2RhdGEs IGkpLnNjaGVkdWxlX2xvY2spOworICAgICAgICBzcGluX2xvY2socGVyX2NwdShzY2hlZHVsZV9k YXRhLCBpKS5zY2hlZHVsZV9sb2NrKTsKICAgICAgICAgcHJpbnRrKCJDUFVbJTAyZF0gIiwgaSk7 CiAgICAgICAgIFNDSEVEX09QKGR1bXBfY3B1X3N0YXRlLCBpKTsKLSAgICAgICAgc3Bpbl91bmxv Y2soJnBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgaSkuc2NoZWR1bGVfbG9jayk7CisgICAgICAgIHNw aW5fdW5sb2NrKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgaSkuc2NoZWR1bGVfbG9jayk7CiAgICAg fQogCiAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC1yIDI5N2RmZmM2Y2E2NSB4 ZW4vaW5jbHVkZS94ZW4vc2NoZWQtaWYuaAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vc2NoZWQtaWYu aAlUdWUgRmViIDA5IDE0OjQ1OjA5IDIwMTAgKzAwMDAKKysrIGIveGVuL2luY2x1ZGUveGVuL3Nj aGVkLWlmLmgJTW9uIEZlYiAxNSAxMzo1MToyMyAyMDEwICswMDAwCkBAIC0xMCw4ICsxMCw0MyBA QAogCiAjaW5jbHVkZSA8eGVuL3BlcmNwdS5oPgogCisvKiBIb3cgZG8gd2UgY2hlY2sgaWYgdGhl IHZjcHUgaGFzIG1pZ3JhdGVkIHNpbmNlIHdlJ3ZlIGdyYWJiZWQgdGVoIGxvY2s/CisgKiBIYXZl IHRvIGFkZCBhIHJ1bnF1ZXVlIElEPyAgU3RpbGwgaGF2ZSB0byBtYXAgdmNwdSB0byBsb2NrLi4u IAorICoKKyAqIFdoZW4gd2UgbmVlZCB0byBsb2NrOgorICogKyBXaGVuIGNoYW5naW5nIGNlcnRh aW4gdmFsdWVzIGluIHRoZSB2Y3B1IHN0cnVjdAorICAgIC0gcnVuc3RhdGUKKyAgICAgLiBJbmNs dWRpbmcgc2xlZXAKKyAgICAtIFBhdXNlIHN0YXRlLi4uICh2Y3B1X3J1bm5hYmxlKT8KKyAgICAt IHYtPnByb2Nlc3NvcgorICAgIC0gdi0+aXNfcnVubmluZyAoSW1wbGljaXRseSBieSBncmFiYmlu ZyBzY2hlZHVsZSBsb2NrIGluIHNjaGVkdWxlKQorICAgIC0gdi0+YWZmaW5pdHkKKyAgICAtIEFu eXRpbWUgd2Ugd2FudCB0byBhdm9pZCBhIHJ1bm5pbmcgdmNwdSBiZWluZyBzY2hlZHVsZWQgb3V0 IHdoaWxlIHdlJ3JlIGRvaW5nIHNvbWV0aGluZworICAgICAuIGUuZy4sIHNjaGVkX2FkanVzdAor ICAgKyBXaGVuIHNjaGVkdWxpbmcKKyAgICAtIEltcGxpY2l0bHkgYWxzbyBjb3ZlcnMgaXNfcnVu bmluZywgcnVuc3RhdGVfY2hhbmdlCisKKyAgICsgRm9yIGNyZWRpdDI6CisgICAgLSBVcGRhdGlu ZyBydW5xdWV1ZSwgY3JlZGl0cywgJmMKKyAgIAorICoKKyAqIElkZWFzOiAKKyAqICsgUG9pbnRl ciBpbiB0aGUgdmNwdSBzdHJ1Y3Q7IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGNoYW5nZWQgc2luY2Ug eW91IGdyYWJiZWQgaXQuCisgKiAgIC0gQmlnIGFkZGl0aW9uIHRvIHN0cnVjdAorICogICAtIENh biBhIHBvaW50ZXIgdG8gYSBsb2NrIGJlIHByb3RlY3RlZCBieSB0aGUgbG9jayBpdCBwb2ludHMg dG8/IT8KKyAqICsgTG9jayBieSBydW5xIGlkLCBtYXAgY3B1IHRvIHJ1bnEgKD8pCisgKiArIFNw aW5sb2NrIGNhbGxiYWNrIHcvIHZjcHUgcG9pbnRlci4KKyAgICAtIFR1cm5zIHNwaW5sb2NrcyBp bnRvIGluZGlyZWN0IGZ1bmN0aW9uIGNhbGxzLgorICAgKyBKdXN0IGRvIHRoZSBzYW1lIHRoaW5n OyBpdCB3b24ndCBodXJ0IHRvIGdyYWIgdGhlIHNhbWUgbG9jayB0d2ljZTsgaWYgaXQgZG9lcywK KyAgICAgd2UgY2FuIHRoaW5rIGFib3V0IG1ha2luZyB0aGUgbG9vcCBtb3JlIGVmZmljaWVudC4K KyAqLworCisvKiBJZGVhOiBGb3IgY2FjaGUgYmV0dGVybmVzcywga2VlcCB0aGUgYWN0dWFsIGxv Y2sgaW4gdGhlIHNhbWUgY2FjaGUgYXJlYQorICogYXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdC4g IEp1c3QgaGF2ZSB0aGUgc2NoZWR1bGVyIHBvaW50IHRvIHRoZSBvbmUgaXQgd2FudHMKKyAqIChU aGlzIG1heSBiZSB0aGUgb25lIHJpZ2h0IGluIGZyb250IG9mIGl0KS4qLwogc3RydWN0IHNjaGVk dWxlX2RhdGEgewotICAgIHNwaW5sb2NrX3QgICAgICAgICAgc2NoZWR1bGVfbG9jazsgIC8qIHNw aW5sb2NrIHByb3RlY3RpbmcgY3VyciAgICAgICAgKi8KKyAgICBzcGlubG9ja190ICAgICAgICAg KnNjaGVkdWxlX2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIF9sb2NrOwogICAgIHN0cnVj dCB2Y3B1ICAgICAgICAqY3VycjsgICAgICAgICAgIC8qIGN1cnJlbnQgdGFzayAgICAgICAgICAg ICAgICAgICAgKi8KICAgICBzdHJ1Y3QgdmNwdSAgICAgICAgKmlkbGU7ICAgICAgICAgICAvKiBp ZGxlIHRhc2sgZm9yIHRoaXMgY3B1ICAgICAgICAgICovCiAgICAgdm9pZCAgICAgICAgICAgICAg ICpzY2hlZF9wcml2OwpAQCAtMjYsMTEgKzYxLDE5IEBACiAKICAgICBmb3IgKCA7IDsgKQogICAg IHsKKyAgICAgICAgLyogTkI6IEZvciBzY2hlZHVsZXJzIHdpdGggbXVsdGlwbGUgY29yZXMgcGVy IHJ1bnF1ZXVlLAorICAgICAgICAgKiBhIHZjcHUgbWF5IGNoYW5nZSBwcm9jZXNzb3Igdy9vIGNo YW5naW5nIHJ1bnF1ZXVlczsKKyAgICAgICAgICogc28gd2UgbWF5IHJlbGVhc2UgYSBsb2NrIG9u bHkgdG8gZ3JhYiBpdCBhZ2Fpbi4KKyAgICAgICAgICoKKyAgICAgICAgICogSWYgdGhhdCBpcyBt ZWFzdXJlZCB0byBiZSBhbiBpc3N1ZSwgdGhlbiB0aGUgY2hlY2sKKyAgICAgICAgICogc2hvdWxk IGJlIGNoYW5nZWQgdG8gY2hlY2tpbmcgaWYgdGhlIGxvY2tzIHBvaW50ZWQgdG8KKyAgICAgICAg ICogYnkgY3B1IGFuZCB2LT5wcm9jZXNzb3IgYXJlIHN0aWxsIHRoZSBzYW1lLgorICAgICAgICAg Ki8KICAgICAgICAgY3B1ID0gdi0+cHJvY2Vzc29yOwotICAgICAgICBzcGluX2xvY2soJnBlcl9j cHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9sb2NrKTsKKyAgICAgICAgc3Bpbl9sb2Nr KHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hlZHVsZV9sb2NrKTsKICAgICAgICAgaWYg KCBsaWtlbHkodi0+cHJvY2Vzc29yID09IGNwdSkgKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgIHNwaW5fdW5sb2NrKCZwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSkuc2NoZWR1bGVfbG9j ayk7CisgICAgICAgIHNwaW5fdW5sb2NrKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hl ZHVsZV9sb2NrKTsKICAgICB9CiB9CiAKQEAgLTQxLDcgKzg0LDcgQEAKIAogc3RhdGljIGlubGlu ZSB2b2lkIHZjcHVfc2NoZWR1bGVfdW5sb2NrKHN0cnVjdCB2Y3B1ICp2KQogewotICAgIHNwaW5f dW5sb2NrKCZwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIHYtPnByb2Nlc3Nvcikuc2NoZWR1bGVfbG9j ayk7CisgICAgc3Bpbl91bmxvY2socGVyX2NwdShzY2hlZHVsZV9kYXRhLCB2LT5wcm9jZXNzb3Ip LnNjaGVkdWxlX2xvY2spOwogfQogCiAjZGVmaW5lIHZjcHVfc2NoZWR1bGVfdW5sb2NrX2lycSh2 KSBcCg== --0023545306443d014c047fa6d415 Content-Type: text/x-patch; charset=US-ASCII; name="trace-sched-class.diff" Content-Disposition: attachment; filename="trace-sched-class.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5pi4eff2 ZGlmZiAtciA1ZWI3ZGRlNWIyOWIgeGVuL2luY2x1ZGUvcHVibGljL3RyYWNlLmgKLS0tIGEveGVu L2luY2x1ZGUvcHVibGljL3RyYWNlLmgJVHVlIEZlYiAwOSAxNDo0NTowOSAyMDEwICswMDAwCisr KyBiL3hlbi9pbmNsdWRlL3B1YmxpYy90cmFjZS5oCU1vbiBGZWIgMTUgMTQ6MDM6NTcgMjAxMCAr MDAwMApAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZSBUUkNfSFZNX0hBTkRMRVIgICAweDAwMDgy MDAwICAgLyogdmFyaW91cyBIVk0gaGFuZGxlcnMgICAgICAqLwogCiAjZGVmaW5lIFRSQ19TQ0hF RF9NSU4gICAgICAgMHgwMDAyMTAwMCAgIC8qIEp1c3QgcnVuc3RhdGUgY2hhbmdlcyAqLworI2Rl ZmluZSBUUkNfU0NIRURfQ0xBU1MgICAgIDB4MDAwMjIwMDAgICAvKiBTY2hlZHVsZXItc3BlY2lm aWMgICAgKi8KICNkZWZpbmUgVFJDX1NDSEVEX1ZFUkJPU0UgICAweDAwMDI4MDAwICAgLyogTW9y ZSBpbmNsdXNpdmUgc2NoZWR1bGluZyAqLwogCiAvKiBUcmFjZSBldmVudHMgcGVyIGNsYXNzICov Cg== --0023545306443d014c047fa6d415 Content-Type: text/x-patch; charset=US-ASCII; name="20100215-credit2-hypervisor-spinlock-pointers.diff" Content-Disposition: attachment; filename="20100215-credit2-hypervisor-spinlock-pointers.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5pi4f933 ZGlmZiAtciA4ODliZDE5ZGQwOWQgeGVuL2NvbW1vbi9NYWtlZmlsZQotLS0gYS94ZW4vY29tbW9u L01ha2VmaWxlCU1vbiBGZWIgMTUgMTU6MjM6MDkgMjAxMCArMDAwMAorKysgYi94ZW4vY29tbW9u L01ha2VmaWxlCU1vbiBGZWIgMTUgMTY6MTU6MTYgMjAxMCArMDAwMApAQCAtMTMsNiArMTMsNyBA QAogb2JqLXkgKz0gcGFnZV9hbGxvYy5vCiBvYmoteSArPSByYW5nZXNldC5vCiBvYmoteSArPSBz Y2hlZF9jcmVkaXQubworb2JqLXkgKz0gc2NoZWRfY3JlZGl0Mi5vCiBvYmoteSArPSBzY2hlZF9z ZWRmLm8KIG9iai15ICs9IHNjaGVkdWxlLm8KIG9iai15ICs9IHNodXRkb3duLm8KZGlmZiAtciA4 ODliZDE5ZGQwOWQgeGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMKLS0tIC9kZXYvbnVsbAlUaHUg SmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQy LmMJTW9uIEZlYiAxNSAxNjoxNToxNiAyMDEwICswMDAwCkBAIC0wLDAgKzEsMTEyMSBAQAorCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogKEMpIDIwMDkgLSBHZW9yZ2UgRHVubGFwIC0gQ2l0cml4 IFN5c3RlbXMgUiZEIFVLLCBMdGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAg IEZpbGU6IGNvbW1vbi9jc2NoZWRfY3JlZGl0Mi5jCisgKiAgICAgIEF1dGhvcjogR2VvcmdlIER1 bmxhcAorICoKKyAqIERlc2NyaXB0aW9uOiBDcmVkaXQtYmFzZWQgU01QIENQVSBzY2hlZHVsZXIK KyAqIEJhc2VkIG9uIGFuIGVhcmxpZXIgdmVyc29uIGJ5IEVtbWFudWVsIEFja2FvdXkuCisgKi8K KworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1 ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vZG9t YWluLmg+CisjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+CisjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+Cisj aW5jbHVkZSA8eGVuL3RpbWUuaD4KKyNpbmNsdWRlIDx4ZW4vcGVyZmMuaD4KKyNpbmNsdWRlIDx4 ZW4vc2NoZWQtaWYuaD4KKyNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPgorI2luY2x1ZGUgPGFzbS9h dG9taWMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4K KworI2lmIF9faTM4Nl9fCisjZGVmaW5lIFBSSV9zdGltZSAibGxkIgorI2Vsc2UKKyNkZWZpbmUg UFJJX3N0aW1lICJsZCIKKyNlbmRpZgorCisjZGVmaW5lIGQycHJpbnRrKHguLi4pCisvLyNkZWZp bmUgZDJwcmludGsgcHJpbnRrCisKKyNkZWZpbmUgVFJDX0NTQ0hFRDJfVElDSyAgICAgICAgVFJD X1NDSEVEX0NMQVNTICsgMQorI2RlZmluZSBUUkNfQ1NDSEVEMl9SVU5RX1BPUyAgICBUUkNfU0NI RURfQ0xBU1MgKyAyCisjZGVmaW5lIFRSQ19DU0NIRUQyX0NSRURJVF9CVVJOIFRSQ19TQ0hFRF9D TEFTUyArIDMKKyNkZWZpbmUgVFJDX0NTQ0hFRDJfQ1JFRElUX0FERCAgVFJDX1NDSEVEX0NMQVNT ICsgNAorI2RlZmluZSBUUkNfQ1NDSEVEMl9USUNLTEVfQ0hFQ0sgVFJDX1NDSEVEX0NMQVNTICsg NQorCisvKgorICogV0FSTklORzogVGhpcyBpcyBzdGlsbCBpbiBhbiBleHBlcmltZW50YWwgcGhh c2UuICBTdGF0dXMgYW5kIHdvcmsgY2FuIGJlIGZvdW5kIGF0IHRoZQorICogY3JlZGl0MiB3aWtp IHBhZ2U6CisgKiAgaHR0cDovL3dpa2kueGVuc291cmNlLmNvbS94ZW53aWtpL0NyZWRpdDJfU2No ZWR1bGVyX0RldmVsb3BtZW50CisgKiBUT0RPOgorICogKyBJbW1lZGlhdGUgYnVnLWZpeGVzCisg KiAgLSBEbyBwZXItcnVucXVldWUsIGdyYWIgcHJvcGVyIGxvY2sgZm9yIGR1bXAgZGVidWdrZXkK KyAqICsgTXVsdGlwbGUgc29ja2V0cworICogIC0gRGV0ZWN0IGNwdSBsYXlvdXQgYW5kIG1ha2Ug cnVucXVldWUgbWFwLCBvbmUgcGVyIEwyIChtYWtlX3J1bnFfbWFwKCkpCisgKiAgLSBTaW1wbGUg bG9hZCBiYWxhbmNlciAvIHJ1bnF1ZXVlIGFzc2lnbm1lbnQKKyAqICAtIFJ1bnF1ZXVlIGxvYWQg bWVhc3VyZW1lbnQKKyAqICAtIExvYWQtYmFzZWQgbG9hZCBiYWxhbmNlcgorICogKyBIeXBlcnRo cmVhZGluZworICogIC0gTG9vayBmb3Igbm9uLWJ1c3kgY29yZSBpZiBwb3NzaWJsZQorICogIC0g IkRpc2NvdW50IiB0aW1lIHJ1biBvbiBhIHRocmVhZCB3aXRoIGJ1c3kgc2libGluZ3MKKyAqICsg QWxnb3JpdGhtOgorICogIC0gIk1peGVkIHdvcmsiIHByb2JsZW06IGlmIGEgVk0gaXMgcGxheWlu ZyBhdWRpbyAoNSUpIGJ1dCBhbHNvIGJ1cm5pbmcgY3B1IChlLmcuLAorICogICAgYSBmbGFzaCBh bmltYXRpb24gaW4gdGhlIGJhY2tncm91bmQpIGNhbiB3ZSBzY2hlZHVsZSBpdCB3aXRoIGxvdyBl bm91Z2ggbGF0ZW5jeQorICogICAgc28gdGhhdCBhdWRpbyBkb2Vzbid0IHNraXA/CisgKiAgLSBD YXAgYW5kIHJlc2VydmF0aW9uOiBIb3cgdG8gaW1wbGVtZW50IHdpdGggdGhlIGN1cnJlbnQgc3lz dGVtPworICogKyBPcHRpbWl6aW5nCisgKiAgLSBQcm9maWxpbmcsIG1ha2luZyBuZXcgYWxnb3Jp dGhtcywgbWFraW5nIG1hdGggbW9yZSBlZmZpY2llbnQgKG5vIGxvbmcgZGl2aXNpb24pCisgKi8K KworLyogCisgKiBEZXNpZ246CisgKgorICogVk1zICJidXJuIiBjcmVkaXRzIGJhc2VkIG9uIHRo ZWlyIHdlaWdodDsgaGlnaGVyIHdlaWdodCBtZWFucworICogY3JlZGl0cyBidXJuIG1vcmUgc2xv d2x5LiAgVGhlIGhpZ2hlc3Qgd2VpZ2h0IHZjcHUgYnVybnMgY3JlZGl0cyBhdAorICogYSByYXRl IG9mIDEgY3JlZGl0IHBlciBuYW5vc2Vjb25kLiAgT3RoZXJzIGJ1cm4gcHJvcG9ydGlvbmFsbHkK KyAqIG1vcmUuCisgKiAKKyAqIHZjcHVzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBydW5xdWV1ZSBi eSBjcmVkaXQgb3JkZXIuCisgKgorICogQ3JlZGl0cyBhcmUgInJlc2V0IiB3aGVuIHRoZSBuZXh0 IHZjcHUgaW4gdGhlIHJ1bnF1ZXVlIGlzIGxlc3MgdGhhbgorICogb3IgZXF1YWwgdG8gemVyby4g IEF0IHRoYXQgcG9pbnQsIGV2ZXJ5b25lJ3MgY3JlZGl0cyBhcmUgImNsaXBwZWQiCisgKiB0byBh IHNtYWxsIHZhbHVlLCBhbmQgYSBmaXhlZCBjcmVkaXQgaXMgYWRkZWQgdG8gZXZlcnlvbmUuCisg KgorICogVGhlIHBsYW4gaXMgZm9yIGFsbCBjb3JlcyB0aGF0IHNoYXJlIGFuIEwyIHdpbGwgc2hh cmUgdGhlIHNhbWUKKyAqIHJ1bnF1ZXVlLiAgQXQgdGhlIG1vbWVudCwgdGhlcmUgaXMgb25lIGds b2JhbCBydW5xdWV1ZSBmb3IgYWxsCisgKiBjb3Jlcy4KKyAqLworCisvKgorICogTG9ja2luZzoK KyAqIC0gU2NoZWR1bGUtbG9jayBpcyBwZXItcnVucXVldWUKKyAqICArIFByb3RlY3RzIHJ1bnF1 ZXVlIGRhdGEsIHJ1bnF1ZXVlIGluc2VydGlvbiwgJmMKKyAqICArIEFsc28gcHJvdGVjdHMgdXBk YXRlcyB0byBwcml2YXRlIHNjaGVkIHZjcHUgc3RydWN0dXJlCisgKiAgKyBNdXN0IGJlIGdyYWJi ZWQgdXNpbmcgdmNwdV9zY2hlZHVsZV9sb2NrX2lycSgpIHRvIG1ha2Ugc3VyZSB2Y3B1LT5wcm9j ZXNzcgorICogICAgZG9lc24ndCBjaGFuZ2UgdW5kZXIgb3VyIGZlZXQuCisgKiAtIFByaXZhdGUg ZGF0YSBsb2NrCisgKiAgKyBQcm90ZWN0cyBhY2Nlc3MgdG8gZ2xvYmFsIGRvbWFpbiBsaXN0Cisg KiAgKyBBbGwgb3RoZXIgcHJpdmF0ZSBkYXRhIGlzIHdyaXR0ZW4gYXQgaW5pdCBhbmQgb25seSBy ZWFkIGFmdGVyd2FyZHMuCisgKiBPcmRlcmluZzoKKyAqIC0gV2UgZ3JhYiBwcml2YXRlLT5zY2hl ZHVsZSB3aGVuIHVwZGF0aW5nIGRvbWFpbiB3ZWlnaHQ7IHNvIHdlCisgKiAgbXVzdCBuZXZlciBn cmFiIHByaXZhdGUgaWYgYSBzY2hlZHVsZSBsb2NrIGlzIGhlbGQuCisgKi8KKworLyoKKyAqIEJh c2ljIGNvbnN0YW50cworICovCisvKiBEZWZhdWx0IHdlaWdodDogSG93IG11Y2ggYSBuZXcgZG9t YWluIHN0YXJ0cyB3aXRoICovCisjZGVmaW5lIENTQ0hFRF9ERUZBVUxUX1dFSUdIVCAgICAgICAy NTYKKy8qIE1pbiB0aW1lcjogTWluaW11bSBsZW5ndGggYSB0aW1lciB3aWxsIGJlIHNldCwgdG8K KyAqIGFjaGlldmUgZWZmaWNpZW5jeSAqLworI2RlZmluZSBDU0NIRURfTUlOX1RJTUVSICAgICAg ICAgICAgTUlDUk9TRUNTKDUwMCkKKy8qIEFtb3VudCBvZiBjcmVkaXQgVk1zIGJlZ2luIHdpdGgs IGFuZCBhcmUgcmVzZXQgdG8uCisgKiBBVE0sIHNldCBzbyB0aGF0IGhpZ2hlc3Qtd2VpZ2h0IFZN cyBjYW4gb25seSBydW4gZm9yIDEwbXMKKyAqIGJlZm9yZSBhIHJlc2V0IGV2ZW50LiAqLworI2Rl ZmluZSBDU0NIRURfQ1JFRElUX0lOSVQgICAgICAgICAgTUlMTElTRUNTKDEwKQorLyogQ2Fycnlv dmVyOiBIb3cgbXVjaCAiZXh0cmEiIGNyZWRpdCBtYXkgYmUgY2FycmllZCBvdmVyIGFmdGVyCisg KiBhIHJlc2V0LiAqLworI2RlZmluZSBDU0NIRURfQ0FSUllPVkVSX01BWCAgICAgICAgQ1NDSEVE X01JTl9USU1FUgorLyogUmVzZXQ6IFZhbHVlIGJlbG93IHdoaWNoIGNyZWRpdCB3aWxsIGJlIHJl c2V0LiAqLworI2RlZmluZSBDU0NIRURfQ1JFRElUX1JFU0VUICAgICAgICAgMAorLyogTWF4IHRp bWVyOiBNYXhpbXVtIHRpbWUgYSBndWVzdCBjYW4gYmUgcnVuIGZvci4gKi8KKyNkZWZpbmUgQ1ND SEVEX01BWF9USU1FUiAgICAgICAgICAgIE1JTExJU0VDUygyKQorCisKKyNkZWZpbmUgQ1NDSEVE X0lETEVfQ1JFRElUICAgICAgICAgICAgICAgICAoLSgxPDwzMCkpCisKKy8qCisgKiBGbGFncwor ICovCisvKiBDU0ZMQUdfc2NoZWR1bGVkOiBJcyB0aGlzIHZjcHUgZWl0aGVyIHJ1bm5pbmcgb24s IG9yIGNvbnRleHQtc3dpdGNoaW5nIG9mZiwKKyAqIGEgcGh5c2ljYWwgY3B1PworICogKyBBY2Nl c3NlZCBvbmx5IHdpdGggcnVucXVldWUgbG9jayBoZWxkCisgKiArIFNldCB3aGVuIGNob3NlbiBh cyBuZXh0IGluIGNzY2hlZF9zY2hlZHVsZSgpLgorICogKyBDbGVhcmVkIGFmdGVyIGNvbnRleHQg c3dpdGNoIGhhcyBiZWVuIHNhdmVkIGluIGNzY2hlZF9jb250ZXh0X3NhdmVkKCkKKyAqICsgQ2hl Y2tlZCBpbiB2Y3B1X3dha2UgdG8gc2VlIGlmIHdlIGNhbiBhZGQgdG8gdGhlIHJ1bnF1ZXVlLCBv ciBpZiB3ZSBzaG91bGQKKyAqICAgc2V0IENTRkxBR19kZWxheWVkX3J1bnFfYWRkCisgKiArIENo ZWNrZWQgdG8gYmUgZmFsc2UgaW4gcnVucV9pbnNlcnQuCisgKi8KKyNkZWZpbmUgX19DU0ZMQUdf c2NoZWR1bGVkIDEKKyNkZWZpbmUgQ1NGTEFHX3NjaGVkdWxlZCAoMTw8X19DU0ZMQUdfc2NoZWR1 bGVkKQorLyogQ1NGTEFHX2RlbGF5ZWRfcnVucV9hZGQ6IERvIHdlIG5lZWQgdG8gYWRkIHRoaXMg dG8gdGhlIHJ1bnF1ZXVlIG9uY2UgaXQnZCBkb25lCisgKiBiZWluZyBjb250ZXh0IHN3aXRjaGVk IG91dD8KKyAqICsgU2V0IHdoZW4gc2NoZWR1bGluZyBvdXQgaW4gY3NjaGVkX3NjaGVkdWxlKCkg aWYgcHJldiBpcyBydW5uYWJsZQorICogKyBTZXQgaW4gY3NjaGVkX3ZjcHVfd2FrZSBpZiBpdCBm aW5kcyBDU0ZMQUdfc2NoZWR1bGVkIHNldAorICogKyBSZWFkIGluIGNzY2hlZF9jb250ZXh0X3Nh dmVkKCkuICBJZiBzZXQsIGl0IGFkZHMgcHJldiB0byB0aGUgcnVucXVldWUgYW5kCisgKiAgIGNs ZWFycyB0aGUgYml0LgorICovCisjZGVmaW5lIF9fQ1NGTEFHX2RlbGF5ZWRfcnVucV9hZGQgMgor I2RlZmluZSBDU0ZMQUdfZGVsYXllZF9ydW5xX2FkZCAoMTw8X19DU0ZMQUdfZGVsYXllZF9ydW5x X2FkZCkKKworCisvKgorICogVXNlZnVsIG1hY3JvcworICovCisjZGVmaW5lIENTQ0hFRF9WQ1BV KF92Y3B1KSAgKChzdHJ1Y3QgY3NjaGVkX3ZjcHUgKikgKF92Y3B1KS0+c2NoZWRfcHJpdikKKyNk ZWZpbmUgQ1NDSEVEX0RPTShfZG9tKSAgICAoKHN0cnVjdCBjc2NoZWRfZG9tICopIChfZG9tKS0+ c2NoZWRfcHJpdikKKy8qIENQVSB0byBydW5xX2lkIG1hY3JvICovCisjZGVmaW5lIGMycihfY3B1 KSAgICAgICAgICAgKGNzY2hlZF9wcml2LnJ1bnFfbWFwWyhfY3B1KV0pCisvKiBDUFUgdG8gcnVu cXVldWUgc3RydWN0IG1hY3JvICovCisjZGVmaW5lIFJRRChfY3B1KSAgICAgICAgICAoJmNzY2hl ZF9wcml2LnJxZFtjMnIoX2NwdSldKQorCisvKgorICogUGVyLXJ1bnF1ZXVlIGRhdGEKKyAqLwor c3RydWN0IGNzY2hlZF9ydW5xdWV1ZV9kYXRhIHsKKyAgICBpbnQgaWQ7CisgICAgc3RydWN0IGxp c3RfaGVhZCBydW5xOyAvKiBPcmRlcmVkIGxpc3Qgb2YgcnVubmFibGUgdm1zICovCisgICAgc3Ry dWN0IGxpc3RfaGVhZCBzdmM7ICAvKiBMaXN0IG9mIGFsbCB2Y3B1cyBhc3NpZ25lZCB0byB0aGlz IHJ1bnF1ZXVlICovCisgICAgaW50IG1heF93ZWlnaHQ7CisgICAgaW50IGNwdV9taW4sIGNwdV9t YXg7ICAvKiBSYW5nZSBvZiBwaHlzaWNhbCBjcHVzIHRoaXMgcnVucXVldWUgcnVucyAqLworfTsK KworLyoKKyAqIFN5c3RlbS13aWRlIHByaXZhdGUgZGF0YQorICovCitzdHJ1Y3QgY3NjaGVkX3By aXZhdGUgeworICAgIHNwaW5sb2NrX3QgbG9jazsKKyAgICB1aW50MzJfdCBuY3B1czsKKyAgICBz dHJ1Y3QgZG9tYWluICppZGxlX2RvbWFpbjsKKworICAgIHN0cnVjdCBsaXN0X2hlYWQgc2RvbTsg LyogVXNlZCBtb3N0bHkgZm9yIGR1bXAga2V5aGFuZGxlci4gKi8KKworICAgIGludCBydW5xX21h cFtOUl9DUFVTXTsKKyAgICB1aW50MzJfdCBydW5xX2NvdW50OworICAgIHN0cnVjdCBjc2NoZWRf cnVucXVldWVfZGF0YSBycWRbTlJfQ1BVU107Cit9OworCisvKgorICogVmlydHVhbCBDUFUKKyAq Lworc3RydWN0IGNzY2hlZF92Y3B1IHsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJxZF9lbGVtOyAg LyogT24gdGhlIHJ1bnF1ZXVlIGRhdGEgbGlzdCAqLworICAgIHN0cnVjdCBsaXN0X2hlYWQgc2Rv bV9lbGVtOyAvKiBPbiB0aGUgZG9tYWluIHZjcHUgbGlzdCAqLworICAgIHN0cnVjdCBsaXN0X2hl YWQgcnVucV9lbGVtOyAvKiBPbiB0aGUgcnVucXVldWUgICAgICAgICAqLworCisgICAgLyogVXAt cG9pbnRlcnMgKi8KKyAgICBzdHJ1Y3QgY3NjaGVkX2RvbSAqc2RvbTsKKyAgICBzdHJ1Y3QgdmNw dSAqdmNwdTsKKworICAgIGludCB3ZWlnaHQ7CisKKyAgICBpbnQgY3JlZGl0OworICAgIHNfdGlt ZV90IHN0YXJ0X3RpbWU7IC8qIFdoZW4gd2Ugd2VyZSBzY2hlZHVsZWQgKHVzZWQgZm9yIGNyZWRp dCkgKi8KKyAgICB1bnNpZ25lZCBmbGFnczsgICAgICAvKiAxNiBiaXRzIGRvZXNuJ3Qgc2VlbSB0 byBwbGF5IHdlbGwgd2l0aCBjbGVhcl9iaXQoKSAqLworCit9OworCisvKgorICogRG9tYWluCisg Ki8KK3N0cnVjdCBjc2NoZWRfZG9tIHsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHZjcHU7CisgICAg c3RydWN0IGxpc3RfaGVhZCBzZG9tX2VsZW07CisgICAgc3RydWN0IGRvbWFpbiAqZG9tOworICAg IHVpbnQxNl90IHdlaWdodDsKKyAgICB1aW50MTZfdCBucl92Y3B1czsKK307CisKKworLyoKKyAq IEdsb2JhbCB2YXJpYWJsZXMKKyAqLworc3RhdGljIHN0cnVjdCBjc2NoZWRfcHJpdmF0ZSBjc2No ZWRfcHJpdjsKKworLyoKKyAqIFRpbWUtdG8tY3JlZGl0LCBjcmVkaXQtdG8tdGltZS4KKyAqIEZJ WE1FOiBEbyBwcmUtY2FsY3VsYXRlZCBkaXZpc2lvbj8KKyAqLworc3RhdGljIHNfdGltZV90IHQy YyhzdHJ1Y3QgY3NjaGVkX3J1bnF1ZXVlX2RhdGEgKnJxZCwgc190aW1lX3QgdGltZSwgc3RydWN0 IGNzY2hlZF92Y3B1ICpzdmMpCit7CisgICAgcmV0dXJuIHRpbWUgKiBycWQtPm1heF93ZWlnaHQg LyBzdmMtPndlaWdodDsKK30KKworc3RhdGljIHNfdGltZV90IGMydChzdHJ1Y3QgY3NjaGVkX3J1 bnF1ZXVlX2RhdGEgKnJxZCwgc190aW1lX3QgY3JlZGl0LCBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2 YykKK3sKKyAgICByZXR1cm4gY3JlZGl0ICogc3ZjLT53ZWlnaHQgLyBycWQtPm1heF93ZWlnaHQ7 Cit9CisKKy8qCisgKiBSdW5xdWV1ZSByZWxhdGVkIGNvZGUKKyAqLworCitzdGF0aWMgLyppbmxp bmUqLyBpbnQKK19fdmNwdV9vbl9ydW5xKHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAg IHJldHVybiAhbGlzdF9lbXB0eSgmc3ZjLT5ydW5xX2VsZW0pOworfQorCitzdGF0aWMgLyppbmxp bmUqLyBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKgorX19ydW5xX2VsZW0oc3RydWN0IGxpc3RfaGVhZCAq ZWxlbSkKK3sKKyAgICByZXR1cm4gbGlzdF9lbnRyeShlbGVtLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUs IHJ1bnFfZWxlbSk7Cit9CisKK3N0YXRpYyBpbnQKK19fcnVucV9pbnNlcnQoc3RydWN0IGxpc3Rf aGVhZCAqcnVucSwgc3RydWN0IGNzY2hlZF92Y3B1ICpzdmMpCit7CisgICAgc3RydWN0IGxpc3Rf aGVhZCAqaXRlcjsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIGQycHJpbnRrKCJycWkgZCVkdiVk XG4iLAorICAgICAgICAgICBzdmMtPnZjcHUtPmRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAg ICBzdmMtPnZjcHUtPnZjcHVfaWQpOworCisgICAgLyogSWRsZSB2Y3B1cyBub3QgYWxsb3dlZCBv biB0aGUgcnVucXVldWUgYW55bW9yZSAqLworICAgIEJVR19PTihpc19pZGxlX3ZjcHUoc3ZjLT52 Y3B1KSk7CisgICAgQlVHX09OKHN2Yy0+dmNwdS0+aXNfcnVubmluZyk7CisgICAgQlVHX09OKHRl c3RfYml0KF9fQ1NGTEFHX3NjaGVkdWxlZCwgJnN2Yy0+ZmxhZ3MpKTsKKworICAgIGxpc3RfZm9y X2VhY2goIGl0ZXIsIHJ1bnEgKQorICAgIHsKKyAgICAgICAgc3RydWN0IGNzY2hlZF92Y3B1ICog aXRlcl9zdmMgPSBfX3J1bnFfZWxlbShpdGVyKTsKKworICAgICAgICBpZiAoIHN2Yy0+Y3JlZGl0 ID4gaXRlcl9zdmMtPmNyZWRpdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGQycHJpbnRrKCIg cCVkIGQlZHYlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBwb3MsCisgICAgICAgICAgICAgICAg ICAgaXRlcl9zdmMtPnZjcHUtPmRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICAgICAgICAg IGl0ZXJfc3ZjLT52Y3B1LT52Y3B1X2lkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgICAgIHBvcysrOworICAgIH0KKworICAgIGxpc3RfYWRkX3RhaWwoJnN2Yy0+cnVucV9l bGVtLCBpdGVyKTsKKworICAgIHJldHVybiBwb3M7Cit9CisKK3N0YXRpYyB2b2lkCitydW5xX2lu c2VydCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2YykKK3sKKyAgICBz dHJ1Y3QgbGlzdF9oZWFkICogcnVucSA9ICZSUUQoY3B1KS0+cnVucTsKKyAgICBpbnQgcG9zID0g MDsKKworICAgIEFTU0VSVCggc3Bpbl9pc19sb2NrZWQocGVyX2NwdShzY2hlZHVsZV9kYXRhLCBj cHUpLnNjaGVkdWxlX2xvY2spICk7IAorCisgICAgQlVHX09OKCBfX3ZjcHVfb25fcnVucShzdmMp ICk7CisgICAgQlVHX09OKCBjMnIoY3B1KSAhPSBjMnIoc3ZjLT52Y3B1LT5wcm9jZXNzb3IpICk7 IAorCisgICAgcG9zID0gX19ydW5xX2luc2VydChydW5xLCBzdmMpOworCisgICAgeworICAgICAg ICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tOjE2LHZjcHU6MTY7CisgICAgICAg ICAgICB1bnNpZ25lZCBwb3M7CisgICAgICAgIH0gZDsKKyAgICAgICAgZC5kb20gPSBzdmMtPnZj cHUtPmRvbWFpbi0+ZG9tYWluX2lkOworICAgICAgICBkLnZjcHUgPSBzdmMtPnZjcHUtPnZjcHVf aWQ7CisgICAgICAgIGQucG9zID0gcG9zOworICAgICAgICB0cmFjZV92YXIoVFJDX0NTQ0hFRDJf UlVOUV9QT1MsIDEsCisgICAgICAgICAgICAgICAgICBzaXplb2YoZCksCisgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorX19ydW5xX3JlbW92ZShzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2YykK K3sKKyAgICBCVUdfT04oICFfX3ZjcHVfb25fcnVucShzdmMpICk7CisgICAgbGlzdF9kZWxfaW5p dCgmc3ZjLT5ydW5xX2VsZW0pOworfQorCit2b2lkIGJ1cm5fY3JlZGl0cyhzdHJ1Y3QgY3NjaGVk X3J1bnF1ZXVlX2RhdGEgKnJxZCwgc3RydWN0IGNzY2hlZF92Y3B1ICosIHNfdGltZV90KTsKKwor LyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtIG9uIHRoZSBydW5xdWV1ZSBpcyBoaWdoZXIgcHJp b3JpdHkgdGhhbiB3aGF0J3MKKyAqIGN1cnJlbnRseSBydW5uaW5nOyBpZiBzbywgd2FrZSB1cCB0 aGUgcHJvY2Vzc29yICovCitzdGF0aWMgLyppbmxpbmUqLyB2b2lkCitydW5xX3RpY2tsZSh1bnNp Z25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKm5ldywgc190aW1lX3Qgbm93KQorewor ICAgIGludCBpLCBpcGlkPS0xOworICAgIHNfdGltZV90IGxvd2VzdD0oMTw8MzApOworICAgIHN0 cnVjdCBjc2NoZWRfcnVucXVldWVfZGF0YSAqcnFkID0gUlFEKGNwdSk7CisKKyAgICBkMnByaW50 aygicnF0IGQlZHYlZCBjZCVkdiVkXG4iLAorICAgICAgICAgICAgIG5ldy0+dmNwdS0+ZG9tYWlu LT5kb21haW5faWQsCisgICAgICAgICAgICAgbmV3LT52Y3B1LT52Y3B1X2lkLAorICAgICAgICAg ICAgIGN1cnJlbnQtPmRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICAgIGN1cnJlbnQtPnZj cHVfaWQpOworCisgICAgLyogRmluZCB0aGUgY3B1IGluIHRoaXMgcXVldWUgZ3JvdXAgdGhhdCBo YXMgdGhlIGxvd2VzdCBjcmVkaXRzICovCisgICAgZm9yICggaT1ycWQtPmNwdV9taW4gOyBpIDwg cnFkLT5jcHVfbWF4IDsgaSsrICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAq IGN1cjsKKworICAgICAgICAvKiBTa2lwIGNwdXMgdGhhdCBhcmVuJ3Qgb25saW5lICovCisgICAg ICAgIGlmICggIWNwdV9vbmxpbmUoaSkgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg ICAgY3VyID0gQ1NDSEVEX1ZDUFUocGVyX2NwdShzY2hlZHVsZV9kYXRhLCBpKS5jdXJyKTsKKwor ICAgICAgICAvKiBGSVhNRToga2VlcCB0cmFjayBvZiBpZGxlcnMsIGNob3NlIGZyb20gdGhlIG1h c2sgKi8KKyAgICAgICAgaWYgKCBpc19pZGxlX3ZjcHUoY3VyLT52Y3B1KSApCisgICAgICAgIHsK KyAgICAgICAgICAgIGlwaWQgPSBpOworICAgICAgICAgICAgbG93ZXN0ID0gQ1NDSEVEX0lETEVf Q1JFRElUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg ICAgICB7CisgICAgICAgICAgICAvKiBVcGRhdGUgY3JlZGl0cyBmb3IgY3VycmVudCB0byBzZWUg aWYgd2Ugd2FudCB0byBwcmVlbXB0ICovCisgICAgICAgICAgICBidXJuX2NyZWRpdHMocnFkLCBj dXIsIG5vdyk7CisKKyAgICAgICAgICAgIGlmICggY3VyLT5jcmVkaXQgPCBsb3dlc3QgKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlwaWQgPSBpOworICAgICAgICAgICAgICAgIGxv d2VzdCA9IGN1ci0+Y3JlZGl0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBUUkFD RSAqLyB7CisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgZG9tOjE2LHZjcHU6MTY7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNyZWRp dDsKKyAgICAgICAgICAgICAgICB9IGQ7CisgICAgICAgICAgICAgICAgZC5kb20gPSBjdXItPnZj cHUtPmRvbWFpbi0+ZG9tYWluX2lkOworICAgICAgICAgICAgICAgIGQudmNwdSA9IGN1ci0+dmNw dS0+dmNwdV9pZDsKKyAgICAgICAgICAgICAgICBkLmNyZWRpdCA9IGN1ci0+Y3JlZGl0OworICAg ICAgICAgICAgICAgIHRyYWNlX3ZhcihUUkNfQ1NDSEVEMl9USUNLTEVfQ0hFQ0ssIDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGNoYXIgKikmZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoIGlwaWQgIT0gLTEgKQorICAgIHsKKyAgICAgICAgaW50IGNkaWZmID0gbG93 ZXN0IC0gbmV3LT5jcmVkaXQ7CisKKyAgICAgICAgaWYgKCBsb3dlc3QgPT0gQ1NDSEVEX0lETEVf Q1JFRElUIHx8IGNkaWZmIDwgMCApIHsKKyAgICAgICAgICAgIGQycHJpbnRrKCJzaSAlZFxuIiwg aXBpZCk7CisgICAgICAgICAgICBjcHVfcmFpc2Vfc29mdGlycShpcGlkLCBTQ0hFRFVMRV9TT0ZU SVJRKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiBGSVhNRTogV2Fr ZSB1cCBsYXRlcj8gKi87CisgICAgfQorfQorCisvKgorICogQ3JlZGl0LXJlbGF0ZWQgY29kZQor ICovCitzdGF0aWMgdm9pZCByZXNldF9jcmVkaXQoaW50IGNwdSwgc190aW1lX3Qgbm93KQorewor ICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisKKyAgICBsaXN0X2Zvcl9lYWNoKCBpdGVyLCAm UlFEKGNwdSktPnN2YyApCisgICAgeworICAgICAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBzdmMg PSBsaXN0X2VudHJ5KGl0ZXIsIHN0cnVjdCBjc2NoZWRfdmNwdSwgcnFkX2VsZW0pOworCisgICAg ICAgIEJVR19PTiggaXNfaWRsZV92Y3B1KHN2Yy0+dmNwdSkgKTsKKworICAgICAgICAvKiAiQ2xp cCIgY3JlZGl0cyB0byBtYXggY2FycnlvdmVyICovCisgICAgICAgIGlmICggc3ZjLT5jcmVkaXQg PiBDU0NIRURfQ0FSUllPVkVSX01BWCApCisgICAgICAgICAgICBzdmMtPmNyZWRpdCA9IENTQ0hF RF9DQVJSWU9WRVJfTUFYOworICAgICAgICAvKiBBbmQgYWRkIElOSVQgKi8KKyAgICAgICAgc3Zj LT5jcmVkaXQgKz0gQ1NDSEVEX0NSRURJVF9JTklUOyAKKyAgICAgICAgc3ZjLT5zdGFydF90aW1l ID0gbm93OworCisgICAgICAgIC8qIEZJWE1FOiBUcmFjZSBjcmVkaXQgKi8KKyAgICB9CisKKyAg ICAvKiBObyBuZWVkIHRvIHJlc29ydCBydW5xdWV1ZSwgYXMgZXZlcnlvbmUncyBvcmRlciBzaG91 bGQgYmUgdGhlIHNhbWUuICovCit9CisKK3ZvaWQgYnVybl9jcmVkaXRzKHN0cnVjdCBjc2NoZWRf cnVucXVldWVfZGF0YSAqcnFkLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2Yywgc190aW1lX3Qgbm93 KQoreworICAgIHNfdGltZV90IGRlbHRhOworCisgICAgLyogQXNzZXJ0IHN2YyBpcyBjdXJyZW50 ICovCisgICAgQVNTRVJUKHN2Yz09Q1NDSEVEX1ZDUFUocGVyX2NwdShzY2hlZHVsZV9kYXRhLCBz dmMtPnZjcHUtPnByb2Nlc3NvcikuY3VycikpOworCisgICAgaWYgKCBpc19pZGxlX3ZjcHUoc3Zj LT52Y3B1KSApCisgICAgeworICAgICAgICBCVUdfT04oc3ZjLT5jcmVkaXQgIT0gQ1NDSEVEX0lE TEVfQ1JFRElUKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlbHRhID0gbm93IC0g c3ZjLT5zdGFydF90aW1lOworCisgICAgaWYgKCBkZWx0YSA+IDAgKSB7CisgICAgICAgIC8qIFRo aXMgd2lsbCByb3VuZCBkb3duOyBzaG91bGQgd2UgY29uc2lkZXIgcm91bmRpbmcgdXAuLi4/ICov CisgICAgICAgIHN2Yy0+Y3JlZGl0IC09IHQyYyhycWQsIGRlbHRhLCBzdmMpOworICAgICAgICBz dmMtPnN0YXJ0X3RpbWUgPSBub3c7CisKKyAgICAgICAgZDJwcmludGsoImIgZCVkdiVkIGMlZFxu IiwKKyAgICAgICAgICAgICAgICAgc3ZjLT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwKKyAgICAg ICAgICAgICAgICAgc3ZjLT52Y3B1LT52Y3B1X2lkLAorICAgICAgICAgICAgICAgICBzdmMtPmNy ZWRpdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZDJwcmludGsoIiVzOiBUaW1lIHdlbnQgYmFj a3dhcmRzPyBub3cgJSJQUklfc3RpbWUiIHN0YXJ0ICUiUFJJX3N0aW1lIlxuIiwKKyAgICAgICAg ICAgICAgIF9fZnVuY19fLCBub3csIHN2Yy0+c3RhcnRfdGltZSk7CisgICAgfQorICAgIAorICAg IC8qIFRSQUNFICovCisgICAgeworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdW5zaWdu ZWQgZG9tOjE2LHZjcHU6MTY7CisgICAgICAgICAgICB1bnNpZ25lZCBjcmVkaXQ7CisgICAgICAg ICAgICBpbnQgZGVsdGE7CisgICAgICAgIH0gZDsKKyAgICAgICAgZC5kb20gPSBzdmMtPnZjcHUt PmRvbWFpbi0+ZG9tYWluX2lkOworICAgICAgICBkLnZjcHUgPSBzdmMtPnZjcHUtPnZjcHVfaWQ7 CisgICAgICAgIGQuY3JlZGl0ID0gc3ZjLT5jcmVkaXQ7CisgICAgICAgIGQuZGVsdGEgPSBkZWx0 YTsKKyAgICAgICAgdHJhY2VfdmFyKFRSQ19DU0NIRUQyX0NSRURJVF9CVVJOLCAxLAorICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGQpLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIg KikmZCk7CisgICAgfQorfQorCisvKiBGaW5kIHRoZSBkb21haW4gd2l0aCB0aGUgaGlnaGVzdCB3 ZWlnaHQuICovCit2b2lkIHVwZGF0ZV9tYXhfd2VpZ2h0KHN0cnVjdCBjc2NoZWRfcnVucXVldWVf ZGF0YSAqcnFkLCBpbnQgbmV3X3dlaWdodCwgaW50IG9sZF93ZWlnaHQpCit7CisgICAgLyogVHJ5 IHRvIGF2b2lkIGJydXRlLWZvcmNlIHNlYXJjaDoKKyAgICAgKiAtIElmIG5ld193ZWlnaHQgaXMg bGFyZ2VyLCBtYXhfd2VpZ3RoIDwtIG5ld193ZWlnaHQKKyAgICAgKiAtIElmIG9sZF93ZWlnaHQg IT0gbWF4X3dlaWdodCwgc29tZW9uZSBlbHNlIGlzIHN0aWxsIG1heF93ZWlnaHQKKyAgICAgKiAg IChObyBhY3Rpb24gcmVxdWlyZWQpCisgICAgICogLSBJZiBvbGRfd2VpZ2h0ID09IG1heF93ZWln aHQsIGJydXRlLWZvcmNlIHNlYXJjaCBmb3IgbWF4IHdlaWdodAorICAgICAqLworICAgIGlmICgg bmV3X3dlaWdodCA+IHJxZC0+bWF4X3dlaWdodCApCisgICAgeworICAgICAgICBycWQtPm1heF93 ZWlnaHQgPSBuZXdfd2VpZ2h0OworICAgICAgICBwcmludGsoIiVzOiBSdW5xdWV1ZSBpZCAlZCBt YXggd2VpZ2h0ICVkXG4iLCBfX2Z1bmNfXywgcnFkLT5pZCwgcnFkLT5tYXhfd2VpZ2h0KTsKKyAg ICB9CisgICAgZWxzZSBpZiAoIG9sZF93ZWlnaHQgPT0gcnFkLT5tYXhfd2VpZ2h0ICkKKyAgICB7 CisgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisgICAgICAgIGludCBtYXhfd2VpZ2h0 ID0gMTsKKyAgICAgICAgCisgICAgICAgIGxpc3RfZm9yX2VhY2goIGl0ZXIsICZycWQtPnN2YyAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqIHN2YyA9IGxpc3Rf ZW50cnkoaXRlciwgc3RydWN0IGNzY2hlZF92Y3B1LCBycWRfZWxlbSk7CisgICAgICAgICAgICAK KyAgICAgICAgICAgIGlmICggc3ZjLT53ZWlnaHQgPiBtYXhfd2VpZ2h0ICkKKyAgICAgICAgICAg ICAgICBtYXhfd2VpZ2h0ID0gc3ZjLT53ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg ICAgIHJxZC0+bWF4X3dlaWdodCA9IG1heF93ZWlnaHQ7CisgICAgICAgIHByaW50aygiJXM6IFJ1 bnF1ZXVlICVkIG1heCB3ZWlnaHQgJWRcbiIsIF9fZnVuY19fLCBycWQtPmlkLCBycWQtPm1heF93 ZWlnaHQpOworICAgIH0KK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyAvKmlubGluZSovIHZv aWQKK19fY3NjaGVkX3ZjcHVfY2hlY2soc3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBj c2NoZWRfdmNwdSAqIGNvbnN0IHN2YyA9IENTQ0hFRF9WQ1BVKHZjKTsKKyAgICBzdHJ1Y3QgY3Nj aGVkX2RvbSAqIGNvbnN0IHNkb20gPSBzdmMtPnNkb207CisKKyAgICBCVUdfT04oIHN2Yy0+dmNw dSAhPSB2YyApOworICAgIEJVR19PTiggc2RvbSAhPSBDU0NIRURfRE9NKHZjLT5kb21haW4pICk7 CisgICAgaWYgKCBzZG9tICkKKyAgICB7CisgICAgICAgIEJVR19PTiggaXNfaWRsZV92Y3B1KHZj KSApOworICAgICAgICBCVUdfT04oIHNkb20tPmRvbSAhPSB2Yy0+ZG9tYWluICk7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEJVR19PTiggIWlzX2lkbGVfdmNwdSh2YykgKTsKKyAg ICB9Cit9CisjZGVmaW5lIENTQ0hFRF9WQ1BVX0NIRUNLKF92YykgIChfX2NzY2hlZF92Y3B1X2No ZWNrKF92YykpCisjZWxzZQorI2RlZmluZSBDU0NIRURfVkNQVV9DSEVDSyhfdmMpCisjZW5kaWYK Kworc3RhdGljIGludAorY3NjaGVkX3ZjcHVfaW5pdChzdHJ1Y3QgdmNwdSAqdmMpCit7CisgICAg c3RydWN0IGRvbWFpbiAqIGNvbnN0IGRvbSA9IHZjLT5kb21haW47CisgICAgc3RydWN0IGNzY2hl ZF9kb20gKnNkb20gPSBDU0NIRURfRE9NKGRvbSk7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICpz dmM7CisKKyAgICBwcmludGsoIiVzOiBJbml0aWFsaXppbmcgZCVkdiVkXG4iLAorICAgICAgICAg ICBfX2Z1bmNfXywgZG9tLT5kb21haW5faWQsIHZjLT52Y3B1X2lkKTsKKworICAgIC8qIEFsbG9j YXRlIHBlci1WQ1BVIGluZm8gKi8KKyAgICBzdmMgPSB4bWFsbG9jKHN0cnVjdCBjc2NoZWRfdmNw dSk7CisgICAgaWYgKCBzdmMgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIElO SVRfTElTVF9IRUFEKCZzdmMtPnJxZF9lbGVtKTsKKyAgICBJTklUX0xJU1RfSEVBRCgmc3ZjLT5z ZG9tX2VsZW0pOworICAgIElOSVRfTElTVF9IRUFEKCZzdmMtPnJ1bnFfZWxlbSk7CisKKyAgICBz dmMtPnNkb20gPSBzZG9tOworICAgIHN2Yy0+dmNwdSA9IHZjOworICAgIHN2Yy0+ZmxhZ3MgPSAw VTsKKyAgICB2Yy0+c2NoZWRfcHJpdiA9IHN2YzsKKworICAgIGlmICggISBpc19pZGxlX3ZjcHUo dmMpICkKKyAgICB7CisgICAgICAgIEJVR19PTiggc2RvbSA9PSBOVUxMICk7CisKKyAgICAgICAg c3ZjLT5jcmVkaXQgPSBDU0NIRURfQ1JFRElUX0lOSVQ7CisgICAgICAgIHN2Yy0+d2VpZ2h0ID0g c2RvbS0+d2VpZ2h0OworCisgICAgICAgIC8qIEZJWE1FOiBEbyB3ZSBuZWVkIHRoZSBwcml2YXRl IGxvY2sgaGVyZT8gKi8KKyAgICAgICAgbGlzdF9hZGRfdGFpbCgmc3ZjLT5zZG9tX2VsZW0sICZz ZG9tLT52Y3B1KTsKKworICAgICAgICAvKiBBZGQgdmNwdSB0byBydW5xdWV1ZSBvZiBpbml0aWFs IHByb2Nlc3NvciAqLworICAgICAgICAvKiBGSVhNRTogQWJzdHJhY3QgZm9yIG11bHRpcGxlIHJ1 bnF1ZXVlcyAqLworICAgICAgICB2Y3B1X3NjaGVkdWxlX2xvY2tfaXJxKHZjKTsKKworICAgICAg ICBsaXN0X2FkZF90YWlsKCZzdmMtPnJxZF9lbGVtLCAmUlFEKHZjLT5wcm9jZXNzb3IpLT5zdmMp OworICAgICAgICB1cGRhdGVfbWF4X3dlaWdodChSUUQodmMtPnByb2Nlc3NvciksIHN2Yy0+d2Vp Z2h0LCAwKTsKKworICAgICAgICB2Y3B1X3NjaGVkdWxlX3VubG9ja19pcnEodmMpOworCisgICAg ICAgIHNkb20tPm5yX3ZjcHVzKys7CisgICAgfSAKKyAgICBlbHNlCisgICAgeworICAgICAgICBC VUdfT04oIHNkb20gIT0gTlVMTCApOworICAgICAgICBzdmMtPmNyZWRpdCA9IENTQ0hFRF9JRExF X0NSRURJVDsKKyAgICAgICAgc3ZjLT53ZWlnaHQgPSAwOworICAgICAgICBpZiAoIGNzY2hlZF9w cml2LmlkbGVfZG9tYWluID09IE5VTEwgKQorICAgICAgICAgICAgY3NjaGVkX3ByaXYuaWRsZV9k b21haW4gPSBkb207CisgICAgfQorCisgICAgQ1NDSEVEX1ZDUFVfQ0hFQ0sodmMpOworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX3ZjcHVfZGVzdHJveShzdHJ1Y3QgdmNw dSAqdmMpCit7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICogY29uc3Qgc3ZjID0gQ1NDSEVEX1ZD UFUodmMpOworICAgIHN0cnVjdCBjc2NoZWRfZG9tICogY29uc3Qgc2RvbSA9IHN2Yy0+c2RvbTsK KworICAgIEJVR19PTiggc2RvbSA9PSBOVUxMICk7CisgICAgQlVHX09OKCAhbGlzdF9lbXB0eSgm c3ZjLT5ydW5xX2VsZW0pICk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBydW5xdWV1ZSAqLworICAg IHZjcHVfc2NoZWR1bGVfbG9ja19pcnEodmMpOworCisgICAgbGlzdF9kZWxfaW5pdCgmc3ZjLT5y cWRfZWxlbSk7CisgICAgdXBkYXRlX21heF93ZWlnaHQoUlFEKHZjLT5wcm9jZXNzb3IpLCAwLCBz dmMtPndlaWdodCk7CisKKyAgICB2Y3B1X3NjaGVkdWxlX3VubG9ja19pcnEodmMpOworCisgICAg LyogUmVtb3ZlIGZyb20gc2RvbSBsaXN0LiAgRG9uJ3QgbmVlZCBhIGxvY2sgZm9yIHRoaXMsIGFz IGl0J3MgY2FsbGVkCisgICAgICogc3luY3Jvbm91c2x5IHdoZW4gbm90aGluZyBlbHNlIGNhbiBo YXBwZW4uICovCisgICAgbGlzdF9kZWxfaW5pdCgmc3ZjLT5zZG9tX2VsZW0pOworCisgICAgc2Rv bS0+bnJfdmNwdXMtLTsKKworICAgIHhmcmVlKHN2Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitjc2No ZWRfdmNwdV9zbGVlcChzdHJ1Y3QgdmNwdSAqdmMpCit7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1 ICogY29uc3Qgc3ZjID0gQ1NDSEVEX1ZDUFUodmMpOworCisgICAgQlVHX09OKCBpc19pZGxlX3Zj cHUodmMpICk7CisKKyAgICBpZiAoIHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgdmMtPnByb2Nlc3Nv cikuY3VyciA9PSB2YyApCisgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKHZjLT5wcm9jZXNzb3Is IFNDSEVEVUxFX1NPRlRJUlEpOworICAgIGVsc2UgaWYgKCBfX3ZjcHVfb25fcnVucShzdmMpICkK KyAgICAgICAgX19ydW5xX3JlbW92ZShzdmMpOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX3Zj cHVfd2FrZShzdHJ1Y3QgdmNwdSAqdmMpCit7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICogY29u c3Qgc3ZjID0gQ1NDSEVEX1ZDUFUodmMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBjcHUgPSB2 Yy0+cHJvY2Vzc29yOworICAgIHNfdGltZV90IG5vdyA9IDA7CisKKyAgICAvKiBTY2hlZHVsZSBs b2NrIHNob3VsZCBiZSBoZWxkIGF0IHRoaXMgcG9pbnQuICovCisgICAgCisgICAgZDJwcmludGso IncgZCVkdiVkXG4iLCB2Yy0+ZG9tYWluLT5kb21haW5faWQsIHZjLT52Y3B1X2lkKTsKKworICAg IEJVR19PTiggaXNfaWRsZV92Y3B1KHZjKSApOworCisgICAgLyogTWFrZSBzdXJlIHN2YyBwcmlv cml0eSBtb2QgaGFwcGVucyBiZWZvcmUgcnVucSBjaGVjayAqLworICAgIGlmICggdW5saWtlbHko cGVyX2NwdShzY2hlZHVsZV9kYXRhLCBjcHUpLmN1cnIgPT0gdmMpICkKKyAgICB7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoX192Y3B1X29uX3J1bnEoc3Zj KSkgKQorICAgIHsKKyAgICAgICAgLyogSWYgd2UndmUgYm9vc3RlZCBzb21lb25lIHRoYXQncyBh bHJlYWR5IG9uIGEgcnVucXVldWUsIHByaW9yaXRpemUKKyAgICAgICAgICogaXQgYW5kIGluZm9y bSB0aGUgY3B1IGluIHF1ZXN0aW9uLiAqLworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAg ICAvKiBJZiB0aGUgY29udGV4dCBoYXNuJ3QgYmVlbiBzYXZlZCBmb3IgdGhpcyB2Y3B1IHlldCwg d2UgY2FuJ3QgcHV0IGl0IG9uCisgICAgICogYW5vdGhlciBydW5xdWV1ZS4gIEluc3RlYWQsIHdl IHNldCBhIGZsYWcgc28gdGhhdCBpdCB3aWxsIGJlIHB1dCBvbiB0aGUgcnVucXVldWUKKyAgICAg KiBhZnRlciB0aGUgY29udGV4dCBoYXMgYmVlbiBzYXZlZC4gKi8KKyAgICBpZiAoIHVubGlrZWx5 ICh0ZXN0X2JpdChfX0NTRkxBR19zY2hlZHVsZWQsICZzdmMtPmZsYWdzKSApICkKKyAgICB7Cisg ICAgICAgIHNldF9iaXQoX19DU0ZMQUdfZGVsYXllZF9ydW5xX2FkZCwgJnN2Yy0+ZmxhZ3MpOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBub3cgPSBOT1coKTsKKworICAgIC8qIFB1 dCB0aGUgVkNQVSBvbiB0aGUgcnVucSAqLworICAgIHJ1bnFfaW5zZXJ0KGNwdSwgc3ZjKTsKKyAg ICBydW5xX3RpY2tsZShjcHUsIHN2Yywgbm93KTsKKworb3V0OgorICAgIGQycHJpbnRrKCJ3LVxu Iik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX2NvbnRleHRfc2F2ZWQo c3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqIGNvbnN0IHN2YyA9 IENTQ0hFRF9WQ1BVKHZjKTsKKworICAgIHZjcHVfc2NoZWR1bGVfbG9ja19pcnEodmMpOworCisg ICAgLyogVGhpcyB2Y3B1IGlzIG5vdyBlbGlnaWJsZSB0byBiZSBwdXQgb24gdGhlIHJ1bnF1ZXVl IGFnYWluICovCisgICAgY2xlYXJfYml0KF9fQ1NGTEFHX3NjaGVkdWxlZCwgJnN2Yy0+ZmxhZ3Mp OworICAgIAorICAgIC8qIElmIHNvbWVvbmUgd2FudHMgaXQgb24gdGhlIHJ1bnF1ZXVlLCBwdXQg aXQgdGhlcmUuICovCisgICAgLyogCisgICAgICogTkI6IFdlIGNhbiBnZXQgcmlkIG9mIENTRkxB R19zY2hlZHVsZWQgYnkgY2hlY2tpbmcgZm9yCisgICAgICogdmMtPmlzX3J1bm5pbmcgYW5kIF9f dmNwdV9vbl9ydW5xKHN2YykgaGVyZS4gIEhvd2V2ZXIsCisgICAgICogc2luY2Ugd2UncmUgYWNj ZXNzaW5nIHRoZSBmbGFncyBjYWNoZWxpbmUgYW55d2F5LAorICAgICAqIGl0IHNlZW1zIGEgYml0 IHBvaW50bGVzczsgZXNwZWNpYWxseSBhcyB3ZSBoYXZlIHBsZW50eSBvZgorICAgICAqIGJpdHMg ZnJlZS4KKyAgICAgKi8KKyAgICBpZiAoIHRlc3RfYml0KF9fQ1NGTEFHX2RlbGF5ZWRfcnVucV9h ZGQsICZzdmMtPmZsYWdzKSApCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY3B1 ID0gdmMtPnByb2Nlc3NvcjsKKworICAgICAgICBjbGVhcl9iaXQoX19DU0ZMQUdfZGVsYXllZF9y dW5xX2FkZCwgJnN2Yy0+ZmxhZ3MpOworCisgICAgICAgIEJVR19PTihfX3ZjcHVfb25fcnVucShz dmMpKTsKKyAgICAgICAgCisgICAgICAgIHJ1bnFfaW5zZXJ0KGNwdSwgc3ZjKTsKKyAgICAgICAg cnVucV90aWNrbGUoY3B1LCBzdmMsIE5PVygpKTsKKyAgICB9CisKKyAgICB2Y3B1X3NjaGVkdWxl X3VubG9ja19pcnEodmMpOworfQorCitzdGF0aWMgaW50Citjc2NoZWRfY3B1X3BpY2soc3RydWN0 IHZjcHUgKnZjKQoreworICAgIC8qIEZJWE1FOiBDaG9zZSBhIHNjaGVkdWxlIGdyb3VwIGJhc2Vk IG9uIGxvYWQgKi8KKyAgICAvKiBGSVhNRTogTWlncmF0ZSB0aGUgdmNwdSB0byB0aGUgbmV3IHJ1 bnF1ZXVlIGxpc3QsIHVwZGF0aW5nIAorICAgICAgIG1heF93ZWlnaHQgZm9yIGVhY2ggcnVucXVl dWUgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3NjaGVkX2RvbV9jbnRsKAor ICAgIHN0cnVjdCBkb21haW4gKmQsCisgICAgc3RydWN0IHhlbl9kb21jdGxfc2NoZWR1bGVyX29w ICpvcCkKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX2RvbSAqIGNvbnN0IHNkb20gPSBDU0NIRURfRE9N KGQpOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBpZiAoIG9wLT5jbWQgPT0gWEVO X0RPTUNUTF9TQ0hFRE9QX2dldGluZm8gKQorICAgIHsKKyAgICAgICAgb3AtPnUuY3JlZGl0Mi53 ZWlnaHQgPSBzZG9tLT53ZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFT U0VSVChvcC0+Y21kID09IFhFTl9ET01DVExfU0NIRURPUF9wdXRpbmZvKTsKKworICAgICAgICBp ZiAoIG9wLT51LmNyZWRpdDIud2VpZ2h0ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkICppdGVyOworICAgICAgICAgICAgaW50IG9sZF93ZWlnaHQ7CisKKyAg ICAgICAgICAgIC8qIE11c3QgaG9sZCBjc2NoZWRfcHJpdiBsb2NrIHRvIHVwZGF0ZSBzZG9tLCBy dW5xIGxvY2sgdG8KKyAgICAgICAgICAgICAqIHVwZGF0ZSBjc3Zjcy4gKi8KKyAgICAgICAgICAg IHNwaW5fbG9ja19pcnFzYXZlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICAgICAg ICAgIG9sZF93ZWlnaHQgPSBzZG9tLT53ZWlnaHQ7CisKKyAgICAgICAgICAgIHNkb20tPndlaWdo dCA9IG9wLT51LmNyZWRpdDIud2VpZ2h0OworCisgICAgICAgICAgICAvKiBVcGRhdGUgd2VpZ2h0 cyBmb3IgdmNwdXMsIGFuZCBtYXhfd2VpZ2h0IGZvciBydW5xdWV1ZXMgb24gd2hpY2ggdGhleSBy ZXNpZGUgKi8KKyAgICAgICAgICAgIGxpc3RfZm9yX2VhY2ggKCBpdGVyLCAmc2RvbS0+dmNwdSAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IGNzY2hlZF92Y3B1ICpzdmMg PSBsaXN0X2VudHJ5KGl0ZXIsIHN0cnVjdCBjc2NoZWRfdmNwdSwgc2RvbV9lbGVtKTsKKworICAg ICAgICAgICAgICAgIC8qIE5COiBMb2NraW5nIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlLiAgQmVj YXVzZSB3ZSBncmFiIHRoaXMgbG9jayBoZXJlLCB3ZQorICAgICAgICAgICAgICAgICAqIG11c3Qg bmV2ZXIgbG9jayBjc2NoZWRfcHJpdi5sb2NrIGlmIHdlJ3JlIGhvbGRpbmcgYSBydW5xdWV1ZQor ICAgICAgICAgICAgICAgICAqIGxvY2suICovCisgICAgICAgICAgICAgICAgdmNwdV9zY2hlZHVs ZV9sb2NrX2lycShzdmMtPnZjcHUpOworCisgICAgICAgICAgICAgICAgc3ZjLT53ZWlnaHQgPSBz ZG9tLT53ZWlnaHQ7CisgICAgICAgICAgICAgICAgdXBkYXRlX21heF93ZWlnaHQoUlFEKHN2Yy0+ dmNwdS0+cHJvY2Vzc29yKSwgc3ZjLT53ZWlnaHQsIG9sZF93ZWlnaHQpOworCisgICAgICAgICAg ICAgICAgdmNwdV9zY2hlZHVsZV91bmxvY2tfaXJxKHN2Yy0+dmNwdSk7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzY2hlZF9wcml2LmxvY2ss IGZsYWdzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50Citjc2NoZWRfZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZG9tKQoreworICAgIHN0cnVjdCBj c2NoZWRfZG9tICpzZG9tOworICAgIGludCBmbGFnczsKKworICAgIHByaW50aygiJXM6IEluaXRp YWxpemluZyBkb21haW4gJWRcbiIsIF9fZnVuY19fLCBkb20tPmRvbWFpbl9pZCk7CisKKyAgICBp ZiAoIGlzX2lkbGVfZG9tYWluKGRvbSkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNkb20g PSB4bWFsbG9jKHN0cnVjdCBjc2NoZWRfZG9tKTsKKyAgICBpZiAoIHNkb20gPT0gTlVMTCApCisg ICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgLyogSW5pdGlhbGl6ZSBjcmVkaXQgYW5kIHdl aWdodCAqLworICAgIElOSVRfTElTVF9IRUFEKCZzZG9tLT52Y3B1KTsKKyAgICBJTklUX0xJU1Rf SEVBRCgmc2RvbS0+c2RvbV9lbGVtKTsKKyAgICBzZG9tLT5kb20gPSBkb207CisgICAgc2RvbS0+ d2VpZ2h0ID0gQ1NDSEVEX0RFRkFVTFRfV0VJR0hUOworICAgIHNkb20tPm5yX3ZjcHVzID0gMDsK KworICAgIGRvbS0+c2NoZWRfcHJpdiA9IHNkb207CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgm Y3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgbGlzdF9hZGRfdGFpbCgmc2RvbS0+c2Rv bV9lbGVtLCAmY3NjaGVkX3ByaXYuc2RvbSk7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQKK2NzY2hlZF9kb21fZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkb20pCit7CisgICAgc3Ry dWN0IGNzY2hlZF9kb20gKnNkb20gPSBDU0NIRURfRE9NKGRvbSk7CisgICAgaW50IGZsYWdzOwor CisgICAgQlVHX09OKCFsaXN0X2VtcHR5KCZzZG9tLT52Y3B1KSk7CisKKyAgICBzcGluX2xvY2tf aXJxc2F2ZSgmY3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgbGlzdF9kZWxfaW5pdCgm c2RvbS0+c2RvbV9lbGVtKTsKKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzY2hlZF9w cml2LmxvY2ssIGZsYWdzKTsKKyAgICAKKyAgICB4ZnJlZShDU0NIRURfRE9NKGRvbSkpOworfQor CisvKiBIb3cgbG9uZyBzaG91bGQgd2UgbGV0IHRoaXMgdmNwdSBydW4gZm9yPyAqLworc3RhdGlj IHNfdGltZV90Citjc2NoZWRfcnVudGltZShpbnQgY3B1LCBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnNu ZXh0KQoreworICAgIHNfdGltZV90IHRpbWUgPSBDU0NIRURfTUFYX1RJTUVSOworICAgIHN0cnVj dCBjc2NoZWRfcnVucXVldWVfZGF0YSAqcnFkID0gUlFEKGNwdSk7CisgICAgc3RydWN0IGxpc3Rf aGVhZCAqcnVucSA9ICZycWQtPnJ1bnE7CisKKyAgICBpZiAoIGlzX2lkbGVfdmNwdShzbmV4dC0+ dmNwdSkgKQorICAgICAgICByZXR1cm4gQ1NDSEVEX01BWF9USU1FUjsKKworICAgIC8qIEJhc2lj IHRpbWUgKi8KKyAgICB0aW1lID0gYzJ0KHJxZCwgc25leHQtPmNyZWRpdCwgc25leHQpOworCisg ICAgLyogTmV4dCBndXkgb24gcnVucXVldWUgKi8KKyAgICBpZiAoICEgbGlzdF9lbXB0eShydW5x KSApCisgICAgeworICAgICAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2YyA9IF9fcnVucV9lbGVt KHJ1bnEtPm5leHQpOworICAgICAgICBzX3RpbWVfdCBudGltZTsKKworICAgICAgICBpZiAoICEg aXNfaWRsZV92Y3B1KHN2Yy0+dmNwdSkgKQorICAgICAgICB7CisgICAgICAgICAgICBudGltZSA9 IGMydChycWQsIHNuZXh0LT5jcmVkaXQgLSBzdmMtPmNyZWRpdCwgc25leHQpOworCisgICAgICAg ICAgICBpZiAoIHRpbWUgPiBudGltZSApCisgICAgICAgICAgICAgICAgdGltZSA9IG50aW1lOwor ICAgICAgICB9CisgICAgfQorCisgICAgLyogQ2hlY2sgbGltaXRzICovCisgICAgaWYgKCB0aW1l IDwgQ1NDSEVEX01JTl9USU1FUiApCisgICAgICAgIHRpbWUgPSBDU0NIRURfTUlOX1RJTUVSOwor ICAgIGVsc2UgaWYgKCB0aW1lID4gQ1NDSEVEX01BWF9USU1FUiApCisgICAgICAgIHRpbWUgPSBD U0NIRURfTUFYX1RJTUVSOworCisgICAgcmV0dXJuIHRpbWU7Cit9CisKK3ZvaWQgX19kdW1wX2V4 ZWNzdGF0ZSh2b2lkICp1bnVzZWQpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbiB0aGUg Y3JpdGljYWwgcGF0aC4gSXQgaXMgZGVzaWduZWQgdG8gYmUgc2ltcGxlIGFuZAorICogZmFzdCBm b3IgdGhlIGNvbW1vbiBjYXNlLgorICovCitzdGF0aWMgc3RydWN0IHRhc2tfc2xpY2UKK2NzY2hl ZF9zY2hlZHVsZShzX3RpbWVfdCBub3cpCit7CisgICAgY29uc3QgaW50IGNwdSA9IHNtcF9wcm9j ZXNzb3JfaWQoKTsKKyAgICBzdHJ1Y3QgY3NjaGVkX3J1bnF1ZXVlX2RhdGEgKnJxZCA9IFJRRChj cHUpOworICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBjb25zdCBydW5xID0gJnJxZC0+cnVucTsKKyAg ICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBjb25zdCBzY3VyciA9IENTQ0hFRF9WQ1BVKGN1cnJlbnQp OworICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqc25leHQgPSBOVUxMOworICAgIHN0cnVjdCB0YXNr X3NsaWNlIHJldDsKKworICAgIENTQ0hFRF9WQ1BVX0NIRUNLKGN1cnJlbnQpOworCisgICAgZDJw cmludGsoInNjIHAlZCBjIGQlZHYlZCBub3cgJSJQUklfc3RpbWUiXG4iLAorICAgICAgICAgICAg IGNwdSwKKyAgICAgICAgICAgICBzY3Vyci0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQsCisgICAg ICAgICAgICAgc2N1cnItPnZjcHUtPnZjcHVfaWQsCisgICAgICAgICAgICAgbm93KTsKKworCisg ICAgLyogUHJvdGVjdGVkIGJ5IHJ1bnF1ZXVlIGxvY2sgKi8KKworICAgIC8qIFVwZGF0ZSBjcmVk aXRzICovCisgICAgYnVybl9jcmVkaXRzKHJxZCwgc2N1cnIsIG5vdyk7CisKKyAgICAvKgorICAg ICAqIFNlbGVjdCBuZXh0IHJ1bm5hYmxlIGxvY2FsIFZDUFUgKGllIHRvcCBvZiBsb2NhbCBydW5x KS4KKyAgICAgKgorICAgICAqIElmIHRoZSBjdXJyZW50IHZjcHUgaXMgcnVubmFibGUsIGFuZCBo YXMgaGlnaGVyIGNyZWRpdCB0aGFuCisgICAgICogdGhlIG5leHQgZ3V5IG9uIHRoZSBxdWV1ZSAo b3IgdGhlcmUgaXMgbm9vbmUgZWxzZSksIHdlIHdhbnQgdG8gcnVuIGhpbSBhZ2Fpbi4KKyAgICAg KgorICAgICAqIElmIHRoZSBjdXJyZW50IHZjcHUgaXMgcnVubmFibGUsIGFuZCB0aGUgbmV4dCBn dXkgb24gdGhlIHF1ZXVlCisgICAgICogaGFzIGhpZ2hlciBjcmVkaXQsIHdlIHdhbnQgdG8gbWFy ayBjdXJyZW50IGZvciBkZWxheWVkIHJ1bnF1ZXVlCisgICAgICogYWRkLCBhbmQgcmVtb3ZlIHRo ZSBuZXh0IGd1eSBmcm9tIHRoZSBxdWV1ZS4KKyAgICAgKgorICAgICAqIElmIHRoZSBjdXJyZW50 IHZjcHUgaXMgbm90IHJ1bm5hYmxlLCB3ZSB3YW50IHRvIGNob3NlIHRoZSBpZGxlCisgICAgICog dmNwdSBmb3IgdGhpcyBwcm9jZXNzb3IuIAorICAgICAqLworICAgIGlmICggbGlzdF9lbXB0eShy dW5xKSApCisgICAgICAgIHNuZXh0ID0gQ1NDSEVEX1ZDUFUoY3NjaGVkX3ByaXYuaWRsZV9kb21h aW4tPnZjcHVbY3B1XSk7CisgICAgZWxzZQorICAgICAgICBzbmV4dCA9IF9fcnVucV9lbGVtKHJ1 bnEtPm5leHQpOworCisgICAgaWYgKCAhaXNfaWRsZV92Y3B1KGN1cnJlbnQpICYmIHZjcHVfcnVu bmFibGUoY3VycmVudCkgKQorICAgIHsKKyAgICAgICAgLyogSWYgdGhlIGN1cnJlbnQgdmNwdSBp cyBydW5uYWJsZSwgYW5kIGhhcyBoaWdoZXIgY3JlZGl0CisgICAgICAgICAqIHRoYW4gdGhlIG5l eHQgb24gdGhlIHJ1bnF1ZXVlLCBydW4gaGltIGFnYWluLgorICAgICAgICAgKiBPdGhlcndpc2Us IHNldCBoaW0gZm9yIGRlbGF5ZWQgcnVucSBhZGQuICovCisgICAgICAgIGlmICggc2N1cnItPmNy ZWRpdCA+IHNuZXh0LT5jcmVkaXQpCisgICAgICAgICAgICBzbmV4dCA9IHNjdXJyOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBzZXRfYml0KF9fQ1NGTEFHX2RlbGF5ZWRfcnVucV9hZGQsICZz Y3Vyci0+ZmxhZ3MpOworICAgIH0KKworICAgIGlmICggc25leHQgIT0gc2N1cnIgJiYgIWlzX2lk bGVfdmNwdShzbmV4dC0+dmNwdSkgKQorICAgIHsKKyAgICAgICAgX19ydW5xX3JlbW92ZShzbmV4 dCk7CisgICAgICAgIGlmICggc25leHQtPnZjcHUtPmlzX3J1bm5pbmcgKQorICAgICAgICB7Cisg ICAgICAgICAgICBwcmludGsoInAlZDogc25leHQgZCVkdiVkIHJ1bm5pbmcgb24gcCVkISBzY3Vy ciBkJWR2JWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3B1LAorICAgICAgICAgICAgICAgICAg IHNuZXh0LT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwgc25leHQtPnZjcHUtPnZjcHVfaWQsCisg ICAgICAgICAgICAgICAgICAgc25leHQtPnZjcHUtPnByb2Nlc3NvciwKKyAgICAgICAgICAgICAg ICAgICBzY3Vyci0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQsCisgICAgICAgICAgICAgICAgICAg c2N1cnItPnZjcHUtPnZjcHVfaWQpOworICAgICAgICAgICAgQlVHKCk7CisgICAgICAgIH0KKyAg ICAgICAgc2V0X2JpdChfX0NTRkxBR19zY2hlZHVsZWQsICZzbmV4dC0+ZmxhZ3MpOworICAgIH0K KworICAgIGlmICggIWlzX2lkbGVfdmNwdShzbmV4dC0+dmNwdSkgJiYgc25leHQtPmNyZWRpdCA8 PSBDU0NIRURfQ1JFRElUX1JFU0VUICkKKyAgICAgICAgcmVzZXRfY3JlZGl0KGNwdSwgbm93KTsK KworI2lmIDAKKyAgICAvKgorICAgICAqIFVwZGF0ZSBpZGxlcnMgbWFzayBpZiBuZWNlc3Nhcnku IFdoZW4gd2UncmUgaWRsaW5nLCBvdGhlciBDUFVzCisgICAgICogd2lsbCB0aWNrbGUgdXMgd2hl biB0aGV5IGdldCBleHRyYSB3b3JrLgorICAgICAqLworICAgIGlmICggaXNfaWRsZV92Y3B1KHNu ZXh0LT52Y3B1KSApCisgICAgeworICAgICAgICBpZiAoICFjcHVfaXNzZXQoY3B1LCBjc2NoZWRf cHJpdi5pZGxlcnMpICkKKyAgICAgICAgICAgIGNwdV9zZXQoY3B1LCBjc2NoZWRfcHJpdi5pZGxl cnMpOworICAgIH0KKyAgICBlbHNlIGlmICggY3B1X2lzc2V0KGNwdSwgY3NjaGVkX3ByaXYuaWRs ZXJzKSApCisgICAgeworICAgICAgICBjcHVfY2xlYXIoY3B1LCBjc2NoZWRfcHJpdi5pZGxlcnMp OworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCAhaXNfaWRsZV92Y3B1KHNuZXh0LT52Y3B1KSAp CisgICAgeworICAgICAgICBzbmV4dC0+c3RhcnRfdGltZSA9IG5vdzsKKyAgICAgICAgc25leHQt PnZjcHUtPnByb2Nlc3NvciA9IGNwdTsgLyogU2FmZSBiZWNhdXNlIGxvY2sgZm9yIG9sZCBwcm9j ZXNzb3IgaXMgaGVsZCAqLworICAgIH0KKyAgICAvKgorICAgICAqIFJldHVybiB0YXNrIHRvIHJ1 biBuZXh0Li4uCisgICAgICovCisgICAgcmV0LnRpbWUgPSBjc2NoZWRfcnVudGltZShjcHUsIHNu ZXh0KTsKKyAgICByZXQudGFzayA9IHNuZXh0LT52Y3B1OworCisgICAgQ1NDSEVEX1ZDUFVfQ0hF Q0socmV0LnRhc2spOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRf ZHVtcF92Y3B1KHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHByaW50aygiWyVpLiVp XSBmbGFncz0leCBjcHU9JWkiLAorICAgICAgICAgICAgc3ZjLT52Y3B1LT5kb21haW4tPmRvbWFp bl9pZCwKKyAgICAgICAgICAgIHN2Yy0+dmNwdS0+dmNwdV9pZCwKKyAgICAgICAgICAgIHN2Yy0+ ZmxhZ3MsCisgICAgICAgICAgICBzdmMtPnZjcHUtPnByb2Nlc3Nvcik7CisKKyAgICBwcmludGso IiBjcmVkaXQ9JSIgUFJJaTMyIiBbdz0ldV0iLCBzdmMtPmNyZWRpdCwgc3ZjLT53ZWlnaHQpOwor CisgICAgcHJpbnRrKCJcbiIpOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX2R1bXBfcGNwdShp bnQgY3B1KQoreworICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJ1bnEsICppdGVyOworICAgIHN0cnVj dCBjc2NoZWRfdmNwdSAqc3ZjOworICAgIGludCBsb29wOworICAgIGNoYXIgY3B1c3RyWzEwMF07 CisKKyAgICAvKiBGSVhNRTogRG8gbG9ja2luZyBwcm9wZXJseSBmb3IgYWNjZXNzIHRvIHJ1bnF1 ZXVlIHN0cnVjdHVyZXMgKi8KKworICAgIHJ1bnEgPSAmUlFEKGNwdSktPnJ1bnE7CisKKyAgICBj cHVtYXNrX3NjbnByaW50ZihjcHVzdHIsIHNpemVvZihjcHVzdHIpLCBwZXJfY3B1KGNwdV9zaWJs aW5nX21hcCxjcHUpKTsKKyAgICBwcmludGsoIiBzaWJsaW5nPSVzLCAiLCBjcHVzdHIpOworICAg IGNwdW1hc2tfc2NucHJpbnRmKGNwdXN0ciwgc2l6ZW9mKGNwdXN0ciksIHBlcl9jcHUoY3B1X2Nv cmVfbWFwLGNwdSkpOworICAgIHByaW50aygiY29yZT0lc1xuIiwgY3B1c3RyKTsKKworICAgIC8q IGN1cnJlbnQgVkNQVSAqLworICAgIHN2YyA9IENTQ0hFRF9WQ1BVKHBlcl9jcHUoc2NoZWR1bGVf ZGF0YSwgY3B1KS5jdXJyKTsKKyAgICBpZiAoIHN2YyApCisgICAgeworICAgICAgICBwcmludGso Ilx0cnVuOiAiKTsKKyAgICAgICAgY3NjaGVkX2R1bXBfdmNwdShzdmMpOworICAgIH0KKworICAg IGxvb3AgPSAwOworICAgIGxpc3RfZm9yX2VhY2goIGl0ZXIsIHJ1bnEgKQorICAgIHsKKyAgICAg ICAgc3ZjID0gX19ydW5xX2VsZW0oaXRlcik7CisgICAgICAgIGlmICggc3ZjICkKKyAgICAgICAg eworICAgICAgICAgICAgcHJpbnRrKCJcdCUzZDogIiwgKytsb29wKTsKKyAgICAgICAgICAgIGNz Y2hlZF9kdW1wX3ZjcHUoc3ZjKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQK K2NzY2hlZF9kdW1wKHZvaWQpCit7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlcl9zZG9tLCAq aXRlcl9zdmM7CisgICAgaW50IGxvb3A7CisKKyAgICBwcmludGsoImluZm86XG4iCisgICAgICAg ICAgICJcdG5jcHVzICAgICAgICAgICAgICA9ICV1XG4iCisgICAgICAgICAgICJcdGRlZmF1bHQt d2VpZ2h0ICAgICA9ICVkXG4iLAorICAgICAgICAgICBjc2NoZWRfcHJpdi5uY3B1cywKKyAgICAg ICAgICAgQ1NDSEVEX0RFRkFVTFRfV0VJR0hUKTsKKworICAgIC8qIEZJWE1FOiBMb2NraW5nISAq LworCisgICAgcHJpbnRrKCJhY3RpdmUgdmNwdXM6XG4iKTsKKyAgICBsb29wID0gMDsKKyAgICBs aXN0X2Zvcl9lYWNoKCBpdGVyX3Nkb20sICZjc2NoZWRfcHJpdi5zZG9tICkKKyAgICB7CisgICAg ICAgIHN0cnVjdCBjc2NoZWRfZG9tICpzZG9tOworICAgICAgICBzZG9tID0gbGlzdF9lbnRyeShp dGVyX3Nkb20sIHN0cnVjdCBjc2NoZWRfZG9tLCBzZG9tX2VsZW0pOworCisgICAgICAgIGxpc3Rf Zm9yX2VhY2goIGl0ZXJfc3ZjLCAmc2RvbS0+dmNwdSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjOworICAgICAgICAgICAgc3ZjID0gbGlzdF9lbnRyeShp dGVyX3N2Yywgc3RydWN0IGNzY2hlZF92Y3B1LCBzZG9tX2VsZW0pOworCisgICAgICAgICAgICBw cmludGsoIlx0JTNkOiAiLCArK2xvb3ApOworICAgICAgICAgICAgY3NjaGVkX2R1bXBfdmNwdShz dmMpOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbWFrZV9ydW5xX21hcCh2 b2lkKQoreworICAgIGludCBjcHUsIGNwdV9jb3VudD0wOworCisgICAgLyogRklYTUU6IFJlYWQg cGNwdSBsYXlvdXQgYW5kIGRvIHRoaXMgcHJvcGVybHkgKi8KKyAgICBmb3JfZWFjaF9wb3NzaWJs ZV9jcHUoIGNwdSApCisgICAgeworICAgICAgICBjc2NoZWRfcHJpdi5ydW5xX21hcFtjcHVdID0g MDsKKyAgICAgICAgY3B1X2NvdW50Kys7CisgICAgfQorICAgIGNzY2hlZF9wcml2LnJ1bnFfY291 bnQgPSAxOworICAgIAorICAgIC8qIE1vdmUgdG8gdGhlIGluaXQgY29kZS4uLj8gKi8KKyAgICBj c2NoZWRfcHJpdi5ycWRbMF0uY3B1X21pbiA9IDA7CisgICAgY3NjaGVkX3ByaXYucnFkWzBdLmNw dV9tYXggPSBjcHVfY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfaW5pdCh2b2lkKQor eworICAgIGludCBpOworCisgICAgc3Bpbl9sb2NrX2luaXQoJmNzY2hlZF9wcml2LmxvY2spOwor ICAgIElOSVRfTElTVF9IRUFEKCZjc2NoZWRfcHJpdi5zZG9tKTsKKworICAgIGNzY2hlZF9wcml2 Lm5jcHVzID0gMDsKKworICAgIG1ha2VfcnVucV9tYXAoKTsKKworICAgIGZvciAoIGk9MDsgaTxj c2NoZWRfcHJpdi5ydW5xX2NvdW50IDsgaSsrICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBjc2No ZWRfcnVucXVldWVfZGF0YSAqcnFkID0gY3NjaGVkX3ByaXYucnFkICsgaTsKKworICAgICAgICBy cWQtPm1heF93ZWlnaHQgPSAxOworICAgICAgICBycWQtPmlkID0gaTsKKyAgICAgICAgSU5JVF9M SVNUX0hFQUQoJnJxZC0+c3ZjKTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQoJnJxZC0+cnVucSk7 CisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSBwY3B1IHN0cnVjdHVyZXMgKi8KKyAgICBmb3Jf ZWFjaF9wb3NzaWJsZV9jcHUoaSkKKyAgICB7CisgICAgICAgIGludCBydW5xX2lkOworICAgICAg ICBzcGlubG9ja190ICpsb2NrOworCisgICAgICAgIC8qIFBvaW50IHRoZSBwZXItY3B1IHNjaGVk dWxlIGxvY2sgdG8gdGhlIHJ1bnFfaWQgbG9jayAqLworICAgICAgICBydW5xX2lkID0gY3NjaGVk X3ByaXYucnVucV9tYXBbaV07CisgICAgICAgIGxvY2sgPSAmcGVyX2NwdShzY2hlZHVsZV9kYXRh LCBydW5xX2lkKS5fbG9jazsKKworICAgICAgICBwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGkpLnNj aGVkdWxlX2xvY2sgPSBsb2NrOworCisgICAgICAgIGNzY2hlZF9wcml2Lm5jcHVzKys7CisgICAg fQorfQorCitzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVkX2NyZWRpdDJfZGVmID0geworICAgIC5uYW1l ICAgICAgICAgICA9ICJTTVAgQ3JlZGl0IFNjaGVkdWxlciByZXYyIiwKKyAgICAub3B0X25hbWUg ICAgICAgPSAiY3JlZGl0MiIsCisgICAgLnNjaGVkX2lkICAgICAgID0gWEVOX1NDSEVEVUxFUl9D UkVESVQyLAorCisgICAgLmluaXRfZG9tYWluICAgID0gY3NjaGVkX2RvbV9pbml0LAorICAgIC5k ZXN0cm95X2RvbWFpbiA9IGNzY2hlZF9kb21fZGVzdHJveSwKKworICAgIC5pbml0X3ZjcHUgICAg ICA9IGNzY2hlZF92Y3B1X2luaXQsCisgICAgLmRlc3Ryb3lfdmNwdSAgID0gY3NjaGVkX3ZjcHVf ZGVzdHJveSwKKworICAgIC5zbGVlcCAgICAgICAgICA9IGNzY2hlZF92Y3B1X3NsZWVwLAorICAg IC53YWtlICAgICAgICAgICA9IGNzY2hlZF92Y3B1X3dha2UsCisKKyAgICAuYWRqdXN0ICAgICAg ICAgPSBjc2NoZWRfZG9tX2NudGwsCisKKyAgICAucGlja19jcHUgICAgICAgPSBjc2NoZWRfY3B1 X3BpY2ssCisgICAgLmRvX3NjaGVkdWxlICAgID0gY3NjaGVkX3NjaGVkdWxlLAorICAgIC5jb250 ZXh0X3NhdmVkICA9IGNzY2hlZF9jb250ZXh0X3NhdmVkLAorCisgICAgLmR1bXBfY3B1X3N0YXRl ID0gY3NjaGVkX2R1bXBfcGNwdSwKKyAgICAuZHVtcF9zZXR0aW5ncyAgPSBjc2NoZWRfZHVtcCwK KyAgICAuaW5pdCAgICAgICAgICAgPSBjc2NoZWRfaW5pdCwKK307CmRpZmYgLXIgODg5YmQxOWRk MDlkIHhlbi9jb21tb24vc2NoZWR1bGUuYwotLS0gYS94ZW4vY29tbW9uL3NjaGVkdWxlLmMJTW9u IEZlYiAxNSAxNToyMzowOSAyMDEwICswMDAwCisrKyBiL3hlbi9jb21tb24vc2NoZWR1bGUuYwlN b24gRmViIDE1IDE2OjE1OjE2IDIwMTAgKzAwMDAKQEAgLTU4LDkgKzU4LDExIEBACiAKIGV4dGVy biBjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVkX3NlZGZfZGVmOwogZXh0ZXJuIGNvbnN0IHN0 cnVjdCBzY2hlZHVsZXIgc2NoZWRfY3JlZGl0X2RlZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2No ZWR1bGVyIHNjaGVkX2NyZWRpdDJfZGVmOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIg Kl9faW5pdGRhdGEgc2NoZWR1bGVyc1tdID0gewogICAgICZzY2hlZF9zZWRmX2RlZiwKICAgICAm c2NoZWRfY3JlZGl0X2RlZiwKKyAgICAmc2NoZWRfY3JlZGl0Ml9kZWYsCiAgICAgTlVMTAogfTsK IApkaWZmIC1yIDg4OWJkMTlkZDA5ZCB4ZW4vaW5jbHVkZS9wdWJsaWMvZG9tY3RsLmgKLS0tIGEv eGVuL2luY2x1ZGUvcHVibGljL2RvbWN0bC5oCU1vbiBGZWIgMTUgMTU6MjM6MDkgMjAxMCArMDAw MAorKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvZG9tY3RsLmgJTW9uIEZlYiAxNSAxNjoxNToxNiAy MDEwICswMDAwCkBAIC0zMDMsNiArMzAzLDcgQEAKIC8qIFNjaGVkdWxlciB0eXBlcy4gKi8KICNk ZWZpbmUgWEVOX1NDSEVEVUxFUl9TRURGICAgICA0CiAjZGVmaW5lIFhFTl9TQ0hFRFVMRVJfQ1JF RElUICAgNQorI2RlZmluZSBYRU5fU0NIRURVTEVSX0NSRURJVDIgIDYKIC8qIFNldCBvciBnZXQg aW5mbz8gKi8KICNkZWZpbmUgWEVOX0RPTUNUTF9TQ0hFRE9QX3B1dGluZm8gMAogI2RlZmluZSBY RU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbyAxCkBAIC0zMjEsNiArMzIyLDkgQEAKICAgICAgICAg ICAgIHVpbnQxNl90IHdlaWdodDsKICAgICAgICAgICAgIHVpbnQxNl90IGNhcDsKICAgICAgICAg fSBjcmVkaXQ7CisgICAgICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgeworICAg ICAgICAgICAgdWludDE2X3Qgd2VpZ2h0OworICAgICAgICB9IGNyZWRpdDI7CiAgICAgfSB1Owog fTsKIHR5cGVkZWYgc3RydWN0IHhlbl9kb21jdGxfc2NoZWR1bGVyX29wIHhlbl9kb21jdGxfc2No ZWR1bGVyX29wX3Q7Cg== --0023545306443d014c047fa6d415 Content-Type: text/x-patch; charset=US-ASCII; name="20100215-credit2-tools.diff" Content-Disposition: attachment; filename="20100215-credit2-tools.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g5pi5tmp4 ZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJTW9uIERlYyAwNyAxNzowMToxMSAyMDA5ICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtMTcsNiArMTcs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcHJpdmF0ZS5jCiBDVFJMX1NSQ1MteSAgICAg ICArPSB4Y19zZWRmLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX2NzY2hlZC5jCitDVFJMX1NS Q1MteSAgICAgICArPSB4Y19jc2NoZWQyLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX3RidWYu YwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcG0uYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNf Y3B1X2hvdHBsdWcuYwpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9saWJ4Yy94Y19jc2NoZWQy LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9v bHMvbGlieGMveGNfY3NjaGVkMi5jCU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAt MCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKEMpIDIwMDYgLSBFbW1hbnVl bCBBY2thb3V5IC0gWGVuU291cmNlIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICog ICAgICAgIEZpbGU6IHhjX2NzY2hlZC5jCisgKiAgICAgIEF1dGhvcjogRW1tYW51ZWwgQWNrYW91 eQorICoKKyAqIERlc2NyaXB0aW9uOiBYQyBJbnRlcmZhY2UgdG8gdGhlIGNyZWRpdCBzY2hlZHVs ZXIKKyAqCisgKi8KKyNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCisKKworaW50Cit4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQoCisgICAgaW50IHhjX2hhbmRsZSwKKyAgICB1aW50MzJfdCBkb21p ZCwKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyICpzZG9tKQoreworICAgIERF Q0xBUkVfRE9NQ1RMOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVyX29w OworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUuc2No ZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0bC51 LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfcHV0aW5mbzsKKyAgICBkb21j dGwudS5zY2hlZHVsZXJfb3AudS5jcmVkaXQyID0gKnNkb207CisKKyAgICByZXR1cm4gZG9fZG9t Y3RsKHhjX2hhbmRsZSwgJmRvbWN0bCk7Cit9CisKK2ludAoreGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KAorICAgIGludCB4Y19oYW5kbGUsCisgICAgdWludDMyX3QgZG9taWQsCisgICAgc3Ry dWN0IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSkKK3sKKyAgICBERUNMQVJFX0RPTUNU TDsKKyAgICBpbnQgZXJyOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVy X29wOworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUu c2NoZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0 bC51LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbzsKKworICAg IGVyciA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwpOworICAgIGlmICggZXJyID09IDAg KQorICAgICAgICAqc2RvbSA9IGRvbWN0bC51LnNjaGVkdWxlcl9vcC51LmNyZWRpdDI7CisKKyAg ICByZXR1cm4gZXJyOworfQpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9saWJ4Yy94ZW5jdHJs LmgKLS0tIGEvdG9vbHMvbGlieGMveGVuY3RybC5oCU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSAr MDAwMAorKysgYi90b29scy9saWJ4Yy94ZW5jdHJsLmgJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5 ICswMDAwCkBAIC00NjksNiArNDY5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0ICpzZG9tKTsKIAoraW50IHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChpbnQgeGNfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4 ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgKnNkb20pOworCitpbnQgeGNfc2NoZWRfY3JlZGl0Ml9k b21haW5fZ2V0KGludCB4Y19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhl bl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSk7CisKIC8qKgogICogVGhpcyBmdW5jdGlvbiBz ZW5kcyBhIHRyaWdnZXIgdG8gYSBkb21haW4uCiAgKgpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29s cy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKLS0tIGEvdG9vbHMvcHl0aG9uL3hlbi9sb3ds ZXZlbC94Yy94Yy5jCU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90b29scy9w eXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAw CkBAIC0xMzc0LDYgKzEzNzQsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwIiwg ICAgIHNkb20uY2FwKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpweXhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChYY09iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkcykKK3sKKyAgICB1aW50MzJfdCBk b21pZDsKKyAgICB1aW50MTZfdCB3ZWlnaHQ7CisgICAgc3RhdGljIGNoYXIgKmt3ZF9saXN0W10g PSB7ICJkb21pZCIsICJ3ZWlnaHQiLCBOVUxMIH07CisgICAgc3RhdGljIGNoYXIga3dkX3R5cGVb XSA9ICJJfEgiOworICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgc2RvbTsKKyAg ICAKKyAgICB3ZWlnaHQgPSAwOworICAgIGlmKCAhUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRz KGFyZ3MsIGt3ZHMsIGt3ZF90eXBlLCBrd2RfbGlzdCwgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmRvbWlkLCAmd2VpZ2h0KSApCisgICAgICAgIHJldHVybiBOVUxMOwor CisgICAgc2RvbS53ZWlnaHQgPSB3ZWlnaHQ7CisKKyAgICBpZiAoIHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChzZWxmLT54Y19oYW5kbGUsIGRvbWlkLCAmc2RvbSkgIT0gMCApCisgICAgICAg IHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOworCisgICAgUHlfSU5DUkVGKHplcm8p OworICAgIHJldHVybiB6ZXJvOworfQorCitzdGF0aWMgUHlPYmplY3QgKnB5eGNfc2NoZWRfY3Jl ZGl0Ml9kb21haW5fZ2V0KFhjT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICB1 aW50MzJfdCBkb21pZDsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyIHNkb207 CisgICAgCisgICAgaWYoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJJIiwgJmRvbWlkKSApCisg ICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmICggeGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KHNlbGYtPnhjX2hhbmRsZSwgZG9taWQsICZzZG9tKSAhPSAwICkKKyAgICAgICAgcmV0 dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1 ZSgie3M6SH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWlnaHQiLCAgc2RvbS53ZWln aHQpOworfQorCiBzdGF0aWMgUHlPYmplY3QgKnB5eGNfZG9tYWluX3NldG1heG1lbShYY09iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdWludDMyX3QgZG9tOwpAQCAtMTkxMiw2 ICsxOTUxLDI0IEBACiAgICAgICAiUmV0dXJuczogICBbZGljdF1cbiIKICAgICAgICIgd2VpZ2h0 ICAgIFtzaG9ydF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4ifSwKIAorICAgIHsgInNj aGVkX2NyZWRpdDJfZG9tYWluX3NldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQsCisgICAgICBNRVRIX0tFWVdPUkRTLCAiXG4iCisgICAgICAiU2V0 IHRoZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIGEgZG9tYWluIHdoZW4gcnVubmluZyB3aXRo IHRoZVxuIgorICAgICAgIlNNUCBjcmVkaXQyIHNjaGVkdWxlci5cbiIKKyAgICAgICIgZG9taWQg ICAgIFtpbnRdOiAgIGRvbWFpbiBpZCB0byBzZXRcbiIKKyAgICAgICIgd2VpZ2h0ICAgIFtzaG9y dF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4iCisgICAgICAiUmV0dXJuczogW2ludF0g MCBvbiBzdWNjZXNzOyAtMSBvbiBlcnJvci5cbiIgfSwKKworICAgIHsgInNjaGVkX2NyZWRpdDJf ZG9tYWluX2dldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9jcmVkaXQyX2RvbWFp bl9nZXQsCisgICAgICBNRVRIX1ZBUkFSR1MsICJcbiIKKyAgICAgICJHZXQgdGhlIHNjaGVkdWxp bmcgcGFyYW1ldGVycyBmb3IgYSBkb21haW4gd2hlbiBydW5uaW5nIHdpdGggdGhlXG4iCisgICAg ICAiU01QIGNyZWRpdDIgc2NoZWR1bGVyLlxuIgorICAgICAgIiBkb21pZCAgICAgW2ludF06ICAg ZG9tYWluIGlkIHRvIGdldFxuIgorICAgICAgIlJldHVybnM6ICAgW2RpY3RdXG4iCisgICAgICAi IHdlaWdodCAgICBbc2hvcnRdOiBkb21haW4ncyBzY2hlZHVsaW5nIHdlaWdodFxuIn0sCisKICAg ICB7ICJldnRjaG5fYWxsb2NfdW5ib3VuZCIsIAogICAgICAgKFB5Q0Z1bmN0aW9uKXB5eGNfZXZ0 Y2huX2FsbG9jX3VuYm91bmQsCiAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAi XG4iCkBAIC0yMjcyLDYgKzIzMjksNyBAQAogICAgIC8qIEV4cG9zZSBzb21lIGxpYnhjIGNvbnN0 YW50cyB0byBQeXRob24gKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWEVOX1ND SEVEVUxFUl9TRURGIiwgWEVOX1NDSEVEVUxFUl9TRURGKTsKICAgICBQeU1vZHVsZV9BZGRJbnRD b25zdGFudChtLCAiWEVOX1NDSEVEVUxFUl9DUkVESVQiLCBYRU5fU0NIRURVTEVSX0NSRURJVCk7 CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlhFTl9TQ0hFRFVMRVJfQ1JFRElUMiIs IFhFTl9TQ0hFRFVMRVJfQ1JFRElUMik7CiAKIH0KIApkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29s cy9weXRob24veGVuL3hlbmQvWGVuZEFQSS5weQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQv WGVuZEFQSS5weQlNb24gRGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0 aG9uL3hlbi94ZW5kL1hlbmRBUEkucHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAwCkBA IC0xNjI2LDggKzE2MjYsNyBAQAogICAgICAgICBpZiAnd2VpZ2h0JyBpbiB4ZW5pbmZvLmluZm9b J3ZjcHVzX3BhcmFtcyddIFwKICAgICAgICAgICAgYW5kICdjYXAnIGluIHhlbmluZm8uaW5mb1sn dmNwdXNfcGFyYW1zJ106CiAgICAgICAgICAgICB3ZWlnaHQgPSB4ZW5pbmZvLmluZm9bJ3ZjcHVz X3BhcmFtcyddWyd3ZWlnaHQnXQotICAgICAgICAgICAgY2FwID0geGVuaW5mby5pbmZvWyd2Y3B1 c19wYXJhbXMnXVsnY2FwJ10KLSAgICAgICAgICAgIHhlbmRvbS5kb21haW5fc2NoZWRfY3JlZGl0 X3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCwgY2FwKQorICAgICAgICAgICAgeGVuZG9t LmRvbWFpbl9zY2hlZF9jcmVkaXQyX3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCkKIAog ICAgIGRlZiBWTV9zZXRfVkNQVXNfbnVtYmVyX2xpdmUoc2VsZiwgXywgdm1fcmVmLCBudW0pOgog ICAgICAgICBkb20gPSBYZW5kRG9tYWluLmluc3RhbmNlKCkuZ2V0X3ZtX2J5X3V1aWQodm1fcmVm KQpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5w eQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5weQlNb24gRGVjIDA3IDE3 OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW4u cHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAwCkBAIC0xNzU3LDYgKzE3NTcsNjAgQEAK ICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZXgpCiAgICAgICAgICAgICByYWlzZSBYZW5kRXJy b3Ioc3RyKGV4KSkKIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9nZXQoc2VsZiwgZG9t aWQpOgorICAgICAgICAiIiJHZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVycyBmb3IgYSBk b21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFtZQorICAgICAg ICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IHdpdGgg a2V5cyAnd2VpZ2h0JworICAgICAgICBAcmV0dXJuOiBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICIiIgorICAgICAgICBkb21pbmZvID0gc2VsZi5kb21haW5fbG9va3VwX25y KGRvbWlkKQorICAgICAgICBpZiBub3QgZG9taW5mbzoKKyAgICAgICAgICAgIHJhaXNlIFhlbmRJ bnZhbGlkRG9tYWluKHN0cihkb21pZCkpCisgICAgICAgIAorICAgICAgICBpZiBkb21pbmZvLl9z dGF0ZUdldCgpIGluIChET01fU1RBVEVfUlVOTklORywgRE9NX1NUQVRFX1BBVVNFRCk6CisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjLnNjaGVkX2NyZWRpdDJfZG9t YWluX2dldChkb21pbmZvLmdldERvbWlkKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u LCBleDoKKyAgICAgICAgICAgICAgICByYWlzZSBYZW5kRXJyb3Ioc3RyKGV4KSkKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHJldHVybiB7J3dlaWdodCcgOiBkb21pbmZvLmdldFdlaWdodCgp fQorICAgIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9zZXQoc2VsZiwgZG9taWQsIHdl aWdodCA9IE5vbmUpOgorICAgICAgICAiIiJTZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVy cyBmb3IgYSBkb21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFt ZQorICAgICAgICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHR5cGUgd2Vp Z2h0OiBpbnQKKyAgICAgICAgQHJ0eXBlOiAwCisgICAgICAgICIiIgorICAgICAgICBzZXRfd2Vp Z2h0ID0gRmFsc2UKKyAgICAgICAgZG9taW5mbyA9IHNlbGYuZG9tYWluX2xvb2t1cF9ucihkb21p ZCkKKyAgICAgICAgaWYgbm90IGRvbWluZm86CisgICAgICAgICAgICByYWlzZSBYZW5kSW52YWxp ZERvbWFpbihzdHIoZG9taWQpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3ZWlnaHQg aXMgTm9uZToKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSBpbnQoMCkKKyAgICAgICAgICAgIGVs aWYgd2VpZ2h0IDwgMSBvciB3ZWlnaHQgPiA2NTUzNToKKyAgICAgICAgICAgICAgICByYWlzZSBY ZW5kRXJyb3IoIndlaWdodCBpcyBvdXQgb2YgcmFuZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICBzZXRfd2VpZ2h0ID0gVHJ1ZQorCisgICAgICAgICAgICBhc3NlcnQgdHlw ZSh3ZWlnaHQpID09IGludAorCisgICAgICAgICAgICByYyA9IDAKKyAgICAgICAgICAgIGlmIGRv bWluZm8uX3N0YXRlR2V0KCkgaW4gKERPTV9TVEFURV9SVU5OSU5HLCBET01fU1RBVEVfUEFVU0VE KToKKyAgICAgICAgICAgICAgICByYyA9IHhjLnNjaGVkX2NyZWRpdDJfZG9tYWluX3NldChkb21p bmZvLmdldERvbWlkKCksIHdlaWdodCkKKyAgICAgICAgICAgIGlmIHJjID09IDA6CisgICAgICAg ICAgICAgICAgaWYgc2V0X3dlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgZG9taW5mby5zZXRX ZWlnaHQod2VpZ2h0KQorICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlZF9jb25maWdfc2F2ZShk b21pbmZvKQorICAgICAgICAgICAgcmV0dXJuIHJjCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s IGV4OgorICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbihleCkKKyAgICAgICAgICAgIHJhaXNlIFhl bmRFcnJvcihzdHIoZXgpKQorCiAgICAgZGVmIGRvbWFpbl9tYXhtZW1fc2V0KHNlbGYsIGRvbWlk LCBtZW0pOgogICAgICAgICAiIiJTZXQgdGhlIG1lbW9yeSBsaW1pdCBmb3IgYSBkb21haW4uCiAK ZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW5JbmZv LnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kRG9tYWluSW5mby5weQlNb24gRGVj IDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRE b21haW5JbmZvLnB5CU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtMjcxOSw2ICsy NzE5LDEwIEBACiAgICAgICAgICAgICBYZW5kRG9tYWluLmluc3RhbmNlKCkuZG9tYWluX3NjaGVk X2NyZWRpdF9zZXQoc2VsZi5nZXREb21pZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0V2VpZ2h0KCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5n ZXRDYXAoKSkKKyAgICAgICAgZWxpZiBYZW5kTm9kZS5pbnN0YW5jZSgpLnhlbnNjaGVkaW5mbygp ID09ICdjcmVkaXQyJzoKKyAgICAgICAgICAgIGZyb20geGVuLnhlbmQgaW1wb3J0IFhlbmREb21h aW4KKyAgICAgICAgICAgIFhlbmREb21haW4uaW5zdGFuY2UoKS5kb21haW5fc2NoZWRfY3JlZGl0 Ml9zZXQoc2VsZi5nZXREb21pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFdlaWdodCgpKQogCiAgICAgZGVmIF9p bml0RG9tYWluKHNlbGYpOgogICAgICAgICBsb2cuZGVidWcoJ1hlbmREb21haW5JbmZvLmluaXRE b21haW46ICVzICVzJywKZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvcHl0aG9uL3hlbi94ZW5k L1hlbmROb2RlLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kTm9kZS5weQlNb24g RGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hl bmROb2RlLnB5CU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtNzYwLDYgKzc2MCw4 IEBACiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0g eGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJu ICdjcmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9T Q0hFRFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAg ZWxzZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApAQCAtOTYxLDYgKzk2Myw4IEBA CiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVu Lmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJuICdj cmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hF RFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAgZWxz ZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApkaWZmIC1yIDYzNTMxZTY0MDgyOCB0 b29scy9weXRob24veGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQotLS0gYS90b29scy9weXRob24v eGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQlNb24gRGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAK KysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRWTU1ldHJpY3MucHkJTW9uIERlYyAyMSAx MTo0NTowMCAyMDA5ICswMDAwCkBAIC0xMjksNiArMTI5LDcgQEAKICAgICAgICAgICAgICAgICBw YXJhbXNfbGl2ZVsnY3B1bWFwJWknICUgaV0gPSBcCiAgICAgICAgICAgICAgICAgICAgICIsIi5q b2luKG1hcChzdHIsIGluZm9bJ2NwdW1hcCddKSkKIAorICAgICAgICAgICAgICAgICMgRklYTUU6 IGNyZWRpdDI/PwogICAgICAgICAgICAgcGFyYW1zX2xpdmUudXBkYXRlKHhjLnNjaGVkX2NyZWRp dF9kb21haW5fZ2V0KGRvbWlkKSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHBh cmFtc19saXZlCmRpZmYgLXIgNjM1MzFlNjQwODI4IHRvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2 ZXIvU3J2RG9tYWluLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2ZXIvU3J2RG9t YWluLnB5CU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90b29scy9weXRob24v eGVuL3hlbmQvc2VydmVyL1NydkRvbWFpbi5weQlNb24gRGVjIDIxIDExOjQ1OjAwIDIwMDkgKzAw MDAKQEAgLTE2Myw2ICsxNjMsMjAgQEAKICAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9t Jzogc2VsZi5kb20uZ2V0TmFtZSgpfSkKICAgICAgICAgcmV0dXJuIHZhbAogCisgICAgZGVmIG9w X2RvbWFpbl9zY2hlZF9jcmVkaXQyX2dldChzZWxmLCBfLCByZXEpOgorICAgICAgICBmbiA9IEZv cm1GbihzZWxmLnhkLmRvbWFpbl9zY2hlZF9jcmVkaXQyX2dldCwKKyAgICAgICAgICAgICAgICAg ICAgW1snZG9tJywgJ3N0ciddXSkKKyAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9tJzog c2VsZi5kb20uZ2V0TmFtZSgpfSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisKKyAgICBkZWYgb3Bf ZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0KHNlbGYsIF8sIHJlcSk6CisgICAgICAgIGZuID0gRm9y bUZuKHNlbGYueGQuZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0LAorICAgICAgICAgICAgICAgICAg ICBbWydkb20nLCAnc3RyJ10sCisgICAgICAgICAgICAgICAgICAgICBbJ3dlaWdodCcsICdpbnQn XV0pCisgICAgICAgIHZhbCA9IGZuKHJlcS5hcmdzLCB7J2RvbSc6IHNlbGYuZG9tLmdldE5hbWUo KX0pCisgICAgICAgIHJldHVybiB2YWwKKwogICAgIGRlZiBvcF9tYXhtZW1fc2V0KHNlbGYsIF8s IHJlcSk6CiAgICAgICAgIHJldHVybiBzZWxmLmNhbGwoc2VsZi5kb20uc2V0TWVtb3J5TWF4aW11 bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbWydtZW1vcnknLCAnaW50J11dLApkaWZmIC1y IDYzNTMxZTY0MDgyOCB0b29scy9weXRob24veGVuL3htL21haW4ucHkKLS0tIGEvdG9vbHMvcHl0 aG9uL3hlbi94bS9tYWluLnB5CU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90 b29scy9weXRob24veGVuL3htL21haW4ucHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAw CkBAIC0xNTAsNiArMTUwLDggQEAKICAgICAnc2NoZWQtc2VkZicgIDogKCc8RG9tYWluPiBbb3B0 aW9uc10nLCAnR2V0L3NldCBFREYgcGFyYW1ldGVycy4nKSwKICAgICAnc2NoZWQtY3JlZGl0Jzog KCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdfC1jWz1DQVBdXV0nLAogICAgICAgICAgICAgICAg ICAgICAgJ0dldC9zZXQgY3JlZGl0IHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAorICAgICdzY2hl ZC1jcmVkaXQyJzogKCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdXScsCisgICAgICAgICAgICAg ICAgICAgICAnR2V0L3NldCBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAogICAgICdz eXNycScgICAgICAgOiAoJzxEb21haW4+IDxsZXR0ZXI+JywgJ1NlbmQgYSBzeXNycSB0byBhIGRv bWFpbi4nKSwKICAgICAnZGVidWcta2V5cycgIDogKCc8S2V5cz4nLCAnU2VuZCBkZWJ1ZyBrZXlz IHRvIFhlbi4nKSwKICAgICAndHJpZ2dlcicgICAgIDogKCc8RG9tYWluPiA8bm1pfHJlc2V0fGlu aXR8czNyZXN1bWV8cG93ZXI+IFs8VkNQVT5dJywKQEAgLTI2NSw2ICsyNjcsMTAgQEAKICAgICAg ICAoJy13IFdFSUdIVCcsICctLXdlaWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCiAgICAg ICAgKCctYyBDQVAnLCAgICAnLS1jYXA9Q0FQJywgICAgICAgJ0NhcCAoaW50KScpLAogICAgICks CisgICAgJ3NjaGVkLWNyZWRpdDInOiAoCisgICAgICAgKCctZCBET01BSU4nLCAnLS1kb21haW49 RE9NQUlOJywgJ0RvbWFpbiB0byBtb2RpZnknKSwKKyAgICAgICAoJy13IFdFSUdIVCcsICctLXdl aWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCisgICAgKSwKICAgICAnbGlzdCc6ICgKICAg ICAgICAoJy1sJywgJy0tbG9uZycsICAgICAgICAgJ091dHB1dCBhbGwgVk0gZGV0YWlscyBpbiBT WFAnKSwKICAgICAgICAoJycsICctLWxhYmVsJywgICAgICAgICAgJ0luY2x1ZGUgc2VjdXJpdHkg bGFiZWxzJyksCkBAIC00MDYsNiArNDEyLDcgQEAKICAgICBdCiAKIHNjaGVkdWxlcl9jb21tYW5k cyA9IFsKKyAgICAic2NoZWQtY3JlZGl0MiIsCiAgICAgInNjaGVkLWNyZWRpdCIsCiAgICAgInNj aGVkLXNlZGYiLAogICAgIF0KQEAgLTE3MjAsNiArMTcyNyw4MCBAQAogICAgICAgICAgICAgaWYg cmVzdWx0ICE9IDA6CiAgICAgICAgICAgICAgICAgZXJyKHN0cihyZXN1bHQpKQogCitkZWYgeG1f c2NoZWRfY3JlZGl0MihhcmdzKToKKyAgICAiIiJHZXQvU2V0IG9wdGlvbnMgZm9yIENyZWRpdDIg U2NoZWR1bGVyLiIiIgorICAgIAorICAgIGNoZWNrX3NjaGVkX3R5cGUoJ2NyZWRpdDInKQorCisg ICAgdHJ5OgorICAgICAgICBvcHRzLCBwYXJhbXMgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICJkOnc6 IiwKKyAgICAgICAgICAgIFsiZG9tYWluPSIsICJ3ZWlnaHQ9Il0pCisgICAgZXhjZXB0IGdldG9w dC5HZXRvcHRFcnJvciwgb3B0ZXJyOgorICAgICAgICBlcnIob3B0ZXJyKQorICAgICAgICB1c2Fn ZSgnc2NoZWQtY3JlZGl0MicpCisKKyAgICBkb21pZCA9IE5vbmUKKyAgICB3ZWlnaHQgPSBOb25l CisKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluIFsiLWQiLCAiLS1kb21h aW4iXToKKyAgICAgICAgICAgIGRvbWlkID0gYQorICAgICAgICBlbGlmIG8gaW4gWyItdyIsICIt LXdlaWdodCJdOgorICAgICAgICAgICAgd2VpZ2h0ID0gaW50KGEpCisKKyAgICBkb21zID0gZmls dGVyKGxhbWJkYSB4IDogZG9taWRfbWF0Y2goZG9taWQsIHgpLAorICAgICAgICAgICAgICAgICAg W3BhcnNlX2RvbXNfaW5mbyhkb20pCisgICAgICAgICAgICAgICAgICBmb3IgZG9tIGluIGdldERv bWFpbnMoTm9uZSwgJ2FsbCcpXSkKKworICAgIGlmIHdlaWdodCBpcyBOb25lOgorICAgICAgICBp ZiBkb21pZCBpcyBub3QgTm9uZSBhbmQgZG9tcyA9PSBbXTogCisgICAgICAgICAgICBlcnIoIkRv bWFpbiAnJXMnIGRvZXMgbm90IGV4aXN0LiIgJSBkb21pZCkKKyAgICAgICAgICAgIHVzYWdlKCdz Y2hlZC1jcmVkaXQyJykKKyAgICAgICAgIyBwcmludCBoZWFkZXIgaWYgd2UgYXJlbid0IHNldHRp bmcgYW55IHBhcmFtZXRlcnMKKyAgICAgICAgcHJpbnQgJyUtMzNzICU0cyAlNnMnICUgKCdOYW1l JywnSUQnLCdXZWlnaHQnKQorICAgICAgICAKKyAgICAgICAgZm9yIGQgaW4gZG9tczoKKyAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJUeXBlID09IFNFUlZFUl9YRU5f QVBJOgorICAgICAgICAgICAgICAgICAgICBpbmZvID0gc2VydmVyLnhlbmFwaS5WTV9tZXRyaWNz LmdldF9WQ1BVc19wYXJhbXMoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIueGVuYXBp LlZNLmdldF9tZXRyaWNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zaW5nbGVf dm0oZFsnbmFtZSddKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgaW5mbyA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX2dldChkWyduYW1lJ10p CisgICAgICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0OgorICAgICAgICAgICAgICAgIHBh c3MKKworICAgICAgICAgICAgaWYgJ3dlaWdodCcgbm90IGluIGluZm86CisgICAgICAgICAgICAg ICAgIyBkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBzY2hlZC1jcmVkaXQyPworICAgICAgICAgICAg ICAgIGluZm8gPSB7J3dlaWdodCc6IC0xfQorCisgICAgICAgICAgICBpbmZvWyd3ZWlnaHQnXSA9 IGludChpbmZvWyd3ZWlnaHQnXSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mb1snbmFt ZSddICA9IGRbJ25hbWUnXQorICAgICAgICAgICAgaW5mb1snZG9taWQnXSA9IHN0cihkWydkb21p ZCddKQorICAgICAgICAgICAgcHJpbnQoICgiJShuYW1lKS0zMnMgJShkb21pZCk1cyAlKHdlaWdo dCk2ZCIpICUgaW5mbykKKyAgICBlbHNlOgorICAgICAgICBpZiBkb21pZCBpcyBOb25lOgorICAg ICAgICAgICAgIyBwbGFjZSBob2xkZXIgZm9yIHN5c3RlbS13aWRlIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICAgICBlcnIoIk5vIGRvbWFpbiBnaXZlbi4iKQorICAgICAgICAgICAgdXNh Z2UoJ3NjaGVkLWNyZWRpdDInKQorCisgICAgICAgIGlmIHNlcnZlclR5cGUgPT0gU0VSVkVSX1hF Tl9BUEk6CisgICAgICAgICAgICBpZiBkb21zWzBdWydkb21pZCddOgorICAgICAgICAgICAgICAg IHNlcnZlci54ZW5hcGkuVk0uYWRkX3RvX1ZDUFVzX3BhcmFtc19saXZlKAorICAgICAgICAgICAg ICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAgIndlaWdo dCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc2VydmVyLnhlbmFwaS5WTS5hZGRfdG9fVkNQVXNfcGFyYW1zKAorICAgICAg ICAgICAgICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAg IndlaWdodCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHJlc3VsdCA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX3NldChk b21pZCwgd2VpZ2h0KQorICAgICAgICAgICAgaWYgcmVzdWx0ICE9IDA6CisgICAgICAgICAgICAg ICAgZXJyKHN0cihyZXN1bHQpKQorCiBkZWYgeG1faW5mbyhhcmdzKToKICAgICBhcmdfY2hlY2so YXJncywgImluZm8iLCAwLCAxKQogICAgIApAQCAtMzM0MSw2ICszNDIyLDcgQEAKICAgICAjIHNj aGVkdWxlcgogICAgICJzY2hlZC1zZWRmIjogeG1fc2NoZWRfc2VkZiwKICAgICAic2NoZWQtY3Jl ZGl0IjogeG1fc2NoZWRfY3JlZGl0LAorICAgICJzY2hlZC1jcmVkaXQyIjogeG1fc2NoZWRfY3Jl ZGl0MiwKICAgICAjIGJsb2NrCiAgICAgImJsb2NrLWF0dGFjaCI6IHhtX2Jsb2NrX2F0dGFjaCwK ICAgICAiYmxvY2stZGV0YWNoIjogeG1fYmxvY2tfZGV0YWNoLAo= --0023545306443d014c047fa6d415 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --0023545306443d014c047fa6d415--