ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGU4ZDI3MzEuLjRkYzBjMzkgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSw0ICsxLDUgQEAKIEdJVC1DRkxBR1MKK0dJVC1HVUktVkFSUwogR0lULVZFUlNJT04tRklMRQogZ2l0CiBnaXQtYWRkCkBAIC0xNSw2ICsxNiw3IEBACiBnaXQtYnJhbmNoCiBnaXQtYnVuZGxlCiBnaXQtY2F0LWZpbGUKK2dpdC1jaGVjay1hdHRyCiBnaXQtY2hlY2stcmVmLWZvcm1hdAogZ2l0LWNoZWNrb3V0CiBnaXQtY2hlY2tvdXQtaW5kZXgKQEAgLTc2LDYgKzc4LDcgQEAKIGdpdC1tZXJnZS1yZWN1cnNpdmUKIGdpdC1tZXJnZS1yZXNvbHZlCiBnaXQtbWVyZ2Utc3R1cGlkCitnaXQtbWVyZ2Utc3VidHJlZQogZ2l0LW1lcmdldG9vbAogZ2l0LW1rdGFnCiBnaXQtbWt0cmVlCkBAIC0xNDEsMTEgKzE0NCwxNCBAQAogZ2l0LXdoYXRjaGFuZ2VkCiBnaXQtd3JpdGUtdHJlZQogZ2l0LWNvcmUtKi8/KgorZ2l0ay13aXNoCiBnaXR3ZWIvZ2l0d2ViLmNnaQogdGVzdC1jaG10aW1lCiB0ZXN0LWRhdGUKIHRlc3QtZGVsdGEKIHRlc3QtZHVtcC1jYWNoZS10cmVlCit0ZXN0LWdlbnJhbmRvbQordGVzdC1tYXRjaC10cmVlcwogY29tbW9uLWNtZHMuaAogKi50YXIuZ3oKICouZHNjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCBhZDg3NzM2Li4zZjkyNzgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTIsOSArMiwxMCBAQAogCSQoZmlsdGVyLW91dCAkKGFkZHN1ZmZpeCAudHh0LCAkKEFSVElDTEVTKSAkKFNQX0FSVElDTEVTKSksIFwKIAkJJCh3aWxkY2FyZCBnaXQtKi50eHQpKSBcCiAJZ2l0ay50eHQKK01BTjVfVFhUPWdpdGF0dHJpYnV0ZXMudHh0CiBNQU43X1RYVD1naXQudHh0CiAKLURPQ19IVE1MPSQocGF0c3Vic3QgJS50eHQsJS5odG1sLCQoTUFOMV9UWFQpICQoTUFON19UWFQpKQorRE9DX0hUTUw9JChwYXRzdWJzdCAlLnR4dCwlLmh0bWwsJChNQU4xX1RYVCkgJChNQU41X1RYVCkgJChNQU43X1RYVCkpCiAKIEFSVElDTEVTID0gdHV0b3JpYWwKIEFSVElDTEVTICs9IHR1dG9yaWFsLTIKQEAgLTIzLDEyICsyNCwxNCBAQAogRE9DX0hUTUwgKz0gJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFSVElDTEVTKSAkKFNQX0FSVElDTEVTKSkKIAogRE9DX01BTjE9JChwYXRzdWJzdCAlLnR4dCwlLjEsJChNQU4xX1RYVCkpCitET0NfTUFONT0kKHBhdHN1YnN0ICUudHh0LCUuNSwkKE1BTjVfVFhUKSkKIERPQ19NQU43PSQocGF0c3Vic3QgJS50eHQsJS43LCQoTUFON19UWFQpKQogCiBwcmVmaXg/PSQoSE9NRSkKIGJpbmRpcj89JChwcmVmaXgpL2JpbgogbWFuZGlyPz0kKHByZWZpeCkvbWFuCiBtYW4xZGlyPSQobWFuZGlyKS9tYW4xCittYW41ZGlyPSQobWFuZGlyKS9tYW41CiBtYW43ZGlyPSQobWFuZGlyKS9tYW43CiAjIERFU1RESVI9CiAKQEAgLTUzLDE4ICs1NiwyNyBAQAogCiBodG1sOiAkKERPQ19IVE1MKQogCi0kKERPQ19IVE1MKSAkKERPQ19NQU4xKSAkKERPQ19NQU43KTogYXNjaWlkb2MuY29uZgorJChET0NfSFRNTCkgJChET0NfTUFOMSkgJChET0NfTUFONSkgJChET0NfTUFONyk6IGFzY2lpZG9jLmNvbmYKIAotbWFuOiBtYW4xIG1hbjcKK21hbjogbWFuMSBtYW41IG1hbjcKIG1hbjE6ICQoRE9DX01BTjEpCittYW41OiAkKERPQ19NQU41KQogbWFuNzogJChET0NfTUFONykKIAogaW5zdGFsbDogbWFuCi0JJChJTlNUQUxMKSAtZCAtbTc1NSAkKERFU1RESVIpJChtYW4xZGlyKSAkKERFU1RESVIpJChtYW43ZGlyKQorCSQoSU5TVEFMTCkgLWQgLW03NTUgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1kIC1tNzU1ICQoREVTVERJUikkKG1hbjVkaXIpCisJJChJTlNUQUxMKSAtZCAtbTc1NSAkKERFU1RESVIpJChtYW43ZGlyKQogCSQoSU5TVEFMTCkgLW02NDQgJChET0NfTUFOMSkgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1tNjQ0ICQoRE9DX01BTjUpICQoREVTVERJUikkKG1hbjVkaXIpCiAJJChJTlNUQUxMKSAtbTY0NCAkKERPQ19NQU43KSAkKERFU1RESVIpJChtYW43ZGlyKQogCiAKKy4uL0dJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisJJChNQUtFKSAtQyAuLi8gR0lULVZFUlNJT04tRklMRQorCistaW5jbHVkZSAuLi9HSVQtVkVSU0lPTi1GSUxFCisKICMKICMgRGV0ZXJtaW5lICJpbmNsdWRlOjoiIGZpbGUgcmVmZXJlbmNlcyBpbiBhc2NpaWRvYyBmaWxlcy4KICMKQEAgLTk0LDE3ICsxMDYsMjUgQEAKIGdpdC43IGdpdC5odG1sOiBnaXQudHh0IGNvcmUtaW50cm8udHh0CiAKIGNsZWFuOgotCXJtIC1mICoueG1sICouaHRtbCAqLjEgKi43IGhvd3RvLWluZGV4LnR4dCBob3d0by8qLmh0bWwgZG9jLmRlcAorCXJtIC1mICoueG1sICoueG1sKyAqLmh0bWwgKi5odG1sKyAqLjEgKi41ICouNyBob3d0by1pbmRleC50eHQgaG93dG8vKi5odG1sIGRvYy5kZXAKIAlybSAtZiAkKGNtZHNfdHh0KSAqLm1hZGUKIAogJS5odG1sIDogJS50eHQKLQkkKEFTQ0lJRE9DKSAtYiB4aHRtbDExIC1kIG1hbnBhZ2UgLWYgYXNjaWlkb2MuY29uZiAkKEFTQ0lJRE9DX0VYVFJBKSAkPAorCXJtIC1mICRAKyAkQAorCSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWQgbWFucGFnZSAtZiBhc2NpaWRvYy5jb25mIFwKKwkJJChBU0NJSURPQ19FWFRSQSkgLW8gLSAkPCB8IFwKKwkJc2VkIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyA+JEArCisJbXYgJEArICRACiAKLSUuMSAlLjcgOiAlLnhtbAorJS4xICUuNSAlLjcgOiAlLnhtbAogCXhtbHRvIC1tIGNhbGxvdXRzLnhzbCBtYW4gJDwKIAogJS54bWwgOiAlLnR4dAotCSQoQVNDSUlET0MpIC1iIGRvY2Jvb2sgLWQgbWFucGFnZSAtZiBhc2NpaWRvYy5jb25mICQ8CisJcm0gLWYgJEArICRACisJJChBU0NJSURPQykgLWIgZG9jYm9vayAtZCBtYW5wYWdlIC1mIGFzY2lpZG9jLmNvbmYgXAorCQkkKEFTQ0lJRE9DX0VYVFJBKSAtbyAtICQ8IHwgXAorCQlzZWQgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnID4kQCsKKwltdiAkQCsgJEAKIAogdXNlci1tYW51YWwueG1sOiB1c2VyLW1hbnVhbC50eHQgdXNlci1tYW51YWwuY29uZgogCSQoQVNDSUlET0MpIC1iIGRvY2Jvb2sgLWQgYm9vayAkPApAQCAtMTM1LDMgKzE1NSw1IEBACiAKIHF1aWNrLWluc3RhbGw6CiAJc2ggLi9pbnN0YWxsLWRvYy1xdWljay5zaCAkKERPQ19SRUYpICQobWFuZGlyKQorCisuUEhPTlk6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWNhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLnR4dApAQCAtMCwwICsxLDE0NCBAQAorR0lUIHYxLjUuMiBSZWxlYXNlIE5vdGVzIChkcmFmdCkKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBQbHVtYmluZyBsZXZlbCBzdWJwcm9qZWN0IHN1cHBvcnQuCisKKyAgWW91IGNhbiBpbmNsdWRlIGEgc3ViZGlyZWN0b3J5IHRoYXQgaGFzIGFuIGluZGVwZW5kZW50IGdpdAorICByZXBvc2l0b3J5IGluIHlvdXIgaW5kZXggYW5kIHRyZWUgb2JqZWN0cyBhcyBhCisgICJzdWJwcm9qZWN0Ii4gIFRoaXMgcGx1bWJpbmcgKGkuZS4gImNvcmUiKSBsZXZlbCBzdWJwcm9qZWN0CisgIHN1cHBvcnQgZXhwbGljaXRseSBleGNsdWRlcyByZWN1cnNpdmUgYmVoYXZpb3VyLgorCisgIFRoZSAic3VicHJvamVjdCIgZW50cmllcyBpbiB0aGUgaW5kZXggYW5kIHRyZWVzIGFyZQorICBpbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuICBFeHBlcmltZW50aW5nIHdpdGgKKyAgdGhlIHBsdW1iaW5nIGxldmVsIHN1cHBvcnQgaXMgZW5jb3VyYWdlZCwgYnV0IGJlIHdhcm5lZCB0aGF0CisgIHVubGVzcyBldmVyeWJvZHkgaW4geW91ciBwcm9qZWN0IHVwZGF0ZXMgdG8gdGhpcyByZWxlYXNlIG9yCisgIGxhdGVyLCB1c2luZyB0aGlzIGZlYXR1cmUgd291bGQgbWFrZSB5b3VyIHByb2plY3QKKyAgaW5hY2Nlc3NpYmxlIGJ5IHBlb3BsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KKworKiBQbHVtYmluZyBsZXZlbCBnaXRhdHRyaWJ1dGVzIHN1cHBvcnQuCisKKyAgVGhlIGdpdGF0dHJpYnV0ZXMgbWVjaGFuaXNtIGFsbG93cyB5b3UgdG8gYWRkICdhdHRyaWJ1dGVzJyB0bworICBwYXRocyBpbiB5b3VyIHByb2plY3QsIGFuZCBhZmZlY3QgdGhlIHdheSBjZXJ0YWluIGdpdAorICBvcGVyYXRpb25zIHdvcmsuICBDdXJyZW50bHkgeW91IGNhbiBpbmZsdWVuY2UgaWYgYSBwYXRoIGlzCisgIGNvbnNpZGVyZWQgYSBiaW5hcnkgb3IgdGV4dCAodGhlIGZvcm1lciB3b3VsZCBiZSB0cmVhdGVkIGJ5CisgICdnaXQgZGlmZicgbm90IHRvIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQ7IHRoZSBsYXR0ZXIgY2FuIGdvCisgIHRocm91Z2ggdGhlIGxpbmUgZW5kaW5ncyBjb252ZXJzaW9uIHByb2Nlc3MgaW4gcmVwb3NpdG9yaWVzCisgIHdpdGggY29yZS5hdXRvY3JsZiBzZXQpLCBhbmQgc3BlY2lmeSBhIGN1c3RvbSAzLXdheSBtZXJnZQorICBkcml2ZXIuCisKKyogVGhlIHBhY2tmaWxlIGZvcm1hdCBub3cgb3B0aW9uYWxseSBzdXBvcnRzIDY0LWJpdCBpbmRleC4KKworICBUaGlzIHJlbGVhc2Ugc3VwcG9ydHMgdGhlICJ2ZXJzaW9uIDIiIGZvcm1hdCBvZiB0aGUgLmlkeAorICBmaWxlLiAgVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBhIGh1Z2UgcGFja2ZpbGUKKyAgbmVlZHMgbW9yZSB0aGFuIDMyLWJpdCB0byBleHByZXNzIG9mZnNldHMgb2Ygb2JqZWN0cyBpbiB0aGUKKyAgcGFjaworCisqIE5ldyBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtICJnaXQgYmlzZWN0IHN0YXJ0IiBjYW4gb3B0aW9uYWxseSB0YWtlIGEgc2luZ2xlIGJhZCBjb21taXQgYW5kCisgICAgemVybyBvciBtb3JlIGdvb2QgY29tbWl0cyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgIC0gImdpdCBzaG9ydGxvZyIgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0byB3cmFwIGl0cyBvdXRwdXQuCisKKyAgLSAic3VidHJlZSIgbWVyZ2Ugc3RyYXRlZ3kgYWxsb3dzIGFub3RoZXIgcHJvamVjdCB0byBiZSBtZXJnZWQgaW4gYXMKKyAgICB5b3VyIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGEgbmV3IC0tc3ViamVjdC1wcmVmaXg9PHN0cmluZz4KKyAgICBvcHRpb24sIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbiAiW1BBVENIXSIuCisKKyAgLSAiZ2l0IGFkZCAtdSIgaXMgYSBxdWljayB3YXkgdG8gZG8gdGhlIGZpcnN0IHN0YWdlIG9mICJnaXQKKyAgICBjb21taXQgLWEiIChpLmUuIHVwZGF0ZSB0aGUgaW5kZXggdG8gbWF0Y2ggdGhlIHdvcmtpbmcKKyAgICB0cmVlKTsgaXQgb2J2aW91c2x5IGRvZXMgbm90IG1ha2UgYSBjb21taXQuCisKKyogVXBkYXRlZCBiZWhhdmlvciBvZiBleGlzdGluZyBjb21tYW5kcy4KKworICAtICJnaXQgZGlmZiAtLXN0YXQiIHNob3dzIHNpemUgb2YgcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBibG9icworICAgIGZvciBiaW5hcnkgY29udGVudHMuICBFYXJsaWVyIGl0IG9ubHkgc2FpZCAiQmluIi4KKworICAtICJnaXQgbG9zdC1mb3VuZCIgc2hvd3Mgc3R1ZmYgdGhhdCBhcmUgdW5yZWFjaGFibGUgZXhjZXB0CisgICAgZnJvbSByZWZsb2dzLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgbm93IGRldGFjaGVzIEhFQUQgYXQgdGhlIHRpcCBjb21taXQKKyAgICBvbiB0aGUgbmFtZWQgYnJhbmNoLCBpbnN0ZWFkIG9mIGp1c3Qgc3dpdGNoaW5nIHRvIHRoZQorICAgIGJyYW5jaCAodXNlICJnaXQgY2hlY2tvdXQgYnJhbmNoIiB0byBzd2l0Y2ggdG8gdGhlIGJyYW5jaCwKKyAgICBhcyBiZWZvcmUpLgorCisgIC0gImdpdCBiaXNlY3QgbmV4dCIgY2FuIGJlIHVzZWQgYWZ0ZXIgZ2l2aW5nIG9ubHkgYSBiYWQgY29tbWl0CisgICAgd2l0aG91dCBnaXZpbmcgYSBnb29kIG9uZSAodGhpcyBzdGFydHMgYmlzZWN0aW9uIGhhbGYtd2F5IHRvCisgICAgdGhlIHJvb3QgY29tbWl0KS4gIFdlIHVzZWQgdG8gcmVmdXNlIHRvIG9wZXJhdGUgd2l0aG91dCBhCisgICAgZ29vZCBhbmQgYSBiYWQgY29tbWl0LgorCisgIC0gImdpdCBwdXNoIiwgd2hlbiBwdXNoaW5nIGludG8gbW9yZSB0aGFuIG9uZSByZXBvc2l0b3J5LCBkb2VzCisgICAgbm90IHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yLgorCisgIC0gImdpdCBhcmNoaXZlIiBkb2VzIG5vdCBpbnNpc3QgeW91IHRvIGdpdmUgLS1mb3JtYXQgcGFyYW1ldGVyCisgICAgYW55bW9yZTsgaXQgZGVmYXVsdHMgdG8gInRhciIuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgY2FuIHVzZSBiYWNrZW5kcyBvdGhlciB0aGFuIHNxbGl0ZS4KKworICAtICJnaXR2aWV3IiAoaW4gY29udHJpYi8gc2VjdGlvbikgbGVhcm5lZCB0byBiZXR0ZXIgc3VwcG9ydAorICAgICJnaXQtYW5ub3RhdGUiLgorCisgIC0gTG9jYWwgImdpdCBmZXRjaCIgZnJvbSBhIHJlcG9zaXRvcnkgd2hvc2Ugb2JqZWN0IHN0b3JlIGlzCisgICAgb25lIG9mIHRoZSBhbHRlcm5hdGVzIChlLmcuIGZldGNoaW5nIGZyb20gdGhlIG9yaWdpbiBpbiBhCisgICAgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtbCAtcyIpIGF2b2lkcworICAgIGRvd25sb2FkaW5nIG9iamVjdHMgdW5uZWNlc3NhcnkuCisKKyogQnVpbGRzCisKKyAgLSBnaXQtcDRpbXBvcnQgaGFzIG5ldmVyIGJlZW4gaW5zdGFsbGVkOyBub3cgdGhlcmUgaXMgYW4KKyAgICBpbnN0YWxsYXRpb24gb3B0aW9uIHRvIGRvIHNvLgorCisgIC0gZ2l0ayBhbmQgZ2l0LWd1aSBjYW4gYmUgY29uZmlndXJlZCBvdXQuCisKKyAgLSBHZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiBwYWdlcyBhdXRvbWF0aWNhbGx5IGdldCB2ZXJzaW9uCisgICAgaW5mb3JtYXRpb24gZnJvbSBHSVRfVkVSU0lPTgorCisgIC0gUGFyYWxsZWwgYnVpbGQgd2l0aCAibWFrZSAtaiIgZGVzY2VuZGluZyBpbnRvIHN1YmRpcmVjdG9yeQorICAgIHdhcyBmaXhlZC4KKworKiBQZXJmb3JtYW5jZSBUd2Vha3MKKworICAtIG9wdGltaXplZCAiZ2l0LXJldi1saXN0IC0tYmlzZWN0IiAoaGVuY2UgImdpdC1iaXNlY3QiKS4KKworICAtIG9wdGltaXplZCAiZ2l0LWFkZCAkcGF0aCIgaW4gYSBsYXJnZSBkaXJlY3RvcnksIG1vc3Qgb2YKKyAgICB3aG9zZSBjb250ZW50cyBhcmUgaWdub3JlZC4KKworCitGaXhlcyBzaW5jZSB2MS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjUuMSBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluCit0aGlzIHJlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyogQnVnZml4ZXMKKworICAtIFN3aXRjaGluZyBicmFuY2hlcyB3aXRoICJnaXQgY2hlY2tvdXQiIHJlZnVzZWQgdG8gd29yayB3aGVuCisgICAgYSBwYXRoIGNoYW5nZXMgZnJvbSBhIGZpbGUgdG8gYSBkaXJlY3RvcnkgYmV0d2VlbiB0aGUKKyAgICBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIG5ldyBicmFuY2gsIGluIG9yZGVyIG5vdCB0byBsb3NlCisgICAgcG9zc2libGUgbG9jYWwgY2hhbmdlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgaXMgYmVpbmcgdHVybmVkCisgICAgaW50byBhIGZpbGUgd2l0aCB0aGUgc3dpdGNoLiAgV2Ugbm93IGFsbG93IHN1Y2ggYSBicmFuY2gKKyAgICBzd2l0Y2ggYWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGVyZSBpcyBubyBsb2NhbGx5IG1vZGlmaWVkCisgICAgZmlsZSBub3IgdW4taWdub3JlZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuICBUaGlzIGhhcyBub3QKKyAgICBiZWVuIGJhY2twb3J0ZWQgdG8gMS41LjEueCBzZXJpZXMsIGFzIGl0IGlzIHJhdGhlciBhbgorICAgIGludHJ1c2l2ZSBjaGFuZ2UuCisKKyAgLSBNZXJnaW5nIGJyYW5jaGVzIHRoYXQgaGF2ZSBhIGZpbGUgaW4gb25lIGFuZCBhIGRpcmVjdG9yeSBpbgorICAgIGFub3RoZXIgYXQgdGhlIHNhbWUgcGF0aCB1c2VkIHRvIGdldCBxdWl0ZSBjb25mdXNlZC4gIFdlCisgICAgaGFuZGxlIHN1Y2ggYSBjYXNlIGEgYml0IG1vcmUgY2FyZWZ1bGx5LCBldmVuIHRob3VnaCB0aGF0IGlzCisgICAgc3RpbGwgbGVmdCBhcyBhIGNvbmZsaWN0IGZvciB0aGUgdXNlciB0byBzb3J0IG91dC4gIFRoaXMKKyAgICB3aWxsIG5vdCBiZSBiYWNrcG9ydGVkIHRvIDEuNS4xLnggc2VyaWVzLCBhcyBpdCBpcyByYXRoZXIgYW4KKyAgICBpbnRydXNpdmUgY2hhbmdlLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisqIFBlcmZvcm1hbmNlIFR3ZWFrcworCistLQorZXhlYyA+L3Zhci90bXAvMQorTz12MS41LjEuMi0yNDItZzJkNzY1NDgKK2VjaG8gTz1gZ2l0IGRlc2NyaWJlIHJlZnMvaGVhZHMvbWFzdGVyYAorZ2l0IHNob3J0bG9nIC0tbm8tbWVyZ2VzICRPLi5yZWZzL2hlYWRzL21hc3RlciBecmVmcy9oZWFkcy9tYWludApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggOGNmNTA5My4uNmE0ZGEyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0zMCw2ICszMCw5IEBACiAJLSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gKHdoaWNoIGlzIHVuc3VpdGFibGUgZm9yCiAJICB0aGUgY29tbWl0IG1lc3NhZ2UpIGJldHdlZW4gdGhlICItLS0iIGFuZCB0aGUgZGlmZnN0YXQKIAktIHNlbmQgdGhlIHBhdGNoIHRvIHRoZSBsaXN0IF9hbmRfIHRoZSBtYWludGFpbmVyCisJLSBpZiB5b3UgY2hhbmdlLCBhZGQsIG9yIHJlbW92ZSBhIGNvbW1hbmQgbGluZSBvcHRpb24gb3IKKwkgIG1ha2Ugc29tZSBvdGhlciB1c2VyIGludGVyZmFjZSBjaGFuZ2UsIHRoZSBhc3NvY2lhdGVkCisJICBkb2N1bWVudGF0aW9uIHNob3VsZCBiZSB1cGRhdGVkIGFzIHdlbGwuCiAKIExvbmcgdmVyc2lvbjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCmluZGV4IDQ0YjFjZTQuLmZhN2RjOTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKQEAgLTMxLDYgKzMxLDI1IEBACiB7dGl0bGUjfTwvZXhhbXBsZT4KIGVuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQogCitpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KK2lmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQorW2hlYWRlcl0KK3RlbXBsYXRlOjpbaGVhZGVyLWRlY2xhcmF0aW9uc10KKzxyZWZlbnRyeT4KKzxyZWZtZXRhPgorPHJlZmVudHJ5dGl0bGU+e21hbnRpdGxlfTwvcmVmZW50cnl0aXRsZT4KKzxtYW52b2xudW0+e21hbnZvbG51bX08L21hbnZvbG51bT4KKzxyZWZtaXNjaW5mbyBjbGFzcz0ic291cmNlIj5HaXQ8L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJ2ZXJzaW9uIj5AQEdJVF9WRVJTSU9OQEA8L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJtYW51YWwiPkdpdCBNYW51YWw8L3JlZm1pc2NpbmZvPgorPC9yZWZtZXRhPgorPHJlZm5hbWVkaXY+CisgIDxyZWZuYW1lPnttYW5uYW1lfTwvcmVmbmFtZT4KKyAgPHJlZnB1cnBvc2U+e21hbnB1cnBvc2V9PC9yZWZwdXJwb3NlPgorPC9yZWZuYW1lZGl2PgorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KKwogaWZkZWY6OmJhY2tlbmQteGh0bWwxMVtdCiBbZ2l0bGluay1pbmxpbmVtYWNyb10KIDxhIGhyZWY9Int0YXJnZXR9Lmh0bWwiPnt0YXJnZXR9ezA/KHswfSl9PC9hPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsIGIvRG9jdW1lbnRhdGlvbi9jbWQtbGlzdC5wZXJsCmluZGV4IDAzODE1OTAuLjQ0MzgwMmEgMTAwNzU1Ci0tLSBhL0RvY3VtZW50YXRpb24vY21kLWxpc3QucGVybAorKysgYi9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwKQEAgLTg0LDYgKzg0LDcgQEAKIGdpdC1jYXQtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKIGdpdC1jaGVja291dC1pbmRleCAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycwogZ2l0LWNoZWNrb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jaGVjay1hdHRyICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycwogZ2l0LWNoZWNrLXJlZi1mb3JtYXQgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCiBnaXQtY2hlcnJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycwogZ2l0LWNoZXJyeS1waWNrICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAppbmRleCA3ZTQxY2E2Li5jMjU3Y2RmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC0zMDAsNiArMzAwLDEwIEBACiAJYnJhbmNoLjxuYW1lPi5tZXJnZSB0byB0aGUgZGVzaXJlZCBicmFuY2gsIGFuZCB1c2UgdGhlIHNwZWNpYWwgc2V0dGluZwogCWAuYCAoYSBwZXJpb2QpIGZvciBicmFuY2guPG5hbWU+LnJlbW90ZS4KIAorY2xlYW4ucmVxdWlyZUZvcmNlOjoKKwlBIGJvb2xlYW4gdG8gbWFrZSBnaXQtY2xlYW4gZG8gbm90aGluZyB1bmxlc3MgZ2l2ZW4gLWYgb3IgLW4uICBEZWZhdWx0cworCXRvIGZhbHNlLgorCiBjb2xvci5icmFuY2g6OgogCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCiAJZ2l0bGluazpnaXQtYnJhbmNoWzFdLiBNYXkgYmUgc2V0IHRvIGB0cnVlYCAob3IgYGFsd2F5c2ApLApAQCAtNDIzLDggKzQyNywzNCBAQAogCWNhdXNlcyB0aGUgY2xpZW50IHRvIHRyZWF0IGFsbCBmaWxlcyBhcyBiaW5hcnkgZmlsZXMgd2hpY2ggc3VwcHJlc3NlcwogCWFueSBuZXdsaW5lIG11bmdpbmcgaXQgb3RoZXJ3aXNlIG1pZ2h0IGRvLiBBIHdvcmstYXJvdW5kIGZvciB0aGUKIAlmYWN0IHRoYXQgdGhlcmUgaXMgbm8gd2F5IHlldCB0byBzZXQgc2luZ2xlIGZpbGVzIHRvIG1vZGUgJy1rYicuCisKK2dpdGN2cy5kYm5hbWU6OgorCURhdGFiYXNlIHVzZWQgYnkgZ2l0LWN2c3NlcnZlciB0byBjYWNoZSByZXZpc2lvbiBpbmZvcm1hdGlvbgorCWRlcml2ZWQgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnkuIFRoZSBleGFjdCBtZWFuaW5nIGRlcGVuZHMgb24gdGhlCisJdXNlZCBkYXRhYmFzZSBkcml2ZXIsIGZvciBTUUxpdGUgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGRyaXZlcikgdGhpcworCWlzIGEgZmlsZW5hbWUuIFN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlCisJZ2l0bGluazpnaXQtY3Zzc2VydmVyWzFdIGZvciBkZXRhaWxzKS4gTWF5IG5vdCBjb250YWluIHNlbWljb2xvbnMgKGA7YCkuCisJRGVmYXVsdDogJyVHZ2l0Y3ZzLiVtLnNxbGl0ZScKKworZ2l0Y3ZzLmRiZHJpdmVyOjoKKwlVc2VkIFBlcmwgREJJIGRyaXZlci4gWW91IGNhbiBzcGVjaWZ5IGFueSBhdmFpbGFibGUgZHJpdmVyCisgICAgICAgIGZvciB0aGlzIGhlcmUsIGJ1dCBpdCBtaWdodCBub3Qgd29yay4gZ2l0LWN2c3NlcnZlciBpcyB0ZXN0ZWQKKwl3aXRoICdEQkQ6OlNRTGl0ZScsIHJlcG9ydGVkIHRvIHdvcmsgd2l0aCAnREJEOjpQZycsIGFuZAorCXJlcG9ydGVkICpub3QqIHRvIHdvcmsgd2l0aCAnREJEOjpteXNxbCcuIEV4cGVyaW1lbnRhbCBmZWF0dXJlLgorCU1heSBub3QgY29udGFpbiBkb3VibGUgY29sb25zIChgOmApLiBEZWZhdWx0OiAnU1FMaXRlJy4KIAlTZWUgZ2l0bGluazpnaXQtY3Zzc2VydmVyWzFdLgogCitnaXRjdnMuZGJ1c2VyLCBnaXRjdnMuZGJwYXNzOjoKKwlEYXRhYmFzZSB1c2VyIGFuZCBwYXNzd29yZC4gT25seSB1c2VmdWwgaWYgc2V0dGluZyAnZ2l0Y3ZzLmRiZHJpdmVyJywKKwlzaW5jZSBTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgdXNlcnMgYW5kL29yIHBhc3N3b3Jkcy4KKwknZ2l0Y3ZzLmRidXNlcicgc3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlnaXRsaW5rOmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLgorCitBbGwgZ2l0Y3ZzIHZhcmlhYmxlcyBleGNlcHQgZm9yICdnaXRjdnMuYWxsYmluYXJ5JyBjYW4gYWxzbyBzcGVjaWZlZAorYXMgJ2dpdGN2cy48YWNjZXNzX21ldGhvZD4uPHZhcm5hbWU+JyAod2hlcmUgJ2FjY2Vzc19tZXRob2QnIGlzIG9uZQorb2YgImV4dCIgYW5kICJwc2VydmVyIikgdG8gbWFrZSB0aGVtIGFwcGx5IG9ubHkgZm9yIHRoZSBnaXZlbiBhY2Nlc3MKK21ldGhvZC4KKwogaHR0cC5zc2xWZXJpZnk6OgogCVdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBTU0wgY2VydGlmaWNhdGUgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCiAJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX05PX1ZFUklGWScgZW52aXJvbm1lbnQKQEAgLTQ5OSw2ICs1MjksMTkgQEAKIAljb25mbGljdHMsIDIgb3V0cHV0cyBjb25mbGljdHMgYW5kIGZpbGUgY2hhbmdlcy4gIExldmVsIDUgYW5kCiAJYWJvdmUgb3V0cHV0cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICBUaGUgZGVmYXVsdCBpcyBsZXZlbCAyLgogCittZXJnZS48ZHJpdmVyPi5uYW1lOjoKKwlEZWZpbmVzIGEgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgYSBjdXN0b20gbG93LWxldmVsCisJbWVyZ2UgZHJpdmVyLiAgU2VlIGdpdGxpbms6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworbWVyZ2UuPGRyaXZlcj4uZHJpdmVyOjoKKwlEZWZpbmVzIHRoZSBjb21tYW5kIHRoYXQgaW1wbGVtZW50cyBhIGN1c3RvbSBsb3ctbGV2ZWwKKwltZXJnZSBkcml2ZXIuICBTZWUgZ2l0bGluazpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCittZXJnZS48ZHJpdmVyPi5yZWN1cnNpdmU6OgorCU5hbWVzIGEgbG93LWxldmVsIG1lcmdlIGRyaXZlciB0byBiZSB1c2VkIHdoZW4KKwlwZXJmb3JtaW5nIGFuIGludGVybmFsIG1lcmdlIGJldHdlZW4gY29tbW9uIGFuY2VzdG9ycy4KKwlTZWUgZ2l0bGluazpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCiBwYWNrLndpbmRvdzo6CiAJVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGJ5IGdpdGxpbms6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCiAJd2luZG93IHNpemUgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gMTAuCkBAIC01NjcsOCArNjEwLDggQEAKIAogdXNlci5lbWFpbDo6CiAJWW91ciBlbWFpbCBhZGRyZXNzIHRvIGJlIHJlY29yZGVkIGluIGFueSBuZXdseSBjcmVhdGVkIGNvbW1pdHMuCi0JQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVVUSE9SX0VNQUlMJyBhbmQgJ0dJVF9DT01NSVRURVJfRU1BSUwnCi0JZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgU2VlIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0FVVEhPUl9FTUFJTCcsICdHSVRfQ09NTUlUVEVSX0VNQUlMJywgYW5kCisJJ0VNQUlMJyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBTZWUgZ2l0bGluazpnaXQtY29tbWl0LXRyZWVbMV0uCiAKIHVzZXIubmFtZTo6CiAJWW91ciBmdWxsIG5hbWUgdG8gYmUgcmVjb3JkZWQgaW4gYW55IG5ld2x5IGNyZWF0ZWQgY29tbWl0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS10dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2NvcmUtdHV0b3JpYWwudHh0CmluZGV4IDk3Y2RiOTAuLjZiOWI5YWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS10dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLXR1dG9yaWFsLnR4dApAQCAtMzE5LDEwICszMTksOSBAQAogYGdpdC1jb21taXQtdHJlZWAgbm9ybWFsbHkgdGFrZXMgc2V2ZXJhbCBhcmd1bWVudHMgLS0gaXQgd2FudHMgdG8ga25vdwogd2hhdCB0aGUgJ3BhcmVudCcgb2YgYSBjb21taXQgd2FzLCBidXQgc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWl0CiBldmVyIGluIHRoaXMgbmV3IHJlcG9zaXRvcnksIGFuZCBpdCBoYXMgbm8gcGFyZW50cywgd2Ugb25seSBuZWVkIHRvIHBhc3MgaW4KLXRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZS4gSG93ZXZlciwgYGdpdC1jb21taXQtdHJlZWAKLWFsc28gd2FudHMgdG8gZ2V0IGEgY29tbWl0IG1lc3NhZ2UKLW9uIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0IHdpbGwgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcgb2JqZWN0IG5hbWUgZm9yIHRoZQotY29tbWl0IHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCit0aGUgb2JqZWN0IG5hbWUgb2YgdGhlIHRyZWUuIEhvd2V2ZXIsIGBnaXQtY29tbWl0LXRyZWVgIGFsc28gd2FudHMgdG8gZ2V0IGEKK2NvbW1pdCBtZXNzYWdlIG9uIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0IHdpbGwgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKK29iamVjdCBuYW1lIGZvciB0aGUgY29tbWl0IHRvIGl0cyBzdGFuZGFyZCBvdXRwdXQuCiAKIEFuZCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSB0aGUgYC5naXQvcmVmcy9oZWFkcy9tYXN0ZXJgIGZpbGUKIHdoaWNoIGlzIHBvaW50ZWQgYXQgYnkgYEhFQURgLiBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gY29udGFpbgpAQCAtMTMwNCw3ICsxMzAzLDcgQEAKIGhvdyBjYW4gKnlvdSogcHJlcGFyZSBhIHJlcG9zaXRvcnkgdG8gbGV0IG90aGVyIHBlb3BsZSBwdWxsIGZyb20KIGl0PwogCi1Zb3VyIGRvIHlvdXIgcmVhbCB3b3JrIGluIHlvdXIgd29ya2luZyB0cmVlIHRoYXQgaGFzIHlvdXIKK1lvdSBkbyB5b3VyIHJlYWwgd29yayBpbiB5b3VyIHdvcmtpbmcgdHJlZSB0aGF0IGhhcyB5b3VyCiBwcmltYXJ5IHJlcG9zaXRvcnkgaGFuZ2luZyB1bmRlciBpdCBhcyBpdHMgYC5naXRgIHN1YmRpcmVjdG9yeS4KIFlvdSAqY291bGQqIG1ha2UgdGhhdCByZXBvc2l0b3J5IGFjY2Vzc2libGUgcmVtb3RlbHkgYW5kIGFzawogcGVvcGxlIHRvIHB1bGwgZnJvbSBpdCwgYnV0IGluIHByYWN0aWNlIHRoYXQgaXMgbm90IHRoZSB3YXkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKaW5kZXggNTlkZmFiZS4uZDNjYTlhOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGl2ZS50eHQKQEAgLTMwLDcgKzMwLDggQEAKIC0tLS0tLS0KIAogLS1mb3JtYXQ9PGZtdD46OgotCUZvcm1hdCBvZiB0aGUgcmVzdWx0aW5nIGFyY2hpdmU6ICd0YXInLCAnemlwJy4uLgorCUZvcm1hdCBvZiB0aGUgcmVzdWx0aW5nIGFyY2hpdmU6ICd0YXInLCAnemlwJy4uLiAgVGhlIGRlZmF1bHQKKwlpcyAndGFyJy4KIAogLS1saXN0LCAtbDo6CiAJU2hvdyBhbGwgYXZhaWxhYmxlIGZvcm1hdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAppbmRleCBiMmJjNThkLi41ZjY4ZWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKQEAgLTE1LDcgKzE1LDcgQEAKIFRoZSBjb21tYW5kIHRha2VzIHZhcmlvdXMgc3ViY29tbWFuZHMsIGFuZCBkaWZmZXJlbnQgb3B0aW9ucyBkZXBlbmRpbmcKIG9uIHRoZSBzdWJjb21tYW5kOgogCi0gZ2l0IGJpc2VjdCBzdGFydCBbPHBhdGhzPi4uLl0KKyBnaXQgYmlzZWN0IHN0YXJ0IFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzPi4uLl0KICBnaXQgYmlzZWN0IGJhZCA8cmV2PgogIGdpdCBiaXNlY3QgZ29vZCA8cmV2PgogIGdpdCBiaXNlY3QgcmVzZXQgWzxicmFuY2g+XQpAQCAtMTM0LDE1ICsxMzQsMjYgQEAKIFRoZW4gY29tcGlsZSBhbmQgdGVzdCB0aGUgb25lIHlvdSBjaG9zZSB0byB0cnkuIEFmdGVyIHRoYXQsIHRlbGwKIGJpc2VjdCB3aGF0IHRoZSByZXN1bHQgd2FzIGFzIHVzdWFsLgogCi1DdXR0aW5nIGRvd24gYmlzZWN0aW9uIGJ5IGdpdmluZyBwYXRoIHBhcmFtZXRlciB0byBiaXNlY3Qgc3RhcnQKLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorQ3V0dGluZyBkb3duIGJpc2VjdGlvbiBieSBnaXZpbmcgbW9yZSBwYXJhbWV0ZXJzIHRvIGJpc2VjdCBzdGFydAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBZb3UgY2FuIGZ1cnRoZXIgY3V0IGRvd24gdGhlIG51bWJlciBvZiB0cmlhbHMgaWYgeW91IGtub3cgd2hhdCBwYXJ0IG9mCiB0aGUgdHJlZSBpcyBpbnZvbHZlZCBpbiB0aGUgcHJvYmxlbSB5b3UgYXJlIHRyYWNraW5nIGRvd24sIGJ5IGdpdmluZwogcGF0aHMgcGFyYW1ldGVycyB3aGVuIHlvdSBzYXkgYGJpc2VjdCBzdGFydGAsIGxpa2UgdGhpczoKIAogLS0tLS0tLS0tLS0tCi0kIGdpdCBiaXNlY3Qgc3RhcnQgYXJjaC9pMzg2IGluY2x1ZGUvYXNtLWkzODYKKyQgZ2l0IGJpc2VjdCBzdGFydCAtLSBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBrbm93IGJlZm9yZWhhbmQgbW9yZSB0aGFuIG9uZSBnb29kIGNvbW1pdHMsIHlvdSBjYW4gbmFycm93IHRoZQorYmlzZWN0IHNwYWNlIGRvd24gd2l0aG91dCBkb2luZyB0aGUgd2hvbGUgdHJlZSBjaGVja291dCBldmVyeSB0aW1lIHlvdQorZ2l2ZSBnb29kIGNvbW1pdHMuIFlvdSBnaXZlIHRoZSBiYWQgcmV2aXNpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgYHN0YXJ0YAorYW5kIHRoZW4geW91IGdpdmUgYWxsIHRoZSBnb29kIHJldmlzaW9ucyB5b3UgaGF2ZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yMC1yYzYgdjIuNi4yMC1yYzQgdjIuNi4yMC1yYzEgLS0KKyAgICAgICAgICAgICAgICAgICAjIHYyLjYuMjAtcmM2IGlzIGJhZAorICAgICAgICAgICAgICAgICAgICMgdjIuNi4yMC1yYzQgYW5kIHYyLjYuMjAtcmMxIGFyZSBnb29kCiAtLS0tLS0tLS0tLS0KIAogQmlzZWN0IHJ1bgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CmluZGV4IDhmOTQzOWEuLjQ0Njc4YjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKQEAgLTgsNyArOCw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQtYmxhbWUnIFstY10gWy1sXSBbLXRdIFstZl0gWy1uXSBbLXBdIFstLWluY3JlbWVudGFsXSBbLUwgbixtXQorJ2dpdC1ibGFtZScgWy1jXSBbLWJdIFstLXJvb3RdIFstc10gWy1sXSBbLXRdIFstZl0gWy1uXSBbLXBdIFstLWluY3JlbWVudGFsXSBbLUwgbixtXQogICAgICAgICAgICAgWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLS1zaW5jZT08ZGF0ZT5dCiAgICAgICAgICAgICBbPHJldj4gfCAtLWNvbnRlbnRzIDxmaWxlPl0gWy0tXSA8ZmlsZT4KIApAQCAtNjAsNiArNjAsOSBAQAogLW4sIC0tc2hvdy1udW1iZXI6OgogCVNob3cgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIGNvbW1pdCAoRGVmYXVsdDogb2ZmKS4KIAorLXM6OgorCVN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgZnJvbSB0aGUgb3V0cHV0LgorCiBUSEUgUE9SQ0VMQUlOIEZPUk1BVAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWI1MTk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stYXR0ci50eHQKQEAgLTAsMCArMSwzNyBAQAorZ2l0LWNoZWNrLWF0dHIoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1hdHRyIC0gRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uLgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorJ2dpdC1jaGVjay1hdHRyJyBhdHRyLi4uIFstLV0gcGF0aG5hbWUuLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitGb3IgZXZlcnkgcGF0aG5hbWUsIHRoaXMgY29tbWFuZCB3aWxsIGxpc3QgaWYgZWFjaCBhdHRyIGlzICd1bnNwZWNpZmllZCcsCisnc2V0Jywgb3IgJ3Vuc2V0JyBhcyBhIGdpdGF0dHJpYnV0ZSBvbiB0aGF0IHBhdGhuYW1lLgorCitPUFRJT05TCistLS0tLS0tCitcLS06OgorCUludGVycHJldCBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cyBhcyBhdHRyaWJ1dGVzLCBhbmQgYWxsIGZvbGxvd2luZworCWFyZ3VtZW50cyBhcyBwYXRoIG5hbWVzLiBJZiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwKKwliZSB0cmVhdGVkIGFzIGFuIGF0dHJpYnV0ZS4KKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IEphbWVzIEJvd2VzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CmluZGV4IGM2MWFmYmMuLjVhZmYwMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKQEAgLTgsNyArOCw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQtY2xlYW4nIFstZF0gWy1uXSBbLXFdIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4KKydnaXQtY2xlYW4nIFstZF0gWy1mXSBbLW5dIFstcV0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTI1LDYgKzI1LDEwIEBACiAtZDo6CiAJUmVtb3ZlIHVudHJhY2tlZCBkaXJlY3RvcmllcyBpbiBhZGRpdGlvbiB0byB1bnRyYWNrZWQgZmlsZXMuCiAKKy1mOjoKKwlJZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGNsZWFuLmZvcmNlUmVxdWlyZSBhcyB0cnVlLAorCWdpdC1jbGVhbiB3aWxsIHJlZnVzZSB0byBydW4gdW5sZXNzIGdpdmVuIC1mIG9yIC1uLgorCiAtbjo6CiAJRG9uJ3QgYWN0dWFsbHkgcmVtb3ZlIGFueXRoaW5nLCBqdXN0IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKaW5kZXggMTU3MWRiYi4uNTA0YTNhYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtNjEsNiArNjEsNyBAQAogCUdJVF9DT01NSVRURVJfTkFNRQogCUdJVF9DT01NSVRURVJfRU1BSUwKIAlHSVRfQ09NTUlUVEVSX0RBVEUKKwlFTUFJTAogCiAobmIgIjwiLCAiPiIgYW5kICJcbiJzIGFyZSBzdHJpcHBlZCkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKaW5kZXggZjllMGM3Ny4uZDIyODQ0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CkBAIC0zMSw2ICszMSwxMCBAQAogCiBDVlMgY2xpZW50cyBjYW5ub3QgdGFnLCBicmFuY2ggb3IgcGVyZm9ybSBHSVQgbWVyZ2VzLgogCitnaXQtY3Zzc2VydmVyIG1hcHMgR0lUIGJyYW5jaGVzIHRvIENWUyBtb2R1bGVzLiBUaGlzIGlzIHZlcnkgZGlmZmVyZW50Citmcm9tIHdoYXQgbW9zdCBDVlMgdXNlcnMgd291bGQgZXhwZWN0IHNpbmNlIGluIENWUyBtb2R1bGVzIHVzdWFsbHkgcmVwcmVzZW50CitvbmUgb3IgbW9yZSBkaXJlY3Rvcmllcy4KKwogSU5TVEFMTEFUSU9OCiAtLS0tLS0tLS0tLS0KIApAQCAtNjUsOSArNjksMjIgQEAKIAogLS0tLS0tCiBOb3RlOiB5b3UgbmVlZCB0byBlbnN1cmUgZWFjaCB1c2VyIHRoYXQgaXMgZ29pbmcgdG8gaW52b2tlIGdpdC1jdnNzZXJ2ZXIgaGFzCi13cml0ZSBhY2Nlc3MgdG8gdGhlIGxvZyBmaWxlIGFuZCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkuIFdoZW4gb2ZmZXJpbmcgYW5vbgotYWNjZXNzIHZpYSBwc2VydmVyLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG5vYm9keSB1c2VyIHNob3VsZCBoYXZlIHdyaXRlIGFjY2VzcwotdG8gYXQgbGVhc3QgdGhlIHNxbGl0ZSBkYXRhYmFzZSBhdCB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeS4KK3dyaXRlIGFjY2VzcyB0byB0aGUgbG9nIGZpbGUgYW5kIHRvIHRoZSBkYXRhYmFzZSAoc2VlCis8PGRiYmFja2VuZCxEYXRhYmFzZSBCYWNrZW5kPj4uIElmIHlvdSB3YW50IHRvIG9mZmVyIHdyaXRlIGFjY2VzcyBvdmVyCitTU0gsIHRoZSB1c2VycyBvZiBjb3Vyc2UgYWxzbyBuZWVkIHdyaXRlIGFjY2VzcyB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgaXRzZWxmLgorCitbW2NvbmZpZ2FjY2Vzc21ldGhvZF1dCitBbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY2FuIGFsc28gYmUgb3ZlcnJpZGVuIGZvciBhIHNwZWNpZmljIG1ldGhvZCBvZgorYWNjZXNzLiBWYWxpZCBtZXRob2QgbmFtZXMgYXJlICJleHQiIChmb3IgU1NIIGFjY2VzcykgYW5kICJwc2VydmVyIi4gVGhlCitmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmF0aW9uIHdvdWxkIGRpc2FibGUgcHNlcnZlciBhY2Nlc3Mgd2hpbGUgc3RpbGwKK2FsbG93aW5nIGFjY2VzcyBvdmVyIFNTSC4KKy0tLS0tLQorICAgW2dpdGN2c10KKyAgICAgICAgZW5hYmxlZD0wCisKKyAgIFtnaXRjdnMgImV4dCJdCisgICAgICAgIGVuYWJsZWQ9MQorLS0tLS0tCiAtLQogMy4gT24gdGhlIGNsaWVudCBtYWNoaW5lIHlvdSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcy4KICAgIENWU1JPT1Qgc2hvdWxkIGJlIHNldCBhcyBwZXIgbm9ybWFsLCBidXQgdGhlIGRpcmVjdG9yeSBzaG91bGQgcG9pbnQgYXQgdGhlCkBAIC05Myw2ICsxMTAsOTAgQEAKICAgICAgY3ZzIGNvIC1kIHByb2plY3QtbWFzdGVyIG1hc3RlcgogLS0tLS0tCiAKK1tbZGJiYWNrZW5kXV0KK0RhdGFiYXNlIEJhY2tlbmQKKy0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LWN2c3NlcnZlciB1c2VzIG9uZSBkYXRhYmFzZSBwZXIgZ2l0IGhlYWQgKGkuZS4gQ1ZTIG1vZHVsZSkgdG8KK3N0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IGZvciBmYXN0ZXIgYWNjZXNzLiBUaGUKK2RhdGFiYXNlIGRvZXNuJ3QgY29udGFpbiBhbnkgcGVyc2l0ZW50IGRhdGEgYW5kIGNhbiBiZSBjb21wbGV0bHkKK3JlZ2VuZXJhdGVkIGZyb20gdGhlIGdpdCByZXBvc2l0b3J5IGF0IGFueSB0aW1lLiBUaGUgZGF0YWJhc2UKK25lZWRzIHRvIGJlIHVwZGF0ZWQgKGkuZS4gd3JpdHRlbiB0bykgYWZ0ZXIgZXZlcnkgY29tbWl0LgorCitJZiB0aGUgY29tbWl0IGlzIGRvbmUgZGlyZWN0bHkgYnkgdXNpbmcgZ2l0IChhcyBvcHBvc2VkIHRvCit1c2luZyBnaXQtY3Zzc2VydmVyKSB0aGUgdXBkYXRlIHdpbGwgbmVlZCB0byBoYXBwZW4gb24gdGhlCituZXh0IHJlcG9zaXRvcnkgYWNjZXNzIGJ5IGdpdC1jdnNzZXJ2ZXIsIGluZGVwZW5kZW50IG9mCithY2Nlc3MgbWV0aG9kIGFuZCByZXF1ZXN0ZWQgb3BlcmF0aW9uLgorCitUaGF0IG1lYW5zIHRoYXQgZXZlbiBpZiB5b3Ugb2ZmZXIgb25seSByZWFkIGFjY2VzcyAoZS5nLiBieSB1c2luZwordGhlIHBzZXJ2ZXIgbWV0aG9kKSwgZ2l0LWN2c3NlcnZlciBzaG91bGQgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KK3RoZSBkYXRhYmFzZSB0byB3b3JrIHJlbGlhYmx5IChvdGhlcndpc2UgeW91IG5lZWQgdG8gbWFrZSBzdXJlCit0aGF0IHRoZSBkYXRhYmFzZSBpZiB1cC10by1kYXRlIGFsbCB0aGUgdGltZSBnaXQtY3Zzc2VydmVyIGlzIHJ1bikuCisKK0J5IGRlZmF1bHQgaXQgdXNlcyBTUUxpdGUgZGF0YWJhc2VzIGluIHRoZSBnaXQgZGlyZWN0b3J5LCBuYW1lZAorYGdpdGN2cy48bW9kdWxlX25hbWU+LnNxbGl0ZWAuIE5vdGUgdGhhdCB0aGUgU1FMaXRlIGJhY2tlbmQgY3JlYXRlcwordGVtcG9yYXJ5IGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZGF0YWJhc2UgZmlsZSBvbgord3JpdGUgc28gaXQgbWlnaHQgbm90IGJlIGVub3VnaCB0byBncmFudCB0aGUgdXNlcnMgdXNpbmcKK2dpdC1jdnNzZXJ2ZXIgd3JpdGUgYWNjZXNzIHRvIHRoZSBkYXRhYmFzZSBmaWxlIHdpdGhvdXQgZ3JhbnRpbmcKK3RoZW0gd3JpdGUgYWNjZXNzIHRvIHRoZSBkaXJlY3RvcnksIHRvby4KKworWW91IGNhbiBjb25maWd1cmUgdGhlIGRhdGFiYXNlIGJhY2tlbmQgd2l0aCB0aGUgZm9sbG93aW5nCitjb25maWd1cmF0aW9uIHZhcmlhYmxlczoKKworQ29uZmlndXJpbmcgZGF0YWJhc2UgYmFja2VuZAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitnaXQtY3Zzc2VydmVyIHVzZXMgdGhlIFBlcmwgREJJIG1vZHVsZS4gUGxlYXNlIGFsc28gcmVhZAoraXRzIGRvY3VtZW50YXRpb24gaWYgY2hhbmdpbmcgdGhlc2UgdmFyaWFibGVzLCBlc3BlY2lhbGx5CithYm91dCBgREJJLT5jb25uZWN0KClgLgorCitnaXRjdnMuZGJuYW1lOjoKKwlEYXRhYmFzZSBuYW1lLiBUaGUgZXhhY3QgbWVhbmluZyBkZXBlbmRzIG9uIHRoZQorCXVzZWQgZGF0YWJhc2UgZHJpdmVyLCBmb3IgU1FMaXRlIHRoaXMgaXMgYSBmaWxlbmFtZS4KKwlTdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZSBiZWxvdykuIE1heQorCW5vdCBjb250YWluIHNlbWljb2xvbnMgKGA7YCkuCisJRGVmYXVsdDogJyVHZ2l0Y3ZzLiVtLnNxbGl0ZScKKworZ2l0Y3ZzLmRiZHJpdmVyOjoKKwlVc2VkIERCSSBkcml2ZXIuIFlvdSBjYW4gc3BlY2lmeSBhbnkgYXZhaWxhYmxlIGRyaXZlcgorCWZvciB0aGlzIGhlcmUsIGJ1dCBpdCBtaWdodCBub3Qgd29yay4gY3Zzc2VydmVyIGlzIHRlc3RlZAorCXdpdGggJ0RCRDo6U1FMaXRlJywgcmVwb3J0ZWQgdG8gd29yayB3aXRoCisJJ0RCRDo6UGcnLCBhbmQgcmVwb3J0ZWQgKm5vdCogdG8gd29yayB3aXRoICdEQkQ6Om15c3FsJy4KKwlQbGVhc2UgcmVnYXJkIHRoaXMgYXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUuIE1heSBub3QKKwljb250YWluIGRvdWJsZSBjb2xvbnMgKGA6YCkuCisJRGVmYXVsdDogJ1NRTGl0ZScKKworZ2l0Y3ZzLmRidXNlcjo6CisJRGF0YWJhc2UgdXNlci4gT25seSB1c2VmdWwgaWYgc2V0dGluZyBgZGJkcml2ZXJgLCBzaW5jZQorCVNRTGl0ZSBoYXMgbm8gY29uY2VwdCBvZiBkYXRhYmFzZSB1c2Vycy4gU3VwcG9ydHMgdmFyaWFibGUKKwlzdWJzdGl0dXRpb24gKHNlZSBiZWxvdykuCisKK2dpdGN2cy5kYnBhc3M6OgorCURhdGFiYXNlIHBhc3N3b3JkLiAgT25seSB1c2VmdWwgaWYgc2V0dGluZyBgZGJkcml2ZXJgLCBzaW5jZQorCVNRTGl0ZSBoYXMgbm8gY29uY2VwdCBvZiBkYXRhYmFzZSBwYXNzd29yZHMuCisKK0FsbCB2YXJpYWJsZXMgY2FuIGFsc28gYmUgc2V0IHBlciBhY2Nlc3MgbWV0aG9kLCBzZWUgPDxjb25maWdhY2Nlc3NtZXRob2QsYWJvdmU+Pi4KKworVmFyaWFibGUgc3Vic3RpdHV0aW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0luIGBkYmRyaXZlcmAgYW5kIGBkYnVzZXJgIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorCislRzo6CisJZ2l0IGRpcmVjdG9yeSBuYW1lCislZzo6CisJZ2l0IGRpcmVjdG9yeSBuYW1lLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBleGNlcHQgZm9yCisJYWxwaGEtbnVtZXJpYyBvbmVzLCBgLmAsIGFuZCBgLWAgYXJlIHJlcGxhY2VkIHdpdGgKKwlgX2AgKHRoaXMgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSB0aGUgZGlyZWN0b3J5CisJbmFtZSBpbiBhIGZpbGVuYW1lIGlmIHdhbnRlZCkKKyVtOjoKKwlDVlMgbW9kdWxlL2dpdCBoZWFkIG5hbWUKKyVhOjoKKwlhY2Nlc3MgbWV0aG9kIChvbmUgb2YgImV4dCIgb3IgInBzZXJ2ZXIiKQorJXU6OgorCU5hbWUgb2YgdGhlIHVzZXIgcnVubmluZyBnaXQtY3Zzc2VydmVyLgorCUlmIG5vIG5hbWUgY2FuIGJlIGRldGVybWluZWQsIHRoZQorCW51bWVyaWMgdWlkIGlzIHVzZWQuCisKIEVjbGlwc2UgQ1ZTIENsaWVudCBOb3RlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IDExMWQ3YzYuLmEzM2QxNTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMTAsMTEgKzEwLDEyIEBACiAtLS0tLS0tLQogW3ZlcnNlXQogJ2dpdC1mb3JtYXQtcGF0Y2gnIFstbiB8IC1rXSBbLW8gPGRpcj4gfCAtLXN0ZG91dF0gWy0tdGhyZWFkXQotCSAgICAgICAgICAgWy0tYXR0YWNoWz08Ym91bmRhcnk+XSB8IC0taW5saW5lWz08Ym91bmRhcnk+XV0KLQkgICAgICAgICAgIFstcyB8IC0tc2lnbm9mZl0gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWy0tc3RhcnQtbnVtYmVyIDxuPl0KLQkJICAgWy0taW4tcmVwbHktdG89TWVzc2FnZS1JZF0gWy0tc3VmZml4PS48c2Z4Pl0KLQkJICAgWy0taWdub3JlLWlmLWluLXVwc3RyZWFtXQotCQkgICA8c2luY2U+Wy4uPHVudGlsPl0KKyAgICAgICAgICAgICAgICAgICBbLS1hdHRhY2hbPTxib3VuZGFyeT5dIHwgLS1pbmxpbmVbPTxib3VuZGFyeT5dXQorICAgICAgICAgICAgICAgICAgIFstcyB8IC0tc2lnbm9mZl0gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWy0tc3RhcnQtbnVtYmVyIDxuPl0KKyAgICAgICAgICAgICAgICAgICBbLS1pbi1yZXBseS10bz1NZXNzYWdlLUlkXSBbLS1zdWZmaXg9LjxzZng+XQorICAgICAgICAgICAgICAgICAgIFstLWlnbm9yZS1pZi1pbi11cHN0cmVhbV0KKyAgICAgICAgICAgICAgICAgICBbLS1zdWJqZWN0LXByZWZpeD1TdWJqZWN0LVByZWZpeF0KKyAgICAgICAgICAgICAgICAgICA8c2luY2U+Wy4uPHVudGlsPl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC05OCw2ICs5OSwxMiBAQAogCXBhdGNoZXMgYmVpbmcgZ2VuZXJhdGVkLCBhbmQgYW55IHBhdGNoIHRoYXQgbWF0Y2hlcyBpcwogCWlnbm9yZWQuCiAKKy0tc3ViamVjdC1wcmVmaXg9PFN1YmplY3QtUHJlZml4Pjo6CisJSW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgJ1tQQVRDSF0nIHByZWZpeCBpbiB0aGUgc3ViamVjdAorCWxpbmUsIGluc3RlYWQgdXNlICdbPFN1YmplY3QtUHJlZml4Pl0nLiBUaGlzCisJYWxsb3dzIGZvciB1c2VmdWwgbmFtaW5nIG9mIGEgcGF0Y2ggc2VyaWVzLCBhbmQgY2FuIGJlCisJY29tYmluZWQgd2l0aCB0aGUgLS1udW1iZXJlZCBvcHRpb24uCisKIC0tc3VmZml4PS48c2Z4Pjo6CiAJSW5zdGVhZCBvZiB1c2luZyBgLnBhdGNoYCBhcyB0aGUgc3VmZml4IGZvciBnZW5lcmF0ZWQKIAlmaWxlbmFtZXMsIHVzZSBzcGVjaWZlZCBzdWZmaXguICBBIGNvbW1vbiBhbHRlcm5hdGl2ZSBpcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZnNjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAppbmRleCAwNTgwMDlkLi44YzY4Y2YwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApAQCAtOSw3ICs5LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdC1mc2NrJyBbLS10YWdzXSBbLS1yb290XSBbLS11bnJlYWNoYWJsZV0gWy0tY2FjaGVdCisnZ2l0LWZzY2snIFstLXRhZ3NdIFstLXJvb3RdIFstLXVucmVhY2hhYmxlXSBbLS1jYWNoZV0gWy0tbm8tcmVmbG9nc10KIAkJIFstLWZ1bGxdIFstLXN0cmljdF0gWzxvYmplY3Q+Kl0KIAogREVTQ1JJUFRJT04KQEAgLTM4LDYgKzM4LDEyIEBACiAJQ29uc2lkZXIgYW55IG9iamVjdCByZWNvcmRlZCBpbiB0aGUgaW5kZXggYWxzbyBhcyBhIGhlYWQgbm9kZSBmb3IKIAlhbiB1bnJlYWNoYWJpbGl0eSB0cmFjZS4KIAorLS1uby1yZWZsb2dzOjoKKwlEbyBub3QgY29uc2lkZXIgY29tbWl0cyB0aGF0IGFyZSByZWZlcmVuY2VkIG9ubHkgYnkgYW4KKwllbnRyeSBpbiBhIHJlZmxvZyB0byBiZSByZWFjaGFibGUuICBUaGlzIG9wdGlvbiBpcyBtZWFudAorCW9ubHkgdG8gc2VhcmNoIGZvciBjb21taXRzIHRoYXQgdXNlZCB0byBiZSBpbiBhIHJlZiwgYnV0CisJbm93IGFyZW4ndCwgYnV0IGFyZSBzdGlsbCBpbiB0aGF0IGNvcnJlc3BvbmRpbmcgcmVmbG9nLgorCiAtLWZ1bGw6OgogCUNoZWNrIG5vdCBqdXN0IG9iamVjdHMgaW4gR0lUX09CSkVDVF9ESVJFQ1RPUlkKIAkoJEdJVF9ESVIvb2JqZWN0cyksIGJ1dCBhbHNvIHRoZSBvbmVzIGZvdW5kIGluIGFsdGVybmF0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dAppbmRleCAyMjI5ZWU4Li5iN2E0OWI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dApAQCAtNjgsNiArNjgsMTEgQEAKIAltZXNzYWdlIGNhbiBsYXRlciBiZSBzZWFyY2hlZCBmb3Igd2l0aGluIGFsbCAua2VlcCBmaWxlcyB0bwogCWxvY2F0ZSBhbnkgd2hpY2ggaGF2ZSBvdXRsaXZlZCB0aGVpciB1c2VmdWxuZXNzLgogCistLWluZGV4LXZlcnNpb249PHZlcnNpb24+Wyw8b2Zmc2V0Pl06OgorCVRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgdGVzdCBzdWl0ZSBvbmx5LiBJdCBhbGxvd3MKKwl0byBmb3JjZSB0aGUgdmVyc2lvbiBmb3IgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4LCBhbmQgdG8gZm9yY2UKKwk2NC1iaXQgaW5kZXggZW50cmllcyBvbiBvYmplY3RzIGxvY2F0ZWQgYWJvdmUgdGhlIGdpdmVuIG9mZnNldC4KKwogCiBOb3RlCiAtLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAppbmRleCBmZGM2Zjk3Li5kOWUxMWM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKQEAgLTEzOCw2ICsxMzgsMTEgQEAKIAlsZW5ndGgsIHRoaXMgb3B0aW9uIHR5cGljYWxseSBzaHJpbmtzIHRoZSByZXN1bHRpbmcKIAlwYWNrZmlsZSBieSAzLTUgcGVyLWNlbnQuCiAKKy0taW5kZXgtdmVyc2lvbj08dmVyc2lvbj5bLDxvZmZzZXQ+XTo6CisJVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlIG9ubHkuIEl0IGFsbG93cworCXRvIGZvcmNlIHRoZSB2ZXJzaW9uIGZvciB0aGUgZ2VuZXJhdGVkIHBhY2sgaW5kZXgsIGFuZCB0byBmb3JjZQorCTY0LWJpdCBpbmRleCBlbnRyaWVzIG9uIG9iamVjdHMgbG9jYXRlZCBhYm92ZSB0aGUgZ2l2ZW4gb2Zmc2V0LgorCiAKIEF1dGhvcgogLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAppbmRleCAwZmYyODkwLi4wMTljOGJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1yZWFkLXRyZWUnICg8dHJlZS1pc2g+IHwgW1stbSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gWy11IHwgLWldXSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkKKydnaXQtcmVhZC10cmVlJyAoPHRyZWUtaXNoPiB8IFtbLW0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dIFstdSB8IC1pXV0gWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSBbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pCiAKIAogREVTQ1JJUFRJT04KQEAgLTg2LDYgKzg2LDE4IEBACiAJZmlsZSAodXN1YWxseSAnLmdpdGlnbm9yZScpIGFuZCBhbGxvd3Mgc3VjaCBhbiB1bnRyYWNrZWQKIAlidXQgZXhwbGljaXRseSBpZ25vcmVkIGZpbGUgdG8gYmUgb3ZlcndyaXR0ZW4uCiAKKy0taW5kZXgtb3V0cHV0PTxmaWxlPjo6CisJSW5zdGVhZCBvZiB3cml0aW5nIHRoZSByZXN1bHRzIG91dCB0byBgJEdJVF9JTkRFWF9GSUxFYCwKKwl3cml0ZSB0aGUgcmVzdWx0aW5nIGluZGV4IGluIHRoZSBuYW1lZCBmaWxlLiAgV2hpbGUgdGhlCisJY29tbWFuZCBpcyBvcGVyYXRpbmcsIHRoZSBvcmlnaW5hbCBpbmRleCBmaWxlIGlzIGxvY2tlZAorCXdpdGggdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHVzdWFsLiAgVGhlIGZpbGUgbXVzdCBhbGxvdworCXRvIGJlIHJlbmFtZSgyKWVkIGludG8gZnJvbSBhIHRlbXBvcmFyeSBmaWxlIHRoYXQgaXMKKwljcmVhdGVkIG5leHQgdG8gdGhlIHVzdWFsIGluZGV4IGZpbGU7IHR5cGljYWxseSB0aGlzCisJbWVhbnMgaXQgbmVlZHMgdG8gYmUgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgaW5kZXgKKwlmaWxlIGl0c2VsZiwgYW5kIHlvdSBuZWVkIHdyaXRlIHBlcm1pc3Npb24gdG8gdGhlCisJZGlyZWN0b3JpZXMgdGhlIGluZGV4IGZpbGUgYW5kIGluZGV4IG91dHB1dCBmaWxlIGFyZQorCWxvY2F0ZWQgaW4uCisKIDx0cmVlLWlzaCM+OjoKIAlUaGUgaWQgb2YgdGhlIHRyZWUgb2JqZWN0KHMpIHRvIGJlIHJlYWQvbWVyZ2VkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKaW5kZXggMTFjZTM5NS4uMWIxMmI0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApAQCAtMjIsMTEgKzIyLDE0IEBACiAJICAgICBbIFwtLXRvcG8tb3JkZXIgXQogCSAgICAgWyBcLS1wYXJlbnRzIF0KIAkgICAgIFsgXC0tbGVmdC1yaWdodCBdCisJICAgICBbIFwtLWNoZXJyeS1waWNrIF0KIAkgICAgIFsgXC0tZW5jb2RpbmdbPTxlbmNvZGluZz5dIF0KIAkgICAgIFsgXC0tKGF1dGhvcnxjb21taXR0ZXJ8Z3JlcCk9PHBhdHRlcm4+IF0KKwkgICAgIFsgXC0tZGF0ZT17bG9jYWx8cmVsYXRpdmV8ZGVmYXVsdH0gXQogCSAgICAgWyBbXC0tb2JqZWN0cyB8IFwtLW9iamVjdHMtZWRnZV0gWyBcLS11bnBhY2tlZCBdIF0KIAkgICAgIFsgXC0tcHJldHR5IHwgXC0taGVhZGVyIF0KIAkgICAgIFsgXC0tYmlzZWN0IF0KKwkgICAgIFsgXC0tYmlzZWN0LXZhcnMgXQogCSAgICAgWyBcLS1tZXJnZSBdCiAJICAgICBbIFwtLXJldmVyc2UgXQogCSAgICAgWyBcLS13YWxrLXJlZmxvZ3MgXQpAQCAtODgsOSArOTEsMjAgQEAKIAogLS1yZWxhdGl2ZS1kYXRlOjoKIAotCVNob3cgZGF0ZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSwgZS5nLiAiMiBob3VycyBhZ28iLgorCVN5bm9ueW0gZm9yIGAtLWRhdGU9cmVsYXRpdmVgLgorCistLWRhdGU9e3JlbGF0aXZlLGxvY2FsLGRlZmF1bHR9OjoKKwogCU9ubHkgdGFrZXMgZWZmZWN0IGZvciBkYXRlcyBzaG93biBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXQsIHN1Y2gKIAlhcyB3aGVuIHVzaW5nICItLXByZXR0eSIuCisrCitgLS1kYXRlPXJlbGF0aXZlYCBzaG93cyBkYXRlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB0aW1lLAorZS5nLiAiMiBob3VycyBhZ28iLgorKworYC0tZGF0ZT1sb2NhbGAgc2hvd3MgdGltZXN0YW1wcyBpbiB1c2VyJ3MgbG9jYWwgdGltZXpvbmUuCisrCitgLS1kYXRlPWRlZmF1bHRgIHNob3dzIHRpbWVzdGFtcHMgaW4gdGhlIG9yaWdpbmFsIHRpbWV6b25lCisoZWl0aGVyIGNvbW1pdHRlcidzIG9yIGF1dGhvcidzKS4KIAogLS1oZWFkZXI6OgogCkBAIC0yMjMsNiArMjM3LDIwIEBACiAJSW4gYWRkaXRpb24gdG8gdGhlICc8Y29tbWl0PicgbGlzdGVkIG9uIHRoZSBjb21tYW5kCiAJbGluZSwgcmVhZCB0aGVtIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgogCistLWNoZXJyeS1waWNrOjoKKworCU9taXQgYW55IGNvbW1pdCB0aGF0IGludHJvZHVjZXMgdGhlIHNhbWUgY2hhbmdlIGFzCisJYW5vdGhlciBjb21taXQgb24gdGhlICJvdGhlciBzaWRlIiB3aGVuIHRoZSBzZXQgb2YKKwljb21taXRzIGFyZSBsaW1pdGVkIHdpdGggc3ltbWV0cmljIGRpZmZlcmVuY2UuCisrCitGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIGJyYW5jaGVzLCBgQWAgYW5kIGBCYCwgYSB1c3VhbCB3YXkKK3RvIGxpc3QgYWxsIGNvbW1pdHMgb24gb25seSBvbmUgc2lkZSBvZiB0aGVtIGlzIHdpdGgKK2AtLWxlZnQtcmlnaHRgLCBsaWtlIHRoZSBleGFtcGxlIGFib3ZlIGluIHRoZSBkZXNjcmlwdGlvbiBvZgordGhhdCBvcHRpb24uICBJdCBob3dldmVyIHNob3dzIHRoZSBjb21taXRzIHRoYXQgd2VyZSBjaGVycnktcGlja2VkCitmcm9tIHRoZSBvdGhlciBicmFuY2ggKGZvciBleGFtcGxlLCAiM3JkIG9uIGIiIG1heSBiZSBjaGVycnktcGlja2VkCitmcm9tIGJyYW5jaCBBKS4gIFdpdGggdGhpcyBvcHRpb24sIHN1Y2ggcGFpcnMgb2YgY29tbWl0cyBhcmUKK2V4Y2x1ZGVkIGZyb20gdGhlIG91dHB1dC4KKwogLWcsIC0td2Fsay1yZWZsb2dzOjoKIAogCUluc3RlYWQgb2Ygd2Fsa2luZyB0aGUgY29tbWl0IGFuY2VzdHJ5IGNoYWluLCB3YWxrCkBAIC0yODAsNiArMzA4LDE4IEBACiBnZW5lcmF0ZSBhbmQgdGVzdCBuZXcgJ21pZHBvaW50J3MgdW50aWwgdGhlIGNvbW1pdCBjaGFpbiBpcyBvZiBsZW5ndGgKIG9uZS4KIAorLS1iaXNlY3QtdmFyczo6CisKK1RoaXMgY2FsY3VsYXRlcyB0aGUgc2FtZSBhcyBgLS1iaXNlY3RgLCBidXQgb3V0cHV0cyB0ZXh0IHJlYWR5Cit0byBiZSBldmFsJ2VkIGJ5IHRoZSBzaGVsbC4gVGhlc2UgbGluZXMgd2lsbCBhc3NpZ24gdGhlIG5hbWUgb2YKK3RoZSBtaWRwb2ludCByZXZpc2lvbiB0byB0aGUgdmFyaWFibGUgYGJpc2VjdF9yZXZgLCBhbmQgdGhlCitleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgYWZ0ZXIgYGJpc2VjdF9yZXZgIGlzCit0ZXN0ZWQgdG8gYGJpc2VjdF9ucmAsIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZQordGVzdGVkIGlmIGBiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgZ29vZCB0byBgYmlzZWN0X2dvb2RgLAordGhlIGV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBpZiBgYmlzZWN0X3JldmAKK3R1cm5zIG91dCB0byBiZSBiYWQgdG8gYGJpc2VjdF9iYWRgLCBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzCit3ZSBhcmUgYmlzZWN0aW5nIHJpZ2h0IG5vdyB0byBgYmlzZWN0X2FsbGAuCisKIC0tCiAKIENvbW1pdCBPcmRlcmluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0CmluZGV4IDZmZWViYzAuLmE2NWYyNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKQEAgLTcsNyArNyw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1ybScgWy1mXSBbLW5dIFstcl0gWy0tY2FjaGVkXSBbLS1dIDxmaWxlPi4uLgorJ2dpdC1ybScgWy1mXSBbLW5dIFstcl0gWy0tY2FjaGVkXSBbLS1pZ25vcmUtdW5tYXRjaF0gWy0tcXVpZXRdIFstLV0gPGZpbGU+Li4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNDcsNiArNDcsMTMgQEAKIAl0aGUgcGF0aHMgb25seSBmcm9tIHRoZSBpbmRleCwgbGVhdmluZyB3b3JraW5nIHRyZWUKIAlmaWxlcy4KIAorXC0taWdub3JlLXVubWF0Y2g6OgorCUV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm8gZmlsZXMgbWF0Y2hlZC4KKworXC0tcXVpZXQ6OgorCWdpdC1ybSBub3JtYWxseSBvdXRwdXRzIG9uZSBsaW5lIChpbiB0aGUgZm9ybSBvZiBhbiAicm0iIGNvbW1hbmQpCisJZm9yIGVhY2ggZmlsZSByZW1vdmVkLiBUaGlzIG9wdGlvbiBzdXBwcmVzc2VzIHRoYXQgb3V0cHV0LgorCiAKIERJU0NVU1NJT04KIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCBhYTY1ODAyLi5iMDU1MGI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC00MSw3ICs0MSwxMSBAQAogCiAqIGxpbms6UmVsTm90ZXMtMS41LjEudHh0W3JlbGVhc2Ugbm90ZXMgZm9yIDEuNS4xXQogCi0qIGxpbms6djEuNS4wLjcvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuMC43XQorKiBsaW5rOnYxLjUuMS4yL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjEuMl0KKworKiBsaW5rOlJlbE5vdGVzLTEuNS4xLjIudHh0W3JlbGVhc2Ugbm90ZXMgZm9yIDEuNS4xLjJdCisKKyogbGluazpSZWxOb3Rlcy0xLjUuMS4xLnR4dFtyZWxlYXNlIG5vdGVzIGZvciAxLjUuMS4xXQogCiAqIGxpbms6UmVsTm90ZXMtMS41LjAuNy50eHRbcmVsZWFzZSBub3RlcyBmb3IgMS41LjAuN10KIApAQCAtMzQ1LDYgKzM0OSw3IEBACiAnR0lUX0NPTU1JVFRFUl9OQU1FJzo6CiAnR0lUX0NPTU1JVFRFUl9FTUFJTCc6OgogJ0dJVF9DT01NSVRURVJfREFURSc6OgorJ0VNQUlMJzo6CiAJc2VlIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdCiAKIGdpdCBEaWZmcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3MjMxMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKQEAgLTAsMCArMSwzNzkgQEAKK2dpdGF0dHJpYnV0ZXMoNSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0YXR0cmlidXRlcyAtIGRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIGdpdGF0dHJpYnV0ZXMKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQSBgZ2l0YXR0cmlidXRlc2AgZmlsZSBpcyBhIHNpbXBsZSB0ZXh0IGZpbGUgdGhhdCBnaXZlcworYGF0dHJpYnV0ZXNgIHRvIHBhdGhuYW1lcy4KKworRWFjaCBsaW5lIGluIGBnaXRhdHRyaWJ1dGVzYCBmaWxlIGlzIG9mIGZvcm06CisKKwlnbG9iCWF0dHIxIGF0dHIyIC4uLgorCitUaGF0IGlzLCBhIGdsb2IgcGF0dGVybiBmb2xsb3dlZCBieSBhbiBhdHRyaWJ1dGVzIGxpc3QsCitzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZXMuICBXaGVuIHRoZSBnbG9iIHBhdHRlcm4gbWF0Y2hlcyB0aGUKK3BhdGggaW4gcXVlc3Rpb24sIHRoZSBhdHRyaWJ1dGVzIGxpc3RlZCBvbiB0aGUgbGluZSBhcmUgZ2l2ZW4gdG8KK3RoZSBwYXRoLgorCitFYWNoIGF0dHJpYnV0ZSBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlcyBmb3IgYSBnaXZlbiBwYXRoOgorCitTZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJ0cnVlIjsKKwl0aGlzIGlzIHNwZWNpZmllZCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisJYXR0cmlidXRlIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworVW5zZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJmYWxzZSI7CisJdGhpcyBpcyBzcGVjaWZpZWQgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCisJcHJlZml4ZWQgd2l0aCBhIGRhc2ggYC1gIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworU2V0IHRvIGEgdmFsdWU6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWZpZWQgc3RyaW5nIHZhbHVlOworCXRoaXMgaXMgc3BlY2lmaWVkIGJ5IGxpc3RpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorCWZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gYD1gIGFuZCBpdHMgdmFsdWUgaW4gdGhlCisJYXR0cmlidXRlIGxpc3QuCisKK1Vuc3BlY2lmaWVkOjoKKworCU5vIGdsb2IgcGF0dGVybiBtYXRjaGVzIHRoZSBwYXRoLCBhbmQgbm90aGluZyBzYXlzIGlmCisJdGhlIHBhdGggaGFzIG9yIGRvZXMgbm90IGhhdmUgdGhlIGF0dHJpYnV0ZSwgdGhlCisJYXR0cmlidXRlIGZvciB0aGUgcGF0aCBpcyBzYWlkIHRvIGJlIFVuc3BlY2lmaWVkLgorCitXaGVuIG1vcmUgdGhhbiBvbmUgZ2xvYiBwYXR0ZXJuIG1hdGNoZXMgdGhlIHBhdGgsIGEgbGF0ZXIgbGluZQorb3ZlcnJpZGVzIGFuIGVhcmxpZXIgbGluZS4gIFRoaXMgb3ZlcnJpZGluZyBpcyBkb25lIHBlcgorYXR0cmlidXRlLgorCitXaGVuIGRlY2lkaW5nIHdoYXQgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgdG8gYSBwYXRoLCBnaXQKK2NvbnN1bHRzIGAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXNgIGZpbGUgKHdoaWNoIGhhcyB0aGUgaGlnaGVzdAorcHJlY2VkZW5jZSksIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitwYXRoIGluIHF1ZXN0aW9uLCBhbmQgaXRzIHBhcmVudCBkaXJlY3RvcmllcyAodGhlIGZ1cnRoZXIgdGhlCitkaXJlY3RvcnkgdGhhdCBjb250YWlucyBgLmdpdGF0dHJpYnV0ZXNgIGlzIGZyb20gdGhlIHBhdGggaW4KK3F1ZXN0aW9uLCB0aGUgbG93ZXIgaXRzIHByZWNlZGVuY2UpLgorCitTb21ldGltZXMgeW91IHdvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgYW4gc2V0dGluZyBvZiBhbiBhdHRyaWJ1dGUKK2ZvciBhIHBhdGggdG8gYHVuc3BlY2lmaWVkYCBzdGF0ZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgbGlzdGluZwordGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50IGAhYC4KKworCitFRkZFQ1RTCistLS0tLS0tCisKK0NlcnRhaW4gb3BlcmF0aW9ucyBieSBnaXQgY2FuIGJlIGluZmx1ZW5jZWQgYnkgYXNzaWduaW5nCitwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgdG8gYSBwYXRoLiAgQ3VycmVudGx5LCB0aHJlZSBvcGVyYXRpb25zCithcmUgYXR0cmlidXRlcy1hd2FyZS4KKworQ2hlY2tpbmctb3V0IGFuZCBjaGVja2luZy1pbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBhdHRyaWJ1dGVzIGFmZmVjdCBob3cgdGhlIGNvbnRlbnRzIHN0b3JlZCBpbiB0aGUKK3JlcG9zaXRvcnkgYXJlIGNvcGllZCB0byB0aGUgd29ya2luZyB0cmVlIGZpbGVzIHdoZW4gY29tbWFuZHMKK3N1Y2ggYXMgYGdpdCBjaGVja291dGAgYW5kIGBnaXQgbWVyZ2VgIHJ1bi4gIFRoZXkgYWxzbyBhZmZlY3QgaG93CitnaXQgc3RvcmVzIHRoZSBjb250ZW50cyB5b3UgcHJlcGFyZSBpbiB0aGUgd29ya2luZyB0cmVlIGluIHRoZQorcmVwb3NpdG9yeSB1cG9uIGBnaXQgYWRkYCBhbmQgYGdpdCBjb21taXRgLgorCitgY3JsZmAKK15eXl5eXgorCitUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgbGluZS1lbmRpbmcgY29udmVudGlvbi4KKworU2V0OjoKKworCVNldHRpbmcgdGhlIGBjcmxmYCBhdHRyaWJ1dGUgb24gYSBwYXRoIGlzIG1lYW50IHRvIG1hcmsKKwl0aGUgcGF0aCBhcyBhICJ0ZXh0IiBmaWxlLiAgJ2NvcmUuYXV0b2NybGYnIGNvbnZlcnNpb24KKwl0YWtlcyBwbGFjZSB3aXRob3V0IGd1ZXNzaW5nIHRoZSBjb250ZW50IHR5cGUgYnkKKwlpbnNwZWN0aW9uLgorCitVbnNldDo6CisKKwlVbnNldHRpbmcgdGhlIGBjcmxmYCBhdHRyaWJ1dGUgb24gYSBwYXRoIGlzIG1lYW50IHRvCisJbWFyayB0aGUgcGF0aCBhcyBhICJiaW5hcnkiIGZpbGUuICBUaGUgcGF0aCBuZXZlciBnb2VzCisJdGhyb3VnaCBsaW5lIGVuZGluZ3MgY29udmVyc2lvbiB1cG9uIGNoZWNraW4vY2hlY2tvdXQuCisKK1Vuc3BlY2lmaWVkOjoKKworCVVuc3BlY2lmaWVkIGBjcmxmYCBhdHRyaWJ1dGUgdGVsbHMgZ2l0IHRvIGFwcGx5IHRoZQorCWBjb3JlLmF1dG9jcmxmYCBjb252ZXJzaW9uIHdoZW4gdGhlIGZpbGUgY29udGVudCBsb29rcworCWxpa2UgdGV4dC4KKworU2V0IHRvIHN0cmluZyB2YWx1ZSAiaW5wdXQiOjoKKworCVRoaXMgaXMgc2ltaWxhciB0byBzZXR0aW5nIHRoZSBhdHRyaWJ1dGUgdG8gYHRydWVgLCBidXQKKwlhbHNvIGZvcmNlcyBnaXQgdG8gYWN0IGFzIGlmIGBjb3JlLmF1dG9jcmxmYCBpcyBzZXQgdG8KKwlgaW5wdXRgIGZvciB0aGUgcGF0aC4KKworQW55IG90aGVyIHZhbHVlIHNldCB0byBgY3JsZmAgYXR0cmlidXRlIGlzIGlnbm9yZWQgYW5kIGdpdCBhY3RzCithcyBpZiB0aGUgYXR0cmlidXRlIGlzIGxlZnQgdW5zcGVjaWZpZWQuCisKKworVGhlIGBjb3JlLmF1dG9jcmxmYCBjb252ZXJzaW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGNvcmUuYXV0b2NybGZgIGlzIGZhbHNlLCBubworY29udmVyc2lvbiBpcyBkb25lLgorCitXaGVuIGBjb3JlLmF1dG9jcmxmYCBpcyB0cnVlLCBpdCBtZWFucyB0aGF0IHRoZSBwbGF0Zm9ybSB3YW50cworQ1JMRiBsaW5lIGVuZGluZ3MgZm9yIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCB5b3Ugd2FudCB0bworY29udmVydCB0aGVtIGJhY2sgdG8gdGhlIG5vcm1hbCBMRiBsaW5lIGVuZGluZ3Mgd2hlbiBjaGVja2luZworaW4gdG8gdGhlIHJlcG9zaXRvcnkuCisKK1doZW4gYGNvcmUuYXV0b2NybGZgIGlzIHNldCB0byAiaW5wdXQiLCBsaW5lIGVuZGluZ3MgYXJlCitjb252ZXJ0ZWQgdG8gTEYgdXBvbiBjaGVja2luLCBidXQgdGhlcmUgaXMgbm8gY29udmVyc2lvbiBkb25lCit1cG9uIGNoZWNrb3V0LgorCisKK2BpZGVudGAKK15eXl5eXl4KKworV2hlbiB0aGUgYXR0cmlidXRlIGBpZGVudGAgaXMgc2V0IHRvIGEgcGF0aCwgZ2l0IHJlcGxhY2VzCitgJGlkZW50JGAgaW4gdGhlIGJsb2Igb2JqZWN0IHdpdGggYCRpZGVudDpgLCBmb2xsb3dlZCBieQorNDAtY2hhcmFjdGVyIGhleGFkZWNpbWFsIGJsb2Igb2JqZWN0IG5hbWUsIGZvbGxvd2VkIGJ5IGEgZG9sbGFyCitzaWduIGAkYCB1cG9uIGNoZWNrb3V0LiAgQW55IGJ5dGUgc2VxdWVuY2UgdGhhdCBiZWdpbnMgd2l0aAorYCRpZGVudDpgIGFuZCBlbmRzIHdpdGggYCRgIGluIHRoZSB3b3JrdHJlZSBmaWxlIGlzIHJlcGxhY2VkCit3aXRoIGAkaWRlbnQkYCB1cG9uIGNoZWNrLWluLgorCisKK0ludGVyYWN0aW9uIGJldHdlZW4gY2hlY2tpbi9jaGVja291dCBhdHRyaWJ1dGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJbiB0aGUgY2hlY2staW4gY29kZXBhdGgsIHRoZSB3b3JrdHJlZSBmaWxlIGlzIGZpcnN0IGNvbnZlcnRlZAord2l0aCBgaWRlbnRgIChpZiBzcGVjaWZpZWQpLCBhbmQgdGhlbiB3aXRoIGBjcmxmYCAoYWdhaW4sIGlmCitzcGVjaWZpZWQgYW5kIGFwcGxpY2FibGUpLgorCitJbiB0aGUgY2hlY2stb3V0IGNvZGVwYXRoLCB0aGUgYmxvYiBjb250ZW50IGlzIGZpcnN0IGNvbnZlcnRlZAord2l0aCBgY3JsZmAsIGFuZCB0aGVuIGBpZGVudGAuCisKKworYGZpbHRlcmAKK15eXl5eXl5eCisKK0EgYGZpbHRlcmAgYXR0cmlidXRlIGNhbiBiZSBzZXQgdG8gYSBzdHJpbmcgdmFsdWUuICBUaGlzIG5hbWVzCitmaWx0ZXIgZHJpdmVyIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KKworQSBmaWx0ZXIgZHJpdmVyIGNvbnNpc3RzIG9mIGBjbGVhbmAgY29tbWFuZCBhbmQgYHNtdWRnZWAKK2NvbW1hbmQsIGVpdGhlciBvZiB3aGljaCBjYW4gYmUgbGVmdCB1bnNwZWNpZmllZC4gIFVwb24KK2NoZWNrb3V0LCB3aGVuIGBzbXVkZ2VgIGNvbW1hbmQgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBpcyBmZWQKK3RoZSBibG9iIG9iamVjdCBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0cyBzdGFuZGFyZCBvdXRwdXQKK2lzIHVzZWQgdG8gdXBkYXRlIHRoZSB3b3JrdHJlZSBmaWxlLiAgU2ltaWxhcmx5LCBgY2xlYW5gIGNvbW1hbmQKK2lzIHVzZWQgdG8gY29udmVydCB0aGUgY29udGVudHMgb2Ygd29ya3RyZWUgZmlsZSB1cG9uIGNoZWNraW4uCisKK01pc3NpbmcgZmlsdGVyIGRyaXZlciBkZWZpbml0aW9uIGluIHRoZSBjb25maWcgaXMgbm90IGFuIGVycm9yCitidXQgbWFrZXMgdGhlIGZpbHRlciBhIG5vLW9wIHBhc3N0aHJ1LgorCitUaGUgY29udGVudCBmaWx0ZXJpbmcgaXMgZG9uZSB0byBtYXNzYWdlIHRoZSBjb250ZW50IGludG8gYQorc2hhcGUgdGhhdCBpcyBtb3JlIGNvbnZlbmllbnQgZm9yIHRoZSBwbGF0Zm9ybSwgZmlsZXN5c3RlbSwgYW5kCit0aGUgdXNlciB0byB1c2UuICBUaGUga2V5d29yZCBoZXJlIGlzICJtb3JlIGNvbnZlbmllbnQiIGFuZCBub3QKKyJ0dXJuaW5nIHNvbWV0aGluZyB1bnVzYWJsZSBpbnRvIHVzYWJsZSIuICBJbiBvdGhlciB3b3JkcywgaXQgaXMKKyJoYW5naW5nIHlvdXJzZWxmIGJlY2F1c2Ugd2UgZ2F2ZSB5b3UgYSBsb25nIHJvcGUiIGlmIHlvdXIKK3Byb2plY3QgdXNlcyBmaWx0ZXJpbmcgbWVjaGFuaXNtIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBtYWtlcworeW91ciBwcm9qZWN0IHVudXNhYmxlIHVubGVzcyB0aGUgY2hlY2tvdXQgaXMgZG9uZSB3aXRoIGEKK3NwZWNpZmljIGZpbHRlciBpbiBlZmZlY3QuCisKKworSW50ZXJhY3Rpb24gYmV0d2VlbiBjaGVja2luL2NoZWNrb3V0IGF0dHJpYnV0ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0luIHRoZSBjaGVjay1pbiBjb2RlcGF0aCwgdGhlIHdvcmt0cmVlIGZpbGUgaXMgZmlyc3QgY29udmVydGVkCit3aXRoIGBmaWx0ZXJgIGRyaXZlciAoaWYgc3BlY2lmaWVkIGFuZCBjb3JyZXNwb25kaW5nIGRyaXZlcgorZGVmaW5lZCksIHRoZW4gdGhlIHJlc3VsdCBpcyBwcm9jZXNzZWQgd2l0aCBgaWRlbnRgIChpZgorc3BlY2lmaWVkKSwgYW5kIHRoZW4gZmluYWxseSB3aXRoIGBjcmxmYCAoYWdhaW4sIGlmIHNwZWNpZmllZAorYW5kIGFwcGxpY2FibGUpLgorCitJbiB0aGUgY2hlY2stb3V0IGNvZGVwYXRoLCB0aGUgYmxvYiBjb250ZW50IGlzIGZpcnN0IGNvbnZlcnRlZAord2l0aCBgY3JsZmAsIGFuZCB0aGVuIGBpZGVudGAgYW5kIGZlZCB0byBgZmlsdGVyYC4KKworCitHZW5lcmF0aW5nIGRpZmYgdGV4dAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGF0dHJpYnV0ZSBgZGlmZmAgYWZmZWN0cyBpZiBgZ2l0IGRpZmZgIGdlbmVyYXRlcyB0ZXh0dWFsCitwYXRjaCBmb3IgdGhlIHBhdGggb3IganVzdCBzYXlzIGBCaW5hcnkgZmlsZXMgZGlmZmVyYC4KKworU2V0OjoKKworCUEgcGF0aCB0byB3aGljaCB0aGUgYGRpZmZgIGF0dHJpYnV0ZSBpcyBzZXQgaXMgdHJlYXRlZAorCWFzIHRleHQsIGV2ZW4gd2hlbiB0aGV5IGNvbnRhaW4gYnl0ZSB2YWx1ZXMgdGhhdAorCW5vcm1hbGx5IG5ldmVyIGFwcGVhciBpbiB0ZXh0IGZpbGVzLCBzdWNoIGFzIE5VTC4KKworVW5zZXQ6OgorCisJQSBwYXRoIHRvIHdoaWNoIHRoZSBgZGlmZmAgYXR0cmlidXRlIGlzIHVuc2V0IHdpbGwKKwlnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAuCisKK1Vuc3BlY2lmaWVkOjoKKworCUEgcGF0aCB0byB3aGljaCB0aGUgYGRpZmZgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZAorCWZpcnN0IGdldHMgaXRzIGNvbnRlbnRzIGluc3BlY3RlZCwgYW5kIGlmIGl0IGxvb2tzIGxpa2UKKwl0ZXh0LCBpdCBpcyB0cmVhdGVkIGFzIHRleHQuICBPdGhlcndpc2UgaXQgd291bGQKKwlnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAuCisKK1N0cmluZzo6CisKKwlEaWZmIGlzIHNob3duIHVzaW5nIHRoZSBzcGVjaWZpZWQgY3VzdG9tIGRpZmYgZHJpdmVyLgorCVRoZSBkcml2ZXIgcHJvZ3JhbSBpcyBnaXZlbiBpdHMgaW5wdXQgdXNpbmcgdGhlIHNhbWUKKwljYWxsaW5nIGNvbnZlbnRpb24gYXMgdXNlZCBmb3IgR0lUX0VYVEVSTkFMX0RJRkYKKwlwcm9ncmFtLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIGRpZmYgZHJpdmVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZGVmaW5pdGlvbiBvZiBhIGRpZmYgZHJpdmVyIGlzIGRvbmUgaW4gYGdpdGNvbmZpZ2AsIG5vdAorYGdpdGF0dHJpYnV0ZXNgIGZpbGUsIHNvIHN0cmljdGx5IHNwZWFraW5nIHRoaXMgbWFudWFsIHBhZ2UgaXMgYQord3JvbmcgcGxhY2UgdG8gdGFsayBhYm91dCBpdC4gIEhvd2V2ZXIuLi4KKworVG8gZGVmaW5lIGEgY3VzdG9tIGRpZmYgZHJpdmVyIGBqY2RpZmZgLCBhZGQgYSBzZWN0aW9uIHRvIHlvdXIKK2AkR0lUX0RJUi9jb25maWdgIGZpbGUgKG9yIGAkSE9NRS8uZ2l0Y29uZmlnYCBmaWxlKSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJqY2RpZmYiXQorCWNvbW1hbmQgPSBqLWMtZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGdpdCBuZWVkcyB0byBzaG93IHlvdSBhIGRpZmYgZm9yIHRoZSBwYXRoIHdpdGggYGRpZmZgCithdHRyaWJ1dGUgc2V0IHRvIGBqY2RpZmZgLCBpdCBjYWxscyB0aGUgY29tbWFuZCB5b3Ugc3BlY2lmaWVkCit3aXRoIHRoZSBhYm92ZSBjb25maWd1cmF0aW9uLCBpLmUuIGBqLWMtZGlmZmAsIHdpdGggNworcGFyYW1ldGVycywganVzdCBsaWtlIGBHSVRfRVhURVJOQUxfRElGRmAgcHJvZ3JhbSBpcyBjYWxsZWQuCitTZWUgZ2l0bGluazpnaXRbN10gZm9yIGRldGFpbHMuCisKKworUGVyZm9ybWluZyBhIHRocmVlLXdheSBtZXJnZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgYXR0cmlidXRlIGBtZXJnZWAgYWZmZWN0cyBob3cgdGhyZWUgdmVyc2lvbnMgb2YgYSBmaWxlIGlzCittZXJnZWQgd2hlbiBhIGZpbGUtbGV2ZWwgbWVyZ2UgaXMgbmVjZXNzYXJ5IGR1cmluZyBgZ2l0IG1lcmdlYCwKK2FuZCBvdGhlciBwcm9ncmFtcyBzdWNoIGFzIGBnaXQgcmV2ZXJ0YCBhbmQgYGdpdCBjaGVycnktcGlja2AuCisKK1NldDo6CisKKwlCdWlsdC1pbiAzLXdheSBtZXJnZSBkcml2ZXIgaXMgdXNlZCB0byBtZXJnZSB0aGUKKwljb250ZW50cyBpbiBhIHdheSBzaW1pbGFyIHRvIGBtZXJnZWAgY29tbWFuZCBvZiBgUkNTYAorCXN1aXRlLiAgVGhpcyBpcyBzdWl0YWJsZSBmb3Igb3JkaW5hcnkgdGV4dCBmaWxlcy4KKworVW5zZXQ6OgorCisJVGFrZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhcyB0aGUKKwl0ZW50YXRpdmUgbWVyZ2UgcmVzdWx0LCBhbmQgZGVjbGFyZSB0aGF0IHRoZSBtZXJnZSBoYXMKKwljb25mbGljdHMuICBUaGlzIGlzIHN1aXRhYmxlIGZvciBiaW5hcnkgZmlsZXMgdGhhdCBkb2VzCisJbm90IGhhdmUgYSB3ZWxsLWRlZmluZWQgbWVyZ2Ugc2VtYW50aWNzLgorCitVbnNwZWNpZmllZDo6CisKKwlCeSBkZWZhdWx0LCB0aGlzIHVzZXMgdGhlIHNhbWUgYnVpbHQtaW4gMy13YXkgbWVyZ2UKKwlkcml2ZXIgYXMgaXMgdGhlIGNhc2UgdGhlIGBtZXJnZWAgYXR0cmlidXRlIGlzIHNldC4KKwlIb3dldmVyLCBgbWVyZ2UuZGVmYXVsdGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gbmFtZQorCWRpZmZlcmVudCBtZXJnZSBkcml2ZXIgdG8gYmUgdXNlZCBmb3IgcGF0aHMgdG8gd2hpY2ggdGhlCisJYG1lcmdlYCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQuCisKK1N0cmluZzo6CisKKwkzLXdheSBtZXJnZSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjdXN0b20KKwltZXJnZSBkcml2ZXIuICBUaGUgYnVpbHQtaW4gMy13YXkgbWVyZ2UgZHJpdmVyIGNhbiBiZQorCWV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5IGFza2luZyBmb3IgInRleHQiIGRyaXZlcjsgdGhlCisJYnVpbHQtaW4gInRha2UgdGhlIGN1cnJlbnQgYnJhbmNoIiBkcml2ZXIgY2FuIGJlCisJcmVxdWVzdGVkIHdpdGggImJpbmFyeSIuCisKKworRGVmaW5pbmcgYSBjdXN0b20gbWVyZ2UgZHJpdmVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGRlZmluaXRpb24gb2YgYSBtZXJnZSBkcml2ZXIgaXMgZG9uZSBpbiBgZ2l0Y29uZmlnYCBub3QKK2BnaXRhdHRyaWJ1dGVzYCBmaWxlLCBzbyBzdHJpY3RseSBzcGVha2luZyB0aGlzIG1hbnVhbCBwYWdlIGlzIGEKK3dyb25nIHBsYWNlIHRvIHRhbGsgYWJvdXQgaXQuICBIb3dldmVyLi4uCisKK1RvIGRlZmluZSBhIGN1c3RvbSBtZXJnZSBkcml2ZXIgYGZpbGZyZWAsIGFkZCBhIHNlY3Rpb24gdG8geW91cgorYCRHSVRfRElSL2NvbmZpZ2AgZmlsZSAob3IgYCRIT01FLy5naXRjb25maWdgIGZpbGUpIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW21lcmdlICJmaWxmcmUiXQorCW5hbWUgPSBmZWVsLWZyZWUgbWVyZ2UgZHJpdmVyCisJZHJpdmVyID0gZmlsZnJlICVPICVBICVCCisJcmVjdXJzaXZlID0gYmluYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgbWVyZ2UuKi5uYW1lYCB2YXJpYWJsZSBnaXZlcyB0aGUgZHJpdmVyIGEgaHVtYW4tcmVhZGFibGUKK25hbWUuCisKK1RoZSBgbWVyZ2UuKi5kcml2ZXJgIHZhcmlhYmxlJ3MgdmFsdWUgaXMgdXNlZCB0byBjb25zdHJ1Y3QgYQorY29tbWFuZCB0byBydW4gdG8gbWVyZ2UgYW5jZXN0b3IncyB2ZXJzaW9uIChgJU9gKSwgY3VycmVudAordmVyc2lvbiAoYCVBYCkgYW5kIHRoZSBvdGhlciBicmFuY2hlcycgdmVyc2lvbiAoYCVCYCkuICBUaGVzZQordGhyZWUgdG9rZW5zIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBuYW1lcyBvZiB0ZW1wb3JhcnkgZmlsZXMgdGhhdAoraG9sZCB0aGUgY29udGVudHMgb2YgdGhlc2UgdmVyc2lvbnMgd2hlbiB0aGUgY29tbWFuZCBsaW5lIGlzCitidWlsdC4KKworVGhlIG1lcmdlIGRyaXZlciBpcyBleHBlY3RlZCB0byBsZWF2ZSB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSBpbgordGhlIGZpbGUgbmFtZWQgd2l0aCBgJUFgIGJ5IG92ZXJ3cml0aW5nIGl0LCBhbmQgZXhpdCB3aXRoIHplcm8KK3N0YXR1cyBpZiBpdCBtYW5hZ2VkIHRvIG1lcmdlIHRoZW0gY2xlYW5seSwgb3Igbm9uLXplcm8gaWYgdGhlcmUKK3dlcmUgY29uZmxpY3RzLgorCitUaGUgYG1lcmdlLioucmVjdXJzaXZlYCB2YXJpYWJsZSBzcGVjaWZpZXMgd2hhdCBvdGhlciBtZXJnZQorZHJpdmVyIHRvIHVzZSB3aGVuIHRoZSBtZXJnZSBkcml2ZXIgaXMgY2FsbGVkIGZvciBhbiBpbnRlcm5hbAorbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLCB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorV2hlbiBsZWZ0IHVuc3BlY2lmaWVkLCB0aGUgZHJpdmVyIGl0c2VsZiBpcyB1c2VkIGZvciBib3RoCitpbnRlcm5hbCBtZXJnZSBhbmQgdGhlIGZpbmFsIG1lcmdlLgorCisKK0VYQU1QTEUKKy0tLS0tLS0KKworSWYgeW91IGhhdmUgdGhlc2UgdGhyZWUgYGdpdGF0dHJpYnV0ZXNgIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhpbiAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMpCisKK2EqCWZvbyAhYmFyIC1iYXoKKworKGluIC5naXRhdHRyaWJ1dGVzKQorYWJjCWZvbyBiYXIgYmF6CisKKyhpbiB0Ly5naXRhdHRyaWJ1dGVzKQorYWIqCW1lcmdlPWZpbGZyZQorYWJjCS1mb28gLWJhcgorKi5jCWZyb3R6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZSBhdHRyaWJ1dGVzIGdpdmVuIHRvIHBhdGggYHQvYWJjYCBhcmUgY29tcHV0ZWQgYXMgZm9sbG93czoKKworMS4gQnkgZXhhbWluaW5nIGB0Ly5naXRhdHRyaWJ1dGVzYCAod2hpY2ggaXMgaW4gdGhlIHNhbWUKKyAgIGRpcmV0b3J5IGFzIHRoZSBwYXRoIGluIHF1ZXN0aW9uKSwgZ2l0IGZpbmRzIHRoYXQgdGhlIGZpcnN0CisgICBsaW5lIG1hdGNoZXMuICBgbWVyZ2VgIGF0dHJpYnV0ZSBpcyBzZXQuICBJdCBhbHNvIGZpbmRzIHRoYXQKKyAgIHRoZSBzZWNvbmQgbGluZSBtYXRjaGVzLCBhbmQgYXR0cmlidXRlcyBgZm9vYCBhbmQgYGJhcmAKKyAgIGFyZSB1bnNldC4KKworMi4gVGhlbiBpdCBleGFtaW5lcyBgLmdpdGF0dHJpYnV0ZXNgICh3aGljaCBpcyBpbiB0aGUgcGFyZW50CisgICBkaXJlY3RvcnkpLCBhbmQgZmluZHMgdGhhdCB0aGUgZmlyc3QgbGluZSBtYXRjaGVzLCBidXQKKyAgIGB0Ly5naXRhdHRyaWJ1dGVzYCBmaWxlIGFscmVhZHkgZGVjaWRlZCBob3cgYG1lcmdlYCwgYGZvb2AKKyAgIGFuZCBgYmFyYCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBnaXZlbiB0byB0aGlzIHBhdGgsIHNvIGl0CisgICBsZWF2ZXMgYGZvb2AgYW5kIGBiYXJgIHVuc2V0LiAgQXR0cmlidXRlIGBiYXpgIGlzIHNldC4KKworMy4gRmluYWxseSBpdCBleGFtaW5lcyBgJEdJVF9ESVIvaW5mby9naXRhdHRyaWJ1dGVzYC4gIFRoaXMgZmlsZQorICAgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgaW4tdHJlZSBzZXR0aW5ncy4gIFRoZSBmaXJzdCBsaW5lIGlzCisgICBhIG1hdGNoLCBhbmQgYGZvb2AgaXMgc2V0LCBgYmFyYCBpcyByZXZlcnRlZCB0byB1bnNwZWNpZmllZAorICAgc3RhdGUsIGFuZCBgYmF6YCBpcyB1bnNldC4KKworQXMgdGhlIHJlc3VsdCwgdGhlIGF0dHJpYnV0ZXMgYXNzaWduZW1lbnQgdG8gYHQvYWJjYCBiZWNvbWVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitmb28Jc2V0IHRvIHRydWUKK2Jhcgl1bnNwZWNpZmllZAorYmF6CXNldCB0byBmYWxzZQorbWVyZ2UJc2V0IHRvIHN0cmluZyB2YWx1ZSAiZmlsZnJlIgorZnJvdHoJdW5zcGVjaWZpZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKaW5kZXggMmZlNmMzMS4uZDdmZmMyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQKQEAgLTExNyw2ICsxMTcsNyBAQAogLSAnJUNncmVlbic6IHN3aXRjaCBjb2xvciB0byBncmVlbgogLSAnJUNibHVlJzogc3dpdGNoIGNvbG9yIHRvIGJsdWUKIC0gJyVDcmVzZXQnOiByZXNldCBjb2xvcgorLSAnJW0nOiBsZWZ0LCByaWdodCBvciBib3VuZGFyeSBtYXJrCiAtICclbic6IG5ld2xpbmUKIAogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGI2MWM1ZDQuLjJmZWExMTUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xMTAsNiArMTEwLDE0IEBACiAjIERlZmluZSBOT19QRVJMX01BS0VNQUtFUiBpZiB5b3UgY2Fubm90IHVzZSBNYWtlZmlsZXMgZ2VuZXJhdGVkIGJ5IHBlcmwncwogIyBNYWtlTWFrZXIgKGUuZy4gdXNpbmcgQWN0aXZlU3RhdGUgdW5kZXIgQ3lnd2luKS4KICMKKyMgRGVmaW5lIFdJVEhfUDRJTVBPUlQgdG8gYnVpbGQgYW5kIGluc3RhbGwgUHl0aG9uIGdpdC1wNGltcG9ydCBzY3JpcHQuCisjCisjIERlZmluZSBOT19UQ0xUSyBpZiB5b3UgZG8gbm90IHdhbnQgVGNsL1RrIEdVSS4KKyMKKyMgVGhlIFRDTFRLX1BBVEggdmFyaWFibGUgZ292ZXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIFRjay9UayBpbnRlcnByZXRlci4KKyMgSWYgbm90IHNldCBpdCBkZWZhdWx0cyB0byB0aGUgYmFyZSAnd2lzaCcuIElmIGl0IGlzIHNldCB0byB0aGUgZW1wdHkKKyMgc3RyaW5nIHRoZW4gTk9fVENMVEsgd2lsbCBiZSBmb3JjZWQgKHRoaXMgaXMgdXNlZCBieSBjb25maWd1cmUgc2NyaXB0KS4KKyMKIAogR0lULVZFUlNJT04tRklMRTogLkZPUkNFLUdJVC1WRVJTSU9OLUZJTEUKIAlAJChTSEVMTF9QQVRIKSAuL0dJVC1WRVJTSU9OLUdFTgpAQCAtMTY0LDYgKzE3Miw3IEBACiBUQVIgPSB0YXIKIElOU1RBTEwgPSBpbnN0YWxsCiBSUE1CVUlMRCA9IHJwbWJ1aWxkCitUQ0xUS19QQVRIID0gd2lzaAogCiAjIHNwYXJzZSBpcyBhcmNoaXRlY3R1cmUtbmV1dHJhbCwgd2hpY2ggbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHRlbGwgaXQKICMgZXhwbGljaXRseSB3aGF0IGFyY2hpdGVjdHVyZSB0byBjaGVjayBmb3IuIEZpeCB0aGlzIHVwIGZvciB5b3Vycy4uCkBAIC0yMDEsOSArMjEwLDIwIEBACiAJZ2l0LXN2bmltcG9ydC5wZXJsIGdpdC1jdnNleHBvcnRjb21taXQucGVybCBcCiAJZ2l0LXNlbmQtZW1haWwucGVybCBnaXQtc3ZuLnBlcmwKIAorU0NSSVBUX1BZVEhPTiA9IFwKKwlnaXQtcDRpbXBvcnQucHkKKworaWZkZWYgV0lUSF9QNElNUE9SVAorU0NSSVBUUyA9ICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgXAorCSAgJChwYXRzdWJzdCAlLnBlcmwsJSwkKFNDUklQVF9QRVJMKSkgXAorCSAgJChwYXRzdWJzdCAlLnB5LCUsJChTQ1JJUFRfUFlUSE9OKSkgXAorCSAgZ2l0LXN0YXR1cyBnaXQtaW5zdGF3ZWIKK2Vsc2UKIFNDUklQVFMgPSAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpIFwKIAkgICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpIFwKIAkgIGdpdC1zdGF0dXMgZ2l0LWluc3Rhd2ViCitlbmRpZgorCiAKICMgLi4uIGFuZCBhbGwgdGhlIHJlc3QgdGhhdCBjb3VsZCBiZSBtb3ZlZCBvdXQgb2YgYmluZGlyIHRvIGdpdGV4ZWNkaXIKIFBST0dSQU1TID0gXApAQCAtMjM2LDYgKzI1NiwxNCBAQAogIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYW5kICdpbnN0YWxsJyB3aWxsIGluc3RhbGwsIGluIGdpdGV4ZWNkaXIKIEFMTF9QUk9HUkFNUyA9ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKIAorQUxMX1BST0dSQU1TICs9IGdpdC1tZXJnZS1zdWJ0cmVlJFgKKworIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYnV0IG5vdCBpbnN0YWxsIGluIGdpdGV4ZWNkaXIKK09USEVSX1BST0dSQU1TID0gZ2l0JFggZ2l0d2ViL2dpdHdlYi5jZ2kKK2lmbmRlZiBOT19UQ0xUSworT1RIRVJfUFJPR1JBTVMgKz0gZ2l0ay13aXNoCitlbmRpZgorCiAjIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgLS0gdG8gYmUgcmVtb3ZlZCBhZnRlciAxLjAKIFBST0dSQU1TICs9IGdpdC1zc2gtcHVsbCRYIGdpdC1zc2gtcHVzaCRYCiAKQEAgLTI0Niw2ICsyNzQsOSBAQAogaWZuZGVmIFBFUkxfUEFUSAogCVBFUkxfUEFUSCA9IC91c3IvYmluL3BlcmwKIGVuZGlmCitpZm5kZWYgUFlUSE9OX1BBVEgKKwlQWVRIT05fUEFUSCA9IC91c3IvbG9jYWwvYmluL3B5dGhvbgorZW5kaWYKIAogZXhwb3J0IFBFUkxfUEFUSAogCkBAIC0yNTcsNyArMjg4LDcgQEAKIAlkaWZmLmggb2JqZWN0LmggcGFjay5oIHBrdC1saW5lLmggcXVvdGUuaCByZWZzLmggbGlzdC1vYmplY3RzLmggc2lkZWJhbmQuaCBcCiAJcnVuLWNvbW1hbmQuaCBzdHJidWYuaCB0YWcuaCB0cmVlLmggZ2l0LWNvbXBhdC11dGlsLmggcmV2aXNpb24uaCBcCiAJdHJlZS13YWxrLmggbG9nLXRyZWUuaCBkaXIuaCBwYXRoLWxpc3QuaCB1bnBhY2stdHJlZXMuaCBidWlsdGluLmggXAotCXV0ZjguaCByZWZsb2ctd2Fsay5oCisJdXRmOC5oIHJlZmxvZy13YWxrLmggcGF0Y2gtaWRzLmggYXR0ci5oIGRlY29yYXRlLmggcHJvZ3Jlc3MuaCBtYWlsbWFwLmgKIAogRElGRl9PQkpTID0gXAogCWRpZmYubyBkaWZmLWxpYi5vIGRpZmZjb3JlLWJyZWFrLm8gZGlmZmNvcmUtb3JkZXIubyBcCkBAIC0yNjksMTYgKzMwMCwxNyBAQAogCWRhdGUubyBkaWZmLWRlbHRhLm8gZW50cnkubyBleGVjX2NtZC5vIGlkZW50Lm8gXAogCWludGVycG9sYXRlLm8gXAogCWxvY2tmaWxlLm8gXAorCXBhdGNoLWlkcy5vIFwKIAlvYmplY3QubyBwYWNrLWNoZWNrLm8gcGF0Y2gtZGVsdGEubyBwYXRoLm8gcGt0LWxpbmUubyBzaWRlYmFuZC5vIFwKIAlyZWFjaGFibGUubyByZWZsb2ctd2Fsay5vIFwKIAlxdW90ZS5vIHJlYWQtY2FjaGUubyByZWZzLm8gcnVuLWNvbW1hbmQubyBkaXIubyBvYmplY3QtcmVmcy5vIFwKIAlzZXJ2ZXItaW5mby5vIHNldHVwLm8gc2hhMV9maWxlLm8gc2hhMV9uYW1lLm8gc3RyYnVmLm8gXAogCXRhZy5vIHRyZWUubyB1c2FnZS5vIGNvbmZpZy5vIGVudmlyb25tZW50Lm8gY3R5cGUubyBjb3B5Lm8gXAogCXJldmlzaW9uLm8gcGFnZXIubyB0cmVlLXdhbGsubyB4ZGlmZi1pbnRlcmZhY2UubyBcCi0Jd3JpdGVfb3JfZGllLm8gdHJhY2UubyBsaXN0LW9iamVjdHMubyBncmVwLm8gXAorCXdyaXRlX29yX2RpZS5vIHRyYWNlLm8gbGlzdC1vYmplY3RzLm8gZ3JlcC5vIG1hdGNoLXRyZWVzLm8gXAogCWFsbG9jLm8gbWVyZ2UtZmlsZS5vIHBhdGgtbGlzdC5vIGhlbHAubyB1bnBhY2stdHJlZXMubyAkKERJRkZfT0JKUykgXAogCWNvbG9yLm8gd3Qtc3RhdHVzLm8gYXJjaGl2ZS16aXAubyBhcmNoaXZlLXRhci5vIHNoYWxsb3cubyB1dGY4Lm8gXAotCWNvbnZlcnQubworCWNvbnZlcnQubyBhdHRyLm8gZGVjb3JhdGUubyBwcm9ncmVzcy5vIG1haWxtYXAubwogCiBCVUlMVElOX09CSlMgPSBcCiAJYnVpbHRpbi1hZGQubyBcCkBAIC0yODksNiArMzIxLDcgQEAKIAlidWlsdGluLWJyYW5jaC5vIFwKIAlidWlsdGluLWJ1bmRsZS5vIFwKIAlidWlsdGluLWNhdC1maWxlLm8gXAorCWJ1aWx0aW4tY2hlY2stYXR0ci5vIFwKIAlidWlsdGluLWNoZWNrb3V0LWluZGV4Lm8gXAogCWJ1aWx0aW4tY2hlY2stcmVmLWZvcm1hdC5vIFwKIAlidWlsdGluLWNvbW1pdC10cmVlLm8gXApAQCAtNjE0LDcgKzY0NywxMSBAQAogCWV4cG9ydCBOT19QRVJMX01BS0VNQUtFUgogZW5kaWYKIAotUVVJRVRfU1VCRElSMCAgPSAkKE1BS0UpIC1DICMgc3BhY2UgdG8gc2VwYXJhdGUgLUMgYW5kIHN1YmRpcgoraWZlcSAoJChUQ0xUS19QQVRIKSwpCitOT19UQ0xUSz1Ob1RoYW5rcworZW5kaWYKKworUVVJRVRfU1VCRElSMCAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKIFFVSUVUX1NVQkRJUjEgID0KIAogaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUyksdyksdykKQEAgLTYzMCw3ICs2NjcsNyBAQAogCVFVSUVUX0xJTksgICAgID0gQGVjaG8gJyAgICcgTElOSyAkQDsKIAlRVUlFVF9CVUlMVF9JTiA9IEBlY2hvICcgICAnIEJVSUxUSU4gJEA7CiAJUVVJRVRfR0VOICAgICAgPSBAZWNobyAnICAgJyBHRU4gJEA7Ci0JUVVJRVRfU1VCRElSMCAgPSBAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjAgID0gK0BzdWJkaXI9CiAJUVVJRVRfU1VCRElSMSAgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCiAJCQkgJChNQUtFKSAkKFBSSU5UX0RJUikgLUMgJCRzdWJkaXIKIAlleHBvcnQgVgpAQCAtNjUyLDYgKzY4OSw4IEBACiAKIFNIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQogUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorUFlUSE9OX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFBZVEhPTl9QQVRIKSkKK1RDTFRLX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTFRLX1BBVEgpKQogCiBMSUJTID0gJChHSVRMSUJTKSAkKEVYVExJQlMpCiAKQEAgLTY2NywxOSArNzA2LDI3IEBACiAKICMjIyBCdWlsZCBydWxlcwogCi1hbGw6OiAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYIGdpdGsgZ2l0d2ViL2dpdHdlYi5jZ2kKK2FsbDo6ICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykKIGlmbmVxICgsJFgpCiAJJChmb3JlYWNoIHAsJChwYXRzdWJzdCAlJFgsJSwkKGZpbHRlciAlJFgsJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQkWCkpLCBybSAtZiAnJHAnOykKIGVuZGlmCiAKIGFsbDo6Ci0JJChRVUlFVF9TVUJESVIwKWdpdC1ndWkgJChRVUlFVF9TVUJESVIxKSBhbGwKK2lmbmRlZiBOT19UQ0xUSworCSQoUVVJRVRfU1VCRElSMClnaXQtZ3VpICQoUVVJRVRfU1VCRElSMSkgVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScgYWxsCitlbmRpZgogCSQoUVVJRVRfU1VCRElSMClwZXJsICQoUVVJRVRfU1VCRElSMSkgUEVSTF9QQVRIPSckKFBFUkxfUEFUSF9TUSknIHByZWZpeD0nJChwcmVmaXhfU1EpJyBhbGwKIAkkKFFVSUVUX1NVQkRJUjApdGVtcGxhdGVzICQoUVVJRVRfU1VCRElSMSkKIAogc3RyaXA6ICQoUFJPR1JBTVMpIGdpdCRYCiAJJChTVFJJUCkgJChTVFJJUF9PUFRTKSAkKFBST0dSQU1TKSBnaXQkWAogCitnaXRrLXdpc2g6IGdpdGsgR0lULUdVSS1WQVJTCisJJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKKwlzZWQgLWUgJzEsM3N8XmV4ZWMgLiogIiQkMCJ8ZXhlYyAkKHN1YnN0IHwsJ1x8JywkKFRDTFRLX1BBVEhfU1EpKSAiJCQwInwnIDxnaXRrID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgLWYgJEArICRACisKIGdpdCRYOiBnaXQuYyBjb21tb24tY21kcy5oICQoQlVJTFRJTl9PQkpTKSAkKEdJVExJQlMpIEdJVC1DRkxBR1MKIAkkKFFVSUVUX0xJTkspJChDQykgLURHSVRfVkVSU0lPTj0nIiQoR0lUX1ZFUlNJT04pIicgXAogCQkkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUuYywkXikgXApAQCAtNjg3LDYgKzczNCw5IEBACiAKIGhlbHAubzogY29tbW9uLWNtZHMuaAogCitnaXQtbWVyZ2Utc3VidHJlZSRYOiBnaXQtbWVyZ2UtcmVjdXJzaXZlJFgKKwkkKFFVSUVUX0JVSUxUX0lOKXJtIC1mICRAICYmIGxuIGdpdC1tZXJnZS1yZWN1cnNpdmUkWCAkQAorCiAkKEJVSUxUX0lOUyk6IGdpdCRYCiAJJChRVUlFVF9CVUlMVF9JTilybSAtZiAkQCAmJiBsbiBnaXQkWCAkQAogCkBAIC03MDUsNiArNzU1LDE1IEBACiAKICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpOiBwZXJsL3BlcmwubWFrCiAKKyQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpIDogJSA6ICUucHkKKwlybSAtZiAkQCAkQCsKKwlzZWQgLWUgJzFzfCMhLiovcHl0aG9ufCMhJChQWVRIT05fUEFUSF9TUSl8JyBcCisJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJICAgIC1lICdzL0BATk9fQ1VSTEBALyQoTk9fQ1VSTCkvZycgXAorCSAgICAkQC5weSA+JEArCisJY2htb2QgK3ggJEArCisJbXYgJEArICRACisKIHBlcmwvcGVybC5tYWs6IEdJVC1DRkxBR1MKIAkkKFFVSUVUX1NVQkRJUjApcGVybCAkKFFVSUVUX1NVQkRJUjEpIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJyBwcmVmaXg9JyQocHJlZml4X1NRKScgJChARikKIApAQCAtODU4LDE1ICs5MTcsMzMgQEAKIAkJZWNobyAiJCRGTEFHUyIgPkdJVC1DRkxBR1M7IFwKICAgICAgICAgICAgIGZpCiAKKyMjIyBEZXRlY3QgVGNrL1RrIGludGVycHJldGVyIHBhdGggY2hhbmdlcworaWZuZGVmIE5PX1RDTFRLCitUUkFDS19WQVJTID0gJChzdWJzdCAnLCdcJycsLURUQ0xUS19QQVRIPSckKFRDTFRLX1BBVEhfU1EpJykKKworR0lULUdVSS1WQVJTOiAuRk9SQ0UtR0lULUdVSS1WQVJTCisJQFZBUlM9JyQoVFJBQ0tfVkFSUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gMT4mMiAiICAgICogbmV3IFRjbC9UayBpbnRlcnByZXRlciBsb2NhdGlvbiI7IFwKKwkJZWNobyAiJCRWQVJTIiA+JEA7IFwKKyAgICAgICAgICAgIGZpCisKKy5QSE9OWTogLkZPUkNFLUdJVC1HVUktVkFSUworZW5kaWYKKwogIyMjIFRlc3RpbmcgcnVsZXMKIAorVEVTVF9QUk9HUkFNUyA9IHRlc3QtY2htdGltZSRYIHRlc3QtZ2VucmFuZG9tJFgKKworYWxsOjogJChURVNUX1BST0dSQU1TKQorCiAjIEdOVSBtYWtlIHN1cHBvcnRzIGV4cG9ydGluZyBhbGwgdmFyaWFibGVzIGJ5ICJleHBvcnQiIHdpdGhvdXQgcGFyYW1ldGVycy4KICMgSG93ZXZlciwgdGhlIGVudmlyb25tZW50IGdldHMgcXVpdGUgYmlnLCBhbmQgc29tZSBwcm9ncmFtcyBoYXZlIHByb2JsZW1zCiAjIHdpdGggdGhhdC4KIAogZXhwb3J0IE5PX1NWTl9URVNUUwogCi10ZXN0OiBhbGwgdGVzdC1jaG10aW1lJFgKK3Rlc3Q6IGFsbAogCSQoTUFLRSkgLUMgdC8gYWxsCiAKIHRlc3QtZGF0ZSRYOiB0ZXN0LWRhdGUuYyBkYXRlLm8gY3R5cGUubwpAQCAtODgxLDkgKzk1OCwxNSBAQAogdGVzdC1zaGExJFg6IHRlc3Qtc2hhMS5vICQoR0lUTElCUykKIAkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChMSUJTKQogCit0ZXN0LW1hdGNoLXRyZWVzJFg6IHRlc3QtbWF0Y2gtdHJlZXMubyAkKEdJVExJQlMpCisJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKwogdGVzdC1jaG10aW1lJFg6IHRlc3QtY2htdGltZS5jCiAJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkPAogCit0ZXN0LWdlbnJhbmRvbSRYOiB0ZXN0LWdlbnJhbmRvbS5jCisJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkPAorCiBjaGVjay1zaGExOjogdGVzdC1zaGExJFgKIAkuL3Rlc3Qtc2hhMS5zaAogCkBAIC04OTgsMTAgKzk4MSwxMyBAQAogCSQoSU5TVEFMTCkgLWQgLW03NTUgJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknCiAJJChJTlNUQUxMKSAtZCAtbTc1NSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCiAJJChJTlNUQUxMKSAkKEFMTF9QUk9HUkFNUykgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJwotCSQoSU5TVEFMTCkgZ2l0JFggZ2l0ayAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKElOU1RBTEwpIGdpdCRYICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJwogCSQoTUFLRSkgLUMgdGVtcGxhdGVzIERFU1RESVI9JyQoREVTVERJUl9TUSknIGluc3RhbGwKIAkkKE1BS0UpIC1DIHBlcmwgcHJlZml4PSckKHByZWZpeF9TUSknIGluc3RhbGwKK2lmbmRlZiBOT19UQ0xUSworCSQoSU5TVEFMTCkgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCiAJJChNQUtFKSAtQyBnaXQtZ3VpIGluc3RhbGwKK2VuZGlmCiAJaWYgdGVzdCAneiQoYmluZGlyX1NRKScgIT0gJ3okKGdpdGV4ZWNkaXJfU1EpJzsgXAogCXRoZW4gXAogCQlsbiAtZiAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKS9naXQkWCcgXApAQCAtOTU2LDkgKzEwNDIsMTAgQEAKIAlnemlwIC1uIC05IC1mICQoaHRtbGRvY3MpLnRhcgogCToKIAlybSAtZnIgLmRvYy10bXAtZGlyCi0JbWtkaXIgLmRvYy10bXAtZGlyIC5kb2MtdG1wLWRpci9tYW4xIC5kb2MtdG1wLWRpci9tYW43CisJbWtkaXIgLXAgLmRvYy10bXAtZGlyL21hbjEgLmRvYy10bXAtZGlyL21hbjUgLmRvYy10bXAtZGlyL21hbjcKIAkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gREVTVERJUj0uLyBcCiAJCW1hbjFkaXI9Li4vLmRvYy10bXAtZGlyL21hbjEgXAorCQltYW41ZGlyPS4uLy5kb2MtdG1wLWRpci9tYW41IFwKIAkJbWFuN2Rpcj0uLi8uZG9jLXRtcC1kaXIvbWFuNyBcCiAJCWluc3RhbGwKIAljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQobWFucGFnZXMpLnRhciAuCkBAIC05NjksNyArMTA1Niw3IEBACiAKIGNsZWFuOgogCXJtIC1mICoubyBtb3ppbGxhLXNoYTEvKi5vIGFybS8qLm8gcHBjLyoubyBjb21wYXQvKi5vIHhkaWZmLyoubyBcCi0JCXRlc3QtY2htdGltZSRYICQoTElCX0ZJTEUpICQoWERJRkZfTElCKQorCQl0ZXN0LWNobXRpbWUkWCB0ZXN0LWdlbnJhbmRvbSRYICQoTElCX0ZJTEUpICQoWERJRkZfTElCKQogCXJtIC1mICQoQUxMX1BST0dSQU1TKSAkKEJVSUxUX0lOUykgZ2l0JFgKIAlybSAtZiAqLnNwZWMgKi5weWMgKi5weW8gKi8qLnB5YyAqLyoucHlvIGNvbW1vbi1jbWRzLmggVEFHUyB0YWdzCiAJcm0gLXJmIGF1dG9tNHRlLmNhY2hlCkBAIC05ODAsMTAgKzEwNjcsMTMgQEAKIAlybSAtZiBnaXR3ZWIvZ2l0d2ViLmNnaQogCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbi8gY2xlYW4KIAkkKE1BS0UpIC1DIHBlcmwgY2xlYW4KLQkkKE1BS0UpIC1DIGdpdC1ndWkgY2xlYW4KIAkkKE1BS0UpIC1DIHRlbXBsYXRlcy8gY2xlYW4KIAkkKE1BS0UpIC1DIHQvIGNsZWFuCi0Jcm0gLWYgR0lULVZFUlNJT04tRklMRSBHSVQtQ0ZMQUdTCitpZm5kZWYgTk9fVENMVEsKKwlybSAtZiBnaXRrLXdpc2gKKwkkKE1BS0UpIC1DIGdpdC1ndWkgY2xlYW4KK2VuZGlmCisJcm0gLWYgR0lULVZFUlNJT04tRklMRSBHSVQtQ0ZMQUdTIEdJVC1HVUktVkFSUwogCiAuUEhPTlk6IGFsbCBpbnN0YWxsIGNsZWFuIHN0cmlwCiAuUEhPTlk6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFIFRBR1MgdGFncyAuRk9SQ0UtR0lULUNGTEFHUwpkaWZmIC0tZ2l0IGEvUmVsTm90ZXMgYi9SZWxOb3RlcwppbmRleCBiNjMwZmFhLi5jNTQzYjFkIDEyMDAwMAotLS0gYS9SZWxOb3RlcworKysgYi9SZWxOb3RlcwpAQCAtMSArMSBAQAotRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuMS4zLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjIudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWxsb2MuYyBiL2FsbG9jLmMKaW5kZXggNDYwZGIxOS4uMjE2YzIzYSAxMDA2NDQKLS0tIGEvYWxsb2MuYworKysgYi9hbGxvYy5jCkBAIC0xOCwyNiArMTgsMzggQEAKIAogI2RlZmluZSBCTE9DS0lORyAxMDI0CiAKLSNkZWZpbmUgREVGSU5FX0FMTE9DQVRPUihuYW1lKQkJCQkJXAorI2RlZmluZSBERUZJTkVfQUxMT0NBVE9SKG5hbWUsIHR5cGUpCQkJCVwKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmFtZSMjX2FsbG9jczsJCQkJXAotc3RydWN0IG5hbWUgKmFsbG9jXyMjbmFtZSMjX25vZGUodm9pZCkJCQkJXAordm9pZCAqYWxsb2NfIyNuYW1lIyNfbm9kZSh2b2lkKQkJCQkJXAogewkJCQkJCQkJXAogCXN0YXRpYyBpbnQgbnI7CQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbmFtZSAqYmxvY2s7CQkJCVwKKwlzdGF0aWMgdHlwZSAqYmxvY2s7CQkJCQlcCisJdm9pZCAqcmV0OwkJCQkJCVwKIAkJCQkJCQkJXAogCWlmICghbnIpIHsJCQkJCQlcCiAJCW5yID0gQkxPQ0tJTkc7CQkJCQlcCi0JCWJsb2NrID0geGNhbGxvYyhCTE9DS0lORywgc2l6ZW9mKHN0cnVjdCBuYW1lKSk7CVwKKwkJYmxvY2sgPSB4bWFsbG9jKEJMT0NLSU5HICogc2l6ZW9mKHR5cGUpKTsJXAogCX0JCQkJCQkJXAogCW5yLS07CQkJCQkJCVwKIAluYW1lIyNfYWxsb2NzKys7CQkJCQlcCi0JcmV0dXJuIGJsb2NrKys7CQkJCQkJXAorCXJldCA9IGJsb2NrKys7CQkJCQkJXAorCW1lbXNldChyZXQsIDAsIHNpemVvZih0eXBlKSk7CQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCVwKIH0KIAotREVGSU5FX0FMTE9DQVRPUihibG9iKQotREVGSU5FX0FMTE9DQVRPUih0cmVlKQotREVGSU5FX0FMTE9DQVRPUihjb21taXQpCi1ERUZJTkVfQUxMT0NBVE9SKHRhZykKK3VuaW9uIGFueV9vYmplY3QgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXN0cnVjdCBibG9iIGJsb2I7CisJc3RydWN0IHRyZWUgdHJlZTsKKwlzdHJ1Y3QgY29tbWl0IGNvbW1pdDsKKwlzdHJ1Y3QgdGFnIHRhZzsKK307CisKK0RFRklORV9BTExPQ0FUT1IoYmxvYiwgc3RydWN0IGJsb2IpCitERUZJTkVfQUxMT0NBVE9SKHRyZWUsIHN0cnVjdCB0cmVlKQorREVGSU5FX0FMTE9DQVRPUihjb21taXQsIHN0cnVjdCBjb21taXQpCitERUZJTkVfQUxMT0NBVE9SKHRhZywgc3RydWN0IHRhZykKK0RFRklORV9BTExPQ0FUT1Iob2JqZWN0LCB1bmlvbiBhbnlfb2JqZWN0KQogCiAjaWZkZWYgTk9fQzk5X0ZPUk1BVAogI2RlZmluZSBTWl9GTVQgIiV1IgpkaWZmIC0tZ2l0IGEvYXR0ci5jIGIvYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNzEyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hdHRyLmMKQEAgLTAsMCArMSw1NjUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworY29uc3QgY2hhciBnaXRfYXR0cl9fdHJ1ZVtdID0gIihidWlsdGluKXRydWUiOworY29uc3QgY2hhciBnaXRfYXR0cl9fZmFsc2VbXSA9ICJcMChidWlsdGluKWZhbHNlIjsKK3N0YXRpYyBjb25zdCBjaGFyIGdpdF9hdHRyX191bmtub3duW10gPSAiKGJ1aWx0aW4pdW5rbm93biI7CisjZGVmaW5lIEFUVFJfX1RSVUUgZ2l0X2F0dHJfX3RydWUKKyNkZWZpbmUgQVRUUl9fRkFMU0UgZ2l0X2F0dHJfX2ZhbHNlCisjZGVmaW5lIEFUVFJfX1VOU0VUIE5VTEwKKyNkZWZpbmUgQVRUUl9fVU5LTk9XTiBnaXRfYXR0cl9fdW5rbm93bgorCisvKgorICogVGhlIGJhc2ljIGRlc2lnbiBkZWNpc2lvbiBoZXJlIGlzIHRoYXQgd2UgYXJlIG5vdCBnb2luZyB0byBoYXZlCisgKiBpbnNhbmVseSBsYXJnZSBudW1iZXIgb2YgYXR0cmlidXRlcy4KKyAqCisgKiBUaGlzIGlzIGEgcmFuZG9tbHkgY2hvc2VuIHByaW1lLgorICovCisjZGVmaW5lIEhBU0hTSVpFIDI1NworCisjaWZuZGVmIERFQlVHX0FUVFIKKyNkZWZpbmUgREVCVUdfQVRUUiAwCisjZW5kaWYKKworc3RydWN0IGdpdF9hdHRyIHsKKwlzdHJ1Y3QgZ2l0X2F0dHIgKm5leHQ7CisJdW5zaWduZWQgaDsKKwlpbnQgYXR0cl9ucjsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9Oworc3RhdGljIGludCBhdHRyX25yOworCitzdGF0aWMgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVja19hbGxfYXR0cjsKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKihnaXRfYXR0cl9oYXNoW0hBU0hTSVpFXSk7CisKK3N0YXRpYyB1bnNpZ25lZCBoYXNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJdW5zaWduZWQgdmFsID0gMDsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwl3aGlsZSAobmFtZWxlbi0tKSB7CisJCWMgPSAqbmFtZSsrOworCQl2YWwgPSAoKHZhbCA8PCA3KSB8ICh2YWwgPj4gMjIpKSBeIGM7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgaW52YWxpZF9hdHRyX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJLyoKKwkgKiBBdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAnLScgYW5kIGZyb20KKwkgKiBbLUEtWmEtejAtOV8uXS4gIFdlJ2Qgc3BlY2lmaWNhbGx5IGV4Y2x1ZGUgJz0nIGZvciBub3csCisJICogYXMgd2UgbWlnaHQgbGF0ZXIgd2FudCB0byBhbGxvdyBub24tYmluYXJ5IHZhbHVlIGZvcgorCSAqIGF0dHJpYnV0ZXMsIGUuZy4gIiouc3ZnCW1lcmdlPXNwZWNpYWwtbWVyZ2UtcHJvZ3JhbS1mb3Itc3ZnIgorCSAqLworCWlmICgqbmFtZSA9PSAnLScpCisJCXJldHVybiAtMTsKKwl3aGlsZSAobmFtZWxlbi0tKSB7CisJCWNoYXIgY2ggPSAqbmFtZSsrOworCQlpZiAoISAoY2ggPT0gJy0nIHx8IGNoID09ICcuJyB8fCBjaCA9PSAnXycgfHwKKwkJICAgICAgICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSB8fAorCQkgICAgICAgKCdhJyA8PSBjaCAmJiBjaCA8PSAneicpIHx8CisJCSAgICAgICAoJ0EnIDw9IGNoICYmIGNoIDw9ICdaJykpICkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBnaXRfYXR0ciAqZ2l0X2F0dHIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBodmFsID0gaGFzaF9uYW1lKG5hbWUsIGxlbik7CisJdW5zaWduZWQgcG9zID0gaHZhbCAlIEhBU0hTSVpFOworCXN0cnVjdCBnaXRfYXR0ciAqYTsKKworCWZvciAoYSA9IGdpdF9hdHRyX2hhc2hbcG9zXTsgYTsgYSA9IGEtPm5leHQpIHsKKwkJaWYgKGEtPmggPT0gaHZhbCAmJgorCQkgICAgIW1lbWNtcChhLT5uYW1lLCBuYW1lLCBsZW4pICYmICFhLT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gYTsKKwl9CisKKwlpZiAoaW52YWxpZF9hdHRyX25hbWUobmFtZSwgbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhID0geG1hbGxvYyhzaXplb2YoKmEpICsgbGVuICsgMSk7CisJbWVtY3B5KGEtPm5hbWUsIG5hbWUsIGxlbik7CisJYS0+bmFtZVtsZW5dID0gMDsKKwlhLT5oID0gaHZhbDsKKwlhLT5uZXh0ID0gZ2l0X2F0dHJfaGFzaFtwb3NdOworCWEtPmF0dHJfbnIgPSBhdHRyX25yKys7CisJZ2l0X2F0dHJfaGFzaFtwb3NdID0gYTsKKworCWNoZWNrX2FsbF9hdHRyID0geHJlYWxsb2MoY2hlY2tfYWxsX2F0dHIsCisJCQkJICBzaXplb2YoKmNoZWNrX2FsbF9hdHRyKSAqIGF0dHJfbnIpOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLmF0dHIgPSBhOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKwlyZXR1cm4gYTsKK30KKworLyoKKyAqIC5naXRhdHRyaWJ1dGVzIGZpbGUgaXMgb25lIGxpbmUgcGVyIHJlY29yZCwgZWFjaCBvZiB3aGljaCBpcworICoKKyAqICgxKSBnbG9iIHBhdHRlcm4uCisgKiAoMikgd2hpdGVzcGFjZQorICogKDMpIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLCBlYWNoIG9mIHdoaWNoCisgKiAgICAgY291bGQgYmUgcHJlZml4ZWQgd2l0aCAnLScgdG8gbWVhbiAic2V0IHRvIGZhbHNlIiwgJyEnIHRvIG1lYW4KKyAqICAgICAidW5zZXQiLgorICovCisKKy8qIFdoYXQgZG9lcyBhIG1hdGNoZWQgcGF0dGVybiBkZWNpZGU/ICovCitzdHJ1Y3QgYXR0cl9zdGF0ZSB7CisJc3RydWN0IGdpdF9hdHRyICphdHRyOworCWNvbnN0IGNoYXIgKnNldHRvOworfTsKKworc3RydWN0IG1hdGNoX2F0dHIgeworCXVuaW9uIHsKKwkJY2hhciAqcGF0dGVybjsKKwkJc3RydWN0IGdpdF9hdHRyICphdHRyOworCX0gdTsKKwljaGFyIGlzX21hY3JvOworCXVuc2lnbmVkIG51bV9hdHRyOworCXN0cnVjdCBhdHRyX3N0YXRlIHN0YXRlW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgYmxhbmtbXSA9ICIgXHRcclxuIjsKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2F0dHIoY29uc3QgY2hhciAqc3JjLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICpjcCwKKwkJCSAgICAgIGludCAqbnVtX2F0dHIsIHN0cnVjdCBtYXRjaF9hdHRyICpyZXMpCit7CisJY29uc3QgY2hhciAqZXAsICplcXVhbHM7CisJaW50IGxlbjsKKworCWVwID0gY3AgKyBzdHJjc3BuKGNwLCBibGFuayk7CisJZXF1YWxzID0gc3RyY2hyKGNwLCAnPScpOworCWlmIChlcXVhbHMgJiYgZXAgPCBlcXVhbHMpCisJCWVxdWFscyA9IE5VTEw7CisJaWYgKGVxdWFscykKKwkJbGVuID0gZXF1YWxzIC0gY3A7CisJZWxzZQorCQlsZW4gPSBlcCAtIGNwOworCWlmICghcmVzKSB7CisJCWlmICgqY3AgPT0gJy0nIHx8ICpjcCA9PSAnIScpIHsKKwkJCWNwKys7CisJCQlsZW4tLTsKKwkJfQorCQlpZiAoaW52YWxpZF9hdHRyX25hbWUoY3AsIGxlbikpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIlLipzIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lOiAlczolZFxuIiwKKwkJCQlsZW4sIGNwLCBzcmMsIGxpbmVubyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBhdHRyX3N0YXRlICplOworCisJCWUgPSAmKHJlcy0+c3RhdGVbKm51bV9hdHRyXSk7CisJCWlmICgqY3AgPT0gJy0nIHx8ICpjcCA9PSAnIScpIHsKKwkJCWUtPnNldHRvID0gKCpjcCA9PSAnLScpID8gQVRUUl9fRkFMU0UgOiBBVFRSX19VTlNFVDsKKwkJCWNwKys7CisJCQlsZW4tLTsKKwkJfQorCQllbHNlIGlmICghZXF1YWxzKQorCQkJZS0+c2V0dG8gPSBBVFRSX19UUlVFOworCQllbHNlIHsKKwkJCWNoYXIgKnZhbHVlOworCQkJaW50IHZhbGxlbiA9IGVwIC0gZXF1YWxzOworCQkJdmFsdWUgPSB4bWFsbG9jKHZhbGxlbik7CisJCQltZW1jcHkodmFsdWUsIGVxdWFscysxLCB2YWxsZW4tMSk7CisJCQl2YWx1ZVt2YWxsZW4tMV0gPSAwOworCQkJZS0+c2V0dG8gPSB2YWx1ZTsKKwkJfQorCQllLT5hdHRyID0gZ2l0X2F0dHIoY3AsIGxlbik7CisJfQorCSgqbnVtX2F0dHIpKys7CisJcmV0dXJuIGVwICsgc3Ryc3BuKGVwLCBibGFuayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWF0Y2hfYXR0ciAqcGFyc2VfYXR0cl9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJICBpbnQgbGluZW5vLCBpbnQgbWFjcm9fb2spCit7CisJaW50IG5hbWVsZW47CisJaW50IG51bV9hdHRyOworCWNvbnN0IGNoYXIgKmNwLCAqbmFtZTsKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqcmVzID0gTlVMTDsKKwlpbnQgcGFzczsKKwlpbnQgaXNfbWFjcm87CisKKwljcCA9IGxpbmUgKyBzdHJzcG4obGluZSwgYmxhbmspOworCWlmICghKmNwIHx8ICpjcCA9PSAnIycpCisJCXJldHVybiBOVUxMOworCW5hbWUgPSBjcDsKKwluYW1lbGVuID0gc3RyY3NwbihuYW1lLCBibGFuayk7CisJaWYgKHN0cmxlbihBVFRSSUJVVEVfTUFDUk9fUFJFRklYKSA8IG5hbWVsZW4gJiYKKwkgICAgIXByZWZpeGNtcChuYW1lLCBBVFRSSUJVVEVfTUFDUk9fUFJFRklYKSkgeworCQlpZiAoIW1hY3JvX29rKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIG5vdCBhbGxvd2VkOiAlczolZFxuIiwKKwkJCQluYW1lLCBzcmMsIGxpbmVubyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpc19tYWNybyA9IDE7CisJCW5hbWUgKz0gc3RybGVuKEFUVFJJQlVURV9NQUNST19QUkVGSVgpOworCQluYW1lICs9IHN0cnNwbihuYW1lLCBibGFuayk7CisJCW5hbWVsZW4gPSBzdHJjc3BuKG5hbWUsIGJsYW5rKTsKKwkJaWYgKGludmFsaWRfYXR0cl9uYW1lKG5hbWUsIG5hbWVsZW4pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiJS4qcyBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZTogJXM6JWRcbiIsCisJCQkJbmFtZWxlbiwgbmFtZSwgc3JjLCBsaW5lbm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJZWxzZQorCQlpc19tYWNybyA9IDA7CisKKwlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisJCS8qIHBhc3MgMCBjb3VudHMgYW5kIGFsbG9jYXRlcywgcGFzcyAxIGZpbGxzICovCisJCW51bV9hdHRyID0gMDsKKwkJY3AgPSBuYW1lICsgbmFtZWxlbjsKKwkJY3AgPSBjcCArIHN0cnNwbihjcCwgYmxhbmspOworCQl3aGlsZSAoKmNwKQorCQkJY3AgPSBwYXJzZV9hdHRyKHNyYywgbGluZW5vLCBjcCwgJm51bV9hdHRyLCByZXMpOworCQlpZiAocGFzcykKKwkJCWJyZWFrOworCQlyZXMgPSB4Y2FsbG9jKDEsCisJCQkgICAgICBzaXplb2YoKnJlcykgKworCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdHRyX3N0YXRlKSAqIG51bV9hdHRyICsKKwkJCSAgICAgIChpc19tYWNybyA/IDAgOiBuYW1lbGVuICsgMSkpOworCQlpZiAoaXNfbWFjcm8pCisJCQlyZXMtPnUuYXR0ciA9IGdpdF9hdHRyKG5hbWUsIG5hbWVsZW4pOworCQllbHNlIHsKKwkJCXJlcy0+dS5wYXR0ZXJuID0gKGNoYXIqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOworCQkJbWVtY3B5KHJlcy0+dS5wYXR0ZXJuLCBuYW1lLCBuYW1lbGVuKTsKKwkJCXJlcy0+dS5wYXR0ZXJuW25hbWVsZW5dID0gMDsKKwkJfQorCQlyZXMtPmlzX21hY3JvID0gaXNfbWFjcm87CisJCXJlcy0+bnVtX2F0dHIgPSBudW1fYXR0cjsKKwl9CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIExpa2UgaW5mby9leGNsdWRlIGFuZCAuZ2l0aWdub3JlLCB0aGUgYXR0cmlidXRlIGluZm9ybWF0aW9uIGNhbgorICogY29tZSBmcm9tIG1hbnkgcGxhY2VzLgorICoKKyAqICgxKSAuZ2l0YXR0cmlidXRlIGZpbGUgb2YgdGhlIHNhbWUgZGlyZWN0b3J5OworICogKDIpIC5naXRhdHRyaWJ1dGUgZmlsZSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBpZiAoMSkgZG9lcyBub3QgaGF2ZQorICogICAgICBhbnkgbWF0Y2g7IHRoaXMgZ29lcyByZWN1cnNpdmVseSB1cHdhcmRzLCBqdXN0IGxpa2UgLmdpdGlnbm9yZS4KKyAqICgzKSAkR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIHdoaWNoIG92ZXJyaWRlcyBib3RoIG9mIHRoZSBhYm92ZS4KKyAqCisgKiBJbiB0aGUgc2FtZSBmaWxlLCBsYXRlciBlbnRyaWVzIG92ZXJyaWRlIHRoZSBlYXJsaWVyIG1hdGNoLCBzbyBpbiB0aGUKKyAqIGdsb2JhbCBsaXN0LCB3ZSB3b3VsZCBoYXZlIGVudHJpZXMgZnJvbSBpbmZvL2F0dHJpYnV0ZXMgdGhlIGVhcmxpZXN0CisgKiAocmVhZGluZyB0aGUgZmlsZSBmcm9tIHRvcCB0byBib3R0b20pLCAuZ2l0YXR0cmlidXRlIG9mIHRoZSByb290CisgKiBkaXJlY3RvcnkgKGFnYWluLCByZWFkaW5nIHRoZSBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbSkgZG93biB0byB0aGUKKyAqIGN1cnJlbnQgZGlyZWN0b3J5LCBhbmQgdGhlbiBzY2FuIHRoZSBsaXN0IGJhY2t3YXJkcyB0byBmaW5kIHRoZSBmaXJzdCBtYXRjaC4KKyAqIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB3aGF0IGV4Y2x1ZGVkKCkgZG9lcyBpbiBkaXIuYyB0byBkZWFsIHdpdGgKKyAqIC5naXRpZ25vcmUKKyAqLworCitzdGF0aWMgc3RydWN0IGF0dHJfc3RhY2sgeworCXN0cnVjdCBhdHRyX3N0YWNrICpwcmV2OworCWNoYXIgKm9yaWdpbjsKKwl1bnNpZ25lZCBudW1fbWF0Y2hlczsKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqKmF0dHJzOworfSAqYXR0cl9zdGFjazsKKworc3RhdGljIHZvaWQgZnJlZV9hdHRyX2VsZW0oc3RydWN0IGF0dHJfc3RhY2sgKmUpCit7CisJaW50IGk7CisJZnJlZShlLT5vcmlnaW4pOworCWZvciAoaSA9IDA7IGkgPCBlLT5udW1fbWF0Y2hlczsgaSsrKSB7CisJCXN0cnVjdCBtYXRjaF9hdHRyICphID0gZS0+YXR0cnNbaV07CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgYS0+bnVtX2F0dHI7IGorKykgeworCQkJY29uc3QgY2hhciAqc2V0dG8gPSBhLT5zdGF0ZVtqXS5zZXR0bzsKKwkJCWlmIChzZXR0byA9PSBBVFRSX19UUlVFIHx8CisJCQkgICAgc2V0dG8gPT0gQVRUUl9fRkFMU0UgfHwKKwkJCSAgICBzZXR0byA9PSBBVFRSX19VTlNFVCB8fAorCQkJICAgIHNldHRvID09IEFUVFJfX1VOS05PV04pCisJCQkJOworCQkJZWxzZQorCQkJCWZyZWUoKGNoYXIqKSBzZXR0byk7CisJCX0KKwkJZnJlZShhKTsKKwl9CisJZnJlZShlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmJ1aWx0aW5fYXR0cltdID0geworCSJbYXR0cl1iaW5hcnkgLWRpZmYgLWNybGYiLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJfc3RhY2sgKnJlYWRfYXR0cl9mcm9tX2FycmF5KGNvbnN0IGNoYXIgKipsaXN0KQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY29uc3QgY2hhciAqbGluZTsKKwlpbnQgbGluZW5vID0gMDsKKworCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwl3aGlsZSAoKGxpbmUgPSAqKGxpc3QrKykpICE9IE5VTEwpIHsKKwkJc3RydWN0IG1hdGNoX2F0dHIgKmE7CisKKwkJYSA9IHBhcnNlX2F0dHJfbGluZShsaW5lLCAiW2J1aWx0aW5dIiwgKytsaW5lbm8sIDEpOworCQlpZiAoIWEpCisJCQljb250aW51ZTsKKwkJcmVzLT5hdHRycyA9IHhyZWFsbG9jKHJlcy0+YXR0cnMsCisJCQlzaXplb2Yoc3RydWN0IG1hdGNoX2F0dHIgKikgKiAocmVzLT5udW1fbWF0Y2hlcyArIDEpKTsKKwkJcmVzLT5hdHRyc1tyZXMtPm51bV9tYXRjaGVzKytdID0gYTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHJfZnJvbV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtYWNyb19vaykKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzOworCWNoYXIgYnVmWzIwNDhdOworCWludCBsaW5lbm8gPSAwOworCisJcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCWZwID0gZm9wZW4ocGF0aCwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gcmVzOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYTsKKworCQlhID0gcGFyc2VfYXR0cl9saW5lKGJ1ZiwgcGF0aCwgKytsaW5lbm8sIG1hY3JvX29rKTsKKwkJaWYgKCFhKQorCQkJY29udGludWU7CisJCXJlcy0+YXR0cnMgPSB4cmVhbGxvYyhyZXMtPmF0dHJzLAorCQkJc2l6ZW9mKHN0cnVjdCBtYXRjaF9hdHRyICopICogKHJlcy0+bnVtX21hdGNoZXMgKyAxKSk7CisJCXJlcy0+YXR0cnNbcmVzLT5udW1fbWF0Y2hlcysrXSA9IGE7CisJfQorCWZjbG9zZShmcCk7CisJcmV0dXJuIHJlczsKK30KKworI2lmIERFQlVHX0FUVFIKK3N0YXRpYyB2b2lkIGRlYnVnX2luZm8oY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IGF0dHJfc3RhY2sgKmVsZW0pCit7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHdoYXQsIGVsZW0tPm9yaWdpbiA/IGVsZW0tPm9yaWdpbiA6ICIoKSIpOworfQorc3RhdGljIHZvaWQgZGVidWdfc2V0KGNvbnN0IGNoYXIgKndoYXQsIGNvbnN0IGNoYXIgKm1hdGNoLCBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIsIHZvaWQgKnYpCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSB2OworCisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCXZhbHVlID0gInNldCI7CisJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCXZhbHVlID0gInVuc2V0IjsKKwllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJdmFsdWUgPSAidW5zcGVjaWZpZWQiOworCisJZnByaW50ZihzdGRlcnIsICIlczogJXMgPT4gJXMgKCVzKVxuIiwKKwkJd2hhdCwgYXR0ci0+bmFtZSwgKGNoYXIgKikgdmFsdWUsIG1hdGNoKTsKK30KKyNkZWZpbmUgZGVidWdfcHVzaChhKSBkZWJ1Z19pbmZvKCJwdXNoIiwgKGEpKQorI2RlZmluZSBkZWJ1Z19wb3AoYSkgZGVidWdfaW5mbygicG9wIiwgKGEpKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdfcHVzaChhKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfcG9wKGEpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19zZXQoYSxiLGMsZCkgZG8geyA7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgYm9vdHN0cmFwX2F0dHJfc3RhY2sodm9pZCkKK3sKKwlpZiAoIWF0dHJfc3RhY2spIHsKKwkJc3RydWN0IGF0dHJfc3RhY2sgKmVsZW07CisKKwkJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2FycmF5KGJ1aWx0aW5fYXR0cik7CisJCWVsZW0tPm9yaWdpbiA9IE5VTEw7CisJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOworCQlhdHRyX3N0YWNrID0gZWxlbTsKKworCQllbGVtID0gcmVhZF9hdHRyX2Zyb21fZmlsZShHSVRBVFRSSUJVVEVTX0ZJTEUsIDEpOworCQllbGVtLT5vcmlnaW4gPSBzdHJkdXAoIiIpOworCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwkJYXR0cl9zdGFjayA9IGVsZW07CisJCWRlYnVnX3B1c2goZWxlbSk7CisKKwkJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2l0X3BhdGgoSU5GT0FUVFJJQlVURVNfRklMRSksIDEpOworCQllbGVtLT5vcmlnaW4gPSBOVUxMOworCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwkJYXR0cl9zdGFjayA9IGVsZW07CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2F0dHJfc3RhY2soY29uc3QgY2hhciAqcGF0aCwgaW50IGRpcmxlbikKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqZWxlbSwgKmluZm87CisJaW50IGxlbjsKKwljaGFyIHBhdGhidWZbUEFUSF9NQVhdOworCisJLyoKKwkgKiBBdCB0aGUgYm90dG9tIG9mIHRoZSBhdHRyaWJ1dGUgc3RhY2sgaXMgdGhlIGJ1aWx0LWluCisJICogc2V0IG9mIGF0dHJpYnV0ZSBkZWZpbml0aW9ucy4gIFRoZW4sIGNvbnRlbnRzIGZyb20KKwkgKiAuZ2l0YXR0cmlidXRlIGZpbGVzIGZyb20gZGlyZWN0b3JpZXMgY2xvc2VyIHRvIHRoZQorCSAqIHJvb3QgdG8gdGhlIG9uZXMgaW4gZGVlcGVyIGRpcmVjdG9yaWVzIGFyZSBwdXNoZWQKKwkgKiB0byB0aGUgc3RhY2suICBGaW5hbGx5LCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHN0YWNrCisJICogd2UgYWx3YXlzIGtlZXAgdGhlIGNvbnRlbnRzIG9mICRHSVRfRElSL2luZm8vYXR0cmlidXRlcy4KKwkgKgorCSAqIFdoZW4gY2hlY2tpbmcsIHdlIHVzZSBlbnRyaWVzIGZyb20gbmVhciB0aGUgdG9wIG9mIHRoZQorCSAqIHN0YWNrLCBwcmVmZXJyaW5nICRHSVRfRElSL2luZm8vYXR0cmlidXRlcywgdGhlbgorCSAqIC5naXRhdHRyaWJ1dGVzIGluIGRlZXBlciBkaXJlY3RvcmllcyB0byBzaGFsbG93ZXIgb25lcywKKwkgKiBhbmQgZmluYWxseSB1c2UgdGhlIGJ1aWx0LWluIHNldCBhcyB0aGUgZGVmYXVsdC4KKwkgKi8KKwlpZiAoIWF0dHJfc3RhY2spCisJCWJvb3RzdHJhcF9hdHRyX3N0YWNrKCk7CisKKwkvKgorCSAqIFBvcCB0aGUgImluZm8iIG9uZSB0aGF0IGlzIGFsd2F5cyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKwkgKi8KKwlpbmZvID0gYXR0cl9zdGFjazsKKwlhdHRyX3N0YWNrID0gaW5mby0+cHJldjsKKworCS8qCisJICogUG9wIHRoZSBvbmVzIGZyb20gZGlyZWN0b3JpZXMgdGhhdCBhcmUgbm90IHRoZSBwcmVmaXggb2YKKwkgKiB0aGUgcGF0aCB3ZSBhcmUgY2hlY2tpbmcuCisJICovCisJd2hpbGUgKGF0dHJfc3RhY2sgJiYgYXR0cl9zdGFjay0+b3JpZ2luKSB7CisJCWludCBuYW1lbGVuID0gc3RybGVuKGF0dHJfc3RhY2stPm9yaWdpbik7CisKKwkJZWxlbSA9IGF0dHJfc3RhY2s7CisJCWlmIChuYW1lbGVuIDw9IGRpcmxlbiAmJgorCQkgICAgIXN0cm5jbXAoZWxlbS0+b3JpZ2luLCBwYXRoLCBuYW1lbGVuKSkKKwkJCWJyZWFrOworCisJCWRlYnVnX3BvcChlbGVtKTsKKwkJYXR0cl9zdGFjayA9IGVsZW0tPnByZXY7CisJCWZyZWVfYXR0cl9lbGVtKGVsZW0pOworCX0KKworCS8qCisJICogUmVhZCBmcm9tIHBhcmVudCBkaXJlY3RvcmllcyBhbmQgcHVzaCB0aGVtIGRvd24KKwkgKi8KKwl3aGlsZSAoMSkgeworCQljaGFyICpjcDsKKworCQlsZW4gPSBzdHJsZW4oYXR0cl9zdGFjay0+b3JpZ2luKTsKKwkJaWYgKGRpcmxlbiA8PSBsZW4pCisJCQlicmVhazsKKwkJbWVtY3B5KHBhdGhidWYsIHBhdGgsIGRpcmxlbik7CisJCW1lbWNweShwYXRoYnVmICsgZGlybGVuLCAiLyIsIDIpOworCQljcCA9IHN0cmNocihwYXRoYnVmICsgbGVuICsgMSwgJy8nKTsKKwkJc3RyY3B5KGNwICsgMSwgR0lUQVRUUklCVVRFU19GSUxFKTsKKwkJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUocGF0aGJ1ZiwgMCk7CisJCSpjcCA9ICdcMCc7CisJCWVsZW0tPm9yaWdpbiA9IHN0cmR1cChwYXRoYnVmKTsKKwkJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJCWF0dHJfc3RhY2sgPSBlbGVtOworCQlkZWJ1Z19wdXNoKGVsZW0pOworCX0KKworCS8qCisJICogRmluYWxseSBwdXNoIHRoZSAiaW5mbyIgb25lIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorCSAqLworCWluZm8tPnByZXYgPSBhdHRyX3N0YWNrOworCWF0dHJfc3RhY2sgPSBpbmZvOworfQorCitzdGF0aWMgaW50IHBhdGhfbWF0Y2hlcyhjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCQljb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJaWYgKCFzdHJjaHIocGF0dGVybiwgJy8nKSkgeworCQkvKiBtYXRjaCBiYXNlbmFtZSAqLworCQljb25zdCBjaGFyICpiYXNlbmFtZSA9IHN0cnJjaHIocGF0aG5hbWUsICcvJyk7CisJCWJhc2VuYW1lID0gYmFzZW5hbWUgPyBiYXNlbmFtZSArIDEgOiBwYXRobmFtZTsKKwkJcmV0dXJuIChmbm1hdGNoKHBhdHRlcm4sIGJhc2VuYW1lLCAwKSA9PSAwKTsKKwl9CisJLyoKKwkgKiBtYXRjaCB3aXRoIEZOTV9QQVRITkFNRTsgdGhlIHBhdHRlcm4gaGFzIGJhc2UgaW1wbGljaXRseQorCSAqIGluIGZyb250IG9mIGl0LgorCSAqLworCWlmICgqcGF0dGVybiA9PSAnLycpCisJCXBhdHRlcm4rKzsKKwlpZiAocGF0aGxlbiA8IGJhc2VsZW4gfHwKKwkgICAgKGJhc2VsZW4gJiYgcGF0aG5hbWVbYmFzZWxlbiAtIDFdICE9ICcvJykgfHwKKwkgICAgc3RybmNtcChwYXRobmFtZSwgYmFzZSwgYmFzZWxlbikpCisJCXJldHVybiAwOworCXJldHVybiBmbm1hdGNoKHBhdHRlcm4sIHBhdGhuYW1lICsgYmFzZWxlbiwgRk5NX1BBVEhOQU1FKSA9PSAwOworfQorCitzdGF0aWMgaW50IGZpbGxfb25lKGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBtYXRjaF9hdHRyICphLCBpbnQgcmVtKQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2sgPSBjaGVja19hbGxfYXR0cjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IDAgPCByZW0gJiYgaSA8IGEtPm51bV9hdHRyOyBpKyspIHsKKwkJc3RydWN0IGdpdF9hdHRyICphdHRyID0gYS0+c3RhdGVbaV0uYXR0cjsKKwkJY29uc3QgY2hhciAqKm4gPSAmKGNoZWNrW2F0dHItPmF0dHJfbnJdLnZhbHVlKTsKKwkJY29uc3QgY2hhciAqdiA9IGEtPnN0YXRlW2ldLnNldHRvOworCisJCWlmICgqbiA9PSBBVFRSX19VTktOT1dOKSB7CisJCQlkZWJ1Z19zZXQod2hhdCwgYS0+dS5wYXR0ZXJuLCBhdHRyLCB2KTsKKwkJCSpuID0gdjsKKwkJCXJlbS0tOworCQl9CisJfQorCXJldHVybiByZW07Cit9CisKK3N0YXRpYyBpbnQgZmlsbChjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbiwgc3RydWN0IGF0dHJfc3RhY2sgKnN0aywgaW50IHJlbSkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpiYXNlID0gc3RrLT5vcmlnaW4gPyBzdGstPm9yaWdpbiA6ICIiOworCisJZm9yIChpID0gc3RrLT5udW1fbWF0Y2hlcyAtIDE7IDAgPCByZW0gJiYgMCA8PSBpOyBpLS0pIHsKKwkJc3RydWN0IG1hdGNoX2F0dHIgKmEgPSBzdGstPmF0dHJzW2ldOworCQlpZiAoYS0+aXNfbWFjcm8pCisJCQljb250aW51ZTsKKwkJaWYgKHBhdGhfbWF0Y2hlcyhwYXRoLCBwYXRobGVuLAorCQkJCSBhLT51LnBhdHRlcm4sIGJhc2UsIHN0cmxlbihiYXNlKSkpCisJCQlyZW0gPSBmaWxsX29uZSgiZmlsbCIsIGEsIHJlbSk7CisJfQorCXJldHVybiByZW07Cit9CisKK3N0YXRpYyBpbnQgbWFjcm9leHBhbmQoc3RydWN0IGF0dHJfc3RhY2sgKnN0aywgaW50IHJlbSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrID0gY2hlY2tfYWxsX2F0dHI7CisKKwlmb3IgKGkgPSBzdGstPm51bV9tYXRjaGVzIC0gMTsgMCA8IHJlbSAmJiAwIDw9IGk7IGktLSkgeworCQlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYSA9IHN0ay0+YXR0cnNbaV07CisJCWlmICghYS0+aXNfbWFjcm8pCisJCQljb250aW51ZTsKKwkJaWYgKGNoZWNrW2EtPnUuYXR0ci0+YXR0cl9ucl0udmFsdWUgIT0gQVRUUl9fVFJVRSkKKwkJCWNvbnRpbnVlOworCQlyZW0gPSBmaWxsX29uZSgiZXhwYW5kIiwgYSwgcmVtKTsKKwl9CisJcmV0dXJuIHJlbTsKK30KKworaW50IGdpdF9jaGVja2F0dHIoY29uc3QgY2hhciAqcGF0aCwgaW50IG51bSwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqc3RrOworCWNvbnN0IGNoYXIgKmNwOworCWludCBkaXJsZW4sIHBhdGhsZW4sIGksIHJlbTsKKworCWJvb3RzdHJhcF9hdHRyX3N0YWNrKCk7CisJZm9yIChpID0gMDsgaSA8IGF0dHJfbnI7IGkrKykKKwkJY2hlY2tfYWxsX2F0dHJbaV0udmFsdWUgPSBBVFRSX19VTktOT1dOOworCisJcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwljcCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlpZiAoIWNwKQorCQlkaXJsZW4gPSAwOworCWVsc2UKKwkJZGlybGVuID0gY3AgLSBwYXRoOworCXByZXBhcmVfYXR0cl9zdGFjayhwYXRoLCBkaXJsZW4pOworCXJlbSA9IGF0dHJfbnI7CisJZm9yIChzdGsgPSBhdHRyX3N0YWNrOyAwIDwgcmVtICYmIHN0azsgc3RrID0gc3RrLT5wcmV2KQorCQlyZW0gPSBmaWxsKHBhdGgsIHBhdGhsZW4sIHN0aywgcmVtKTsKKworCWZvciAoc3RrID0gYXR0cl9zdGFjazsgMCA8IHJlbSAmJiBzdGs7IHN0ayA9IHN0ay0+cHJldikKKwkJcmVtID0gbWFjcm9leHBhbmQoc3RrLCByZW0pOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tfYWxsX2F0dHJbY2hlY2tbaV0uYXR0ci0+YXR0cl9ucl0udmFsdWU7CisJCWlmICh2YWx1ZSA9PSBBVFRSX19VTktOT1dOKQorCQkJdmFsdWUgPSBBVFRSX19VTlNFVDsKKwkJY2hlY2tbaV0udmFsdWUgPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2F0dHIuaCBiL2F0dHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWMyMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXR0ci5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgQVRUUl9ICisjZGVmaW5lIEFUVFJfSAorCisvKiBBbiBhdHRyaWJ1dGUgaXMgYSBwb2ludGVyIHRvIHRoaXMgb3BhcXVlIHN0cnVjdHVyZSAqLworc3RydWN0IGdpdF9hdHRyOworCisvKgorICogR2l2ZW4gYSBzdHJpbmcsIHJldHVybiB0aGUgZ2l0YXR0cmlidXRlIG9iamVjdCB0aGF0CisgKiBjb3JyZXNwb25kcyB0byBpdC4KKyAqLworc3RydWN0IGdpdF9hdHRyICpnaXRfYXR0cihjb25zdCBjaGFyICosIGludCk7CisKKy8qIEludGVybmFsIHVzZSAqLworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3RydWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdOworCisvKiBGb3IgcHVibGljIHRvIGNoZWNrIGdpdF9hdHRyX2NoZWNrIHJlc3VsdHMgKi8KKyNkZWZpbmUgQVRUUl9UUlVFKHYpICgodikgPT0gZ2l0X2F0dHJfX3RydWUpCisjZGVmaW5lIEFUVFJfRkFMU0UodikgKCh2KSA9PSBnaXRfYXR0cl9fZmFsc2UpCisjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQorCisvKgorICogU2VuZCBvbmUgb3IgbW9yZSBnaXRfYXR0cl9jaGVjayB0byBnaXRfY2hlY2thdHRyKCksIGFuZAorICogZWFjaCAndmFsdWUnIG1lbWJlciB0ZWxscyB3aGF0IGl0cyB2YWx1ZSBpcy4KKyAqIFVuc2V0IG9uZSBpcyByZXR1cm5lZCBhcyBOVUxMLgorICovCitzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgeworCXN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICp2YWx1ZTsKK307CisKK2ludCBnaXRfY2hlY2thdHRyKGNvbnN0IGNoYXIgKnBhdGgsIGludCwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICopOworCisjZW5kaWYgLyogQVRUUl9IICovCmRpZmYgLS1naXQgYS9ibG9iLmMgYi9ibG9iLmMKaW5kZXggMGE5ZWE0MS4uYmQ3ZDA3OCAxMDA2NDQKLS0tIGEvYmxvYi5jCisrKyBiL2Jsb2IuYwpAQCAtNiwxMiArNiw4IEBACiBzdHJ1Y3QgYmxvYiAqbG9va3VwX2Jsb2IoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOwotCWlmICghb2JqKSB7Ci0JCXN0cnVjdCBibG9iICpyZXQgPSBhbGxvY19ibG9iX25vZGUoKTsKLQkJY3JlYXRlZF9vYmplY3Qoc2hhMSwgJnJldC0+b2JqZWN0KTsKLQkJcmV0LT5vYmplY3QudHlwZSA9IE9CSl9CTE9COwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qoc2hhMSwgT0JKX0JMT0IsIGFsbG9jX2Jsb2Jfbm9kZSgpKTsKIAlpZiAoIW9iai0+dHlwZSkKIAkJb2JqLT50eXBlID0gT0JKX0JMT0I7CiAJaWYgKG9iai0+dHlwZSAhPSBPQkpfQkxPQikgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hZGQuYyBiL2J1aWx0aW4tYWRkLmMKaW5kZXggOWZjZjUxNC4uNWU2NzQ4ZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1hZGQuYworKysgYi9idWlsdGluLWFkZC5jCkBAIC04LDEwICs4LDE1IEBACiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKICNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9hZGRfdXNhZ2VbXSA9Ci0iZ2l0LWFkZCBbLW5dIFstdl0gWy1mXSBbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iOworImdpdC1hZGQgWy1uXSBbLXZdIFstZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy11XSBbLS1dIDxmaWxlcGF0dGVybj4uLi4iOwogCitzdGF0aWMgaW50IHRha2VfYWxsX3dvcmt0cmVlX2NoYW5nZXM7CiBzdGF0aWMgY29uc3QgY2hhciAqZXhjbHVkZXNfZmlsZTsKIAogc3RhdGljIHZvaWQgcHJ1bmVfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgaW50IHByZWZpeCkKQEAgLTg3LDExICs5Miw0OSBAQAogCX0KIAogCS8qIFJlYWQgdGhlIGRpcmVjdG9yeSBhbmQgcHJ1bmUgaXQgKi8KLQlyZWFkX2RpcmVjdG9yeShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4pOworCXJlYWRfZGlyZWN0b3J5KGRpciwgcGF0aCwgYmFzZSwgYmFzZWxlbiwgcGF0aHNwZWMpOwogCWlmIChwYXRoc3BlYykKIAkJcHJ1bmVfZGlyZWN0b3J5KGRpciwgcGF0aHNwZWMsIGJhc2VsZW4pOwogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfY2FsbGJhY2soc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqY2JkYXRhKQoreworCWludCBpLCB2ZXJib3NlOworCisJdmVyYm9zZSA9ICooKGludCAqKWNiZGF0YSk7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPm9uZS0+cGF0aDsKKwkJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5leHBhY3RlZCBkaWZmIHN0YXR1cyAlYyIsIHAtPnN0YXR1cyk7CisJCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCQlhZGRfZmlsZV90b19jYWNoZShwYXRoLCB2ZXJib3NlKTsKKwkJCWJyZWFrOworCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRmKCJyZW1vdmUgJyVzJ1xuIiwgcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2FsbChpbnQgdmVyYm9zZSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWluaXRfcmV2aXNpb25zKCZyZXYsICIiKTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHVwZGF0ZV9jYWxsYmFjazsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZ2ZXJib3NlOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOworCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworfQorCiBzdGF0aWMgaW50IGdpdF9hZGRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5leGNsdWRlc2ZpbGUiKSkgewpAQCAtMTMzLDcgKzE3Niw3IEBACiAKIAlnaXRfY29uZmlnKGdpdF9hZGRfY29uZmlnKTsKIAotCW5ld2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9ja19maWxlLCBnZXRfaW5kZXhfZmlsZSgpLCAxKTsKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwpAQCAtMTU2LDggKzE5OSwyMCBAQAogCQkJdmVyYm9zZSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItdSIpKSB7CisJCQl0YWtlX2FsbF93b3JrdHJlZV9jaGFuZ2VzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXVzYWdlKGJ1aWx0aW5fYWRkX3VzYWdlKTsKIAl9CisKKwlpZiAodGFrZV9hbGxfd29ya3RyZWVfY2hhbmdlcykgeworCQlpZiAoaSA8IGFyZ2MpCisJCQlkaWUoIi11IGFuZCBleHBsaWNpdCBwYXRocyBhcmUgaW5jb21wYXRpYmxlIik7CisJCXVwZGF0ZV9hbGwodmVyYm9zZSk7CisJCWdvdG8gZmluaXNoOworCX0KKwogCWlmIChhcmdjIDw9IGkpIHsKIAkJZnByaW50ZihzdGRlcnIsICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpOwogCQlmcHJpbnRmKHN0ZGVyciwgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIik7CkBAIC0yMDUsMTEgKzI2MCwxMiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykKLQkJYWRkX2ZpbGVfdG9faW5kZXgoZGlyLmVudHJpZXNbaV0tPm5hbWUsIHZlcmJvc2UpOworCQlhZGRfZmlsZV90b19jYWNoZShkaXIuZW50cmllc1tpXS0+bmFtZSwgdmVyYm9zZSk7CiAKKyBmaW5pc2g6CiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CiAJCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8Ci0JCSAgICBjbG9zZShuZXdmZCkgfHwgY29tbWl0X2xvY2tfZmlsZSgmbG9ja19maWxlKSkKKwkJICAgIGNsb3NlKG5ld2ZkKSB8fCBjb21taXRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUpKQogCQkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYXBwbHkuYyBiL2J1aWx0aW4tYXBwbHkuYwppbmRleCBkYjUyNzIyLi5mOTRkMGRiIDEwMDY0NAotLS0gYS9idWlsdGluLWFwcGx5LmMKKysrIGIvYnVpbHRpbi1hcHBseS5jCkBAIC0zMCw3ICszMCw3IEBACiBzdGF0aWMgaW50IHBfdmFsdWUgPSAxOwogc3RhdGljIGludCBwX3ZhbHVlX2tub3duOwogc3RhdGljIGludCBjaGVja19pbmRleDsKLXN0YXRpYyBpbnQgd3JpdGVfaW5kZXg7CitzdGF0aWMgaW50IHVwZGF0ZV9pbmRleDsKIHN0YXRpYyBpbnQgY2FjaGVkOwogc3RhdGljIGludCBkaWZmc3RhdDsKIHN0YXRpYyBpbnQgbnVtc3RhdDsKQEAgLTE0NzUsOCArMTQ3NSw4IEBACiAJCX0KIAkJY2xvc2UoZmQpOwogCQluc2l6ZSA9IGdvdDsKLQkJbmJ1ZiA9IGJ1ZjsKLQkJaWYgKGNvbnZlcnRfdG9fZ2l0KHBhdGgsICZuYnVmLCAmbnNpemUpKSB7CisJCW5idWYgPSBjb252ZXJ0X3RvX2dpdChwYXRoLCBidWYsICZuc2l6ZSk7CisJCWlmIChuYnVmKSB7CiAJCQlmcmVlKGJ1Zik7CiAJCQkqYnVmX3AgPSBuYnVmOwogCQkJKmFsbG9jX3AgPSBuc2l6ZTsKQEAgLTIzMDgsNyArMjMwOCw3IEBACiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9maWxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIGludCBybWRpcl9lbXB0eSkKIHsKLQlpZiAod3JpdGVfaW5kZXgpIHsKKwlpZiAodXBkYXRlX2luZGV4KSB7CiAJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGNoLT5vbGRfbmFtZSkgPCAwKQogCQkJZGllKCJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiLCBwYXRjaC0+b2xkX25hbWUpOwogCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChhY3RpdmVfY2FjaGVfdHJlZSwgcGF0Y2gtPm9sZF9uYW1lKTsKQEAgLTIzMzUsNyArMjMzNSw3IEBACiAJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CiAJdW5zaWduZWQgY2Vfc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CiAKLQlpZiAoIXdyaXRlX2luZGV4KQorCWlmICghdXBkYXRlX2luZGV4KQogCQlyZXR1cm47CiAKIAljZSA9IHhjYWxsb2MoMSwgY2Vfc2l6ZSk7CkBAIC0yMzU1LDkgKzIzNTUsOCBAQAogCiBzdGF0aWMgaW50IHRyeV9jcmVhdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JaW50IGZkLCBjb252ZXJ0ZWQ7CisJaW50IGZkOwogCWNoYXIgKm5idWY7Ci0JdW5zaWduZWQgbG9uZyBuc2l6ZTsKIAogCWlmIChoYXNfc3ltbGlua3MgJiYgU19JU0xOSyhtb2RlKSkKIAkJLyogQWx0aG91Z2ggYnVmOnNpemUgaXMgY291bnRlZCBzdHJpbmcsIGl0IGFsc28gaXMgTlVMCkBAIC0yMzY5LDEzICsyMzY4LDEwIEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JbnNpemUgPSBzaXplOwotCW5idWYgPSAoY2hhciAqKSBidWY7Ci0JY29udmVydGVkID0gY29udmVydF90b193b3JraW5nX3RyZWUocGF0aCwgJm5idWYsICZuc2l6ZSk7Ci0JaWYgKGNvbnZlcnRlZCkgeworCW5idWYgPSBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLCBidWYsICZzaXplKTsKKwlpZiAobmJ1ZikKIAkJYnVmID0gbmJ1ZjsKLQkJc2l6ZSA9IG5zaXplOwotCX0KKwogCXdoaWxlIChzaXplKSB7CiAJCWludCB3cml0dGVuID0geHdyaXRlKGZkLCBidWYsIHNpemUpOwogCQlpZiAod3JpdHRlbiA8IDApCkBAIC0yMzg3LDcgKzIzODMsNyBAQAogCX0KIAlpZiAoY2xvc2UoZmQpIDwgMCkKIAkJZGllKCJjbG9zaW5nIGZpbGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQlpZiAoY29udmVydGVkKQorCWlmIChuYnVmKQogCQlmcmVlKG5idWYpOwogCXJldHVybiAwOwogfQpAQCAtMjY2MSwxMCArMjY1NywxMCBAQAogCWlmICh3aGl0ZXNwYWNlX2Vycm9yICYmIChuZXdfd2hpdGVzcGFjZSA9PSBlcnJvcl9vbl93aGl0ZXNwYWNlKSkKIAkJYXBwbHkgPSAwOwogCi0Jd3JpdGVfaW5kZXggPSBjaGVja19pbmRleCAmJiBhcHBseTsKLQlpZiAod3JpdGVfaW5kZXggJiYgbmV3ZmQgPCAwKQotCQluZXdmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2tfZmlsZSwKLQkJCQkJCSAgZ2V0X2luZGV4X2ZpbGUoKSwgMSk7CisJdXBkYXRlX2luZGV4ID0gY2hlY2tfaW5kZXggJiYgYXBwbHk7CisJaWYgKHVwZGF0ZV9pbmRleCAmJiBuZXdmZCA8IDApCisJCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKIAlpZiAoY2hlY2tfaW5kZXgpIHsKIAkJaWYgKHJlYWRfY2FjaGUoKSA8IDApCiAJCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKQEAgLTI4NjksOSArMjg2NSw5IEBACiAJCQkJd2hpdGVzcGFjZV9lcnJvciA9PSAxID8gInMiIDogIiIpOwogCX0KIAotCWlmICh3cml0ZV9pbmRleCkgeworCWlmICh1cGRhdGVfaW5kZXgpIHsKIAkJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKLQkJICAgIGNsb3NlKG5ld2ZkKSB8fCBjb21taXRfbG9ja19maWxlKCZsb2NrX2ZpbGUpKQorCQkgICAgY2xvc2UobmV3ZmQpIHx8IGNvbW1pdF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSkpCiAJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hcmNoaXZlLmMgYi9idWlsdGluLWFyY2hpdmUuYwppbmRleCA4ZWE2Y2IxLi43ZjRlNDA5IDEwMDY0NAotLS0gYS9idWlsdGluLWFyY2hpdmUuYworKysgYi9idWlsdGluLWFyY2hpdmUuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiB7CiAJY29uc3QgY2hhciAqZXh0cmFfYXJndltNQVhfRVhUUkFfQVJHU107CiAJaW50IGV4dHJhX2FyZ2MgPSAwOwotCWNvbnN0IGNoYXIgKmZvcm1hdCA9IE5VTEw7IC8qIG1pZ2h0IHdhbnQgdG8gZGVmYXVsdCB0byAidGFyIiAqLworCWNvbnN0IGNoYXIgKmZvcm1hdCA9ICJ0YXIiOwogCWNvbnN0IGNoYXIgKmJhc2UgPSAiIjsKIAlpbnQgdmVyYm9zZSA9IDA7CiAJaW50IGk7CkBAIC0xOTAsOCArMTkwLDYgQEAKIAkvKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgLS0gdHJlZS1pc2ggKi8KIAlpZiAoYXJnYyAtIDEgPCBpKQogCQl1c2FnZShhcmNoaXZlX3VzYWdlKTsKLQlpZiAoIWZvcm1hdCkKLQkJZGllKCJZb3UgbXVzdCBzcGVjaWZ5IGFuIGFyY2hpdmUgZm9ybWF0Iik7CiAJaWYgKGluaXRfYXJjaGl2ZXIoZm9ybWF0LCBhcikgPCAwKQogCQlkaWUoIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJyVzJyIsIGZvcm1hdCk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmxhbWUuYyBiL2J1aWx0aW4tYmxhbWUuYwppbmRleCA4OTE5YjAyLi4zNDQyZDI4IDEwMDY0NAotLS0gYS9idWlsdGluLWJsYW1lLmMKKysrIGIvYnVpbHRpbi1ibGFtZS5jCkBAIC0xNiwxNiArMTYsMjAgQEAKICNpbmNsdWRlICJxdW90ZS5oIgogI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXRoLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCiAKIHN0YXRpYyBjaGFyIGJsYW1lX3VzYWdlW10gPQotImdpdC1ibGFtZSBbLWNdIFstbF0gWy10XSBbLWZdIFstbl0gWy1wXSBbLUwgbixtXSBbLVMgPHJldnMtZmlsZT5dIFstTV0gWy1DXSBbLUNdIFstLWNvbnRlbnRzIDxmaWxlbmFtZT5dIFstLWluY3JlbWVudGFsXSBbY29tbWl0XSBbLS1dIGZpbGVcbiIKKyJnaXQtYmxhbWUgWy1jXSBbLWJdIFstbF0gWy0tcm9vdF0gWy14XSBbLXRdIFstZl0gWy1uXSBbLXNdIFstcF0gWy1MIG4sbV0gWy1TIDxyZXZzLWZpbGU+XSBbLU1dIFstQ10gWy1DXSBbLS1jb250ZW50cyA8ZmlsZW5hbWU+XSBbLS1pbmNyZW1lbnRhbF0gW2NvbW1pdF0gWy0tXSBmaWxlXG4iCiAiICAtYyAgICAgICAgICAgICAgICAgIFVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZilcbiIKICIgIC1iICAgICAgICAgICAgICAgICAgU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKVxuIgogIiAgLWwgICAgICAgICAgICAgICAgICBTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZilcbiIKICIgIC0tcm9vdCAgICAgICAgICAgICAgRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpXG4iCiAiICAtdCAgICAgICAgICAgICAgICAgIFNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKVxuIgorIiAgLXggICAgICAgICAgICAgICAgICBEbyBub3QgdXNlIC5tYWlsbWFwIGZpbGVcbiIKICIgIC1mLCAtLXNob3ctbmFtZSAgICAgU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bylcbiIKICIgIC1uLCAtLXNob3ctbnVtYmVyICAgU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpXG4iCisiICAtcyAgICAgICAgICAgICAgICAgIFN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZilcbiIKICIgIC1wLCAtLXBvcmNlbGFpbiAgICAgU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvblxuIgogIiAgLUwgbixtICAgICAgICAgICAgICBQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMVxuIgogIiAgLU0sIC1DICAgICAgICAgICAgICBGaW5kIGxpbmUgbW92ZW1lbnRzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzXG4iCkBAIC00Miw2ICs0Niw4IEBACiBzdGF0aWMgaW50IGJsYW5rX2JvdW5kYXJ5Owogc3RhdGljIGludCBpbmNyZW1lbnRhbDsKIHN0YXRpYyBpbnQgY21kX2lzX2Fubm90YXRlOworc3RhdGljIGludCBub19tYWlsbWFwOworc3RhdGljIHN0cnVjdCBwYXRoX2xpc3QgbWFpbG1hcDsKIAogI2lmbmRlZiBERUJVRwogI2RlZmluZSBERUJVRyAwCkBAIC0xMjY0LDggKzEyNzAsOCBAQAogCQkJaW50IGJ1ZnN6LCBjaGFyICpwZXJzb24sIGNvbnN0IGNoYXIgKiptYWlsLAogCQkJdW5zaWduZWQgbG9uZyAqdGltZSwgY29uc3QgY2hhciAqKnR6KQogewotCWludCBsZW47Ci0JY2hhciAqdG1wLCAqZW5kcDsKKwlpbnQgbGVuLCB0emxlbiwgbWFpbGxlbjsKKwljaGFyICp0bXAsICplbmRwLCAqdGltZXBvczsKIAogCXRtcCA9IHN0cnN0cihpbmJ1Ziwgd2hhdCk7CiAJaWYgKCF0bXApCkBAIC0xMjkxLDE3ICsxMjk3LDQyIEBACiAJd2hpbGUgKCp0bXAgIT0gJyAnKQogCQl0bXAtLTsKIAkqdHogPSB0bXArMTsKKwl0emxlbiA9IChwZXJzb24rbGVuKS0odG1wKzEpOwogCiAJKnRtcCA9IDA7CiAJd2hpbGUgKCp0bXAgIT0gJyAnKQogCQl0bXAtLTsKIAkqdGltZSA9IHN0cnRvdWwodG1wLCBOVUxMLCAxMCk7CisJdGltZXBvcyA9IHRtcDsKIAogCSp0bXAgPSAwOwogCXdoaWxlICgqdG1wICE9ICcgJykKIAkJdG1wLS07CiAJKm1haWwgPSB0bXAgKyAxOwogCSp0bXAgPSAwOworCW1haWxsZW4gPSB0aW1lcG9zIC0gdG1wOworCisJaWYgKCFtYWlsbWFwLm5yKQorCQlyZXR1cm47CisKKwkvKgorCSAqIG1haWxtYXAgZXhwYW5zaW9uIG1heSBtYWtlIHRoZSBuYW1lIGxvbmdlci4KKwkgKiBtYWtlIHJvb20gYnkgcHVzaGluZyBzdHVmZiBkb3duLgorCSAqLworCXRtcCA9IHBlcnNvbiArIGJ1ZnN6IC0gKHR6bGVuICsgMSk7CisJbWVtbW92ZSh0bXAsICp0eiwgdHpsZW4pOworCXRtcFt0emxlbl0gPSAwOworCSp0eiA9IHRtcDsKKworCXRtcCA9IHRtcCAtIChtYWlsbGVuICsgMSk7CisJbWVtbW92ZSh0bXAsICptYWlsLCBtYWlsbGVuKTsKKwl0bXBbbWFpbGxlbl0gPSAwOworCSptYWlsID0gdG1wOworCisJLyoKKwkgKiBOb3csIGNvbnZlcnQgZS1tYWlsIHVzaW5nIG1haWxtYXAKKwkgKi8KKwltYXBfZW1haWwoJm1haWxtYXAsIHRtcCArIDEsIHBlcnNvbiwgdG1wLXBlcnNvbi0xKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKQEAgLTE0ODMsNiArMTUxNCw3IEBACiAjZGVmaW5lIE9VVFBVVF9TSE9XX05BTUUJMDIwCiAjZGVmaW5lIE9VVFBVVF9TSE9XX05VTUJFUgkwNDAKICNkZWZpbmUgT1VUUFVUX1NIT1dfU0NPUkUgICAgICAwMTAwCisjZGVmaW5lIE9VVFBVVF9OT19BVVRIT1IgICAgICAgMDIwMAogCiBzdGF0aWMgdm9pZCBlbWl0X3BvcmNlbGFpbihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50KQogewpAQCAtMTU3NywxMCArMTYwOSwxNSBAQAogCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX05VTUJFUikKIAkJCQlwcmludGYoIiAlKmQiLCBtYXhfb3JpZ19kaWdpdHMsCiAJCQkJICAgICAgIGVudC0+c19sbm8gKyAxICsgY250KTsKLQkJCXByaW50ZigiICglLSouKnMgJTEwcyAlKmQpICIsCi0JCQkgICAgICAgbG9uZ2VzdF9hdXRob3IsIGxvbmdlc3RfYXV0aG9yLCBjaS5hdXRob3IsCi0JCQkgICAgICAgZm9ybWF0X3RpbWUoY2kuYXV0aG9yX3RpbWUsIGNpLmF1dGhvcl90eiwKLQkJCQkJICAgc2hvd19yYXdfdGltZSksCisKKwkJCWlmICghKG9wdCAmIE9VVFBVVF9OT19BVVRIT1IpKQorCQkJCXByaW50ZigiICglLSouKnMgJTEwcyIsCisJCQkJICAgICAgIGxvbmdlc3RfYXV0aG9yLCBsb25nZXN0X2F1dGhvciwKKwkJCQkgICAgICAgY2kuYXV0aG9yLAorCQkJCSAgICAgICBmb3JtYXRfdGltZShjaS5hdXRob3JfdGltZSwKKwkJCQkJCSAgIGNpLmF1dGhvcl90eiwKKwkJCQkJCSAgIHNob3dfcmF3X3RpbWUpKTsKKwkJCXByaW50ZigiICUqZCkgIiwKIAkJCSAgICAgICBtYXhfZGlnaXRzLCBlbnQtPmxubyArIDEgKyBjbnQpOwogCQl9CiAJCWRvIHsKQEAgLTIwOTIsNiArMjEyOSw4IEBACiAJCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9SQVdfVElNRVNUQU1QOwogCQllbHNlIGlmICghc3RyY21wKCItbCIsIGFyZykpCiAJCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9MT05HX09CSkVDVF9OQU1FOworCQllbHNlIGlmICghc3RyY21wKCItcyIsIGFyZykpCisJCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9OT19BVVRIT1I7CiAJCWVsc2UgaWYgKCFzdHJjbXAoIi1TIiwgYXJnKSAmJiArK2kgPCBhcmdjKQogCQkJcmV2c19maWxlID0gYXJndltpXTsKIAkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItTSIpKSB7CkBAIC0yMTM0LDYgKzIxNzMsOSBAQAogCQllbHNlIGlmICghc3RyY21wKCItcCIsIGFyZykgfHwKIAkJCSAhc3RyY21wKCItLXBvcmNlbGFpbiIsIGFyZykpCiAJCQlvdXRwdXRfb3B0aW9uIHw9IE9VVFBVVF9QT1JDRUxBSU47CisJCWVsc2UgaWYgKCFzdHJjbXAoIi14IiwgYXJnKSB8fAorCQkJICFzdHJjbXAoIi0tbm8tbWFpbG1hcCIsIGFyZykpCisJCQlub19tYWlsbWFwID0gMTsKIAkJZWxzZSBpZiAoIXN0cmNtcCgiLS0iLCBhcmcpKSB7CiAJCQlzZWVuX2Rhc2hkYXNoID0gMTsKIAkJCWkrKzsKQEAgLTIzMzMsNiArMjM3NSw5IEBACiAJCWRpZSgicmVhZGluZyBncmFmdCBmaWxlICVzIGZhaWxlZDogJXMiLAogCQkgICAgcmV2c19maWxlLCBzdHJlcnJvcihlcnJubykpOwogCisJaWYgKCFub19tYWlsbWFwKQorCQlyZWFkX21haWxtYXAoJm1haWxtYXAsICIubWFpbG1hcCIsIE5VTEwpOworCiAJYXNzaWduX2JsYW1lKCZzYiwgJnJldnMsIG9wdCk7CiAKIAlpZiAoaW5jcmVtZW50YWwpCmRpZmYgLS1naXQgYS9idWlsdGluLWNhdC1maWxlLmMgYi9idWlsdGluLWNhdC1maWxlLmMKaW5kZXggZDYxZDNkNS4uZjEzMmQ1OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jYXQtZmlsZS5jCisrKyBiL2J1aWx0aW4tY2F0LWZpbGUuYwpAQCAtODMsMTcgKzgzLDIxIEBACiAJdm9pZCAqYnVmOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgb3B0OworCWNvbnN0IGNoYXIgKmV4cF90eXBlLCAqb2JqX25hbWU7CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CiAJaWYgKGFyZ2MgIT0gMykKIAkJdXNhZ2UoImdpdC1jYXQtZmlsZSBbLXR8LXN8LWV8LXB8PHR5cGU+XSA8c2hhMT4iKTsKLQlpZiAoZ2V0X3NoYTEoYXJndlsyXSwgc2hhMSkpCi0JCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzJdKTsKKwlleHBfdHlwZSA9IGFyZ3ZbMV07CisJb2JqX25hbWUgPSBhcmd2WzJdOworCisJaWYgKGdldF9zaGExKG9ial9uYW1lLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIG9ial9uYW1lKTsKIAogCW9wdCA9IDA7Ci0JaWYgKCBhcmd2WzFdWzBdID09ICctJyApIHsKLQkJb3B0ID0gYXJndlsxXVsxXTsKLQkJaWYgKCAhb3B0IHx8IGFyZ3ZbMV1bMl0gKQorCWlmICggZXhwX3R5cGVbMF0gPT0gJy0nICkgeworCQlvcHQgPSBleHBfdHlwZVsxXTsKKwkJaWYgKCAhb3B0IHx8IGV4cF90eXBlWzJdICkKIAkJCW9wdCA9IC0xOyAvKiBOb3QgYSBzaW5nbGUgY2hhcmFjdGVyIG9wdGlvbiAqLwogCX0KIApAQCAtMTIxLDE1ICsxMjUsMTcgQEAKIAljYXNlICdwJzoKIAkJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CiAJCWlmICh0eXBlIDwgMCkKLQkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzJdKTsKKwkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CiAKIAkJLyogY3VzdG9tIHByZXR0eS1wcmludCBoZXJlICovCi0JCWlmICh0eXBlID09IE9CSl9UUkVFKQotCQkJcmV0dXJuIGNtZF9sc190cmVlKDIsIGFyZ3YgKyAxLCBOVUxMKTsKKwkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCWNvbnN0IGNoYXIgKmxzX2FyZ3NbM10gPSB7ImxzLXRyZWUiLCBvYmpfbmFtZSwgTlVMTH07CisJCQlyZXR1cm4gY21kX2xzX3RyZWUoMiwgbHNfYXJncywgTlVMTCk7CisJCX0KIAogCQlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWJ1ZikKLQkJCWRpZSgiQ2Fubm90IHJlYWQgb2JqZWN0ICVzIiwgYXJndlsyXSk7CisJCQlkaWUoIkNhbm5vdCByZWFkIG9iamVjdCAlcyIsIG9ial9uYW1lKTsKIAkJaWYgKHR5cGUgPT0gT0JKX1RBRykgewogCQkJcHByaW50X3RhZyhzaGExLCBidWYsIHNpemUpOwogCQkJcmV0dXJuIDA7CkBAIC0xMzgsMTUgKzE0NCwxNSBAQAogCQkvKiBvdGhlcndpc2UganVzdCBzcGl0IG91dCB0aGUgZGF0YSAqLwogCQlicmVhazsKIAljYXNlIDA6Ci0JCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsIGFyZ3ZbMV0sICZzaXplLCBOVUxMKTsKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgZXhwX3R5cGUsICZzaXplLCBOVUxMKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlkaWUoImdpdC1jYXQtZmlsZTogdW5rbm93biBvcHRpb246ICVzXG4iLCBhcmd2WzFdKTsKKwkJZGllKCJnaXQtY2F0LWZpbGU6IHVua25vd24gb3B0aW9uOiAlc1xuIiwgZXhwX3R5cGUpOwogCX0KIAogCWlmICghYnVmKQotCQlkaWUoImdpdC1jYXQtZmlsZSAlczogYmFkIGZpbGUiLCBhcmd2WzJdKTsKKwkJZGllKCJnaXQtY2F0LWZpbGUgJXM6IGJhZCBmaWxlIiwgb2JqX25hbWUpOwogCiAJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9idWlsdGluLWNoZWNrLWF0dHIuYyBiL2J1aWx0aW4tY2hlY2stYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzdmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluLWNoZWNrLWF0dHIuYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBjaGVja19hdHRyX3VzYWdlW10gPQorImdpdC1jaGVjay1hdHRyIGF0dHIuLi4gWy0tXSBwYXRobmFtZS4uLiI7CisKK2ludCBjbWRfY2hlY2tfYXR0cihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrOworCWludCBjbnQsIGksIGRvdWJsZWRhc2g7CisKKwlkb3VibGVkYXNoID0gLTE7CisJZm9yIChpID0gMTsgZG91YmxlZGFzaCA8IDAgJiYgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkKKwkJCWRvdWJsZWRhc2ggPSBpOworCX0KKworCS8qIElmIHRoZXJlIGlzIG5vIGRvdWJsZSBkYXNoLCB3ZSBoYW5kbGUgb25seSBvbmUgYXR0cmlidXRlICovCisJaWYgKGRvdWJsZWRhc2ggPCAwKSB7CisJCWNudCA9IDE7CisJCWRvdWJsZWRhc2ggPSAxOworCX0gZWxzZQorCQljbnQgPSBkb3VibGVkYXNoIC0gMTsKKwlkb3VibGVkYXNoKys7CisKKwlpZiAoY250IDw9IDAgfHwgYXJnYyA8IGRvdWJsZWRhc2gpCisJCXVzYWdlKGNoZWNrX2F0dHJfdXNhZ2UpOworCWNoZWNrID0geGNhbGxvYyhjbnQsIHNpemVvZigqY2hlY2spKTsKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJc3RydWN0IGdpdF9hdHRyICphOworCQluYW1lID0gYXJndltpICsgMV07CisJCWEgPSBnaXRfYXR0cihuYW1lLCBzdHJsZW4obmFtZSkpOworCQlpZiAoIWEpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZSIsIG5hbWUpOworCQljaGVja1tpXS5hdHRyID0gYTsKKwl9CisKKwlmb3IgKGkgPSBkb3VibGVkYXNoOyBpIDwgYXJnYzsgaSsrKSB7CisJCWludCBqOworCQlpZiAoZ2l0X2NoZWNrYXR0cihhcmd2W2ldLCBjbnQsIGNoZWNrKSkKKwkJCWRpZSgiZ2l0X2NoZWNrYXR0ciBkaWVkIik7CisJCWZvciAoaiA9IDA7IGogPCBjbnQ7IGorKykgeworCQkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVja1tqXS52YWx1ZTsKKworCQkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCQkJdmFsdWUgPSAic2V0IjsKKwkJCWVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKQorCQkJCXZhbHVlID0gInVuc2V0IjsKKwkJCWVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKQorCQkJCXZhbHVlID0gInVuc3BlY2lmaWVkIjsKKworCQkJd3JpdGVfbmFtZV9xdW90ZWQoIiIsIDAsIGFyZ3ZbaV0sIDEsIHN0ZG91dCk7CisJCQlwcmludGYoIjogJXM6ICVzXG4iLCBhcmd2W2orMV0sIHZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYyBiL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYwppbmRleCBhZmU0YjBlLi44NDYwZjk3IDEwMDY0NAotLS0gYS9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMKKysrIGIvYnVpbHRpbi1jaGVja291dC1pbmRleC5jCkBAIC0yMDIsMTAgKzIwMiw3IEBACiAJCWlmICghc3RyY21wKGFyZywgIi11IikgfHwgIXN0cmNtcChhcmcsICItLWluZGV4IikpIHsKIAkJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOwogCQkJaWYgKG5ld2ZkIDwgMCkKLQkJCQluZXdmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUKLQkJCQkJKCZsb2NrX2ZpbGUsIGdldF9pbmRleF9maWxlKCksIDEpOwotCQkJaWYgKG5ld2ZkIDwgMCkKLQkJCQlkaWUoImNhbm5vdCBvcGVuIGluZGV4LmxvY2sgZmlsZS4iKTsKKwkJCQluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkgewpAQCAtMzAyLDcgKzI5OSw3IEBACiAKIAlpZiAoMCA8PSBuZXdmZCAmJgogCSAgICAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAotCSAgICAgY2xvc2UobmV3ZmQpIHx8IGNvbW1pdF9sb2NrX2ZpbGUoJmxvY2tfZmlsZSkpKQorCSAgICAgY2xvc2UobmV3ZmQpIHx8IGNvbW1pdF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSkpKQogCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb21taXQtdHJlZS5jIGIvYnVpbHRpbi1jb21taXQtdHJlZS5jCmluZGV4IDRhOGQ4ZDguLmNjYmNiZTMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY29tbWl0LXRyZWUuYworKysgYi9idWlsdGluLWNvbW1pdC10cmVlLmMKQEAgLTE2LDkgKzE2LDggQEAKICAqLwogc3RhdGljIHZvaWQgaW5pdF9idWZmZXIoY2hhciAqKmJ1ZnAsIHVuc2lnbmVkIGludCAqc2l6ZXApCiB7Ci0JY2hhciAqYnVmID0geG1hbGxvYyhCTE9DS0lORyk7CisJKmJ1ZnAgPSB4bWFsbG9jKEJMT0NLSU5HKTsKIAkqc2l6ZXAgPSAwOwotCSpidWZwID0gYnVmOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfYnVmZmVyKGNoYXIgKipidWZwLCB1bnNpZ25lZCBpbnQgKnNpemVwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY291bnQtb2JqZWN0cy5jIGIvYnVpbHRpbi1jb3VudC1vYmplY3RzLmMKaW5kZXggNjI2M2Q4YS4uZmY5MGViZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb3VudC1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1jb3VudC1vYmplY3RzLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgewogCQkJaWYgKCFwLT5wYWNrX2xvY2FsKQogCQkJCWNvbnRpbnVlOwotCQkJcGFja2VkICs9IG51bV9wYWNrZWRfb2JqZWN0cyhwKTsKKwkJCXBhY2tlZCArPSBwLT5udW1fb2JqZWN0czsKIAkJCW51bV9wYWNrKys7CiAJCX0KIAkJcHJpbnRmKCJjb3VudDogJWx1XG4iLCBsb29zZSk7CmRpZmYgLS1naXQgYS9idWlsdGluLWRpZmYuYyBiL2J1aWx0aW4tZGlmZi5jCmluZGV4IDIxZDEzZjAuLjdmMzY3YjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZGlmZi5jCisrKyBiL2J1aWx0aW4tZGlmZi5jCkBAIC0xMywxMyArMTMsMTAgQEAKICNpbmNsdWRlICJsb2ctdHJlZS5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKIAotLyogTkVFRFNXT1JLOiBzdHJ1Y3Qgb2JqZWN0IGhhcyBwbGFjZSBmb3IgbmFtZSBidXQgd2UgX2RvXwotICoga25vdyBtb2RlIHdoZW4gd2UgZXh0cmFjdGVkIHRoZSBibG9iIG91dCBvZiBhIHRyZWUsIHdoaWNoCi0gKiB3ZSBjdXJyZW50bHkgbG9zZS4KLSAqLwogc3RydWN0IGJsb2JpbmZvIHsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbW9kZTsKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fZGlmZl91c2FnZVtdID0KQEAgLTM1LDcgKzMyLDcgQEAKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOwogCiAJaWYgKCFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmICFpc19udWxsX3NoYTEobmV3X3NoYTEpICYmCi0JICAgICFoYXNoY21wKG9sZF9zaGExLCBuZXdfc2hhMSkpCisJICAgICFoYXNoY21wKG9sZF9zaGExLCBuZXdfc2hhMSkgJiYgKG9sZF9tb2RlID09IG5ld19tb2RlKSkKIAkJcmV0dXJuOwogCiAJaWYgKG9wdC0+cmV2ZXJzZV9kaWZmKSB7CkBAIC03MCw4ICs2NywxMiBAQAogCQlkaWUoIiclcyc6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIAlpZiAoIShTX0lTUkVHKHN0LnN0X21vZGUpIHx8IFNfSVNMTksoc3Quc3RfbW9kZSkpKQogCQlkaWUoIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIiwgcGF0aCk7CisKKwlpZiAoYmxvYlswXS5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzBdLm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCiAJc3R1ZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LAotCQkgICAgIGNhbm9uX21vZGUoc3Quc3RfbW9kZSksIGNhbm9uX21vZGUoc3Quc3RfbW9kZSksCisJCSAgICAgYmxvYlswXS5tb2RlLCBjYW5vbl9tb2RlKHN0LnN0X21vZGUpLAogCQkgICAgIGJsb2JbMF0uc2hhMSwgbnVsbF9zaGExLAogCQkgICAgIHBhdGgsIHBhdGgpOwogCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CkBAIC04OCw4ICs4OSwxNCBAQAogCWlmIChhcmdjID4gMSkKIAkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKIAorCWlmIChibG9iWzBdLm1vZGUgPT0gU19JRklOVkFMSUQpCisJCWJsb2JbMF0ubW9kZSA9IG1vZGU7CisKKwlpZiAoYmxvYlsxXS5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzFdLm1vZGUgPSBtb2RlOworCiAJc3R1ZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LAotCQkgICAgIG1vZGUsIG1vZGUsCisJCSAgICAgYmxvYlswXS5tb2RlLCBibG9iWzFdLm1vZGUsCiAJCSAgICAgYmxvYlswXS5zaGExLCBibG9iWzFdLnNoYTEsCiAJCSAgICAgYmxvYlswXS5uYW1lLCBibG9iWzFdLm5hbWUpOwogCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CkBAIC0yMjUsNiArMjMyLDcgQEAKIAkJaWYgKGRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpIDwgMCkKIAkJCWRpZSgiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIpOwogCX0KKwlyZXYuZGlmZm9wdC5hbGxvd19leHRlcm5hbCA9IDE7CiAKIAkvKiBEbyB3ZSBoYXZlIC0tY2FjaGVkIGFuZCBub3QgaGF2ZSBhIHBlbmRpbmcgb2JqZWN0LCB0aGVuCiAJICogZGVmYXVsdCB0byBIRUFEIGJ5IGhhbmQuICBFZWsuCkBAIC0yNzEsNiArMjc5LDcgQEAKIAkJCQlkaWUoIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciLCBuYW1lKTsKIAkJCWhhc2hjcHkoYmxvYltibG9ic10uc2hhMSwgb2JqLT5zaGExKTsKIAkJCWJsb2JbYmxvYnNdLm5hbWUgPSBuYW1lOworCQkJYmxvYltibG9ic10ubW9kZSA9IGxpc3QtPm1vZGU7CiAJCQlibG9icysrOwogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYwppbmRleCAyYWQ0NWRjLi4yMDY1NDY2IDEwMDY0NAotLS0gYS9idWlsdGluLWZldGNoLS10b29sLmMKKysrIGIvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCkBAIC00MzMsMTAgKzQzMyw4NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBpY2tfcnJlZihpbnQgc2hhMV9vbmx5LCBjb25zdCBjaGFyICpycmVmLCBjb25zdCBjaGFyICpsc19yZW1vdGVfcmVzdWx0KQoreworCWludCBlcnIgPSAwOworCWludCBscnJfY291bnQgPSBscnJfY291bnQsIGksIHBhc3M7CisJY29uc3QgY2hhciAqY3A7CisJc3RydWN0IGxyciB7CisJCWNvbnN0IGNoYXIgKmxpbmU7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCWludCBuYW1lbGVuOworCQlpbnQgc2hvd247CisJfSAqbHJyX2xpc3QgPSBscnJfbGlzdDsKKworCWZvciAocGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKwkJLyogcGFzcyAwIGNvdW50cyBhbmQgYWxsb2NhdGVzLCBwYXNzIDEgZmlsbHMuLi4gKi8KKwkJY3AgPSBsc19yZW1vdGVfcmVzdWx0OworCQlpID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCWNvbnN0IGNoYXIgKm5wOworCQkJd2hpbGUgKCpjcCAmJiBpc3NwYWNlKCpjcCkpCisJCQkJY3ArKzsKKwkJCWlmICghKmNwKQorCQkJCWJyZWFrOworCQkJbnAgPSBzdHJjaHIoY3AsICdcbicpOworCQkJaWYgKCFucCkKKwkJCQlucCA9IGNwICsgc3RybGVuKGNwKTsKKwkJCWlmIChwYXNzKSB7CisJCQkJbHJyX2xpc3RbaV0ubGluZSA9IGNwOworCQkJCWxycl9saXN0W2ldLm5hbWUgPSBjcCArIDQxOworCQkJCWxycl9saXN0W2ldLm5hbWVsZW4gPSBucCAtIChjcCArIDQxKTsKKwkJCX0KKwkJCWkrKzsKKwkJCWNwID0gbnA7CisJCX0KKwkJaWYgKCFwYXNzKSB7CisJCQlscnJfY291bnQgPSBpOworCQkJbHJyX2xpc3QgPSB4Y2FsbG9jKGxycl9jb3VudCwgc2l6ZW9mKCpscnJfbGlzdCkpOworCQl9CisJfQorCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqbmV4dDsKKwkJaW50IHJyZWZsZW47CisJCWludCBpOworCisJCXdoaWxlICgqcnJlZiAmJiBpc3NwYWNlKCpycmVmKSkKKwkJCXJyZWYrKzsKKwkJaWYgKCEqcnJlZikKKwkJCWJyZWFrOworCQluZXh0ID0gc3RyY2hyKHJyZWYsICdcbicpOworCQlpZiAoIW5leHQpCisJCQluZXh0ID0gcnJlZiArIHN0cmxlbihycmVmKTsKKwkJcnJlZmxlbiA9IG5leHQgLSBycmVmOworCisJCWZvciAoaSA9IDA7IGkgPCBscnJfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGxyciAqbHJyID0gJihscnJfbGlzdFtpXSk7CisKKwkJCWlmIChycmVmbGVuID09IGxyci0+bmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAobHJyLT5uYW1lLCBycmVmLCBycmVmbGVuKSkgeworCQkJCWlmICghbHJyLT5zaG93bikKKwkJCQkJcHJpbnRmKCIlLipzXG4iLAorCQkJCQkgICAgICAgc2hhMV9vbmx5ID8gNDAgOiBscnItPm5hbWVsZW4gKyA0MSwKKwkJCQkJICAgICAgIGxyci0+bGluZSk7CisJCQkJbHJyLT5zaG93biA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGxycl9jb3VudCA8PSBpKSB7CisJCQllcnJvcigicGljay1ycmVmOiAlLipzIG5vdCBmb3VuZCIsIHJyZWZsZW4sIHJyZWYpOworCQkJZXJyID0gMTsKKwkJfQorCQlycmVmID0gbmV4dDsKKwl9CisJZnJlZShscnJfbGlzdCk7CisJcmV0dXJuIGVycjsKK30KKwogaW50IGNtZF9mZXRjaF9fdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgdmVyYm9zZSA9IDA7CiAJaW50IGZvcmNlID0gMDsKKwlpbnQgc29wdCA9IDA7CiAKIAl3aGlsZSAoMSA8IGFyZ2MpIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKQEAgLTQ0NCw2ICs1MjEsOCBAQAogCQkJdmVyYm9zZSA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoIi1mIiwgYXJnKSkKIAkJCWZvcmNlID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiLXMiLCBhcmcpKQorCQkJc29wdCA9IDE7CiAJCWVsc2UKIAkJCWJyZWFrOwogCQlhcmdjLS07CkBAIC00ODgsNiArNTY3LDE1IEBACiAJCQlyZWZsaXN0ID0gZ2V0X3N0ZGluKCk7CiAJCXJldHVybiBwYXJzZV9yZWZsaXN0KHJlZmxpc3QpOwogCX0KKwlpZiAoIXN0cmNtcCgicGljay1ycmVmIiwgYXJndlsxXSkpIHsKKwkJY29uc3QgY2hhciAqbHNfcmVtb3RlX3Jlc3VsdDsKKwkJaWYgKGFyZ2MgIT0gNCkKKwkJCXJldHVybiBlcnJvcigicGljay1ycmVmIHRha2VzIDIgYXJncyIpOworCQlsc19yZW1vdGVfcmVzdWx0ID0gYXJndlszXTsKKwkJaWYgKCFzdHJjbXAobHNfcmVtb3RlX3Jlc3VsdCwgIi0iKSkKKwkJCWxzX3JlbW90ZV9yZXN1bHQgPSBnZXRfc3RkaW4oKTsKKwkJcmV0dXJuIHBpY2tfcnJlZihzb3B0LCBhcmd2WzJdLCBsc19yZW1vdGVfcmVzdWx0KTsKKwl9CiAJaWYgKCFzdHJjbXAoImV4cGFuZC1yZWZzLXdpbGRjYXJkIiwgYXJndlsxXSkpIHsKIAkJY29uc3QgY2hhciAqcmVmbGlzdDsKIAkJaWYgKGFyZ2MgPCA0KQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mc2NrLmMgYi9idWlsdGluLWZzY2suYwppbmRleCA3NWUxMGUyLi40NGNlNjI5IDEwMDY0NAotLS0gYS9idWlsdGluLWZzY2suYworKysgYi9idWlsdGluLWZzY2suYwpAQCAtMTQsNiArMTQsNyBAQAogc3RhdGljIGludCBzaG93X3Jvb3Q7CiBzdGF0aWMgaW50IHNob3dfdGFnczsKIHN0YXRpYyBpbnQgc2hvd191bnJlYWNoYWJsZTsKK3N0YXRpYyBpbnQgaW5jbHVkZV9yZWZsb2dzID0gMTsKIHN0YXRpYyBpbnQgY2hlY2tfZnVsbDsKIHN0YXRpYyBpbnQgY2hlY2tfc3RyaWN0Owogc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHM7CkBAIC0yNTUsNiArMjU2LDcgQEAKIAkJY2FzZSBTX0lGUkVHIHwgMDY0NDoKIAkJY2FzZSBTX0lGTE5LOgogCQljYXNlIFNfSUZESVI6CisJCWNhc2UgU19JRkRJUkxOSzoKIAkJCWJyZWFrOwogCQkvKgogCQkgKiBUaGlzIGlzIG5vbnN0YW5kYXJkLCBidXQgd2UgaGFkIGEgZmV3IG9mIHRoZXNlCkBAIC0zNTQsNyArMzU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmc2NrX3NoYTEodW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgZnNja19zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOwogCWlmICghb2JqKSB7CkBAIC01MjMsNyArNTI1LDggQEAKIHN0YXRpYyB2b2lkIGdldF9kZWZhdWx0X2hlYWRzKHZvaWQpCiB7CiAJZm9yX2VhY2hfcmVmKGZzY2tfaGFuZGxlX3JlZiwgTlVMTCk7Ci0JZm9yX2VhY2hfcmVmbG9nKGZzY2tfaGFuZGxlX3JlZmxvZywgTlVMTCk7CisJaWYgKGluY2x1ZGVfcmVmbG9ncykKKwkJZm9yX2VhY2hfcmVmbG9nKGZzY2tfaGFuZGxlX3JlZmxvZywgTlVMTCk7CiAKIAkvKgogCSAqIE5vdCBoYXZpbmcgYW55IGRlZmF1bHQgaGVhZHMgaXNuJ3QgcmVhbGx5IGZhdGFsLCBidXQKQEAgLTYzMCw2ICs2MzMsMTAgQEAKIAkJCWtlZXBfY2FjaGVfb2JqZWN0cyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLXJlZmxvZ3MiKSkgeworCQkJaW5jbHVkZV9yZWZsb2dzID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi0tZnVsbCIpKSB7CiAJCQljaGVja19mdWxsID0gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNjYxLDEyICs2NjgsOSBAQAogCQkJdmVyaWZ5X3BhY2socCwgMCk7CiAKIAkJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCXVpbnQzMl90IGksIG51bSA9IG51bV9wYWNrZWRfb2JqZWN0cyhwKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JCQkJbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpLCBzaGExKTsKLQkJCQlmc2NrX3NoYTEoc2hhMSk7Ci0JCQl9CisJCQl1aW50MzJfdCBpLCBudW0gPSBwLT5udW1fb2JqZWN0czsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKwkJCQlmc2NrX3NoYTEobnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpKSk7CiAJCX0KIAl9CiAKQEAgLTcwNiw4ICs3MTAsMTQgQEAKIAkJaW50IGk7CiAJCXJlYWRfY2FjaGUoKTsKIAkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7Ci0JCQlzdHJ1Y3QgYmxvYiAqYmxvYiA9IGxvb2t1cF9ibG9iKGFjdGl2ZV9jYWNoZVtpXS0+c2hhMSk7CisJCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJCXN0cnVjdCBibG9iICpibG9iOwogCQkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCQltb2RlID0gbnRvaGwoYWN0aXZlX2NhY2hlW2ldLT5jZV9tb2RlKTsKKwkJCWlmIChTX0lTRElSTE5LKG1vZGUpKQorCQkJCWNvbnRpbnVlOworCQkJYmxvYiA9IGxvb2t1cF9ibG9iKGFjdGl2ZV9jYWNoZVtpXS0+c2hhMSk7CiAJCQlpZiAoIWJsb2IpCiAJCQkJY29udGludWU7CiAJCQlvYmogPSAmYmxvYi0+b2JqZWN0OwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1sb2cuYyBiL2J1aWx0aW4tbG9nLmMKaW5kZXggNzFkZjk1Ny4uMzhiZjUyZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1sb2cuYworKysgYi9idWlsdGluLWxvZy5jCkBAIC0xMiwxNiArMTIsNDQgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKKyNpbmNsdWRlICJyZWZzLmgiCiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3Jvb3QgPSAxOwogCiAvKiB0aGlzIGlzIGluIGJ1aWx0aW4tZGlmZi5jICovCiB2b2lkIGFkZF9oZWFkKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7CiAKK3N0YXRpYyB2b2lkIGFkZF9uYW1lX2RlY29yYXRpb24oY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaW50IHBsZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlpbnQgbmxlbiA9IHN0cmxlbihuYW1lKTsKKwlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpyZXMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uKSArIHBsZW4gKyBubGVuKTsKKwltZW1jcHkocmVzLT5uYW1lLCBwcmVmaXgsIHBsZW4pOworCW1lbWNweShyZXMtPm5hbWUgKyBwbGVuLCBuYW1lLCBubGVuICsgMSk7CisJcmVzLT5uZXh0ID0gYWRkX2RlY29yYXRpb24oJm5hbWVfZGVjb3JhdGlvbiwgb2JqLCByZXMpOworfQorCitzdGF0aWMgaW50IGFkZF9yZWZfZGVjb3JhdGlvbihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gMDsKKwlhZGRfbmFtZV9kZWNvcmF0aW9uKCIiLCByZWZuYW1lLCBvYmopOworCXdoaWxlIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlvYmogPSAoKHN0cnVjdCB0YWcgKilvYmopLT50YWdnZWQ7CisJCWlmICghb2JqKQorCQkJYnJlYWs7CisJCWFkZF9uYW1lX2RlY29yYXRpb24oInRhZzogIiwgcmVmbmFtZSwgb2JqKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGNtZF9sb2dfaW5pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJICAgICAgc3RydWN0IHJldl9pbmZvICpyZXYpCiB7CiAJaW50IGk7CisJaW50IGRlY29yYXRlID0gMDsKIAogCXJldi0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CiAJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKQEAgLTM4LDggKzY2LDExIEBACiAJCQkJZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcgPSB4c3RyZHVwKGFyZyk7CiAJCQllbHNlCiAJCQkJZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcgPSAiIjsKLQkJfQotCQllbHNlCisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRlY29yYXRlIikpIHsKKwkJCWlmICghZGVjb3JhdGUpCisJCQkJZm9yX2VhY2hfcmVmKGFkZF9yZWZfZGVjb3JhdGlvbiwgTlVMTCk7CisJCQlkZWNvcmF0ZSA9IDE7CisJCX0gZWxzZQogCQkJZGllKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiwgYXJnKTsKIAl9CiB9CkBAIC0zMzMsMjUgKzM2NCwxMiBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKLQkJdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlpZiAoY29tbWl0LT5wYXJlbnRzKQotCQlkaWZmX3RyZWVfc2hhMShjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExLAotCQkgICAgICAgICAgICAgICBjb21taXQtPm9iamVjdC5zaGExLCAiIiwgb3B0aW9ucyk7Ci0JZWxzZQotCQlkaWZmX3Jvb3RfdHJlZV9zaGExKGNvbW1pdC0+b2JqZWN0LnNoYTEsICIiLCBvcHRpb25zKTsKLQlkaWZmY29yZV9zdGQob3B0aW9ucyk7Ci0JcmV0dXJuIGRpZmZfZmx1c2hfcGF0Y2hfaWQob3B0aW9ucywgc2hhMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldF9wYXRjaF9pZHMoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3N0YXRpYyB2b2lkIGdldF9wYXRjaF9pZHMoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBwYXRjaF9pZHMgKmlkcywgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCByZXZfaW5mbyBjaGVja19yZXY7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCXN0cnVjdCBvYmplY3QgKm8xLCAqbzI7CiAJdW5zaWduZWQgZmxhZ3MxLCBmbGFnczI7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAogCWlmIChyZXYtPnBlbmRpbmcubnIgIT0gMikKIAkJZGllKCJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIpOwpAQCAtMzY0LDEwICszODIsNyBAQAogCWlmICgoZmxhZ3MxICYgVU5JTlRFUkVTVElORykgPT0gKGZsYWdzMiAmIFVOSU5URVJFU1RJTkcpKQogCQlkaWUoIk5vdCBhIHJhbmdlLiIpOwogCi0JZGlmZl9zZXR1cChvcHRpb25zKTsKLQlvcHRpb25zLT5yZWN1cnNpdmUgPSAxOwotCWlmIChkaWZmX3NldHVwX2RvbmUob3B0aW9ucykgPCAwKQotCQlkaWUoImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiKTsKKwlpbml0X3BhdGNoX2lkcyhpZHMpOwogCiAJLyogZ2l2ZW4gYSByYW5nZSBhLi5iIGdldCBhbGwgcGF0Y2ggaWRzIGZvciBiLi5hICovCiAJaW5pdF9yZXZpc2lvbnMoJmNoZWNrX3JldiwgcHJlZml4KTsKQEAgLTM4Miw4ICszOTcsNyBAQAogCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghZ2V0X3BhdGNoX2lkKGNvbW1pdCwgb3B0aW9ucywgc2hhMSkpCi0JCQljcmVhdGVkX29iamVjdChzaGExLCB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0KSkpOworCQlhZGRfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgaWRzKTsKIAl9CiAKIAkvKiByZXNldCBmb3IgbmV4dCByZXZpc2lvbiB3YWxrICovCkBAIC00MTcsMTAgKzQzMSwxMSBAQAogCWludCBudW1iZXJlZCA9IDA7CiAJaW50IHN0YXJ0X251bWJlciA9IC0xOwogCWludCBrZWVwX3N1YmplY3QgPSAwOworCWludCBzdWJqZWN0X3ByZWZpeCA9IDA7CiAJaW50IGlnbm9yZV9pZl9pbl91cHN0cmVhbSA9IDA7CiAJaW50IHRocmVhZCA9IDA7CiAJY29uc3QgY2hhciAqaW5fcmVwbHlfdG8gPSBOVUxMOwotCXN0cnVjdCBkaWZmX29wdGlvbnMgcGF0Y2hfaWRfb3B0czsKKwlzdHJ1Y3QgcGF0Y2hfaWRzIGlkczsKIAljaGFyICphZGRfc2lnbm9mZiA9IE5VTEw7CiAJY2hhciBtZXNzYWdlX2lkWzEwMjRdOwogCWNoYXIgcmVmX21lc3NhZ2VfaWRbMTAyNF07CkBAIC01MDksOCArNTI0LDEwIEBACiAJCQlpZiAoaSA9PSBhcmdjKQogCQkJCWRpZSgiTmVlZCBhIE1lc3NhZ2UtSWQgZm9yIC0taW4tcmVwbHktdG8iKTsKIAkJCWluX3JlcGx5X3RvID0gYXJndltpXTsKLQkJfQotCQllbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLXN1ZmZpeD0iKSkKKwkJfSBlbHNlIGlmICghcHJlZml4Y21wKGFyZ3ZbaV0sICItLXN1YmplY3QtcHJlZml4PSIpKSB7CisJCQlzdWJqZWN0X3ByZWZpeCA9IDE7CisJCQlyZXYuc3ViamVjdF9wcmVmaXggPSBhcmd2W2ldICsgMTc7CisJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2W2ldLCAiLS1zdWZmaXg9IikpCiAJCQlmbXRfcGF0Y2hfc3VmZml4ID0gYXJndltpXSArIDk7CiAJCWVsc2UKIAkJCWFyZ3ZbaisrXSA9IGFyZ3ZbaV07CkBAIC01MjEsNiArNTM4LDggQEAKIAkJc3RhcnRfbnVtYmVyID0gMTsKIAlpZiAobnVtYmVyZWQgJiYga2VlcF9zdWJqZWN0KQogCQlkaWUgKCItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iKTsKKwlpZiAoa2VlcF9zdWJqZWN0ICYmIHN1YmplY3RfcHJlZml4KQorCQlkaWUgKCItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIpOwogCiAJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCAiSEVBRCIpOwogCWlmIChhcmdjID4gMSkKQEAgLTU1NCwyMiArNTczLDE5IEBACiAJfQogCiAJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkKLQkJZ2V0X3BhdGNoX2lkcygmcmV2LCAmcGF0Y2hfaWRfb3B0cywgcHJlZml4KTsKKwkJZ2V0X3BhdGNoX2lkcygmcmV2LCAmaWRzLCBwcmVmaXgpOwogCiAJaWYgKCF1c2Vfc3Rkb3V0KQogCQlyZWFsc3Rkb3V0ID0gZmRvcGVuKGR1cCgxKSwgInciKTsKIAogCXByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KTsKIAl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCiAJCS8qIGlnbm9yZSBtZXJnZXMgKi8KIAkJaWYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpCiAJCQljb250aW51ZTsKIAogCQlpZiAoaWdub3JlX2lmX2luX3Vwc3RyZWFtICYmCi0JCQkJIWdldF9wYXRjaF9pZChjb21taXQsICZwYXRjaF9pZF9vcHRzLCBzaGExKSAmJgotCQkJCWxvb2t1cF9vYmplY3Qoc2hhMSkpCisJCQkJaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpKQogCQkJY29udGludWU7CiAKIAkJbnIrKzsKQEAgLTYyNCw2ICs2NDAsOCBAQAogCQkJZmNsb3NlKHN0ZG91dCk7CiAJfQogCWZyZWUobGlzdCk7CisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkKKwkJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY0Niw3ICs2NjQsNyBAQAogaW50IGNtZF9jaGVycnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IHJldl9pbmZvIHJldnM7Ci0Jc3RydWN0IGRpZmZfb3B0aW9ucyBwYXRjaF9pZF9vcHRzOworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnVwc3RyZWFtOwpAQCAtNjkyLDcgKzcxMCw3IEBACiAJCQlyZXR1cm4gMDsKIAl9CiAKLQlnZXRfcGF0Y2hfaWRzKCZyZXZzLCAmcGF0Y2hfaWRfb3B0cywgcHJlZml4KTsKKwlnZXRfcGF0Y2hfaWRzKCZyZXZzLCAmaWRzLCBwcmVmaXgpOwogCiAJaWYgKGxpbWl0ICYmIGFkZF9wZW5kaW5nX2NvbW1pdChsaW1pdCwgJnJldnMsIFVOSU5URVJFU1RJTkcpKQogCQlkaWUoIlVua25vd24gY29tbWl0ICVzIiwgbGltaXQpOwpAQCAtNzA4LDEyICs3MjYsMTAgQEAKIAl9CiAKIAl3aGlsZSAobGlzdCkgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQljaGFyIHNpZ24gPSAnKyc7CiAKIAkJY29tbWl0ID0gbGlzdC0+aXRlbTsKLQkJaWYgKCFnZXRfcGF0Y2hfaWQoY29tbWl0LCAmcGF0Y2hfaWRfb3B0cywgc2hhMSkgJiYKLQkJICAgIGxvb2t1cF9vYmplY3Qoc2hhMSkpCisJCWlmIChoYXNfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcykpCiAJCQlzaWduID0gJy0nOwogCiAJCWlmICh2ZXJib3NlKSB7CkBAIC03MzEsNSArNzQ3LDYgQEAKIAkJbGlzdCA9IGxpc3QtPm5leHQ7CiAJfQogCisJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLWxzLWZpbGVzLmMgYi9idWlsdGluLWxzLWZpbGVzLmMKaW5kZXggNGUxZDVhZi4uZjdjMDY2YiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1scy1maWxlcy5jCisrKyBiL2J1aWx0aW4tbHMtZmlsZXMuYwpAQCAtODksMjAgKzg5LDM4IEBACiBzdGF0aWMgdm9pZCBzaG93X290aGVyX2ZpbGVzKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpCiB7CiAJaW50IGk7CisKKworCS8qCisJICogU2tpcCBtYXRjaGluZyBhbmQgdW5tZXJnZWQgZW50cmllcyBmb3IgdGhlIHBhdGhzLAorCSAqIHNpbmNlIHdlIHdhbnQganVzdCAib3RoZXJzIi4KKwkgKgorCSAqIChNYXRjaGluZyBlbnRyaWVzIGFyZSBub3JtYWxseSBwcnVuZWQgZHVyaW5nCisJICogdGhlIGRpcmVjdG9yeSB0cmVlIHdhbGssIGJ1dCB3aWxsIHNob3cgdXAgZm9yCisJICogZ2l0bGlua3MgYmVjYXVzZSB3ZSBkb24ndCBuZWNlc3NhcmlseSBoYXZlCisJICogZGlyLT5zaG93X290aGVyX2RpcmVjdG9yaWVzIHNldCB0byBzdXBwcmVzcworCSAqIHRoZW0pLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKLQkJLyogV2Ugc2hvdWxkIG5vdCBoYXZlIGEgbWF0Y2hpbmcgZW50cnksIGJ1dCB3ZQotCQkgKiBtYXkgaGF2ZSBhbiB1bm1lcmdlZCBlbnRyeSBmb3IgdGhpcyBwYXRoLgotCQkgKi8KIAkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW2ldOwotCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MoZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCWludCBsZW4sIHBvczsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCQkvKgorCQkgKiBSZW1vdmUgdGhlICcvJyBhdCB0aGUgZW5kIHRoYXQgZGlyZWN0b3J5CisJCSAqIHdhbGtpbmcgYWRkcyBmb3IgZGlyZWN0b3J5IGVudHJpZXMuCisJCSAqLworCQlsZW4gPSBlbnQtPmxlbjsKKwkJaWYgKGxlbiAmJiBlbnQtPm5hbWVbbGVuLTFdID09ICcvJykKKwkJCWxlbi0tOworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIGxlbik7CiAJCWlmICgwIDw9IHBvcykKLQkJCWRpZSgiYnVnIGluIHNob3ctb3RoZXItZmlsZXMiKTsKKwkJCWNvbnRpbnVlOwkvKiBleGFjdCBtYXRjaCAqLwogCQlwb3MgPSAtcG9zIC0gMTsKIAkJaWYgKHBvcyA8IGFjdGl2ZV9ucikgeyAKIAkJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107Ci0JCQlpZiAoY2VfbmFtZWxlbihjZSkgPT0gZW50LT5sZW4gJiYKLQkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBlbnQtPm5hbWUsIGVudC0+bGVuKSkKKwkJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBsZW4gJiYKKwkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBlbnQtPm5hbWUsIGxlbikpCiAJCQkJY29udGludWU7IC8qIFl1cCwgdGhpcyBvbmUgZXhpc3RzIHVubWVyZ2VkICovCiAJCX0KIAkJc2hvd19kaXJfZW50cnkodGFnX290aGVyLCBlbnQpOwpAQCAtMjE2LDcgKzIzNCw3IEBACiAKIAkJaWYgKGJhc2VsZW4pCiAJCQlwYXRoID0gYmFzZSA9IHByZWZpeDsKLQkJcmVhZF9kaXJlY3RvcnkoZGlyLCBwYXRoLCBiYXNlLCBiYXNlbGVuKTsKKwkJcmVhZF9kaXJlY3RvcnkoZGlyLCBwYXRoLCBiYXNlLCBiYXNlbGVuLCBwYXRoc3BlYyk7CiAJCWlmIChzaG93X290aGVycykKIAkJCXNob3dfb3RoZXJfZmlsZXMoZGlyKTsKIAkJaWYgKHNob3dfa2lsbGVkKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1scy10cmVlLmMgYi9idWlsdGluLWxzLXRyZWUuYwppbmRleCA2NDcyNjEwLi4xY2I0ZGNhIDEwMDY0NAotLS0gYS9idWlsdGluLWxzLXRyZWUuYworKysgYi9idWlsdGluLWxzLXRyZWUuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImJsb2IuaCIKICNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKICNpbmNsdWRlICJidWlsdGluLmgiCiAKQEAgLTU5LDcgKzYwLDI0IEBACiAJaW50IHJldHZhbCA9IDA7CiAJY29uc3QgY2hhciAqdHlwZSA9IGJsb2JfdHlwZTsKIAotCWlmIChTX0lTRElSKG1vZGUpKSB7CisJaWYgKFNfSVNESVJMTksobW9kZSkpIHsKKwkJLyoKKwkJICogTWF5YmUgd2Ugd2FudCB0byBoYXZlIHNvbWUgcmVjdXJzaXZlIHZlcnNpb24gaGVyZT8KKwkJICoKKwkJICogU29tZXRoaW5nIGxpa2U6CisJCSAqCisJCWlmIChzaG93X3N1YnByb2plY3RzKGJhc2UsIGJhc2VsZW4sIHBhdGhuYW1lKSkgeworCQkJaWYgKGZvcmsoKSkgeworCQkJCWNoZGlyKGJhc2UpOworCQkJCWV4ZWMgbHMtdHJlZTsKKwkJCX0KKwkJCXdhaXRwaWQoKTsKKwkJfQorCQkgKgorCQkgKiAuLm9yIHNpbWlsYXIuLgorCQkgKi8KKwkJdHlwZSA9IGNvbW1pdF90eXBlOworCX0gZWxzZSBpZiAoU19JU0RJUihtb2RlKSkgewogCQlpZiAoc2hvd19yZWN1cnNpdmUoYmFzZSwgYmFzZWxlbiwgcGF0aG5hbWUpKSB7CiAJCQlyZXR2YWwgPSBSRUFEX1RSRUVfUkVDVVJTSVZFOwogCQkJaWYgKCEobHNfb3B0aW9ucyAmIExTX1NIT1dfVFJFRVMpKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tdi5jIGIvYnVpbHRpbi1tdi5jCmluZGV4IDczN2FmMzUuLjM1NjMyMTYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbXYuYworKysgYi9idWlsdGluLW12LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKIAotCW5ld2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9ja19maWxlLCBnZXRfaW5kZXhfZmlsZSgpLCAxKTsKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOwogCWlmIChyZWFkX2NhY2hlKCkgPCAwKQogCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwogCkBAIC0yNzMsNyArMjczLDcgQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRkZWQubnI7IGkrKykgewogCQkJY29uc3QgY2hhciAqcGF0aCA9IGFkZGVkLml0ZW1zW2ldLnBhdGg7Ci0JCQlhZGRfZmlsZV90b19pbmRleChwYXRoLCB2ZXJib3NlKTsKKwkJCWFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIHZlcmJvc2UpOwogCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IGRlbGV0ZWQubnI7IGkrKykgewpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgewogCQkJaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKIAkJCSAgICBjbG9zZShuZXdmZCkgfHwKLQkJCSAgICBjb21taXRfbG9ja19maWxlKCZsb2NrX2ZpbGUpKQorCQkJICAgIGNvbW1pdF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSkpCiAJCQkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMgYi9idWlsdGluLXBhY2stb2JqZWN0cy5jCmluZGV4IGI1Zjk2NDguLmI4Mjc2MjcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1wYWNrLW9iamVjdHMuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJyZXZpc2lvbi5oIgogI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHBhY2tfdXNhZ2VbXSA9ICJcCiBnaXQtcGFjay1vYmplY3RzIFt7IC1xIHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzIH1dIFxuXApAQCAtMjIsMjggKzIzLDI2IEBACiAKIHN0cnVjdCBvYmplY3RfZW50cnkgewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdWludDMyX3QgY3JjMzI7CQkvKiBjcmMgb2YgcmF3IHBhY2sgZGF0YSBmb3IgdGhpcyBvYmplY3QgKi8KKwlvZmZfdCBvZmZzZXQ7CQkvKiBvZmZzZXQgaW50byB0aGUgZmluYWwgcGFjayBmaWxlICovCiAJdW5zaWduZWQgbG9uZyBzaXplOwkvKiB1bmNvbXByZXNzZWQgc2l6ZSAqLwotCW9mZl90IG9mZnNldDsJLyogb2Zmc2V0IGludG8gdGhlIGZpbmFsIHBhY2sgZmlsZTsKLQkJCQkgKiBub256ZXJvIGlmIGFscmVhZHkgd3JpdHRlbi4KLQkJCQkgKi8KLQl1bnNpZ25lZCBpbnQgZGVwdGg7CS8qIGRlbHRhIGRlcHRoICovCi0JdW5zaWduZWQgaW50IGRlbHRhX2xpbWl0OwkvKiBiYXNlIGFkanVzdG1lbnQgZm9yIGluLXBhY2sgZGVsdGEgKi8KIAl1bnNpZ25lZCBpbnQgaGFzaDsJLyogbmFtZSBoaW50IGhhc2ggKi8KLQllbnVtIG9iamVjdF90eXBlIHR5cGU7Ci0JZW51bSBvYmplY3RfdHlwZSBpbl9wYWNrX3R5cGU7CS8qIGNvdWxkIGJlIGRlbHRhICovCi0JdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplOwkvKiBkZWx0YSBkYXRhIHNpemUgKHVuY29tcHJlc3NlZCkgKi8KLSNkZWZpbmUgaW5fcGFja19oZWFkZXJfc2l6ZSBkZWx0YV9zaXplCS8qIG9ubHkgd2hlbiByZXVzaW5nIHBhY2sgZGF0YSAqLwotCXN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhOwkvKiBkZWx0YSBiYXNlIG9iamVjdCAqLworCXVuc2lnbmVkIGludCBkZXB0aDsJLyogZGVsdGEgZGVwdGggKi8KIAlzdHJ1Y3QgcGFja2VkX2dpdCAqaW5fcGFjazsgCS8qIGFscmVhZHkgaW4gcGFjayAqLwogCW9mZl90IGluX3BhY2tfb2Zmc2V0OworCXN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhOwkvKiBkZWx0YSBiYXNlIG9iamVjdCAqLwogCXN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhX2NoaWxkOyAvKiBkZWx0aWZpZWQgb2JqZWN0cyB3aG8gYmFzZXMgbWUgKi8KIAlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YV9zaWJsaW5nOyAvKiBvdGhlciBkZWx0aWZpZWQgb2JqZWN0cyB3aG8KIAkJCQkJICAgICAqIHVzZXMgdGhlIHNhbWUgYmFzZSBhcyBtZQogCQkJCQkgICAgICovCi0JaW50IHByZWZlcnJlZF9iYXNlOwkvKiB3ZSBkbyBub3QgcGFjayB0aGlzLCBidXQgaXMgZW5jb3VyYWdlZCB0bwotCQkJCSAqIGJlIHVzZWQgYXMgdGhlIGJhc2Ugb2JqZWN0dG8gZGVsdGEgaHVnZQotCQkJCSAqIG9iamVjdHMgYWdhaW5zdC4KLQkJCQkgKi8KKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemU7CS8qIGRlbHRhIGRhdGEgc2l6ZSAodW5jb21wcmVzc2VkKSAqLworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwllbnVtIG9iamVjdF90eXBlIGluX3BhY2tfdHlwZTsJLyogY291bGQgYmUgZGVsdGEgKi8KKwl1bnNpZ25lZCBjaGFyIGluX3BhY2tfaGVhZGVyX3NpemU7CisJdW5zaWduZWQgY2hhciBwcmVmZXJyZWRfYmFzZTsgLyogd2UgZG8gbm90IHBhY2sgdGhpcywgYnV0IGlzIGF2YWlsYWJsZQorCQkJCSAgICAgICAqIHRvIGJlIHVzZWQgYXMgdGhlIGJhc2Ugb2JqZWN0dG8gZGVsdGEKKwkJCQkgICAgICAgKiBvYmplY3RzIGFnYWluc3QuCisJCQkJICAgICAgICovCiB9OwogCiAvKgpAQCAtNTEsMzYgKzUwLDI3IEBACiAgKiBleHBhbmRlZCkuICBucl9vYmplY3RzICYgbnJfYWxsb2MgY29udHJvbHMgdGhpcyBhcnJheS4gIFRoZXkgYXJlIHN0b3JlZAogICogaW4gdGhlIG9yZGVyIHdlIHNlZSAtLSB0eXBpY2FsbHkgcmV2LWxpc3QgLS1vYmplY3RzIG9yZGVyIHRoYXQgZ2l2ZXMgdXMKICAqIG5pY2UgIm1pbmltdW0gc2VlayIgb3JkZXIuCi0gKgotICogc29ydGVkLWJ5LXNoYSBhbnMgc29ydGVkLWJ5LXR5cGUgYXJlIGFycmF5cyBvZiBwb2ludGVycyB0aGF0IHBvaW50IGF0Ci0gKiBlbGVtZW50cyBpbiB0aGUgb2JqZWN0cyBhcnJheS4gIFRoZSBmb3JtZXIgaXMgdXNlZCB0byBidWlsZCB0aGUgcGFjawotICogaW5kZXggKGxpc3RzIG9iamVjdCBuYW1lcyBpbiB0aGUgYXNjZW5kaW5nIG9yZGVyIHRvIGhlbHAgb2Zmc2V0IGxvb2t1cCksCi0gKiBhbmQgdGhlIGxhdHRlciBpcyB1c2VkIHRvIGdyb3VwIHNpbWlsYXIgdGhpbmdzIHRvZ2V0aGVyIGJ5IHRyeV9kZWx0YSgpCi0gKiBoZXVyaXN0aWNzLgogICovCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0czsKK3N0YXRpYyB1aW50MzJfdCBucl9vYmplY3RzLCBucl9hbGxvYywgbnJfcmVzdWx0OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBvYmplY3RfbGlzdF9zaGExWzIwXTsKIHN0YXRpYyBpbnQgbm9uX2VtcHR5Owogc3RhdGljIGludCBub19yZXVzZV9kZWx0YTsKIHN0YXRpYyBpbnQgbG9jYWw7CiBzdGF0aWMgaW50IGluY3JlbWVudGFsOwogc3RhdGljIGludCBhbGxvd19vZnNfZGVsdGE7Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqc29ydGVkX2J5X3NoYSwgKipzb3J0ZWRfYnlfdHlwZTsKLXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmplY3RzOwotc3RhdGljIHVpbnQzMl90IG5yX29iamVjdHMsIG5yX2FsbG9jLCBucl9yZXN1bHQ7Ci1zdGF0aWMgY29uc3QgY2hhciAqYmFzZV9uYW1lOworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfdG1wX25hbWUsICppZHhfdG1wX25hbWU7CitzdGF0aWMgY2hhciB0bXBuYW1lW1BBVEhfTUFYXTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBhY2tfZmlsZV9zaGExWzIwXTsKIHN0YXRpYyBpbnQgcHJvZ3Jlc3MgPSAxOwotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9ncmVzc191cGRhdGU7CiBzdGF0aWMgaW50IHdpbmRvdyA9IDEwOwogc3RhdGljIGludCBwYWNrX3RvX3N0ZG91dDsKIHN0YXRpYyBpbnQgbnVtX3ByZWZlcnJlZF9iYXNlOworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyBwcm9ncmVzc19zdGF0ZTsKIAogLyoKICAqIFRoZSBvYmplY3QgbmFtZXMgaW4gb2JqZWN0cyBhcnJheSBhcmUgaGFzaGVkIHdpdGggdGhpcyBoYXNodGFibGUsCi0gKiB0byBoZWxwIGxvb2tpbmcgdXAgdGhlIGVudHJ5IGJ5IG9iamVjdCBuYW1lLiAgQmluYXJ5IHNlYXJjaCBmcm9tCi0gKiBzb3J0ZWRfYnlfc2hhIGlzIGFsc28gcG9zc2libGUgYnV0IHRoaXMgd2FzIGVhc2llciB0byBjb2RlIGFuZCBmYXN0ZXIuCisgKiB0byBoZWxwIGxvb2tpbmcgdXAgdGhlIGVudHJ5IGJ5IG9iamVjdCBuYW1lLgogICogVGhpcyBoYXNodGFibGUgaXMgYnVpbHQgYWZ0ZXIgYWxsIHRoZSBvYmplY3RzIGFyZSBzZWVuLgogICovCiBzdGF0aWMgaW50ICpvYmplY3RfaXg7CkBAIC0xNjQsMTcgKzE1NCwzNyBAQAogc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrX3JldmluZGV4KHN0cnVjdCBwYWNrX3JldmluZGV4ICpyaXgpCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnAgPSByaXgtPnA7Ci0JaW50IG51bV9lbnQgPSBudW1fcGFja2VkX29iamVjdHMocCk7CisJaW50IG51bV9lbnQgPSBwLT5udW1fb2JqZWN0czsKIAlpbnQgaTsKIAljb25zdCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CiAKLQlpbmRleCArPSA0ICogMjU2OwogCXJpeC0+cmV2aW5kZXggPSB4bWFsbG9jKHNpemVvZigqcml4LT5yZXZpbmRleCkgKiAobnVtX2VudCArIDEpKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7Ci0JCXVpbnQzMl90IGhsID0gKigodWludDMyX3QgKikoaW5kZXggKyAyNCAqIGkpKTsKLQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgPSBudG9obChobCk7Ci0JCXJpeC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCWluZGV4ICs9IDQgKiAyNTY7CisKKwlpZiAocC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJY29uc3QgdWludDMyX3QgKm9mZl8zMiA9CisJCQkodWludDMyX3QgKikoaW5kZXggKyA4ICsgcC0+bnVtX29iamVjdHMgKiAoMjAgKyA0KSk7CisJCWNvbnN0IHVpbnQzMl90ICpvZmZfNjQgPSBvZmZfMzIgKyBwLT5udW1fb2JqZWN0czsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJdWludDMyX3Qgb2ZmID0gbnRvaGwoKm9mZl8zMisrKTsKKwkJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKSB7CisJCQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgPSBvZmY7CisJCQl9IGVsc2UgeworCQkJCXJpeC0+cmV2aW5kZXhbaV0ub2Zmc2V0ID0KKwkJCQkJKCh1aW50NjRfdCludG9obCgqb2ZmXzY0KyspKSA8PCAzMjsKKwkJCQlyaXgtPnJldmluZGV4W2ldLm9mZnNldCB8PQorCQkJCQludG9obCgqb2ZmXzY0KyspOworCQkJfQorCQkJcml4LT5yZXZpbmRleFtpXS5uciA9IGk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7CisJCQl1aW50MzJfdCBobCA9ICooKHVpbnQzMl90ICopKGluZGV4ICsgMjQgKiBpKSk7CisJCQlyaXgtPnJldmluZGV4W2ldLm9mZnNldCA9IG50b2hsKGhsKTsKKwkJCXJpeC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCQl9CiAJfQorCiAJLyogVGhpcyBrbm93cyB0aGUgcGFjayBmb3JtYXQgLS0gdGhlIDIwLWJ5dGUgdHJhaWxlcgogCSAqIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGxhc3Qgb2JqZWN0IGRhdGEuCiAJICovCkBAIC0xOTgsNyArMjA4LDcgQEAKIAkJcHJlcGFyZV9wYWNrX3JldmluZGV4KHJpeCk7CiAJcmV2aW5kZXggPSByaXgtPnJldmluZGV4OwogCWxvID0gMDsKLQloaSA9IG51bV9wYWNrZWRfb2JqZWN0cyhwKSArIDE7CisJaGkgPSBwLT5udW1fb2JqZWN0cyArIDE7CiAJZG8gewogCQlpbnQgbWkgPSAobG8gKyBoaSkgLyAyOwogCQlpZiAocmV2aW5kZXhbbWldLm9mZnNldCA9PSBvZnMpIHsKQEAgLTIxMiwxNyArMjIyLDExIEBACiAJZGllKCJpbnRlcm5hbCBlcnJvcjogcGFjayByZXZpbmRleCBjb3JydXB0Iik7CiB9CiAKLXN0YXRpYyBvZmZfdCBmaW5kX3BhY2tlZF9vYmplY3Rfc2l6ZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2ZzKQotewotCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqZW50cnkgPSBmaW5kX3BhY2tlZF9vYmplY3QocCwgb2ZzKTsKLQlyZXR1cm4gZW50cnlbMV0ub2Zmc2V0IC0gb2ZzOwotfQotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqZmluZF9wYWNrZWRfb2JqZWN0X25hbWUoc3RydWN0IHBhY2tlZF9naXQgKnAsCiAJCQkJCQkgICAgb2ZmX3Qgb2ZzKQogewogCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqZW50cnkgPSBmaW5kX3BhY2tlZF9vYmplY3QocCwgb2ZzKTsKLQlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopcC0+aW5kZXhfZGF0YSkgKyA0ICogMjU2ICsgMjQgKiBlbnRyeS0+bnIgKyA0OworCXJldHVybiBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGVudHJ5LT5ucik7CiB9CiAKIHN0YXRpYyB2b2lkICpkZWx0YV9hZ2FpbnN0KHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKQEAgLTMwMCw2ICszMDQsMjggQEAKIAkJc3RyZWFtLnRvdGFsX2luID09IGxlbikgPyAwIDogLTE7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfcGFja19jcmMoc3RydWN0IHBhY2tlZF9naXQgKnAsIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJCSAgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBsZW4sIHVuc2lnbmVkIGludCBucikKK3sKKwljb25zdCB1aW50MzJfdCAqaW5kZXhfY3JjOworCXVpbnQzMl90IGRhdGFfY3JjID0gY3JjMzIoMCwgWl9OVUxMLCAwKTsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IGF2YWlsOworCQl2b2lkICpkYXRhID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZhdmFpbCk7CisJCWlmIChhdmFpbCA+IGxlbikKKwkJCWF2YWlsID0gbGVuOworCQlkYXRhX2NyYyA9IGNyYzMyKGRhdGFfY3JjLCBkYXRhLCBhdmFpbCk7CisJCW9mZnNldCArPSBhdmFpbDsKKwkJbGVuIC09IGF2YWlsOworCX0gd2hpbGUgKGxlbik7CisKKwlpbmRleF9jcmMgPSBwLT5pbmRleF9kYXRhOworCWluZGV4X2NyYyArPSAyICsgMjU2ICsgcC0+bnVtX29iamVjdHMgKiAoMjAvNCkgKyBucjsKKworCXJldHVybiBkYXRhX2NyYyAhPSBudG9obCgqaW5kZXhfY3JjKTsKK30KKwogc3RhdGljIHZvaWQgY29weV9wYWNrX2RhdGEoc3RydWN0IHNoYTFmaWxlICpmLAogCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKIAkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLApAQCAtMzY5LDcgKzM5NSw3IEBACiAJcmV0dXJuIGNoZWNrX2xvb3NlX2luZmxhdGUobWFwLCBtYXBzaXplLCBzaXplKTsKIH0KIAotc3RhdGljIG9mZl90IHdyaXRlX29iamVjdChzdHJ1Y3Qgc2hhMWZpbGUgKmYsCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9vYmplY3Qoc3RydWN0IHNoYTFmaWxlICpmLAogCQkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwpAQCAtMzgxLDYgKzQwNyw5IEBACiAJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsKIAlpbnQgdG9fcmV1c2UgPSAwOwogCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJY3JjMzJfYmVnaW4oZik7CisKIAlvYmpfdHlwZSA9IGVudHJ5LT50eXBlOwogCWlmICghIGVudHJ5LT5pbl9wYWNrKQogCQl0b19yZXVzZSA9IDA7CS8qIGNhbid0IHJldXNlIHdoYXQgd2UgZG9uJ3QgaGF2ZSAqLwpAQCAtNDYxLDYgKzQ5MCw3IEBACiAJZWxzZSB7CiAJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZW50cnktPmluX3BhY2s7CiAJCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CiAJCW9mZl90IG9mZnNldDsKIAogCQlpZiAoZW50cnktPmRlbHRhKSB7CkBAIC00ODMsMTIgKzUxMywxNyBAQAogCQkJaGRybGVuICs9IDIwOwogCQl9CiAKLQkJb2Zmc2V0ID0gZW50cnktPmluX3BhY2tfb2Zmc2V0ICsgZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemU7Ci0JCWRhdGFsZW4gPSBmaW5kX3BhY2tlZF9vYmplY3Rfc2l6ZShwLCBlbnRyeS0+aW5fcGFja19vZmZzZXQpCi0JCQkJLSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKLQkJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiBjaGVja19wYWNrX2luZmxhdGUocCwgJndfY3VycywKLQkJCQlvZmZzZXQsIGRhdGFsZW4sIGVudHJ5LT5zaXplKSkKLQkJCWRpZSgiY29ycnVwdCBkZWx0YSBpbiBwYWNrICVzIiwgc2hhMV90b19oZXgoZW50cnktPnNoYTEpKTsKKwkJb2Zmc2V0ID0gZW50cnktPmluX3BhY2tfb2Zmc2V0OworCQlyZXZpZHggPSBmaW5kX3BhY2tlZF9vYmplY3QocCwgb2Zmc2V0KTsKKwkJZGF0YWxlbiA9IHJldmlkeFsxXS5vZmZzZXQgLSBvZmZzZXQ7CisJCWlmICghcGFja190b19zdGRvdXQgJiYgcC0+aW5kZXhfdmVyc2lvbiA+IDEgJiYKKwkJICAgIGNoZWNrX3BhY2tfY3JjKHAsICZ3X2N1cnMsIG9mZnNldCwgZGF0YWxlbiwgcmV2aWR4LT5ucikpCisJCQlkaWUoImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiLCBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOworCQlvZmZzZXQgKz0gZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemU7CisJCWRhdGFsZW4gLT0gZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemU7CisJCWlmICghcGFja190b19zdGRvdXQgJiYgcC0+aW5kZXhfdmVyc2lvbiA9PSAxICYmCisJCSAgICBjaGVja19wYWNrX2luZmxhdGUocCwgJndfY3Vycywgb2Zmc2V0LCBkYXRhbGVuLCBlbnRyeS0+c2l6ZSkpCisJCQlkaWUoImNvcnJ1cHQgcGFja2VkIG9iamVjdCBmb3IgJXMiLCBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOwogCQljb3B5X3BhY2tfZGF0YShmLCBwLCAmd19jdXJzLCBvZmZzZXQsIGRhdGFsZW4pOwogCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOwogCQlyZXVzZWQrKzsKQEAgLTQ5Niw2ICs1MzEsOCBAQAogCWlmIChlbnRyeS0+ZGVsdGEpCiAJCXdyaXR0ZW5fZGVsdGErKzsKIAl3cml0dGVuKys7CisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJZW50cnktPmNyYzMyID0gY3JjMzJfZW5kKGYpOwogCXJldHVybiBoZHJsZW4gKyBkYXRhbGVuOwogfQogCkBAIC01MDMsMzYgKzU0MCw0OCBAQAogCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCiAJCQkgICAgICAgb2ZmX3Qgb2Zmc2V0KQogeworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCS8qIG9mZnNldCBpcyBub24gemVybyBpZiBvYmplY3QgaXMgd3JpdHRlbiBhbHJlYWR5LiAqLwogCWlmIChlLT5vZmZzZXQgfHwgZS0+cHJlZmVycmVkX2Jhc2UpCi0JCS8qIG9mZnNldCBzdGFydHMgZnJvbSBoZWFkZXIgc2l6ZSBhbmQgY2Fubm90IGJlIHplcm8KLQkJICogaWYgaXQgaXMgd3JpdHRlbiBhbHJlYWR5LgotCQkgKi8KIAkJcmV0dXJuIG9mZnNldDsKLQkvKiBpZiB3ZSBhcmUgZGVsdGlmaWVkLCB3cml0ZSBvdXQgaXRzIGJhc2Ugb2JqZWN0IGZpcnN0LiAqLworCisJLyogaWYgd2UgYXJlIGRlbHRpZmllZCwgd3JpdGUgb3V0IGJhc2Ugb2JqZWN0IGZpcnN0LiAqLwogCWlmIChlLT5kZWx0YSkKIAkJb2Zmc2V0ID0gd3JpdGVfb25lKGYsIGUtPmRlbHRhLCBvZmZzZXQpOworCiAJZS0+b2Zmc2V0ID0gb2Zmc2V0OwotCXJldHVybiBvZmZzZXQgKyB3cml0ZV9vYmplY3QoZiwgZSk7CisJc2l6ZSA9IHdyaXRlX29iamVjdChmLCBlKTsKKworCS8qIG1ha2Ugc3VyZSBvZmZfdCBpcyBzdWZmaWNpZW50bHkgbGFyZ2Ugbm90IHRvIHdyYXAgKi8KKwlpZiAob2Zmc2V0ID4gb2Zmc2V0ICsgc2l6ZSkKKwkJZGllKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90Iik7CisJcmV0dXJuIG9mZnNldCArIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlX3BhY2tfZmlsZSh2b2lkKQorc3RhdGljIG9mZl90IHdyaXRlX3BhY2tfZmlsZSh2b2lkKQogewogCXVpbnQzMl90IGk7CiAJc3RydWN0IHNoYTFmaWxlICpmOwotCW9mZl90IG9mZnNldDsKKwlvZmZfdCBvZmZzZXQsIGxhc3Rfb2JqX29mZnNldCA9IDA7CiAJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKLQl1bnNpZ25lZCBsYXN0X3BlcmNlbnQgPSA5OTk7CiAJaW50IGRvX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CiAKLQlpZiAoIWJhc2VfbmFtZSkgeworCWlmIChwYWNrX3RvX3N0ZG91dCkgewogCQlmID0gc2hhMWZkKDEsICI8c3Rkb3V0PiIpOwogCQlkb19wcm9ncmVzcyA+Pj0gMTsKKwl9IGVsc2UgeworCQlpbnQgZmQ7CisJCXNucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgInRtcF9wYWNrX1hYWFhYWCIpOworCQlmZCA9IG1rc3RlbXAodG1wbmFtZSk7CisJCWlmIChmZCA8IDApCisJCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgJXM6ICVzXG4iLCB0bXBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlwYWNrX3RtcF9uYW1lID0geHN0cmR1cCh0bXBuYW1lKTsKKwkJZiA9IHNoYTFmZChmZCwgcGFja190bXBfbmFtZSk7CiAJfQotCWVsc2UKLQkJZiA9IHNoYTFjcmVhdGUoIiVzLSVzLiVzIiwgYmFzZV9uYW1lLAotCQkJICAgICAgIHNoYTFfdG9faGV4KG9iamVjdF9saXN0X3NoYTEpLCAicGFjayIpOworCiAJaWYgKGRvX3Byb2dyZXNzKQotCQlmcHJpbnRmKHN0ZGVyciwgIldyaXRpbmcgJXUgb2JqZWN0cy5cbiIsIG5yX3Jlc3VsdCk7CisJCXN0YXJ0X3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSwgIldyaXRpbmcgJXUgb2JqZWN0cy4uLiIsICIiLCBucl9yZXN1bHQpOwogCiAJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChQQUNLX1NJR05BVFVSRSk7CiAJaGRyLmhkcl92ZXJzaW9uID0gaHRvbmwoUEFDS19WRVJTSU9OKTsKQEAgLTU0MiwzMyArNTkxLDcyIEBACiAJaWYgKCFucl9yZXN1bHQpCiAJCWdvdG8gZG9uZTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWxhc3Rfb2JqX29mZnNldCA9IG9mZnNldDsKIAkJb2Zmc2V0ID0gd3JpdGVfb25lKGYsIG9iamVjdHMgKyBpLCBvZmZzZXQpOwotCQlpZiAoZG9fcHJvZ3Jlc3MpIHsKLQkJCXVuc2lnbmVkIHBlcmNlbnQgPSB3cml0dGVuICogMTAwIC8gbnJfcmVzdWx0OwotCQkJaWYgKHByb2dyZXNzX3VwZGF0ZSB8fCBwZXJjZW50ICE9IGxhc3RfcGVyY2VudCkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCV1LyV1KSBkb25lXHIiLAotCQkJCQlwZXJjZW50LCB3cml0dGVuLCBucl9yZXN1bHQpOwotCQkJCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JCQkJbGFzdF9wZXJjZW50ID0gcGVyY2VudDsKLQkJCX0KLQkJfQorCQlpZiAoZG9fcHJvZ3Jlc3MpCisJCQlkaXNwbGF5X3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSwgd3JpdHRlbik7CiAJfQogCWlmIChkb19wcm9ncmVzcykKLQkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOwogIGRvbmU6CiAJaWYgKHdyaXR0ZW4gIT0gbnJfcmVzdWx0KQogCQlkaWUoIndyb3RlICV1IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICV1Iiwgd3JpdHRlbiwgbnJfcmVzdWx0KTsKIAlzaGExY2xvc2UoZiwgcGFja19maWxlX3NoYTEsIDEpOworCisJcmV0dXJuIGxhc3Rfb2JqX29mZnNldDsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVfaW5kZXhfZmlsZSh2b2lkKQorc3RhdGljIGludCBzaGExX3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQogewotCXVpbnQzMl90IGk7Ci0Jc3RydWN0IHNoYTFmaWxlICpmID0gc2hhMWNyZWF0ZSgiJXMtJXMuJXMiLCBiYXNlX25hbWUsCi0JCQkJCXNoYTFfdG9faGV4KG9iamVjdF9saXN0X3NoYTEpLCAiaWR4Iik7Ci0Jc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QgPSBzb3J0ZWRfYnlfc2hhOwotCXN0cnVjdCBvYmplY3RfZW50cnkgKipsYXN0ID0gbGlzdCArIG5yX3Jlc3VsdDsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICphID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9hOworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmIgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2I7CisJcmV0dXJuIGhhc2hjbXAoYS0+c2hhMSwgYi0+c2hhMSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBpbmRleF9kZWZhdWx0X3ZlcnNpb24gPSAxOworc3RhdGljIHVpbnQzMl90IGluZGV4X29mZjMyX2xpbWl0ID0gMHg3ZmZmZmZmZjsKKworc3RhdGljIHZvaWQgd3JpdGVfaW5kZXhfZmlsZShvZmZfdCBsYXN0X29ial9vZmZzZXQsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHNoYTFmaWxlICpmOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipzb3J0ZWRfYnlfc2hhLCAqKmxpc3QsICoqbGFzdDsKIAl1aW50MzJfdCBhcnJheVsyNTZdOworCXVpbnQzMl90IGksIGluZGV4X3ZlcnNpb247CisJU0hBX0NUWCBjdHg7CisJaW50IGZkOworCisJc25wcmludGYodG1wbmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAidG1wX2lkeF9YWFhYWFgiKTsKKwlmZCA9IG1rc3RlbXAodG1wbmFtZSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICVzOiAlc1xuIiwgdG1wbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZHhfdG1wX25hbWUgPSB4c3RyZHVwKHRtcG5hbWUpOworCWYgPSBzaGExZmQoZmQsIGlkeF90bXBfbmFtZSk7CisKKwlpZiAobnJfcmVzdWx0KSB7CisJCXVpbnQzMl90IGogPSAwOworCQlzb3J0ZWRfYnlfc2hhID0KKwkJCXhjYWxsb2MobnJfcmVzdWx0LCBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSAqKSk7CisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspCisJCQlpZiAoIW9iamVjdHNbaV0ucHJlZmVycmVkX2Jhc2UpCisJCQkJc29ydGVkX2J5X3NoYVtqKytdID0gb2JqZWN0cyArIGk7CisJCWlmIChqICE9IG5yX3Jlc3VsdCkKKwkJCWRpZSgibGlzdGVkICV1IG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICV1IiwgaiwgbnJfcmVzdWx0KTsKKwkJcXNvcnQoc29ydGVkX2J5X3NoYSwgbnJfcmVzdWx0LCBzaXplb2YoKnNvcnRlZF9ieV9zaGEpLCBzaGExX3NvcnQpOworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJbGFzdCA9IHNvcnRlZF9ieV9zaGEgKyBucl9yZXN1bHQ7CisJfSBlbHNlCisJCXNvcnRlZF9ieV9zaGEgPSBsaXN0ID0gbGFzdCA9IE5VTEw7CisKKwkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KKwlpbmRleF92ZXJzaW9uID0gKGxhc3Rfb2JqX29mZnNldCA+PiAzMSkgPyAyIDogaW5kZXhfZGVmYXVsdF92ZXJzaW9uOworCisJLyogaW5kZXggdmVyc2lvbnMgMiBhbmQgYWJvdmUgbmVlZCBhIGhlYWRlciAqLworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJc3RydWN0IHBhY2tfaWR4X2hlYWRlciBoZHI7CisJCWhkci5pZHhfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKTsKKwkJaGRyLmlkeF92ZXJzaW9uID0gaHRvbmwoaW5kZXhfdmVyc2lvbik7CisJCXNoYTF3cml0ZShmLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJfQogCiAJLyoKIAkgKiBXcml0ZSB0aGUgZmlyc3QtbGV2ZWwgdGFibGUgKHRoZSBsaXN0IGlzIHNvcnRlZCwKQEAgLTU4OCwxOCArNjc2LDYxIEBACiAJfQogCXNoYTF3cml0ZShmLCBhcnJheSwgMjU2ICogNCk7CiAKLQkvKgotCSAqIFdyaXRlIHRoZSBhY3R1YWwgU0hBMSBlbnRyaWVzLi4KLQkgKi8KKwkvKiBDb21wdXRlIHRoZSBTSEExIGhhc2ggb2Ygc29ydGVkIG9iamVjdCBuYW1lcy4gKi8KKwlTSEExX0luaXQoJmN0eCk7CisKKwkvKiBXcml0ZSB0aGUgYWN0dWFsIFNIQTEgZW50cmllcy4gKi8KIAlsaXN0ID0gc29ydGVkX2J5X3NoYTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcmVzdWx0OyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSAqbGlzdCsrOwotCQl1aW50MzJfdCBvZmZzZXQgPSBodG9ubChlbnRyeS0+b2Zmc2V0KTsKLQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQlpZiAoaW5kZXhfdmVyc2lvbiA8IDIpIHsKKwkJCXVpbnQzMl90IG9mZnNldCA9IGh0b25sKGVudHJ5LT5vZmZzZXQpOworCQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQl9CiAJCXNoYTF3cml0ZShmLCBlbnRyeS0+c2hhMSwgMjApOworCQlTSEExX1VwZGF0ZSgmY3R4LCBlbnRyeS0+c2hhMSwgMjApOwogCX0KKworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJdW5zaWduZWQgaW50IG5yX2xhcmdlX29mZnNldCA9IDA7CisKKwkJLyogd3JpdGUgdGhlIGNyYzMyIHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9ICpsaXN0Kys7CisJCQl1aW50MzJfdCBjcmMzMl92YWwgPSBodG9ubChlbnRyeS0+Y3JjMzIpOworCQkJc2hhMXdyaXRlKGYsICZjcmMzMl92YWwsIDQpOworCQl9CisKKwkJLyogd3JpdGUgdGhlIDMyLWJpdCBvZmZzZXQgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKmxpc3QrKzsKKwkJCXVpbnQzMl90IG9mZnNldCA9IChlbnRyeS0+b2Zmc2V0IDw9IGluZGV4X29mZjMyX2xpbWl0KSA/CisJCQkJZW50cnktPm9mZnNldCA6ICgweDgwMDAwMDAwIHwgbnJfbGFyZ2Vfb2Zmc2V0KyspOworCQkJb2Zmc2V0ID0gaHRvbmwob2Zmc2V0KTsKKwkJCXNoYTF3cml0ZShmLCAmb2Zmc2V0LCA0KTsKKwkJfQorCisJCS8qIHdyaXRlIHRoZSBsYXJnZSBvZmZzZXQgdGFibGUgKi8KKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCXdoaWxlIChucl9sYXJnZV9vZmZzZXQpIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKmxpc3QrKzsKKwkJCXVpbnQ2NF90IG9mZnNldCA9IGVudHJ5LT5vZmZzZXQ7CisJCQlpZiAob2Zmc2V0ID4gaW5kZXhfb2ZmMzJfbGltaXQpIHsKKwkJCQl1aW50MzJfdCBzcGxpdFsyXTsKKwkJCQlzcGxpdFswXSAgICAgICAgPSBodG9ubChvZmZzZXQgPj4gMzIpOworCQkJCXNwbGl0WzFdID0gaHRvbmwob2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQkJc2hhMXdyaXRlKGYsIHNwbGl0LCA4KTsKKwkJCQlucl9sYXJnZV9vZmZzZXQtLTsKKwkJCX0KKwkJfQorCX0KKwogCXNoYTF3cml0ZShmLCBwYWNrX2ZpbGVfc2hhMSwgMjApOwogCXNoYTFjbG9zZShmLCBOVUxMLCAxKTsKKwlmcmVlKHNvcnRlZF9ieV9zaGEpOworCVNIQTFfRmluYWwoc2hhMSwgJmN0eCk7CiB9CiAKIHN0YXRpYyBpbnQgbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC02NjcsNjcgKzc5OCw3MCBAQAogCXJldHVybiBoYXNoOwogfQogCi1zdGF0aWMgaW50IGFkZF9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgaGFzaCwgaW50IGV4Y2x1ZGUpCitzdGF0aWMgaW50IGFkZF9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgIHVuc2lnbmVkIGhhc2gsIGludCBleGNsdWRlKQogewotCXVpbnQzMl90IGlkeCA9IG5yX29iamVjdHM7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHBhY2tlZF9naXQgKnA7CisJc3RydWN0IHBhY2tlZF9naXQgKnAsICpmb3VuZF9wYWNrID0gTlVMTDsKIAlvZmZfdCBmb3VuZF9vZmZzZXQgPSAwOwotCXN0cnVjdCBwYWNrZWRfZ2l0ICpmb3VuZF9wYWNrID0gTlVMTDsKLQlpbnQgaXgsIHN0YXR1cyA9IDA7CisJaW50IGl4OwogCi0JaWYgKCFleGNsdWRlKSB7Ci0JCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCQlvZmZfdCBvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApOwotCQkJaWYgKG9mZnNldCkgewotCQkJCWlmIChpbmNyZW1lbnRhbCkKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJaWYgKGxvY2FsICYmICFwLT5wYWNrX2xvY2FsKQotCQkJCQlyZXR1cm4gMDsKLQkJCQlpZiAoIWZvdW5kX3BhY2spIHsKLQkJCQkJZm91bmRfb2Zmc2V0ID0gb2Zmc2V0OwotCQkJCQlmb3VuZF9wYWNrID0gcDsKLQkJCQl9CisJaXggPSBucl9vYmplY3RzID8gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKHNoYTEpIDogLTE7CisJaWYgKGl4ID49IDApIHsKKwkJaWYgKGV4Y2x1ZGUpIHsKKwkJCWVudHJ5ID0gb2JqZWN0cyArIG9iamVjdF9peFtpeF0gLSAxOworCQkJaWYgKCFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpCisJCQkJbnJfcmVzdWx0LS07CisJCQllbnRyeS0+cHJlZmVycmVkX2Jhc2UgPSAxOworCQl9CisJCXJldHVybiAwOworCX0KKworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCW9mZl90IG9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUoc2hhMSwgcCk7CisJCWlmIChvZmZzZXQpIHsKKwkJCWlmICghZm91bmRfcGFjaykgeworCQkJCWZvdW5kX29mZnNldCA9IG9mZnNldDsKKwkJCQlmb3VuZF9wYWNrID0gcDsKIAkJCX0KKwkJCWlmIChleGNsdWRlKQorCQkJCWJyZWFrOworCQkJaWYgKGluY3JlbWVudGFsKQorCQkJCXJldHVybiAwOworCQkJaWYgKGxvY2FsICYmICFwLT5wYWNrX2xvY2FsKQorCQkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICgoZW50cnkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5KHNoYTEpKSAhPSBOVUxMKQotCQlnb3RvIGFscmVhZHlfYWRkZWQ7CiAKLQlpZiAoaWR4ID49IG5yX2FsbG9jKSB7Ci0JCW5yX2FsbG9jID0gKGlkeCArIDEwMjQpICogMyAvIDI7CisJaWYgKG5yX29iamVjdHMgPj0gbnJfYWxsb2MpIHsKKwkJbnJfYWxsb2MgPSAobnJfYWxsb2MgICsgMTAyNCkgKiAzIC8gMjsKIAkJb2JqZWN0cyA9IHhyZWFsbG9jKG9iamVjdHMsIG5yX2FsbG9jICogc2l6ZW9mKCplbnRyeSkpOwogCX0KLQllbnRyeSA9IG9iamVjdHMgKyBpZHg7Ci0JbnJfb2JqZWN0cyA9IGlkeCArIDE7CisKKwllbnRyeSA9IG9iamVjdHMgKyBucl9vYmplY3RzKys7CiAJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CiAJaGFzaGNweShlbnRyeS0+c2hhMSwgc2hhMSk7CiAJZW50cnktPmhhc2ggPSBoYXNoOworCWlmICh0eXBlKQorCQllbnRyeS0+dHlwZSA9IHR5cGU7CisJaWYgKGV4Y2x1ZGUpCisJCWVudHJ5LT5wcmVmZXJyZWRfYmFzZSA9IDE7CisJZWxzZQorCQlucl9yZXN1bHQrKzsKKwlpZiAoZm91bmRfcGFjaykgeworCQllbnRyeS0+aW5fcGFjayA9IGZvdW5kX3BhY2s7CisJCWVudHJ5LT5pbl9wYWNrX29mZnNldCA9IGZvdW5kX29mZnNldDsKKwl9CiAKIAlpZiAob2JqZWN0X2l4X2hhc2hzeiAqIDMgPD0gbnJfb2JqZWN0cyAqIDQpCiAJCXJlaGFzaF9vYmplY3RzKCk7Ci0JZWxzZSB7Ci0JCWl4ID0gbG9jYXRlX29iamVjdF9lbnRyeV9oYXNoKGVudHJ5LT5zaGExKTsKLQkJaWYgKDAgPD0gaXgpCi0JCQlkaWUoImludGVybmFsIGVycm9yIGluIG9iamVjdCBoYXNoaW5nLiIpOwotCQlvYmplY3RfaXhbLTEgLSBpeF0gPSBpZHggKyAxOwotCX0KLQlzdGF0dXMgPSAxOworCWVsc2UKKwkJb2JqZWN0X2l4Wy0xIC0gaXhdID0gbnJfb2JqZWN0czsKIAotIGFscmVhZHlfYWRkZWQ6Ci0JaWYgKHByb2dyZXNzX3VwZGF0ZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIkNvdW50aW5nIG9iamVjdHMuLi4ldVxyIiwgbnJfb2JqZWN0cyk7Ci0JCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JfQotCWlmIChleGNsdWRlKQotCQllbnRyeS0+cHJlZmVycmVkX2Jhc2UgPSAxOwotCWVsc2UgewotCQlpZiAoZm91bmRfcGFjaykgewotCQkJZW50cnktPmluX3BhY2sgPSBmb3VuZF9wYWNrOwotCQkJZW50cnktPmluX3BhY2tfb2Zmc2V0ID0gZm91bmRfb2Zmc2V0OwotCQl9Ci0JfQotCXJldHVybiBzdGF0dXM7CisJaWYgKHByb2dyZXNzKQorCQlkaXNwbGF5X3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSwgbnJfb2JqZWN0cyk7CisKKwlyZXR1cm4gMTsKIH0KIAogc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgewpAQCAtODQ5LDIyICs5ODMsMjMgQEAKIAkJCSAgICAgY29uc3QgY2hhciAqZnVsbG5hbWUpCiB7CiAJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNtcDsKIAogCXdoaWxlICh0cmVlX2VudHJ5KHRyZWUsJmVudHJ5KSkgewotCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKLQotCQlpZiAodHJlZV9lbnRyeV9sZW4oZW50cnkucGF0aCwgZW50cnkuc2hhMSkgIT0gY21wbGVuIHx8Ci0JCSAgICBtZW1jbXAoZW50cnkucGF0aCwgbmFtZSwgY21wbGVuKSB8fAotCQkgICAgIWhhc19zaGExX2ZpbGUoZW50cnkuc2hhMSkgfHwKLQkJICAgICh0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhlbnRyeS5zaGExLCAmc2l6ZSkpIDwgMCkKKwkJY21wID0gdHJlZV9lbnRyeV9sZW4oZW50cnkucGF0aCwgZW50cnkuc2hhMSkgIT0gY21wbGVuID8gMSA6CisJCSAgICAgIG1lbWNtcChuYW1lLCBlbnRyeS5wYXRoLCBjbXBsZW4pOworCQlpZiAoY21wID4gMCkKIAkJCWNvbnRpbnVlOworCQlpZiAoY21wIDwgMCkKKwkJCXJldHVybjsKIAkJaWYgKG5hbWVbY21wbGVuXSAhPSAnLycpIHsKIAkJCXVuc2lnbmVkIGhhc2ggPSBuYW1lX2hhc2goZnVsbG5hbWUpOwotCQkJYWRkX29iamVjdF9lbnRyeShlbnRyeS5zaGExLCBoYXNoLCAxKTsKKwkJCWFkZF9vYmplY3RfZW50cnkoZW50cnkuc2hhMSwKKwkJCQkJIFNfSVNESVIoZW50cnkubW9kZSkgPyBPQkpfVFJFRSA6IE9CSl9CTE9CLAorCQkJCQkgaGFzaCwgMSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKIAkJCXN0cnVjdCB0cmVlX2Rlc2Mgc3ViOwogCQkJc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKnRyZWU7CiAJCQljb25zdCBjaGFyICpkb3duID0gbmFtZStjbXBsZW4rMTsKQEAgLTkyNCwxNSArMTA1OSwxNSBAQAogc3RhdGljIHZvaWQgYWRkX3ByZWZlcnJlZF9iYXNlX29iamVjdChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBoYXNoKQogewogCXN0cnVjdCBwYmFzZV90cmVlICppdDsKLQlpbnQgY21wbGVuID0gbmFtZV9jbXBfbGVuKG5hbWUpOworCWludCBjbXBsZW47CiAKLQlpZiAoY2hlY2tfcGJhc2VfcGF0aChoYXNoKSkKKwlpZiAoIW51bV9wcmVmZXJyZWRfYmFzZSB8fCBjaGVja19wYmFzZV9wYXRoKGhhc2gpKQogCQlyZXR1cm47CiAKKwljbXBsZW4gPSBuYW1lX2NtcF9sZW4obmFtZSk7CiAJZm9yIChpdCA9IHBiYXNlX3RyZWU7IGl0OyBpdCA9IGl0LT5uZXh0KSB7CiAJCWlmIChjbXBsZW4gPT0gMCkgewotCQkJaGFzaCA9IG5hbWVfaGFzaCgiIik7Ci0JCQlhZGRfb2JqZWN0X2VudHJ5KGl0LT5wY2FjaGUuc2hhMSwgaGFzaCwgMSk7CisJCQlhZGRfb2JqZWN0X2VudHJ5KGl0LT5wY2FjaGUuc2hhMSwgT0JKX1RSRUUsIDAsIDEpOwogCQl9CiAJCWVsc2UgewogCQkJc3RydWN0IHRyZWVfZGVzYyB0cmVlOwpAQCAtOTc0LDg3ICsxMTA5LDEwNSBAQAogCiBzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCiB7Ci0JaWYgKGVudHJ5LT5pbl9wYWNrICYmICFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwlpZiAoZW50cnktPmluX3BhY2spIHsKIAkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBlbnRyeS0+aW5fcGFjazsKIAkJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOwotCQl1bnNpZ25lZCBsb25nIHNpemUsIHVzZWQ7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2VfcmVmID0gTlVMTDsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqYmFzZV9lbnRyeTsKKwkJdW5zaWduZWQgbG9uZyB1c2VkLCB1c2VkXzA7CiAJCXVuc2lnbmVkIGludCBhdmFpbDsKLQkJdW5zaWduZWQgY2hhciAqYnVmOwotCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiYXNlX2VudHJ5ID0gTlVMTDsKKwkJb2ZmX3Qgb2ZzOworCQl1bnNpZ25lZCBjaGFyICpidWYsIGM7CiAKIAkJYnVmID0gdXNlX3BhY2socCwgJndfY3VycywgZW50cnktPmluX3BhY2tfb2Zmc2V0LCAmYXZhaWwpOwogCi0JCS8qIFdlIHdhbnQgaW5fcGFja190eXBlIGV2ZW4gaWYgd2UgZG8gbm90IHJldXNlIGRlbHRhLgorCQkvKgorCQkgKiBXZSB3YW50IGluX3BhY2tfdHlwZSBldmVuIGlmIHdlIGRvIG5vdCByZXVzZSBkZWx0YS4KIAkJICogVGhlcmUgaXMgbm8gcG9pbnQgbm90IHJldXNpbmcgbm9uLWRlbHRhIHJlcHJlc2VudGF0aW9ucy4KIAkJICovCiAJCXVzZWQgPSB1bnBhY2tfb2JqZWN0X2hlYWRlcl9nZW50bHkoYnVmLCBhdmFpbCwKLQkJCQkJCSAgICZlbnRyeS0+aW5fcGFja190eXBlLCAmc2l6ZSk7CisJCQkJCQkgICAmZW50cnktPmluX3BhY2tfdHlwZSwKKwkJCQkJCSAgICZlbnRyeS0+c2l6ZSk7CiAKLQkJLyogQ2hlY2sgaWYgaXQgaXMgZGVsdGEsIGFuZCB0aGUgYmFzZSBpcyBhbHNvIGFuIG9iamVjdAotCQkgKiB3ZSBhcmUgZ29pbmcgdG8gcGFjay4gIElmIHNvIHdlIHdpbGwgcmV1c2UgdGhlIGV4aXN0aW5nCi0JCSAqIGRlbHRhLgorCQkvKgorCQkgKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGRlbHRhIGFuZCBpZiBzbyB3aGV0aGVyIHdlIGNhbgorCQkgKiByZXVzZSBpdCBvciBub3QuICBPdGhlcndpc2UgbGV0J3MgZmluZCBvdXQgYXMgY2hlYXBseSBhcworCQkgKiBwb3NzaWJsZSB3aGF0IHRoZSBhY3R1YWwgdHlwZSBhbmQgc2l6ZSBmb3IgdGhpcyBvYmplY3QgaXMuCiAJCSAqLwotCQlpZiAoIW5vX3JldXNlX2RlbHRhKSB7Ci0JCQl1bnNpZ25lZCBjaGFyIGM7Ci0JCQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX25hbWU7Ci0JCQlvZmZfdCBvZnM7Ci0JCQl1bnNpZ25lZCBsb25nIHVzZWRfMDsKLQkJCS8qIHRoZXJlIGlzIGF0IGxlYXN0IDIwIGJ5dGVzIGxlZnQgaW4gdGhlIHBhY2sgKi8KLQkJCXN3aXRjaCAoZW50cnktPmluX3BhY2tfdHlwZSkgewotCQkJY2FzZSBPQkpfUkVGX0RFTFRBOgotCQkJCWJhc2VfbmFtZSA9IHVzZV9wYWNrKHAsICZ3X2N1cnMsCi0JCQkJCWVudHJ5LT5pbl9wYWNrX29mZnNldCArIHVzZWQsIE5VTEwpOwotCQkJCXVzZWQgKz0gMjA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE9CSl9PRlNfREVMVEE6Ci0JCQkJYnVmID0gdXNlX3BhY2socCwgJndfY3VycywKLQkJCQkJZW50cnktPmluX3BhY2tfb2Zmc2V0ICsgdXNlZCwgTlVMTCk7Ci0JCQkJdXNlZF8wID0gMDsKLQkJCQljID0gYnVmW3VzZWRfMCsrXTsKLQkJCQlvZnMgPSBjICYgMTI3OwotCQkJCXdoaWxlIChjICYgMTI4KSB7Ci0JCQkJCW9mcyArPSAxOwotCQkJCQlpZiAoIW9mcyB8fCBvZnMgJiB+KH4wVUwgPj4gNykpCi0JCQkJCQlkaWUoImRlbHRhIGJhc2Ugb2Zmc2V0IG92ZXJmbG93IGluIHBhY2sgZm9yICVzIiwKLQkJCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOwotCQkJCQljID0gYnVmW3VzZWRfMCsrXTsKLQkJCQkJb2ZzID0gKG9mcyA8PCA3KSArIChjICYgMTI3KTsKLQkJCQl9Ci0JCQkJaWYgKG9mcyA+PSBlbnRyeS0+aW5fcGFja19vZmZzZXQpCi0JCQkJCWRpZSgiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIsCi0JCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOwotCQkJCW9mcyA9IGVudHJ5LT5pbl9wYWNrX29mZnNldCAtIG9mczsKLQkJCQliYXNlX25hbWUgPSBmaW5kX3BhY2tlZF9vYmplY3RfbmFtZShwLCBvZnMpOwotCQkJCXVzZWQgKz0gdXNlZF8wOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQliYXNlX25hbWUgPSBOVUxMOwotCQkJfQotCQkJaWYgKGJhc2VfbmFtZSkKLQkJCQliYXNlX2VudHJ5ID0gbG9jYXRlX29iamVjdF9lbnRyeShiYXNlX25hbWUpOwotCQl9Ci0JCXVudXNlX3BhY2soJndfY3Vycyk7Ci0JCWVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplID0gdXNlZDsKLQotCQlpZiAoYmFzZV9lbnRyeSkgewotCi0JCQkvKiBEZXB0aCB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgLSBmaW5kX2RlbHRhcygpCi0JCQkgKiB3aWxsIG5ldmVyIGNvbnNpZGVyIHJldXNlZCBkZWx0YSBhcyB0aGUKLQkJCSAqIGJhc2Ugb2JqZWN0IHRvIGRlbHRpZnkgb3RoZXIgb2JqZWN0cwotCQkJICogYWdhaW5zdCwgaW4gb3JkZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVsdGFzLgotCQkJICovCi0KLQkJCS8qIHVuY29tcHJlc3NlZCBzaXplIG9mIHRoZSBkZWx0YSBkYXRhICovCi0JCQllbnRyeS0+c2l6ZSA9IHNpemU7Ci0JCQllbnRyeS0+ZGVsdGEgPSBiYXNlX2VudHJ5OworCQlzd2l0Y2ggKGVudHJ5LT5pbl9wYWNrX3R5cGUpIHsKKwkJZGVmYXVsdDoKKwkJCS8qIE5vdCBhIGRlbHRhIGhlbmNlIHdlJ3ZlIGFscmVhZHkgZ290IGFsbCB3ZSBuZWVkLiAqLwogCQkJZW50cnktPnR5cGUgPSBlbnRyeS0+aW5fcGFja190eXBlOworCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkOworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybjsKKwkJY2FzZSBPQkpfUkVGX0RFTFRBOgorCQkJaWYgKCFub19yZXVzZV9kZWx0YSAmJiAhZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJCWJhc2VfcmVmID0gdXNlX3BhY2socCwgJndfY3VycywKKwkJCQkJCWVudHJ5LT5pbl9wYWNrX29mZnNldCArIHVzZWQsIE5VTEwpOworCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkICsgMjA7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfT0ZTX0RFTFRBOgorCQkJYnVmID0gdXNlX3BhY2socCwgJndfY3VycywKKwkJCQkgICAgICAgZW50cnktPmluX3BhY2tfb2Zmc2V0ICsgdXNlZCwgTlVMTCk7CisJCQl1c2VkXzAgPSAwOworCQkJYyA9IGJ1Zlt1c2VkXzArK107CisJCQlvZnMgPSBjICYgMTI3OworCQkJd2hpbGUgKGMgJiAxMjgpIHsKKwkJCQlvZnMgKz0gMTsKKwkJCQlpZiAoIW9mcyB8fCBNU0Iob2ZzLCA3KSkKKwkJCQkJZGllKCJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIsCisJCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOworCQkJCWMgPSBidWZbdXNlZF8wKytdOworCQkJCW9mcyA9IChvZnMgPDwgNykgKyAoYyAmIDEyNyk7CisJCQl9CisJCQlpZiAob2ZzID49IGVudHJ5LT5pbl9wYWNrX29mZnNldCkKKwkJCQlkaWUoImRlbHRhIGJhc2Ugb2Zmc2V0IG91dCBvZiBib3VuZCBmb3IgJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+c2hhMSkpOworCQkJb2ZzID0gZW50cnktPmluX3BhY2tfb2Zmc2V0IC0gb2ZzOworCQkJaWYgKCFub19yZXVzZV9kZWx0YSAmJiAhZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJCWJhc2VfcmVmID0gZmluZF9wYWNrZWRfb2JqZWN0X25hbWUocCwgb2ZzKTsKKwkJCWVudHJ5LT5pbl9wYWNrX2hlYWRlcl9zaXplID0gdXNlZCArIHVzZWRfMDsKKwkJCWJyZWFrOworCQl9CiAKKwkJaWYgKGJhc2VfcmVmICYmIChiYXNlX2VudHJ5ID0gbG9jYXRlX29iamVjdF9lbnRyeShiYXNlX3JlZikpKSB7CisJCQkvKgorCQkJICogSWYgYmFzZV9yZWYgd2FzIHNldCBhYm92ZSB0aGF0IG1lYW5zIHdlIHdpc2ggdG8KKwkJCSAqIHJldXNlIGRlbHRhIGRhdGEsIGFuZCB3ZSBldmVuIGZvdW5kIHRoYXQgYmFzZQorCQkJICogaW4gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB3ZSB3YW50IHRvIHBhY2suIEdvb2RpZSEKKwkJCSAqCisJCQkgKiBEZXB0aCB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgLSBmaW5kX2RlbHRhcygpIHdpbGwKKwkJCSAqIG5ldmVyIGNvbnNpZGVyIHJldXNlZCBkZWx0YSBhcyB0aGUgYmFzZSBvYmplY3QgdG8KKwkJCSAqIGRlbHRpZnkgb3RoZXIgb2JqZWN0cyBhZ2FpbnN0LCBpbiBvcmRlciB0byBhdm9pZAorCQkJICogY2lyY3VsYXIgZGVsdGFzLgorCQkJICovCisJCQllbnRyeS0+dHlwZSA9IGVudHJ5LT5pbl9wYWNrX3R5cGU7CisJCQllbnRyeS0+ZGVsdGEgPSBiYXNlX2VudHJ5OwogCQkJZW50cnktPmRlbHRhX3NpYmxpbmcgPSBiYXNlX2VudHJ5LT5kZWx0YV9jaGlsZDsKIAkJCWJhc2VfZW50cnktPmRlbHRhX2NoaWxkID0gZW50cnk7Ci0KKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJLyogT3RoZXJ3aXNlIHdlIHdvdWxkIGRvIHRoZSB1c3VhbCAqLworCisJCWlmIChlbnRyeS0+dHlwZSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbXVzdCBiZSBhIGRlbHRhIGFuZCB3ZSBhbHJlYWR5IGtub3cgd2hhdCB0aGUKKwkJCSAqIGZpbmFsIG9iamVjdCB0eXBlIGlzLiAgTGV0J3MgZXh0cmFjdCB0aGUgYWN0dWFsCisJCQkgKiBvYmplY3Qgc2l6ZSBmcm9tIHRoZSBkZWx0YSBoZWFkZXIuCisJCQkgKi8KKwkJCWVudHJ5LT5zaXplID0gZ2V0X3NpemVfZnJvbV9kZWx0YShwLCAmd19jdXJzLAorCQkJCQllbnRyeS0+aW5fcGFja19vZmZzZXQgKyBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSk7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogTm8gY2hvaWNlIGJ1dCB0byBmYWxsIGJhY2sgdG8gdGhlIHJlY3Vyc2l2ZSBkZWx0YSB3YWxrCisJCSAqIHdpdGggc2hhMV9vYmplY3RfaW5mbygpIHRvIGZpbmQgYWJvdXQgdGhlIG9iamVjdCB0eXBlCisJCSAqIGF0IHRoaXMgcG9pbnQuLi4KKwkJICovCisJCXVudXNlX3BhY2soJndfY3Vycyk7CiAJfQogCiAJZW50cnktPnR5cGUgPSBzaGExX29iamVjdF9pbmZvKGVudHJ5LT5zaGExLCAmZW50cnktPnNpemUpOwpAQCAtMTA2Myw5NCArMTIxNiw0NCBAQAogCQkgICAgc2hhMV90b19oZXgoZW50cnktPnNoYTEpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19kZWx0YV9saW1pdChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICptZSwgdW5zaWduZWQgaW50IG4pCitzdGF0aWMgaW50IHBhY2tfb2Zmc2V0X3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQogewotCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gbWUtPmRlbHRhX2NoaWxkOwotCXVuc2lnbmVkIGludCBtID0gbjsKLQl3aGlsZSAoY2hpbGQpIHsKLQkJdW5zaWduZWQgaW50IGMgPSBjaGVja19kZWx0YV9saW1pdChjaGlsZCwgbiArIDEpOwotCQlpZiAobSA8IGMpCi0JCQltID0gYzsKLQkJY2hpbGQgPSBjaGlsZC0+ZGVsdGFfc2libGluZzsKLQl9Ci0JcmV0dXJuIG07CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYSA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYTsKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9iOworCisJLyogYXZvaWQgZmlsZXN5c3RlbSB0cmFzaGluZyB3aXRoIGxvb3NlIG9iamVjdHMgKi8KKwlpZiAoIWEtPmluX3BhY2sgJiYgIWItPmluX3BhY2spCisJCXJldHVybiBoYXNoY21wKGEtPnNoYTEsIGItPnNoYTEpOworCisJaWYgKGEtPmluX3BhY2sgPCBiLT5pbl9wYWNrKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmluX3BhY2sgPiBiLT5pbl9wYWNrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gYS0+aW5fcGFja19vZmZzZXQgPCBiLT5pbl9wYWNrX29mZnNldCA/IC0xIDoKKwkJCShhLT5pbl9wYWNrX29mZnNldCA+IGItPmluX3BhY2tfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X29iamVjdF9kZXRhaWxzKHZvaWQpCiB7CiAJdWludDMyX3QgaTsKLQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqc29ydGVkX2J5X29mZnNldDsKKworCXNvcnRlZF9ieV9vZmZzZXQgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQorCQlzb3J0ZWRfYnlfb2Zmc2V0W2ldID0gb2JqZWN0cyArIGk7CisJcXNvcnQoc29ydGVkX2J5X29mZnNldCwgbnJfb2JqZWN0cywgc2l6ZW9mKCpzb3J0ZWRfYnlfb2Zmc2V0KSwgcGFja19vZmZzZXRfc29ydCk7CiAKIAlwcmVwYXJlX3BhY2tfaXgoKTsKLQlmb3IgKGkgPSAwLCBlbnRyeSA9IG9iamVjdHM7IGkgPCBucl9vYmplY3RzOyBpKyssIGVudHJ5KyspCi0JCWNoZWNrX29iamVjdChlbnRyeSk7Ci0KLQlpZiAobnJfb2JqZWN0cyA9PSBucl9yZXN1bHQpIHsKLQkJLyoKLQkJICogRGVwdGggb2Ygb2JqZWN0cyB0aGF0IGRlcGVuZCBvbiB0aGUgZW50cnkgLS0gdGhpcwotCQkgKiBpcyBzdWJ0cmFjdGVkIGZyb20gZGVwdGgtbWF4IHRvIGJyZWFrIHRvbyBkZWVwCi0JCSAqIGRlbHRhIGNoYWluIGJlY2F1c2Ugb2YgZGVsdGEgZGF0YSByZXVzaW5nLgotCQkgKiBIb3dldmVyLCB3ZSBsb29zZW4gdGhpcyByZXN0cmljdGlvbiB3aGVuIHdlIGtub3cgd2UKLQkJICogYXJlIGNyZWF0aW5nIGEgdGhpbiBwYWNrIC0tIGl0IHdpbGwgaGF2ZSB0byBiZQotCQkgKiBleHBhbmRlZCBvbiB0aGUgb3RoZXIgZW5kIGFueXdheSwgc28gZG8gbm90Ci0JCSAqIGFydGlmaWNpYWxseSBjdXQgdGhlIGRlbHRhIGNoYWluIGFuZCBsZXQgaXQgZ28gYXMKLQkJICogZGVlcCBhcyBpdCB3YW50cy4KLQkJICovCi0JCWZvciAoaSA9IDAsIGVudHJ5ID0gb2JqZWN0czsgaSA8IG5yX29iamVjdHM7IGkrKywgZW50cnkrKykKLQkJCWlmICghZW50cnktPmRlbHRhICYmIGVudHJ5LT5kZWx0YV9jaGlsZCkKLQkJCQllbnRyeS0+ZGVsdGFfbGltaXQgPQotCQkJCQljaGVja19kZWx0YV9saW1pdChlbnRyeSwgMSk7Ci0JfQotfQotCi10eXBlZGVmIGludCAoKmVudHJ5X3NvcnRfdCkoY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopOwotCi1zdGF0aWMgZW50cnlfc29ydF90IGN1cnJlbnRfc29ydDsKLQotc3RhdGljIGludCBzb3J0X2NvbXBhcmF0b3IoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQotewotCXN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7Ci0Jc3RydWN0IG9iamVjdF9lbnRyeSAqYiA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYjsKLQlyZXR1cm4gY3VycmVudF9zb3J0KGEsYik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqY3JlYXRlX3NvcnRlZF9saXN0KGVudHJ5X3NvcnRfdCBzb3J0KQotewotCXN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0ID0geG1hbGxvYyhucl9vYmplY3RzICogc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkgKikpOwotCXVpbnQzMl90IGk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQotCQlsaXN0W2ldID0gb2JqZWN0cyArIGk7Ci0JY3VycmVudF9zb3J0ID0gc29ydDsKLQlxc29ydChsaXN0LCBucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSAqKSwgc29ydF9jb21wYXJhdG9yKTsKLQlyZXR1cm4gbGlzdDsKKwkJY2hlY2tfb2JqZWN0KHNvcnRlZF9ieV9vZmZzZXRbaV0pOworCWZyZWUoc29ydGVkX2J5X29mZnNldCk7CiB9CiAKLXN0YXRpYyBpbnQgc2hhMV9zb3J0KGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmEsIGNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmIpCitzdGF0aWMgaW50IHR5cGVfc2l6ZV9zb3J0KGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKIHsKLQlyZXR1cm4gaGFzaGNtcChhLT5zaGExLCBiLT5zaGExKTsKLX0KKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICphID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9hOworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmIgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2I7CiAKLXN0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqY3JlYXRlX2ZpbmFsX29iamVjdF9saXN0KHZvaWQpCi17Ci0Jc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3Q7Ci0JdWludDMyX3QgaSwgajsKLQotCWZvciAoaSA9IG5yX3Jlc3VsdCA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspCi0JCWlmICghb2JqZWN0c1tpXS5wcmVmZXJyZWRfYmFzZSkKLQkJCW5yX3Jlc3VsdCsrOwotCWxpc3QgPSB4bWFsbG9jKG5yX3Jlc3VsdCAqIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICopKTsKLQlmb3IgKGkgPSBqID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewotCQlpZiAoIW9iamVjdHNbaV0ucHJlZmVycmVkX2Jhc2UpCi0JCQlsaXN0W2orK10gPSBvYmplY3RzICsgaTsKLQl9Ci0JY3VycmVudF9zb3J0ID0gc2hhMV9zb3J0OwotCXFzb3J0KGxpc3QsIG5yX3Jlc3VsdCwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkgKiksIHNvcnRfY29tcGFyYXRvcik7Ci0JcmV0dXJuIGxpc3Q7Ci19Ci0KLXN0YXRpYyBpbnQgdHlwZV9zaXplX3NvcnQoY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYikKLXsKIAlpZiAoYS0+dHlwZSA8IGItPnR5cGUpCiAJCXJldHVybiAtMTsKIAlpZiAoYS0+dHlwZSA+IGItPnR5cGUpCkBAIC0xMTY3LDcgKzEyNzAsNyBAQAogCQlyZXR1cm4gLTE7CiAJaWYgKGEtPnNpemUgPiBiLT5zaXplKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYik7CisJcmV0dXJuIGEgPiBiID8gLTEgOiAoYSA8IGIpOyAgLyogbmV3ZXN0IGxhc3QgKi8KIH0KIAogc3RydWN0IHVucGFja2VkIHsKQEAgLTEyMTMsMTYgKzEzMTYsNyBAQAogCSAgICB0cmdfZW50cnktPmluX3BhY2tfdHlwZSAhPSBPQkpfT0ZTX0RFTFRBKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogSWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIGF0IHBhY2sgZWRnZSwgdGFrZSB0aGUgZGVwdGggdGhlCi0JICogb2JqZWN0cyB0aGF0IGRlcGVuZCBvbiB0aGUgY3VycmVudCBvYmplY3QgaW50byBhY2NvdW50IC0tCi0JICogb3RoZXJ3aXNlIHRoZXkgd291bGQgYmVjb21lIHRvbyBkZWVwLgotCSAqLwotCWlmICh0cmdfZW50cnktPmRlbHRhX2NoaWxkKSB7Ci0JCWlmIChtYXhfZGVwdGggPD0gdHJnX2VudHJ5LT5kZWx0YV9saW1pdCkKLQkJCXJldHVybiAwOwotCQltYXhfZGVwdGggLT0gdHJnX2VudHJ5LT5kZWx0YV9saW1pdDsKLQl9CisJLyogTGV0J3Mgbm90IGJ1c3QgdGhlIGFsbG93ZWQgZGVwdGguICovCiAJaWYgKHNyY19lbnRyeS0+ZGVwdGggPj0gbWF4X2RlcHRoKQogCQlyZXR1cm4gMDsKIApAQCAtMTI2OSw5ICsxMzYzLDE3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHByb2dyZXNzX2ludGVydmFsKGludCBzaWdudW0pCitzdGF0aWMgdW5zaWduZWQgaW50IGNoZWNrX2RlbHRhX2xpbWl0KHN0cnVjdCBvYmplY3RfZW50cnkgKm1lLCB1bnNpZ25lZCBpbnQgbikKIHsKLQlwcm9ncmVzc191cGRhdGUgPSAxOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gbWUtPmRlbHRhX2NoaWxkOworCXVuc2lnbmVkIGludCBtID0gbjsKKwl3aGlsZSAoY2hpbGQpIHsKKwkJdW5zaWduZWQgaW50IGMgPSBjaGVja19kZWx0YV9saW1pdChjaGlsZCwgbiArIDEpOworCQlpZiAobSA8IGMpCisJCQltID0gYzsKKwkJY2hpbGQgPSBjaGlsZC0+ZGVsdGFfc2libGluZzsKKwl9CisJcmV0dXJuIG07CiB9CiAKIHN0YXRpYyB2b2lkIGZpbmRfZGVsdGFzKHN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0LCBpbnQgd2luZG93LCBpbnQgZGVwdGgpCkBAIC0xMjc5LDE0ICsxMzgxLDE0IEBACiAJdWludDMyX3QgaSA9IG5yX29iamVjdHMsIGlkeCA9IDAsIHByb2Nlc3NlZCA9IDA7CiAJdW5zaWduZWQgaW50IGFycmF5X3NpemUgPSB3aW5kb3cgKiBzaXplb2Yoc3RydWN0IHVucGFja2VkKTsKIAlzdHJ1Y3QgdW5wYWNrZWQgKmFycmF5OwotCXVuc2lnbmVkIGxhc3RfcGVyY2VudCA9IDk5OTsKKwlpbnQgbWF4X2RlcHRoOwogCiAJaWYgKCFucl9vYmplY3RzKQogCQlyZXR1cm47CiAJYXJyYXkgPSB4bWFsbG9jKGFycmF5X3NpemUpOwogCW1lbXNldChhcnJheSwgMCwgYXJyYXlfc2l6ZSk7CiAJaWYgKHByb2dyZXNzKQotCQlmcHJpbnRmKHN0ZGVyciwgIkRlbHRpZnlpbmcgJXUgb2JqZWN0cy5cbiIsIG5yX3Jlc3VsdCk7CisJCXN0YXJ0X3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSwgIkRlbHRpZnlpbmcgJXUgb2JqZWN0cy4uLiIsICIiLCBucl9yZXN1bHQpOwogCiAJZG8gewogCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IGxpc3RbLS1pXTsKQEAgLTEyOTYsMTUgKzEzOTgsOCBAQAogCQlpZiAoIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkKIAkJCXByb2Nlc3NlZCsrOwogCi0JCWlmIChwcm9ncmVzcykgewotCQkJdW5zaWduZWQgcGVyY2VudCA9IHByb2Nlc3NlZCAqIDEwMCAvIG5yX3Jlc3VsdDsKLQkJCWlmIChwZXJjZW50ICE9IGxhc3RfcGVyY2VudCB8fCBwcm9ncmVzc191cGRhdGUpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiU0dSUlICgldS8ldSkgZG9uZVxyIiwKLQkJCQkJcGVyY2VudCwgcHJvY2Vzc2VkLCBucl9yZXN1bHQpOwotCQkJCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JCQkJbGFzdF9wZXJjZW50ID0gcGVyY2VudDsKLQkJCX0KLQkJfQorCQlpZiAocHJvZ3Jlc3MpCisJCQlkaXNwbGF5X3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSwgcHJvY2Vzc2VkKTsKIAogCQlpZiAoZW50cnktPmRlbHRhKQogCQkJLyogVGhpcyBoYXBwZW5zIGlmIHdlIGRlY2lkZWQgdG8gcmV1c2UgZXhpc3RpbmcKQEAgLTEzMjAsNiArMTQxNSwxOCBAQAogCQluLT5kYXRhID0gTlVMTDsKIAkJbi0+ZW50cnkgPSBlbnRyeTsKIAorCQkvKgorCQkgKiBJZiB0aGUgY3VycmVudCBvYmplY3QgaXMgYXQgcGFjayBlZGdlLCB0YWtlIHRoZSBkZXB0aCB0aGUKKwkJICogb2JqZWN0cyB0aGF0IGRlcGVuZCBvbiB0aGUgY3VycmVudCBvYmplY3QgaW50byBhY2NvdW50CisJCSAqIG90aGVyd2lzZSB0aGV5IHdvdWxkIGJlY29tZSB0b28gZGVlcC4KKwkJICovCisJCW1heF9kZXB0aCA9IGRlcHRoOworCQlpZiAoZW50cnktPmRlbHRhX2NoaWxkKSB7CisJCQltYXhfZGVwdGggLT0gY2hlY2tfZGVsdGFfbGltaXQoZW50cnksIDApOworCQkJaWYgKG1heF9kZXB0aCA8PSAwKQorCQkJCWdvdG8gbmV4dDsKKwkJfQorCiAJCWogPSB3aW5kb3c7CiAJCXdoaWxlICgtLWogPiAwKSB7CiAJCQl1aW50MzJfdCBvdGhlcl9pZHggPSBpZHggKyBqOwpAQCAtMTMyOSw5ICsxNDM2LDEwIEBACiAJCQltID0gYXJyYXkgKyBvdGhlcl9pZHg7CiAJCQlpZiAoIW0tPmVudHJ5KQogCQkJCWJyZWFrOwotCQkJaWYgKHRyeV9kZWx0YShuLCBtLCBkZXB0aCkgPCAwKQorCQkJaWYgKHRyeV9kZWx0YShuLCBtLCBtYXhfZGVwdGgpIDwgMCkKIAkJCQlicmVhazsKIAkJfQorCiAJCS8qIGlmIHdlIG1hZGUgbiBhIGRlbHRhLCBhbmQgaWYgbiBpcyBhbHJlYWR5IGF0IG1heAogCQkgKiBkZXB0aCwgbGVhdmluZyBpdCBpbiB0aGUgd2luZG93IGlzIHBvaW50bGVzcy4gIHdlCiAJCSAqIHNob3VsZCBldmljdCBpdCBmaXJzdC4KQEAgLTEzMzksMTMgKzE0NDcsMTQgQEAKIAkJaWYgKGVudHJ5LT5kZWx0YSAmJiBkZXB0aCA8PSBlbnRyeS0+ZGVwdGgpCiAJCQljb250aW51ZTsKIAorCQluZXh0OgogCQlpZHgrKzsKIAkJaWYgKGlkeCA+PSB3aW5kb3cpCiAJCQlpZHggPSAwOwogCX0gd2hpbGUgKGkgPiAwKTsKIAogCWlmIChwcm9ncmVzcykKLQkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOwogCiAJZm9yIChpID0gMDsgaSA8IHdpbmRvdzsgKytpKSB7CiAJCWZyZWVfZGVsdGFfaW5kZXgoYXJyYXlbaV0uaW5kZXgpOwpAQCAtMTM1Niw4MSArMTQ2NSwyMCBAQAogCiBzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2soaW50IHdpbmRvdywgaW50IGRlcHRoKQogeworCXN0cnVjdCBvYmplY3RfZW50cnkgKipkZWx0YV9saXN0OworCXVpbnQzMl90IGk7CisKIAlnZXRfb2JqZWN0X2RldGFpbHMoKTsKLQlzb3J0ZWRfYnlfdHlwZSA9IGNyZWF0ZV9zb3J0ZWRfbGlzdCh0eXBlX3NpemVfc29ydCk7Ci0JaWYgKHdpbmRvdyAmJiBkZXB0aCkKLQkJZmluZF9kZWx0YXMoc29ydGVkX2J5X3R5cGUsIHdpbmRvdysxLCBkZXB0aCk7Ci19CiAKLXN0YXRpYyBpbnQgcmV1c2VfY2FjaGVkX3BhY2sodW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciBjYWNoZVtdID0gInBhY2stY2FjaGUvcGFjay0lcy4lcyI7Ci0JY2hhciAqY2FjaGVkX3BhY2ssICpjYWNoZWRfaWR4OwotCWludCBpZmQsIG9mZCwgaWZkX2l4ID0gLTE7CisJaWYgKCF3aW5kb3cgfHwgIWRlcHRoKQorCQlyZXR1cm47CiAKLQljYWNoZWRfcGFjayA9IGdpdF9wYXRoKGNhY2hlLCBzaGExX3RvX2hleChzaGExKSwgInBhY2siKTsKLQlpZmQgPSBvcGVuKGNhY2hlZF9wYWNrLCBPX1JET05MWSk7Ci0JaWYgKGlmZCA8IDApCi0JCXJldHVybiAwOwotCi0JaWYgKCFwYWNrX3RvX3N0ZG91dCkgewotCQljYWNoZWRfaWR4ID0gZ2l0X3BhdGgoY2FjaGUsIHNoYTFfdG9faGV4KHNoYTEpLCAiaWR4Iik7Ci0JCWlmZF9peCA9IG9wZW4oY2FjaGVkX2lkeCwgT19SRE9OTFkpOwotCQlpZiAoaWZkX2l4IDwgMCkgewotCQkJY2xvc2UoaWZkKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JaWYgKHByb2dyZXNzKQotCQlmcHJpbnRmKHN0ZGVyciwgIlJldXNpbmcgJXUgb2JqZWN0cyBwYWNrICVzXG4iLCBucl9vYmplY3RzLAotCQkJc2hhMV90b19oZXgoc2hhMSkpOwotCi0JaWYgKHBhY2tfdG9fc3Rkb3V0KSB7Ci0JCWlmIChjb3B5X2ZkKGlmZCwgMSkpCi0JCQlleGl0KDEpOwotCQljbG9zZShpZmQpOwotCX0KLQllbHNlIHsKLQkJY2hhciBuYW1lW1BBVEhfTUFYXTsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICIlcy0lcy4lcyIsIGJhc2VfbmFtZSwgc2hhMV90b19oZXgoc2hhMSksICJwYWNrIik7Ci0JCW9mZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKLQkJaWYgKG9mZCA8IDApCi0JCQlkaWUoInVuYWJsZSB0byBvcGVuICVzICglcykiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOwotCQlpZiAoY29weV9mZChpZmQsIG9mZCkpCi0JCQlleGl0KDEpOwotCQljbG9zZShpZmQpOwotCi0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiJXMtJXMuJXMiLCBiYXNlX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpLCAiaWR4Iik7Ci0JCW9mZCA9IG9wZW4obmFtZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKLQkJaWYgKG9mZCA8IDApCi0JCQlkaWUoInVuYWJsZSB0byBvcGVuICVzICglcykiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOwotCQlpZiAoY29weV9mZChpZmRfaXgsIG9mZCkpCi0JCQlleGl0KDEpOwotCQljbG9zZShpZmRfaXgpOwotCQlwdXRzKHNoYTFfdG9faGV4KHNoYTEpKTsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCi17Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLQlzdHJ1Y3QgaXRpbWVydmFsIHY7Ci0KLQltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKLQlzYS5zYV9oYW5kbGVyID0gcHJvZ3Jlc3NfaW50ZXJ2YWw7Ci0Jc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOwotCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKLQlzaWdhY3Rpb24oU0lHQUxSTSwgJnNhLCBOVUxMKTsKLQotCXYuaXRfaW50ZXJ2YWwudHZfc2VjID0gMTsKLQl2Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOwotCXYuaXRfdmFsdWUgPSB2Lml0X2ludGVydmFsOwotCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJnYsIE5VTEwpOworCWRlbHRhX2xpc3QgPSB4bWFsbG9jKG5yX29iamVjdHMgKiBzaXplb2YoKmRlbHRhX2xpc3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQorCQlkZWx0YV9saXN0W2ldID0gb2JqZWN0cyArIGk7CisJcXNvcnQoZGVsdGFfbGlzdCwgbnJfb2JqZWN0cywgc2l6ZW9mKCpkZWx0YV9saXN0KSwgdHlwZV9zaXplX3NvcnQpOworCWZpbmRfZGVsdGFzKGRlbHRhX2xpc3QsIHdpbmRvdysxLCBkZXB0aCk7CisJZnJlZShkZWx0YV9saXN0KTsKIH0KIAogc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKQEAgLTE0NzEsMjIgKzE1MTksMjAgQEAKIAogCQloYXNoID0gbmFtZV9oYXNoKGxpbmUrNDEpOwogCQlhZGRfcHJlZmVycmVkX2Jhc2Vfb2JqZWN0KGxpbmUrNDEsIGhhc2gpOwotCQlhZGRfb2JqZWN0X2VudHJ5KHNoYTEsIGhhc2gsIDApOworCQlhZGRfb2JqZWN0X2VudHJ5KHNoYTEsIDAsIGhhc2gsIDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewotCXVuc2lnbmVkIGhhc2ggPSBuYW1lX2hhc2goIiIpOwotCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QoIiIsIGhhc2gpOwotCWFkZF9vYmplY3RfZW50cnkoY29tbWl0LT5vYmplY3Quc2hhMSwgaGFzaCwgMCk7CisJYWRkX29iamVjdF9lbnRyeShjb21taXQtPm9iamVjdC5zaGExLCBPQkpfQ09NTUlULCAwLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqcCkKIHsKIAl1bnNpZ25lZCBoYXNoID0gbmFtZV9oYXNoKHAtPm5hbWUpOwogCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QocC0+bmFtZSwgaGFzaCk7Ci0JYWRkX29iamVjdF9lbnRyeShwLT5pdGVtLT5zaGExLCBoYXNoLCAwKTsKKwlhZGRfb2JqZWN0X2VudHJ5KHAtPml0ZW0tPnNoYTEsIHAtPml0ZW0tPnR5cGUsIGhhc2gsIDApOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQpAQCAtMTUyNywxNCArMTU3MywyMSBAQAogCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QpOwogfQogCitzdGF0aWMgaW50IGFkanVzdF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKQoreworCWlmIChjaG1vZChwYXRoLCBtb2RlKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiBhZGp1c3Rfc2hhcmVkX3Blcm0ocGF0aCk7Cit9CisKIGludCBjbWRfcGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCVNIQV9DVFggY3R4OwogCWludCBkZXB0aCA9IDEwOwotCXN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0OwogCWludCB1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAwOwogCWludCB0aGluID0gMDsKIAl1aW50MzJfdCBpOworCW9mZl90IGxhc3Rfb2JqX29mZnNldDsKKwljb25zdCBjaGFyICpiYXNlX25hbWUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKipycF9hdjsKIAlpbnQgcnBfYWNfYWxsb2MgPSA2NDsKIAlpbnQgcnBfYWM7CkBAIC0xNjI3LDYgKzE2ODAsMTcgQEAKIAkJCXJwX2F2WzFdID0gIi0tb2JqZWN0cy1lZGdlIjsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghcHJlZml4Y21wKGFyZywgIi0taW5kZXgtdmVyc2lvbj0iKSkgeworCQkJY2hhciAqYzsKKwkJCWluZGV4X2RlZmF1bHRfdmVyc2lvbiA9IHN0cnRvdWwoYXJnICsgMTYsICZjLCAxMCk7CisJCQlpZiAoaW5kZXhfZGVmYXVsdF92ZXJzaW9uID4gMikKKwkJCQlkaWUoImJhZCAlcyIsIGFyZyk7CisJCQlpZiAoKmMgPT0gJywnKQorCQkJCWluZGV4X29mZjMyX2xpbWl0ID0gc3RydG91bChjKzEsICZjLCAwKTsKKwkJCWlmICgqYyB8fCBpbmRleF9vZmYzMl9saW1pdCAmIDB4ODAwMDAwMDApCisJCQkJZGllKCJiYWQgJXMiLCBhcmcpOworCQkJY29udGludWU7CisJCX0KIAkJdXNhZ2UocGFja191c2FnZSk7CiAJfQogCkBAIC0xNjU0LDUxICsxNzE4LDUyIEBACiAKIAlwcmVwYXJlX3BhY2tlZF9naXQoKTsKIAotCWlmIChwcm9ncmVzcykgewotCQlmcHJpbnRmKHN0ZGVyciwgIkdlbmVyYXRpbmcgcGFjay4uLlxuIik7Ci0JCXNldHVwX3Byb2dyZXNzX3NpZ25hbCgpOwotCX0KLQorCWlmIChwcm9ncmVzcykKKwkJc3RhcnRfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlLCAiR2VuZXJhdGluZyBwYWNrLi4uIiwKKwkJCSAgICAgICAiQ291bnRpbmcgb2JqZWN0czogIiwgMCk7CiAJaWYgKCF1c2VfaW50ZXJuYWxfcmV2X2xpc3QpCiAJCXJlYWRfb2JqZWN0X2xpc3RfZnJvbV9zdGRpbigpOwogCWVsc2UgewogCQlycF9hdltycF9hY10gPSBOVUxMOwogCQlnZXRfb2JqZWN0X2xpc3QocnBfYWMsIHJwX2F2KTsKIAl9Ci0KLQlpZiAocHJvZ3Jlc3MpCisJaWYgKHByb2dyZXNzKSB7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKIAkJZnByaW50ZihzdGRlcnIsICJEb25lIGNvdW50aW5nICV1IG9iamVjdHMuXG4iLCBucl9vYmplY3RzKTsKLQlzb3J0ZWRfYnlfc2hhID0gY3JlYXRlX2ZpbmFsX29iamVjdF9saXN0KCk7CisJfQorCiAJaWYgKG5vbl9lbXB0eSAmJiAhbnJfcmVzdWx0KQogCQlyZXR1cm4gMDsKLQotCVNIQTFfSW5pdCgmY3R4KTsKLQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmVzdWx0OyBpKyspIHsKLQkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSAqbGlzdCsrOwotCQlTSEExX1VwZGF0ZSgmY3R4LCBlbnRyeS0+c2hhMSwgMjApOwotCX0KLQlTSEExX0ZpbmFsKG9iamVjdF9saXN0X3NoYTEsICZjdHgpOwogCWlmIChwcm9ncmVzcyAmJiAobnJfb2JqZWN0cyAhPSBucl9yZXN1bHQpKQogCQlmcHJpbnRmKHN0ZGVyciwgIlJlc3VsdCBoYXMgJXUgb2JqZWN0cy5cbiIsIG5yX3Jlc3VsdCk7CisJaWYgKG5yX3Jlc3VsdCkKKwkJcHJlcGFyZV9wYWNrKHdpbmRvdywgZGVwdGgpOworCWxhc3Rfb2JqX29mZnNldCA9IHdyaXRlX3BhY2tfZmlsZSgpOworCWlmICghcGFja190b19zdGRvdXQpIHsKKwkJdW5zaWduZWQgY2hhciBvYmplY3RfbGlzdF9zaGExWzIwXTsKKwkJbW9kZV90IG1vZGUgPSB1bWFzaygwKTsKIAotCWlmIChyZXVzZV9jYWNoZWRfcGFjayhvYmplY3RfbGlzdF9zaGExKSkKLQkJOwotCWVsc2UgewotCQlpZiAobnJfcmVzdWx0KQotCQkJcHJlcGFyZV9wYWNrKHdpbmRvdywgZGVwdGgpOwotCQlpZiAocHJvZ3Jlc3MgPT0gMSAmJiBwYWNrX3RvX3N0ZG91dCkgewotCQkJLyogdGhlIG90aGVyIGVuZCB1c3VhbGx5IGRpc3BsYXlzIHByb2dyZXNzIGl0c2VsZiAqLwotCQkJc3RydWN0IGl0aW1lcnZhbCB2ID0ge3swLH0sfTsKLQkJCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJnYsIE5VTEwpOwotCQkJc2lnbmFsKFNJR0FMUk0sIFNJR19JR04gKTsKLQkJCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JCX0KLQkJd3JpdGVfcGFja19maWxlKCk7Ci0JCWlmICghcGFja190b19zdGRvdXQpIHsKLQkJCXdyaXRlX2luZGV4X2ZpbGUoKTsKLQkJCXB1dHMoc2hhMV90b19oZXgob2JqZWN0X2xpc3Rfc2hhMSkpOwotCQl9CisJCXVtYXNrKG1vZGUpOworCQltb2RlID0gMDQ0NCAmIH5tb2RlOworCisJCXdyaXRlX2luZGV4X2ZpbGUobGFzdF9vYmpfb2Zmc2V0LCBvYmplY3RfbGlzdF9zaGExKTsKKwkJc25wcmludGYodG1wbmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAiJXMtJXMucGFjayIsCisJCQkgYmFzZV9uYW1lLCBzaGExX3RvX2hleChvYmplY3RfbGlzdF9zaGExKSk7CisJCWlmIChhZGp1c3RfcGVybShwYWNrX3RtcF9uYW1lLCBtb2RlKSkKKwkJCWRpZSgidW5hYmxlIHRvIG1ha2UgdGVtcG9yYXJ5IHBhY2sgZmlsZSByZWFkYWJsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChyZW5hbWUocGFja190bXBfbmFtZSwgdG1wbmFtZSkpCisJCQlkaWUoInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCXNucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIiVzLSVzLmlkeCIsCisJCQkgYmFzZV9uYW1lLCBzaGExX3RvX2hleChvYmplY3RfbGlzdF9zaGExKSk7CisJCWlmIChhZGp1c3RfcGVybShpZHhfdG1wX25hbWUsIG1vZGUpKQorCQkJZGllKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSByZWFkYWJsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChyZW5hbWUoaWR4X3RtcF9uYW1lLCB0bXBuYW1lKSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlbmFtZSB0ZW1wb3JhcnkgaW5kZXggZmlsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCXB1dHMoc2hhMV90b19oZXgob2JqZWN0X2xpc3Rfc2hhMSkpOwogCX0KIAlpZiAocHJvZ3Jlc3MpCiAJCWZwcmludGYoc3RkZXJyLCAiVG90YWwgJXUgKGRlbHRhICV1KSwgcmV1c2VkICV1IChkZWx0YSAldSlcbiIsCmRpZmYgLS1naXQgYS9idWlsdGluLXB1c2guYyBiL2J1aWx0aW4tcHVzaC5jCmluZGV4IDcwYjExNjguLmNiNzg0MDEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcHVzaC5jCisrKyBiL2J1aWx0aW4tcHVzaC5jCkBAIC0yOTcsNyArMjk3LDcgQEAKIHN0YXRpYyBpbnQgZG9fcHVzaChjb25zdCBjaGFyICpyZXBvKQogewogCWNvbnN0IGNoYXIgKnVyaVtNQVhfVVJJXTsKLQlpbnQgaSwgbjsKKwlpbnQgaSwgbiwgZXJyczsKIAlpbnQgY29tbW9uX2FyZ2M7CiAJY29uc3QgY2hhciAqKmFyZ3Y7CiAJaW50IGFyZ2M7CkBAIC0zMTcsNiArMzE3LDcgQEAKIAkJYXJndlthcmdjKytdID0gcmVjZWl2ZXBhY2s7CiAJY29tbW9uX2FyZ2MgPSBhcmdjOwogCisJZXJycyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlpbnQgZXJyOwogCQlpbnQgZGVzdF9hcmdjID0gY29tbW9uX2FyZ2M7CkBAIC0zMzksMjEgKzM0MCwyMyBAQAogCQllcnIgPSBydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRCk7CiAJCWlmICghZXJyKQogCQkJY29udGludWU7CisKKwkJZXJyb3IoImZhaWxlZCB0byBwdXNoIHRvICclcyciLCB1cmlbaV0pOwogCQlzd2l0Y2ggKGVycikgewogCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRk9SSzoKLQkJCWRpZSgidW5hYmxlIHRvIGZvcmsgZm9yICVzIiwgc2VuZGVyKTsKKwkJCWVycm9yKCJ1bmFibGUgdG8gZm9yayBmb3IgJXMiLCBzZW5kZXIpOwogCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfRVhFQzoKLQkJCWRpZSgidW5hYmxlIHRvIGV4ZWMgJXMiLCBzZW5kZXIpOworCQkJZXJyb3IoInVuYWJsZSB0byBleGVjICVzIiwgc2VuZGVyKTsKKwkJCWJyZWFrOwogCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRDoKIAkJY2FzZSAtRVJSX1JVTl9DT01NQU5EX1dBSVRQSURfV1JPTkdfUElEOgogCQljYXNlIC1FUlJfUlVOX0NPTU1BTkRfV0FJVFBJRF9TSUdOQUw6CiAJCWNhc2UgLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX05PRVhJVDoKLQkJCWRpZSgiJXMgZGllZCB3aXRoIHN0cmFuZ2UgZXJyb3IiLCBzZW5kZXIpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1lcnI7CisJCQllcnJvcigiJXMgZGllZCB3aXRoIHN0cmFuZ2UgZXJyb3IiLCBzZW5kZXIpOwogCQl9CisJCWVycnMrKzsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuICEhZXJyczsKIH0KIAogaW50IGNtZF9wdXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZWFkLXRyZWUuYyBiL2J1aWx0aW4tcmVhZC10cmVlLmMKaW5kZXggNzkzZWFlMC4uMzE2ZmIwZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZWFkLXRyZWUuYworKysgYi9idWlsdGluLXJlYWQtdHJlZS5jCkBAIC04NCw3ICs4NCw3IEBACiAKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgcmVhZF90cmVlX3VzYWdlW10gPSAiZ2l0LXJlYWQtdHJlZSAoPHNoYT4gfCBbWy1tIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+XSBbLXUgfCAtaV1dIFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gPHNoYTE+IFs8c2hhMj4gWzxzaGEzPl1dKSI7CitzdGF0aWMgY29uc3QgY2hhciByZWFkX3RyZWVfdXNhZ2VbXSA9ICJnaXQtcmVhZC10cmVlICg8c2hhPiB8IFtbLW0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dIFstdSB8IC1pXV0gWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSBbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSA8c2hhMT4gWzxzaGEyPiBbPHNoYTM+XV0pIjsKIAogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOwogCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCi0JbmV3ZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrX2ZpbGUsIGdldF9pbmRleF9maWxlKCksIDEpOworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CiAKQEAgLTEyOCw2ICsxMjgsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1pbmRleC1vdXRwdXQ9IikpIHsKKwkJCXNldF9hbHRlcm5hdGVfaW5kZXhfb3V0cHV0KGFyZyArIDE1KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyogIi0tcHJlZml4PTxzdWJkaXJlY3Rvcnk+LyIgbWVhbnMga2VlcCB0aGUgY3VycmVudCBpbmRleAogCQkgKiAgZW50cmllcyBhbmQgcHV0IHRoZSBlbnRyaWVzIGZyb20gdGhlIHRyZWUgdW5kZXIgdGhlCiAJCSAqIGdpdmVuIHN1YmRpcmVjdG9yeS4KQEAgLTIyOCw2ICsyMzMsNyBAQAogCQlpZiAoMCA8PSBwb3MpCiAJCQlkaWUoImZpbGUgJyUuKnMnIGFscmVhZHkgZXhpc3RzLiIsCiAJCQkJCXBmeGxlbi0xLCBvcHRzLnByZWZpeCk7CisJCW9wdHMucG9zID0gLTEgLSBwb3M7CiAJfQogCiAJaWYgKG9wdHMubWVyZ2UpIHsKQEAgLTI2Nyw3ICsyNzMsNyBAQAogCX0KIAogCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8Ci0JICAgIGNsb3NlKG5ld2ZkKSB8fCBjb21taXRfbG9ja19maWxlKCZsb2NrX2ZpbGUpKQorCSAgICBjbG9zZShuZXdmZCkgfHwgY29tbWl0X2xvY2tlZF9pbmRleCgmbG9ja19maWxlKSkKIAkJZGllKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LWxpc3QuYyBiL2J1aWx0aW4tcmV2LWxpc3QuYwppbmRleCBiODZlN2NhLi5lYmY1M2Y1IDEwMDY0NAotLS0gYS9idWlsdGluLXJldi1saXN0LmMKKysrIGIvYnVpbHRpbi1yZXYtbGlzdC5jCkBAIC0zNyw3ICszNyw4IEBACiAiICAgIC0tYWJicmV2LWNvbW1pdFxuIgogIiAgICAtLWxlZnQtcmlnaHRcbiIKICIgIHNwZWNpYWwgcHVycG9zZTpcbiIKLSIgICAgLS1iaXNlY3QiCisiICAgIC0tYmlzZWN0XG4iCisiICAgIC0tYmlzZWN0LXZhcnMiCiA7CiAKIHN0YXRpYyBzdHJ1Y3QgcmV2X2luZm8gcmV2czsKQEAgLTk0LDcgKzk1LDcgQEAKIAkJc3RhdGljIGNoYXIgcHJldHR5X2hlYWRlclsxNjM4NF07CiAJCXByZXR0eV9wcmludF9jb21taXQocmV2cy5jb21taXRfZm9ybWF0LCBjb21taXQsIH4wLAogCQkJCSAgICBwcmV0dHlfaGVhZGVyLCBzaXplb2YocHJldHR5X2hlYWRlciksCi0JCQkJICAgIHJldnMuYWJicmV2LCBOVUxMLCBOVUxMLCByZXZzLnJlbGF0aXZlX2RhdGUpOworCQkJCSAgICByZXZzLmFiYnJldiwgTlVMTCwgTlVMTCwgcmV2cy5kYXRlX21vZGUpOwogCQlwcmludGYoIiVzJWMiLCBwcmV0dHlfaGVhZGVyLCBoZHJfdGVybWluYXRpb24pOwogCX0KIAlmZmx1c2goc3Rkb3V0KTsKQEAgLTExMiw2ICsxMTMsMTAgQEAKIAkgKiBjb25mdXNlIGRvd25zdHJlYW0gZ2l0LXBhY2stb2JqZWN0cyB2ZXJ5IGJhZGx5LgogCSAqLwogCWNvbnN0IGNoYXIgKmVwID0gc3RyY2hyKHAtPm5hbWUsICdcbicpOworCisJaWYgKHAtPml0ZW0tPnR5cGUgPT0gT0JKX0JMT0IgJiYgIWhhc19zaGExX2ZpbGUocC0+aXRlbS0+c2hhMSkpCisJCWRpZSgibWlzc2luZyBibG9iIG9iamVjdCAnJXMnIiwgc2hhMV90b19oZXgocC0+aXRlbS0+c2hhMSkpOworCiAJaWYgKGVwKSB7CiAJCXByaW50ZigiJXMgJS4qc1xuIiwgc2hhMV90b19oZXgocC0+aXRlbS0+c2hhMSksCiAJCSAgICAgICAoaW50KSAoZXAgLSBwLT5uYW1lKSwKQEAgLTE2OSwzOCArMTc0LDI3MyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQotewotCWludCBuciwgY2xvc2VzdDsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsICpiZXN0OworI2RlZmluZSBERUJVR19CSVNFQ1QgMAogCi0JbnIgPSAwOwotCXAgPSBsaXN0OwotCXdoaWxlIChwKSB7Ci0JCWlmICghcmV2cy5wcnVuZV9mbiB8fCAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVFJFRUNIQU5HRSkpCi0JCQlucisrOwotCQlwID0gcC0+bmV4dDsKK3N0YXRpYyBpbmxpbmUgaW50IHdlaWdodChzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0pCit7CisJcmV0dXJuICooKGludCopKGVsZW0tPml0ZW0tPnV0aWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdlaWdodF9zZXQoc3RydWN0IGNvbW1pdF9saXN0ICplbGVtLCBpbnQgd2VpZ2h0KQoreworCSooKGludCopKGVsZW0tPml0ZW0tPnV0aWwpKSA9IHdlaWdodDsKK30KKworc3RhdGljIGludCBjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWNvdW50Kys7CiAJfQotCWNsb3Nlc3QgPSAtMTsKLQliZXN0ID0gbGlzdDsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhhbGZ3YXkoc3RydWN0IGNvbW1pdF9saXN0ICpwLCBpbnQgZGlzdGFuY2UsIGludCBucikKK3sKKwkvKgorCSAqIERvbid0IHNob3J0LWN1dCBzb21ldGhpbmcgd2UgYXJlIG5vdCBnb2luZyB0byByZXR1cm4hCisJICovCisJaWYgKHJldnMucHJ1bmVfZm4gJiYgIShwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBUUkVFQ0hBTkdFKSkKKwkJcmV0dXJuIDA7CisJaWYgKERFQlVHX0JJU0VDVCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiAyIGFuZCAzIGFyZSBoYWxmd2F5IG9mIDUuCisJICogMyBpcyBoYWxmd2F5IG9mIDYgYnV0IDIgYW5kIDQgYXJlIG5vdC4KKwkgKi8KKwlkaXN0YW5jZSAqPSAyOworCXN3aXRjaCAoZGlzdGFuY2UgLSBucikgeworCWNhc2UgLTE6IGNhc2UgMDogY2FzZSAxOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKyNpZiAhREVCVUdfQklTRUNUCisjZGVmaW5lIHNob3dfbGlzdChhLGIsYyxkKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNlbHNlCitzdGF0aWMgdm9pZCBzaG93X2xpc3QoY29uc3QgY2hhciAqZGVidWcsIGludCBjb3VudGVkLCBpbnQgbnIsCisJCSAgICAgIHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzICglZC8lZClcbiIsIGRlYnVnLCBjb3VudGVkLCBucik7CiAKIAlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlpbnQgZGlzdGFuY2U7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcHA7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX3NoYTFfZmlsZShjb21taXQtPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCQljaGFyICplcCwgKnNwOwogCi0JCWlmIChyZXZzLnBydW5lX2ZuICYmICEocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVFJFRUNIQU5HRSkpCisJCWZwcmludGYoc3RkZXJyLCAiJWMlYyVjICIsCisJCQkoZmxhZ3MgJiBUUkVFQ0hBTkdFKSA/ICdUJyA6ICcgJywKKwkJCShmbGFncyAmIFVOSU5URVJFU1RJTkcpID8gJ1UnIDogJyAnLAorCQkJKGZsYWdzICYgQ09VTlRFRCkgPyAnQycgOiAnICcpOworCQlpZiAoY29tbWl0LT51dGlsKQorCQkJZnByaW50ZihzdGRlcnIsICIlM2QiLCB3ZWlnaHQocCkpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tLSIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgOCwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQlmb3IgKHBwID0gY29tbWl0LT5wYXJlbnRzOyBwcDsgcHAgPSBwcC0+bmV4dCkKKwkJCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LAorCQkJCXNoYTFfdG9faGV4KHBwLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCisJCXNwID0gc3Ryc3RyKGJ1ZiwgIlxuXG4iKTsKKwkJaWYgKHNwKSB7CisJCQlzcCArPSAyOworCQkJZm9yIChlcCA9IHNwOyAqZXAgJiYgKmVwICE9ICdcbic7IGVwKyspCisJCQkJOworCQkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIChpbnQpKGVwIC0gc3ApLCBzcCk7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0KK30KKyNlbmRpZiAvKiBERUJVR19CSVNFQ1QgKi8KKworLyoKKyAqIHplcm8gb3IgcG9zaXRpdmUgd2VpZ2h0IGlzIHRoZSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgY29tbWl0cyBpdCBjYW4KKyAqIHJlYWNoLCBpbmNsdWRpbmcgaXRzZWxmLiAgRXNwZWNpYWxseSwgd2VpZ2h0ID0gMCBtZWFucyBpdCBkb2VzIG5vdAorICogcmVhY2ggYW55IHRyZWUtY2hhbmdpbmcgY29tbWl0cyAoZS5nLiBqdXN0IGFib3ZlIHVuaW50ZXJlc3Rpbmcgb25lCisgKiBidXQgdHJhdmVyc2FsIGlzIHdpdGggcGF0aHNwZWMpLgorICoKKyAqIHdlaWdodCA9IC0xIG1lYW5zIGl0IGhhcyBvbmUgcGFyZW50IGFuZCBpdHMgZGlzdGFuY2UgaXMgeWV0IHRvCisgKiBiZSBjb21wdXRlZC4KKyAqCisgKiB3ZWlnaHQgPSAtMiBtZWFucyBpdCBoYXMgbW9yZSB0aGFuIG9uZSBwYXJlbnQgYW5kIGl0cyBkaXN0YW5jZSBpcworICogdW5rbm93bi4gIEFmdGVyIHJ1bm5pbmcgY291bnRfZGlzdGFuY2UoKSBmaXJzdCwgdGhleSB3aWxsIGdldCB6ZXJvCisgKiBvciBwb3NpdGl2ZSBkaXN0YW5jZS4KKyAqLworCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpmaW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCkKK3sKKwlpbnQgbiwgbnIsIG9uX2xpc3QsIGNvdW50ZWQsIGRpc3RhbmNlOworCXN0cnVjdCBjb21taXRfbGlzdCAqcCwgKmJlc3QsICpuZXh0LCAqbGFzdDsKKwlpbnQgKndlaWdodHM7CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGVudHJ5IiwgMCwgMCwgbGlzdCk7CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgdG90YWwgYW5kIHRyZWUtY2hhbmdpbmcgaXRlbXMgb24gdGhlCisJICogbGlzdCwgd2hpbGUgcmV2ZXJzaW5nIHRoZSBsaXN0LgorCSAqLworCWZvciAobnIgPSBvbl9saXN0ID0gMCwgbGFzdCA9IE5VTEwsIHAgPSBsaXN0OworCSAgICAgcDsKKwkgICAgIHAgPSBuZXh0KSB7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCW5leHQgPSBwLT5uZXh0OworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQogCQkJY29udGludWU7CisJCXAtPm5leHQgPSBsYXN0OworCQlsYXN0ID0gcDsKKwkJaWYgKCFyZXZzLnBydW5lX2ZuIHx8IChmbGFncyAmIFRSRUVDSEFOR0UpKQorCQkJbnIrKzsKKwkJb25fbGlzdCsrOworCX0KKwlsaXN0ID0gbGFzdDsKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIHNvcnRlZCIsIDAsIG5yLCBsaXN0KTsKIAorCSphbGwgPSBucjsKKwl3ZWlnaHRzID0geGNhbGxvYyhvbl9saXN0LCBzaXplb2YoaW50KikpOworCWNvdW50ZWQgPSAwOworCisJZm9yIChuID0gMCwgcCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJcC0+aXRlbS0+dXRpbCA9ICZ3ZWlnaHRzW24rK107CisJCXN3aXRjaCAoY291bnRfaW50ZXJlc3RpbmdfcGFyZW50cyhjb21taXQpKSB7CisJCWNhc2UgMDoKKwkJCWlmICghcmV2cy5wcnVuZV9mbiB8fCAoZmxhZ3MgJiBUUkVFQ0hBTkdFKSkgeworCQkJCXdlaWdodF9zZXQocCwgMSk7CisJCQkJY291bnRlZCsrOworCQkJCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgY291bnQgb25lIiwKKwkJCQkJICBjb3VudGVkLCBuciwgbGlzdCk7CisJCQl9CisJCQkvKgorCQkJICogb3RoZXJ3aXNlLCBpdCBpcyBrbm93biBub3QgdG8gcmVhY2ggYW55CisJCQkgKiB0cmVlLWNoYW5naW5nIGNvbW1pdCBhbmQgZ2V0cyB3ZWlnaHQgMC4KKwkJCSAqLworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXdlaWdodF9zZXQocCwgLTEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl3ZWlnaHRfc2V0KHAsIC0yKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBpbml0aWFsaXplIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJLyoKKwkgKiBJZiB5b3UgaGF2ZSBvbmx5IG9uZSBwYXJlbnQgaW4gdGhlIHJlc3VsdGluZyBzZXQKKwkgKiB0aGVuIHlvdSBjYW4gcmVhY2ggb25lIGNvbW1pdCBtb3JlIHRoYW4gdGhhdCBwYXJlbnQKKwkgKiBjYW4gcmVhY2guICBTbyB3ZSBkbyBub3QgaGF2ZSB0byBydW4gdGhlIGV4cGVuc2l2ZQorCSAqIGNvdW50X2Rpc3RhbmNlKCkgZm9yIHNpbmdsZSBzdHJhbmQgb2YgcGVhcmxzLgorCSAqCisJICogSG93ZXZlciwgaWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSBwYXJlbnRzLCB5b3UgY2Fubm90CisJICoganVzdCBhZGQgdGhlaXIgZGlzdGFuY2UgYW5kIG9uZSBmb3IgeW91cnNlbGYsIHNpbmNlCisJICogdGhleSB1c3VhbGx5IHJlYWNoIHRoZSBzYW1lIGFuY2VzdG9yIGFuZCB5b3Ugd291bGQKKwkgKiBlbmQgdXAgY291bnRpbmcgdGhlbSB0d2ljZSB0aGF0IHdheS4KKwkgKgorCSAqIFNvIHdlIHdpbGwgZmlyc3QgY291bnQgZGlzdGFuY2Ugb2YgbWVyZ2VzIHRoZSB1c3VhbAorCSAqIHdheSwgYW5kIHRoZW4gZmlsbCB0aGUgYmxhbmtzIHVzaW5nIGNoZWFwZXIgYWxnb3JpdGhtLgorCSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCW4gPSB3ZWlnaHQocCk7CisJCWlmIChuICE9IC0yKQorCQkJY29udGludWU7CiAJCWRpc3RhbmNlID0gY291bnRfZGlzdGFuY2UocCk7CiAJCWNsZWFyX2Rpc3RhbmNlKGxpc3QpOworCQl3ZWlnaHRfc2V0KHAsIGRpc3RhbmNlKTsKKworCQkvKiBEb2VzIGl0IGhhcHBlbiB0byBiZSBhdCBleGFjdGx5IGhhbGYtd2F5PyAqLworCQlpZiAoaGFsZndheShwLCBkaXN0YW5jZSwgbnIpKSB7CisJCQlwLT5uZXh0ID0gTlVMTDsKKwkJCSpyZWFjaGVzID0gZGlzdGFuY2U7CisJCQlmcmVlKHdlaWdodHMpOworCQkJcmV0dXJuIHA7CisJCX0KKwkJY291bnRlZCsrOworCX0KKworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgY291bnRfZGlzdGFuY2UiLCBjb3VudGVkLCBuciwgbGlzdCk7CisKKwl3aGlsZSAoY291bnRlZCA8IG5yKSB7CisJCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnE7CisJCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKKworCQkJaWYgKDAgPD0gd2VpZ2h0KHApKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChxID0gcC0+aXRlbS0+cGFyZW50czsgcTsgcSA9IHEtPm5leHQpIHsKKwkJCQlpZiAocS0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKDAgPD0gd2VpZ2h0KHEpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghcSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIHdlaWdodCBmb3IgcCBpcyB1bmtub3duIGJ1dCBxIGlzIGtub3duLgorCQkJICogYWRkIG9uZSBmb3IgcCBpdHNlbGYgaWYgcCBpcyB0byBiZSBjb3VudGVkLAorCQkJICogb3RoZXJ3aXNlIGluaGVyaXQgaXQgZnJvbSBxIGRpcmVjdGx5LgorCQkJICovCisJCQlpZiAoIXJldnMucHJ1bmVfZm4gfHwgKGZsYWdzICYgVFJFRUNIQU5HRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKKwkJCQljb3VudGVkKys7CisJCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAorCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7CisKKwkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCisJCQlkaXN0YW5jZSA9IHdlaWdodChwKTsKKwkJCWlmIChoYWxmd2F5KHAsIGRpc3RhbmNlLCBucikpIHsKKwkJCQlwLT5uZXh0ID0gTlVMTDsKKwkJCQkqcmVhY2hlcyA9IGRpc3RhbmNlOworCQkJCWZyZWUod2VpZ2h0cyk7CisJCQkJcmV0dXJuIHA7CisJCQl9CisJCX0KKwl9CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50ZWQgYWxsIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJLyogVGhlbiBmaW5kIHRoZSBiZXN0IG9uZSAqLworCWNvdW50ZWQgPSAtMTsKKwliZXN0ID0gbGlzdDsKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKKworCQlpZiAocmV2cy5wcnVuZV9mbiAmJiAhKGZsYWdzICYgVFJFRUNIQU5HRSkpCisJCQljb250aW51ZTsKKwkJZGlzdGFuY2UgPSB3ZWlnaHQocCk7CiAJCWlmIChuciAtIGRpc3RhbmNlIDwgZGlzdGFuY2UpCiAJCQlkaXN0YW5jZSA9IG5yIC0gZGlzdGFuY2U7Ci0JCWlmIChkaXN0YW5jZSA+IGNsb3Nlc3QpIHsKKwkJaWYgKGRpc3RhbmNlID4gY291bnRlZCkgewogCQkJYmVzdCA9IHA7Ci0JCQljbG9zZXN0ID0gZGlzdGFuY2U7CisJCQljb3VudGVkID0gZGlzdGFuY2U7CisJCQkqcmVhY2hlcyA9IHdlaWdodChwKTsKIAkJfQogCX0KIAlpZiAoYmVzdCkKIAkJYmVzdC0+bmV4dCA9IE5VTEw7CisJZnJlZSh3ZWlnaHRzKTsKIAlyZXR1cm4gYmVzdDsKIH0KIApAQCAtMjI2LDYgKzQ2Niw3IEBACiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OwogCWludCBpOwogCWludCByZWFkX2Zyb21fc3RkaW4gPSAwOworCWludCBiaXNlY3Rfc2hvd192YXJzID0gMDsKIAogCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKIAlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKQEAgLTI0OCw2ICs0ODksMTEgQEAKIAkJCWJpc2VjdF9saXN0ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0LXZhcnMiKSkgeworCQkJYmlzZWN0X2xpc3QgPSAxOworCQkJYmlzZWN0X3Nob3dfdmFycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKIAkJCWlmIChyZWFkX2Zyb21fc3RkaW4rKykKIAkJCQlkaWUoIi0tc3RkaW4gZ2l2ZW4gdHdpY2U/Iik7CkBAIC0yODYsOCArNTMyLDM5IEBACiAJaWYgKHJldnMudHJlZV9vYmplY3RzKQogCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzLCAmcmV2cywgc2hvd19lZGdlKTsKIAotCWlmIChiaXNlY3RfbGlzdCkKLQkJcmV2cy5jb21taXRzID0gZmluZF9iaXNlY3Rpb24ocmV2cy5jb21taXRzKTsKKwlpZiAoYmlzZWN0X2xpc3QpIHsKKwkJaW50IHJlYWNoZXMgPSByZWFjaGVzLCBhbGwgPSBhbGw7CisKKwkJcmV2cy5jb21taXRzID0gZmluZF9iaXNlY3Rpb24ocmV2cy5jb21taXRzLCAmcmVhY2hlcywgJmFsbCk7CisJCWlmIChiaXNlY3Rfc2hvd192YXJzKSB7CisJCQlpbnQgY250OworCQkJaWYgKCFyZXZzLmNvbW1pdHMpCisJCQkJcmV0dXJuIDE7CisJCQkvKgorCQkJICogcmV2cy5jb21taXRzIGNhbiByZWFjaCAicmVhY2hlcyIgY29tbWl0cyBhbW9uZworCQkJICogImFsbCIgY29tbWl0cy4gIElmIGl0IGlzIGdvb2QsIHRoZW4gdGhlcmUgYXJlCisJCQkgKiAoYWxsLXJlYWNoZXMpIGNvbW1pdHMgbGVmdCB0byBiZSBiaXNlY3RlZC4KKwkJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBpdCBpcyBiYWQsIHRoZW4gdGhlIHNldAorCQkJICogdG8gYmlzZWN0IGlzICJyZWFjaGVzIi4KKwkJCSAqIEEgYmlzZWN0IHNldCBvZiBzaXplIE4gaGFzIChOLTEpIGNvbW1pdHMgZnVydGhlcgorCQkJICogdG8gdGVzdCwgYXMgd2UgYWxyZWFkeSBrbm93IG9uZSBiYWQgb25lLgorCQkJICovCisJCQljbnQgPSBhbGwtcmVhY2hlczsKKwkJCWlmIChjbnQgPCByZWFjaGVzKQorCQkJCWNudCA9IHJlYWNoZXM7CisJCQlwcmludGYoImJpc2VjdF9yZXY9JXNcbiIKKwkJCSAgICAgICAiYmlzZWN0X25yPSVkXG4iCisJCQkgICAgICAgImJpc2VjdF9nb29kPSVkXG4iCisJCQkgICAgICAgImJpc2VjdF9iYWQ9JWRcbiIKKwkJCSAgICAgICAiYmlzZWN0X2FsbD0lZFxuIiwKKwkJCSAgICAgICBzaGExX3RvX2hleChyZXZzLmNvbW1pdHMtPml0ZW0tPm9iamVjdC5zaGExKSwKKwkJCSAgICAgICBjbnQgLSAxLAorCQkJICAgICAgIGFsbCAtIHJlYWNoZXMgLSAxLAorCQkJICAgICAgIHJlYWNoZXMgLSAxLAorCQkJICAgICAgIGFsbCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KIAogCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXJtLmMgYi9idWlsdGluLXJtLmMKaW5kZXggYmY0MjAwMy4uNGEwYmQ5MyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1ybS5jCisrKyBiL2J1aWx0aW4tcm0uYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX3JtX3VzYWdlW10gPQotImdpdC1ybSBbLWZdIFstbl0gWy1yXSBbLS1jYWNoZWRdIFstLV0gPGZpbGU+Li4uIjsKKyJnaXQtcm0gWy1mXSBbLW5dIFstcl0gWy0tY2FjaGVkXSBbLS1pZ25vcmUtdW5tYXRjaF0gWy0tcXVpZXRdIFstLV0gPGZpbGU+Li4uIjsKIAogc3RhdGljIHN0cnVjdCB7CiAJaW50IG5yLCBhbGxvYzsKQEAgLTEwNCwxMyArMTA0LDE0IEBACiBpbnQgY21kX3JtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCWludCBpLCBuZXdmZDsKLQlpbnQgc2hvd19vbmx5ID0gMCwgZm9yY2UgPSAwLCBpbmRleF9vbmx5ID0gMCwgcmVjdXJzaXZlID0gMDsKKwlpbnQgc2hvd19vbmx5ID0gMCwgZm9yY2UgPSAwLCBpbmRleF9vbmx5ID0gMCwgcmVjdXJzaXZlID0gMCwgcXVpZXQgPSAwOworCWludCBpZ25vcmVfdW5tYXRjaCA9IDA7CiAJY29uc3QgY2hhciAqKnBhdGhzcGVjOwogCWNoYXIgKnNlZW47CiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CiAKLQluZXdmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2tfZmlsZSwgZ2V0X2luZGV4X2ZpbGUoKSwgMSk7CisJbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAxKTsKIAogCWlmIChyZWFkX2NhY2hlKCkgPCAwKQogCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwpAQCAtMTMyLDYgKzEzMywxMCBAQAogCQkJZm9yY2UgPSAxOwogCQllbHNlIGlmICghc3RyY21wKGFyZywgIi1yIikpCiAJCQlyZWN1cnNpdmUgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSkKKwkJCXF1aWV0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWlnbm9yZS11bm1hdGNoIikpCisJCQlpZ25vcmVfdW5tYXRjaCA9IDE7CiAJCWVsc2UKIAkJCXVzYWdlKGJ1aWx0aW5fcm1fdXNhZ2UpOwogCX0KQEAgLTE1MywxNCArMTU4LDI0IEBACiAKIAlpZiAocGF0aHNwZWMpIHsKIAkJY29uc3QgY2hhciAqbWF0Y2g7CisJCWludCBzZWVuX2FueSA9IDA7CiAJCWZvciAoaSA9IDA7IChtYXRjaCA9IHBhdGhzcGVjW2ldKSAhPSBOVUxMIDsgaSsrKSB7Ci0JCQlpZiAoIXNlZW5baV0pCi0JCQkJZGllKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiwKLQkJCQkgICAgbWF0Y2gpOworCQkJaWYgKCFzZWVuW2ldKSB7CisJCQkJaWYgKCFpZ25vcmVfdW5tYXRjaCkgeworCQkJCQlkaWUoInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiLAorCQkJCQkgICAgbWF0Y2gpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlZW5fYW55ID0gMTsKKwkJCX0KIAkJCWlmICghcmVjdXJzaXZlICYmIHNlZW5baV0gPT0gTUFUQ0hFRF9SRUNVUlNJVkVMWSkKIAkJCQlkaWUoIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiLAogCQkJCSAgICAqbWF0Y2ggPyBtYXRjaCA6ICIuIik7CiAJCX0KKworCQlpZiAoISBzZWVuX2FueSkKKwkJCWV4aXQoMCk7CiAJfQogCiAJLyoKQEAgLTE2OCw3ICsxODMsNyBAQAogCSAqIG11c3QgbWF0Y2g7IGJ1dCB0aGUgZmlsZSBjYW4gYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHNpbmNlCiAJICogdGhpcyBzZXF1ZW5jZSBpcyBhIG5hdHVyYWwgIm5vdmljZSIgd2F5OgogCSAqCi0JICoJcm0gRjsgZ2l0IGZtIEYKKwkgKglybSBGOyBnaXQgcm0gRgogCSAqCiAJICogRnVydGhlciwgaWYgSEVBRCBjb21taXQgZXhpc3RzLCAiZGlmZi1pbmRleCAtLWNhY2hlZCIgbXVzdAogCSAqIHJlcG9ydCBubyBjaGFuZ2VzIHVubGVzcyBmb3JjZWQuCkBAIC0xODcsNyArMjAyLDggQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0Lm5hbWVbaV07Ci0JCXByaW50Zigicm0gJyVzJ1xuIiwgcGF0aCk7CisJCWlmICghcXVpZXQpCisJCQlwcmludGYoInJtICclcydcbiIsIHBhdGgpOwogCiAJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQogCQkJZGllKCJnaXQtcm06IHVuYWJsZSB0byByZW1vdmUgJXMiLCBwYXRoKTsKQEAgLTIyMCw3ICsyMzYsNyBAQAogCiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CiAJCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8Ci0JCSAgICBjbG9zZShuZXdmZCkgfHwgY29tbWl0X2xvY2tfZmlsZSgmbG9ja19maWxlKSkKKwkJICAgIGNsb3NlKG5ld2ZkKSB8fCBjb21taXRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUpKQogCQkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvcnRsb2cuYyBiL2J1aWx0aW4tc2hvcnRsb2cuYwppbmRleCAyOTM0M2FlLi44ZDNmNzQyIDEwMDY0NAotLS0gYS9idWlsdGluLXNob3J0bG9nLmMKKysrIGIvYnVpbHRpbi1zaG9ydGxvZy5jCkBAIC00LDYgKzQsOCBAQAogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJwYXRoLWxpc3QuaCIKICNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHNob3J0bG9nX3VzYWdlW10gPQogImdpdC1zaG9ydGxvZyBbLW5dIFstc10gWzxjb21taXQtaWQ+Li4uIF0iOwpAQCAtMjUsODMgKzI3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwYXRoX2xpc3QgbWFpbG1hcCA9IHtOVUxMLCAwLCAwLCAwfTsKIAotc3RhdGljIGludCByZWFkX21haWxtYXAoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0JY2hhciBidWZmZXJbMTAyNF07Ci0JRklMRSAqZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotCi0JaWYgKGYgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0Jd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpICE9IE5VTEwpIHsKLQkJY2hhciAqZW5kX29mX25hbWUsICpsZWZ0X2JyYWNrZXQsICpyaWdodF9icmFja2V0OwotCQljaGFyICpuYW1lLCAqZW1haWw7Ci0JCWludCBpOwotCQlpZiAoYnVmZmVyWzBdID09ICcjJykgewotCQkJc3RhdGljIGNvbnN0IGNoYXIgYWJicmV2W10gPSAiIyByZXBvLWFiYnJldjoiOwotCQkJaW50IGFiYmxlbiA9IHNpemVvZihhYmJyZXYpIC0gMTsKLQkJCWludCBsZW4gPSBzdHJsZW4oYnVmZmVyKTsKLQotCQkJaWYgKGxlbiAmJiBidWZmZXJbbGVuIC0gMV0gPT0gJ1xuJykKLQkJCQlidWZmZXJbLS1sZW5dID0gMDsKLQkJCWlmICghc3RybmNtcChidWZmZXIsIGFiYnJldiwgYWJibGVuKSkgewotCQkJCWNoYXIgKmNwOwotCi0JCQkJaWYgKGNvbW1vbl9yZXBvX3ByZWZpeCkKLQkJCQkJZnJlZShjb21tb25fcmVwb19wcmVmaXgpOwotCQkJCWNvbW1vbl9yZXBvX3ByZWZpeCA9IHhtYWxsb2MobGVuKTsKLQotCQkJCWZvciAoY3AgPSBidWZmZXIgKyBhYmJsZW47IGlzc3BhY2UoKmNwKTsgY3ArKykKLQkJCQkJOyAvKiBub3RoaW5nICovCi0JCQkJc3RyY3B5KGNvbW1vbl9yZXBvX3ByZWZpeCwgY3ApOwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChsZWZ0X2JyYWNrZXQgPSBzdHJjaHIoYnVmZmVyLCAnPCcpKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmICgocmlnaHRfYnJhY2tldCA9IHN0cmNocihsZWZ0X2JyYWNrZXQgKyAxLCAnPicpKSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChyaWdodF9icmFja2V0ID09IGxlZnRfYnJhY2tldCArIDEpCi0JCQljb250aW51ZTsKLQkJZm9yIChlbmRfb2ZfbmFtZSA9IGxlZnRfYnJhY2tldDsgZW5kX29mX25hbWUgIT0gYnVmZmVyCi0JCQkJJiYgaXNzcGFjZShlbmRfb2ZfbmFtZVstMV0pOyBlbmRfb2ZfbmFtZS0tKQotCQkJLyoga2VlcCBvbiBsb29raW5nICovCi0JCWlmIChlbmRfb2ZfbmFtZSA9PSBidWZmZXIpCi0JCQljb250aW51ZTsKLQkJbmFtZSA9IHhtYWxsb2MoZW5kX29mX25hbWUgLSBidWZmZXIgKyAxKTsKLQkJc3RybGNweShuYW1lLCBidWZmZXIsIGVuZF9vZl9uYW1lIC0gYnVmZmVyICsgMSk7Ci0JCWVtYWlsID0geG1hbGxvYyhyaWdodF9icmFja2V0IC0gbGVmdF9icmFja2V0KTsKLQkJZm9yIChpID0gMDsgaSA8IHJpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxOyBpKyspCi0JCQllbWFpbFtpXSA9IHRvbG93ZXIobGVmdF9icmFja2V0W2kgKyAxXSk7Ci0JCWVtYWlsW3JpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxXSA9ICdcMCc7Ci0JCXBhdGhfbGlzdF9pbnNlcnQoZW1haWwsICZtYWlsbWFwKS0+dXRpbCA9IG5hbWU7Ci0JfQotCWZjbG9zZShmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBtYXBfZW1haWwoY2hhciAqZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW4pCi17Ci0JY2hhciAqcDsKLQlzdHJ1Y3QgcGF0aF9saXN0X2l0ZW0gKml0ZW07Ci0KLQkvKiBhdXRvY29tcGxldGUgY29tbW9uIGRldmVsb3BlcnMgKi8KLQlwID0gc3RyY2hyKGVtYWlsLCAnPicpOwotCWlmICghcCkKLQkJcmV0dXJuIDA7Ci0KLQkqcCA9ICdcMCc7Ci0JLyogZG93bmNhc2UgdGhlIGVtYWlsIGFkZHJlc3MgKi8KLQlmb3IgKHAgPSBlbWFpbDsgKnA7IHArKykKLQkJKnAgPSB0b2xvd2VyKCpwKTsKLQlpdGVtID0gcGF0aF9saXN0X2xvb2t1cChlbWFpbCwgJm1haWxtYXApOwotCWlmIChpdGVtICE9IE5VTEwpIHsKLQkJY29uc3QgY2hhciAqcmVhbG5hbWUgPSAoY29uc3QgY2hhciAqKWl0ZW0tPnV0aWw7Ci0JCXN0cm5jcHkobmFtZSwgcmVhbG5hbWUsIG1heGxlbik7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaW5zZXJ0X2F1dGhvcl9vbmVsaW5lKHN0cnVjdCBwYXRoX2xpc3QgKmxpc3QsCiAJCWNvbnN0IGNoYXIgKmF1dGhvciwgaW50IGF1dGhvcmxlbiwKIAkJY29uc3QgY2hhciAqb25lbGluZSwgaW50IG9uZWxpbmVsZW4pCkBAIC0xODMsNyArMTA4LDcgQEAKIAkJCQkoYm9iID0gc3RyY2hyKGJ1ZmZlciArIDcsICc8JykpICE9IE5VTEwpIHsKIAkJCWNoYXIgYnVmZmVyMlsxMDI0XSwgb2Zmc2V0ID0gMDsKIAotCQkJaWYgKG1hcF9lbWFpbChib2IgKyAxLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkKKwkJCWlmIChtYXBfZW1haWwoJm1haWxtYXAsIGJvYiArIDEsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKQogCQkJCWJvYiA9IGJ1ZmZlciArIHN0cmxlbihidWZmZXIpOwogCQkJZWxzZSB7CiAJCQkJb2Zmc2V0ID0gODsKQEAgLTIzNyw3ICsxNjIsNyBAQAogCQkJCQlkaWUoIkludmFsaWQgY29tbWl0IGJ1ZmZlcjogJXMiLAogCQkJCQkgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOwogCi0JCQkJaWYgKG1hcF9lbWFpbChicmFja2V0ICsgMSwgc2NyYXRjaCwKKwkJCQlpZiAobWFwX2VtYWlsKCZtYWlsbWFwLCBicmFja2V0ICsgMSwgc2NyYXRjaCwKIAkJCQkJCQlzaXplb2Yoc2NyYXRjaCkpKSB7CiAJCQkJCWF1dGhvciA9IHNjcmF0Y2g7CiAJCQkJCWF1dGhvcmxlbiA9IHN0cmxlbihzY3JhdGNoKTsKQEAgLTI3NiwxMSArMjAxLDY0IEBACiAKIH0KIAorc3RhdGljIGludCBwYXJzZV91aW50KGNoYXIgY29uc3QgKiphcmcsIGludCBjb21tYSkKK3sKKwl1bnNpZ25lZCBsb25nIHVsOworCWludCByZXQ7CisJY2hhciAqZW5kcDsKKworCXVsID0gc3RydG91bCgqYXJnLCAmZW5kcCwgMTApOworCWlmIChlbmRwICE9ICphcmcgJiYgKmVuZHAgJiYgKmVuZHAgIT0gY29tbWEpCisJCXJldHVybiAtMTsKKwlyZXQgPSAoaW50KSB1bDsKKwlpZiAocmV0ICE9IHVsKQorCQlyZXR1cm4gLTE7CisJKmFyZyA9IGVuZHA7CisJaWYgKCoqYXJnKQorCQkoKmFyZykrKzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciB3cmFwX2FyZ191c2FnZVtdID0gIi13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dIjsKKyNkZWZpbmUgREVGQVVMVF9XUkFQTEVOIDc2CisjZGVmaW5lIERFRkFVTFRfSU5ERU5UMSA2CisjZGVmaW5lIERFRkFVTFRfSU5ERU5UMiA5CisKK3N0YXRpYyB2b2lkIHBhcnNlX3dyYXBfYXJncyhjb25zdCBjaGFyICphcmcsIGludCAqaW4xLCBpbnQgKmluMiwgaW50ICp3cmFwKQoreworCWFyZyArPSAyOyAvKiBza2lwIC13ICovCisKKwkqd3JhcCA9IHBhcnNlX3VpbnQoJmFyZywgJywnKTsKKwlpZiAoKndyYXAgPCAwKQorCQlkaWUod3JhcF9hcmdfdXNhZ2UpOworCSppbjEgPSBwYXJzZV91aW50KCZhcmcsICcsJyk7CisJaWYgKCppbjEgPCAwKQorCQlkaWUod3JhcF9hcmdfdXNhZ2UpOworCSppbjIgPSBwYXJzZV91aW50KCZhcmcsICdcMCcpOworCWlmICgqaW4yIDwgMCkKKwkJZGllKHdyYXBfYXJnX3VzYWdlKTsKKworCWlmICghKndyYXApCisJCSp3cmFwID0gREVGQVVMVF9XUkFQTEVOOworCWlmICghKmluMSkKKwkJKmluMSA9IERFRkFVTFRfSU5ERU5UMTsKKwlpZiAoISppbjIpCisJCSppbjIgPSBERUZBVUxUX0lOREVOVDI7CisJaWYgKCp3cmFwICYmCisJICAgICgoKmluMSAmJiAqd3JhcCA8PSAqaW4xKSB8fAorCSAgICAgKCppbjIgJiYgKndyYXAgPD0gKmluMikpKQorCQlkaWUod3JhcF9hcmdfdXNhZ2UpOworfQorCiBpbnQgY21kX3Nob3J0bG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCByZXZfaW5mbyByZXY7CiAJc3RydWN0IHBhdGhfbGlzdCBsaXN0ID0geyBOVUxMLCAwLCAwLCAxIH07CiAJaW50IGksIGosIHNvcnRfYnlfbnVtYmVyID0gMCwgc3VtbWFyeSA9IDA7CisJaW50IHdyYXBfbGluZXMgPSAwOworCWludCB3cmFwID0gREVGQVVMVF9XUkFQTEVOOworCWludCBpbjEgPSBERUZBVUxUX0lOREVOVDE7CisJaW50IGluMiA9IERFRkFVTFRfSU5ERU5UMjsKIAogCS8qIHNpbmNlIC1uIGlzIGEgc2hhZG93ZWQgcmV2IGFyZ3VtZW50LCBwYXJzZSBvdXIgYXJncyBmaXJzdCAqLwogCXdoaWxlIChhcmdjID4gMSkgewpAQCAtMjg5LDYgKzI2NywxMCBAQAogCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcyIpIHx8CiAJCQkJIXN0cmNtcChhcmd2WzFdLCAiLS1zdW1tYXJ5IikpCiAJCQlzdW1tYXJ5ID0gMTsKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmd2WzFdLCAiLXciKSkgeworCQkJd3JhcF9saW5lcyA9IDE7CisJCQlwYXJzZV93cmFwX2FyZ3MoYXJndlsxXSwgJmluMSwgJmluMiwgJndyYXApOworCQl9CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1oIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLS1oZWxwIikpCiAJCQl1c2FnZShzaG9ydGxvZ191c2FnZSk7CiAJCWVsc2UKQEAgLTMwMSw4ICsyODMsNyBAQAogCWlmIChhcmdjID4gMSkKIAkJZGllICgidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIsIGFyZ3ZbMV0pOwogCi0JaWYgKCFhY2Nlc3MoIi5tYWlsbWFwIiwgUl9PSykpCi0JCXJlYWRfbWFpbG1hcCgiLm1haWxtYXAiKTsKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsICIubWFpbG1hcCIsICZjb21tb25fcmVwb19wcmVmaXgpOwogCiAJaWYgKHJldi5wZW5kaW5nLm5yID09IDApIHsKIAkJaWYgKGlzYXR0eSgwKSkKQEAgLTMyMyw5ICszMDQsMTggQEAKIAkJCXByaW50ZigiJXM6ICVkXG4iLCBsaXN0Lml0ZW1zW2ldLnBhdGgsIG9uZWxpbmVzLT5ucik7CiAJCX0gZWxzZSB7CiAJCQlwcmludGYoIiVzICglZCk6XG4iLCBsaXN0Lml0ZW1zW2ldLnBhdGgsIG9uZWxpbmVzLT5ucik7Ci0JCQlmb3IgKGogPSBvbmVsaW5lcy0+bnIgLSAxOyBqID49IDA7IGotLSkKLQkJCQlwcmludGYoIiAgICAgICVzXG4iLCBvbmVsaW5lcy0+aXRlbXNbal0ucGF0aCk7Ci0JCQlwcmludGYoIlxuIik7CisJCQlmb3IgKGogPSBvbmVsaW5lcy0+bnIgLSAxOyBqID49IDA7IGotLSkgeworCQkJCWNvbnN0IGNoYXIgKm1zZyA9IG9uZWxpbmVzLT5pdGVtc1tqXS5wYXRoOworCisJCQkJaWYgKHdyYXBfbGluZXMpIHsKKwkJCQkJaW50IGNvbCA9IHByaW50X3dyYXBwZWRfdGV4dChtc2csIGluMSwgaW4yLCB3cmFwKTsKKwkJCQkJaWYgKGNvbCAhPSB3cmFwKQorCQkJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiAgICAgICVzXG4iLCBtc2cpOworCQkJfQorCQkJcHV0Y2hhcignXG4nKTsKIAkJfQogCiAJCW9uZWxpbmVzLT5zdHJkdXBfcGF0aHMgPSAxOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCmluZGV4IDM5NTZjNTYuLjJiYmRhNjcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluLXVucGFjay1vYmplY3RzLmMKQEAgLTcsMTMgKzcsMTUgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKIAogc3RhdGljIGludCBkcnlfcnVuLCBxdWlldCwgcmVjb3ZlciwgaGFzX2Vycm9yczsKIHN0YXRpYyBjb25zdCBjaGFyIHVucGFja191c2FnZVtdID0gImdpdC11bnBhY2stb2JqZWN0cyBbLW5dIFstcV0gWy1yXSA8IHBhY2stZmlsZSI7CiAKIC8qIFdlIGFsd2F5cyByZWFkIGluIDRrQiBjaHVua3MuICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbNDA5Nl07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxlbiwgY29uc3VtZWRfYnl0ZXM7CitzdGF0aWMgdW5zaWduZWQgaW50IG9mZnNldCwgbGVuOworc3RhdGljIG9mZl90IGNvbnN1bWVkX2J5dGVzOwogc3RhdGljIFNIQV9DVFggY3R4OwogCiAvKgpAQCAtNDksNiArNTEsMTAgQEAKIAkJZGllKCJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIpOwogCWxlbiAtPSBieXRlczsKIAlvZmZzZXQgKz0gYnl0ZXM7CisKKwkvKiBtYWtlIHN1cmUgb2ZmX3QgaXMgc3VmZmljaWVudGx5IGxhcmdlIG5vdCB0byB3cmFwICovCisJaWYgKGNvbnN1bWVkX2J5dGVzID4gY29uc3VtZWRfYnl0ZXMgKyBieXRlcykKKwkJZGllKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90Iik7CiAJY29uc3VtZWRfYnl0ZXMgKz0gYnl0ZXM7CiB9CiAKQEAgLTg4LDE3ICs5NCwxNyBAQAogCiBzdHJ1Y3QgZGVsdGFfaW5mbyB7CiAJdW5zaWduZWQgY2hhciBiYXNlX3NoYTFbMjBdOwotCXVuc2lnbmVkIGxvbmcgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgbnI7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXZvaWQgKmRlbHRhOwotCXVuc2lnbmVkIG5yOwogCXN0cnVjdCBkZWx0YV9pbmZvICpuZXh0OwogfTsKIAogc3RhdGljIHN0cnVjdCBkZWx0YV9pbmZvICpkZWx0YV9saXN0OwogCiBzdGF0aWMgdm9pZCBhZGRfZGVsdGFfdG9fbGlzdCh1bnNpZ25lZCBuciwgdW5zaWduZWQgY29uc3QgY2hhciAqYmFzZV9zaGExLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX29mZnNldCwKKwkJCSAgICAgIG9mZl90IGJhc2Vfb2Zmc2V0LAogCQkJICAgICAgdm9pZCAqZGVsdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlzdHJ1Y3QgZGVsdGFfaW5mbyAqaW5mbyA9IHhtYWxsb2Moc2l6ZW9mKCppbmZvKSk7CkBAIC0xMTMsNyArMTE5LDcgQEAKIH0KIAogc3RydWN0IG9ial9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlvZmZfdCBvZmZzZXQ7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIH07CiAKQEAgLTIwMCw3ICsyMDYsNyBAQAogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGJhc2VfZm91bmQgPSAwOwogCQl1bnNpZ25lZCBjaGFyICpwYWNrLCBjOwotCQl1bnNpZ25lZCBsb25nIGJhc2Vfb2Zmc2V0OworCQlvZmZfdCBiYXNlX29mZnNldDsKIAkJdW5zaWduZWQgbG8sIG1pZCwgaGk7CiAKIAkJcGFjayA9IGZpbGwoMSk7CkBAIC0yMDksNyArMjE1LDcgQEAKIAkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OwogCQl3aGlsZSAoYyAmIDEyOCkgewogCQkJYmFzZV9vZmZzZXQgKz0gMTsKLQkJCWlmICghYmFzZV9vZmZzZXQgfHwgYmFzZV9vZmZzZXQgJiB+KH4wVUwgPj4gNykpCisJCQlpZiAoIWJhc2Vfb2Zmc2V0IHx8IE1TQihiYXNlX29mZnNldCwgNykpCiAJCQkJZGllKCJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0Iik7CiAJCQlwYWNrID0gZmlsbCgxKTsKIAkJCWMgPSAqcGFjazsKQEAgLTI1OSw3ICsyNjUsNyBAQAogCWZyZWUoYmFzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVucGFja19vbmUodW5zaWduZWQgbnIsIHVuc2lnbmVkIHRvdGFsKQorc3RhdGljIHZvaWQgdW5wYWNrX29uZSh1bnNpZ25lZCBucikKIHsKIAl1bnNpZ25lZCBzaGlmdDsKIAl1bnNpZ25lZCBjaGFyICpwYWNrLCBjOwpAQCAtMjgxLDIwICsyODcsNyBAQAogCQlzaXplICs9IChjICYgMHg3ZikgPDwgc2hpZnQ7CiAJCXNoaWZ0ICs9IDc7CiAJfQotCWlmICghcXVpZXQpIHsKLQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9zZWM7Ci0JCXN0YXRpYyB1bnNpZ25lZCBsYXN0X3BlcmNlbnQ7Ci0JCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQkJdW5zaWduZWQgcGVyY2VudGFnZSA9ICgobnIrMSkgKiAxMDApIC8gdG90YWw7CiAKLQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotCQlpZiAocGVyY2VudGFnZSAhPSBsYXN0X3BlcmNlbnQgfHwgbm93LnR2X3NlYyAhPSBsYXN0X3NlYykgewotCQkJbGFzdF9zZWMgPSBub3cudHZfc2VjOwotCQkJbGFzdF9wZXJjZW50ID0gcGVyY2VudGFnZTsKLQkJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCV1LyV1KSBkb25lXHIiLAotCQkJCQlwZXJjZW50YWdlLCAobnIrMSksIHRvdGFsKTsKLQkJfQotCX0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE9CSl9DT01NSVQ6CiAJY2FzZSBPQkpfVFJFRToKQEAgLTMxOCw2ICszMTEsNyBAQAogc3RhdGljIHZvaWQgdW5wYWNrX2FsbCh2b2lkKQogewogCWludCBpOworCXN0cnVjdCBwcm9ncmVzcyBwcm9ncmVzczsKIAlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkciA9IGZpbGwoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOwogCXVuc2lnbmVkIG5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKIApAQCAtMzI1LDEyICszMTksMTkgQEAKIAkJZGllKCJiYWQgcGFjayBmaWxlIik7CiAJaWYgKCFwYWNrX3ZlcnNpb25fb2soaGRyLT5oZHJfdmVyc2lvbikpCiAJCWRpZSgidW5rbm93biBwYWNrIGZpbGUgdmVyc2lvbiAlZCIsIG50b2hsKGhkci0+aGRyX3ZlcnNpb24pKTsKLQlmcHJpbnRmKHN0ZGVyciwgIlVucGFja2luZyAlZCBvYmplY3RzXG4iLCBucl9vYmplY3RzKTsKLQotCW9ial9saXN0ID0geG1hbGxvYyhucl9vYmplY3RzICogc2l6ZW9mKCpvYmpfbGlzdCkpOwogCXVzZShzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7Ci0JZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykKLQkJdW5wYWNrX29uZShpLCBucl9vYmplY3RzKTsKKworCWlmICghcXVpZXQpCisJCXN0YXJ0X3Byb2dyZXNzKCZwcm9ncmVzcywgIlVucGFja2luZyAldSBvYmplY3RzLi4uIiwgIiIsIG5yX29iamVjdHMpOworCW9ial9saXN0ID0geG1hbGxvYyhucl9vYmplY3RzICogc2l6ZW9mKCpvYmpfbGlzdCkpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJdW5wYWNrX29uZShpKTsKKwkJaWYgKCFxdWlldCkKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MoJnByb2dyZXNzLCBpICsgMSk7CisJfQorCWlmICghcXVpZXQpCisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKwogCWlmIChkZWx0YV9saXN0KQogCQlkaWUoInVucmVzb2x2ZWQgZGVsdGFzIGxlZnQgYWZ0ZXIgdW5wYWNraW5nIik7CiB9CkBAIC0zOTksNyArNDAwLDUgQEAKIAl9CiAKIAkvKiBBbGwgZG9uZSAqLwotCWlmICghcXVpZXQpCi0JCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKIAlyZXR1cm4gaGFzX2Vycm9yczsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMgYi9idWlsdGluLXVwZGF0ZS1pbmRleC5jCmluZGV4IDg2NTk4MDAuLjhmOTg5OTEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKKysrIGIvYnVpbHRpbi11cGRhdGUtaW5kZXguYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJjYWNoZS10cmVlLmgiCiAjaW5jbHVkZSAidHJlZS13YWxrLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKIAogLyoKICAqIERlZmF1bHQgdG8gbm90IGFsbG93aW5nIGNoYW5nZXMgdG8gdGhlIGxpc3Qgb2YgZmlsZXMuIFRoZQpAQCAtNjAsNzYgKzYxLDE1MSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBhZGRfZmlsZV90b19jYWNoZShjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCByZW1vdmVfb25lX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKIHsKLQlpbnQgc2l6ZSwgbmFtZWxlbiwgb3B0aW9uLCBzdGF0dXM7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKLQlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAoIWFsbG93X3JlbW92ZSkKKwkJcmV0dXJuIGVycm9yKCIlczogZG9lcyBub3QgZXhpc3QgYW5kIC0tcmVtb3ZlIG5vdCBwYXNzZWQiLCBwYXRoKTsKKwlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIsIHBhdGgpOworCXJldHVybiAwOworfQogCi0Jc3RhdHVzID0gbHN0YXQocGF0aCwgJnN0KTsKKy8qCisgKiBIYW5kbGUgYSBwYXRoIHRoYXQgY291bGRuJ3QgYmUgbHN0YXQnZWQuIEl0J3MgZWl0aGVyOgorICogIC0gbWlzc2luZyBmaWxlIChFTk9FTlQgb3IgRU5PVERJUikuIFRoYXQncyBvayBpZiB3ZSdyZQorICogICAgc3VwcG9zZWQgdG8gYmUgcmVtb3ZpbmcgaXQgYW5kIHRoZSByZW1vdmFsIGFjdHVhbGx5CisgKiAgICBzdWNjZWVkcy4KKyAqICAtIHBlcm1pc3Npb24gZXJyb3IuIFRoYXQncyBuZXZlciBvay4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2xzdGF0X2Vycm9yKGNvbnN0IGNoYXIgKnBhdGgsIGludCBlcnIpCit7CisJaWYgKGVyciA9PSBFTk9FTlQgfHwgZXJyID09IEVOT1RESVIpCisJCXJldHVybiByZW1vdmVfb25lX3BhdGgocGF0aCk7CisJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX29uZV9wYXRoKHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IG9wdGlvbiwgc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0geGNhbGxvYygxLCBzaXplKTsKKworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBodG9ucyhsZW4pOworCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCBzdCk7CisJY2UtPmNlX21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChvbGQsIHN0LT5zdF9tb2RlKTsKKworCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCBzdCwgIWluZm9fb25seSkpCisJCXJldHVybiAtMTsKKwlvcHRpb24gPSBhbGxvd19hZGQgPyBBRERfQ0FDSEVfT0tfVE9fQUREIDogMDsKKwlvcHRpb24gfD0gYWxsb3dfcmVwbGFjZSA/IEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDogMDsKKwlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgYWRkIHRvIHRoZSBpbmRleCAtIG1pc3NpbmcgLS1hZGQgb3B0aW9uPyIsIHBhdGgpOworCXJldHVybiAwOworfQorCisvKgorICogSGFuZGxlIGEgcGF0aCB0aGF0IHdhcyBhIGRpcmVjdG9yeS4gRm91ciBjYXNlczoKKyAqCisgKiAgLSBpdCdzIGFscmVhZHkgYSBnaXRsaW5rIGluIHRoZSBpbmRleCwgYW5kIHdlIGtlZXAgaXQgdGhhdAorICogICAgd2F5LCBhbmQgdXBkYXRlIGl0IGlmIHdlIGNhbiAoaWYgd2UgY2Fubm90IGZpbmQgdGhlIEhFQUQsCisgKiAgICB3ZSdyZSBnb2luZyB0byBrZWVwIGl0IHVuY2hhbmdlZCBpbiB0aGUgaW5kZXghKQorICoKKyAqICAtIGl0J3MgYSAqZmlsZSogaW4gdGhlIGluZGV4LCBpbiB3aGljaCBjYXNlIGl0IHNob3VsZCBiZQorICogICAgcmVtb3ZlZCBhcyBhIGZpbGUgaWYgcmVtb3ZhbCBpcyBhbGxvd2VkLCBzaW5jZSBpdCBkb2Vzbid0CisgKiAgICBleGlzdCBhcyBzdWNoIGFueSBtb3JlLiBJZiByZW1vdmFsIGlzbid0IGFsbG93ZWQsIGl0J3MKKyAqICAgIGFuIGVycm9yLgorICoKKyAqICAgIChOT1RFISBUaGlzIGlzIG9sZCBhbmQgYXJndWFibHkgZmFpcmx5IHN0cmFuZ2UgYmVoYXZpb3VyLgorICogICAgV2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgYW4gZXJyb3IgdW5jb25kaXRpb25hbGx5LCBhbmQKKyAqICAgIHVzZSAiLS1mb3JjZS1yZW1vdmUiIGlmIHlvdSBhY3R1YWxseSB3YW50IHRvIGZvcmNlIHJlbW92YWwpLgorICoKKyAqICAtIGl0IHVzZWQgdG8gZXhpc3QgYXMgYSBzdWJkaXJlY3RvcnkgKGllIG11bHRpcGxlIGZpbGVzIHdpdGgKKyAqICAgIHRoaXMgcGFydGljdWxhciBwcmVmaXgpIGluIHRoZSBpbmRleCwgaW4gd2hpY2ggY2FzZSBpdCdzIHdyb25nCisgKiAgICB0byB0cnkgdG8gdXBkYXRlIGl0IGFzIGEgZGlyZWN0b3J5LgorICoKKyAqICAtIGl0IGRvZXNuJ3QgZXhpc3QgYXQgYWxsIGluIHRoZSBpbmRleCwgYnV0IGl0IGlzIGEgdmFsaWQKKyAqICAgIGdpdCBkaXJlY3RvcnksIGFuZCBpdCBzaG91bGQgYmUgKmFkZGVkKiBhcyBhIGdpdGxpbmsuCisgKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisKKwkvKiBFeGFjdCBtYXRjaDogZmlsZSBvciBleGlzdGluZyBnaXRsaW5rICovCisJaWYgKHBvcyA+PSAwKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKFNfSVNESVJMTksobnRvaGwoY2UtPmNlX21vZGUpKSkgeworCisJCQkvKiBEbyBub3RoaW5nIHRvIHRoZSBpbmRleCBpZiB0aGVyZSBpcyBubyBIRUFEISAqLworCQkJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYocGF0aCwgIkhFQUQiLCBzaGExKSA8IDApCisJCQkJcmV0dXJuIDA7CisKKwkJCXJldHVybiBhZGRfb25lX3BhdGgoY2UsIHBhdGgsIGxlbiwgc3QpOworCQl9CisJCS8qIFNob3VsZCB0aGlzIGJlIGFuIHVuY29uZGl0aW9uYWwgZXJyb3I/ICovCisJCXJldHVybiByZW1vdmVfb25lX3BhdGgocGF0aCk7CisJfQorCisJLyogSW5leGFjdCBtYXRjaDogaXMgdGhlcmUgcGVyaGFwcyBhIHN1YmRpcmVjdG9yeSBtYXRjaD8gKi8KKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKKworCQlpZiAoc3RybmNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoY2UtPm5hbWVbbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOworCisJCS8qIFN1YmRpcmVjdG9yeSBtYXRjaCAtIGVycm9yIG91dCAqLworCQlyZXR1cm4gZXJyb3IoIiVzOiBpcyBhIGRpcmVjdG9yeSAtIGFkZCBpbmRpdmlkdWFsIGZpbGVzIGluc3RlYWQiLCBwYXRoKTsKKwl9CisKKwkvKiBObyBtYXRjaCAtIHNob3VsZCB3ZSBhZGQgaXQgYXMgYSBnaXRsaW5rPyAqLworCWlmICghcmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsIHNoYTEpKQorCQlyZXR1cm4gYWRkX29uZV9wYXRoKE5VTEwsIHBhdGgsIGxlbiwgc3QpOworCisJLyogRXJyb3Igb3V0LiAqLworCXJldHVybiBlcnJvcigiJXM6IGlzIGEgZGlyZWN0b3J5IC0gYWRkIGZpbGVzIGluc2lkZSBpbnN0ZWFkIiwgcGF0aCk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGEgcmVndWxhciBmaWxlCisgKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gcG9zIDwgMCA/IE5VTEwgOiBhY3RpdmVfY2FjaGVbcG9zXTsKKworCWlmIChjZSAmJiBTX0lTRElSTE5LKG50b2hsKGNlLT5jZV9tb2RlKSkpCisJCXJldHVybiBlcnJvcigiJXMgaXMgYWxyZWFkeSBhIGdpdGxpbmssIG5vdCByZXBsYWNpbmciLCBwYXRoKTsKKworCXJldHVybiBhZGRfb25lX3BhdGgoY2UsIHBhdGgsIGxlbiwgc3QpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CiAKIAkvKiBXZSBwcm9iYWJseSB3YW50IHRvIGRvIHRoaXMgaW4gcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZSgpIGFuZAogCSAqIGFkZF9jYWNoZV9lbnRyeSgpIGluc3RlYWQuLi4KIAkgKi8KIAljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChhY3RpdmVfY2FjaGVfdHJlZSwgcGF0aCk7CiAKLQlpZiAoc3RhdHVzIDwgMCB8fCBTX0lTRElSKHN0LnN0X21vZGUpKSB7Ci0JCS8qIFdoZW4gd2UgdXNlZCB0byBoYXZlICJwYXRoIiBhbmQgbm93IHdlIHdhbnQgdG8gYWRkCi0JCSAqICJwYXRoL2ZpbGUiLCB3ZSBuZWVkIGEgd2F5IHRvIHJlbW92ZSAicGF0aCIgYmVmb3JlCi0JCSAqIGJlaW5nIGFibGUgdG8gYWRkICJwYXRoL2ZpbGUiLiAgSG93ZXZlciwKLQkJICogImdpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgcGF0aCIgd291bGQgbm90IHdvcmsuCi0JCSAqIC0tZm9yY2UtcmVtb3ZlIGNhbiBiZSB1c2VkIGJ1dCB0aGlzIGlzIG1vcmUgdXNlcgotCQkgKiBmcmllbmRseSwgZXNwZWNpYWxseSBzaW5jZSB3ZSBjYW4gZG8gdGhlIG9wcG9zaXRlCi0JCSAqIGNhc2UganVzdCBmaW5lIHdpdGhvdXQgLS1mb3JjZS1yZW1vdmUuCi0JCSAqLwotCQlpZiAoc3RhdHVzID09IDAgfHwgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTk9URElSKSkgewotCQkJaWYgKGFsbG93X3JlbW92ZSkgewotCQkJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQotCQkJCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgcmVtb3ZlIGZyb20gdGhlIGluZGV4IiwKLQkJCQkJICAgICAgICAgICAgIHBhdGgpOwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyA8IDApIHsKLQkJCQlyZXR1cm4gZXJyb3IoIiVzOiBkb2VzIG5vdCBleGlzdCBhbmQgLS1yZW1vdmUgbm90IHBhc3NlZCIsCi0JCQkJICAgICAgICAgICAgIHBhdGgpOwotCQkJfQotCQl9Ci0JCWlmICgwID09IHN0YXR1cykKLQkJCXJldHVybiBlcnJvcigiJXM6IGlzIGEgZGlyZWN0b3J5IC0gYWRkIGZpbGVzIGluc2lkZSBpbnN0ZWFkIiwKLQkJCSAgICAgICAgICAgICBwYXRoKTsKLQkJZWxzZQotCQkJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsCi0JCQkJICAgICBzdHJlcnJvcihlcnJubykpOwotCX0KKwkvKgorCSAqIEZpcnN0IHRoaW5ncyBmaXJzdDogZ2V0IHRoZSBzdGF0IGluZm9ybWF0aW9uLCB0byBkZWNpZGUKKwkgKiB3aGF0IHRvIGRvIGFib3V0IHRoZSBwYXRobmFtZSEKKwkgKi8KKwlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCXJldHVybiBwcm9jZXNzX2xzdGF0X2Vycm9yKHBhdGgsIGVycm5vKTsKIAotCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7Ci0Jc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7Ci0JY2UgPSB4Y2FsbG9jKDEsIHNpemUpOwotCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbik7Ci0JY2UtPmNlX2ZsYWdzID0gaHRvbnMobmFtZWxlbik7Ci0JZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gcHJvY2Vzc19kaXJlY3RvcnkocGF0aCwgbGVuLCAmc3QpOwogCi0JaWYgKHRydXN0X2V4ZWN1dGFibGVfYml0ICYmIGhhc19zeW1saW5rcykKLQkJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShzdC5zdF9tb2RlKTsKLQllbHNlIHsKLQkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cyBhbmQgdHlwZQotCQkgKiBmcm9tIGl0LCBvdGhlcndpc2UgYXNzdW1lIHVuZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCi0JCSAqLwotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmVudDsKLQkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOwotCi0JCWVudCA9ICgwIDw9IHBvcykgPyBhY3RpdmVfY2FjaGVbcG9zXSA6IE5VTEw7Ci0JCWNlLT5jZV9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoZW50LCBzdC5zdF9tb2RlKTsKLQl9Ci0KLQlpZiAoaW5kZXhfcGF0aChjZS0+c2hhMSwgcGF0aCwgJnN0LCAhaW5mb19vbmx5KSkKLQkJcmV0dXJuIC0xOwotCW9wdGlvbiA9IGFsbG93X2FkZCA/IEFERF9DQUNIRV9PS19UT19BREQgOiAwOwotCW9wdGlvbiB8PSBhbGxvd19yZXBsYWNlID8gQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgOiAwOwotCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikpCi0JCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBhZGQgdG8gdGhlIGluZGV4IC0gbWlzc2luZyAtLWFkZCBvcHRpb24/IiwKLQkJCSAgICAgcGF0aCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHByb2Nlc3NfZmlsZShwYXRoLCBsZW4sICZzdCk7CiB9CiAKIHN0YXRpYyBpbnQgYWRkX2NhY2hlaW5mbyh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKQEAgLTIxMCw4ICsyODYsOCBAQAogCQlyZXBvcnQoInJlbW92ZSAnJXMnIiwgcGF0aCk7CiAJCWdvdG8gZnJlZV9yZXR1cm47CiAJfQotCWlmIChhZGRfZmlsZV90b19jYWNoZShwKSkKLQkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBmaWxlICVzIiwgcGF0aCk7CisJaWYgKHByb2Nlc3NfcGF0aChwKSkKKwkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBwYXRoICVzIiwgcGF0aCk7CiAJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOwogIGZyZWVfcmV0dXJuOgogCWlmIChwIDwgcGF0aCB8fCBwID4gcGF0aCArIHN0cmxlbihwYXRoKSkKQEAgLTQ5OSw3ICs1NzUsNyBAQAogCS8qIFdlIGNhbid0IGZyZWUgdGhpcyBtZW1vcnksIGl0IGJlY29tZXMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IHBhcnNlZCBhdGV4aXQoKSAqLwogCWxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKIAotCW5ld2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrX2ZpbGUsIGdldF9pbmRleF9maWxlKCksIDApOworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAwKTsKIAlpZiAobmV3ZmQgPCAwKQogCQlsb2NrX2Vycm9yID0gZXJybm87CiAKQEAgLTY2NSw3ICs3NDEsNyBAQAogCQkJICAgIGdldF9pbmRleF9maWxlKCksIHN0cmVycm9yKGxvY2tfZXJyb3IpKTsKIAkJfQogCQlpZiAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAotCQkgICAgY2xvc2UobmV3ZmQpIHx8IGNvbW1pdF9sb2NrX2ZpbGUobG9ja19maWxlKSkKKwkJICAgIGNsb3NlKG5ld2ZkKSB8fCBjb21taXRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSkpCiAJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOwogCX0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi13cml0ZS10cmVlLmMgYi9idWlsdGluLXdyaXRlLXRyZWUuYwppbmRleCBhMTg5NDgxLi4zOTFkZTUzIDEwMDY0NAotLS0gYS9idWlsdGluLXdyaXRlLXRyZWUuYworKysgYi9idWlsdGluLXdyaXRlLXRyZWUuYwpAQCAtMTgsNyArMTgsNyBAQAogCS8qIFdlIGNhbid0IGZyZWUgdGhpcyBtZW1vcnksIGl0IGJlY29tZXMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IHBhcnNlZCBhdGV4aXQoKSAqLwogCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKIAotCW5ld2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrX2ZpbGUsIGdldF9pbmRleF9maWxlKCksIDApOworCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAxKTsKIAogCWVudHJpZXMgPSByZWFkX2NhY2hlKCk7CiAJaWYgKGVudHJpZXMgPCAwKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCmluZGV4IGFmMjAzZTkuLmQzZjNhNzQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4uaAorKysgYi9idWlsdGluLmgKQEAgLTIyLDYgKzIyLDcgQEAKIGV4dGVybiBpbnQgY21kX2J1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2NoZXJyeV9waWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwppbmRleCA5YjczYzg2Li42MzY5Y2M3IDEwMDY0NAotLS0gYS9jYWNoZS10cmVlLmMKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJCW1vZGUgPSBudG9obChjZS0+Y2VfbW9kZSk7CiAJCQllbnRsZW4gPSBwYXRobGVuIC0gYmFzZWxlbjsKIAkJfQotCQlpZiAoIW1pc3Npbmdfb2sgJiYgIWhhc19zaGExX2ZpbGUoc2hhMSkpCisJCWlmIChtb2RlICE9IFNfSUZESVJMTksgJiYgIW1pc3Npbmdfb2sgJiYgIWhhc19zaGExX2ZpbGUoc2hhMSkpCiAJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCiAJCWlmICghY2UtPmNlX21vZGUpCmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCA3Y2VkZGE2Li44ZTc2MTUyIDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTI0LDYgKzI0LDI1IEBACiAjZGVmaW5lIERUWVBFKGRlKQlEVF9VTktOT1dOCiAjZW5kaWYKIAorLyogdW5rbm93biBtb2RlIChpbXBvc3NpYmxlIGNvbWJpbmF0aW9uIFNfSUZJRk98U19JRkNIUikgKi8KKyNkZWZpbmUgU19JRklOVkFMSUQgICAgIDAwMzAwMDAKKworLyoKKyAqIEEgImRpcmVjdG9yeSBsaW5rIiBpcyBhIGxpbmsgdG8gYW5vdGhlciBnaXQgZGlyZWN0b3J5LgorICoKKyAqIFRoZSB2YWx1ZSAwMTYwMDAwIGlzIG5vdCBub3JtYWxseSBhIHZhbGlkIG1vZGUsIGFuZAorICogYWxzbyBqdXN0IGhhcHBlbnMgdG8gYmUgU19JRkRJUiArIFNfSUZMTksKKyAqCisgKiBOT1RFISBXZSAqcmVhbGx5KiBzaG91bGRuJ3QgZGVwZW5kIG9uIHRoZSBTX0lGeHh4IG1hY3JvcworICogYWx3YXlzIGhhdmluZyB0aGUgc2FtZSB2YWx1ZXMgZXZlcnl3aGVyZS4gV2Ugc2hvdWxkIHVzZQorICogb3VyIGludGVybmFsIGdpdCB2YWx1ZXMgZm9yIHRoZXNlIHRoaW5ncywgYW5kIHRoZW4gd2UgY2FuCisgKiB0cmFuc2xhdGUgdGhhdCB0byB0aGUgT1Mtc3BlY2lmaWMgdmFsdWUuIEl0IGp1c3Qgc28KKyAqIGhhcHBlbnMgdGhhdCBldmVyeWJvZHkgc2hhcmVzIHRoZSBzYW1lIGJpdCByZXByZXNlbnRhdGlvbgorICogaW4gdGhlIFVOSVggd29ybGQgKGFuZCBhcHBhcmVudGx5IHdpZGVyIHRvby4uKQorICovCisjZGVmaW5lIFNfSUZESVJMTksJMDE2MDAwMAorI2RlZmluZSBTX0lTRElSTE5LKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSTE5LKQorCiAvKgogICogSW50ZW5zaXZlIHJlc2VhcmNoIG92ZXIgdGhlIGNvdXJzZSBvZiBtYW55IHllYXJzIGhhcyBzaG93biB0aGF0CiAgKiBwb3J0IDk0MTggaXMgdG90YWxseSB1bnVzZWQgYnkgYW55dGhpbmcgZWxzZS4gT3IKQEAgLTEwNCw2ICsxMjMsOCBAQAogewogCWlmIChTX0lTTE5LKG1vZGUpKQogCQlyZXR1cm4gaHRvbmwoU19JRkxOSyk7CisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0RJUkxOSyhtb2RlKSkKKwkJcmV0dXJuIGh0b25sKFNfSUZESVJMTkspOwogCXJldHVybiBodG9ubChTX0lGUkVHIHwgY2VfcGVybWlzc2lvbnMobW9kZSkpOwogfQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2VfbW9kZV9mcm9tX3N0YXQoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgaW50IG1vZGUpCkBAIC0xMjEsMTQgKzE0Miw0MSBAQAogfQogI2RlZmluZSBjYW5vbl9tb2RlKG1vZGUpIFwKIAkoU19JU1JFRyhtb2RlKSA/IChTX0lGUkVHIHwgY2VfcGVybWlzc2lvbnMobW9kZSkpIDogXAotCVNfSVNMTksobW9kZSkgPyBTX0lGTE5LIDogU19JRkRJUikKKwlTX0lTTE5LKG1vZGUpID8gU19JRkxOSyA6IFNfSVNESVIobW9kZSkgPyBTX0lGRElSIDogU19JRkRJUkxOSykKIAogI2RlZmluZSBjYWNoZV9lbnRyeV9zaXplKGxlbikgKChvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksbmFtZSkgKyAobGVuKSArIDgpICYgfjcpCiAKLWV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKiphY3RpdmVfY2FjaGU7Ci1leHRlcm4gdW5zaWduZWQgaW50IGFjdGl2ZV9uciwgYWN0aXZlX2FsbG9jLCBhY3RpdmVfY2FjaGVfY2hhbmdlZDsKLWV4dGVybiBzdHJ1Y3QgY2FjaGVfdHJlZSAqYWN0aXZlX2NhY2hlX3RyZWU7Ci1leHRlcm4gaW50IGNhY2hlX2Vycm5vOworc3RydWN0IGluZGV4X3N0YXRlIHsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZTsKKwl1bnNpZ25lZCBpbnQgY2FjaGVfbnIsIGNhY2hlX2FsbG9jLCBjYWNoZV9jaGFuZ2VkOworCXN0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlOworCXRpbWVfdCB0aW1lc3RhbXA7CisJdm9pZCAqbW1hcDsKKwlzaXplX3QgbW1hcF9zaXplOworfTsKKworZXh0ZXJuIHN0cnVjdCBpbmRleF9zdGF0ZSB0aGVfaW5kZXg7CisKKyNpZm5kZWYgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjZGVmaW5lIGFjdGl2ZV9jYWNoZSAodGhlX2luZGV4LmNhY2hlKQorI2RlZmluZSBhY3RpdmVfbnIgKHRoZV9pbmRleC5jYWNoZV9ucikKKyNkZWZpbmUgYWN0aXZlX2FsbG9jICh0aGVfaW5kZXguY2FjaGVfYWxsb2MpCisjZGVmaW5lIGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICh0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCkKKyNkZWZpbmUgYWN0aXZlX2NhY2hlX3RyZWUgKHRoZV9pbmRleC5jYWNoZV90cmVlKQorCisjZGVmaW5lIHJlYWRfY2FjaGUoKSByZWFkX2luZGV4KCZ0aGVfaW5kZXgpCisjZGVmaW5lIHJlYWRfY2FjaGVfZnJvbShwYXRoKSByZWFkX2luZGV4X2Zyb20oJnRoZV9pbmRleCwgKHBhdGgpKQorI2RlZmluZSB3cml0ZV9jYWNoZShuZXdmZCwgY2FjaGUsIGVudHJpZXMpIHdyaXRlX2luZGV4KCZ0aGVfaW5kZXgsIChuZXdmZCkpCisjZGVmaW5lIGRpc2NhcmRfY2FjaGUoKSBkaXNjYXJkX2luZGV4KCZ0aGVfaW5kZXgpCisjZGVmaW5lIGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfcG9zKCZ0aGVfaW5kZXgsKG5hbWUpLChuYW1lbGVuKSkKKyNkZWZpbmUgYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pIGFkZF9pbmRleF9lbnRyeSgmdGhlX2luZGV4LCAoY2UpLCAob3B0aW9uKSkKKyNkZWZpbmUgcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KHBvcykgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIChwb3MpKQorI2RlZmluZSByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpIHJlbW92ZV9maWxlX2Zyb21faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpKQorI2RlZmluZSBhZGRfZmlsZV90b19jYWNoZShwYXRoLCB2ZXJib3NlKSBhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksICh2ZXJib3NlKSkKKyNkZWZpbmUgcmVmcmVzaF9jYWNoZShmbGFncykgcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBmbGFncykKKyNkZWZpbmUgY2VfbWF0Y2hfc3RhdChjZSwgc3QsIHJlYWxseSkgaWVfbWF0Y2hfc3RhdCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAocmVhbGx5KSkKKyNkZWZpbmUgY2VfbW9kaWZpZWQoY2UsIHN0LCByZWFsbHkpIGllX21vZGlmaWVkKCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChyZWFsbHkpKQorI2VuZGlmCiAKIGVudW0gb2JqZWN0X3R5cGUgewogCU9CSl9CQUQgPSAtMSwKQEAgLTE1Miw2ICsyMDAsOSBAQAogI2RlZmluZSBDT05GSUdfRU5WSVJPTk1FTlQgIkdJVF9DT05GSUciCiAjZGVmaW5lIENPTkZJR19MT0NBTF9FTlZJUk9OTUVOVCAiR0lUX0NPTkZJR19MT0NBTCIKICNkZWZpbmUgRVhFQ19QQVRIX0VOVklST05NRU5UICJHSVRfRVhFQ19QQVRIIgorI2RlZmluZSBHSVRBVFRSSUJVVEVTX0ZJTEUgIi5naXRhdHRyaWJ1dGVzIgorI2RlZmluZSBJTkZPQVRUUklCVVRFU19GSUxFICJpbmZvL2F0dHJpYnV0ZXMiCisjZGVmaW5lIEFUVFJJQlVURV9NQUNST19QUkVGSVggIlthdHRyXSIKIAogZXh0ZXJuIGludCBpc19iYXJlX3JlcG9zaXRvcnlfY2ZnOwogZXh0ZXJuIGludCBpc19iYXJlX3JlcG9zaXRvcnkodm9pZCk7CkBAIC0xNzUsMjMgKzIyNiwyMyBAQAogI2RlZmluZSBhbGxvY19ucih4KSAoKCh4KSsxNikqMy8yKQogCiAvKiBJbml0aWFsaXplIGFuZCB1c2UgdGhlIGNhY2hlIGluZm9ybWF0aW9uICovCi1leHRlcm4gaW50IHJlYWRfY2FjaGUodm9pZCk7Ci1leHRlcm4gaW50IHJlYWRfY2FjaGVfZnJvbShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgd3JpdGVfY2FjaGUoaW50IG5ld2ZkLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IGVudHJpZXMpOwotZXh0ZXJuIGludCBkaXNjYXJkX2NhY2hlKHZvaWQpOworZXh0ZXJuIGludCByZWFkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgcmVhZF9pbmRleF9mcm9tKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgd3JpdGVfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBuZXdmZCk7CitleHRlcm4gaW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICopOwogZXh0ZXJuIGludCB2ZXJpZnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgY2FjaGVfbmFtZV9wb3MoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOworZXh0ZXJuIGludCBpbmRleF9uYW1lX3BvcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOwogI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fQUREIDEJCS8qIE9rIHRvIGFkZCAqLwogI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSAyCS8qIE9rIHRvIHJlcGxhY2UgZmlsZS9kaXJlY3RvcnkgKi8KICNkZWZpbmUgQUREX0NBQ0hFX1NLSVBfREZDSEVDSyA0CS8qIE9rIHRvIHNraXAgREYgY29uZmxpY3QgY2hlY2tzICovCi1leHRlcm4gaW50IGFkZF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKTsKK2V4dGVybiBpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKTsKIGV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHJlYWxseSk7Ci1leHRlcm4gaW50IHJlbW92ZV9jYWNoZV9lbnRyeV9hdChpbnQgcG9zKTsKLWV4dGVybiBpbnQgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgYWRkX2ZpbGVfdG9faW5kZXgoY29uc3QgY2hhciAqcGF0aCwgaW50IHZlcmJvc2UpOworZXh0ZXJuIGludCByZW1vdmVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MpOworZXh0ZXJuIGludCByZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCB2ZXJib3NlKTsKIGV4dGVybiBpbnQgY2Vfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgc3RydWN0IGNhY2hlX2VudHJ5ICpiKTsKLWV4dGVybiBpbnQgY2VfbWF0Y2hfc3RhdChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCk7Ci1leHRlcm4gaW50IGNlX21vZGlmaWVkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwgaW50KTsKK2V4dGVybiBpbnQgaWVfbWF0Y2hfc3RhdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGNhY2hlX2VudHJ5ICosIHN0cnVjdCBzdGF0ICosIGludCk7CitleHRlcm4gaW50IGllX21vZGlmaWVkKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKIGV4dGVybiBpbnQgY2VfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogZXh0ZXJuIGludCBpbmRleF9mZCh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCwgaW50IHdyaXRlX29iamVjdCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoKTsKIGV4dGVybiBpbnQgcmVhZF9waXBlKGludCBmZCwgY2hhcioqIHJldHVybl9idWYsIHVuc2lnbmVkIGxvbmcqIHJldHVybl9zaXplKTsKQEAgLTIwMywxNSArMjU0LDIxIEBACiAjZGVmaW5lIFJFRlJFU0hfVU5NRVJHRUQJMHgwMDAyCS8qIGFsbG93IHVubWVyZ2VkICovCiAjZGVmaW5lIFJFRlJFU0hfUVVJRVQJCTB4MDAwNAkvKiBiZSBxdWlldCBhYm91dCBpdCAqLwogI2RlZmluZSBSRUZSRVNIX0lHTk9SRV9NSVNTSU5HCTB4MDAwOAkvKiBpZ25vcmUgbm9uLWV4aXN0ZW50ICovCi1leHRlcm4gaW50IHJlZnJlc2hfY2FjaGUodW5zaWduZWQgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIAogc3RydWN0IGxvY2tfZmlsZSB7CiAJc3RydWN0IGxvY2tfZmlsZSAqbmV4dDsKKwlwaWRfdCBvd25lcjsKIAljaGFyIG9uX2xpc3Q7CiAJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CiB9OwogZXh0ZXJuIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKHN0cnVjdCBsb2NrX2ZpbGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50KTsKIGV4dGVybiBpbnQgY29tbWl0X2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICopOworCitleHRlcm4gaW50IGhvbGRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKiwgaW50KTsKK2V4dGVybiBpbnQgY29tbWl0X2xvY2tlZF9pbmRleChzdHJ1Y3QgbG9ja19maWxlICopOworZXh0ZXJuIHZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqKTsKKwogZXh0ZXJuIHZvaWQgcm9sbGJhY2tfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKik7CiBleHRlcm4gaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIApAQCAtMzEzLDYgKzM3MCw3IEBACiAjZGVmaW5lIERFRkFVTFRfQUJCUkVWIDcKIAogZXh0ZXJuIGludCBnZXRfc2hhMShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBnZXRfc2hhMV93aXRoX21vZGUoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCAqbW9kZSk7CiBleHRlcm4gaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwkvKiBzdGF0aWMgYnVmZmVyIHJlc3VsdCEgKi8KIGV4dGVybiBpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwpAQCAtMzMxLDcgKzM4OSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgKnNpemUsCiAJCQkJCXVuc2lnbmVkIGNoYXIgKnNoYTFfcmV0KTsKIAotZW51bSBkYXRlX21vZGUgeyBEQVRFX05PUk1BTCA9IDAsIERBVEVfUkVMQVRJVkUsIERBVEVfU0hPUlQgfTsKK2VudW0gZGF0ZV9tb2RlIHsgREFURV9OT1JNQUwgPSAwLCBEQVRFX1JFTEFUSVZFLCBEQVRFX1NIT1JULCBEQVRFX0xPQ0FMIH07CiBjb25zdCBjaGFyICpzaG93X2RhdGUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdGltZXpvbmUsIGVudW0gZGF0ZV9tb2RlIG1vZGUpOwogY29uc3QgY2hhciAqc2hvd19yZmMyODIyX2RhdGUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdGltZXpvbmUpOwogaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CkBAIC0zNTEsNyArNDA5LDcgQEAKIAkJIHJlZnJlc2hfY2FjaGU6MTsKIH07CiAKLWV4dGVybiBpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKTsKK2V4dGVybiBpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKTsKIAogZXh0ZXJuIHN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlIHsKIAlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqbmV4dDsKQEAgLTM3MiwxMSArNDMwLDEyIEBACiBleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgewogCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXh0OwogCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93czsKLQljb25zdCB2b2lkICppbmRleF9kYXRhOwotCW9mZl90IGluZGV4X3NpemU7CiAJb2ZmX3QgcGFja19zaXplOwotCXRpbWVfdCBtdGltZTsKKwljb25zdCB2b2lkICppbmRleF9kYXRhOworCXNpemVfdCBpbmRleF9zaXplOworCXVpbnQzMl90IG51bV9vYmplY3RzOwogCWludCBpbmRleF92ZXJzaW9uOworCXRpbWVfdCBtdGltZTsKIAlpbnQgcGFja19mZDsKIAlpbnQgcGFja19sb2NhbDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwpAQCAtNDI3LDExICs0ODYsMTEgQEAKIGV4dGVybiB1bnNpZ25lZCBjaGFyKiB1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90LCB1bnNpZ25lZCBpbnQgKik7CiBleHRlcm4gdm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKik7CiBleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwotZXh0ZXJuIHVpbnQzMl90IG51bV9wYWNrZWRfb2JqZWN0cyhjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCk7Ci1leHRlcm4gaW50IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKiwgdWludDMyX3QsIHVuc2lnbmVkIGNoYXIqKTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICpudGhfcGFja2VkX29iamVjdF9zaGExKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICosIHVpbnQzMl90KTsKIGV4dGVybiBvZmZfdCBmaW5kX3BhY2tfZW50cnlfb25lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHBhY2tlZF9naXQgKik7CiBleHRlcm4gdm9pZCAqdW5wYWNrX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICosIG9mZl90LCBlbnVtIG9iamVjdF90eXBlICosIHVuc2lnbmVkIGxvbmcgKik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB1bnBhY2tfb2JqZWN0X2hlYWRlcl9nZW50bHkoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3NpemVfZnJvbV9kZWx0YShzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90KTsKIGV4dGVybiBjb25zdCBjaGFyICpwYWNrZWRfb2JqZWN0X2luZm9fZGV0YWlsKHN0cnVjdCBwYWNrZWRfZ2l0ICosIG9mZl90LCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgaW50ICosIHVuc2lnbmVkIGNoYXIgKik7CiAKIC8qIER1bWIgc2VydmVycyBzdXBwb3J0ICovCkBAIC00NzIsMTQgKzUzMSwxMSBAQAogdm9pZCBlbmNvZGVfODUoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYnl0ZXMpOwogCiAvKiBhbGxvYy5jICovCi1zdHJ1Y3QgYmxvYjsKLXN0cnVjdCB0cmVlOwotc3RydWN0IGNvbW1pdDsKLXN0cnVjdCB0YWc7Ci1leHRlcm4gc3RydWN0IGJsb2IgKmFsbG9jX2Jsb2Jfbm9kZSh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgdHJlZSAqYWxsb2NfdHJlZV9ub2RlKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCBjb21taXQgKmFsbG9jX2NvbW1pdF9ub2RlKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCB0YWcgKmFsbG9jX3RhZ19ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgKmFsbG9jX2Jsb2Jfbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkICphbGxvY190cmVlX25vZGUodm9pZCk7CitleHRlcm4gdm9pZCAqYWxsb2NfY29tbWl0X25vZGUodm9pZCk7CitleHRlcm4gdm9pZCAqYWxsb2NfdGFnX25vZGUodm9pZCk7CitleHRlcm4gdm9pZCAqYWxsb2Nfb2JqZWN0X25vZGUodm9pZCk7CiBleHRlcm4gdm9pZCBhbGxvY19yZXBvcnQodm9pZCk7CiAKIC8qIHRyYWNlLmMgKi8KQEAgLTQ4OSw3ICs1NDUsMTAgQEAKIGV4dGVybiB2b2lkIHRyYWNlX2FyZ3ZfcHJpbnRmKGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogLyogY29udmVydC5jICovCi1leHRlcm4gaW50IGNvbnZlcnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipidWZwLCB1bnNpZ25lZCBsb25nICpzaXplcCk7Ci1leHRlcm4gaW50IGNvbnZlcnRfdG9fd29ya2luZ190cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipidWZwLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CitleHRlcm4gY2hhciAqY29udmVydF90b19naXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CitleHRlcm4gY2hhciAqY29udmVydF90b193b3JraW5nX3RyZWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKy8qIG1hdGNoLXRyZWVzLmMgKi8KK3ZvaWQgc2hpZnRfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogCiAjZW5kaWYgLyogQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvY29tYmluZS1kaWZmLmMgYi9jb21iaW5lLWRpZmYuYwppbmRleCAzYTliMzJmLi5jZmY5YzVkIDEwMDY0NAotLS0gYS9jb21iaW5lLWRpZmYuYworKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtOTQzLDYgKzk0Myw3IEBACiAJZGlmZm9wdHMgPSAqb3B0OwogCWRpZmZvcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CiAJZGlmZm9wdHMucmVjdXJzaXZlID0gMTsKKwlkaWZmb3B0cy5hbGxvd19leHRlcm5hbCA9IDA7CiAKIAlzaG93X2xvZ19maXJzdCA9ICEhcmV2LT5sb2dpbmZvICYmICFyZXYtPm5vX2NvbW1pdF9pZDsKIAluZWVkc2VwID0gMDsKZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggNzU0ZDFiOC4uZjFiYTk3MiAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTQsNiArNCw4IEBACiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlICJ1dGY4LmgiCiAjaW5jbHVkZSAiaW50ZXJwb2xhdGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKIAogaW50IHNhdmVfY29tbWl0X2J1ZmZlciA9IDE7CiAKQEAgLTk2LDEyICs5OCw4IEBACiBzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKLQlpZiAoIW9iaikgewotCQlzdHJ1Y3QgY29tbWl0ICpyZXQgPSBhbGxvY19jb21taXRfbm9kZSgpOwotCQljcmVhdGVkX29iamVjdChzaGExLCAmcmV0LT5vYmplY3QpOwotCQlyZXQtPm9iamVjdC50eXBlID0gT0JKX0NPTU1JVDsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHNoYTEsIE9CSl9DT01NSVQsIGFsbG9jX2NvbW1pdF9ub2RlKCkpOwogCWlmICghb2JqLT50eXBlKQogCQlvYmotPnR5cGUgPSBPQkpfQ09NTUlUOwogCXJldHVybiBjaGVja19jb21taXQob2JqLCBzaGExLCAwKTsKQEAgLTUyOCw3ICs1MjYsNyBAQAogfQogCiBzdGF0aWMgaW50IGFkZF91c2VyX2luZm8oY29uc3QgY2hhciAqd2hhdCwgZW51bSBjbWl0X2ZtdCBmbXQsIGNoYXIgKmJ1ZiwKLQkJCSBjb25zdCBjaGFyICpsaW5lLCBpbnQgcmVsYXRpdmVfZGF0ZSwKKwkJCSBjb25zdCBjaGFyICpsaW5lLCBlbnVtIGRhdGVfbW9kZSBkbW9kZSwKIAkJCSBjb25zdCBjaGFyICplbmNvZGluZykKIHsKIAljaGFyICpkYXRlOwpAQCAtNTcxLDcgKzU2OSw3IEBACiAJc3dpdGNoIChmbXQpIHsKIAljYXNlIENNSVRfRk1UX01FRElVTToKIAkJcmV0ICs9IHNwcmludGYoYnVmICsgcmV0LCAiRGF0ZTogICAlc1xuIiwKLQkJCSAgICAgICBzaG93X2RhdGUodGltZSwgdHosIHJlbGF0aXZlX2RhdGUpKTsKKwkJCSAgICAgICBzaG93X2RhdGUodGltZSwgdHosIGRtb2RlKSk7CiAJCWJyZWFrOwogCWNhc2UgQ01JVF9GTVRfRU1BSUw6CiAJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIkRhdGU6ICVzXG4iLApAQCAtNTc5LDcgKzU3Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ01JVF9GTVRfRlVMTEVSOgogCQlyZXQgKz0gc3ByaW50ZihidWYgKyByZXQsICIlc0RhdGU6ICVzXG4iLCB3aGF0LAotCQkJICAgICAgIHNob3dfZGF0ZSh0aW1lLCB0eiwgcmVsYXRpdmVfZGF0ZSkpOworCQkJICAgICAgIHNob3dfZGF0ZSh0aW1lLCB0eiwgZG1vZGUpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogbm90aW4nICovCkBAIC04MDgsNyArODA2LDggQEAKIAkJeyAiJUNncmVlbiIgfSwJLyogZ3JlZW4gKi8KIAkJeyAiJUNibHVlIiB9LAkvKiBibHVlICovCiAJCXsgIiVDcmVzZXQiIH0sCS8qIHJlc2V0IGNvbG9yICovCi0JCXsgIiVuIiB9CS8qIG5ld2xpbmUgKi8KKwkJeyAiJW4iIH0sCS8qIG5ld2xpbmUgKi8KKwkJeyAiJW0iIH0sCS8qIGxlZnQvcmlnaHQvYm90dG9tICovCiAJfTsKIAllbnVtIGludGVycF9pbmRleCB7CiAJCUlIQVNIID0gMCwgSUhBU0hfQUJCUkVWLApAQCAtODI0LDE0ICs4MjMsMTUgQEAKIAkJSVNVQkpFQ1QsCiAJCUlCT0RZLAogCQlJUkVELCBJR1JFRU4sIElCTFVFLCBJUkVTRVRfQ09MT1IsCi0JCUlORVdMSU5FCisJCUlORVdMSU5FLAorCQlJTEVGVF9SSUdIVCwKIAl9OwogCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKIAljaGFyIHBhcmVudHNbMTAyNF07CiAJaW50IGk7CiAJZW51bSB7IEhFQURFUiwgU1VCSkVDVCwgQk9EWSB9IHN0YXRlOwogCi0JaWYgKElORVdMSU5FICsgMSAhPSBBUlJBWV9TSVpFKHRhYmxlKSkKKwlpZiAoSUxFRlRfUklHSFQgKyAxICE9IEFSUkFZX1NJWkUodGFibGUpKQogCQlkaWUoImludmFsaWQgaW50ZXJwIHRhYmxlISIpOwogCiAJLyogdGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBjb21taXQgKi8KQEAgLTg1Miw2ICs4NTIsMTIgQEAKIAlpbnRlcnBfc2V0X2VudHJ5KHRhYmxlLCBJVFJFRV9BQkJSRVYsCiAJCQlmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwKIAkJCQlERUZBVUxUX0FCQlJFVikpOworCWludGVycF9zZXRfZW50cnkodGFibGUsIElMRUZUX1JJR0hULAorCQkJIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQorCQkJID8gIi0iCisJCQkgOiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCSA/ICI8IgorCQkJIDogIj4iKTsKIAogCXBhcmVudHNbMV0gPSAwOwogCWZvciAoaSA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7CkBAIC05MTMsNyArOTE5LDcgQEAKIAkJCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzcGFjZSwKIAkJCQkgIGludCBhYmJyZXYsIGNvbnN0IGNoYXIgKnN1YmplY3QsCiAJCQkJICBjb25zdCBjaGFyICphZnRlcl9zdWJqZWN0LAotCQkJCSAgaW50IHJlbGF0aXZlX2RhdGUpCisJCQkJICBlbnVtIGRhdGVfbW9kZSBkbW9kZSkKIHsKIAlpbnQgaGRyID0gMSwgYm9keSA9IDAsIHNlZW5fdGl0bGUgPSAwOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKQEAgLTEwMTcsMTQgKzEwMjMsMTQgQEAKIAkJCQlvZmZzZXQgKz0gYWRkX3VzZXJfaW5mbygiQXV0aG9yIiwgZm10LAogCQkJCQkJCWJ1ZiArIG9mZnNldCwKIAkJCQkJCQlsaW5lICsgNywKLQkJCQkJCQlyZWxhdGl2ZV9kYXRlLAorCQkJCQkJCWRtb2RlLAogCQkJCQkJCWVuY29kaW5nKTsKIAkJCWlmICghbWVtY21wKGxpbmUsICJjb21taXR0ZXIgIiwgMTApICYmCiAJCQkgICAgKGZtdCA9PSBDTUlUX0ZNVF9GVUxMIHx8IGZtdCA9PSBDTUlUX0ZNVF9GVUxMRVIpKQogCQkJCW9mZnNldCArPSBhZGRfdXNlcl9pbmZvKCJDb21taXQiLCBmbXQsCiAJCQkJCQkJYnVmICsgb2Zmc2V0LAogCQkJCQkJCWxpbmUgKyAxMCwKLQkJCQkJCQlyZWxhdGl2ZV9kYXRlLAorCQkJCQkJCWRtb2RlLAogCQkJCQkJCWVuY29kaW5nKTsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4IDgzNTA3YTAuLjg2ZThkY2EgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCiAKIHN0cnVjdCBjb21taXRfbGlzdCB7CiAJc3RydWN0IGNvbW1pdCAqaXRlbTsKQEAgLTIxLDYgKzIyLDEzIEBACiBleHRlcm4gaW50IHNhdmVfY29tbWl0X2J1ZmZlcjsKIGV4dGVybiBjb25zdCBjaGFyICpjb21taXRfdHlwZTsKIAorLyogV2hpbGUgd2UgY2FuIGRlY29yYXRlIGFueSBvYmplY3Qgd2l0aCBhIG5hbWUsIGl0J3Mgb25seSB1c2VkIGZvciBjb21taXRzLi4gKi8KK2V4dGVybiBzdHJ1Y3QgZGVjb3JhdGlvbiBuYW1lX2RlY29yYXRpb247CitzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uIHsKKwlzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpuZXh0OworCWNoYXIgbmFtZVsxXTsKK307CisKIHN0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIHN0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLApAQCAtNTMsNyArNjEsNyBAQAogfTsKIAogZXh0ZXJuIGVudW0gY21pdF9mbXQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHByZXR0eV9wcmludF9jb21taXQoZW51bSBjbWl0X2ZtdCBmbXQsIGNvbnN0IHN0cnVjdCBjb21taXQgKiwgdW5zaWduZWQgbG9uZyBsZW4sIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzcGFjZSwgaW50IGFiYnJldiwgY29uc3QgY2hhciAqc3ViamVjdCwgY29uc3QgY2hhciAqYWZ0ZXJfc3ViamVjdCwgaW50IHJlbGF0aXZlX2RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJldHR5X3ByaW50X2NvbW1pdChlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nIGxlbiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNwYWNlLCBpbnQgYWJicmV2LCBjb25zdCBjaGFyICpzdWJqZWN0LCBjb25zdCBjaGFyICphZnRlcl9zdWJqZWN0LCBlbnVtIGRhdGVfbW9kZSBkbW9kZSk7CiAKIC8qKiBSZW1vdmVzIHRoZSBmaXJzdCBjb21taXQgZnJvbSBhIGxpc3Qgc29ydGVkIGJ5IGRhdGUsIGFuZCBhZGRzIGFsbAogICogb2YgaXRzIHBhcmVudHMuCmRpZmYgLS1naXQgYS9jb25maWcubWFrLmluIGIvY29uZmlnLm1hay5pbgppbmRleCA5YTU3ODQwLi5lYjlkN2E1IDEwMDY0NAotLS0gYS9jb25maWcubWFrLmluCisrKyBiL2NvbmZpZy5tYWsuaW4KQEAgLTYsNiArNiw3IEBACiBBUiA9IEBBUkAKIFRBUiA9IEBUQVJACiAjSU5TVEFMTCA9IEBJTlNUQUxMQAkJIyBuZWVkcyBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gc291cmNlcworVENMVEtfUEFUSCA9IEBUQ0xUS19QQVRIQAogCiBwcmVmaXggPSBAcHJlZml4QAogZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggM2E4ZTc3OC4uNTBkMmI4NSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtNzUsNiArNzUsMTQgQEAKICMgRGVmaW5lIFBFUkxfUEFUSCB0byBwcm92aWRlIHBhdGggdG8gUGVybC4KIEdJVF9BUkdfU0VUX1BBVEgocGVybCkKICMKKyMgRGVjbGFyZSB0aGUgd2l0aC10Y2x0ay93aXRob3V0LXRjbHRrIG9wdGlvbnMuCitBQ19BUkdfV0lUSCh0Y2x0aywKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtdGNsdGtdLFt1c2UgVGNsL1RrIEdVSSAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtBUkcgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgVGNsL1RrIGludGVycHJldGVyLl0pCitBU19IRUxQX1NUUklORyhbXSxbQmFyZSAtLXdpdGgtdGNsdGsgd2lsbCBtYWtlIHRoZSBHVUkgcGFydCBvbmx5IGlmXSkKK0FTX0hFTFBfU1RSSU5HKFtdLFtUY2wvVGsgaW50ZXJwcmV0ZXIgd2lsbCBiZSBmb3VuZCBpbiBhIHN5c3RlbS5dKSxcCitHSVRfUEFSU0VfV0lUSCh0Y2x0aykpCisjCiAKIAogIyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KQEAgLTg0LDYgKzkyLDIyIEBACiAjQUNfUFJPR19JTlNUQUxMCQkjIG5lZWRzIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBzb3VyY2VzCiBBQ19DSEVDS19UT09MKEFSLCBhciwgOikKIEFDX0NIRUNLX1BST0dTKFRBUiwgW2d0YXIgdGFyXSkKKyMgVENMVEtfUEFUSCB3aWxsIGJlIHNldCB0byBzb21lIHZhbHVlIGlmIHdlIHdhbnQgVGNsL1RrCisjIG9yIHdpbGwgYmUgZW1wdHkgb3RoZXJ3aXNlLgoraWYgdGVzdCAteiAiJE5PX1RDTFRLIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aF90Y2x0ayIgPSAiIjsgdGhlbgorICAjIE5vIFRjbC9UayBzd2l0Y2hlcyBnaXZlbi4gRG8gbm90IGNoZWNrIGZvciBUY2wvVGssIHVzZSBiYXJlICd3aXNoJy4KKyAgICBUQ0xUS19QQVRIPXdpc2gKKyAgICBBQ19TVUJTVChUQ0xUS19QQVRIKQorICBlbGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICJ5ZXMiOyB0aGVuCisgICMgVGNsL1RrIGNoZWNrIHJlcXVlc3RlZC4KKyAgICBBQ19DSEVDS19QUk9HUyhUQ0xUS19QQVRILCBbd2lzaF0sICkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW1VzaW5nIFRjbC9UayBpbnRlcnByZXRlciAkd2l0aF90Y2x0a10pCisgICAgVENMVEtfUEFUSD0iJHdpdGhfdGNsdGsiCisgICAgQUNfU1VCU1QoVENMVEtfUEFUSCkKKyAgZmkKK2ZpCiAKICMjIENoZWNrcyBmb3IgbGlicmFyaWVzLgogQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBsaWJyYXJpZXNdKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAppbmRleCA3YzAzNDAzLi40NjM1NmU4IDEwMDc1NQotLS0gYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApAQCAtNzkwLDYgKzc5MCw3IEBACiAJCWNvcmUubGVnYWN5SGVhZGVycwogCQljb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUKIAkJY29yZS5wYWNrZWRHaXRMaW1pdAorCQljbGVhbi5yZXF1aXJlRm9yY2UKIAkJY29sb3IuYnJhbmNoCiAJCWNvbG9yLmJyYW5jaC5jdXJyZW50CiAJCWNvbG9yLmJyYW5jaC5sb2NhbApkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwgYi9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbAppbmRleCA2NGFkNTBiLi5iYjY3MWQ1IDEwMDY0NAotLS0gYS9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbAorKysgYi9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbApAQCAtOCw4ICs4LDggQEAKIDs7IExpY2Vuc2U6ICAgIEdQTAogOzsgS2V5d29yZHM6ICAgZ2l0LCB2ZXJzaW9uIGNvbnRyb2wsIHJlbGVhc2UgbWFuYWdlbWVudAogOzsKLTs7IENvbXBhdGliaWxpdHk6IEVtYWNzMjEKLQorOzsgQ29tcGF0aWJpbGl0eTogRW1hY3MyMSwgRW1hY3MyMiBhbmQgRW1hY3NDVlMKKzs7ICAgICAgICAgICAgICAgIEdpdCAxLjUgYW5kIHVwCiAKIDs7IFRoaXMgZmlsZSBpcyAqTk9UKiBwYXJ0IG9mIEdOVSBFbWFjcy4KIDs7IFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBHTlUgRW1hY3MuCkBAIC02MSw4ICs2MSw5IEBACiAKIDs7OyBDb21wYXRpYmlsaXR5OgogOzsKLTs7IEl0IHJlcXVpcmVzIEdOVSBFbWFjcyAyMS4gIElmIHlvdSdhcmUgdXNpbmcgRW1hY3MgMjAsIHRyeQotOzsgY2hhbmdpbmcgdGhpczoKKzs7IEl0IHJlcXVpcmVzIEdOVSBFbWFjcyAyMSBvciBsYXRlciBhbmQgR2l0IDEuNS4wIGFuZCB1cAorOzsKKzs7IElmIHlvdSdhcmUgdXNpbmcgRW1hY3MgMjAsIHRyeSBjaGFuZ2luZyB0aGlzOgogOzsKIDs7ICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnZmFjZSAobGlzdCA6YmFja2dyb3VuZAogOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgKGFzc3EgJ2NvbG9yIChjZGRkZHIgaW5mbykpKSkpCkBAIC03NywzMCArNzgsNTEgQEAKIDs7CiA7OzsgQ29kZToKIAotKHJlcXVpcmUgJ2NsKQkJCSAgICAgIDsgdG8gdXNlIGBwdXNoJywgYHBvcCcKKyhldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQkJCSAgICAgIDsgdG8gdXNlIGBwdXNoJywgYHBvcCcKIAotKGRlZnVuIGNvbG9yLXNjYWxlIChsKQotICAobGV0KiAoKGNvbG9ycyAoKSkKLSAgICAgICAgIHIgZyBiKQotICAgIChzZXRxIHIgbCkKLSAgICAod2hpbGUgcgotICAgICAgKHNldHEgZyBsKQotICAgICAgKHdoaWxlIGcKLSAgICAgICAgKHNldHEgYiBsKQotICAgICAgICAod2hpbGUgYgotICAgICAgICAgIChwdXNoIChjb25jYXQgIiMiIChjYXIgcikgKGNhciBnKSAoY2FyIGIpKSBjb2xvcnMpCi0gICAgICAgICAgKHBvcCBiKSkKLSAgICAgICAgKHBvcCBnKSkKLSAgICAgIChwb3AgcikpCi0gICAgY29sb3JzKSkKKworKGRlZnVuIGdpdC1ibGFtZS1jb2xvci1zY2FsZSAoJnJlc3QgZWxlbWVudHMpCisgICJHaXZlbiBhIGxpc3QsIHJldHVybnMgYSBsaXN0IG9mIHRyaXBsZXMgZm9ybWVkIHdpdGggZWFjaAorZWxlbWVudHMgb2YgdGhlIGxpc3QuCisKK2EgYiA9PiBiYmIgYmJhIGJhYiBiYWEgYWJiIGFiYSBhYWEgYWFiIgorICAobGV0IChyZXN1bHQpCisgICAgKGRvbGlzdCAoYSBlbGVtZW50cykKKyAgICAgIChkb2xpc3QgKGIgZWxlbWVudHMpCisgICAgICAgIChkb2xpc3QgKGMgZWxlbWVudHMpCisgICAgICAgICAgKHNldHEgcmVzdWx0IChjb25zIChmb3JtYXQgIiMlcyVzJXMiIGEgYiBjKSByZXN1bHQpKSkpKQorICAgIHJlc3VsdCkpCisKKzs7IChnaXQtYmxhbWUtY29sb3Itc2NhbGUgIjBjIiAiMDQiICIyNCIgIjFjIiAiMmMiICIzNCIgIjE0IiAiM2MiKSA9PgorOzsgKCIjM2MzYzNjIiAiIzNjM2MxNCIgIiMzYzNjMzQiICIjM2MzYzJjIiAiIzNjM2MxYyIgIiMzYzNjMjQiCis7OyAiIzNjM2MwNCIgIiMzYzNjMGMiICIjM2MxNDNjIiAiIzNjMTQxNCIgIiMzYzE0MzQiICIjM2MxNDJjIiAuLi4pCisKKyhkZWZtYWNybyBnaXQtYmxhbWUtcmFuZG9tLXBvcCAobCkKKyAgIlNlbGVjdCBhIHJhbmRvbSBlbGVtZW50IGZyb20gTCBhbmQgcmV0dXJucyBpdC4gQWxzbyByZW1vdmUKK3NlbGVjdGVkIGVsZW1lbnQgZnJvbSBsLiIKKyAgOzsgb25seSB3b3JrcyBvbiBsaXN0cyB3aXRoIHVuaXF1ZSBlbGVtZW50cworICBgKGxldCAoKGUgKGVsdCAsbCAocmFuZG9tIChsZW5ndGggLGwpKSkpKQorICAgICAoc2V0cSAsbCAocmVtb3ZlIGUgLGwpKQorICAgICBlKSkKIAogKGRlZnZhciBnaXQtYmxhbWUtZGFyay1jb2xvcnMKLSAgKGNvbG9yLXNjYWxlICcoIjBjIiAiMDQiICIyNCIgIjFjIiAiMmMiICIzNCIgIjE0IiAiM2MiKSkpCisgIChnaXQtYmxhbWUtY29sb3Itc2NhbGUgIjBjIiAiMDQiICIyNCIgIjFjIiAiMmMiICIzNCIgIjE0IiAiM2MiKQorICAiKkxpc3Qgb2YgY29sb3JzIChmb3JtYXQgI1JHQikgdG8gdXNlIGluIGEgZGFyayBlbnZpcm9ubWVudC4KKworVG8gY2hlY2sgb3V0IHRoZSBsaXN0LCBldmFsdWF0ZSAobGlzdC1jb2xvcnMtZGlzcGxheSBnaXQtYmxhbWUtZGFyay1jb2xvcnMpLiIpCiAKIChkZWZ2YXIgZ2l0LWJsYW1lLWxpZ2h0LWNvbG9ycwotICAoY29sb3Itc2NhbGUgJygiYzQiICJkNCIgImNjIiAiZGMiICJmNCIgImU0IiAiZmMiICJlYyIpKSkKKyAgKGdpdC1ibGFtZS1jb2xvci1zY2FsZSAiYzQiICJkNCIgImNjIiAiZGMiICJmNCIgImU0IiAiZmMiICJlYyIpCisgICIqTGlzdCBvZiBjb2xvcnMgKGZvcm1hdCAjUkdCKSB0byB1c2UgaW4gYSBsaWdodCBlbnZpcm9ubWVudC4KIAotKGRlZnZhciBnaXQtYmxhbWUtYW5jaWVudC1jb2xvciAiZGFyayBncmVlbiIpCitUbyBjaGVjayBvdXQgdGhlIGxpc3QsIGV2YWx1YXRlIChsaXN0LWNvbG9ycy1kaXNwbGF5IGdpdC1ibGFtZS1saWdodC1jb2xvcnMpLiIpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWNvbG9ycyAnKCkKKyAgIkNvbG9ycyB1c2VkIGJ5IGdpdC1ibGFtZS4gVGhlIGxpc3QgaXMgYnVpbHQgb25jZSB3aGVuIGFjdGl2YXRpbmcgZ2l0LWJsYW1lCittaW5vciBtb2RlLiIpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWFuY2llbnQtY29sb3IgImRhcmsgZ3JlZW4iCisgICIqQ29sb3IgdG8gYmUgdXNlZCBmb3IgYW5jaWVudCBjb21taXQuIikKIAogKGRlZnZhciBnaXQtYmxhbWUtYXV0b3VwZGF0ZSB0CiAgICIqQXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGJsYW1lIGRpc3BsYXkgd2hpbGUgZWRpdGluZyIpCkBAIC0xMjUsNDEgKzE0Nyw2NCBAQAogICAiQSBxdWV1ZSBvZiB1cGRhdGUgcmVxdWVzdHMiKQogKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdnaXQtYmxhbWUtdXBkYXRlLXF1ZXVlKQogCis7OyBGSVhNRTogZG9jc3RyaW5ncworKGRlZnZhciBnaXQtYmxhbWUtZmlsZSBuaWwpCisoZGVmdmFyIGdpdC1ibGFtZS1jdXJyZW50IG5pbCkKKwogKGRlZnZhciBnaXQtYmxhbWUtbW9kZSBuaWwpCiAobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS1tb2RlKQotKHVubGVzcyAoYXNzcSAnZ2l0LWJsYW1lLW1vZGUgbWlub3ItbW9kZS1hbGlzdCkKLSAgKHNldHEgbWlub3ItbW9kZS1hbGlzdAotCShjb25zIChsaXN0ICdnaXQtYmxhbWUtbW9kZSAiIGJsYW1lIikKLQkgICAgICBtaW5vci1tb2RlLWFsaXN0KSkpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLW1vZGUtbGluZS1zdHJpbmcgIiBibGFtZSIKKyAgIlN0cmluZyB0byBkaXNwbGF5IG9uIHRoZSBtb2RlIGxpbmUgd2hlbiBnaXQtYmxhbWUgaXMgYWN0aXZlLiIpCisKKyhvciAoYXNzcSAnZ2l0LWJsYW1lLW1vZGUgbWlub3ItbW9kZS1hbGlzdCkKKyAgICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0CisJICAoY29ucyAnKGdpdC1ibGFtZS1tb2RlIGdpdC1ibGFtZS1tb2RlLWxpbmUtc3RyaW5nKSBtaW5vci1tb2RlLWFsaXN0KSkpCiAKIDs7OyMjI2F1dG9sb2FkCiAoZGVmdW4gZ2l0LWJsYW1lLW1vZGUgKCZvcHRpb25hbCBhcmcpCi0gICJNaW5vciBtb2RlIGZvciBkaXNwbGF5aW5nIEdpdCBibGFtZSIKKyAgIlRvZ2dsZSBtaW5vciBtb2RlIGZvciBkaXNwbGF5aW5nIEdpdCBibGFtZQorCitXaXRoIHByZWZpeCBBUkcsIHR1cm4gdGhlIG1vZGUgb24gaWYgQVJHIGlzIHBvc2l0aXZlLiIKICAgKGludGVyYWN0aXZlICJQIikKLSAgKGlmIGFyZwotICAgICAgKHNldHEgZ2l0LWJsYW1lLW1vZGUgKGVxIGFyZyAxKSkKLSAgICAoc2V0cSBnaXQtYmxhbWUtbW9kZSAobm90IGdpdC1ibGFtZS1tb2RlKSkpCisgIChjb25kCisgICAoKG51bGwgYXJnKQorICAgIChpZiBnaXQtYmxhbWUtbW9kZSAoZ2l0LWJsYW1lLW1vZGUtb2ZmKSAoZ2l0LWJsYW1lLW1vZGUtb24pKSkKKyAgICgoPiAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAwKSAoZ2l0LWJsYW1lLW1vZGUtb24pKQorICAgKHQgKGdpdC1ibGFtZS1tb2RlLW9mZikpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9uICgpCisgICJUdXJuIG9uIGdpdC1ibGFtZSBtb2RlLgorCitTZWUgYWxzbyBmdW5jdGlvbiBgZ2l0LWJsYW1lLW1vZGUnLiIKICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1ibGFtZS1jb2xvcnMpCiAgIChpZiBnaXQtYmxhbWUtYXV0b3VwZGF0ZQogICAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdnaXQtYmxhbWUtYWZ0ZXItY2hhbmdlIG5pbCB0KQogICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAnZ2l0LWJsYW1lLWFmdGVyLWNoYW5nZSB0KSkKICAgKGdpdC1ibGFtZS1jbGVhbnVwKQotICAoaWYgZ2l0LWJsYW1lLW1vZGUKLSAgICAgIChwcm9nbgotICAgICAgICAobGV0ICgoYmdtb2RlIChjZHIgKGFzc29jICdiYWNrZ3JvdW5kLW1vZGUgKGZyYW1lLXBhcmFtZXRlcnMpKSkpKQotICAgICAgICAgIChpZiAoZXEgYmdtb2RlICdkYXJrKQotICAgICAgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY29sb3JzIGdpdC1ibGFtZS1kYXJrLWNvbG9ycykKLSAgICAgICAgICAgIChzZXRxIGdpdC1ibGFtZS1jb2xvcnMgZ2l0LWJsYW1lLWxpZ2h0LWNvbG9ycykpKQotICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY2FjaGUgKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAnZXF1YWwpKQotICAgICAgICAoZ2l0LWJsYW1lLXJ1bikpCi0gICAgKGNhbmNlbC10aW1lciBnaXQtYmxhbWUtaWRsZS10aW1lcikpKQorICAobGV0ICgoYmdtb2RlIChjZHIgKGFzc29jICdiYWNrZ3JvdW5kLW1vZGUgKGZyYW1lLXBhcmFtZXRlcnMpKSkpKQorICAgIChpZiAoZXEgYmdtb2RlICdkYXJrKQorCShzZXRxIGdpdC1ibGFtZS1jb2xvcnMgZ2l0LWJsYW1lLWRhcmstY29sb3JzKQorICAgICAgKHNldHEgZ2l0LWJsYW1lLWNvbG9ycyBnaXQtYmxhbWUtbGlnaHQtY29sb3JzKSkpCisgIChzZXRxIGdpdC1ibGFtZS1jYWNoZSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICdlcXVhbCkpCisgIChzZXRxIGdpdC1ibGFtZS1tb2RlIHQpCisgIChnaXQtYmxhbWUtcnVuKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9mZiAoKQorICAiVHVybiBvZmYgZ2l0LWJsYW1lIG1vZGUuCisKK1NlZSBhbHNvIGZ1bmN0aW9uIGBnaXQtYmxhbWUtbW9kZScuIgorICAoZ2l0LWJsYW1lLWNsZWFudXApCisgIChpZiBnaXQtYmxhbWUtaWRsZS10aW1lciAoY2FuY2VsLXRpbWVyIGdpdC1ibGFtZS1pZGxlLXRpbWVyKSkKKyAgKHNldHEgZ2l0LWJsYW1lLW1vZGUgbmlsKSkKIAogOzs7IyMjYXV0b2xvYWQKIChkZWZ1biBnaXQtcmVibGFtZSAoKQogICAiUmVjYWxjdWxhdGUgYWxsIGJsYW1lIGluZm9ybWF0aW9uIGluIHRoZSBjdXJyZW50IGJ1ZmZlciIKLSAgKHVubGVzcyBnaXQtYmxhbWUtbW9kZQotICAgIChlcnJvciAiZ2l0LWJsYW1lIGlzIG5vdCBhY3RpdmUiKSkKICAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1ibGFtZS1tb2RlCisgICAgKGVycm9yICJHaXQtYmxhbWUgaXMgbm90IGFjdGl2ZSIpKQorCiAgIChnaXQtYmxhbWUtY2xlYW51cCkKICAgKGdpdC1ibGFtZS1ydW4pKQogCkBAIC0yNzUsNyArMzIwLDYgQEAKICAgICAgICAgKHQKICAgICAgICAgIG5pbCkpKQogCi0KIChkZWZ1biBnaXQtYmxhbWUtbmV3LWNvbW1pdCAoaGFzaCBzcmMtbGluZSByZXMtbGluZSBudW0tbGluZXMpCiAgIChzYXZlLWV4Y3Vyc2lvbgogICAgIChzZXQtYnVmZmVyIGdpdC1ibGFtZS1maWxlKQpAQCAtMjgzLDkgKzMyNywxMSBAQAogICAgICAgICAgIChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KQogICAgICAgICAgIChpbmhpYml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKICAgICAgICh3aGVuIChub3QgaW5mbykKLSAgICAgICAgKGxldCAoKGNvbG9yIChwb3AgZ2l0LWJsYW1lLWNvbG9ycykpKQotICAgICAgICAgICh1bmxlc3MgY29sb3IKLSAgICAgICAgICAgIChzZXRxIGNvbG9yIGdpdC1ibGFtZS1hbmNpZW50LWNvbG9yKSkKKwk7OyBBc3NpZ24gYSByYW5kb20gY29sb3IgdG8gZWFjaCBuZXcgY29tbWl0IGluZm8KKwk7OyBUYWtlIGNhcmUgbm90IHRvIHNlbGVjdCB0aGUgc2FtZSBjb2xvciBtdWx0aXBsZSB0aW1lcworCShsZXQgKChjb2xvciAoaWYgZ2l0LWJsYW1lLWNvbG9ycworCQkJIChnaXQtYmxhbWUtcmFuZG9tLXBvcCBnaXQtYmxhbWUtY29sb3JzKQorCQkgICAgICAgZ2l0LWJsYW1lLWFuY2llbnQtY29sb3IpKSkKICAgICAgICAgICAoc2V0cSBpbmZvIChsaXN0IGhhc2ggc3JjLWxpbmUgcmVzLWxpbmUgbnVtLWxpbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2l0LWRlc2NyaWJlLWNvbW1pdCBoYXNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgJ2NvbG9yIGNvbG9yKSkpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQuZWwgYi9jb250cmliL2VtYWNzL2dpdC5lbAppbmRleCAyZjk5OTVlLi5mNjAwMTc5IDEwMDY0NAotLS0gYS9jb250cmliL2VtYWNzL2dpdC5lbAorKysgYi9jb250cmliL2VtYWNzL2dpdC5lbApAQCAtMzQ1LDkgKzM0NSwxNSBAQAogICAobGV0ICgoc3RyIChnaXQtY2FsbC1wcm9jZXNzLWVudi1zdHJpbmcgbmlsICJzeW1ib2xpYy1yZWYiIHJlZikpKQogICAgIChhbmQgc3RyIChjYXIgKHNwbGl0LXN0cmluZyBzdHIgIlxuIikpKSkpCiAKLShkZWZ1biBnaXQtdXBkYXRlLXJlZiAocmVmIHZhbCAmb3B0aW9uYWwgb2xkdmFsKQorKGRlZnVuIGdpdC11cGRhdGUtcmVmIChyZWYgbmV3dmFsICZvcHRpb25hbCBvbGR2YWwgcmVhc29uKQogICAiVXBkYXRlIGEgcmVmZXJlbmNlIGJ5IGNhbGxpbmcgZ2l0LXVwZGF0ZS1yZWYuIgotICAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzLWVudiBuaWwgbmlsICJ1cGRhdGUtcmVmIiByZWYgdmFsIChpZiBvbGR2YWwgKGxpc3Qgb2xkdmFsKSkpKQorICAobGV0ICgoYXJncyAoYW5kIG9sZHZhbCAobGlzdCBvbGR2YWwpKSkpCisgICAgKHB1c2ggbmV3dmFsIGFyZ3MpCisgICAgKHB1c2ggcmVmIGFyZ3MpCisgICAgKHdoZW4gcmVhc29uCisgICAgIChwdXNoIHJlYXNvbiBhcmdzKQorICAgICAocHVzaCAiLW0iIGFyZ3MpKQorICAgIChlcSAwIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MtZW52IG5pbCBuaWwgInVwZGF0ZS1yZWYiIGFyZ3MpKSkpCiAKIChkZWZ1biBnaXQtcmVhZC10cmVlICh0cmVlICZvcHRpb25hbCBpbmRleC1maWxlKQogICAiUmVhZCBhIHRyZWUgaW50byB0aGUgaW5kZXggZmlsZS4iCkBAIC0zNjQsOCArMzcwLDEwIEBACiAgICJDYWxsIGdpdC1jb21taXQtdHJlZSB3aXRoIGJ1ZmZlciBhcyBpbnB1dCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY29tbWl0IFNIQTEuIgogICAobGV0ICgoYXV0aG9yLW5hbWUgKGdpdC1nZXQtY29tbWl0dGVyLW5hbWUpKQogICAgICAgICAoYXV0aG9yLWVtYWlsIChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpCisgICAgICAgIChzdWJqZWN0ICJjb21taXQgKGluaXRpYWwpOiAiKQogICAgICAgICBhdXRob3ItZGF0ZSBsb2ctc3RhcnQgbG9nLWVuZCBhcmdzIGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlKQogICAgICh3aGVuIGhlYWQKKyAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdDogIikKICAgICAgIChwdXNoICItcCIgYXJncykKICAgICAgIChwdXNoIGhlYWQgYXJncykpCiAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCkBAIC0zODQsMjIgKzM5MiwyOSBAQAogICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIl5QYXJlbnQ6ICtcXChbMC05YS1mXStcXCkiIG5pbCB0KQogICAgICAgICAgICAgICAodW5sZXNzIChzdHJpbmctZXF1YWwgaGVhZCAobWF0Y2gtc3RyaW5nIDEpKQorICAgICAgICAgICAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdCAobWVyZ2UpOiAiKQogICAgICAgICAgICAgICAgIChwdXNoICItcCIgYXJncykKICAgICAgICAgICAgICAgICAocHVzaCAobWF0Y2gtc3RyaW5nIDEpIGFyZ3MpKSkpCiAgICAgICAgIChzZXRxIGxvZy1zdGFydCAocG9pbnQtbWluKSkpCiAgICAgICAoc2V0cSBsb2ctZW5kIChwb2ludC1tYXgpKQorICAgICAgKGdvdG8tY2hhciBsb2ctc3RhcnQpCisgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIi4qJCIgbmlsIHQpCisgICAgICAgIChzZXRxIHN1YmplY3QgKGNvbmNhdCBzdWJqZWN0IChtYXRjaC1zdHJpbmcgMCkpKSkKICAgICAgIChzZXRxIGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlIGJ1ZmZlci1maWxlLWNvZGluZy1zeXN0ZW0pKQotICAgIChnaXQtZ2V0LXN0cmluZy1zaGExCi0gICAgICh3aXRoLW91dHB1dC10by1zdHJpbmcKLSAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKLSAgICAgICAgIChsZXQgKChlbnYgYCgoIkdJVF9BVVRIT1JfTkFNRSIgLiAsYXV0aG9yLW5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQVVUSE9SX0VNQUlMIiAuICxhdXRob3ItZW1haWwpCi0gICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX05BTUUiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAoIkdJVF9DT01NSVRURVJfRU1BSUwiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpKSkpCi0gICAgICAgICAgICh3aGVuIGF1dGhvci1kYXRlIChwdXNoIGAoIkdJVF9BVVRIT1JfREFURSIgLiAsYXV0aG9yLWRhdGUpIGVudikpCi0gICAgICAgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1yZWdpb24KLSAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsb2ctc3RhcnQgbG9nLWVuZCBlbnYKLSAgICAgICAgICAgICAgICAgICJjb21taXQtdHJlZSIgdHJlZSAobnJldmVyc2UgYXJncykpKSkpKSkpCisgICAgKGxldCAoKGNvbW1pdAorICAgICAgICAgICAoZ2l0LWdldC1zdHJpbmctc2hhMQorICAgICAgICAgICAgKHdpdGgtb3V0cHV0LXRvLXN0cmluZworICAgICAgICAgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBzdGFuZGFyZC1vdXRwdXQKKyAgICAgICAgICAgICAgICAobGV0ICgoZW52IGAoKCJHSVRfQVVUSE9SX05BTUUiIC4gLGF1dGhvci1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkdJVF9BVVRIT1JfRU1BSUwiIC4gLGF1dGhvci1lbWFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX05BTUUiIC4gLChnaXQtZ2V0LWNvbW1pdHRlci1uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX0VNQUlMIiAuICwoZ2l0LWdldC1jb21taXR0ZXItZW1haWwpKSkpKQorICAgICAgICAgICAgICAgICAgKHdoZW4gYXV0aG9yLWRhdGUgKHB1c2ggYCgiR0lUX0FVVEhPUl9EQVRFIiAuICxhdXRob3ItZGF0ZSkgZW52KSkKKyAgICAgICAgICAgICAgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1yZWdpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgbG9nLXN0YXJ0IGxvZy1lbmQgZW52CisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW1pdC10cmVlIiB0cmVlIChucmV2ZXJzZSBhcmdzKSkpKSkpKSkKKyAgICAgIChhbmQgKGdpdC11cGRhdGUtcmVmICJIRUFEIiBjb21taXQgaGVhZCBzdWJqZWN0KQorICAgICAgICAgICBjb21taXQpKSkpCiAKIChkZWZ1biBnaXQtZW1wdHktZGItcCAoKQogICAiQ2hlY2sgaWYgdGhlIGdpdCBkYiBpcyBlbXB0eSAobm8gY29tbWl0IGRvbmUgeWV0KS4iCkBAIC02NjIsNyArNjc3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAoaWYgKG9yIChub3QgKHN0cmluZy1lcXVhbCB0cmVlIGhlYWQtdHJlZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeWVzLW9yLW5vLXAgIlRoZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQsIGRvIHlvdSByZWFsbHkgd2FudCB0byBwZXJmb3JtIGFuIGVtcHR5IGNvbW1pdD8gIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKChjb21taXQgKGdpdC1jb21taXQtdHJlZSBidWZmZXIgdHJlZSBoZWFkKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC11cGRhdGUtcmVmICJIRUFEIiBjb21taXQgaGVhZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChkZWxldGUtZmlsZSAiLmdpdC9NRVJHRV9IRUFEIikgKGVycm9yIG5pbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmRpdGlvbi1jYXNlIG5pbCAoZGVsZXRlLWZpbGUgIi5naXQvTUVSR0VfTVNHIikgKGVycm9yIG5pbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyIChlcmFzZS1idWZmZXIpKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCmluZGV4IDgyYTkwNDIuLmQyMzYzYTQgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC10YXJzLnBlcmwKQEAgLTY1LDcgKzY1LDEyIEBACiAJCX0KIAkJcHJpbnQgRkkgIlxuIjsKIAotCQlteSAkcGF0aCA9ICIkcHJlZml4JG5hbWUiOworCQlteSAkcGF0aDsKKwkJaWYgKCRwcmVmaXgpIHsKKwkJCSRwYXRoID0gIiRwcmVmaXgvJG5hbWUiOworCQl9IGVsc2UgeworCQkJJHBhdGggPSAiJG5hbWUiOworCQl9CiAJCSRmaWxlc3skcGF0aH0gPSBbJG5leHRfbWFyaysrLCAkbW9kZV07CiAKIAkJJGNvbW1pdF90aW1lID0gJG10aW1lIGlmICRtdGltZSA+ICRjb21taXRfdGltZTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3IGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKaW5kZXggNTIxYjJmYy4uMmQ4MGUyYiAxMDA3NTUKLS0tIGEvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKKysrIGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKQEAgLTEwLDcgKzEwLDggQEAKIFRoaXMgcHJvZ3JhbSBpcyBiYXNlZCBvbiBienJrIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QHVidW50dS5jb20+CiAiIiIKIF9fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuIgotX19hdXRob3JfXyAgICA9ICJBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAaHAuY29tPiIKK19fY29weXJpZ2h0X18gPSAiQ29weXJpZ2h0IChDKSAyMDA3IEFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBnbWFpbC5jb20iCitfX2F1dGhvcl9fICAgID0gIkFuZWVzaCBLdW1hciBLLlYgPGFuZWVzaC5rdW1hckBnbWFpbC5jb20+IgogCiAKIGltcG9ydCBzeXMKQEAgLTI0LDYgKzI1LDcgQEAKIGltcG9ydCBjYWlybwogaW1wb3J0IG1hdGgKIGltcG9ydCBzdHJpbmcKK2ltcG9ydCBmY250bAogCiB0cnk6CiAgICAgaW1wb3J0IGd0a3NvdXJjZXZpZXcKQEAgLTMzNyw2ICszMzksMTg2IEBACiAJCWZwLmNsb3NlKCkKIAkJcmV0dXJuIGRpZmYKIAorY2xhc3MgQW5ub3RhdGVXaW5kb3c6CisJIiIiQW5ub3RhdGUgd2luZG93LgorCVRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW5kIG1hbmFnZXMgYSBzaW5nbGUgd2luZG93IGNvbnRhaW5pbmcgdGhlCisJYW5ub3RhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGZpbGUKKwkiIiIKKworCWRlZiBfX2luaXRfXyhzZWxmKToKKwkJc2VsZi53aW5kb3cgPSBndGsuV2luZG93KGd0ay5XSU5ET1dfVE9QTEVWRUwpCisJCXNlbGYud2luZG93LnNldF9ib3JkZXJfd2lkdGgoMCkKKwkJc2VsZi53aW5kb3cuc2V0X3RpdGxlKCJHaXQgcmVwb3NpdG9yeSBicm93c2VyIGFubm90YXRpb24gd2luZG93IikKKworCQkjIFVzZSB0d28gdGhpcmRzIG9mIHRoZSBzY3JlZW4gYnkgZGVmYXVsdAorCQlzY3JlZW4gPSBzZWxmLndpbmRvdy5nZXRfc2NyZWVuKCkKKwkJbW9uaXRvciA9IHNjcmVlbi5nZXRfbW9uaXRvcl9nZW9tZXRyeSgwKQorCQl3aWR0aCA9IGludChtb25pdG9yLndpZHRoICogMC42NikKKwkJaGVpZ2h0ID0gaW50KG1vbml0b3IuaGVpZ2h0ICogMC42NikKKwkJc2VsZi53aW5kb3cuc2V0X2RlZmF1bHRfc2l6ZSh3aWR0aCwgaGVpZ2h0KQorCisJZGVmIGFkZF9maWxlX2RhdGEoc2VsZiwgZmlsZW5hbWUsIGNvbW1pdF9zaGExLCBsaW5lX251bSk6CisJCWZwID0gb3MucG9wZW4oImdpdCBjYXQtZmlsZSBibG9iICIgKyBjb21taXRfc2hhMSArIjoiK2ZpbGVuYW1lKQorCQlpID0gMTsKKwkJZm9yIGxpbmUgaW4gZnAucmVhZGxpbmVzKCk6CisJCQlsaW5lID0gc3RyaW5nLnJzdHJpcChsaW5lKQorCQkJc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyJIRUFEIiwgZmlsZW5hbWUsIGxpbmUsIGldKQorCQkJaSA9IGkrMQorCQlmcC5jbG9zZSgpCisKKwkJIyBub3cgc2V0IHRoZSBjdXJzb3IgcG9zaXRpb24KKwkJc2VsZi50cmVldmlldy5zZXRfY3Vyc29yKGxpbmVfbnVtLTEpCisJCXNlbGYudHJlZXZpZXcuZ3JhYl9mb2N1cygpCisKKwlkZWYgX3RyZWV2aWV3X2N1cnNvcl9jYihzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyBjdXJzb3IgY2hhbmdlcy4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQljb21taXRfc2hhMSA9IHNlbGYubW9kZWxbcGF0aF1bMF0KKwkJY29tbWl0X21zZyA9ICIiCisJCWZwID0gb3MucG9wZW4oImdpdCBjYXQtZmlsZSBjb21taXQgIiArIGNvbW1pdF9zaGExKQorCQlmb3IgbGluZSBpbiBmcC5yZWFkbGluZXMoKToKKwkJCWNvbW1pdF9tc2cgPSAgY29tbWl0X21zZyArIGxpbmUKKwkJZnAuY2xvc2UoKQorCisJCXNlbGYuY29tbWl0X2J1ZmZlci5zZXRfdGV4dChjb21taXRfbXNnKQorCisJZGVmIF90cmVldmlld19yb3dfYWN0aXZhdGVkKHNlbGYsICphcmdzKToKKwkJIiIiQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHRyZWV2aWV3IHJvdyBnZXRzIHNlbGVjdGVkLiIiIgorCQkocGF0aCwgY29sKSA9IHNlbGYudHJlZXZpZXcuZ2V0X2N1cnNvcigpCisJCWNvbW1pdF9zaGExID0gc2VsZi5tb2RlbFtwYXRoXVswXQorCQlmaWxlbmFtZSAgICA9IHNlbGYubW9kZWxbcGF0aF1bMV0KKwkJbGluZV9udW0gICAgPSBzZWxmLm1vZGVsW3BhdGhdWzNdCisKKwkJd2luZG93ID0gQW5ub3RhdGVXaW5kb3coKTsKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IHJldi1wYXJzZSAiKyBjb21taXRfc2hhMSArICJ+MSIpCisJCWNvbW1pdF9zaGExID0gc3RyaW5nLnN0cmlwKGZwLnJlYWRsaW5lKCkpCisJCWZwLmNsb3NlKCkKKwkJd2luZG93LmFubm90YXRlKGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pCisKKwlkZWYgZGF0YV9yZWFkeShzZWxmLCBzb3VyY2UsIGNvbmRpdGlvbik6CisJCXdoaWxlICgxKToKKwkJCXRyeSA6CisJCQkJYnVmZmVyID0gc291cmNlLnJlYWQoODE5MikKKwkJCWV4Y2VwdDoKKwkJCQkjIHJlc291cmNlIHRlbXBvcmFyeSBub3QgYXZhaWxhYmxlCisJCQkJcmV0dXJuIFRydWUKKworCQkJaWYgKGxlbihidWZmZXIpID09IDApOgorCQkJCWdvYmplY3Quc291cmNlX3JlbW92ZShzZWxmLmlvX3dhdGNoX3RhZykKKwkJCQlzb3VyY2UuY2xvc2UoKQorCQkJCXJldHVybiBGYWxzZQorCisJCQlmb3IgYnVmZiBpbiBidWZmZXIuc3BsaXQoIlxuIik6CisJCQkJYW5ub3RhdGVfbGluZSA9IHJlLmNvbXBpbGUoJ14oWzAtOWEtZl17NDB9KSAoLispICguKykgKC4rKSQnKQorCQkJCW0gPSBhbm5vdGF0ZV9saW5lLm1hdGNoKGJ1ZmYpCisJCQkJaWYgbm90IG06CisJCQkJCWFubm90YXRlX2xpbmUgPSByZS5jb21waWxlKCdeKGZpbGVuYW1lKSAoLispJCcpCisJCQkJCW0gPSBhbm5vdGF0ZV9saW5lLm1hdGNoKGJ1ZmYpCisJCQkJCWlmIG5vdCBtOgorCQkJCQkJY29udGludWUKKwkJCQkJZmlsZW5hbWUgPSBtLmdyb3VwKDIpCisJCQkJZWxzZToKKwkJCQkJc2VsZi5jb21taXRfc2hhMSA9IG0uZ3JvdXAoMSkKKwkJCQkJc2VsZi5zb3VyY2VfbGluZSA9IGludChtLmdyb3VwKDIpKQorCQkJCQlzZWxmLnJlc3VsdF9saW5lID0gaW50KG0uZ3JvdXAoMykpCisJCQkJCXNlbGYuY291bnQJICAgID0gaW50KG0uZ3JvdXAoNCkpCisJCQkJCSNzZXQgdGhlIGRldGFpbHMgb25seSB3aGVuIHdlIGhhdmUgdGhlIGZpbGUgbmFtZQorCQkJCQljb250aW51ZQorCisJCQkJd2hpbGUgKHNlbGYuY291bnQgPiAwKToKKwkJCQkJIyBzZXQgYXQgcmVzdWx0X2xpbmUgKyBjb3VudC0xIHRoZSBzaGExIGFzIGNvbW1pdF9zaGExCisJCQkJCXNlbGYuY291bnQgPSBzZWxmLmNvdW50IC0gMQorCQkJCQlpdGVyID0gc2VsZi5tb2RlbC5pdGVyX250aF9jaGlsZChOb25lLCBzZWxmLnJlc3VsdF9saW5lICsgc2VsZi5jb3VudC0xKQorCQkJCQlzZWxmLm1vZGVsLnNldChpdGVyLCAwLCBzZWxmLmNvbW1pdF9zaGExLCAxLCBmaWxlbmFtZSwgMywgc2VsZi5zb3VyY2VfbGluZSkKKworCisJZGVmIGFubm90YXRlKHNlbGYsIGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pOgorCQkjIHZlcmlmeSB0aGUgY29tbWl0X3NoYTEgc3BlY2lmaWVkIGhhcyB0aGlzIGZpbGVuYW1lCisKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IGxzLXRyZWUgIisgY29tbWl0X3NoYTEgKyAiIC0tICIgKyBmaWxlbmFtZSkKKwkJbGluZSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQlpZiBsaW5lID09ICcnOgorCQkJIyBwb3AgdXAgdGhlIG1lc3NhZ2UgdGhlIGZpbGUgaXMgbm90IHRoZXJlIGFzIGEgcGFydCBvZiB0aGUgY29tbWl0CisJCQlmcC5jbG9zZSgpCisJCQlkaWFsb2cgPSBndGsuTWVzc2FnZURpYWxvZyhwYXJlbnQ9Tm9uZSwgZmxhZ3M9MCwKKwkJCQkJdHlwZT1ndGsuTUVTU0FHRV9XQVJOSU5HLCBidXR0b25zPWd0ay5CVVRUT05TX0NMT1NFLAorCQkJCQltZXNzYWdlX2Zvcm1hdD1Ob25lKQorCQkJZGlhbG9nLnNldF9tYXJrdXAoIlRoZSBmaWxlICVzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBwYXJlbnQgY29tbWl0ICVzIiAlIChmaWxlbmFtZSwgY29tbWl0X3NoYTEpKQorCQkJZGlhbG9nLnJ1bigpCisJCQlkaWFsb2cuZGVzdHJveSgpCisJCQlyZXR1cm4KKworCQlmcC5jbG9zZSgpCisKKwkJdnBhbiA9IGd0ay5WUGFuZWQoKTsKKwkJc2VsZi53aW5kb3cuYWRkKHZwYW4pOworCQl2cGFuLnNob3coKQorCisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQl2cGFuLnBhY2sxKHNjcm9sbHdpbiwgVHJ1ZSwgVHJ1ZSk7CisJCXNjcm9sbHdpbi5zaG93KCkKKworCQlzZWxmLm1vZGVsID0gZ3RrLlRyZWVTdG9yZShzdHIsIHN0ciwgc3RyLCBpbnQpCisJCXNlbGYudHJlZXZpZXcgPSBndGsuVHJlZVZpZXcoc2VsZi5tb2RlbCkKKwkJc2VsZi50cmVldmlldy5zZXRfcnVsZXNfaGludChUcnVlKQorCQlzZWxmLnRyZWV2aWV3LnNldF9zZWFyY2hfY29sdW1uKDApCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgiY3Vyc29yLWNoYW5nZWQiLCBzZWxmLl90cmVldmlld19jdXJzb3JfY2IpCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYuX3RyZWV2aWV3X3Jvd19hY3RpdmF0ZWQpCisJCXNjcm9sbHdpbi5hZGQoc2VsZi50cmVldmlldykKKwkJc2VsZi50cmVldmlldy5zaG93KCkKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAxMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiQ29tbWl0IikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMCkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAyMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiRmlsZSBOYW1lIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMSkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAyMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiRGF0YSIpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAidGV4dCIsIDIpCisJCXNlbGYudHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKwkJIyBUaGUgY29tbWl0IG1lc3NhZ2Ugd2luZG93CisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQl2cGFuLnBhY2syKHNjcm9sbHdpbiwgVHJ1ZSwgVHJ1ZSk7CisJCXNjcm9sbHdpbi5zaG93KCkKKworCQljb21taXRfdGV4dCA9IGd0ay5UZXh0VmlldygpCisJCXNlbGYuY29tbWl0X2J1ZmZlciA9IGd0ay5UZXh0QnVmZmVyKCkKKwkJY29tbWl0X3RleHQuc2V0X2J1ZmZlcihzZWxmLmNvbW1pdF9idWZmZXIpCisJCXNjcm9sbHdpbi5hZGQoY29tbWl0X3RleHQpCisJCWNvbW1pdF90ZXh0LnNob3coKQorCisJCXNlbGYud2luZG93LnNob3coKQorCisJCXNlbGYuYWRkX2ZpbGVfZGF0YShmaWxlbmFtZSwgY29tbWl0X3NoYTEsIGxpbmVfbnVtKQorCisJCWZwID0gb3MucG9wZW4oImdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tICIgKyBmaWxlbmFtZSArICIgIiArIGNvbW1pdF9zaGExKQorCQlmbGFncyA9IGZjbnRsLmZjbnRsKGZwLmZpbGVubygpLCBmY250bC5GX0dFVEZMKQorCQlmY250bC5mY250bChmcC5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCQlzZWxmLmlvX3dhdGNoX3RhZyA9IGdvYmplY3QuaW9fYWRkX3dhdGNoKGZwLCBnb2JqZWN0LklPX0lOLCBzZWxmLmRhdGFfcmVhZHkpCisKKwogY2xhc3MgRGlmZldpbmRvdzoKIAkiIiJEaWZmIHdpbmRvdy4KIAlUaGlzIG9iamVjdCByZXByZXNlbnRzIGFuZCBtYW5hZ2VzIGEgc2luZ2xlIHdpbmRvdyBjb250YWluaW5nIHRoZQpAQCAtMzU1LDYgKzUzNyw3IEBACiAJCWhlaWdodCA9IGludChtb25pdG9yLmhlaWdodCAqIDAuNjYpCiAJCXNlbGYud2luZG93LnNldF9kZWZhdWx0X3NpemUod2lkdGgsIGhlaWdodCkKIAorCiAJCXNlbGYuY29uc3RydWN0KCkKIAogCWRlZiBjb25zdHJ1Y3Qoc2VsZik6CkBAIC0zNzEsMTAgKzU1NCwxMiBAQAogCQl2Ym94LnBhY2tfc3RhcnQobWVudV9iYXIsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQogCQltZW51X2Jhci5zaG93KCkKIAorCQlocGFuID0gZ3RrLkhQYW5lZCgpCisKIAkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKIAkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQogCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCi0JCXZib3gucGFja19zdGFydChzY3JvbGx3aW4sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisJCWhwYW4ucGFjazEoc2Nyb2xsd2luLCBUcnVlLCBUcnVlKQogCQlzY3JvbGx3aW4uc2hvdygpCiAKIAkJaWYgaGF2ZV9ndGtzb3VyY2V2aWV3OgpAQCAtMzg4LDExICs1NzMsNzcgQEAKIAkJCXNlbGYuYnVmZmVyID0gZ3RrLlRleHRCdWZmZXIoKQogCQkJc291cmNldmlldyA9IGd0ay5UZXh0VmlldyhzZWxmLmJ1ZmZlcikKIAorCiAJCXNvdXJjZXZpZXcuc2V0X2VkaXRhYmxlKEZhbHNlKQogCQlzb3VyY2V2aWV3Lm1vZGlmeV9mb250KHBhbmdvLkZvbnREZXNjcmlwdGlvbigiTW9ub3NwYWNlIikpCiAJCXNjcm9sbHdpbi5hZGQoc291cmNldmlldykKIAkJc291cmNldmlldy5zaG93KCkKIAorCQkjIFRoZSBmaWxlIGhpZXJhcmNoeTogYSBzY3JvbGxhYmxlIHRyZWV2aWV3CisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQlzY3JvbGx3aW4uc2V0X3NpemVfcmVxdWVzdCgyMCwgLTEpCisJCWhwYW4ucGFjazIoc2Nyb2xsd2luLCBUcnVlLCBUcnVlKQorCQlzY3JvbGx3aW4uc2hvdygpCisKKwkJc2VsZi5tb2RlbCA9IGd0ay5UcmVlU3RvcmUoc3RyLCBzdHIsIHN0cikKKwkJc2VsZi50cmVldmlldyA9IGd0ay5UcmVlVmlldyhzZWxmLm1vZGVsKQorCQlzZWxmLnRyZWV2aWV3LnNldF9zZWFyY2hfY29sdW1uKDEpCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgiY3Vyc29yLWNoYW5nZWQiLCBzZWxmLl90cmVldmlld19jbGlja2VkKQorCQlzY3JvbGx3aW4uYWRkKHNlbGYudHJlZXZpZXcpCisJCXNlbGYudHJlZXZpZXcuc2hvdygpCisKKwkJY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoIndpZHRoLWNoYXJzIiwgMjApCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiU2VsZWN0IHRvIGFubm90YXRlIikKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMCkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQl2Ym94LnBhY2tfc3RhcnQoaHBhbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKwkJaHBhbi5zaG93KCkKKworCWRlZiBfdHJlZXZpZXdfY2xpY2tlZChzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyBjdXJzb3IgY2hhbmdlcy4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQlzcGVjaWZpY19maWxlID0gc2VsZi5tb2RlbFtwYXRoXVsxXQorCQljb21taXRfc2hhMSA9ICBzZWxmLm1vZGVsW3BhdGhdWzJdCisJCWlmIHNwZWNpZmljX2ZpbGUgPT0gIE5vbmUgOgorCQkJcmV0dXJuCisJCWVsaWYgc3BlY2lmaWNfZmlsZSA9PSAgIiIgOgorCQkJc3BlY2lmaWNfZmlsZSA9ICBOb25lCisKKwkJd2luZG93ID0gQW5ub3RhdGVXaW5kb3coKTsKKwkJd2luZG93LmFubm90YXRlKHNwZWNpZmljX2ZpbGUsIGNvbW1pdF9zaGExLCAxKQorCisKKwlkZWYgY29tbWl0X2ZpbGVzKHNlbGYsIGNvbW1pdF9zaGExLCBwYXJlbnRfc2hhMSk6CisJCXNlbGYubW9kZWwuY2xlYXIoKQorCQlhZGQgID0gc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyAiQWRkZWQiLCBOb25lLCBOb25lXSkKKwkJZGVsZSA9IHNlbGYubW9kZWwuYXBwZW5kKE5vbmUsIFsgIkRlbGV0ZWQiLCBOb25lLCBOb25lXSkKKwkJbW9kICA9IHNlbGYubW9kZWwuYXBwZW5kKE5vbmUsIFsgIk1vZGlmaWVkIiwgTm9uZSwgTm9uZV0pCisJCWRpZmZfdHJlZSA9IHJlLmNvbXBpbGUoJ14oOi57Nn0pICguezZ9KSAoLns0MH0pICguezQwfSkgKEF8RHxNKVxzKC4rKSQnKQorCQlmcCA9IG9zLnBvcGVuKCJnaXQgZGlmZi10cmVlIC1yIC0tbm8tY29tbWl0LWlkICIgKyBwYXJlbnRfc2hhMSArICIgIiArIGNvbW1pdF9zaGExKQorCQl3aGlsZSAxOgorCQkJbGluZSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQkJaWYgbGluZSA9PSAnJzoKKwkJCQlicmVhaworCQkJbSA9IGRpZmZfdHJlZS5tYXRjaChsaW5lKQorCQkJaWYgbm90IG06CisJCQkJY29udGludWUKKworCQkJYXR0ciA9IG0uZ3JvdXAoNSkKKwkJCWZpbGVuYW1lID0gbS5ncm91cCg2KQorCQkJaWYgYXR0ciA9PSAiQSI6CisJCQkJc2VsZi5tb2RlbC5hcHBlbmQoYWRkLCAgW2ZpbGVuYW1lLCBmaWxlbmFtZSwgY29tbWl0X3NoYTFdKQorCQkJZWxpZiBhdHRyID09ICJEIjoKKwkJCQlzZWxmLm1vZGVsLmFwcGVuZChkZWxlLCBbZmlsZW5hbWUsIGZpbGVuYW1lLCBjb21taXRfc2hhMV0pCisJCQllbGlmIGF0dHIgPT0gIk0iOgorCQkJCXNlbGYubW9kZWwuYXBwZW5kKG1vZCwgIFtmaWxlbmFtZSwgZmlsZW5hbWUsIGNvbW1pdF9zaGExXSkKKwkJZnAuY2xvc2UoKQorCisJCXNlbGYudHJlZXZpZXcuZXhwYW5kX2FsbCgpCiAKIAlkZWYgc2V0X2RpZmYoc2VsZiwgY29tbWl0X3NoYTEsIHBhcmVudF9zaGExLCBlbmNvZGluZyk6CiAJCSIiIlNldCB0aGUgZGlmZmVyZW5jZXMgc2hvd2VkIGJ5IHRoaXMgd2luZG93LgpAQCAtNDA2LDYgKzY1Nyw3IEBACiAJCWZwID0gb3MucG9wZW4oImdpdCBkaWZmLXRyZWUgLXAgIiArIHBhcmVudF9zaGExICsgIiAiICsgY29tbWl0X3NoYTEpCiAJCXNlbGYuYnVmZmVyLnNldF90ZXh0KHVuaWNvZGUoZnAucmVhZCgpLCBlbmNvZGluZykuZW5jb2RlKCd1dGYtOCcpKQogCQlmcC5jbG9zZSgpCisJCXNlbGYuY29tbWl0X2ZpbGVzKGNvbW1pdF9zaGExLCBwYXJlbnRfc2hhMSkKIAkJc2VsZi53aW5kb3cuc2hvdygpCiAKIAlkZWYgc2F2ZV9tZW51X3Jlc3BvbnNlKHNlbGYsIHdpZGdldCwgc3RyaW5nKToKQEAgLTQyNSw3ICs2NzcsNyBAQAogY2xhc3MgR2l0VmlldzoKIAkiIiIgVGhpcyBpcyB0aGUgbWFpbiBjbGFzcwogCSIiIgotCXZlcnNpb24gPSAiMC44IgorCXZlcnNpb24gPSAiMC45IgogCiAJZGVmIF9faW5pdF9fKHNlbGYsIHdpdGhfZGlmZj0wKToKIAkJc2VsZi53aXRoX2RpZmYgPSB3aXRoX2RpZmYKQEAgLTU5MCw3ICs4NDIsNyBAQAogCQlkaWFsb2cgPSBndGsuQWJvdXREaWFsb2coKQogCQlkaWFsb2cuc2V0X25hbWUoIkdpdHZpZXciKQogCQlkaWFsb2cuc2V0X3ZlcnNpb24oR2l0Vmlldy52ZXJzaW9uKQotCQlkaWFsb2cuc2V0X2F1dGhvcnMoWyJBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAaHAuY29tPiJdKQorCQlkaWFsb2cuc2V0X2F1dGhvcnMoWyJBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tPiJdKQogCQlkaWFsb2cuc2V0X3dlYnNpdGUoImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8iKQogCQlkaWFsb2cuc2V0X2NvcHlyaWdodCgiVXNlIGFuZCBkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiKQogCQlkaWFsb2cuc2V0X3dyYXBfbGljZW5zZShUcnVlKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAppbmRleCA2NTE2MDE1Li5kMWJlZjkxIDEwMDY0NAotLS0gYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbAorKysgYi9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMzAyLDcgKzMwMiw3IEBACiAJIyBMaXN0IGFsbCBvZiB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZSByZW1vdmVkIGJ5IHRoaXMgdXBkYXRlLCBpbiBhIGZhc3QgZm9yd2FyZAogCSMgdXBkYXRlLCB0aGlzIGxpc3Qgd2lsbCBiZSBlbXB0eSwgYmVjYXVzZSByZXYtbGlzdCBPIF5OIGlzIGVtcHR5LiAgRm9yIGEgbm9uCiAJIyBmYXN0IGZvcndhcmQsIE8gXk4gaXMgdGhlIGxpc3Qgb2YgcmVtb3ZlZCByZXZpc2lvbnMKLQlmYXN0Zm9yd2FyZD0iIgorCWZhc3RfZm9yd2FyZD0iIgogCXJldj0iIgogCWZvciByZXYgaW4gJChnaXQgcmV2LWxpc3QgJG5ld3Jldi4uJG9sZHJldikKIAlkbwpAQCAtMzI3LDM2ICszMjcsNjcgQEAKIAlpZiBbIC16ICIkZmFzdGZvcndhcmQiIF07IHRoZW4KIAkJZWNobyAiICAgICAgZnJvbSAgJG9sZHJldiAoJG9sZHJldl90eXBlKSIKIAllbHNlCisJCSMgIDEuIEV4aXN0aW5nIHJldmlzaW9ucyB3ZXJlIHJlbW92ZWQuICBJbiB0aGlzIGNhc2UgbmV3cmV2IGlzIGEKKwkJIyAgICAgc3Vic2V0IG9mIG9sZHJldiAtIHRoaXMgaXMgdGhlIHJldmVyc2Ugb2YgYSBmYXN0LWZvcndhcmQsCisJCSMgICAgIGEgcmV3aW5kCisJCSMgIDIuIE5ldyByZXZpc2lvbnMgd2VyZSBhZGRlZCBvbiB0b3Agb2YgYW4gb2xkIHJldmlzaW9uLCB0aGlzIGlzCisJCSMgICAgIGEgcmV3aW5kIGFuZCBhZGRpdGlvbi4KKworCQkjICgxKSBjZXJ0YWlubHkgaGFwcGVuZWQsICgyKSBwb3NzaWJseS4gIFdoZW4gKDIpIGhhc24ndCBoYXBwZW5lZCwKKwkJIyB3ZSBzZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgbm8gbG9nIHByaW50b3V0IGlzIHJlcXVpcmVkLgorCiAJCWVjaG8gIiIKLQkJZWNobyAiVGhpcyB1cGRhdGUgYWRkZWQgbmV3IHJldmlzaW9ucyBhZnRlciB1bmRvaW5nIG9sZCByZXZpc2lvbnMuICBUaGF0IGlzIHRvIgotCQllY2hvICJzYXksIHRoZSBvbGQgcmV2aXNpb24gaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB0aGUgbmV3IHJldmlzaW9uLiAgVGhpcyIKLQkJZWNobyAic2l0dWF0aW9uIG9jY3VycyB3aGVuIHlvdSAtLWZvcmNlIHB1c2ggYSBjaGFuZ2UgYW5kIGdlbmVyYXRlIGEiCi0JCWVjaG8gInJlcG9zaXRvcnkgY29udGFpbmluZyBzb21ldGhpbmcgbGlrZSB0aGlzOiIKLQkJZWNobyAiIgotCQllY2hvICIgKiAtLSAqIC0tIEIgLS0gTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgotCQllY2hvICIgICAgICAgICAgICBcXCIKLQkJZWNobyAiICAgICAgICAgICAgIE4gLS0gTiAtLSBOICgkbmV3cmV2KSIKLQkJZWNobyAiIgotCQllY2hvICJXaGVuIHRoaXMgaGFwcGVucyB3ZSBhc3N1bWUgdGhhdCB5b3UndmUgYWxyZWFkeSBoYWQgYWxlcnQgZW1haWxzIGZvciBhbGwiCi0JCWVjaG8gIm9mIHRoZSBPIHJldmlzaW9ucywgYW5kIHNvIHdlIGhlcmUgcmVwb3J0IG9ubHkgdGhlIHJldmlzaW9ucyBpbiB0aGUgTiIKLQkJZWNobyAiYnJhbmNoIGZyb20gdGhlIGNvbW1vbiBiYXNlLCBCLiIKKworCQkjIEZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgb2xkIGFuZCBuZXcgcmV2aXNpb25zIGFuZCBjb21wYXJlCisJCSMgaXQgd2l0aCBuZXdyZXYKKwkJYmFzZXJldj0kKGdpdCBtZXJnZS1iYXNlICRvbGRyZXYgJG5ld3JldikKKwkJcmV3aW5kX29ubHk9IiIKKwkJaWYgWyAiJGJhc2VyZXYiID0gIiRuZXdyZXYiIF07IHRoZW4KKwkJCWVjaG8gIlRoaXMgdXBkYXRlIGRpc2NhcmRlZCBleGlzdGluZyByZXZpc2lvbnMgYW5kIGxlZnQgdGhlIGJyYW5jaCBwb2ludGluZyBhdCIKKwkJCWVjaG8gImEgcHJldmlvdXMgcG9pbnQgaW4gdGhlIHJlcG9zaXRvcnkgaGlzdG9yeS4iCisJCQllY2hvICIiCisJCQllY2hvICIgKiAtLSAqIC0tIE4gKCRuZXdyZXYpIgorCQkJZWNobyAiICAgICAgICAgICAgXFwiCisJCQllY2hvICIgICAgICAgICAgICAgTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgorCQkJZWNobyAiIgorCQkJZWNobyAiVGhlIHJlbW92ZWQgcmV2aXNpb25zIGFyZSBub3QgbmVjZXNzYXJpbGx5IGdvbmUgLSBpZiBhbm90aGVyIHJlZmVyZW5jZSIKKwkJCWVjaG8gInN0aWxsIHJlZmVycyB0byB0aGVtIHRoZXkgd2lsbCBzdGF5IGluIHRoZSByZXBvc2l0b3J5LiIKKwkJCXJld2luZF9vbmx5PTEKKwkJZWxzZQorCQkJZWNobyAiVGhpcyB1cGRhdGUgYWRkZWQgbmV3IHJldmlzaW9ucyBhZnRlciB1bmRvaW5nIGV4aXN0aW5nIHJldmlzaW9ucy4gIFRoYXQgaXMiCisJCQllY2hvICJ0byBzYXksIHRoZSBvbGQgcmV2aXNpb24gaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB0aGUgbmV3IHJldmlzaW9uLiAgVGhpcyIKKwkJCWVjaG8gInNpdHVhdGlvbiBvY2N1cnMgd2hlbiB5b3UgLS1mb3JjZSBwdXNoIGEgY2hhbmdlIGFuZCBnZW5lcmF0ZSBhIHJlcG9zaXRvcnkiCisJCQllY2hvICJjb250YWluaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6IgorCQkJZWNobyAiIgorCQkJZWNobyAiICogLS0gKiAtLSBCIC0tIE8gLS0gTyAtLSBPICgkb2xkcmV2KSIKKwkJCWVjaG8gIiAgICAgICAgICAgIFxcIgorCQkJZWNobyAiICAgICAgICAgICAgIE4gLS0gTiAtLSBOICgkbmV3cmV2KSIKKwkJCWVjaG8gIiIKKwkJCWVjaG8gIldoZW4gdGhpcyBoYXBwZW5zIHdlIGFzc3VtZSB0aGF0IHlvdSd2ZSBhbHJlYWR5IGhhZCBhbGVydCBlbWFpbHMgZm9yIGFsbCIKKwkJCWVjaG8gIm9mIHRoZSBPIHJldmlzaW9ucywgYW5kIHNvIHdlIGhlcmUgcmVwb3J0IG9ubHkgdGhlIHJldmlzaW9ucyBpbiB0aGUgTiIKKwkJCWVjaG8gImJyYW5jaCBmcm9tIHRoZSBjb21tb24gYmFzZSwgQi4iCisJCWZpCiAJZmkKIAogCWVjaG8gIiIKLQllY2hvICJUaG9zZSByZXZpc2lvbnMgbGlzdGVkIGFib3ZlIHRoYXQgYXJlIG5ldyB0byB0aGlzIHJlcG9zaXRvcnkgaGF2ZSIKLQllY2hvICJub3QgYXBwZWFyZWQgb24gYW55IG90aGVyIG5vdGlmaWNhdGlvbiBlbWFpbDsgc28gd2UgbGlzdCB0aG9zZSIKLQllY2hvICJyZXZpc2lvbnMgaW4gZnVsbCwgYmVsb3cuIgorCWlmIFsgLXogIiRyZXdpbmRfb25seSIgXTsgdGhlbgorCQllY2hvICJUaG9zZSByZXZpc2lvbnMgbGlzdGVkIGFib3ZlIHRoYXQgYXJlIG5ldyB0byB0aGlzIHJlcG9zaXRvcnkgaGF2ZSIKKwkJZWNobyAibm90IGFwcGVhcmVkIG9uIGFueSBvdGhlciBub3RpZmljYXRpb24gZW1haWw7IHNvIHdlIGxpc3QgdGhvc2UiCisJCWVjaG8gInJldmlzaW9ucyBpbiBmdWxsLCBiZWxvdy4iCiAKLQllY2hvICIiCi0JZWNobyAkTE9HQkVHSU4KLQlnaXQgcmV2LXBhcnNlIC0tbm90IC0tYnJhbmNoZXMgfCBncmVwIC12ICQoZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSkgfAotCWdpdCByZXYtbGlzdCAtLXByZXR0eSAtLXN0ZGluICRvbGRyZXYuLiRuZXdyZXYKKwkJZWNobyAiIgorCQllY2hvICRMT0dCRUdJTgorCQlnaXQgcmV2LXBhcnNlIC0tbm90IC0tYnJhbmNoZXMgfCBncmVwIC12ICQoZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSkgfAorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHkgLS1zdGRpbiAkb2xkcmV2Li4kbmV3cmV2CiAKLQkjIFhYWDogTmVlZCBhIHdheSBvZiBkZXRlY3Rpbmcgd2hldGhlciBnaXQgcmV2LWxpc3QgYWN0dWFsbHkgb3V0cHV0dGVkCi0JIyBhbnl0aGluZywgc28gdGhhdCB3ZSBjYW4gaXNzdWUgYSAibm8gbmV3IHJldmlzaW9ucyBhZGRlZCBieSB0aGlzCi0JIyB1cGRhdGUiIG1lc3NhZ2UKKwkJIyBYWFg6IE5lZWQgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZXRoZXIgZ2l0IHJldi1saXN0IGFjdHVhbGx5IG91dHB1dHRlZAorCQkjIGFueXRoaW5nLCBzbyB0aGF0IHdlIGNhbiBpc3N1ZSBhICJubyBuZXcgcmV2aXNpb25zIGFkZGVkIGJ5IHRoaXMKKwkJIyB1cGRhdGUiIG1lc3NhZ2UKIAotCWVjaG8gJExPR0VORAorCQllY2hvICRMT0dFTkQKKwllbHNlCisJCWVjaG8gIk5vIG5ldyByZXZpc2lvbnMgd2VyZSBhZGRlZCBieSB0aGlzIHVwZGF0ZS4iCisJZmkKIAogCSMgVGhlIGRpZmZzdGF0IGlzIHNob3duIGZyb20gdGhlIG9sZCByZXZpc2lvbiB0byB0aGUgbmV3IHJldmlzaW9uLiAgVGhpcwogCSMgaXMgdG8gc2hvdyB0aGUgdHJ1dGggb2Ygd2hhdCBoYXBwZW5lZCBpbiB0aGlzIGNoYW5nZS4gIFRoZXJlJ3Mgbm8gcG9pbnQKQEAgLTU1Niw3ICs1ODcsNyBAQAogCWV4aXQgMQogZmkKIAotcHJvamVjdGRlc2M9JChzZWQgLWUgJzFwJyAiJEdJVF9ESVIvZGVzY3JpcHRpb24iKQorcHJvamVjdGRlc2M9JChzZWQgLW5lICcxcCcgIiRHSVRfRElSL2Rlc2NyaXB0aW9uIikKICMgQ2hlY2sgaWYgdGhlIGRlc2NyaXB0aW9uIGlzIHVuY2hhbmdlZCBmcm9tIGl0J3MgZGVmYXVsdCwgYW5kIHNob3J0ZW4gaXQgdG8gYQogIyBtb3JlIG1hbmFnZWFibGUgbGVuZ3RoIGlmIGl0IGlzCiBpZiBleHByICIkcHJvamVjdGRlc2MiIDogIlVubmFtZWQgcmVwb3NpdG9yeS4qJCIgPi9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUxODM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKQEAgLTAsMCArMSwyODQgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OlNwZWM7CisKKyRFTlZ7UEFUSH0gICAgID0gJy9vcHQvZ2l0L2Jpbic7CitteSAkYWNsX2dpdCAgICA9ICcvdmNzL2FjbHMuZ2l0JzsKK215ICRhY2xfYnJhbmNoID0gJ3JlZnMvaGVhZHMvbWFzdGVyJzsKK215ICRkZWJ1ZyAgICAgID0gMDsKKworPWRvYworSW52b2tlZCBhczogdXBkYXRlIHJlZm5hbWUgb2xkLXNoYTEgbmV3LXNoYTEKKworVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IGdpdC1yZWNlaXZlLXBhY2sgb25jZSBmb3IgZWFjaCByZWYgdGhhdCB0aGUKK2NsaWVudCBpcyB0cnlpbmcgdG8gbW9kaWZ5LiAgSWYgd2UgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXhpdCB2YWx1ZQordGhlbiB0aGUgdXBkYXRlIGZvciB0aGF0IHBhcnRpY3VsYXIgcmVmIGlzIGRlbmllZCwgYnV0IHVwZGF0ZXMgZm9yCitvdGhlciByZWZzIGluIHRoZSBzYW1lIHJ1biBvZiByZWNlaXZlLXBhY2sgbWF5IHN0aWxsIGJlIGFsbG93ZWQuCisKK1dlIGFyZSBydW4gYWZ0ZXIgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIHVwbG9hZGVkLCBidXQgYmVmb3JlIHRoZQorcmVmIGlzIGFjdHVhbGx5IG1vZGlmaWVkLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdCBmYWN0IHdoZW4gd2UKK2xvb2sgZm9yICJuZXciIGNvbW1pdHMgYW5kIHRhZ3MgKHRoZSBuZXcgb2JqZWN0cyB3b24ndCBzaG93IHVwIGluCitgcmV2LWxpc3QgLS1hbGxgKS4KKworVGhpcyBzY3JpcHQgbG9hZHMgYW5kIHBhcnNlcyB0aGUgY29udGVudCBvZiB0aGUgY29uZmlnIGZpbGUKKyJ1c2Vycy8kdGhpc191c2VyLmFjbCIgZnJvbSB0aGUgJGFjbF9icmFuY2ggY29tbWl0IG9mICRhY2xfZ2l0IE9EQi4KK1RoZSBhY2wgZmlsZSBpcyBhIGdpdC1jb25maWcgc3R5bGUgZmlsZSwgYnV0IHVzZXMgYSBzbGlnaHRseSBtb3JlCityZXN0cmljdGVkIHN5bnRheCBhcyB0aGUgUGVybCBwYXJzZXIgY29udGFpbmVkIHdpdGhpbiB0aGlzIHNjcmlwdAoraXMgbm90IG5lYXJseSBhcyBwZXJtaXNzaXZlIGFzIGdpdC1jb25maWcuCisKK0V4YW1wbGU6CisKKyAgW3VzZXJdCisgICAgY29tbWl0dGVyID0gSm9obiBEb2UgPGpvaG4uZG9lQGV4YW1wbGUuY29tPgorICAgIGNvbW1pdHRlciA9IEpvaG4gUi4gRG9lIDxqb2huLmRvZUBleGFtcGxlLmNvbT4KKworICBbcmVwb3NpdG9yeSAiYWNscyJdCisgICAgYWxsb3cgPSBoZWFkcy9tYXN0ZXIKKyAgICBhbGxvdyA9IENEVVIgZm9yIGhlYWRzL2pkLworICAgIGFsbG93ID0gQyAgICBmb3IgXnRhZ3MvdlxcZCskCisKK0ZvciBhbGwgbmV3IGNvbW1pdCBvciB0YWcgb2JqZWN0cyB0aGUgY29tbWl0dGVyIChvciB0YWdnZXIpIGxpbmUKK3dpdGhpbiB0aGUgb2JqZWN0IG11c3QgZXhhY3RseSBtYXRjaCBvbmUgb2YgdGhlIHVzZXIuY29tbWl0dGVyCit2YWx1ZXMgbGlzdGVkIGluIHRoZSBhY2wgZmlsZSAoIkhFQUQ6dXNlcnMvJHRoaXNfdXNlci5hY2wiKS4KKworRm9yIGEgYnJhbmNoIHRvIGJlIG1vZGlmaWVkIGFuIGFsbG93IGxpbmUgd2l0aGluIHRoZSBtYXRjaGluZworcmVwb3NpdG9yeSBzZWN0aW9uIG11c3QgYmUgbWF0Y2hlZCBmb3IgYm90aCB0aGUgcmVmbmFtZSBhbmQgdGhlCitvcGNvZGUuCisKK1JlcG9zaXRvcnkgc2VjdGlvbnMgYXJlIG1hdGNoZWQgb24gdGhlIGJhc2VuYW1lIG9mIHRoZSByZXBvc2l0b3J5CisoYWZ0ZXIgcmVtb3ZpbmcgdGhlIC5naXQgc3VmZml4KS4KKworVGhlIG9wY29kZSBhYmJyZXZhdGlvbnMgYXJlOgorCisgIEM6IGNyZWF0ZSBuZXcgcmVmCisgIEQ6IGRlbGV0ZSBleGlzdGluZyByZWYKKyAgVTogZmFzdC1mb3J3YXJkIGV4aXN0aW5nIHJlZiAobm8gY29tbWl0IGxvc3MpCisgIFI6IHJld2luZC9yZWJhc2UgZXhpc3RpbmcgcmVmIChjb21taXQgbG9zcykKKworaWYgbm8gb3Bjb2RlcyBhcmUgbGlzdGVkIGJlZm9yZSB0aGUgImZvciIga2V5d29yZCB0aGVuICJVIiAoZm9yCitmYXN0LWZvcndhcmQgdXBkYXRlIG9ubHkpIGlzIGFzc3VtZWQgYXMgdGhpcyBpcyB0aGUgbW9zdCBjb21tb24KK3VzYWdlLgorCitSZWZuYW1lcyBhcmUgbWF0Y2hlZCBieSBhbHdheXMgYXNzdW1pbmcgYSBwcmVmaXggb2YgInJlZnMvIi4KK1RoaXMgaG9vayBmb3JiaWRzIHB1c2hpbmcgb3IgZGVsZXRpbmcgYW55dGhpbmcgbm90IHVuZGVyICJyZWZzLyIuCisKK1JlZm5hbWVzIHRoYXQgc3RhcnQgd2l0aCBeIGFyZSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCB0aGUgXgoraXMga2VwdCBhcyBwYXJ0IG9mIHRoZSByZWdleHAuICBcXCBpcyBuZWVkZWQgdG8gZ2V0IGp1c3Qgb25lIFwsIHNvCitcXGQgZXhwYW5kcyB0byBcZCBpbiBQZXJsLiAgVGhlIDNyZCBhbGxvdyBsaW5lIGFib3ZlIGlzIGFuIGV4YW1wbGUuCisKK1JlZm5hbWVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBeIGJ1dCB0aGF0IGVuZCB3aXRoIC8gYXJlIHByZWZpeAorbWF0Y2hlcyAoMm5kIGFsbG93IGxpbmUgYWJvdmUpOyBhbGwgb3RoZXIgcmVmbmFtZXMgYXJlIHN0cmljdAorZXF1YWxpdHkgbWF0Y2hlcyAoMXN0IGFsbG93IGxpbmUpLgorCitBbnl0aGluZyBwdXNoZWQgdG8gImhlYWRzLyIgKG9rLCByZWFsbHkgInJlZnMvaGVhZHMvIikgbXVzdCBiZQorYSBjb21taXQuICBUYWdzIGFyZSBub3QgcGVybWl0dGVkIGhlcmUuCisKK0FueXRoaW5nIHB1c2hlZCB0byAidGFncy8iIChlcnIsIHJlYWxseSAicmVmcy90YWdzLyIpIG11c3QgYmUgYW4KK2Fubm90YXRlZCB0YWcuICBDb21taXRzLCBibG9icywgdHJlZXMsIGV0Yy4gYXJlIG5vdCBwZXJtaXR0ZWQgaGVyZS4KK0Fubm90YXRlZCB0YWcgc2lnbmF0dXJlcyBhcmVuJ3QgY2hlY2tlZCwgbm9yIGFyZSB0aGV5IHJlcXVpcmVkLgorCitUaGUgc3BlY2lhbCBzdWJyZXBvc2l0b3J5IG9mICdpbmZvL25ldy1jb21taXQtY2hlY2snIGNhbgorYmUgY3JlYXRlZCBhbmQgdXNlZCB0byBhbGxvdyB1c2VycyB0byBwdXNoIG5ldyBjb21taXRzIGFuZAordGFncyBmcm9tIGFub3RoZXIgbG9jYWwgcmVwb3NpdG9yeSB0byB0aGlzIG9uZSwgZXZlbiBpZiB0aGV5CithcmVuJ3QgdGhlIGNvbW1pdHRlci90YWdnZXIgb2YgdGhvc2Ugb2JqZWN0cy4gIEluIGEgbnV0IHNoZWxsCit0aGUgaW5mby9uZXctY29tbWl0LWNoZWNrIGRpcmVjdG9yeSBpcyBhIEdpdCByZXBvc2l0b3J5IHdob3NlCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBmaWxlIGxpc3RzIHRoaXMgcmVwb3NpdG9yeSBhbmQgYWxsIG90aGVyCitwb3NzaWJsZSBzb3VyY2VzLCBhbmQgd2hvc2UgcmVmcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgc3ltbGlua3MKK3RvIHRoaXMgcmVwb3NpdG9yeSdzIHJlZnMgc3ViZGlyZWN0b3J5LCBhbmQgdG8gYWxsIG90aGVyIHBvc3NpYmxlCitzb3VyY2VzIHJlZnMgc3ViZGlyZWN0b3JpZXMuICBZZXMsIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90Cit1c2UgcGFja2VkLXJlZnMgaW4gdGhvc2UgcmVwb3NpdG9yaWVzIGFzIHRoZXkgd29uJ3QgYmUgcmVzb2x2ZWQKK2NvcnJlY3RseS4KKworPWN1dAorCitteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CitteSAkbmV3X2NvbW1pdF9jaGVjayA9ICIkZ2l0X2Rpci9pbmZvL25ldy1jb21taXQtY2hlY2siOworbXkgJHJlZiA9ICRBUkdWWzBdOworbXkgJG9sZCA9ICRBUkdWWzFdOworbXkgJG5ldyA9ICRBUkdWWzJdOworbXkgJG5ld190eXBlOworbXkgKCR0aGlzX3VzZXIpID0gZ2V0cHd1aWQgJDw7ICMgUkVBTF9VU0VSX0lECitteSAkcmVwb3NpdG9yeV9uYW1lOworbXkgJXVzZXJfY29tbWl0dGVyOworbXkgQGFsbG93X3J1bGVzOworCitzdWIgZGVueSAoJCkgeworCXByaW50IFNUREVSUiAiLURlbnktICAgICRfWzBdXG4iIGlmICRkZWJ1ZzsKKwlwcmludCBTVERFUlIgIlxuZGVuaWVkOiAkX1swXVxuXG4iOworCWV4aXQgMTsKK30KKworc3ViIGdyYW50ICgkKSB7CisJcHJpbnQgU1RERVJSICItR3JhbnQtICAgJF9bMF1cbiIgaWYgJGRlYnVnOworCWV4aXQgMDsKK30KKworc3ViIGluZm8gKCQpIHsKKwlwcmludCBTVERFUlIgIi1JbmZvLSAgICAkX1swXVxuIiBpZiAkZGVidWc7Cit9CisKK3N1YiBwYXJzZV9jb25maWcgKCQkKSB7CisJbXkgKCRkYXRhLCAkZm4pID0gQF87CisJaW5mbyAiTG9hZGluZyAkZm4iOworCW9wZW4oSSwnLXwnLCdnaXQnLCItLWdpdC1kaXI9JGFjbF9naXQiLCdjYXQtZmlsZScsJ2Jsb2InLCRmbik7CisJbXkgJHNlY3Rpb24gPSAnJzsKKwl3aGlsZSAoPEk+KSB7CisJCWNob21wOworCQlpZiAoL15ccyokLyB8fCAvXlxzKiMvKSB7CisJCX0gZWxzaWYgKC9eXFsoW2Etel0rKVxdJC9pKSB7CisJCQkkc2VjdGlvbiA9ICQxOworCQl9IGVsc2lmICgvXlxbKFthLXpdKylccysiKC4qKSJcXSQvaSkgeworCQkJJHNlY3Rpb24gPSAiJDEuJDIiOworCQl9IGVsc2lmICgvXlxzKihbYS16XVthLXowLTldKylccyo9XHMqKC4qPylccyokL2kpIHsKKwkJCXB1c2ggQHskZGF0YS0+eyIkc2VjdGlvbi4kMSJ9fSwgJDI7CisJCX0gZWxzZSB7CisJCQlkZW55ICJiYWQgY29uZmlnIGZpbGUgbGluZSAkLiBpbiAkZm4iOworCQl9CisJfQorCWNsb3NlIEk7Cit9CisKK3N1YiBhbGxfbmV3X2NvbW1pdHRlcnMgKCkgeworCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKKwkkRU5We0dJVF9ESVJ9ID0gJG5ld19jb21taXRfY2hlY2sgaWYgLWQgJG5ld19jb21taXRfY2hlY2s7CisKKwlpbmZvICJHZXR0aW5nIGNvbW1pdHRlcnMgb2YgbmV3IGNvbW1pdHMuIjsKKwlteSAldXNlZDsKKwlvcGVuKFQsJy18JywnZ2l0JywncmV2LWxpc3QnLCctLXByZXR0eT1yYXcnLCRuZXcsJy0tbm90JywnLS1hbGwnKTsKKwl3aGlsZSAoPFQ+KSB7CisJCW5leHQgdW5sZXNzIHMvXmNvbW1pdHRlciAvLzsKKwkJY2hvcDsKKwkJcy8+LiokLz4vOworCQlpbmZvICJGb3VuZCAkXy4iIHVubGVzcyAkdXNlZHskX30rKzsKKwl9CisJY2xvc2UgVDsKKwlpbmZvICJObyBuZXcgY29tbWl0cy4iIHVubGVzcyAldXNlZDsKKwlrZXlzICV1c2VkOworfQorCitzdWIgYWxsX25ld190YWdnZXJzICgpIHsKKwlteSAlZXhpc3RzOworCW9wZW4oVCwnLXwnLCdnaXQnLCdmb3ItZWFjaC1yZWYnLCctLWZvcm1hdD0lKG9iamVjdG5hbWUpJywncmVmcy90YWdzJyk7CisJd2hpbGUgKDxUPikgeworCQljaG9wOworCQkkZXhpc3RzeyRffSA9IDE7CisJfQorCWNsb3NlIFQ7CisKKwlpbmZvICJHZXR0aW5nIHRhZ2dlcnMgb2YgbmV3IHRhZ3MuIjsKKwlteSAldXNlZDsKKwlteSAkb2JqID0gJG5ldzsKKwlteSAkb2JqX3R5cGUgPSAkbmV3X3R5cGU7CisJd2hpbGUgKCRvYmpfdHlwZSBlcSAndGFnJykgeworCQlsYXN0IGlmICRleGlzdHN7JG9ian07CisJCSRvYmpfdHlwZSA9ICcnOworCQlvcGVuKFQsJy18JywnZ2l0JywnY2F0LWZpbGUnLCd0YWcnLCRvYmopOworCQl3aGlsZSAoPFQ+KSB7CisJCQljaG9wOworCQkJaWYgKC9eb2JqZWN0IChbYS16MC05XXs0MH0pJC8pIHsKKwkJCQkkb2JqID0gJDE7CisJCQl9IGVsc2lmICgvXnR5cGUgKC4rKSQvKSB7CisJCQkJJG9ial90eXBlID0gJDE7CisJCQl9IGVsc2lmIChzL150YWdnZXIgLy8pIHsKKwkJCQlzLz4uKiQvPi87CisJCQkJaW5mbyAiRm91bmQgJF8uIiB1bmxlc3MgJHVzZWR7JF99Kys7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQljbG9zZSBUOworCX0KKwlpbmZvICJObyBuZXcgdGFncy4iIHVubGVzcyAldXNlZDsKKwlrZXlzICV1c2VkOworfQorCitzdWIgY2hlY2tfY29tbWl0dGVycyAoQCkgeworCW15IEBiYWQ7CisJZm9yZWFjaCAoQF8pIHsgcHVzaCBAYmFkLCAkXyB1bmxlc3MgJHVzZXJfY29tbWl0dGVyeyRffTsgfQorCWlmIChAYmFkKSB7CisJCXByaW50IFNUREVSUiAiXG4iOworCQlwcmludCBTVERFUlIgIllvdSBhcmUgbm90ICRfLlxuIiBmb3JlYWNoIChzb3J0IEBiYWQpOworCQlkZW55ICJZb3UgY2Fubm90IHB1c2ggY2hhbmdlcyBub3QgY29tbWl0dGVkIGJ5IHlvdS4iOworCX0KK30KKworc3ViIGdpdF92YWx1ZSAoQCkgeworCW9wZW4oVCwnLXwnLCdnaXQnLEBfKTsgbG9jYWwgJF8gPSA8VD47IGNob3A7IGNsb3NlIFQ7CisJJF87Cit9CisKK2RlbnkgIk5vIEdJVF9ESVIgaW5oZXJpdGVkIGZyb20gY2FsbGVyIiB1bmxlc3MgJGdpdF9kaXI7CitkZW55ICJOZWVkIGEgcmVmIG5hbWUiIHVubGVzcyAkcmVmOworZGVueSAiUmVmdXNpbmcgZnVubnkgcmVmICRyZWYiIHVubGVzcyAkcmVmID1+IHMsXnJlZnMvLCw7CitkZW55ICJCYWQgb2xkIHZhbHVlICRvbGQiIHVubGVzcyAkb2xkID1+IC9eW2EtejAtOV17NDB9JC87CitkZW55ICJCYWQgbmV3IHZhbHVlICRuZXciIHVubGVzcyAkbmV3ID1+IC9eW2EtejAtOV17NDB9JC87CitkZW55ICJDYW5ub3QgZGV0ZXJtaW5lIHdobyB5b3UgYXJlLiIgdW5sZXNzICR0aGlzX3VzZXI7CisKKyRyZXBvc2l0b3J5X25hbWUgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKKyRyZXBvc2l0b3J5X25hbWUgPX4gbSwvKFteL10rKSg/OlwuZ2l0fC9cLmdpdCkkLDsKKyRyZXBvc2l0b3J5X25hbWUgPSAkMTsKK2luZm8gIlVwZGF0aW5nIGluICckcmVwb3NpdG9yeV9uYW1lJy4iOworCitteSAkb3A7CitpZiAgICAoJG9sZCA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0MnOyB9CitlbHNpZiAoJG5ldyA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0QnOyB9CitlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgJG9wID0gJ1InOyB9CisKKyMgVGhpcyBpcyByZWFsbHkgYW4gdXBkYXRlIChmYXN0LWZvcndhcmQpIGlmIHRoZQorIyBtZXJnZSBiYXNlIG9mICRvbGQgYW5kICRuZXcgaXMgJG9sZC4KKyMKKyRvcCA9ICdVJyBpZiAoJG9wIGVxICdSJworCSYmICRyZWYgPX4gbSxeaGVhZHMvLAorCSYmICRvbGQgZXEgZ2l0X3ZhbHVlKCdtZXJnZS1iYXNlJywkb2xkLCRuZXcpKTsKKworIyBMb2FkIHRoZSB1c2VyJ3MgQUNMIGZpbGUuCit7CisJbXkgJWRhdGEgPSAoJ3VzZXIuY29tbWl0dGVyJyA9PiBbXSk7CisJcGFyc2VfY29uZmlnKFwlZGF0YSwgIiRhY2xfYnJhbmNoOnVzZXJzLyR0aGlzX3VzZXIuYWNsIik7CisJJXVzZXJfY29tbWl0dGVyID0gbWFwIHskXyA9PiAkX30gQHskZGF0YXsndXNlci5jb21taXR0ZXInfX07CisJbXkgJHJ1bGVzID0gJGRhdGF7InJlcG9zaXRvcnkuJHJlcG9zaXRvcnlfbmFtZS5hbGxvdyJ9IHx8IFtdOworCWZvcmVhY2ggKEAkcnVsZXMpIHsKKwkJaWYgKC9eKFtDRFJVIF0rKVxzK2ZvclxzKyhbXlxzXSspJC8pIHsKKwkJCW15ICRvcHMgPSAkMTsKKwkJCW15ICRyZWYgPSAkMjsKKwkJCSRvcHMgPX4gcy8gLy9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQGFsbG93X3J1bGVzLCBbJG9wcywgJHJlZl07CisJCX0gZWxzaWYgKC9eZm9yXHMrKFteXHNdKykkLykgeworCQkJIyBNZW50aW9uZWQsIGJ1dCBub3RoaW5nIGdyYW50ZWQ/CisJCX0gZWxzaWYgKC9eW15cc10rJC8pIHsKKwkJCXMvXFxcXC9cXC9nOworCQkJcHVzaCBAYWxsb3dfcnVsZXMsIFsnVScsICRfXTsKKwkJfQorCX0KK30KKworaWYgKCRvcCBuZSAnRCcpIHsKKwkkbmV3X3R5cGUgPSBnaXRfdmFsdWUoJ2NhdC1maWxlJywnLXQnLCRuZXcpOworCisJaWYgKCRyZWYgPX4gbSxeaGVhZHMvLCkgeworCQlkZW55ICIkcmVmIG11c3QgYmUgYSBjb21taXQuIiB1bmxlc3MgJG5ld190eXBlIGVxICdjb21taXQnOworCX0gZWxzaWYgKCRyZWYgPX4gbSxedGFncy8sKSB7CisJCWRlbnkgIiRyZWYgbXVzdCBiZSBhbiBhbm5vdGF0ZWQgdGFnLiIgdW5sZXNzICRuZXdfdHlwZSBlcSAndGFnJzsKKwl9CisKKwljaGVja19jb21taXR0ZXJzIChhbGxfbmV3X2NvbW1pdHRlcnMpOworCWNoZWNrX2NvbW1pdHRlcnMgKGFsbF9uZXdfdGFnZ2VycykgaWYgJG5ld190eXBlIGVxICd0YWcnOworfQorCitpbmZvICIkdGhpc191c2VyIHdhbnRzICRvcCBmb3IgJHJlZiI7Citmb3JlYWNoIG15ICRhY2xfZW50cnkgKEBhbGxvd19ydWxlcykgeworCW15ICgkYWNsX29wcywgJGFjbF9uKSA9IEAkYWNsX2VudHJ5OworCW5leHQgdW5sZXNzICRhY2xfb3BzID1+IC9eW0NEUlVdKyQvOyAjIFVoaC4uLi4gc2hvdWxkbid0IGhhcHBlbi4KKwluZXh0IHVubGVzcyAkYWNsX247CisJbmV4dCB1bmxlc3MgJG9wID1+IC9eWyRhY2xfb3BzXSQvOworCisJZ3JhbnQgIkFsbG93ZWQgYnk6ICRhY2xfb3BzIGZvciAkYWNsX24iCisJaWYgKAorCSAgICgkYWNsX24gZXEgJHJlZikKKwl8fCAoJGFjbF9uID1+IG0sLyQsICYmIHN1YnN0cigkcmVmLDAsbGVuZ3RoICRhY2xfbikgZXEgJGFjbF9uKQorCXx8ICgkYWNsX24gPX4gbSxeXF4sICYmICRyZWYgPX4gbTokYWNsX246KQorCSk7Cit9CitjbG9zZSBBOworZGVueSAiWW91IGFyZSBub3QgcGVybWl0dGVkIHRvICRvcCAkcmVmIjsKZGlmZiAtLWdpdCBhL2NvbnZlcnQuYyBiL2NvbnZlcnQuYwppbmRleCA4OThiZmUzLi45ZWUzMWIwIDEwMDY0NAotLS0gYS9jb252ZXJ0LmMKKysrIGIvY29udmVydC5jCkBAIC0xLDQgKzEsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKIC8qCiAgKiBjb252ZXJ0LmMgLSBjb252ZXJ0IGEgZmlsZSB3aGVuIGNoZWNraW5nIGl0IG91dCBhbmQgY2hlY2tpbmcgaXQgaW4uCiAgKgpAQCAtOCw2ICsxMSwxMSBAQAogICogdHJhbnNsYXRpb24gd2hlbiB0aGUgImF1dG9fY3JsZiIgb3B0aW9uIGlzIHNldC4KICAqLwogCisjZGVmaW5lIENSTEZfR1VFU1MJKC0xKQorI2RlZmluZSBDUkxGX0JJTkFSWQkwCisjZGVmaW5lIENSTEZfVEVYVAkxCisjZGVmaW5lIENSTEZfSU5QVVQJMgorCiBzdHJ1Y3QgdGV4dF9zdGF0IHsKIAkvKiBDUiwgTEYgYW5kIENSTEYgY291bnRzICovCiAJdW5zaWduZWQgY3IsIGxmLCBjcmxmOwpAQCAtNzIsMTE1ICs4MCw1NzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbnZlcnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipidWZwLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3N0YXRpYyBjaGFyICpjcmxmX3RvX2dpdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgKnNpemVwLCBpbnQgYWN0aW9uKQogewotCWNoYXIgKmJ1ZmZlciwgKm5idWY7CisJY2hhciAqYnVmZmVyLCAqZHN0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbnNpemU7CiAJc3RydWN0IHRleHRfc3RhdCBzdGF0czsKIAotCS8qCi0JICogRklYTUUhIE90aGVyIHBsdWdnYWJsZSBjb252ZXJzaW9ucyBzaG91bGQgZ28gaGVyZSwKLQkgKiBiYXNlZCBvbiBmaWxlbmFtZSBwYXR0ZXJucy4gUmlnaHQgbm93IHdlIGp1c3QgZG8gdGhlCi0JICogc3R1cGlkIGF1dG8tQ1JMRiBvbmUuCi0JICovCi0JaWYgKCFhdXRvX2NybGYpCi0JCXJldHVybiAwOworCWlmICgoYWN0aW9uID09IENSTEZfQklOQVJZKSB8fCAoYWN0aW9uID09IENSTEZfR1VFU1MgJiYgIWF1dG9fY3JsZikpCisJCXJldHVybiBOVUxMOwogCiAJc2l6ZSA9ICpzaXplcDsKIAlpZiAoIXNpemUpCi0JCXJldHVybiAwOwotCWJ1ZmZlciA9ICpidWZwOworCQlyZXR1cm4gTlVMTDsKIAotCWdhdGhlcl9zdGF0cyhidWZmZXIsIHNpemUsICZzdGF0cyk7CisJZ2F0aGVyX3N0YXRzKHNyYywgc2l6ZSwgJnN0YXRzKTsKIAogCS8qIE5vIENSPyBOb3RoaW5nIHRvIGNvbnZlcnQsIHJlZ2FyZGxlc3MuICovCiAJaWYgKCFzdGF0cy5jcikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOworCisJaWYgKGFjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCS8qCisJCSAqIFdlJ3JlIGN1cnJlbnRseSBub3QgZ29pbmcgdG8gZXZlbiB0cnkgdG8gY29udmVydCBzdHVmZgorCQkgKiB0aGF0IGhhcyBiYXJlIENSIGNoYXJhY3RlcnMuIERvZXMgYW55Ym9keSBkbyB0aGF0IGNyYXp5CisJCSAqIHN0dWZmPworCQkgKi8KKwkJaWYgKHN0YXRzLmNyICE9IHN0YXRzLmNybGYpCisJCQlyZXR1cm4gTlVMTDsKKworCQkvKgorCQkgKiBBbmQgYWRkIHNvbWUgaGV1cmlzdGljcyBmb3IgYmluYXJ5IHZzIHRleHQsIG9mIGNvdXJzZS4uLgorCQkgKi8KKwkJaWYgKGlzX2JpbmFyeShzaXplLCAmc3RhdHMpKQorCQkJcmV0dXJuIE5VTEw7CisJfQogCiAJLyoKLQkgKiBXZSdyZSBjdXJyZW50bHkgbm90IGdvaW5nIHRvIGV2ZW4gdHJ5IHRvIGNvbnZlcnQgc3R1ZmYKLQkgKiB0aGF0IGhhcyBiYXJlIENSIGNoYXJhY3RlcnMuIERvZXMgYW55Ym9keSBkbyB0aGF0IGNyYXp5Ci0JICogc3R1ZmY/Ci0JICovCi0JaWYgKHN0YXRzLmNyICE9IHN0YXRzLmNybGYpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBBbmQgYWRkIHNvbWUgaGV1cmlzdGljcyBmb3IgYmluYXJ5IHZzIHRleHQsIG9mIGNvdXJzZS4uLgotCSAqLwotCWlmIChpc19iaW5hcnkoc2l6ZSwgJnN0YXRzKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIE9rLCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGZpbGwgaXQgaW4sIGFuZCByZXR1cm4gdHJ1ZQotCSAqIHRvIGxldCB0aGUgY2FsbGVyIGtub3cgdGhhdCB3ZSBzd2l0Y2hlZCBidWZmZXJzIG9uIGl0LgorCSAqIE9rLCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGZpbGwgaXQgaW4sIGFuZCByZXR1cm4gaXQKKwkgKiB0byBsZXQgdGhlIGNhbGxlciBrbm93IHRoYXQgd2Ugc3dpdGNoZWQgYnVmZmVycy4KIAkgKi8KIAluc2l6ZSA9IHNpemUgLSBzdGF0cy5jcmxmOwotCW5idWYgPSB4bWFsbG9jKG5zaXplKTsKLQkqYnVmcCA9IG5idWY7CisJYnVmZmVyID0geG1hbGxvYyhuc2l6ZSk7CiAJKnNpemVwID0gbnNpemU7Ci0JZG8gewotCQl1bnNpZ25lZCBjaGFyIGMgPSAqYnVmZmVyKys7Ci0JCWlmIChjICE9ICdccicpCi0JCQkqbmJ1ZisrID0gYzsKLQl9IHdoaWxlICgtLXNpemUpOwogCi0JcmV0dXJuIDE7CisJZHN0ID0gYnVmZmVyOworCWlmIChhY3Rpb24gPT0gQ1JMRl9HVUVTUykgeworCQkvKgorCQkgKiBJZiB3ZSBndWVzc2VkLCB3ZSBhbHJlYWR5IGtub3cgd2UgcmVqZWN0ZWQgYSBmaWxlIHdpdGgKKwkJICogbG9uZSBDUiwgYW5kIHdlIGNhbiBzdHJpcCBhIENSIHdpdGhvdXQgbG9va2luZyBhdCB3aGF0CisJCSAqIGZvbGxvdyBpdC4KKwkJICovCisJCWRvIHsKKwkJCXVuc2lnbmVkIGNoYXIgYyA9ICpzcmMrKzsKKwkJCWlmIChjICE9ICdccicpCisJCQkJKmRzdCsrID0gYzsKKwkJfSB3aGlsZSAoLS1zaXplKTsKKwl9IGVsc2UgeworCQlkbyB7CisJCQl1bnNpZ25lZCBjaGFyIGMgPSAqc3JjKys7CisJCQlpZiAoISAoYyA9PSAnXHInICYmICgxIDwgc2l6ZSAmJiAqc3JjID09ICdcbicpKSkKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLXNpemUpOworCX0KKworCXJldHVybiBidWZmZXI7CiB9CiAKLWludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICoqYnVmcCwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCitzdGF0aWMgY2hhciAqY3JsZl90b193b3JrdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgKnNpemVwLCBpbnQgYWN0aW9uKQogewotCWNoYXIgKmJ1ZmZlciwgKm5idWY7CisJY2hhciAqYnVmZmVyLCAqZHN0OwogCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbnNpemU7CiAJc3RydWN0IHRleHRfc3RhdCBzdGF0czsKIAl1bnNpZ25lZCBjaGFyIGxhc3Q7CiAKLQkvKgotCSAqIEZJWE1FISBPdGhlciBwbHVnZ2FibGUgY29udmVyc2lvbnMgc2hvdWxkIGdvIGhlcmUsCi0JICogYmFzZWQgb24gZmlsZW5hbWUgcGF0dGVybnMuIFJpZ2h0IG5vdyB3ZSBqdXN0IGRvIHRoZQotCSAqIHN0dXBpZCBhdXRvLUNSTEYgb25lLgotCSAqLwotCWlmIChhdXRvX2NybGYgPD0gMCkKLQkJcmV0dXJuIDA7CisJaWYgKChhY3Rpb24gPT0gQ1JMRl9CSU5BUlkpIHx8IChhY3Rpb24gPT0gQ1JMRl9JTlBVVCkgfHwKKwkgICAgKGFjdGlvbiA9PSBDUkxGX0dVRVNTICYmIGF1dG9fY3JsZiA8PSAwKSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlzaXplID0gKnNpemVwOwogCWlmICghc2l6ZSkKLQkJcmV0dXJuIDA7Ci0JYnVmZmVyID0gKmJ1ZnA7CisJCXJldHVybiBOVUxMOwogCi0JZ2F0aGVyX3N0YXRzKGJ1ZmZlciwgc2l6ZSwgJnN0YXRzKTsKKwlnYXRoZXJfc3RhdHMoc3JjLCBzaXplLCAmc3RhdHMpOwogCiAJLyogTm8gTEY/IE5vdGhpbmcgdG8gY29udmVydCwgcmVnYXJkbGVzcy4gKi8KIAlpZiAoIXN0YXRzLmxmKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiBXYXMgaXQgYWxyZWFkeSBpbiBDUkxGIGZvcm1hdD8gKi8KIAlpZiAoc3RhdHMubGYgPT0gc3RhdHMuY3JsZikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCi0JLyogSWYgd2UgaGF2ZSBhbnkgYmFyZSBDUiBjaGFyYWN0ZXJzLCB3ZSdyZSBub3QgZ29pbmcgdG8gdG91Y2ggaXQgKi8KLQlpZiAoc3RhdHMuY3IgIT0gc3RhdHMuY3JsZikKLQkJcmV0dXJuIDA7CisJaWYgKGFjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCS8qIElmIHdlIGhhdmUgYW55IGJhcmUgQ1IgY2hhcmFjdGVycywgd2UncmUgbm90IGdvaW5nIHRvIHRvdWNoIGl0ICovCisJCWlmIChzdGF0cy5jciAhPSBzdGF0cy5jcmxmKQorCQkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoaXNfYmluYXJ5KHNpemUsICZzdGF0cykpCi0JCXJldHVybiAwOworCQlpZiAoaXNfYmluYXJ5KHNpemUsICZzdGF0cykpCisJCQlyZXR1cm4gTlVMTDsKKwl9CiAKIAkvKgotCSAqIE9rLCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGZpbGwgaXQgaW4sIGFuZCByZXR1cm4gdHJ1ZQotCSAqIHRvIGxldCB0aGUgY2FsbGVyIGtub3cgdGhhdCB3ZSBzd2l0Y2hlZCBidWZmZXJzIG9uIGl0LgorCSAqIE9rLCBhbGxvY2F0ZSBhIG5ldyBidWZmZXIsIGZpbGwgaXQgaW4sIGFuZCByZXR1cm4gaXQKKwkgKiB0byBsZXQgdGhlIGNhbGxlciBrbm93IHRoYXQgd2Ugc3dpdGNoZWQgYnVmZmVycy4KIAkgKi8KIAluc2l6ZSA9IHNpemUgKyBzdGF0cy5sZiAtIHN0YXRzLmNybGY7Ci0JbmJ1ZiA9IHhtYWxsb2MobnNpemUpOwotCSpidWZwID0gbmJ1ZjsKKwlidWZmZXIgPSB4bWFsbG9jKG5zaXplKTsKIAkqc2l6ZXAgPSBuc2l6ZTsKIAlsYXN0ID0gMDsKKworCWRzdCA9IGJ1ZmZlcjsKIAlkbyB7Ci0JCXVuc2lnbmVkIGNoYXIgYyA9ICpidWZmZXIrKzsKKwkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOwogCQlpZiAoYyA9PSAnXG4nICYmIGxhc3QgIT0gJ1xyJykKLQkJCSpuYnVmKysgPSAnXHInOwotCQkqbmJ1ZisrID0gYzsKKwkJCSpkc3QrKyA9ICdccic7CisJCSpkc3QrKyA9IGM7CiAJCWxhc3QgPSBjOwogCX0gd2hpbGUgKC0tc2l6ZSk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9idWZmZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLAorCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qCisJICogU3Bhd24gY21kIGFuZCBmZWVkIHRoZSBidWZmZXIgY29udGVudHMgdGhyb3VnaCBpdHMgc3RkaW4uCisJICovCisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGRfcHJvY2VzczsKKwlpbnQgcGlwZV9mZWVkWzJdOworCWludCB3cml0ZV9lcnIsIHN0YXR1czsKKworCW1lbXNldCgmY2hpbGRfcHJvY2VzcywgMCwgc2l6ZW9mKGNoaWxkX3Byb2Nlc3MpKTsKKworCWlmIChwaXBlKHBpcGVfZmVlZCkgPCAwKSB7CisJCWVycm9yKCJjYW5ub3QgY3JlYXRlIHBpcGUgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAlcyIsIGNtZCk7CisJCXJldHVybiAxOworCX0KKworCWNoaWxkX3Byb2Nlc3MucGlkID0gZm9yaygpOworCWlmIChjaGlsZF9wcm9jZXNzLnBpZCA8IDApIHsKKwkJZXJyb3IoImNhbm5vdCBmb3JrIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJXMiLCBjbWQpOworCQljbG9zZShwaXBlX2ZlZWRbMF0pOworCQljbG9zZShwaXBlX2ZlZWRbMV0pOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCFjaGlsZF9wcm9jZXNzLnBpZCkgeworCQlkdXAyKHBpcGVfZmVlZFswXSwgMCk7CisJCWNsb3NlKHBpcGVfZmVlZFswXSk7CisJCWNsb3NlKHBpcGVfZmVlZFsxXSk7CisJCWV4ZWNscCgic2giLCAic2giLCAiLWMiLCBjbWQsIE5VTEwpOworCQlyZXR1cm4gMTsKKwl9CisJY2xvc2UocGlwZV9mZWVkWzBdKTsKKworCXdyaXRlX2VyciA9ICh3cml0ZV9pbl9mdWxsKHBpcGVfZmVlZFsxXSwgc3JjLCBzaXplKSA8IDApOworCWlmIChjbG9zZShwaXBlX2ZlZWRbMV0pKQorCQl3cml0ZV9lcnIgPSAxOworCWlmICh3cml0ZV9lcnIpCisJCWVycm9yKCJjYW5ub3QgZmVlZCB0aGUgaW5wdXQgdG8gZXh0ZXJuYWwgZmlsdGVyICVzIiwgY21kKTsKKworCXN0YXR1cyA9IGZpbmlzaF9jb21tYW5kKCZjaGlsZF9wcm9jZXNzKTsKKwlpZiAoc3RhdHVzKQorCQllcnJvcigiZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCAlZCIsIGNtZCwgLXN0YXR1cyk7CisJcmV0dXJuICh3cml0ZV9lcnIgfHwgc3RhdHVzKTsKK30KKworc3RhdGljIGNoYXIgKmFwcGx5X2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkgIHVuc2lnbmVkIGxvbmcgKnNpemVwLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyoKKwkgKiBDcmVhdGUgYSBwaXBlbGluZSB0byBoYXZlIHRoZSBjb21tYW5kIGZpbHRlciB0aGUgYnVmZmVyJ3MKKwkgKiBjb250ZW50cy4KKwkgKgorCSAqIChjaGlsZCAtLT4gY21kKSAtLT4gdXMKKwkgKi8KKwljb25zdCBpbnQgU0xPUCA9IDQwOTY7CisJaW50IHBpcGVfZmVlZFsyXTsKKwlpbnQgc3RhdHVzOworCWNoYXIgKmRzdDsKKwl1bnNpZ25lZCBsb25nIGRzdHNpemUsIGRzdGFsbG9jOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkX3Byb2Nlc3M7CisKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1zZXQoJmNoaWxkX3Byb2Nlc3MsIDAsIHNpemVvZihjaGlsZF9wcm9jZXNzKSk7CisKKwlpZiAocGlwZShwaXBlX2ZlZWQpIDwgMCkgeworCQllcnJvcigiY2Fubm90IGNyZWF0ZSBwaXBlIHRvIHJ1biBleHRlcm5hbCBmaWx0ZXIgJXMiLCBjbWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmZmx1c2goTlVMTCk7CisJY2hpbGRfcHJvY2Vzcy5waWQgPSBmb3JrKCk7CisJaWYgKGNoaWxkX3Byb2Nlc3MucGlkIDwgMCkgeworCQllcnJvcigiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAlcyIsIGNtZCk7CisJCWNsb3NlKHBpcGVfZmVlZFswXSk7CisJCWNsb3NlKHBpcGVfZmVlZFsxXSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoIWNoaWxkX3Byb2Nlc3MucGlkKSB7CisJCWR1cDIocGlwZV9mZWVkWzFdLCAxKTsKKwkJY2xvc2UocGlwZV9mZWVkWzBdKTsKKwkJY2xvc2UocGlwZV9mZWVkWzFdKTsKKwkJZXhpdChmaWx0ZXJfYnVmZmVyKHBhdGgsIHNyYywgKnNpemVwLCBjbWQpKTsKKwl9CisJY2xvc2UocGlwZV9mZWVkWzFdKTsKKworCWRzdGFsbG9jID0gKnNpemVwOworCWRzdCA9IHhtYWxsb2MoZHN0YWxsb2MpOworCWRzdHNpemUgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBudW1yZWFkID0geHJlYWQocGlwZV9mZWVkWzBdLCBkc3QgKyBkc3RzaXplLAorCQkJCQlkc3RhbGxvYyAtIGRzdHNpemUpOworCisJCWlmIChudW1yZWFkIDw9IDApIHsKKwkJCWlmICghbnVtcmVhZCkKKwkJCQlicmVhazsKKwkJCWVycm9yKCJyZWFkIGZyb20gZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCIsIGNtZCk7CisJCQlmcmVlKGRzdCk7CisJCQlkc3QgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJZHN0c2l6ZSArPSBudW1yZWFkOworCQlpZiAoZHN0YWxsb2MgPD0gZHN0c2l6ZSArIFNMT1ApIHsKKwkJCWRzdGFsbG9jID0gZHN0c2l6ZSArIFNMT1A7CisJCQlkc3QgPSB4cmVhbGxvYyhkc3QsIGRzdGFsbG9jKTsKKwkJfQorCX0KKwlpZiAoY2xvc2UocGlwZV9mZWVkWzBdKSkgeworCQllcnJvcigicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQiLCBjbWQpOworCQlmcmVlKGRzdCk7CisJCWRzdCA9IE5VTEw7CisJfQorCisJc3RhdHVzID0gZmluaXNoX2NvbW1hbmQoJmNoaWxkX3Byb2Nlc3MpOworCWlmIChzdGF0dXMpIHsKKwkJZXJyb3IoImV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQgJWQiLCBjbWQsIC1zdGF0dXMpOworCQlmcmVlKGRzdCk7CisJCWRzdCA9IE5VTEw7CisJfQorCisJaWYgKGRzdCkKKwkJKnNpemVwID0gZHN0c2l6ZTsKKwlyZXR1cm4gZHN0OworfQorCitzdGF0aWMgc3RydWN0IGNvbnZlcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqbmV4dDsKKwljaGFyICpzbXVkZ2U7CisJY2hhciAqY2xlYW47Cit9ICp1c2VyX2NvbnZlcnQsICoqdXNlcl9jb252ZXJ0X3RhaWw7CisKK3N0YXRpYyBpbnQgcmVhZF9jb252ZXJ0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKmVwLCAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKworCS8qCisJICogRXh0ZXJuYWwgY29udmVyc2lvbiBkcml2ZXJzIGFyZSBjb25maWd1cmVkIHVzaW5nCisJICogImZpbHRlci48bmFtZT4udmFyaWFibGUiLgorCSAqLworCWlmIChwcmVmaXhjbXAodmFyLCAiZmlsdGVyLiIpIHx8IChlcCA9IHN0cnJjaHIodmFyLCAnLicpKSA9PSB2YXIgKyA2KQorCQlyZXR1cm4gMDsKKwluYW1lID0gdmFyICsgNzsKKwluYW1lbGVuID0gZXAgLSBuYW1lOworCWZvciAoZHJ2ID0gdXNlcl9jb252ZXJ0OyBkcnY7IGRydiA9IGRydi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGRydi0+bmFtZSwgbmFtZSwgbmFtZWxlbikgJiYgIWRydi0+bmFtZVtuYW1lbGVuXSkKKwkJCWJyZWFrOworCWlmICghZHJ2KSB7CisJCWNoYXIgKm5hbWVidWY7CisJCWRydiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb252ZXJ0X2RyaXZlcikpOworCQluYW1lYnVmID0geG1hbGxvYyhuYW1lbGVuICsgMSk7CisJCW1lbWNweShuYW1lYnVmLCBuYW1lLCBuYW1lbGVuKTsKKwkJbmFtZWJ1ZltuYW1lbGVuXSA9IDA7CisJCWRydi0+bmFtZSA9IG5hbWVidWY7CisJCWRydi0+bmV4dCA9IE5VTEw7CisJCSp1c2VyX2NvbnZlcnRfdGFpbCA9IGRydjsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmKGRydi0+bmV4dCk7CisJfQorCisJZXArKzsKKworCS8qCisJICogZmlsdGVyLjxuYW1lPi5zbXVkZ2UgYW5kIGZpbHRlci48bmFtZT4uY2xlYW4gc3BlY2lmaWVzCisJICogdGhlIGNvbW1hbmQgbGluZToKKwkgKgorCSAqCWNvbW1hbmQtbGluZQorCSAqCisJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIG5vdCBiZSBpbnRlcnBvbGF0ZWQgaW4gYW55IHdheS4KKwkgKi8KKworCWlmICghc3RyY21wKCJzbXVkZ2UiLCBlcCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJZHJ2LT5zbXVkZ2UgPSBzdHJkdXAodmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiY2xlYW4iLCBlcCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJZHJ2LT5jbGVhbiA9IHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY29udmVydF9jaGVjayhzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfY3JsZjsKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX2lkZW50OworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfZmlsdGVyOworCisJaWYgKCFhdHRyX2NybGYpIHsKKwkJYXR0cl9jcmxmID0gZ2l0X2F0dHIoImNybGYiLCA0KTsKKwkJYXR0cl9pZGVudCA9IGdpdF9hdHRyKCJpZGVudCIsIDUpOworCQlhdHRyX2ZpbHRlciA9IGdpdF9hdHRyKCJmaWx0ZXIiLCA2KTsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmdXNlcl9jb252ZXJ0OworCQlnaXRfY29uZmlnKHJlYWRfY29udmVydF9jb25maWcpOworCX0KKwljaGVja1swXS5hdHRyID0gYXR0cl9jcmxmOworCWNoZWNrWzFdLmF0dHIgPSBhdHRyX2lkZW50OworCWNoZWNrWzJdLmF0dHIgPSBhdHRyX2ZpbHRlcjsKK30KKworc3RhdGljIGludCBjb3VudF9pZGVudChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCS8qCisJICogIiRpZGVudDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAkIiA8PT4gIiRpZGVudCQiCisJICovCisJaW50IGNudCA9IDA7CisJY2hhciBjaDsKKworCXdoaWxlIChzaXplKSB7CisJCWNoID0gKmNwKys7CisJCXNpemUtLTsKKwkJaWYgKGNoICE9ICckJykKKwkJCWNvbnRpbnVlOworCQlpZiAoc2l6ZSA8IDYpCisJCQlicmVhazsKKwkJaWYgKG1lbWNtcCgiaWRlbnQiLCBjcCwgNSkpCisJCQljb250aW51ZTsKKwkJY2ggPSBjcFs1XTsKKwkJY3AgKz0gNjsKKwkJc2l6ZSAtPSA2OworCQlpZiAoY2ggPT0gJyQnKQorCQkJY250Kys7IC8qICRpZGVudCQgKi8KKwkJaWYgKGNoICE9ICc6JykKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqICIkaWRlbnQ6IC4uLiAiOyBzY2FuIHVwIHRvIHRoZSBjbG9zaW5nIGRvbGxhciBzaWduIGFuZCBkaXNjYXJkLgorCQkgKi8KKwkJd2hpbGUgKHNpemUpIHsKKwkJCWNoID0gKmNwKys7CisJCQlzaXplLS07CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJY250Kys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGNoYXIgKmlkZW50X3RvX2dpdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgKnNpemVwLCBpbnQgaWRlbnQpCit7CisJaW50IGNudDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqZHN0LCAqYnVmOworCisJaWYgKCFpZGVudCkKKwkJcmV0dXJuIE5VTEw7CisJc2l6ZSA9ICpzaXplcDsKKwljbnQgPSBjb3VudF9pZGVudChzcmMsIHNpemUpOworCWlmICghY250KQorCQlyZXR1cm4gTlVMTDsKKwlidWYgPSB4bWFsbG9jKHNpemUpOworCisJZm9yIChkc3QgPSBidWY7IHNpemU7IHNpemUtLSkgeworCQljaGFyIGNoID0gKnNyYysrOworCQkqZHN0KysgPSBjaDsKKwkJaWYgKChjaCA9PSAnJCcpICYmICg2IDw9IHNpemUpICYmCisJCSAgICAhbWVtY21wKCJpZGVudDoiLCBzcmMsIDYpKSB7CisJCQl1bnNpZ25lZCBsb25nIHJlbSA9IHNpemUgLSA2OworCQkJY29uc3QgY2hhciAqY3AgPSBzcmMgKyA2OworCQkJZG8geworCQkJCWNoID0gKmNwKys7CisJCQkJaWYgKGNoID09ICckJykKKwkJCQkJYnJlYWs7CisJCQkJcmVtLS07CisJCQl9IHdoaWxlIChyZW0pOworCQkJaWYgKCFyZW0pCisJCQkJY29udGludWU7CisJCQltZW1jcHkoZHN0LCAiaWRlbnQkIiwgNik7CisJCQlkc3QgKz0gNjsKKwkJCXNpemUgLT0gKGNwIC0gc3JjKTsKKwkJCXNyYyA9IGNwOworCQl9CisJfQorCisJKnNpemVwID0gZHN0IC0gYnVmOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBjaGFyICppZGVudF90b193b3JrdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgKnNpemVwLCBpbnQgaWRlbnQpCit7CisJaW50IGNudDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqZHN0LCAqYnVmOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAoIWlkZW50KQorCQlyZXR1cm4gTlVMTDsKKworCXNpemUgPSAqc2l6ZXA7CisJY250ID0gY291bnRfaWRlbnQoc3JjLCBzaXplKTsKKwlpZiAoIWNudCkKKwkJcmV0dXJuIE5VTEw7CisKKwloYXNoX3NoYTFfZmlsZShzcmMsIHNpemUsICJibG9iIiwgc2hhMSk7CisJYnVmID0geG1hbGxvYyhzaXplICsgY250ICogNDMpOworCisJZm9yIChkc3QgPSBidWY7IHNpemU7IHNpemUtLSkgeworCQljb25zdCBjaGFyICpjcDsKKwkJY2hhciBjaCA9ICpzcmMrKzsKKwkJKmRzdCsrID0gY2g7CisJCWlmICgoY2ggIT0gJyQnKSB8fCAoc2l6ZSA8IDYpIHx8IG1lbWNtcCgiaWRlbnQiLCBzcmMsIDUpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNyY1s1XSA9PSAnOicpIHsKKwkJCS8qIGRpc2NhcmQgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGNsb3NpbmcgJCAqLworCQkJdW5zaWduZWQgbG9uZyByZW0gPSBzaXplIC0gNjsKKwkJCWNwID0gc3JjICsgNjsKKwkJCWRvIHsKKwkJCQljaCA9ICpjcCsrOworCQkJCWlmIChjaCA9PSAnJCcpCisJCQkJCWJyZWFrOworCQkJCXJlbS0tOworCQkJfSB3aGlsZSAocmVtKTsKKwkJCWlmICghcmVtKQorCQkJCWNvbnRpbnVlOworCQkJc2l6ZSAtPSAoY3AgLSBzcmMpOworCQl9IGVsc2UgaWYgKHNyY1s1XSA9PSAnJCcpCisJCQljcCA9IHNyYyArIDU7CisJCWVsc2UKKwkJCWNvbnRpbnVlOworCisJCW1lbWNweShkc3QsICJpZGVudDogIiwgNyk7CisJCWRzdCArPSA3OworCQltZW1jcHkoZHN0LCBzaGExX3RvX2hleChzaGExKSwgNDApOworCQlkc3QgKz0gNDA7CisJCSpkc3QrKyA9ICcgJzsKKwkJc2l6ZSAtPSAoY3AgLSBzcmMpOworCQlzcmMgPSBjcDsKKwkJKmRzdCsrID0gKnNyYysrOworCQlzaXplLS07CisJfQorCisJKnNpemVwID0gZHN0IC0gYnVmOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhdGhfY2hlY2tfY3JsZihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX1RFWFQ7CisJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCXJldHVybiBDUkxGX0JJTkFSWTsKKwllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKQorCQlyZXR1cm4gQ1JMRl9JTlBVVDsKKwlyZXR1cm4gQ1JMRl9HVUVTUzsKK30KKworc3RhdGljIHN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZ2l0X3BhdGhfY2hlY2tfY29udmVydChjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgICAgIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpkcnY7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSB8fCBBVFRSX0ZBTFNFKHZhbHVlKSB8fCBBVFRSX1VOU0VUKHZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChkcnYgPSB1c2VyX2NvbnZlcnQ7IGRydjsgZHJ2ID0gZHJ2LT5uZXh0KQorCQlpZiAoIXN0cmNtcCh2YWx1ZSwgZHJ2LT5uYW1lKSkKKwkJCXJldHVybiBkcnY7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3BhdGhfY2hlY2tfaWRlbnQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKworCXJldHVybiAhIUFUVFJfVFJVRSh2YWx1ZSk7Cit9CisKK2NoYXIgKmNvbnZlcnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzNdOworCWludCBjcmxmID0gQ1JMRl9HVUVTUzsKKwlpbnQgaWRlbnQgPSAwOworCWNoYXIgKmZpbHRlciA9IE5VTEw7CisJY2hhciAqYnVmLCAqYnVmMjsKKworCXNldHVwX2NvbnZlcnRfY2hlY2soY2hlY2spOworCWlmICghZ2l0X2NoZWNrYXR0cihwYXRoLCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKSB7CisJCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZHJ2OworCQljcmxmID0gZ2l0X3BhdGhfY2hlY2tfY3JsZihwYXRoLCBjaGVjayArIDApOworCQlpZGVudCA9IGdpdF9wYXRoX2NoZWNrX2lkZW50KHBhdGgsIGNoZWNrICsgMSk7CisJCWRydiA9IGdpdF9wYXRoX2NoZWNrX2NvbnZlcnQocGF0aCwgY2hlY2sgKyAyKTsKKwkJaWYgKGRydiAmJiBkcnYtPmNsZWFuKQorCQkJZmlsdGVyID0gZHJ2LT5jbGVhbjsKKwl9CisKKwlidWYgPSBhcHBseV9maWx0ZXIocGF0aCwgc3JjLCBzaXplcCwgZmlsdGVyKTsKKworCWJ1ZjIgPSBjcmxmX3RvX2dpdChwYXRoLCBidWYgPyBidWYgOiBzcmMsIHNpemVwLCBjcmxmKTsKKwlpZiAoYnVmMikgeworCQlmcmVlKGJ1Zik7CisJCWJ1ZiA9IGJ1ZjI7CisJfQorCisJYnVmMiA9IGlkZW50X3RvX2dpdChwYXRoLCBidWYgPyBidWYgOiBzcmMsIHNpemVwLCBpZGVudCk7CisJaWYgKGJ1ZjIpIHsKKwkJZnJlZShidWYpOworCQlidWYgPSBidWYyOworCX0KKworCXJldHVybiBidWY7Cit9CisKK2NoYXIgKmNvbnZlcnRfdG9fd29ya2luZ190cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzNdOworCWludCBjcmxmID0gQ1JMRl9HVUVTUzsKKwlpbnQgaWRlbnQgPSAwOworCWNoYXIgKmZpbHRlciA9IE5VTEw7CisJY2hhciAqYnVmLCAqYnVmMjsKKworCXNldHVwX2NvbnZlcnRfY2hlY2soY2hlY2spOworCWlmICghZ2l0X2NoZWNrYXR0cihwYXRoLCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKSB7CisJCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZHJ2OworCQljcmxmID0gZ2l0X3BhdGhfY2hlY2tfY3JsZihwYXRoLCBjaGVjayArIDApOworCQlpZGVudCA9IGdpdF9wYXRoX2NoZWNrX2lkZW50KHBhdGgsIGNoZWNrICsgMSk7CisJCWRydiA9IGdpdF9wYXRoX2NoZWNrX2NvbnZlcnQocGF0aCwgY2hlY2sgKyAyKTsKKwkJaWYgKGRydiAmJiBkcnYtPnNtdWRnZSkKKwkJCWZpbHRlciA9IGRydi0+c211ZGdlOworCX0KKworCWJ1ZiA9IGlkZW50X3RvX3dvcmt0cmVlKHBhdGgsIHNyYywgc2l6ZXAsIGlkZW50KTsKKworCWJ1ZjIgPSBjcmxmX3RvX3dvcmt0cmVlKHBhdGgsIGJ1ZiA/IGJ1ZiA6IHNyYywgc2l6ZXAsIGNybGYpOworCWlmIChidWYyKSB7CisJCWZyZWUoYnVmKTsKKwkJYnVmID0gYnVmMjsKKwl9CisKKwlidWYyID0gYXBwbHlfZmlsdGVyKHBhdGgsIGJ1ZiA/IGJ1ZiA6IHNyYywgc2l6ZXAsIGZpbHRlcik7CisJaWYgKGJ1ZjIpIHsKKwkJZnJlZShidWYpOworCQlidWYgPSBidWYyOworCX0KKworCXJldHVybiBidWY7CiB9CmRpZmYgLS1naXQgYS9jc3VtLWZpbGUuYyBiL2NzdW0tZmlsZS5jCmluZGV4IGI3MTc0YzYuLjdjODA2YWQgMTAwNjQ0Ci0tLSBhL2NzdW0tZmlsZS5jCisrKyBiL2NzdW0tZmlsZS5jCkBAIC00OSw2ICs0OSw4IEBACiAKIGludCBzaGExd3JpdGUoc3RydWN0IHNoYTFmaWxlICpmLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKKwlpZiAoZi0+ZG9fY3JjKQorCQlmLT5jcmMzMiA9IGNyYzMyKGYtPmNyYzMyLCBidWYsIGNvdW50KTsKIAl3aGlsZSAoY291bnQpIHsKIAkJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OwogCQl1bnNpZ25lZCBsZWZ0ID0gc2l6ZW9mKGYtPmJ1ZmZlcikgLSBvZmZzZXQ7CkBAIC05MSw2ICs5Myw3IEBACiAJZi0+ZmQgPSBmZDsKIAlmLT5lcnJvciA9IDA7CiAJZi0+b2Zmc2V0ID0gMDsKKwlmLT5kb19jcmMgPSAwOwogCVNIQTFfSW5pdCgmZi0+Y3R4KTsKIAlyZXR1cm4gZjsKIH0KQEAgLTExMSw2ICsxMTQsNyBAQAogCWYtPmZkID0gZmQ7CiAJZi0+ZXJyb3IgPSAwOwogCWYtPm9mZnNldCA9IDA7CisJZi0+ZG9fY3JjID0gMDsKIAlTSEExX0luaXQoJmYtPmN0eCk7CiAJcmV0dXJuIGY7CiB9CkBAIC0xNDMsNCArMTQ3LDE0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKK3ZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IHNoYTFmaWxlICpmKQoreworCWYtPmNyYzMyID0gY3JjMzIoMCwgWl9OVUxMLCAwKTsKKwlmLT5kb19jcmMgPSAxOworfQogCit1aW50MzJfdCBjcmMzMl9lbmQoc3RydWN0IHNoYTFmaWxlICpmKQoreworCWYtPmRvX2NyYyA9IDA7CisJcmV0dXJuIGYtPmNyYzMyOworfQpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmggYi9jc3VtLWZpbGUuaAppbmRleCAzYWQxYTk5Li43ZTEzMzkxIDEwMDY0NAotLS0gYS9jc3VtLWZpbGUuaAorKysgYi9jc3VtLWZpbGUuaApAQCAtNyw2ICs3LDggQEAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBuYW1lbGVuOwogCVNIQV9DVFggY3R4OwogCWNoYXIgbmFtZVtQQVRIX01BWF07CisJaW50IGRvX2NyYzsKKwl1aW50MzJfdCBjcmMzMjsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls4MTkyXTsKIH07CiAKQEAgLTE1LDUgKzE3LDcgQEAKIGV4dGVybiBpbnQgc2hhMWNsb3NlKHN0cnVjdCBzaGExZmlsZSAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IHNoYTF3cml0ZShzdHJ1Y3Qgc2hhMWZpbGUgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBzaGExd3JpdGVfY29tcHJlc3NlZChzdHJ1Y3Qgc2hhMWZpbGUgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IHNoYTFmaWxlICopOworZXh0ZXJuIHVpbnQzMl90IGNyYzMyX2VuZChzdHJ1Y3Qgc2hhMWZpbGUgKik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IDBjZWNjYmUuLmE5YjU5YTIgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTU1LDYgKzU1LDMyIEBACiAJcmV0dXJuIGdtdGltZSgmdCk7CiB9CiAKKy8qCisgKiBXaGF0IHZhbHVlIG9mICJ0eiIgd2FzIGluIGVmZmVjdCBiYWNrIHRoZW4gYXQgInRpbWUiIGluIHRoZQorICogbG9jYWwgdGltZXpvbmU/CisgKi8KK3N0YXRpYyBpbnQgbG9jYWxfdHpvZmZzZXQodW5zaWduZWQgbG9uZyB0aW1lKQoreworCXRpbWVfdCB0LCB0X2xvY2FsOworCXN0cnVjdCB0bSB0bTsKKwlpbnQgb2Zmc2V0LCBlYXN0d2VzdDsKKworCXQgPSB0aW1lOworCWxvY2FsdGltZV9yKCZ0LCAmdG0pOworCXRfbG9jYWwgPSBteV9ta3RpbWUoJnRtKTsKKworCWlmICh0X2xvY2FsIDwgdCkgeworCQllYXN0d2VzdCA9IC0xOworCQlvZmZzZXQgPSB0IC0gdF9sb2NhbDsKKwl9IGVsc2UgeworCQllYXN0d2VzdCA9IDE7CisJCW9mZnNldCA9IHRfbG9jYWwgLSB0OworCX0KKwlvZmZzZXQgLz0gNjA7IC8qIGluIG1pbnV0ZXMgKi8KKwlvZmZzZXQgPSAob2Zmc2V0ICUgNjApICsgKChvZmZzZXQgLyA2MCkgKiAxMDApOworCXJldHVybiBvZmZzZXQgKiBlYXN0d2VzdDsKK30KKwogY29uc3QgY2hhciAqc2hvd19kYXRlKHVuc2lnbmVkIGxvbmcgdGltZSwgaW50IHR6LCBlbnVtIGRhdGVfbW9kZSBtb2RlKQogewogCXN0cnVjdCB0bSAqdG07CkBAIC0xMDIsNiArMTI4LDkgQEAKIAkJLyogRWxzZSBmYWxsIGJhY2sgb24gYWJzb2x1dGUgZm9ybWF0Li4gKi8KIAl9CiAKKwlpZiAobW9kZSA9PSBEQVRFX0xPQ0FMKQorCQl0eiA9IGxvY2FsX3R6b2Zmc2V0KHRpbWUpOworCiAJdG0gPSB0aW1lX3RvX3RtKHRpbWUsIHR6KTsKIAlpZiAoIXRtKQogCQlyZXR1cm4gTlVMTDsKQEAgLTEwOSwxMiArMTM4LDE0IEBACiAJCXNwcmludGYodGltZWJ1ZiwgIiUwNGQtJTAyZC0lMDJkIiwgdG0tPnRtX3llYXIgKyAxOTAwLAogCQkJCXRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSk7CiAJZWxzZQotCQlzcHJpbnRmKHRpbWVidWYsICIlLjNzICUuM3MgJWQgJTAyZDolMDJkOiUwMmQgJWQgJSswNWQiLAorCQlzcHJpbnRmKHRpbWVidWYsICIlLjNzICUuM3MgJWQgJTAyZDolMDJkOiUwMmQgJWQlYyUrMDVkIiwKIAkJCQl3ZWVrZGF5X25hbWVzW3RtLT50bV93ZGF5XSwKIAkJCQltb250aF9uYW1lc1t0bS0+dG1fbW9uXSwKIAkJCQl0bS0+dG1fbWRheSwKIAkJCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywKLQkJCQl0bS0+dG1feWVhciArIDE5MDAsIHR6KTsKKwkJCQl0bS0+dG1feWVhciArIDE5MDAsCisJCQkJKG1vZGUgPT0gREFURV9MT0NBTCkgPyAwIDogJyAnLAorCQkJCXR6KTsKIAlyZXR1cm4gdGltZWJ1ZjsKIH0KIApkaWZmIC0tZ2l0IGEvZGVjb3JhdGUuYyBiL2RlY29yYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmNmIwMAotLS0gL2Rldi9udWxsCisrKyBiL2RlY29yYXRlLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGRlY29yYXRlLmMgLSBkZWNvcmF0ZSBhIGdpdCBvYmplY3Qgd2l0aCBzb21lIGFyYml0cmFyeQorICogZGF0YS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX29iaihzdHJ1Y3Qgb2JqZWN0ICpvYmosIHVuc2lnbmVkIGludCBuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gKih1bnNpZ25lZCBpbnQgKilvYmotPnNoYTE7CisJcmV0dXJuIGhhc2ggJSBuOworfQorCitzdGF0aWMgdm9pZCAqaW5zZXJ0X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIHN0cnVjdCBvYmplY3QgKmJhc2UsIHZvaWQgKmRlY29yYXRpb24pCit7CisJaW50IHNpemUgPSBuLT5zaXplOworCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqaGFzaCA9IG4tPmhhc2g7CisJaW50IGogPSBoYXNoX29iaihiYXNlLCBzaXplKTsKKworCXdoaWxlIChoYXNoW2pdLmJhc2UpIHsKKwkJaWYgKGhhc2hbal0uYmFzZSA9PSBiYXNlKSB7CisJCQl2b2lkICpvbGQgPSBoYXNoW2pdLmRlY29yYXRpb247CisJCQloYXNoW2pdLmRlY29yYXRpb24gPSBkZWNvcmF0aW9uOworCQkJcmV0dXJuIG9sZDsKKwkJfQorCQlpZiAoKytqID49IHNpemUpCisJCQlqID0gMDsKKwl9CisJaGFzaFtqXS5iYXNlID0gYmFzZTsKKwloYXNoW2pdLmRlY29yYXRpb24gPSBkZWNvcmF0aW9uOworCW4tPm5yKys7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdyb3dfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbikKK3sKKwlpbnQgaTsKKwlpbnQgb2xkX3NpemUgPSBuLT5zaXplOworCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqb2xkX2hhc2g7CisKKwlvbGRfc2l6ZSA9IG4tPnNpemU7CisJb2xkX2hhc2ggPSBuLT5oYXNoOworCisJbi0+c2l6ZSA9IChvbGRfc2l6ZSArIDEwMDApICogMyAvIDI7CisJbi0+aGFzaCA9IHhjYWxsb2Mobi0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbikpOworCW4tPm5yID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfc2l6ZTsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKmJhc2UgPSBvbGRfaGFzaFtpXS5iYXNlOworCQl2b2lkICpkZWNvcmF0aW9uID0gb2xkX2hhc2hbaV0uZGVjb3JhdGlvbjsKKworCQlpZiAoIWJhc2UpCisJCQljb250aW51ZTsKKwkJaW5zZXJ0X2RlY29yYXRpb24obiwgYmFzZSwgZGVjb3JhdGlvbik7CisJfQorCWZyZWUob2xkX2hhc2gpOworfQorCisvKiBBZGQgYSBkZWNvcmF0aW9uIHBvaW50ZXIsIHJldHVybiBhbnkgb2xkIG9uZSAqLwordm9pZCAqYWRkX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqZGVjb3JhdGlvbikKK3sKKwlpbnQgbnIgPSBuLT5uciArIDE7CisKKwlpZiAobnIgPiBuLT5zaXplICogMiAvIDMpCisJCWdyb3dfZGVjb3JhdGlvbihuKTsKKwlyZXR1cm4gaW5zZXJ0X2RlY29yYXRpb24obiwgb2JqLCBkZWNvcmF0aW9uKTsKK30KKworLyogTG9va3VwIGEgZGVjb3JhdGlvbiBwb2ludGVyICovCit2b2lkICpsb29rdXBfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWludCBqOworCisJLyogbm90aGluZyB0byBsb29rdXAgKi8KKwlpZiAoIW4tPnNpemUpCisJCXJldHVybiBOVUxMOworCWogPSBoYXNoX29iaihvYmosIG4tPnNpemUpOworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdF9kZWNvcmF0aW9uICpyZWYgPSBuLT5oYXNoICsgajsKKwkJaWYgKHJlZi0+YmFzZSA9PSBvYmopCisJCQlyZXR1cm4gcmVmLT5kZWNvcmF0aW9uOworCQlpZiAoIXJlZi0+YmFzZSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoKytqID09IG4tPnNpemUpCisJCQlqID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5oIGIvZGVjb3JhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE0YWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZGVjb3JhdGUuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIERFQ09SQVRFX0gKKyNkZWZpbmUgREVDT1JBVEVfSAorCitzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24geworCXN0cnVjdCBvYmplY3QgKmJhc2U7CisJdm9pZCAqZGVjb3JhdGlvbjsKK307CisKK3N0cnVjdCBkZWNvcmF0aW9uIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBzaXplLCBucjsKKwlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmhhc2g7Cit9OworCitleHRlcm4gdm9pZCAqYWRkX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqZGVjb3JhdGlvbik7CitleHRlcm4gdm9pZCAqbG9va3VwX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIHN0cnVjdCBvYmplY3QgKm9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGlmZi1saWIuYyBiL2RpZmYtbGliLmMKaW5kZXggNzUzMWUyMC4uMDdmNGU4MSAxMDA2NDQKLS0tIGEvZGlmZi1saWIuYworKysgYi9kaWZmLWxpYi5jCkBAIC0zNzMsNyArMzczLDcgQEAKIAkJCQkJY29udGludWU7CiAJCQl9CiAJCQllbHNlCi0JCQkJZHBhdGgtPm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCQkJCWRwYXRoLT5tb2RlID0gbnRvaGwoY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpKTsKIAogCQkJd2hpbGUgKGkgPCBlbnRyaWVzKSB7CiAJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpuY2UgPSBhY3RpdmVfY2FjaGVbaV07CkBAIC0zOTAsOCArMzkwLDcgQEAKIAkJCQkJaW50IG1vZGUgPSBudG9obChuY2UtPmNlX21vZGUpOwogCQkJCQludW1fY29tcGFyZV9zdGFnZXMrKzsKIAkJCQkJaGFzaGNweShkcGF0aC0+cGFyZW50W3N0YWdlLTJdLnNoYTEsIG5jZS0+c2hhMSk7Ci0JCQkJCWRwYXRoLT5wYXJlbnRbc3RhZ2UtMl0ubW9kZSA9Ci0JCQkJCQljYW5vbl9tb2RlKG1vZGUpOworCQkJCQlkcGF0aC0+cGFyZW50W3N0YWdlLTJdLm1vZGUgPSBudG9obChjZV9tb2RlX2Zyb21fc3RhdChuY2UsIG1vZGUpKTsKIAkJCQkJZHBhdGgtPnBhcmVudFtzdGFnZS0yXS5zdGF0dXMgPQogCQkJCQkJRElGRl9TVEFUVVNfTU9ESUZJRUQ7CiAJCQkJfQpAQCAtNDQwLDE1ICs0MzksNyBAQAogCQlpZiAoIWNoYW5nZWQgJiYgIXJldnMtPmRpZmZvcHQuZmluZF9jb3BpZXNfaGFyZGVyKQogCQkJY29udGludWU7CiAJCW9sZG1vZGUgPSBudG9obChjZS0+Y2VfbW9kZSk7Ci0KLQkJbmV3bW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7Ci0JCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYKLQkJICAgIFNfSVNSRUcobmV3bW9kZSkgJiYgU19JU1JFRyhvbGRtb2RlKSAmJgotCQkgICAgKChuZXdtb2RlIF4gb2xkbW9kZSkgPT0gMDExMSkpCi0JCQluZXdtb2RlID0gb2xkbW9kZTsKLQkJZWxzZSBpZiAoIWhhc19zeW1saW5rcyAmJgotCQkgICAgU19JU1JFRyhuZXdtb2RlKSAmJiBTX0lTTE5LKG9sZG1vZGUpKQotCQkJbmV3bW9kZSA9IG9sZG1vZGU7CisJCW5ld21vZGUgPSBudG9obChjZV9tb2RlX2Zyb21fc3RhdChjZSwgc3Quc3RfbW9kZSkpOwogCQlkaWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwgb2xkbW9kZSwgbmV3bW9kZSwKIAkJCSAgICBjZS0+c2hhMSwgKGNoYW5nZWQgPyBudWxsX3NoYTEgOiBjZS0+c2hhMSksCiAJCQkgICAgY2UtPm5hbWUsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZGlmZi5jIGIvZGlmZi5jCmluZGV4IGQ4ZjkyNDIuLjlkZmRlZDcgMTAwNjQ0Ci0tLSBhL2RpZmYuYworKysgYi9kaWZmLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAiZGVsdGEuaCIKICNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImF0dHIuaCIKIAogI2lmZGVmIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKICNkZWZpbmUgRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAwCkBAIC01MSw2ICs1Miw0OSBAQAogCWRpZSgiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIiwgdmFyKTsKIH0KIAorc3RhdGljIHN0cnVjdCBsbF9kaWZmX2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbGxfZGlmZl9kcml2ZXIgKm5leHQ7CisJY2hhciAqY21kOworfSAqdXNlcl9kaWZmLCAqKnVzZXJfZGlmZl90YWlsOworCisvKgorICogQ3VycmVudGx5IHRoZXJlIGlzIG9ubHkgImRpZmYuPGRyaXZlcm5hbWU+LmNvbW1hbmQiIHZhcmlhYmxlOworICogYmVjYXVzZSB0aGVyZSBhcmUgImRpZmYuY29sb3IuPHNsb3Q+IiB2YXJpYWJsZXMsIHdlIGFyZSBwYXJzaW5nCisgKiB0aGlzIGluIGEgYml0IGNvbnZvbHV0ZWQgd2F5IHRvIGFsbG93IGxvdyBsZXZlbCBkaWZmIGRyaXZlcgorICogY2FsbGVkICJjb2xvciIuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfbGxkaWZmX2NvbW1hbmQoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICplcCwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgbGxfZGlmZl9kcml2ZXIgKmRydjsKKworCW5hbWUgPSB2YXIgKyA1OworCW5hbWVsZW4gPSBlcCAtIG5hbWU7CisJZm9yIChkcnYgPSB1c2VyX2RpZmY7IGRydjsgZHJ2ID0gZHJ2LT5uZXh0KQorCQlpZiAoIXN0cm5jbXAoZHJ2LT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZHJ2LT5uYW1lW25hbWVsZW5dKQorCQkJYnJlYWs7CisJaWYgKCFkcnYpIHsKKwkJY2hhciAqbmFtZWJ1ZjsKKwkJZHJ2ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxsX2RpZmZfZHJpdmVyKSk7CisJCW5hbWVidWYgPSB4bWFsbG9jKG5hbWVsZW4gKyAxKTsKKwkJbWVtY3B5KG5hbWVidWYsIG5hbWUsIG5hbWVsZW4pOworCQluYW1lYnVmW25hbWVsZW5dID0gMDsKKwkJZHJ2LT5uYW1lID0gbmFtZWJ1ZjsKKwkJZHJ2LT5uZXh0ID0gTlVMTDsKKwkJaWYgKCF1c2VyX2RpZmZfdGFpbCkKKwkJCXVzZXJfZGlmZl90YWlsID0gJnVzZXJfZGlmZjsKKwkJKnVzZXJfZGlmZl90YWlsID0gZHJ2OworCQl1c2VyX2RpZmZfdGFpbCA9ICYoZHJ2LT5uZXh0KTsKKwl9CisKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBsYWNrcyB2YWx1ZSIsIHZhcik7CisJZHJ2LT5jbWQgPSBzdHJkdXAodmFsdWUpOworCXJldHVybiAwOworfQorCiAvKgogICogVGhlc2UgYXJlIHRvIGdpdmUgVUkgbGF5ZXIgZGVmYXVsdHMuCiAgKiBUaGUgY29yZS1sZXZlbCBjb21tYW5kcyBzdWNoIGFzIGdpdC1kaWZmLWZpbGVzIHNob3VsZApAQCAtNzcsMTEgKzEyMSwxOCBAQAogCQkJZGlmZl9kZXRlY3RfcmVuYW1lX2RlZmF1bHQgPSBESUZGX0RFVEVDVF9SRU5BTUU7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXByZWZpeGNtcCh2YXIsICJkaWZmLiIpKSB7CisJCWNvbnN0IGNoYXIgKmVwID0gc3RycmNocih2YXIsICcuJyk7CisKKwkJaWYgKGVwICE9IHZhciArIDQgJiYgIXN0cmNtcChlcCwgIi5jb21tYW5kIikpCisJCQlyZXR1cm4gcGFyc2VfbGxkaWZmX2NvbW1hbmQodmFyLCBlcCwgdmFsdWUpOworCX0KIAlpZiAoIXByZWZpeGNtcCh2YXIsICJkaWZmLmNvbG9yLiIpIHx8ICFwcmVmaXhjbXAodmFyLCAiY29sb3IuZGlmZi4iKSkgewogCQlpbnQgc2xvdCA9IHBhcnNlX2RpZmZfY29sb3Jfc2xvdCh2YXIsIDExKTsKIAkJY29sb3JfcGFyc2UodmFsdWUsIHZhciwgZGlmZl9jb2xvcnNbc2xvdF0pOwogCQlyZXR1cm4gMDsKIAl9CisKIAlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOwogfQogCkBAIC04MTEsNyArODYyLDEyIEBACiAKIAkJaWYgKGRhdGEtPmZpbGVzW2ldLT5pc19iaW5hcnkpIHsKIAkJCXNob3dfbmFtZShwcmVmaXgsIG5hbWUsIGxlbiwgcmVzZXQsIHNldCk7Ci0JCQlwcmludGYoIiAgQmluXG4iKTsKKwkJCXByaW50ZigiICBCaW4gIik7CisJCQlwcmludGYoIiVzJWQlcyIsIGRlbF9jLCBkZWxldGVkLCByZXNldCk7CisJCQlwcmludGYoIiAtPiAiKTsKKwkJCXByaW50ZigiJXMlZCVzIiwgYWRkX2MsIGFkZGVkLCByZXNldCk7CisJCQlwcmludGYoIiBieXRlcyIpOworCQkJcHJpbnRmKCJcbiIpOwogCQkJZ290byBmcmVlX2RpZmZzdGF0X2ZpbGU7CiAJCX0KIAkJZWxzZSBpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX3VubWVyZ2VkKSB7CkBAIC0xMDQ2LDEzICsxMTAyLDM5IEBACiAJZW1pdF9iaW5hcnlfZGlmZl9ib2R5KHR3bywgb25lKTsKIH0KIAotI2RlZmluZSBGSVJTVF9GRVdfQllURVMgODAwMAotc3RhdGljIGludCBtbWZpbGVfaXNfYmluYXJ5KG1tZmlsZV90ICptZikKK3N0YXRpYyB2b2lkIHNldHVwX2RpZmZfYXR0cl9jaGVjayhzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQogewotCWxvbmcgc3ogPSBtZi0+c2l6ZTsKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX2RpZmY7CisKKwlpZiAoIWF0dHJfZGlmZikKKwkJYXR0cl9kaWZmID0gZ2l0X2F0dHIoImRpZmYiLCA0KTsKKwljaGVjay0+YXR0ciA9IGF0dHJfZGlmZjsKK30KKworI2RlZmluZSBGSVJTVF9GRVdfQllURVMgODAwMAorc3RhdGljIGludCBmaWxlX2lzX2JpbmFyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCXVuc2lnbmVkIGxvbmcgc3o7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGF0dHJfZGlmZl9jaGVjazsKKworCXNldHVwX2RpZmZfYXR0cl9jaGVjaygmYXR0cl9kaWZmX2NoZWNrKTsKKwlpZiAoIWdpdF9jaGVja2F0dHIob25lLT5wYXRoLCAxLCAmYXR0cl9kaWZmX2NoZWNrKSkgeworCQljb25zdCBjaGFyICp2YWx1ZSA9IGF0dHJfZGlmZl9jaGVjay52YWx1ZTsKKwkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIW9uZS0+ZGF0YSkgeworCQlpZiAoIURJRkZfRklMRV9WQUxJRChvbmUpKQorCQkJcmV0dXJuIDA7CisJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKTsKKwl9CisJc3ogPSBvbmUtPnNpemU7CiAJaWYgKEZJUlNUX0ZFV19CWVRFUyA8IHN6KQogCQlzeiA9IEZJUlNUX0ZFV19CWVRFUzsKLQlyZXR1cm4gISFtZW1jaHIobWYtPnB0ciwgMCwgc3opOworCXJldHVybiAhIW1lbWNocihvbmUtPmRhdGEsIDAsIHN6KTsKIH0KIAogc3RhdGljIHZvaWQgYnVpbHRpbl9kaWZmKGNvbnN0IGNoYXIgKm5hbWVfYSwKQEAgLTExMDksNyArMTE5MSw3IEBACiAJaWYgKGZpbGxfbW1maWxlKCZtZjEsIG9uZSkgPCAwIHx8IGZpbGxfbW1maWxlKCZtZjIsIHR3bykgPCAwKQogCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKIAotCWlmICghby0+dGV4dCAmJiAobW1maWxlX2lzX2JpbmFyeSgmbWYxKSB8fCBtbWZpbGVfaXNfYmluYXJ5KCZtZjIpKSkgeworCWlmICghby0+dGV4dCAmJiAoZmlsZV9pc19iaW5hcnkob25lKSB8fCBmaWxlX2lzX2JpbmFyeSh0d28pKSkgewogCQkvKiBRdWl0ZSBjb21tb24gY29uZnVzaW5nIGNhc2UgKi8KIAkJaWYgKG1mMS5zaXplID09IG1mMi5zaXplICYmCiAJCSAgICAhbWVtY21wKG1mMS5wdHIsIG1mMi5wdHIsIG1mMS5zaXplKSkKQEAgLTExODUsOSArMTI2NywxMSBAQAogCWlmIChmaWxsX21tZmlsZSgmbWYxLCBvbmUpIDwgMCB8fCBmaWxsX21tZmlsZSgmbWYyLCB0d28pIDwgMCkKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CiAKLQlpZiAobW1maWxlX2lzX2JpbmFyeSgmbWYxKSB8fCBtbWZpbGVfaXNfYmluYXJ5KCZtZjIpKQorCWlmIChmaWxlX2lzX2JpbmFyeShvbmUpIHx8IGZpbGVfaXNfYmluYXJ5KHR3bykpIHsKIAkJZGF0YS0+aXNfYmluYXJ5ID0gMTsKLQllbHNlIHsKKwkJZGF0YS0+YWRkZWQgPSBtZjIuc2l6ZTsKKwkJZGF0YS0+ZGVsZXRlZCA9IG1mMS5zaXplOworCX0gZWxzZSB7CiAJCS8qIENyYXp5IHhkbCBpbnRlcmZhY2VzLi4gKi8KIAkJeHBwYXJhbV90IHhwcDsKIAkJeGRlbWl0Y29uZl90IHhlY2ZnOwpAQCAtMTIyMSw3ICsxMzA1LDcgQEAKIAlpZiAoZmlsbF9tbWZpbGUoJm1mMSwgb25lKSA8IDAgfHwgZmlsbF9tbWZpbGUoJm1mMiwgdHdvKSA8IDApCiAJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOwogCi0JaWYgKG1tZmlsZV9pc19iaW5hcnkoJm1mMikpCisJaWYgKGZpbGVfaXNfYmluYXJ5KHR3bykpCiAJCXJldHVybjsKIAllbHNlIHsKIAkJLyogQ3JhenkgeGRsIGludGVyZmFjZXMuLiAqLwpAQCAtMTM5MCw2ICsxNDc0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZGlmZl9wb3B1bGF0ZV9naXRsaW5rKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCBpbnQgc2l6ZV9vbmx5KQoreworCWludCBsZW47CisJY2hhciAqZGF0YSA9IHhtYWxsb2MoMTAwKTsKKwlsZW4gPSBzbnByaW50ZihkYXRhLCAxMDAsCisJCSJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgc2hhMV90b19oZXgocy0+c2hhMSkpOworCXMtPmRhdGEgPSBkYXRhOworCXMtPnNpemUgPSBsZW47CisJcy0+c2hvdWxkX2ZyZWUgPSAxOworCWlmIChzaXplX29ubHkpIHsKKwkJcy0+ZGF0YSA9IE5VTEw7CisJCWZyZWUoZGF0YSk7CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogV2hpbGUgZG9pbmcgcmVuYW1lIGRldGVjdGlvbiBhbmQgcGlja2F4ZSBvcGVyYXRpb24sIHdlIG1heSBuZWVkIHRvCiAgKiBncmFiIHRoZSBkYXRhIGZvciB0aGUgYmxvYiAob3IgZmlsZSkgZm9yIG91ciBvd24gaW4tY29yZSBjb21wYXJpc29uLgpAQCAtMTQwOCw2ICsxNTA4LDEwIEBACiAKIAlpZiAocy0+ZGF0YSkKIAkJcmV0dXJuIGVycjsKKworCWlmIChTX0lTRElSTE5LKHMtPm1vZGUpKQorCQlyZXR1cm4gZGlmZl9wb3B1bGF0ZV9naXRsaW5rKHMsIHNpemVfb25seSk7CisKIAlpZiAoIXMtPnNoYTFfdmFsaWQgfHwKIAkgICAgcmV1c2Vfd29ya3RyZWVfZmlsZShzLT5wYXRoLCBzLT5zaGExLCAwKSkgewogCQlzdHJ1Y3Qgc3RhdCBzdDsKQEAgLTE0NTQsOSArMTU1OCw5IEBACiAJCS8qCiAJCSAqIENvbnZlcnQgZnJvbSB3b3JraW5nIHRyZWUgZm9ybWF0IHRvIGNhbm9uaWNhbCBnaXQgZm9ybWF0CiAJCSAqLwotCQlidWYgPSBzLT5kYXRhOwogCQlzaXplID0gcy0+c2l6ZTsKLQkJaWYgKGNvbnZlcnRfdG9fZ2l0KHMtPnBhdGgsICZidWYsICZzaXplKSkgeworCQlidWYgPSBjb252ZXJ0X3RvX2dpdChzLT5wYXRoLCBzLT5kYXRhLCAmc2l6ZSk7CisJCWlmIChidWYpIHsKIAkJCW11bm1hcChzLT5kYXRhLCBzLT5zaXplKTsKIAkJCXMtPnNob3VsZF9tdW5tYXAgPSAwOwogCQkJcy0+ZGF0YSA9IGJ1ZjsKQEAgLTE2OTMsNiArMTc5NywzMCBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVybmFsX2RpZmZfYXR0cihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBhdHRyX2RpZmZfY2hlY2s7CisKKwlzZXR1cF9kaWZmX2F0dHJfY2hlY2soJmF0dHJfZGlmZl9jaGVjayk7CisJaWYgKCFnaXRfY2hlY2thdHRyKG5hbWUsIDEsICZhdHRyX2RpZmZfY2hlY2spKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gYXR0cl9kaWZmX2NoZWNrLnZhbHVlOworCQlpZiAoIUFUVFJfVFJVRSh2YWx1ZSkgJiYKKwkJICAgICFBVFRSX0ZBTFNFKHZhbHVlKSAmJgorCQkgICAgIUFUVFJfVU5TRVQodmFsdWUpKSB7CisJCQlzdHJ1Y3QgbGxfZGlmZl9kcml2ZXIgKmRydjsKKworCQkJaWYgKCF1c2VyX2RpZmZfdGFpbCkgeworCQkJCXVzZXJfZGlmZl90YWlsID0gJnVzZXJfZGlmZjsKKwkJCQlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZyk7CisJCQl9CisJCQlmb3IgKGRydiA9IHVzZXJfZGlmZjsgZHJ2OyBkcnYgPSBkcnYtPm5leHQpCisJCQkJaWYgKCFzdHJjbXAoZHJ2LT5uYW1lLCB2YWx1ZSkpCisJCQkJCXJldHVybiBkcnYtPmNtZDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgcnVuX2RpZmZfY21kKGNvbnN0IGNoYXIgKnBnbSwKIAkJCSBjb25zdCBjaGFyICpuYW1lLAogCQkJIGNvbnN0IGNoYXIgKm90aGVyLApAQCAtMTcwMiw2ICsxODMwLDE0IEBACiAJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKIAkJCSBpbnQgY29tcGxldGVfcmV3cml0ZSkKIHsKKwlpZiAoIW8tPmFsbG93X2V4dGVybmFsKQorCQlwZ20gPSBOVUxMOworCWVsc2UgeworCQljb25zdCBjaGFyICpjbWQgPSBleHRlcm5hbF9kaWZmX2F0dHIobmFtZSk7CisJCWlmIChjbWQpCisJCQlwZ20gPSBjbWQ7CisJfQorCiAJaWYgKHBnbSkgewogCQlydW5fZXh0ZXJuYWxfZGlmZihwZ20sIG5hbWUsIG90aGVyLCBvbmUsIHR3bywgeGZybV9tc2csCiAJCQkJICBjb21wbGV0ZV9yZXdyaXRlKTsKQEAgLTE3OTgsOCArMTkzNCw4IEBACiAKIAkJaWYgKG8tPmJpbmFyeSkgewogCQkJbW1maWxlX3QgbWY7Ci0JCQlpZiAoKCFmaWxsX21tZmlsZSgmbWYsIG9uZSkgJiYgbW1maWxlX2lzX2JpbmFyeSgmbWYpKSB8fAotCQkJICAgICghZmlsbF9tbWZpbGUoJm1mLCB0d28pICYmIG1tZmlsZV9pc19iaW5hcnkoJm1mKSkpCisJCQlpZiAoKCFmaWxsX21tZmlsZSgmbWYsIG9uZSkgJiYgZmlsZV9pc19iaW5hcnkob25lKSkgfHwKKwkJCSAgICAoIWZpbGxfbW1maWxlKCZtZiwgdHdvKSAmJiBmaWxlX2lzX2JpbmFyeSh0d28pKSkKIAkJCQlhYmJyZXYgPSA0MDsKIAkJfQogCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKQEAgLTI2OTQsNyArMjgzMCw3IEBACiAJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKIAogCQkvKiBNYXliZSBoYXNoIHAtPnR3bz8gaW50byB0aGUgcGF0Y2ggaWQ/ICovCi0JCWlmIChtbWZpbGVfaXNfYmluYXJ5KCZtZjIpKQorCQlpZiAoZmlsZV9pc19iaW5hcnkocC0+dHdvKSkKIAkJCWNvbnRpbnVlOwogCiAJCWxlbjEgPSByZW1vdmVfc3BhY2UocC0+b25lLT5wYXRoLCBzdHJsZW4ocC0+b25lLT5wYXRoKSk7CmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggYTBkMmNlMS4uNjM3MzhjMSAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtNTksNiArNTksNyBAQAogCQkgY29sb3JfZGlmZl93b3JkczoxLAogCQkgaGFzX2NoYW5nZXM6MSwKIAkJIHF1aWV0OjEsCisJCSBhbGxvd19leHRlcm5hbDoxLAogCQkgZXhpdF93aXRoX3N0YXR1czoxOwogCWludCBjb250ZXh0OwogCWludCBicmVha19vcHQ7CmRpZmYgLS1naXQgYS9kaWZmY29yZS5oIGIvZGlmZmNvcmUuaAppbmRleCAxZWE4MDY3Li43YjkyOTRlIDEwMDY0NAotLS0gYS9kaWZmY29yZS5oCisrKyBiL2RpZmZjb3JlLmgKQEAgLTEsOCArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCiAgKi8KLSNpZm5kZWYgX0RJRkZDT1JFX0hfCi0jZGVmaW5lIF9ESUZGQ09SRV9IXworI2lmbmRlZiBESUZGQ09SRV9ICisjZGVmaW5lIERJRkZDT1JFX0gKIAogLyogVGhpcyBoZWFkZXIgZmlsZSBpcyBpbnRlcm5hbCBiZXR3ZWVuIGRpZmYuYyBhbmQgaXRzIGRpZmYgdHJhbnNmb3JtZXJzCiAgKiAoZS5nLiBkaWZmY29yZS1yZW5hbWUsIGRpZmZjb3JlLXBpY2theGUpLiAgTmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlcgpkaWZmIC0tZ2l0IGEvZGlyLmMgYi9kaXIuYwppbmRleCA2MDIyODJiLi5kMzA2MzUyIDEwMDY0NAotLS0gYS9kaXIuYworKysgYi9kaXIuYwpAQCAtNyw2ICs3LDE2IEBACiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RydWN0IHBhdGhfc2ltcGxpZnkgeworCWludCBsZW47CisJY29uc3QgY2hhciAqcGF0aDsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJaW50IGNoZWNrX29ubHksIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSk7CiAKIGludCBjb21tb25fcHJlZml4KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKIHsKQEAgLTI4MiwxNSArMjkyLDEzNiBAQAogCXJldHVybiBlbnQ7CiB9CiAKLXN0YXRpYyBpbnQgZGlyX2V4aXN0cyhjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQorZW51bSBleGlzdF9zdGF0dXMgeworCWluZGV4X25vbmV4aXN0ZW50ID0gMCwKKwlpbmRleF9kaXJlY3RvcnksCisJaW5kZXhfZ2l0ZGlyLAorfTsKKworLyoKKyAqIFRoZSBpbmRleCBzb3J0cyBhbHBoYWJldGljYWxseSBieSBlbnRyeSBuYW1lLCB3aGljaAorICogbWVhbnMgdGhhdCBhIGdpdGxpbmsgc29ydHMgYXMgJ1wwJyBhdCB0aGUgZW5kLCB3aGlsZQorICogYSBkaXJlY3RvcnkgKHdoaWNoIGlzIGRlZmluZWQgbm90IGFzIGFuIGVudHJ5LCBidXQgYXMKKyAqIHRoZSBmaWxlcyBpdCBjb250YWlucykgd2lsbCBzb3J0IHdpdGggdGhlICcvJyBhdCB0aGUKKyAqIGVuZC4KKyAqLworc3RhdGljIGVudW0gZXhpc3Rfc3RhdHVzIGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGxlbikKIHsKIAlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MoZGlybmFtZSwgbGVuKTsKLQlpZiAocG9zID49IDApCisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MtMTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCQl1bnNpZ25lZCBjaGFyIGVuZGNoYXI7CisKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIGRpcm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJZW5kY2hhciA9IGNlLT5uYW1lW2xlbl07CisJCWlmIChlbmRjaGFyID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChlbmRjaGFyID09ICcvJykKKwkJCXJldHVybiBpbmRleF9kaXJlY3Rvcnk7CisJCWlmICghZW5kY2hhciAmJiBTX0lTRElSTE5LKG50b2hsKGNlLT5jZV9tb2RlKSkpCisJCQlyZXR1cm4gaW5kZXhfZ2l0ZGlyOworCX0KKwlyZXR1cm4gaW5kZXhfbm9uZXhpc3RlbnQ7Cit9CisKKy8qCisgKiBXaGVuIHdlIGZpbmQgYSBkaXJlY3Rvcnkgd2hlbiB0cmF2ZXJzaW5nIHRoZSBmaWxlc3lzdGVtLCB3ZQorICogaGF2ZSB0aHJlZSBkaXN0aW5jdCBjYXNlczoKKyAqCisgKiAgLSBpZ25vcmUgaXQKKyAqICAtIHNlZSBpdCBhcyBhIGRpcmVjdG9yeQorICogIC0gcmVjdXJzZSBpbnRvIGl0CisgKgorICogYW5kIHdoaWNoIG9uZSB3ZSBjaG9vc2UgZGVwZW5kcyBvbiBhIGNvbWJpbmF0aW9uIG9mIGV4aXN0aW5nCisgKiBnaXQgaW5kZXggY29udGVudHMgYW5kIHRoZSBmbGFncyBwYXNzZWQgaW50byB0aGUgZGlyZWN0b3J5CisgKiB0cmF2ZXJzYWwgcm91dGluZS4KKyAqCisgKiBDYXNlIDE6IElmIHdlICphbHJlYWR5KiBoYXZlIGVudHJpZXMgaW4gdGhlIGluZGV4IHVuZGVyIHRoYXQKKyAqIGRpcmVjdG9yeSBuYW1lLCB3ZSBhbHdheXMgcmVjdXJzZSBpbnRvIHRoZSBkaXJlY3RvcnkgdG8gc2VlCisgKiBhbGwgdGhlIGZpbGVzLgorICoKKyAqIENhc2UgMjogSWYgd2UgKmFscmVhZHkqIGhhdmUgdGhhdCBkaXJlY3RvcnkgbmFtZSBhcyBhIGdpdGxpbmssCisgKiB3ZSBhbHdheXMgY29udGludWUgdG8gc2VlIGl0IGFzIGEgZ2l0bGluaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgKiB0aGVyZSBpcyBhbiBhY3R1YWwgZ2l0IGRpcmVjdG9yeSB0aGVyZSBvciBub3QgKGl0IG1pZ2h0IG5vdAorICogYmUgY2hlY2tlZCBvdXQgYXMgYSBzdWJwcm9qZWN0ISkKKyAqCisgKiBDYXNlIDM6IGlmIHdlIGRpZG4ndCBoYXZlIGl0IGluIHRoZSBpbmRleCBwcmV2aW91c2x5LCB3ZQorICogaGF2ZSBhIGZldyBzdWItY2FzZXM6CisgKgorICogIChhKSBpZiAic2hvd19vdGhlcl9kaXJlY3RvcmllcyIgaXMgdHJ1ZSwgd2Ugc2hvdyBpdCBhcworICogICAgICBqdXN0IGEgZGlyZWN0b3J5LCB1bmxlc3MgImhpZGVfZW1wdHlfZGlyZWN0b3JpZXMiIGlzCisgKiAgICAgIGFsc28gdHJ1ZSBhbmQgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eSwgaW4gd2hpY2ggY2FzZQorICogICAgICB3ZSBqdXN0IGlnbm9yZSBpdCBlbnRpcmVseS4KKyAqICAoYikgaWYgaXQgbG9va3MgbGlrZSBhIGdpdCBkaXJlY3RvcnksIGFuZCB3ZSBkb24ndCBoYXZlCisgKiAgICAgICdub19kaXJsaW5rcycgc2V0IHdlIHRyZWF0IGl0IGFzIGEgZ2l0bGluaywgYW5kIHNob3cgaXQKKyAqICAgICAgYXMgYSBkaXJlY3RvcnkuCisgKiAgKGMpIG90aGVyd2lzZSwgd2UgcmVjdXJzZSBpbnRvIGl0LgorICovCitlbnVtIGRpcmVjdG9yeV90cmVhdG1lbnQgeworCXNob3dfZGlyZWN0b3J5LAorCWlnbm9yZV9kaXJlY3RvcnksCisJcmVjdXJzZV9pbnRvX2RpcmVjdG9yeSwKK307CisKK3N0YXRpYyBlbnVtIGRpcmVjdG9yeV90cmVhdG1lbnQgdHJlYXRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGxlbiwKKwljb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCit7CisJLyogVGhlICJsZW4tMSIgaXMgdG8gc3RyaXAgdGhlIGZpbmFsICcvJyAqLworCXN3aXRjaCAoZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleChkaXJuYW1lLCBsZW4tMSkpIHsKKwljYXNlIGluZGV4X2RpcmVjdG9yeToKKwkJcmV0dXJuIHJlY3Vyc2VfaW50b19kaXJlY3Rvcnk7CisKKwljYXNlIGluZGV4X2dpdGRpcjoKKwkJaWYgKGRpci0+c2hvd19vdGhlcl9kaXJlY3RvcmllcykKKwkJCXJldHVybiBpZ25vcmVfZGlyZWN0b3J5OworCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CisKKwljYXNlIGluZGV4X25vbmV4aXN0ZW50OgorCQlpZiAoZGlyLT5zaG93X290aGVyX2RpcmVjdG9yaWVzKQorCQkJYnJlYWs7CisJCWlmICghZGlyLT5ub19kaXJsaW5rcykgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGRpcm5hbWUsICJIRUFEIiwgc2hhMSkgPT0gMCkKKwkJCQlyZXR1cm4gc2hvd19kaXJlY3Rvcnk7CisJCX0KKwkJcmV0dXJuIHJlY3Vyc2VfaW50b19kaXJlY3Rvcnk7CisJfQorCisJLyogVGhpcyBpcyB0aGUgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGNhc2UgKi8KKwlpZiAoIWRpci0+aGlkZV9lbXB0eV9kaXJlY3RvcmllcykKKwkJcmV0dXJuIHNob3dfZGlyZWN0b3J5OworCWlmICghcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgZGlybmFtZSwgZGlybmFtZSwgbGVuLCAxLCBzaW1wbGlmeSkpCisJCXJldHVybiBpZ25vcmVfZGlyZWN0b3J5OworCXJldHVybiBzaG93X2RpcmVjdG9yeTsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4gaW5leGFjdCBlYXJseSBwcnVuaW5nIG9mIGFueSByZWN1cnNpdmUgZGlyZWN0b3J5CisgKiByZWFkaW5nIC0gaWYgdGhlIHBhdGggY2Fubm90IHBvc3NpYmx5IGJlIGluIHRoZSBwYXRoc3BlYywKKyAqIHJldHVybiB0cnVlLCBhbmQgd2UnbGwgc2tpcCBpdCBlYXJseS4KKyAqLworc3RhdGljIGludCBzaW1wbGlmeV9hd2F5KGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuLCBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCit7CisJaWYgKHNpbXBsaWZ5KSB7CisJCWZvciAoOzspIHsKKwkJCWNvbnN0IGNoYXIgKm1hdGNoID0gc2ltcGxpZnktPnBhdGg7CisJCQlpbnQgbGVuID0gc2ltcGxpZnktPmxlbjsKKworCQkJaWYgKCFtYXRjaCkKKwkJCQlicmVhazsKKwkJCWlmIChsZW4gPiBwYXRobGVuKQorCQkJCWxlbiA9IHBhdGhsZW47CisJCQlpZiAoIW1lbWNtcChwYXRoLCBtYXRjaCwgbGVuKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXNpbXBsaWZ5Kys7CisJCX0KIAkJcmV0dXJuIDE7Ci0JcG9zID0gLXBvcy0xOwotCWlmIChwb3MgPj0gYWN0aXZlX25yKSAvKiBjYW4ndCAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gIXN0cm5jbXAoYWN0aXZlX2NhY2hlW3Bvc10tPm5hbWUsIGRpcm5hbWUsIGxlbik7CisJfQorCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzAyLDcgKzQzMyw3IEBACiAgKiBBbHNvLCB3ZSBpZ25vcmUgdGhlIG5hbWUgIi5naXQiIChldmVuIGlmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSkuCiAgKiBUaGF0IGxpa2VseSB3aWxsIG5vdCBjaGFuZ2UuCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBpbnQgY2hlY2tfb25seSkKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBpbnQgY2hlY2tfb25seSwgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQogewogCURJUiAqZmRpciA9IG9wZW5kaXIocGF0aCk7CiAJaW50IGNvbnRlbnRzID0gMDsKQEAgLTMyNCw3ICs0NTUsMTIgQEAKIAkJCSAgICAgIXN0cmNtcChkZS0+ZF9uYW1lICsgMSwgImdpdCIpKSkKIAkJCQljb250aW51ZTsKIAkJCWxlbiA9IHN0cmxlbihkZS0+ZF9uYW1lKTsKKwkJCS8qIElnbm9yZSBvdmVybHkgbG9uZyBwYXRobmFtZXMhICovCisJCQlpZiAobGVuICsgYmFzZWxlbiArIDggPiBzaXplb2YoZnVsbG5hbWUpKQorCQkJCWNvbnRpbnVlOwogCQkJbWVtY3B5KGZ1bGxuYW1lICsgYmFzZWxlbiwgZGUtPmRfbmFtZSwgbGVuKzEpOworCQkJaWYgKHNpbXBsaWZ5X2F3YXkoZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIHNpbXBsaWZ5KSkKKwkJCQljb250aW51ZTsKIAkJCWlmIChleGNsdWRlZChkaXIsIGZ1bGxuYW1lKSAhPSBkaXItPnNob3dfaWdub3JlZCkgewogCQkJCWlmICghZGlyLT5zaG93X2lnbm9yZWQgfHwgRFRZUEUoZGUpICE9IERUX0RJUikgewogCQkJCQljb250aW51ZTsKQEAgLTM0NiwxOSArNDgyLDE3IEBACiAJCQljYXNlIERUX0RJUjoKIAkJCQltZW1jcHkoZnVsbG5hbWUgKyBiYXNlbGVuICsgbGVuLCAiLyIsIDIpOwogCQkJCWxlbisrOwotCQkJCWlmIChkaXItPnNob3dfb3RoZXJfZGlyZWN0b3JpZXMgJiYKLQkJCQkgICAgIWRpcl9leGlzdHMoZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4pKSB7Ci0JCQkJCWlmIChkaXItPmhpZGVfZW1wdHlfZGlyZWN0b3JpZXMgJiYKLQkJCQkJICAgICFyZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLAotCQkJCQkJICAgIGZ1bGxuYW1lLCBmdWxsbmFtZSwKLQkJCQkJCSAgICBiYXNlbGVuICsgbGVuLCAxKSkKLQkJCQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAodHJlYXRfZGlyZWN0b3J5KGRpciwgZnVsbG5hbWUsIGJhc2VsZW4gKyBsZW4sIHNpbXBsaWZ5KSkgeworCQkJCWNhc2Ugc2hvd19kaXJlY3Rvcnk6CiAJCQkJCWJyZWFrOworCQkJCWNhc2UgcmVjdXJzZV9pbnRvX2RpcmVjdG9yeToKKwkJCQkJY29udGVudHMgKz0gcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwKKwkJCQkJCWZ1bGxuYW1lLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbiwgMCwgc2ltcGxpZnkpOworCQkJCQljb250aW51ZTsKKwkJCQljYXNlIGlnbm9yZV9kaXJlY3Rvcnk6CisJCQkJCWNvbnRpbnVlOwogCQkJCX0KLQotCQkJCWNvbnRlbnRzICs9IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsCi0JCQkJCWZ1bGxuYW1lLCBmdWxsbmFtZSwgYmFzZWxlbiArIGxlbiwgMCk7Ci0JCQkJY29udGludWU7CisJCQkJYnJlYWs7CiAJCQljYXNlIERUX1JFRzoKIAkJCWNhc2UgRFRfTE5LOgogCQkJCWJyZWFrOwpAQCAtMzg3LDggKzUyMSw2MSBAQAogCQkJCSAgZTItPm5hbWUsIGUyLT5sZW4pOwogfQogCi1pbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCisvKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlICJzaW1wbGUiIHBhcnQgb2YgYSBwYXRoIG1hdGNoIGxpbWl0ZXIuCisgKi8KK3N0YXRpYyBpbnQgc2ltcGxlX2xlbmd0aChjb25zdCBjaGFyICptYXRjaCkKIHsKKwljb25zdCBjaGFyIHNwZWNpYWxbMjU2XSA9IHsKKwkJWzBdID0gMSwgWyc/J10gPSAxLAorCQlbJ1xcJ10gPSAxLCBbJyonXSA9IDEsCisJCVsnWyddID0gMQorCX07CisJaW50IGxlbiA9IC0xOworCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqbWF0Y2grKzsKKwkJbGVuKys7CisJCWlmIChzcGVjaWFsW2NdKQorCQkJcmV0dXJuIGxlbjsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqY3JlYXRlX3NpbXBsaWZ5KGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlpbnQgbnIsIGFsbG9jID0gMDsKKwlzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkgPSBOVUxMOworCisJaWYgKCFwYXRoc3BlYykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKG5yID0gMCA7IDsgbnIrKykgeworCQljb25zdCBjaGFyICptYXRjaDsKKwkJaWYgKG5yID49IGFsbG9jKSB7CisJCQlhbGxvYyA9IGFsbG9jX25yKGFsbG9jKTsKKwkJCXNpbXBsaWZ5ID0geHJlYWxsb2Moc2ltcGxpZnksIGFsbG9jICogc2l6ZW9mKCpzaW1wbGlmeSkpOworCQl9CisJCW1hdGNoID0gKnBhdGhzcGVjKys7CisJCWlmICghbWF0Y2gpCisJCQlicmVhazsKKwkJc2ltcGxpZnlbbnJdLnBhdGggPSBtYXRjaDsKKwkJc2ltcGxpZnlbbnJdLmxlbiA9IHNpbXBsZV9sZW5ndGgobWF0Y2gpOworCX0KKwlzaW1wbGlmeVtucl0ucGF0aCA9IE5VTEw7CisJc2ltcGxpZnlbbnJdLmxlbiA9IDA7CisJcmV0dXJuIHNpbXBsaWZ5OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3NpbXBsaWZ5KHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlpZiAoc2ltcGxpZnkpCisJCWZyZWUoc2ltcGxpZnkpOworfQorCitpbnQgcmVhZF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkgPSBjcmVhdGVfc2ltcGxpZnkocGF0aHNwZWMpOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgdG8gZG8gdGhlIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBmb3IgYWxsIHRoZQogCSAqIGRpcmVjdG9yaWVzIGxlYWRpbmcgdXAgdG8gb3VyIGJhc2UuCkBAIC00MTUsNyArNjAyLDggQEAKIAkJfQogCX0KIAotCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIDApOworCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGJhc2UsIGJhc2VsZW4sIDAsIHNpbXBsaWZ5KTsKKwlmcmVlX3NpbXBsaWZ5KHNpbXBsaWZ5KTsKIAlxc29ydChkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5ICopLCBjbXBfbmFtZSk7CiAJcmV0dXJuIGRpci0+bnI7CiB9CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCmluZGV4IDcyMzNkNjUuLjgxN2M2NzQgMTAwNjQ0Ci0tLSBhL2Rpci5oCisrKyBiL2Rpci5oCkBAIC0zMyw3ICszMyw4IEBACiAJaW50IG5yLCBhbGxvYzsKIAl1bnNpZ25lZCBpbnQgc2hvd19pZ25vcmVkOjEsCiAJCSAgICAgc2hvd19vdGhlcl9kaXJlY3RvcmllczoxLAotCQkgICAgIGhpZGVfZW1wdHlfZGlyZWN0b3JpZXM6MTsKKwkJICAgICBoaWRlX2VtcHR5X2RpcmVjdG9yaWVzOjEsCisJCSAgICAgbm9fZGlybGlua3M6MTsKIAlzdHJ1Y3QgZGlyX2VudHJ5ICoqZW50cmllczsKIAogCS8qIEV4Y2x1ZGUgaW5mbyAqLwpAQCAtNDgsNyArNDksNyBAQAogI2RlZmluZSBNQVRDSEVEX0VYQUNUTFkgMwogZXh0ZXJuIGludCBtYXRjaF9wYXRoc3BlYyhjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgcHJlZml4LCBjaGFyICpzZWVuKTsKIAotZXh0ZXJuIGludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbik7CitleHRlcm4gaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogZXh0ZXJuIGludCBwdXNoX2V4Y2x1ZGVfcGVyX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gdm9pZCBwb3BfZXhjbHVkZV9wZXJfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2VudHJ5LmMgYi9lbnRyeS5jCmluZGV4IGQ3MmY4MTEuLjgyYmY3MjUgMTAwNjQ0Ci0tLSBhL2VudHJ5LmMKKysrIGIvZW50cnkuYwpAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImJsb2IuaCIKIAotc3RhdGljIHZvaWQgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjaGVja291dCAqc3RhdGUpCitzdGF0aWMgdm9pZCBjcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSkKIHsKIAlpbnQgbGVuID0gc3RybGVuKHBhdGgpOwogCWNoYXIgKmJ1ZiA9IHhtYWxsb2MobGVuICsgMSk7CkBAIC0zMyw3ICszMyw3IEBACiAJY2hhciAqbmFtZTsKIAkKIAlpZiAoIWRpcikKLQkJZGllKCJjYW5ub3Qgb3BlbmRpciAlcyIsIHBhdGgpOworCQlkaWUoImNhbm5vdCBvcGVuZGlyICVzICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCXN0cmNweShwYXRoYnVmLCBwYXRoKTsKIAluYW1lID0gcGF0aGJ1ZiArIHN0cmxlbihwYXRoKTsKIAkqbmFtZSsrID0gJy8nOwpAQCAtNDUsMTUgKzQ1LDE1IEBACiAJCQljb250aW51ZTsKIAkJc3RyY3B5KG5hbWUsIGRlLT5kX25hbWUpOwogCQlpZiAobHN0YXQocGF0aGJ1ZiwgJnN0KSkKLQkJCWRpZSgiY2Fubm90IGxzdGF0ICVzIiwgcGF0aGJ1Zik7CisJCQlkaWUoImNhbm5vdCBsc3RhdCAlcyAoJXMpIiwgcGF0aGJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKIAkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCiAJCQlyZW1vdmVfc3VidHJlZShwYXRoYnVmKTsKIAkJZWxzZSBpZiAodW5saW5rKHBhdGhidWYpKQotCQkJZGllKCJjYW5ub3QgdW5saW5rICVzIiwgcGF0aGJ1Zik7CisJCQlkaWUoImNhbm5vdCB1bmxpbmsgJXMgKCVzKSIsIHBhdGhidWYsIHN0cmVycm9yKGVycm5vKSk7CiAJfQogCWNsb3NlZGlyKGRpcik7CiAJaWYgKHJtZGlyKHBhdGgpKQotCQlkaWUoImNhbm5vdCBybWRpciAlcyIsIHBhdGgpOworCQlkaWUoImNhbm5vdCBybWRpciAlcyAoJXMpIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAogc3RhdGljIGludCBjcmVhdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTYyLDI2ICs2MiwzMyBAQAogCXJldHVybiBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY2hhciAqcGF0aCwgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50IHRvX3RlbXBmaWxlKQorc3RhdGljIHZvaWQgKnJlYWRfYmxvYl9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpuZXcgPSByZWFkX3NoYTFfZmlsZShjZS0+c2hhMSwgJnR5cGUsIHNpemUpOworCisJaWYgKG5ldykgeworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikKKwkJCXJldHVybiBuZXc7CisJCWZyZWUobmV3KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgaW50IHRvX3RlbXBmaWxlKQogewogCWludCBmZDsKLQl2b2lkICpuZXc7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwogCWxvbmcgd3JvdGU7Ci0JZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCi0JbmV3ID0gcmVhZF9zaGExX2ZpbGUoY2UtPnNoYTEsICZ0eXBlLCAmc2l6ZSk7Ci0JaWYgKCFuZXcgfHwgdHlwZSAhPSBPQkpfQkxPQikgewotCQlpZiAobmV3KQotCQkJZnJlZShuZXcpOwotCQlyZXR1cm4gZXJyb3IoImdpdC1jaGVja291dC1pbmRleDogdW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAotCQkJcGF0aCwgc2hhMV90b19oZXgoY2UtPnNoYTEpKTsKLQl9CiAJc3dpdGNoIChudG9obChjZS0+Y2VfbW9kZSkgJiBTX0lGTVQpIHsKLQkJY2hhciAqYnVmOwotCQl1bnNpZ25lZCBsb25nIG5zaXplOworCQljaGFyICpidWYsICpuZXc7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAogCWNhc2UgU19JRlJFRzoKKwkJbmV3ID0gcmVhZF9ibG9iX2VudHJ5KGNlLCBwYXRoLCAmc2l6ZSk7CisJCWlmICghbmV3KQorCQkJcmV0dXJuIGVycm9yKCJnaXQtY2hlY2tvdXQtaW5kZXg6IHVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSBvZiAlcyAoJXMpIiwKKwkJCQlwYXRoLCBzaGExX3RvX2hleChjZS0+c2hhMSkpOwogCQlpZiAodG9fdGVtcGZpbGUpIHsKIAkJCXN0cmNweShwYXRoLCAiLm1lcmdlX2ZpbGVfWFhYWFhYIik7CiAJCQlmZCA9IG1rc3RlbXAocGF0aCk7CkBAIC05NiwxMiArMTAzLDEwIEBACiAJCS8qCiAJCSAqIENvbnZlcnQgZnJvbSBnaXQgaW50ZXJuYWwgZm9ybWF0IHRvIHdvcmtpbmcgdHJlZSBmb3JtYXQKIAkJICovCi0JCWJ1ZiA9IG5ldzsKLQkJbnNpemUgPSBzaXplOwotCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUoY2UtPm5hbWUsICZidWYsICZuc2l6ZSkpIHsKKwkJYnVmID0gY29udmVydF90b193b3JraW5nX3RyZWUoY2UtPm5hbWUsIG5ldywgJnNpemUpOworCQlpZiAoYnVmKSB7CiAJCQlmcmVlKG5ldyk7CiAJCQluZXcgPSBidWY7Ci0JCQlzaXplID0gbnNpemU7CiAJCX0KIAogCQl3cm90ZSA9IHdyaXRlX2luX2Z1bGwoZmQsIG5ldywgc2l6ZSk7CkBAIC0xMTEsNiArMTE2LDEwIEBACiAJCQlyZXR1cm4gZXJyb3IoImdpdC1jaGVja291dC1pbmRleDogdW5hYmxlIHRvIHdyaXRlIGZpbGUgJXMiLCBwYXRoKTsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGTE5LOgorCQluZXcgPSByZWFkX2Jsb2JfZW50cnkoY2UsIHBhdGgsICZzaXplKTsKKwkJaWYgKCFuZXcpCisJCQlyZXR1cm4gZXJyb3IoImdpdC1jaGVja291dC1pbmRleDogdW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAorCQkJCXBhdGgsIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CiAJCWlmICh0b190ZW1wZmlsZSB8fCAhaGFzX3N5bWxpbmtzKSB7CiAJCQlpZiAodG9fdGVtcGZpbGUpIHsKIAkJCQlzdHJjcHkocGF0aCwgIi5tZXJnZV9saW5rX1hYWFhYWCIpOwpAQCAtMTM2LDggKzE0NSwxMyBAQAogCQkJCQkJICJzeW1saW5rICVzICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU19JRkRJUkxOSzoKKwkJaWYgKHRvX3RlbXBmaWxlKQorCQkJcmV0dXJuIGVycm9yKCJnaXQtY2hlY2tvdXQtaW5kZXg6IGNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IHN1YnByb2plY3QgJXMiLCBwYXRoKTsKKwkJaWYgKG1rZGlyKHBhdGgsIDA3NzcpIDwgMCkKKwkJCXJldHVybiBlcnJvcigiZ2l0LWNoZWNrb3V0LWluZGV4OiBjYW5ub3QgY3JlYXRlIHN1YnByb2plY3QgZGlyZWN0b3J5ICVzIiwgcGF0aCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWZyZWUobmV3KTsKIAkJcmV0dXJuIGVycm9yKCJnaXQtY2hlY2tvdXQtaW5kZXg6IHVua25vd24gZmlsZSBtb2RlIGZvciAlcyIsIHBhdGgpOwogCX0KIApAQCAtMTQ5LDcgKzE2Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgpCitpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKQogewogCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVggKyAxXTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKQEAgLTE3OSw2ICsxOTMsOSBAQAogCQkgKi8KIAkJdW5saW5rKHBhdGgpOwogCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJLyogSWYgaXQgaXMgYSBnaXRsaW5rLCBsZWF2ZSBpdCBhbG9uZSEgKi8KKwkJCWlmIChTX0lTRElSTE5LKG50b2hsKGNlLT5jZV9tb2RlKSkpCisJCQkJcmV0dXJuIDA7CiAJCQlpZiAoIXN0YXRlLT5mb3JjZSkKIAkJCQlyZXR1cm4gZXJyb3IoIiVzIGlzIGEgZGlyZWN0b3J5IiwgcGF0aCk7CiAJCQlyZW1vdmVfc3VidHJlZShwYXRoKTsKZGlmZiAtLWdpdCBhL2V4ZWNfY21kLmggYi9leGVjX2NtZC5oCmluZGV4IDk4OTYyMWYuLjg0OWE4MzkgMTAwNjQ0Ci0tLSBhL2V4ZWNfY21kLmgKKysrIGIvZXhlY19jbWQuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19HSVRfRVhFQ19DTURfSF8KLSNkZWZpbmUgX19HSVRfRVhFQ19DTURfSF8KKyNpZm5kZWYgR0lUX0VYRUNfQ01EX0gKKyNkZWZpbmUgR0lUX0VYRUNfQ01EX0gKIAogZXh0ZXJuIHZvaWQgZ2l0X3NldF9leGVjX3BhdGgoY29uc3QgY2hhciAqZXhlY19wYXRoKTsKIGV4dGVybiBjb25zdCBjaGFyKiBnaXRfZXhlY19wYXRoKHZvaWQpOwpAQCAtNyw0ICs3LDQgQEAKIGV4dGVybiBpbnQgZXhlY2xfZ2l0X2NtZChjb25zdCBjaGFyICpjbWQsIC4uLik7CiAKIAotI2VuZGlmIC8qIF9fR0lUX0VYRUNfQ01EX0hfICovCisjZW5kaWYgLyogR0lUX0VYRUNfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2Zhc3QtaW1wb3J0LmMgYi9mYXN0LWltcG9ydC5jCmluZGV4IDZjNDNhMGQuLmI0Y2JjZDkgMTAwNjQ0Ci0tLSBhL2Zhc3QtaW1wb3J0LmMKKysrIGIvZmFzdC1pbXBvcnQuYwpAQCAtNjczLDcgKzY3Myw3IEBACiAKIAlidWYgPSB4bWFsbG9jKGJ1Zl9zeik7CiAJZm9yICg7OykgewotCQlzaXplX3QgbiA9IHhyZWFkKHBhY2tfZmQsIGJ1ZiwgYnVmX3N6KTsKKwkJc3NpemVfdCBuID0geHJlYWQocGFja19mZCwgYnVmLCBidWZfc3opOwogCQlpZiAoIW4pCiAJCQlicmVhazsKIAkJaWYgKG4gPCAwKQpAQCAtOTA0LDYgKzkwNCwxMiBAQAogCWlmIChlLT5vZmZzZXQpIHsKIAkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKIAkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhzaGExLCBwYWNrZWRfZ2l0KSkgeworCQllLT50eXBlID0gdHlwZTsKKwkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCQllLT5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVt0eXBlXSsrOworCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAobGFzdCAmJiBsYXN0LT5kYXRhICYmIGxhc3QtPmRlcHRoIDwgbWF4X2RlcHRoKSB7CkBAIC0yMDIzLDYgKzIwMjksNyBAQAogCQkJZSA9IGluc2VydF9vYmplY3Qoc2hhMSk7CiAJCQllLT50eXBlID0gdHlwZTsKIAkJCWUtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJCWUtPm9mZnNldCA9IDE7IC8qIGp1c3Qgbm90IHplcm8hICovCiAJCX0KIAkJaW5zZXJ0X21hcmsobWFyaywgZSk7CiAJfQpAQCAtMjA4OCw2ICsyMDk1LDcgQEAKIAlpZiAoaSAhPSBhcmdjKQogCQl1c2FnZShmYXN0X2ltcG9ydF91c2FnZSk7CiAKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKIAlzdGFydF9wYWNrZmlsZSgpOwogCWZvciAoOzspIHsKIAkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKZGlmZiAtLWdpdCBhL2dpdC1iaXNlY3Quc2ggYi9naXQtYmlzZWN0LnNoCmluZGV4IDExMzEzYTcuLjFjZDQ1NjEgMTAwNzU1Ci0tLSBhL2dpdC1iaXNlY3Quc2gKKysrIGIvZ2l0LWJpc2VjdC5zaApAQCAtMSwxNSArMSwyNCBAQAogIyEvYmluL3NoCiAKIFVTQUdFPSdbc3RhcnR8YmFkfGdvb2R8bmV4dHxyZXNldHx2aXN1YWxpemV8cmVwbGF5fGxvZ3xydW5dJwotTE9OR19VU0FHRT0nZ2l0IGJpc2VjdCBzdGFydCBbPHBhdGhzcGVjPl0JcmVzZXQgYmlzZWN0IHN0YXRlIGFuZCBzdGFydCBiaXNlY3Rpb24uCi1naXQgYmlzZWN0IGJhZCBbPHJldj5dCQltYXJrIDxyZXY+IGEga25vd24tYmFkIHJldmlzaW9uLgotZ2l0IGJpc2VjdCBnb29kIFs8cmV2Pi4uLl0JbWFyayA8cmV2Pi4uLiBrbm93bi1nb29kIHJldmlzaW9ucy4KLWdpdCBiaXNlY3QgbmV4dAkJCWZpbmQgbmV4dCBiaXNlY3Rpb24gdG8gdGVzdCBhbmQgY2hlY2sgaXQgb3V0LgotZ2l0IGJpc2VjdCByZXNldCBbPGJyYW5jaD5dCWZpbmlzaCBiaXNlY3Rpb24gc2VhcmNoIGFuZCBnbyBiYWNrIHRvIGJyYW5jaC4KLWdpdCBiaXNlY3QgdmlzdWFsaXplICAgICAgICAgICAgc2hvdyBiaXNlY3Qgc3RhdHVzIGluIGdpdGsuCi1naXQgYmlzZWN0IHJlcGxheSA8bG9nZmlsZT4JcmVwbGF5IGJpc2VjdGlvbiBsb2cuCi1naXQgYmlzZWN0IGxvZwkJCXNob3cgYmlzZWN0IGxvZy4KLWdpdCBiaXNlY3QgcnVuIDxjbWQ+Li4uIAl1c2UgPGNtZD4uLi4gdG8gYXV0b21hdGljYWxseSBiaXNlY3QuJworTE9OR19VU0FHRT0nZ2l0IGJpc2VjdCBzdGFydCBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRoc3BlYz4uLi5dCisgICAgICAgIHJlc2V0IGJpc2VjdCBzdGF0ZSBhbmQgc3RhcnQgYmlzZWN0aW9uLgorZ2l0IGJpc2VjdCBiYWQgWzxyZXY+XQorICAgICAgICBtYXJrIDxyZXY+IGEga25vd24tYmFkIHJldmlzaW9uLgorZ2l0IGJpc2VjdCBnb29kIFs8cmV2Pi4uLl0KKyAgICAgICAgbWFyayA8cmV2Pi4uLiBrbm93bi1nb29kIHJldmlzaW9ucy4KK2dpdCBiaXNlY3QgbmV4dAorICAgICAgICBmaW5kIG5leHQgYmlzZWN0aW9uIHRvIHRlc3QgYW5kIGNoZWNrIGl0IG91dC4KK2dpdCBiaXNlY3QgcmVzZXQgWzxicmFuY2g+XQorICAgICAgICBmaW5pc2ggYmlzZWN0aW9uIHNlYXJjaCBhbmQgZ28gYmFjayB0byBicmFuY2guCitnaXQgYmlzZWN0IHZpc3VhbGl6ZQorICAgICAgICBzaG93IGJpc2VjdCBzdGF0dXMgaW4gZ2l0ay4KK2dpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorICAgICAgICByZXBsYXkgYmlzZWN0aW9uIGxvZy4KK2dpdCBiaXNlY3QgbG9nCisgICAgICAgIHNob3cgYmlzZWN0IGxvZy4KK2dpdCBiaXNlY3QgcnVuIDxjbWQ+Li4uCisgICAgICAgIHVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4nCiAKIC4gZ2l0LXNoLXNldHVwCiByZXF1aXJlX3dvcmtfdHJlZQpAQCAtNzAsMTQgKzc5LDQ1IEBACiAJIwogCSMgR2V0IHJpZCBvZiBhbnkgb2xkIGJpc2VjdCBzdGF0ZQogCSMKLQlybSAtZiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9iaXNlY3QiCi0Jcm0gLXJmICIkR0lUX0RJUi9yZWZzL2Jpc2VjdC8iCisJYmlzZWN0X2NsZWFuX3N0YXRlCiAJbWtkaXIgIiRHSVRfRElSL3JlZnMvYmlzZWN0IgotCXsKLQkgICAgcHJpbnRmICJnaXQtYmlzZWN0IHN0YXJ0IgotCSAgICBzcSAiJEAiCi0JfSA+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisKKwkjCisJIyBDaGVjayBmb3Igb25lIGJhZCBhbmQgdGhlbiBzb21lIGdvb2QgcmV2aXNpb25zLgorCSMKKwloYXNfZG91YmxlX2Rhc2g9MAorCWZvciBhcmc7IGRvCisJICAgIGNhc2UgIiRhcmciIGluIC0tKSBoYXNfZG91YmxlX2Rhc2g9MTsgYnJlYWsgOzsgZXNhYworCWRvbmUKKwlvcmlnX2FyZ3M9JChzcSAiJEAiKQorCWJhZF9zZWVuPTAKKwl3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJICAgIGFyZz0iJDEiCisJICAgIGNhc2UgIiRhcmciIGluCisJICAgIC0tKQorCSAgICAgICAgc2hpZnQKKwkJYnJlYWsKKwkJOzsKKwkgICAgKikKKwkgICAgICAgIHJldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRhcmdee2NvbW1pdH0iIDI+L2Rldi9udWxsKSB8fCB7CisJCSAgICB0ZXN0ICRoYXNfZG91YmxlX2Rhc2ggLWVxIDEgJiYKKwkJICAgICAgICBkaWUgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKKwkJICAgIGJyZWFrCisJCX0KKwkJaWYgWyAkYmFkX3NlZW4gLWVxIDAgXTsgdGhlbgorCQkgICAgYmFkX3NlZW49MQorCQkgICAgYmlzZWN0X3dyaXRlX2JhZCAiJHJldiIKKwkJZWxzZQorCQkgICAgYmlzZWN0X3dyaXRlX2dvb2QgIiRyZXYiCisJCWZpCisJICAgICAgICBzaGlmdAorCQk7OworCSAgICBlc2FjCisgICAgICAgIGRvbmUKKwogCXNxICIkQCIgPiIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiCisJZWNobyAiZ2l0LWJpc2VjdCBzdGFydCRvcmlnX2FyZ3MiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisJYmlzZWN0X2F1dG9fbmV4dAogfQogCiBiaXNlY3RfYmFkKCkgewpAQCAtOTAsMTIgKzEzMCwxNyBAQAogCSopCiAJCXVzYWdlIDs7CiAJZXNhYyB8fCBleGl0Ci0JZWNobyAiJHJldiIgPiIkR0lUX0RJUi9yZWZzL2Jpc2VjdC9iYWQiCi0JZWNobyAiIyBiYWQ6ICIkKGdpdC1zaG93LWJyYW5jaCAkcmV2KSA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCWJpc2VjdF93cml0ZV9iYWQgIiRyZXYiCiAJZWNobyAiZ2l0LWJpc2VjdCBiYWQgJHJldiIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKIAliaXNlY3RfYXV0b19uZXh0CiB9CiAKK2Jpc2VjdF93cml0ZV9iYWQoKSB7CisJcmV2PSIkMSIKKwllY2hvICIkcmV2IiA+IiRHSVRfRElSL3JlZnMvYmlzZWN0L2JhZCIKKwllY2hvICIjIGJhZDogIiQoZ2l0LXNob3ctYnJhbmNoICRyZXYpID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCit9CisKIGJpc2VjdF9nb29kKCkgewogCWJpc2VjdF9hdXRvc3RhcnQKICAgICAgICAgY2FzZSAiJCMiIGluCkBAIC0xMDYsMzUgKzE1MSw1NCBAQAogCWZvciByZXYgaW4gJHJldnMKIAlkbwogCQlyZXY9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmV2Xntjb21taXR9IikgfHwgZXhpdAotCQllY2hvICIkcmV2IiA+IiRHSVRfRElSL3JlZnMvYmlzZWN0L2dvb2QtJHJldiIKLQkJZWNobyAiIyBnb29kOiAiJChnaXQtc2hvdy1icmFuY2ggJHJldikgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwkJYmlzZWN0X3dyaXRlX2dvb2QgIiRyZXYiCiAJCWVjaG8gImdpdC1iaXNlY3QgZ29vZCAkcmV2IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCiAJZG9uZQogCWJpc2VjdF9hdXRvX25leHQKIH0KIAorYmlzZWN0X3dyaXRlX2dvb2QoKSB7CisJcmV2PSIkMSIKKwllY2hvICIkcmV2IiA+IiRHSVRfRElSL3JlZnMvYmlzZWN0L2dvb2QtJHJldiIKKwllY2hvICIjIGdvb2Q6ICIkKGdpdC1zaG93LWJyYW5jaCAkcmV2KSA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorfQorCiBiaXNlY3RfbmV4dF9jaGVjaygpIHsKLQluZXh0X29rPW5vCi0gICAgICAgIHRlc3QgLWYgIiRHSVRfRElSL3JlZnMvYmlzZWN0L2JhZCIgJiYKLQljYXNlICIkKGNkICIkR0lUX0RJUiIgJiYgZWNobyByZWZzL2Jpc2VjdC9nb29kLSopIiBpbgotCXJlZnMvYmlzZWN0L2dvb2QtXCopIDs7Ci0JKikgbmV4dF9vaz15ZXMgOzsKLQllc2FjCi0JY2FzZSAiJG5leHRfb2ssJDEiIGluCi0Jbm8sKSBmYWxzZSA7OwotCW5vLGZhaWwpCi0JICAgIFRIRU49JycKLQkgICAgdGVzdCAtZCAiJEdJVF9ESVIvcmVmcy9iaXNlY3QiIHx8IHsKLQkJZWNobyA+JjIgJ1lvdSBuZWVkIHRvIHN0YXJ0IGJ5ICJnaXQgYmlzZWN0IHN0YXJ0Ii4nCi0JCVRIRU49J3RoZW4gJwotCSAgICB9Ci0JICAgIGVjaG8gPiYyICdZb3UgJyRUSEVOJ25lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCcgXAotCQknYW5kIG9uZSBiYWQgcmV2aXNpb25zLicKLQkgICAgZWNobyA+JjIgJyhZb3UgY2FuIHVzZSAiZ2l0IGJpc2VjdCBiYWQiIGFuZCcgXAotCQknImdpdCBiaXNlY3QgZ29vZCIgZm9yIHRoYXQuKScKLQkgICAgZXhpdCAxIDs7CisJbWlzc2luZ19nb29kPSBtaXNzaW5nX2JhZD0KKwlnaXQgc2hvdy1yZWYgLXEgLS12ZXJpZnkgcmVmcy9iaXNlY3QvYmFkIHx8IG1pc3NpbmdfYmFkPXQKKwl0ZXN0IC1uICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0L2dvb2QtKiIpIiB8fCBtaXNzaW5nX2dvb2Q9dAorCisJY2FzZSAiJG1pc3NpbmdfZ29vZCwkbWlzc2luZ19iYWQsJDEiIGluCisJLCwqKQorCQk6IGhhdmUgYm90aCBnb29kIGFuZCBiYWQgLSBvaworCQk7OworCSosKQorCQkjIGRvIG5vdCBoYXZlIGJvdGggYnV0IG5vdCBhc2tlZCB0byBmYWlsIC0ganVzdCByZXBvcnQuCisJCWZhbHNlCisJCTs7CisJdCwsZ29vZCkKKwkJIyBoYXZlIGJhZCBidXQgbm90IGdvb2QuICB3ZSBjb3VsZCBiaXNlY3QgYWx0aG91Z2gKKwkJIyB0aGlzIGlzIGxlc3Mgb3B0aW11bS4KKwkJZWNobyA+JjIgJ1dhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LicKKwkJaWYgdGVzdCAtdCAwCisJCXRoZW4KKwkJCXByaW50ZiA+JjIgJ0FyZSB5b3Ugc3VyZSBbWS9uXT8gJworCQkJY2FzZSAiJChyZWFkIHllc25vKSIgaW4gW05uXSopIGV4aXQgMSA7OyBlc2FjCisJCWZpCisJCTogYmlzZWN0IHdpdGhvdXQgZ29vZC4uLgorCQk7OwogCSopCi0JICAgIHRydWUgOzsKKwkJVEhFTj0nJworCQl0ZXN0IC1kICIkR0lUX0RJUi9yZWZzL2Jpc2VjdCIgfHwgeworCQkJZWNobyA+JjIgJ1lvdSBuZWVkIHRvIHN0YXJ0IGJ5ICJnaXQgYmlzZWN0IHN0YXJ0Ii4nCisJCQlUSEVOPSd0aGVuICcKKwkJfQorCQllY2hvID4mMiAnWW91ICckVEhFTiduZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QnIFwKKwkJCSdhbmQgb25lIGJhZCByZXZpc2lvbnMuJworCQllY2hvID4mMiAnKFlvdSBjYW4gdXNlICJnaXQgYmlzZWN0IGJhZCIgYW5kJyBcCisJCQknImdpdCBiaXNlY3QgZ29vZCIgZm9yIHRoYXQuKScKKwkJZXhpdCAxIDs7CiAJZXNhYwogfQogCkBAIC0xNDUsMjcgKzIwOSwzMiBAQAogYmlzZWN0X25leHQoKSB7CiAgICAgICAgIGNhc2UgIiQjIiBpbiAwKSA7OyAqKSB1c2FnZSA7OyBlc2FjCiAJYmlzZWN0X2F1dG9zdGFydAotCWJpc2VjdF9uZXh0X2NoZWNrIGZhaWwKKwliaXNlY3RfbmV4dF9jaGVjayBnb29kCisKIAliYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvYmlzZWN0L2JhZCkgJiYKLQlnb29kPSQoZ2l0LXJldi1wYXJzZSAtLXNxIC0tcmV2cy1vbmx5IC0tbm90IFwKLQkJJChjZCAiJEdJVF9ESVIiICYmIGxzIHJlZnMvYmlzZWN0L2dvb2QtKikpICYmCi0JcmV2PSQoZXZhbCAiZ2l0LXJldi1saXN0IC0tYmlzZWN0ICRnb29kICRiYWQgLS0gJChjYXQgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIpIikgfHwgZXhpdAotCWlmIFsgLXogIiRyZXYiIF07IHRoZW4KLQkgICAgZWNobyAiJGJhZCB3YXMgYm90aCBnb29kIGFuZCBiYWQiCi0JICAgIGV4aXQgMQorCWdvb2Q9JChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSdeJShvYmplY3RuYW1lKScgXAorCQkicmVmcy9iaXNlY3QvZ29vZC0qIiB8IHRyICdbXDAxMl0nICcgJykgJiYKKwlldmFsPSJnaXQtcmV2LWxpc3QgLS1iaXNlY3QtdmFycyAkZ29vZCAkYmFkIC0tIiAmJgorCWV2YWw9IiRldmFsICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiKSIgJiYKKwlldmFsPSQoZXZhbCAiJGV2YWwiKSAmJgorCWV2YWwgIiRldmFsIiB8fCBleGl0CisKKwlpZiBbIC16ICIkYmlzZWN0X3JldiIgXTsgdGhlbgorCQllY2hvICIkYmFkIHdhcyBib3RoIGdvb2QgYW5kIGJhZCIKKwkJZXhpdCAxCiAJZmkKLQlpZiBbICIkcmV2IiA9ICIkYmFkIiBdOyB0aGVuCi0JICAgIGVjaG8gIiRyZXYgaXMgZmlyc3QgYmFkIGNvbW1pdCIKLQkgICAgZ2l0LWRpZmYtdHJlZSAtLXByZXR0eSAkcmV2Ci0JICAgIGV4aXQgMAorCWlmIFsgIiRiaXNlY3RfcmV2IiA9ICIkYmFkIiBdOyB0aGVuCisJCWVjaG8gIiRiaXNlY3RfcmV2IGlzIGZpcnN0IGJhZCBjb21taXQiCisJCWdpdC1kaWZmLXRyZWUgLS1wcmV0dHkgJGJpc2VjdF9yZXYKKwkJZXhpdCAwCiAJZmkKLQlucj0kKGV2YWwgImdpdC1yZXYtbGlzdCAkcmV2ICRnb29kIC0tICQoY2F0ICRHSVRfRElSL0JJU0VDVF9OQU1FUykiIHwgd2MgLWwpIHx8IGV4aXQKLQllY2hvICJCaXNlY3Rpbmc6ICRuciByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMiCi0JZWNobyAiJHJldiIgPiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9uZXctYmlzZWN0IgorCisJZWNobyAiQmlzZWN0aW5nOiAkYmlzZWN0X25yIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyIKKwllY2hvICIkYmlzZWN0X3JldiIgPiIkR0lUX0RJUi9yZWZzL2hlYWRzL25ldy1iaXNlY3QiCiAJZ2l0IGNoZWNrb3V0IC1xIG5ldy1iaXNlY3QgfHwgZXhpdAogCW12ICIkR0lUX0RJUi9yZWZzL2hlYWRzL25ldy1iaXNlY3QiICIkR0lUX0RJUi9yZWZzL2hlYWRzL2Jpc2VjdCIgJiYKIAlHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvYmlzZWN0Ci0JZ2l0LXNob3ctYnJhbmNoICIkcmV2IgorCWdpdC1zaG93LWJyYW5jaCAiJGJpc2VjdF9yZXYiCiB9CiAKIGJpc2VjdF92aXN1YWxpemUoKSB7CkBAIC0xOTAsMTQgKzI1OSwxOSBAQAogCSAgICB1c2FnZSA7OwogCWVzYWMKIAlpZiBnaXQgY2hlY2tvdXQgIiRicmFuY2giOyB0aGVuCi0JCXJtIC1mciAiJEdJVF9ESVIvcmVmcy9iaXNlY3QiCi0JCXJtIC1mICIkR0lUX0RJUi9yZWZzL2hlYWRzL2Jpc2VjdCIgIiRHSVRfRElSL2hlYWQtbmFtZSIKLQkJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9MT0ciCi0JCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiCi0JCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgorCQlybSAtZiAiJEdJVF9ESVIvaGVhZC1uYW1lIgorCQliaXNlY3RfY2xlYW5fc3RhdGUKIAlmaQogfQogCitiaXNlY3RfY2xlYW5fc3RhdGUoKSB7CisJcm0gLWZyICIkR0lUX0RJUi9yZWZzL2Jpc2VjdCIKKwlybSAtZiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9iaXNlY3QiCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9MT0ciCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1JVTiIKK30KKwogYmlzZWN0X3JlcGxheSAoKSB7CiAJdGVzdCAtciAiJDEiIHx8IHsKIAkJZWNobyA+JjIgImNhbm5vdCByZWFkICQxIGZvciByZXBsYXlpbmciCmRpZmYgLS1naXQgYS9naXQtY2hlY2tvdXQuc2ggYi9naXQtY2hlY2tvdXQuc2gKaW5kZXggYTczOTBlOC4uZWQ3YzJjNSAxMDA3NTUKLS0tIGEvZ2l0LWNoZWNrb3V0LnNoCisrKyBiL2dpdC1jaGVja291dC5zaApAQCAtMTcsNiArMTcsNyBAQAogbmV3YnJhbmNoX2xvZz0KIG1lcmdlPQogcXVpZXQ9Cit2PS12CiBMRj0nCiAnCiB3aGlsZSBbICIkIyIgIT0gIjAiIF07IGRvCkBAIC00Nyw2ICs0OCw3IEBACiAJCTs7CiAJIi1xIikKIAkJcXVpZXQ9MQorCQl2PQogCQk7OwogCS0tKQogCQlicmVhawpAQCAtMTcwLDcgKzE3Miw3IEBACiAJfQogfQogCi1pZiB0ZXN0IC16ICIkYnJhbmNoJG5ld2JyYW5jaCIgJiYgdGVzdCAiJG5ldyIgIT0gIiRvbGQiCitpZiB0ZXN0IC16ICIkYnJhbmNoJG5ld2JyYW5jaCIgJiYgdGVzdCAiJG5ld19uYW1lIiAhPSAiJG9sZF9uYW1lIgogdGhlbgogCWRldGFjaGVkPSIkbmV3IgogCWlmIHRlc3QgLW4gIiRvbGRicmFuY2giICYmIHRlc3QgLXogIiRxdWlldCIKQEAgLTE4MCw3ICsxODIsNyBAQAogKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZToKICAgZ2l0IGNoZWNrb3V0IC1iIDxuZXdfYnJhbmNoX25hbWU+IgogCWZpCi1lbGlmIHRlc3QgLXogIiRvbGRicmFuY2giCitlbGlmIHRlc3QgLXogIiRvbGRicmFuY2giICYmIHRlc3QgIiRuZXciICE9ICIkb2xkIgogdGhlbgogCWRlc2NyaWJlX2RldGFjaGVkX2hlYWQgJ1ByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzJyAiJG9sZCIKIGZpCkBAIC0xOTcsNyArMTk5LDcgQEAKIAogaWYgWyAiJGZvcmNlIiBdCiB0aGVuCi0gICAgZ2l0LXJlYWQtdHJlZSAtLXJlc2V0IC11ICRuZXcKKyAgICBnaXQtcmVhZC10cmVlICR2IC0tcmVzZXQgLXUgJG5ldwogZWxzZQogICAgIGdpdC11cGRhdGUtaW5kZXggLS1yZWZyZXNoID4vZGV2L251bGwKICAgICBtZXJnZV9lcnJvcj0kKGdpdC1yZWFkLXRyZWUgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSAkb2xkICRuZXcgMj4mMSkgfHwgKApAQCAtMjEwLDcgKzIxMiw3IEBACiAJIyBNYXRjaCB0aGUgaW5kZXggdG8gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGRvIGEgdGhyZWUtd2F5LgogICAgIAlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSB8IGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1zdGRpbiAmJgogCXdvcms9YGdpdCB3cml0ZS10cmVlYCAmJgotCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSAkbmV3IHx8IGV4aXQKKwlnaXQgcmVhZC10cmVlICR2IC0tcmVzZXQgLXUgJG5ldyB8fCBleGl0CiAKIAlldmFsIEdJVEhFQURfJG5ldz0nJHtuZXdfbmFtZTotJHticmFuY2g6LSRuZXd9fScgJiYKIAlldmFsIEdJVEhFQURfJHdvcms9bG9jYWwgJiYKQEAgLTIyMSw3ICsyMjMsNyBAQAogCSMgdGhpcyBpcyBub3QgYSByZWFsIG1lcmdlIGJlZm9yZSBjb21taXR0aW5nLCBidXQganVzdCBjYXJyeWluZwogCSMgdGhlIHdvcmtpbmcgdHJlZSBjaGFuZ2VzIGFsb25nLgogCXVubWVyZ2VkPWBnaXQgbHMtZmlsZXMgLXVgCi0JZ2l0IHJlYWQtdHJlZSAtLXJlc2V0ICRuZXcKKwlnaXQgcmVhZC10cmVlICR2IC0tcmVzZXQgJG5ldwogCWNhc2UgIiR1bm1lcmdlZCIgaW4KIAknJykJOzsKIAkqKQpkaWZmIC0tZ2l0IGEvZ2l0LWNsZWFuLnNoIGIvZ2l0LWNsZWFuLnNoCmluZGV4IGRiMTc3YTcuLjI5OTMwOWQgMTAwNzU1Ci0tLSBhL2dpdC1jbGVhbi5zaAorKysgYi9naXQtY2xlYW4uc2gKQEAgLTMsOSArMywxMCBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBQYXZlbCBSb3NraW4KICMKIAotVVNBR0U9IlstZF0gWy1uXSBbLXFdIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCitVU0FHRT0iWy1kXSBbLWZdIFstbl0gWy1xXSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgogTE9OR19VU0FHRT0nQ2xlYW4gdW50cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CiAJLWQJcmVtb3ZlIGRpcmVjdG9yaWVzIGFzIHdlbGwKKwktZglvdmVycmlkZSBjbGVhbi5yZXF1aXJlRm9yY2UgYW5kIGNsZWFuIGFueXdheQogCS1uIAlkb24nXCcndCByZW1vdmUgYW55dGhpbmcsIGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUKIAktcQliZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzCiAJLXgJcmVtb3ZlIGlnbm9yZWQgZmlsZXMgYXMgd2VsbApAQCAtMTksNiArMjAsNyBAQAogaWdub3JlZD0KIGlnbm9yZWRvbmx5PQogY2xlYW5kaXI9CitkaXNhYmxlZD0iYGdpdC1jb25maWcgLS1ib29sIGNsZWFuLnJlcXVpcmVGb3JjZWAiCiBybWY9InJtIC1mIC0tIgogcm1yZj0icm0gLXJmIC0tIgogcm1fcmVmdXNlPSJlY2hvIE5vdCByZW1vdmluZyIKQEAgLTMwLDcgKzMyLDExIEBACiAJLWQpCiAJCWNsZWFuZGlyPTEKIAkJOzsKKwktZikKKwkJZGlzYWJsZWQ9CisJCTs7CiAJLW4pCisJCWRpc2FibGVkPQogCQlybWY9ImVjaG8gV291bGQgcmVtb3ZlIgogCQlybXJmPSJlY2hvIFdvdWxkIHJlbW92ZSIKIAkJcm1fcmVmdXNlPSJlY2hvIFdvdWxkIG5vdCByZW1vdmUiCkBAIC01OCw2ICs2NCwxMSBAQAogCXNoaWZ0CiBkb25lCiAKK2lmIFsgIiRkaXNhYmxlZCIgPSB0cnVlIF07IHRoZW4KKwllY2hvICJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IGFuZCAtbiBvciAtZiBub3QgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorCWV4aXQgMQorZmkKKwogY2FzZSAiJGlnbm9yZWQsJGlnbm9yZWRvbmx5IiBpbgogCTEsMSkgdXNhZ2U7OwogZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LWNvbW1pdC5zaCBiL2dpdC1jb21taXQuc2gKaW5kZXggMjkyY2Y5Ni4uZjI4ZmMyNCAxMDA3NTUKLS0tIGEvZ2l0LWNvbW1pdC5zaAorKysgYi9naXQtY29tbWl0LnNoCkBAIC0zNzAsOCArMzcwLDggQEAKIAkJIyB0aGUgc2FtZSB3YXkuCiAJCWlmIHRlc3QgLXogIiRpbml0aWFsX2NvbW1pdCIKIAkJdGhlbgotCQkJY3AgIiRUSElTX0lOREVYIiAiJFRNUF9JTkRFWCIKLQkJCUdJVF9JTkRFWF9GSUxFPSIkVE1QX0lOREVYIiBnaXQtcmVhZC10cmVlIC1pIC1tIEhFQUQKKwkJCUdJVF9JTkRFWF9GSUxFPSIkVEhJU19JTkRFWCIgXAorCQkJZ2l0LXJlYWQtdHJlZSAtLWluZGV4LW91dHB1dD0iJFRNUF9JTkRFWCIgLWkgLW0gSEVBRAogCQllbHNlCiAJCQlybSAtZiAiJFRNUF9JTkRFWCIKIAkJZmkgfHwgZXhpdApAQCAtNjQ5LDggKzY0OSw5IEBACiAJZmkKIAlpZiB0ZXN0IC16ICIkcXVpZXQiCiAJdGhlbgorCQljb21taXQ9YGdpdC1kaWZmLXRyZWUgLS1hbHdheXMgLS1zaG9ydHN0YXQgLS1wcmV0dHk9ImZvcm1hdDolaDogJXMiXAorCQkgICAgICAgLS1zdW1tYXJ5IC0tcm9vdCBIRUFEIC0tYAogCQllY2hvICJDcmVhdGVkJHtpbml0aWFsX2NvbW1pdDorIGluaXRpYWx9IGNvbW1pdCAkY29tbWl0IgotCQlnaXQtZGlmZi10cmVlIC0tc2hvcnRzdGF0IC0tc3VtbWFyeSAtLXJvb3QgLS1uby1jb21taXQtaWQgSEVBRCAtLQogCWZpCiBmaQogCmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCmluZGV4IGUzY2YzNzAuLjJjODQwMTYgMTAwNjQ0Ci0tLSBhL2dpdC1jb21wYXQtdXRpbC5oCisrKyBiL2dpdC1jb21wYXQtdXRpbC5oCkBAIC0xMyw2ICsxMywxNCBAQAogCiAjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCiAKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBUWVBFT0YoeCkgKF9fdHlwZW9mX18oeCkpCisjZWxzZQorI2RlZmluZSBUWVBFT0YoeCkKKyNlbmRpZgorCisjZGVmaW5lIE1TQih4LCBiaXRzKSAoKHgpICYgVFlQRU9GKHgpKH4wVUxMIDw8IChzaXplb2YoeCkgKiA4IC0gKGJpdHMpKSkpCisKICNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBnbGliYzIgYW5kIEFJWCA1LjNMIG5lZWQgNTAwLCBPcGVuQlNEIG5lZWRzIDYwMCBmb3IgU19JU0xOSygpICovCiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMSAvKiBBSVggNS4zTCBuZWVkcyB0aGlzICovCmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKaW5kZXggMjU4MTZjNS4uMDg3ZTNhYiAxMDA3NTUKLS0tIGEvZ2l0LWN2c3NlcnZlci5wZXJsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtOTEsNyArOTEsOSBAQAogIyBpZiB3ZSBhcmUgY2FsbGVkIHdpdGggYSBwc2VydmVyIGFyZ3VtZW50LAogIyBkZWFsIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIGNhdCBiZWZvcmUgZW50ZXJpbmcgdGhlCiAjIG1haW4gbG9vcAorJHN0YXRlLT57bWV0aG9kfSA9ICdleHQnOwogaWYgKEBBUkdWICYmICRBUkdWWzBdIGVxICdwc2VydmVyJykgeworICAgICRzdGF0ZS0+e21ldGhvZH0gPSAncHNlcnZlcic7CiAgICAgbXkgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKICAgICB1bmxlc3MoICRsaW5lIGVxICdCRUdJTiBBVVRIIFJFUVVFU1QnKSB7CiAgICAgICAgZGllICJFIERvIG5vdCB1bmRlcnN0YW5kICRsaW5lIC0gZXhwZWN0aW5nIEJFR0lOIEFVVEggUkVRVUVTVFxuIjsKQEAgLTE4MSwxMSArMTgzLDE4IEBACiAgICAgfQogICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAZ2l0dmFycyApCiAgICAgewotICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lID1+IC9eKC4qPylcLiguKj8pPSguKikkLyApOwotICAgICAgICAkY2ZnLT57JDF9eyQyfSA9ICQzOworICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lID1+IC9eKC4qPylcLiguKj8pKD86XC4oLio/KSk/PSguKikkLyApOworICAgICAgICB1bmxlc3MgKCQzKSB7CisgICAgICAgICAgICAkY2ZnLT57JDF9eyQyfSA9ICQ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGNmZy0+eyQxfXskMn17JDN9ID0gJDQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICB1bmxlc3MgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317ZW5hYmxlZH0gKSBhbmQgJGNmZy0+e2dpdGN2c317ZW5hYmxlZH0gPX4gL15ccyooMXx0cnVlfHllcylccyokL2kgKQorICAgIHVubGVzcyAoICgkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtlbmFibGVkfQorCSAgICAgIGFuZCAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtlbmFibGVkfSA9fiAvXlxzKigxfHRydWV8eWVzKVxzKiQvaSkKKwkgICAgIG9yICgkY2ZnLT57Z2l0Y3ZzfXtlbmFibGVkfQorCSAgICAgIGFuZCAkY2ZnLT57Z2l0Y3ZzfXtlbmFibGVkfSA9fiAvXlxzKigxfHRydWV8eWVzKVxzKiQvaSkgKQogICAgIHsKICAgICAgICAgcHJpbnQgIkUgR0lUQ1ZTIGVtdWxhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkIG9uIHRoaXMgcmVwb1xuIjsKICAgICAgICAgcHJpbnQgIkUgdGhlIHJlcG8gY29uZmlnIGZpbGUgbmVlZHMgYSBbZ2l0Y3ZzXSBzZWN0aW9uIGFkZGVkLCBhbmQgdGhlIHBhcmFtZXRlciAnZW5hYmxlZCcgc2V0IHRvIDFcbiI7CkBAIC0xOTQsOSArMjAzLDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e2xvZ2ZpbGV9ICkgKQorICAgIG15ICRsb2dmaWxlID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17bG9nZmlsZX0gfHwgJGNmZy0+e2dpdGN2c317bG9nZmlsZX07CisgICAgaWYgKCAkbG9nZmlsZSApCiAgICAgewotICAgICAgICAkbG9nLT5zZXRmaWxlKCRjZmctPntnaXRjdnN9e2xvZ2ZpbGV9KTsKKyAgICAgICAgJGxvZy0+c2V0ZmlsZSgkbG9nZmlsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgJGxvZy0+bm9maWxlKCk7CiAgICAgfQpAQCAtMzUwLDEyICszNjAsNTIgQEAKIAogICAgIGFyZ3NwbGl0KCJhZGQiKTsKIAorICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIGFyZ3Nmcm9tZGlyKCR1cGRhdGVyKTsKKwogICAgIG15ICRhZGRjb3VudCA9IDA7CiAKICAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKICAgICB7CiAgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CiAKKyAgICAgICAgbXkgJG1ldGEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUpOworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKCR3cmV2ICYmICRtZXRhICYmICgkd3JldiA8IDApKQorICAgICAgICB7CisgICAgICAgICAgICAjIHByZXZpb3VzbHkgcmVtb3ZlZCBmaWxlLCBhZGQgYmFjaworICAgICAgICAgICAgJGxvZy0+aW5mbygiYWRkZWQgZmlsZSAkZmlsZW5hbWUgd2FzIHByZXZpb3VzbHkgcmVtb3ZlZCwgc2VuZCAxLiRtZXRhLT57cmV2aXNpb259Iik7CisKKyAgICAgICAgICAgIHByaW50ICJNVCArdXBkYXRlZFxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCB0ZXh0IFUgXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIC11cGRhdGVkXG4iOworCisgICAgICAgICAgICB1bmxlc3MgKCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXstbn0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsMSk7CisKKyAgICAgICAgICAgICAgICBwcmludCAiQ3JlYXRlZCAkZGlycGFydFxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKKyAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIik7CisgICAgICAgICAgICAgICAgcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiB1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfSIpOworICAgICAgICAgICAgICAgIHByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKyAgICAgICAgICAgICAgICAjIHRyYW5zbWl0IGZpbGUKKyAgICAgICAgICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKICAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9ICkgKQogICAgICAgICB7CiAgICAgICAgICAgICBwcmludCAiRSBjdnMgYWRkOiBub3RoaW5nIGtub3duIGFib3V0IGAkZmlsZW5hbWUnXG4iOwpAQCAtMTAyNyw3ICsxMDc3LDcgQEAKIAogICAgICRsb2ctPmluZm8oInJlcV9jaSA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKIAotICAgIGlmICggQEFSR1YgJiYgJEFSR1ZbMF0gZXEgJ3BzZXJ2ZXInKQorICAgIGlmICggJHN0YXRlLT57bWV0aG9kfSBlcSAncHNlcnZlcicpCiAgICAgewogICAgICAgICBwcmludCAiZXJyb3IgMSBwc2VydmVyIGFjY2VzcyBjYW5ub3QgY29tbWl0XG4iOwogICAgICAgICBleGl0OwpAQCAtMjEzMiwyNSArMjE4Miw0MCBAQAogCiAgICAgYmxlc3MgJHNlbGYsICRjbGFzczsKIAotICAgICRzZWxmLT57ZGJkaXJ9ID0gJGNvbmZpZyAuICIvIjsKLSAgICBkaWUgIkRhdGFiYXNlIGRpciAnJHNlbGYtPntkYmRpcn0nIGlzbid0IGEgZGlyZWN0b3J5IiB1bmxlc3MgKCBkZWZpbmVkKCRzZWxmLT57ZGJkaXJ9KSBhbmQgLWQgJHNlbGYtPntkYmRpcn0gKTsKLQogICAgICRzZWxmLT57bW9kdWxlfSA9ICRtb2R1bGU7Ci0gICAgJHNlbGYtPntmaWxlfSA9ICRzZWxmLT57ZGJkaXJ9IC4gIi9naXRjdnMuJG1vZHVsZS5zcWxpdGUiOwotCiAgICAgJHNlbGYtPntnaXRfcGF0aH0gPSAkY29uZmlnIC4gIi8iOwogCiAgICAgJHNlbGYtPntsb2d9ID0gJGxvZzsKIAogICAgIGRpZSAiR2l0IHJlcG8gJyRzZWxmLT57Z2l0X3BhdGh9JyBkb2Vzbid0IGV4aXN0IiB1bmxlc3MgKCAtZCAkc2VsZi0+e2dpdF9wYXRofSApOwogCi0gICAgJHNlbGYtPntkYmh9ID0gREJJLT5jb25uZWN0KCJkYmk6U1FMaXRlOmRibmFtZT0iIC4gJHNlbGYtPntmaWxlfSwiIiwiIik7CisgICAgJHNlbGYtPntkYmRyaXZlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYmRyaXZlcn0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJkcml2ZXJ9IHx8ICJTUUxpdGUiOworICAgICRzZWxmLT57ZGJuYW1lfSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2RibmFtZX0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJuYW1lfSB8fCAiJUdnaXRjdnMuJW0uc3FsaXRlIjsKKyAgICAkc2VsZi0+e2RidXNlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYnVzZXJ9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RidXNlcn0gfHwgIiI7CisgICAgJHNlbGYtPntkYnBhc3N9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJwYXNzfSB8fAorICAgICAgICAkY2ZnLT57Z2l0Y3ZzfXtkYnBhc3N9IHx8ICIiOworICAgIG15ICVtYXBwaW5nID0gKCBtID0+ICRtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgIGEgPT4gJHN0YXRlLT57bWV0aG9kfSwKKyAgICAgICAgICAgICAgICAgICAgdSA9PiBnZXRsb2dpbiB8fCBnZXRwd3VpZCgkPCkgfHwgJDwsCisgICAgICAgICAgICAgICAgICAgIEcgPT4gJHNlbGYtPntnaXRfcGF0aH0sCisgICAgICAgICAgICAgICAgICAgIGcgPT4gbWFuZ2xlX2Rpcm5hbWUoJHNlbGYtPntnaXRfcGF0aH0pLAorICAgICAgICAgICAgICAgICAgICApOworICAgICRzZWxmLT57ZGJuYW1lfSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworICAgICRzZWxmLT57ZGJ1c2VyfSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworCisgICAgZGllICJJbnZhbGlkIGNoYXIgJzonIGluIGRiZHJpdmVyIiBpZiAkc2VsZi0+e2RiZHJpdmVyfSA9fiAvOi87CisgICAgZGllICJJbnZhbGlkIGNoYXIgJzsnIGluIGRibmFtZSIgaWYgJHNlbGYtPntkYm5hbWV9ID1+IC87LzsKKyAgICAkc2VsZi0+e2RiaH0gPSBEQkktPmNvbm5lY3QoImRiaTokc2VsZi0+e2RiZHJpdmVyfTpkYm5hbWU9JHNlbGYtPntkYm5hbWV9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPntkYnVzZXJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e2RicGFzc30pOworICAgIGRpZSAiRXJyb3IgY29ubmVjdGluZyB0byBkYXRhYmFzZVxuIiB1bmxlc3MgZGVmaW5lZCAkc2VsZi0+e2RiaH07CiAKICAgICAkc2VsZi0+e3RhYmxlc30gPSB7fTsKLSAgICBmb3JlYWNoIG15ICR0YWJsZSAoICRzZWxmLT57ZGJofS0+dGFibGVzICkKKyAgICBmb3JlYWNoIG15ICR0YWJsZSAoIGtleXMgJXskc2VsZi0+e2RiaH0tPnRhYmxlX2luZm8odW5kZWYsdW5kZWYsdW5kZWYsJ1RBQkxFJyktPmZldGNoYWxsX2hhc2hyZWYoJ1RBQkxFX05BTUUnKX0gKQogICAgIHsKLSAgICAgICAgJHRhYmxlID1+IHMvXiIvLzsKLSAgICAgICAgJHRhYmxlID1+IHMvIiQvLzsKICAgICAgICAgJHNlbGYtPnt0YWJsZXN9eyR0YWJsZX0gPSAxOwogICAgIH0KIApAQCAtMjg0OCw1ICsyOTEzLDE5IEBACiAgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOwogfQogCis9aGVhZDIgbWFuZ2xlX2Rpcm5hbWUKKworY3JlYXRlIGEgc3RyaW5nIGZyb20gYSBkaXJlY3RvcnkgbmFtZSB0aGF0IGlzIHN1aXRhYmxlIHRvIHVzZSBhcworcGFydCBvZiBhIGZpbGVuYW1lLCBtYWlubHkgYnkgY29udmVydGluZyBhbGwgY2hhcnMgZXhjZXB0IFx3Li0gdG8gXworCis9Y3V0CitzdWIgbWFuZ2xlX2Rpcm5hbWUgeworICAgIG15ICRkaXJuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRkaXJuYW1lOworCisgICAgJGRpcm5hbWUgPX4gcy9bXlx3Li1dL18vZzsKKworICAgIHJldHVybiAkZGlybmFtZTsKK30KIAogMTsKZGlmZiAtLWdpdCBhL2dpdC1mZXRjaC5zaCBiL2dpdC1mZXRjaC5zaAppbmRleCBmZDcwNjk2Li4wZTA1Y2YxIDEwMDc1NQotLS0gYS9naXQtZmV0Y2guc2gKKysrIGIvZ2l0LWZldGNoLnNoCkBAIC0yNiw2ICsyNiw3IEBACiBzaGFsbG93X2RlcHRoPQogbm9fcHJvZ3Jlc3M9CiB0ZXN0IC10IDEgfHwgbm9fcHJvZ3Jlc3M9LS1uby1wcm9ncmVzcworcXVpZXQ9CiB3aGlsZSBjYXNlICIkIyIgaW4gMCkgYnJlYWsgOzsgZXNhYwogZG8KIAljYXNlICIkMSIgaW4KQEAgLTU2LDYgKzU3LDkgQEAKIAktLXVwZGF0ZS1oZWFkLW98LS11cGRhdGUtaGVhZC1vaykKIAkJdXBkYXRlX2hlYWRfb2s9dAogCQk7OworCS1xfC0tcXwtLXF1fC0tcXVpfC0tcXVpZXwtLXF1aWV0KQorCQlxdWlldD0tLXF1aWV0CisJCTs7CiAJLXZ8LS12ZXJib3NlKQogCQl2ZXJib3NlPVllcwogCQk7OwpAQCAtMTczLDkgKzE3NywzNCBAQAogCSAgICBnaXQtYnVuZGxlIHVuYnVuZGxlICIkcmVtb3RlIiAkcnJlZiB8fAogCSAgICBlY2hvIGZhaWxlZCAiJHJlbW90ZSIKIAllbHNlCi0JICBnaXQtZmV0Y2gtcGFjayAtLXRoaW4gJGV4ZWMgJGtlZXAgJHNoYWxsb3dfZGVwdGggJG5vX3Byb2dyZXNzIFwKLQkJIiRyZW1vdGUiICRycmVmIHx8Ci0JICBlY2hvIGZhaWxlZCAiJHJlbW90ZSIKKwkJaWYJdGVzdCAtZCAiJHJlbW90ZSIgJiYKKworCQkJIyBUaGUgcmVtb3RlIG1pZ2h0IGJlIG91ciBhbHRlcm5hdGUuICBXaXRoCisJCQkjIHRoaXMgb3B0aW1pemF0aW9uIHdlIHdpbGwgYnlwYXNzIGZldGNoLXBhY2sKKwkJCSMgYWx0b2dldGhlciwgd2hpY2ggbWVhbnMgd2UgY2Fubm90IGJlIGRvaW5nCisJCQkjIHRoZSBzaGFsbG93IHN0dWZmIGF0IGFsbC4KKwkJCXRlc3QgISAtZiAiJEdJVF9ESVIvc2hhbGxvdyIgJiYKKwkJCXRlc3QgLXogIiRzaGFsbG93X2RlcHRoIiAmJgorCisJCQkjIFNlZSBpZiBhbGwgb2Ygd2hhdCB3ZSBhcmUgZ29pbmcgdG8gZmV0Y2ggYXJlCisJCQkjIGNvbm5lY3RlZCB0byBvdXIgcmVwb3NpdG9yeSdzIHRpcHMsIGluIHdoaWNoCisJCQkjIGNhc2Ugd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IGZldGNoLgorCQkJdGhlaXJzPSQoZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwgXAorCQkJCWdpdC1mZXRjaC0tdG9vbCAtcyBwaWNrLXJyZWYgIiRycmVmIiAiLSIpICYmCisKKwkJCSMgVGhpcyB3aWxsIGJhcmYgd2hlbiAkdGhlaXJzIHJlYWNoIGFuIG9iamVjdCB0aGF0CisJCQkjIHdlIGRvIG5vdCBoYXZlIGluIG91ciByZXBvc2l0b3J5LiAgT3RoZXJ3aXNlLAorCQkJIyB3ZSBhbHJlYWR5IGhhdmUgZXZlcnl0aGluZyB0aGUgZmV0Y2ggd291bGQgYnJpbmcgaW4uCisJCQlnaXQtcmV2LWxpc3QgLS1vYmplY3RzICR0aGVpcnMgLS1ub3QgLS1hbGwgXAorCQkJCT4vZGV2L251bGwgMj4vZGV2L251bGwKKwkJdGhlbgorCQkJZWNobyAiJGxzX3JlbW90ZV9yZXN1bHQiIHwgXAorCQkJCWdpdC1mZXRjaC0tdG9vbCBwaWNrLXJyZWYgIiRycmVmIiAiLSIKKwkJZWxzZQorCQkJZ2l0LWZldGNoLXBhY2sgLS10aGluICRleGVjICRrZWVwICRzaGFsbG93X2RlcHRoIFwKKwkJCQkkcXVpZXQgJG5vX3Byb2dyZXNzICIkcmVtb3RlIiAkcnJlZiB8fAorCQkJZWNobyBmYWlsZWQgIiRyZW1vdGUiCisJCWZpCiAJZmkKICAgICAgICkgfAogICAgICAgKApAQCAtMjM1LDIwICsyNjQsMTMgQEAKIAkgIGZpCiAKIAkgICMgRmluZCAkcmVtb3RlX25hbWUgZnJvbSBscy1yZW1vdGUgb3V0cHV0LgotCSAgaGVhZD0kKAotCQlJRlM9JwknCi0JCWVjaG8gIiRsc19yZW1vdGVfcmVzdWx0IiB8Ci0JCXdoaWxlIHJlYWQgc2hhMSBuYW1lCi0JCWRvCi0JCQl0ZXN0ICJ6JG5hbWUiID0gInokcmVtb3RlX25hbWUiIHx8IGNvbnRpbnVlCi0JCQllY2hvICIkc2hhMSIKLQkJCWJyZWFrCi0JCWRvbmUKLQkgICkKKwkgIGhlYWQ9JChlY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfCBcCisJCWdpdC1mZXRjaC0tdG9vbCAtcyBwaWNrLXJyZWYgIiRyZW1vdGVfbmFtZSIgIi0iKQogCSAgZXhwciAieiRoZWFkIiA6ICJ6JF94NDBcJCIgPi9kZXYvbnVsbCB8fAogCQlkaWUgIk5vIHN1Y2ggcmVmICRyZW1vdGVfbmFtZSBhdCAkcmVtb3RlIgogCSAgZWNobyA+JjIgIkZldGNoaW5nICRyZW1vdGVfbmFtZSBmcm9tICRyZW1vdGUgdXNpbmcgJHByb3RvIgotCSAgZ2l0LWh0dHAtZmV0Y2ggLXYgLWEgIiRoZWFkIiAiJHJlbW90ZSIgfHwgZXhpdAorCSAgY2FzZSAiJHF1aWV0IiBpbiAnJykgdj0tdiA7OyAqKSB2PSA7OyBlc2FjCisJICBnaXQtaHR0cC1mZXRjaCAkdiAtYSAiJGhlYWQiICIkcmVtb3RlIiB8fCBleGl0CiAJICA7OwogICAgICAgcnN5bmM6Ly8qKQogCSAgdGVzdCAtbiAiJHNoYWxsb3dfZGVwdGgiICYmCkBAIC0yNTcsOCArMjc5LDkgQEAKIAkgIHJzeW5jIC1MIC1xICIkcmVtb3RlLyRyZW1vdGVfbmFtZSIgIiRUTVBfSEVBRCIgfHwgZXhpdCAxCiAJICBoZWFkPSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBUTVBfSEVBRCkKIAkgIHJtIC1mICIkVE1QX0hFQUQiCisJICBjYXNlICIkcXVpZXQiIGluICcnKSB2PS12IDs7ICopIHY9IDs7IGVzYWMKIAkgIHRlc3QgIiRyc3luY19zbHVycGVkX29iamVjdHMiIHx8IHsKLQkgICAgICByc3luYyAtYXYgLS1pZ25vcmUtZXhpc3RpbmcgLS1leGNsdWRlIGluZm8gXAorCSAgICAgIHJzeW5jIC1hICR2IC0taWdub3JlLWV4aXN0aW5nIC0tZXhjbHVkZSBpbmZvIFwKIAkJICAiJHJlbW90ZS9vYmplY3RzLyIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWS8iIHx8IGV4aXQKIAogCSAgICAgICMgTG9vayBhdCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBmb3IgcnN5bmMgLS0gaHR0cCB3aWxsCmRpZmYgLS1naXQgYS9naXQtZ3VpL01ha2VmaWxlIGIvZ2l0LWd1aS9NYWtlZmlsZQppbmRleCBiODI3ODllLi5iMjlkN2QxIDEwMDY0NAotLS0gYS9naXQtZ3VpL01ha2VmaWxlCisrKyBiL2dpdC1ndWkvTWFrZWZpbGUKQEAgLTI4LDYgKzI4LDggQEAKIAlRVUlFVF9CVUlMVF9JTiA9IEBlY2hvICcgICAnIEJVSUxUSU4gJEA7CiBlbmRpZgogCitUQ0xUS19QQVRIID89IHdpc2gKKwogaWZlcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSxzKSxzKQogUVVJRVRfR0VOID0KIFFVSUVUX0JVSUxUX0lOID0KQEAgLTM2LDEwICszOCwxMiBAQAogREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCiBnaXRleGVjZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjZGlyKSkKIFNIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorVENMVEtfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVENMVEtfUEFUSCkpCiAKICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgOiAlIDogJS5zaAogCSQoUVVJRVRfR0VOKXJtIC1mICRAICRAKyAmJiBcCiAJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkJLWUgJ3N8XmV4ZWMgd2lzaCAiJCQwInxleGVjICQoc3Vic3QgfCwnXHwnLCQoVENMVEtfUEFUSF9TUSkpICIkJDAifCcgXAogCQktZSAncy9AQEdJVEdVSV9WRVJTSU9OQEAvJChHSVRHVUlfVkVSU0lPTikvZycgXAogCQkkQC5zaCA+JEArICYmIFwKIAljaG1vZCAreCAkQCsgJiYgXApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9naXQtZ3VpLnNoIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCmluZGV4IDdjYmM5NzcuLjk0MDY3Y2MgMTAwNzU1Ci0tLSBhL2dpdC1ndWkvZ2l0LWd1aS5zaAorKysgYi9naXQtZ3VpL2dpdC1ndWkuc2gKQEAgLTI0Miw2ICsyNDIsOCBAQAogCWlmIHtbcmVwb25hbWVdIG5lIHt9fSB7CiAJCWFwcGVuZCB0aXRsZSAiIChbcmVwb25hbWVdKSIKIAl9CisJb3B0aW9uIGFkZCAqRGlhbG9nLm1zZy5mb250IGZvbnRfdWkKKwlvcHRpb24gYWRkICpCdXR0b24uZm9udCBmb250X3VpCiAJc2V0IGNtZCBbbGlzdCB0a19tZXNzYWdlQm94IFwKIAkJLWljb24gZXJyb3IgXAogCQktdHlwZSBvayBcCkBAIC0yNTgsNiArMjYwLDggQEAKIAlpZiB7W3JlcG9uYW1lXSBuZSB7fX0gewogCQlhcHBlbmQgdGl0bGUgIiAoW3JlcG9uYW1lXSkiCiAJfQorCW9wdGlvbiBhZGQgKkRpYWxvZy5tc2cuZm9udCBmb250X3VpCisJb3B0aW9uIGFkZCAqQnV0dG9uLmZvbnQgZm9udF91aQogCXNldCBjbWQgW2xpc3QgdGtfbWVzc2FnZUJveCBcCiAJCS1pY29uIHdhcm5pbmcgXAogCQktdHlwZSBvayBcCkBAIC0yNzQsNiArMjc4LDggQEAKIAlpZiB7W3JlcG9uYW1lXSBuZSB7fX0gewogCQlhcHBlbmQgdGl0bGUgIiAoW3JlcG9uYW1lXSkiCiAJfQorCW9wdGlvbiBhZGQgKkRpYWxvZy5tc2cuZm9udCBmb250X3VpCisJb3B0aW9uIGFkZCAqQnV0dG9uLmZvbnQgZm9udF91aQogCXRrX21lc3NhZ2VCb3ggXAogCQktcGFyZW50ICRwYXJlbnQgXAogCQktaWNvbiBpbmZvIFwKQEAgLTI4Nyw2ICsyOTMsOCBAQAogCWlmIHtbcmVwb25hbWVdIG5lIHt9fSB7CiAJCWFwcGVuZCB0aXRsZSAiIChbcmVwb25hbWVdKSIKIAl9CisJb3B0aW9uIGFkZCAqRGlhbG9nLm1zZy5mb250IGZvbnRfdWkKKwlvcHRpb24gYWRkICpCdXR0b24uZm9udCBmb250X3VpCiAJcmV0dXJuIFt0a19tZXNzYWdlQm94IFwKIAkJLXBhcmVudCAuIFwKIAkJLWljb24gcXVlc3Rpb24gXApAQCAtNzI3LDEyICs3MzUsOSBAQAogCiBbc2hvcnRfcGF0aCAkcGF0aF0gaGFzIG5vIGNoYW5nZXMuCiAKLVRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQKLWJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCB0aGUgY29udGVudCB3aXRoaW4KLXRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC4KK1RoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0IHRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuCiAKLUEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQKLW90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlIHRoZSBzYW1lIHN0YXRlLiIKK0EgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgdGhlIHNhbWUgc3RhdGUuIgogCiAJY2xlYXJfZGlmZgogCWRpc3BsYXlfZmlsZSAkcGF0aCBfXwpAQCAtMTAzMyw4ICsxMDM4LDcgQEAKIAlpZiB7W2xsZW5ndGggJFBBUkVOVF0gPT0gMH0gewogCQllcnJvcl9wb3B1cCB7VGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC4KIAotWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LgotVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzIHRvIGFtZW5kLgorWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzIHRvIGFtZW5kLgogfQogCQlyZXR1cm4KIAl9CkBAIC0xMDQzLDEwICsxMDQ3LDcgQEAKIAlpZiB7JGN1clR5cGUgZXEge21lcmdlfX0gewogCQllcnJvcl9wb3B1cCB7Q2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuCiAKLVlvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0Ci1oYXMgbm90IGJlZW4gZnVsbHkgY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZAotdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZQotY3VycmVudCBtZXJnZSBhY3Rpdml0eS4KK1lvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSBjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgY3VycmVudCBtZXJnZSBhY3Rpdml0eS4KIH0KIAkJcmV0dXJuCiAJfQpAQCAtMTEzNiw5ICsxMTM3LDcgQEAKIAl9IGVsc2VpZiB7JGNvbW1pdF90eXBlIG5lICRjdXJUeXBlIHx8ICRIRUFEIG5lICRjdXJIRUFEfSB7CiAJCWluZm9fcG9wdXAge0xhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLgogCi1Bbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkKLXNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZAotYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLgorQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuCiAKIFRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LgogfQpAQCAtMTE1OSw4ICsxMTU4LDcgQEAKIAkJVT8gewogCQkJZXJyb3JfcG9wdXAgIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuCiAKLUZpbGUgW3Nob3J0X3BhdGggJHBhdGhdIGhhcyBtZXJnZSBjb25mbGljdHMuCi1Zb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIGFkZCB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KK0ZpbGUgW3Nob3J0X3BhdGggJHBhdGhdIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIGFkZCB0aGUgZmlsZSBiZWZvcmUgY29tbWl0dGluZy4KICIKIAkJCXVubG9ja19pbmRleAogCQkJcmV0dXJuCkBAIC0xMjc2LDggKzEyNzQsNyBAQAogCQlpZiB7JHRyZWVfaWQgZXEgJG9sZF90cmVlfSB7CiAJCQlpbmZvX3BvcHVwIHtObyBjaGFuZ2VzIHRvIGNvbW1pdC4KIAotTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQKLXdhcyBub3QgYSBtZXJnZSBjb21taXQuCitObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LgogCiBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuCiB9CkBAIC0yMTE2LDcgKzIxMTMsMTAgQEAKIAkJLXZhbHVlIGhlYWQgXAogCQktdmFyaWFibGUgY3JlYXRlX2JyYW5jaF9yZXZ0eXBlIFwKIAkJLWZvbnQgZm9udF91aQotCWV2YWwgdGtfb3B0aW9uTWVudSAkdy5mcm9tLmhlYWRfbSBjcmVhdGVfYnJhbmNoX2hlYWQgJGFsbF9oZWFkcworCXNldCBsYnJhbmNobSBbZXZhbCB0a19vcHRpb25NZW51ICR3LmZyb20uaGVhZF9tIGNyZWF0ZV9icmFuY2hfaGVhZCBcCisJCSRhbGxfaGVhZHNdCisJJGxicmFuY2htIGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCisJJHcuZnJvbS5oZWFkX20gY29uZmlndXJlIC1mb250IGZvbnRfdWkKIAlncmlkICR3LmZyb20uaGVhZF9yICR3LmZyb20uaGVhZF9tIC1zdGlja3kgdwogCXNldCBhbGxfdHJhY2tpbmdzIFthbGxfdHJhY2tpbmdfYnJhbmNoZXNdCiAJaWYgeyRhbGxfdHJhY2tpbmdzIG5lIHt9fSB7CkBAIC0yMTI2LDkgKzIxMjYsMTEgQEAKIAkJCS12YWx1ZSB0cmFja2luZyBcCiAJCQktdmFyaWFibGUgY3JlYXRlX2JyYW5jaF9yZXZ0eXBlIFwKIAkJCS1mb250IGZvbnRfdWkKLQkJZXZhbCB0a19vcHRpb25NZW51ICR3LmZyb20udHJhY2tpbmdfbSBcCisJCXNldCB0YnJhbmNobSBbZXZhbCB0a19vcHRpb25NZW51ICR3LmZyb20udHJhY2tpbmdfbSBcCiAJCQljcmVhdGVfYnJhbmNoX3RyYWNraW5naGVhZCBcCi0JCQkkYWxsX3RyYWNraW5ncworCQkJJGFsbF90cmFja2luZ3NdCisJCSR0YnJhbmNobSBjb25maWd1cmUgLWZvbnQgZm9udF91aQorCQkkdy5mcm9tLnRyYWNraW5nX20gY29uZmlndXJlIC1mb250IGZvbnRfdWkKIAkJZ3JpZCAkdy5mcm9tLnRyYWNraW5nX3IgJHcuZnJvbS50cmFja2luZ19tIC1zdGlja3kgdwogCX0KIAlzZXQgYWxsX3RhZ3MgW2xvYWRfYWxsX3RhZ3NdCkBAIC0yMTM5LDkgKzIxNDEsMTEgQEAKIAkJCS12YWx1ZSB0YWcgXAogCQkJLXZhcmlhYmxlIGNyZWF0ZV9icmFuY2hfcmV2dHlwZSBcCiAJCQktZm9udCBmb250X3VpCi0JCWV2YWwgdGtfb3B0aW9uTWVudSAkdy5mcm9tLnRhZ19tIFwKKwkJc2V0IHRhZ3NtIFtldmFsIHRrX29wdGlvbk1lbnUgJHcuZnJvbS50YWdfbSBcCiAJCQljcmVhdGVfYnJhbmNoX3RhZyBcCi0JCQkkYWxsX3RhZ3MKKwkJCSRhbGxfdGFnc10KKwkJJHRhZ3NtIGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCisJCSR3LmZyb20udGFnX20gY29uZmlndXJlIC1mb250IGZvbnRfdWkKIAkJZ3JpZCAkdy5mcm9tLnRhZ19yICR3LmZyb20udGFnX20gLXN0aWNreSB3CiAJfQogCXJhZGlvYnV0dG9uICR3LmZyb20uZXhwX3IgXApAQCAtMjMzNSw3ICsyMzM5LDExIEBACiAJCS12YWx1ZSBoZWFkIFwKIAkJLXZhcmlhYmxlIGRlbGV0ZV9icmFuY2hfY2hlY2t0eXBlIFwKIAkJLWZvbnQgZm9udF91aQotCWV2YWwgdGtfb3B0aW9uTWVudSAkdy52YWxpZGF0ZS5oZWFkX20gZGVsZXRlX2JyYW5jaF9oZWFkICRhbGxfaGVhZHMKKwlzZXQgbWVyZ2VkbG9jYWxtIFtldmFsIHRrX29wdGlvbk1lbnUgJHcudmFsaWRhdGUuaGVhZF9tIFwKKwkJZGVsZXRlX2JyYW5jaF9oZWFkIFwKKwkJJGFsbF9oZWFkc10KKwkkbWVyZ2VkbG9jYWxtIGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCisJJHcudmFsaWRhdGUuaGVhZF9tIGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCiAJZ3JpZCAkdy52YWxpZGF0ZS5oZWFkX3IgJHcudmFsaWRhdGUuaGVhZF9tIC1zdGlja3kgdwogCXNldCBhbGxfdHJhY2tpbmdzIFthbGxfdHJhY2tpbmdfYnJhbmNoZXNdCiAJaWYgeyRhbGxfdHJhY2tpbmdzIG5lIHt9fSB7CkBAIC0yMzQ1LDkgKzIzNTMsMTEgQEAKIAkJCS12YWx1ZSB0cmFja2luZyBcCiAJCQktdmFyaWFibGUgZGVsZXRlX2JyYW5jaF9jaGVja3R5cGUgXAogCQkJLWZvbnQgZm9udF91aQotCQlldmFsIHRrX29wdGlvbk1lbnUgJHcudmFsaWRhdGUudHJhY2tpbmdfbSBcCisJCXNldCBtZXJnZWR0cmFja20gW2V2YWwgdGtfb3B0aW9uTWVudSAkdy52YWxpZGF0ZS50cmFja2luZ19tIFwKIAkJCWRlbGV0ZV9icmFuY2hfdHJhY2tpbmdoZWFkIFwKLQkJCSRhbGxfdHJhY2tpbmdzCisJCQkkYWxsX3RyYWNraW5nc10KKwkJJG1lcmdlZHRyYWNrbSBjb25maWd1cmUgLWZvbnQgZm9udF91aQorCQkkdy52YWxpZGF0ZS50cmFja2luZ19tIGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCiAJCWdyaWQgJHcudmFsaWRhdGUudHJhY2tpbmdfciAkdy52YWxpZGF0ZS50cmFja2luZ19tIC1zdGlja3kgdwogCX0KIAlyYWRpb2J1dHRvbiAkdy52YWxpZGF0ZS5hbHdheXNfciBcCkBAIC0yMzgyLDkgKzIzOTIsNyBAQAogCX0gZWxzZWlmIHskY29tbWl0X3R5cGUgbmUgJGN1clR5cGUgfHwgJEhFQUQgbmUgJGN1ckhFQUR9IHsKIAkJaW5mb19wb3B1cCB7TGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuCiAKLUFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeQotc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgcmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkCi1iZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLgorQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLgogCiBUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy4KIH0KQEAgLTI0NzUsMTIgKzI0ODMsOSBAQAogCWlmIHtbY2F0Y2gge2dpdCBzeW1ib2xpYy1yZWYgSEVBRCAicmVmcy9oZWFkcy8kbmV3X2JyYW5jaCJ9IGVycl19IHsKIAkJZXJyb3JfcG9wdXAgIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guCiAKLVRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuCi1XZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvCi11cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuCitUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgeW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuCiAKLVRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgW2FwcG5hbWVdIHdpbGwgbm93Ci1jbG9zZSBhbmQgZ2l2ZSB1cC4KK1RoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgW2FwcG5hbWVdIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLgogCiAkZXJyIgogCQlkb19xdWl0CkBAIC0yNjg0LDEwICsyNjg5LDEyIEBACiAJZnJhbWUgJHcuYnV0dG9ucwogCWJ1dHRvbiAkdy5idXR0b25zLmNyZWF0ZSAtdGV4dCBQdXNoIFwKIAkJLWZvbnQgZm9udF91aSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtsaXN0IHN0YXJ0X3B1c2hfYW55d2hlcmVfYWN0aW9uICR3XQogCXBhY2sgJHcuYnV0dG9ucy5jcmVhdGUgLXNpZGUgcmlnaHQKIAlidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQge0NhbmNlbH0gXAogCQktZm9udCBmb250X3VpIFwKKwkJLWRlZmF1bHQgbm9ybWFsIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKQEAgLTI3MjEsNyArMjcyOCwxMCBAQAogCQkJLXZhbHVlIHJlbW90ZSBcCiAJCQktdmFyaWFibGUgcHVzaF91cmx0eXBlIFwKIAkJCS1mb250IGZvbnRfdWkKLQkJZXZhbCB0a19vcHRpb25NZW51ICR3LmRlc3QucmVtb3RlX20gcHVzaF9yZW1vdGUgJGFsbF9yZW1vdGVzCisJCXNldCByZW1tZW51IFtldmFsIHRrX29wdGlvbk1lbnUgJHcuZGVzdC5yZW1vdGVfbSBwdXNoX3JlbW90ZSBcCisJCQkkYWxsX3JlbW90ZXNdCisJCSRyZW1tZW51IGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCisJCSR3LmRlc3QucmVtb3RlX20gY29uZmlndXJlIC1mb250IGZvbnRfdWkKIAkJZ3JpZCAkdy5kZXN0LnJlbW90ZV9yICR3LmRlc3QucmVtb3RlX20gLXN0aWNreSB3CiAJCWlmIHtbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkYWxsX3JlbW90ZXMgb3JpZ2luXSAhPSAtMX0gewogCQkJc2V0IHB1c2hfcmVtb3RlIG9yaWdpbgpAQCAtMjc3NSw4ICsyNzg1LDkgQEAKIAlzZXQgcHVzaF90aGluIDAKIAlzZXQgcHVzaF90YWdzIDAKIAotCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3IgorCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdy5idXR0b25zLmNyZWF0ZSIKIAliaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKwliaW5kICR3IDxLZXktUmV0dXJuPiBbbGlzdCBzdGFydF9wdXNoX2FueXdoZXJlX2FjdGlvbiAkd10KIAl3bSB0aXRsZSAkdyAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogUHVzaCIKIAl0a3dhaXQgd2luZG93ICR3CiB9CkBAIC0yNzkxLDggKzI4MDIsNyBAQAogCWlmIHtbc3RyaW5nIG1hdGNoIGFtZW5kKiAkY29tbWl0X3R5cGVdfSB7CiAJCWluZm9fcG9wdXAge0Nhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy4KIAotWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZQotc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuCitZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLgogfQogCQlyZXR1cm4gMAogCX0KQEAgLTI4MDYsOSArMjgxNiw3IEBACiAJaWYgeyRjb21taXRfdHlwZSBuZSAkY3VyVHlwZSB8fCAkSEVBRCBuZSAkY3VySEVBRH0gewogCQlpbmZvX3BvcHVwIHtMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS4KIAotQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5Ci1zaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQKLWJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuCitBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgcmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuCiAKIFRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LgogfQpAQCAtMjgyNyw5ICsyODM1LDcgQEAKIAogRmlsZSBbc2hvcnRfcGF0aCAkcGF0aF0gaGFzIG1lcmdlIGNvbmZsaWN0cy4KIAotWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBhZGQgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8KLWNvbXBsZXRlIHRoZSBjdXJyZW50IG1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UKLWJlZ2luIGFub3RoZXIgbWVyZ2UuCitZb3UgbXVzdCByZXNvbHZlIHRoZW0sIGFkZCB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuCiAiCiAJCQl1bmxvY2tfaW5kZXgKIAkJCXJldHVybiAwCkBAIC0yODM5LDkgKzI4NDUsNyBAQAogCiBGaWxlIFtzaG9ydF9wYXRoICRwYXRoXSBpcyBtb2RpZmllZC4KIAotWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlCi1zdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBhYm9ydAotYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KK1lvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gd2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLgogIgogCQkJdW5sb2NrX2luZGV4CiAJCQlyZXR1cm4gMApAQCAtMjkxNywxMyArMjkyMSwxMSBAQAogCiBZb3VyIG1lcmdlIG9mICRyZXZjbnQgYnJhbmNoZXMgaGFzIGZhaWxlZC4KIAotVGhlcmUgYXJlIGZpbGUtbGV2ZWwgY29uZmxpY3RzIGJldHdlZW4gdGhlCi1icmFuY2hlcyB3aGljaCBtdXN0IGJlIHJlc29sdmVkIG1hbnVhbGx5LgorVGhlcmUgYXJlIGZpbGUtbGV2ZWwgY29uZmxpY3RzIGJldHdlZW4gdGhlIGJyYW5jaGVzIHdoaWNoIG11c3QgYmUgcmVzb2x2ZWQgbWFudWFsbHkuCiAKIFRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIG5vdyBiZSByZXNldC4KIAotWW91IGNhbiBhdHRlbXB0IHRoaXMgbWVyZ2UgYWdhaW4KLWJ5IG1lcmdpbmcgb25seSBvbmUgYnJhbmNoIGF0IGEgdGltZS4iICR3CitZb3UgY2FuIGF0dGVtcHQgdGhpcyBtZXJnZSBhZ2FpbiBieSBtZXJnaW5nIG9ubHkgb25lIGJyYW5jaCBhdCBhIHRpbWUuIiAkdwogCiAJCQlzZXQgZmQgW29wZW4gInwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQiIHJdCiAJCQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gYmluYXJ5CkBAIC0zMDM2LDggKzMwMzgsNyBAQAogCiAJaWYge1thc2tfcG9wdXAgIkFib3J0ICRvcD8KIAotQWJvcnRpbmcgdGhlIGN1cnJlbnQgJG9wIHdpbGwgY2F1c2UKLSpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC4KK0Fib3J0aW5nIHRoZSBjdXJyZW50ICRvcCB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC4KIAogQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCAkb3A/Il0gZXEge3llc319IHsKIAkJc2V0IGZkIFtvcGVuICJ8IGdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEIiByXQpAQCAtNDEwOSw2ICs0MTEwLDcgQEAKIAkJaWYge1t3aW5mbyBleGlzdHMgJHddfSB7CiAJCQkkdy5tLnMgY29uZiAtYmFja2dyb3VuZCBncmVlbiAtdGV4dCB7U3VjY2Vzc30KIAkJCSR3Lm9rIGNvbmYgLXN0YXRlIG5vcm1hbAorCQkJZm9jdXMgJHcub2sKIAkJfQogCX0gZWxzZSB7CiAJCWlmIHshW3dpbmZvIGV4aXN0cyAkd119IHsKQEAgLTQxMTYsNiArNDExOCw3IEBACiAJCX0KIAkJJHcubS5zIGNvbmYgLWJhY2tncm91bmQgcmVkIC10ZXh0IHtFcnJvcjogQ29tbWFuZCBGYWlsZWR9CiAJCSR3Lm9rIGNvbmYgLXN0YXRlIG5vcm1hbAorCQlmb2N1cyAkdy5vawogCX0KIAogCWFycmF5IHVuc2V0IGNvbnNvbGVfY3IgJHcKQEAgLTQxODMsOSArNDE4NiwxMSBAQAogCWZyYW1lICR3LmJ1dHRvbnMgLWJvcmRlciAxCiAJYnV0dG9uICR3LmJ1dHRvbnMuY2xvc2UgLXRleHQgQ2xvc2UgXAogCQktZm9udCBmb250X3VpIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlidXR0b24gJHcuYnV0dG9ucy5nYyAtdGV4dCB7Q29tcHJlc3MgRGF0YWJhc2V9IFwKIAkJLWZvbnQgZm9udF91aSBcCisJCS1kZWZhdWx0IG5vcm1hbCBcCiAJCS1jb21tYW5kICJkZXN0cm95ICR3O2RvX2djIgogCXBhY2sgJHcuYnV0dG9ucy5jbG9zZSAtc2lkZSByaWdodAogCXBhY2sgJHcuYnV0dG9ucy5nYyAtc2lkZSBsZWZ0CkBAIC00MjE0LDcgKzQyMTksNyBAQAogCX0KIAlwYWNrICR3LnN0YXQgLXBhZHkgMTAgLXBhZHggMTAKIAotCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKKwliaW5kICR3IDxWaXNpYmlsaXR5PiAiZ3JhYiAkdzsgZm9jdXMgJHcuYnV0dG9ucy5jbG9zZSIKIAliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQogCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtsaXN0IGRlc3Ryb3kgJHddCiAJd20gdGl0bGUgJHcgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6IERhdGFiYXNlIFN0YXRpc3RpY3MiCkBAIC00NTExLDYgKzQ1MTYsNyBAQAogCWZyYW1lICR3LmJ1dHRvbnMKIAlidXR0b24gJHcuYnV0dG9ucy5jbG9zZSAtdGV4dCB7Q2xvc2V9IFwKIAkJLWZvbnQgZm9udF91aSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCiAJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCiAJcGFjayAkdy5idXR0b25zLmNsb3NlIC1zaWRlIHJpZ2h0CiAJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCkBAIC00NTU2LDggKzQ1NjIsOSBAQAogCQljbGlwYm9hcmQgYXBwZW5kIC1mb3JtYXQgU1RSSU5HIC10eXBlIFNUUklORyAtLSBcWyR3LnZlcnMgY2dldCAtdGV4dFxdCiAJIgogCi0JYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3IgorCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdy5idXR0b25zLmNsb3NlIgogCWJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorCWJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgogCWJpbmRfYnV0dG9uMyAkdy52ZXJzICJ0a19wb3B1cCAkdy5jdHhtICVYICVZOyBncmFiICR3OyBmb2N1cyAkdyIKIAl3bSB0aXRsZSAkdyAiQWJvdXQgW2FwcG5hbWVdIgogCXRrd2FpdCB3aW5kb3cgJHcKQEAgLTQ1OTQsMTQgKzQ2MDEsMTcgQEAKIAlmcmFtZSAkdy5idXR0b25zCiAJYnV0dG9uICR3LmJ1dHRvbnMucmVzdG9yZSAtdGV4dCB7UmVzdG9yZSBEZWZhdWx0c30gXAogCQktZm9udCBmb250X3VpIFwKKwkJLWRlZmF1bHQgbm9ybWFsIFwKIAkJLWNvbW1hbmQgZG9fcmVzdG9yZV9kZWZhdWx0cwogCXBhY2sgJHcuYnV0dG9ucy5yZXN0b3JlIC1zaWRlIGxlZnQKIAlidXR0b24gJHcuYnV0dG9ucy5zYXZlIC10ZXh0IFNhdmUgXAogCQktZm9udCBmb250X3VpIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKIAkJLWNvbW1hbmQgW2xpc3QgZG9fc2F2ZV9jb25maWcgJHddCiAJcGFjayAkdy5idXR0b25zLnNhdmUgLXNpZGUgcmlnaHQKIAlidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQge0NhbmNlbH0gXAogCQktZm9udCBmb250X3VpIFwKKwkJLWRlZmF1bHQgbm9ybWFsIFwKIAkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KIAlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKIAlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKQEAgLTQ2ODgsOSArNDY5OCwxMSBAQAogCQlmcmFtZSAkdy5nbG9iYWwuJG5hbWUKIAkJbGFiZWwgJHcuZ2xvYmFsLiRuYW1lLmwgLXRleHQgIiR0ZXh0OiIgLWZvbnQgZm9udF91aQogCQlwYWNrICR3Lmdsb2JhbC4kbmFtZS5sIC1zaWRlIGxlZnQgLWFuY2hvciB3IC1maWxsIHgKLQkJZXZhbCB0a19vcHRpb25NZW51ICR3Lmdsb2JhbC4kbmFtZS5mYW1pbHkgXAorCQlzZXQgZm9udG1lbnUgW2V2YWwgdGtfb3B0aW9uTWVudSAkdy5nbG9iYWwuJG5hbWUuZmFtaWx5IFwKIAkJCWdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KSBcCi0JCQkkYWxsX2ZvbnRzCisJCQkkYWxsX2ZvbnRzXQorCQkkdy5nbG9iYWwuJG5hbWUuZmFtaWx5IGNvbmZpZ3VyZSAtZm9udCBmb250X3VpCisJCSRmb250bWVudSBjb25maWd1cmUgLWZvbnQgZm9udF91aQogCQlzcGluYm94ICR3Lmdsb2JhbC4kbmFtZS5zaXplIFwKIAkJCS10ZXh0dmFyaWFibGUgZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKSBcCiAJCQktZnJvbSAyIC10byA4MCAtaW5jcmVtZW50IDEgXApAQCAtNDcwMiw4ICs0NzE0LDkgQEAKIAkJcGFjayAkdy5nbG9iYWwuJG5hbWUgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CiAJfQogCi0JYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3IgorCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdy5idXR0b25zLnNhdmUiCiAJYmluZCAkdyA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHciCisJYmluZCAkdyA8S2V5LVJldHVybj4gW2xpc3QgZG9fc2F2ZV9jb25maWcgJHddCiAJd20gdGl0bGUgJHcgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6IE9wdGlvbnMiCiAJdGt3YWl0IHdpbmRvdyAkdwogfQpAQCAtNTA4NSwxOCArNTA5OCwxOCBAQAogIyAtLSBNZW51IEJhcgogIwogbWVudSAubWJhciAtdGVhcm9mZiAwCi0ubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgUmVwb3NpdG9yeSAtbWVudSAubWJhci5yZXBvc2l0b3J5Ci0ubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgRWRpdCAtbWVudSAubWJhci5lZGl0CisubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgUmVwb3NpdG9yeSAtbWVudSAubWJhci5yZXBvc2l0b3J5IC1mb250IGZvbnRfdWkKKy5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBFZGl0IC1tZW51IC5tYmFyLmVkaXQgLWZvbnQgZm9udF91aQogaWYge1tpc19lbmFibGVkIGJyYW5jaF19IHsKLQkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgQnJhbmNoIC1tZW51IC5tYmFyLmJyYW5jaAorCS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBCcmFuY2ggLW1lbnUgLm1iYXIuYnJhbmNoIC1mb250IGZvbnRfdWkKIH0KIGlmIHtbaXNfZW5hYmxlZCBtdWx0aWNvbW1pdF0gfHwgW2lzX2VuYWJsZWQgc2luZ2xlY29tbWl0XX0gewotCS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBDb21taXQgLW1lbnUgLm1iYXIuY29tbWl0CisJLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIENvbW1pdCAtbWVudSAubWJhci5jb21taXQgLWZvbnQgZm9udF91aQogfQogaWYge1tpc19lbmFibGVkIHRyYW5zcG9ydF19IHsKLQkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgTWVyZ2UgLW1lbnUgLm1iYXIubWVyZ2UKLQkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgRmV0Y2ggLW1lbnUgLm1iYXIuZmV0Y2gKLQkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgUHVzaCAtbWVudSAubWJhci5wdXNoCisJLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIE1lcmdlIC1tZW51IC5tYmFyLm1lcmdlIC1mb250IGZvbnRfdWkKKwkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgRmV0Y2ggLW1lbnUgLm1iYXIuZmV0Y2ggLWZvbnQgZm9udF91aQorCS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBQdXNoIC1tZW51IC5tYmFyLnB1c2ggLWZvbnQgZm9udF91aQogfQogLiBjb25maWd1cmUgLW1lbnUgLm1iYXIKIApAQCAtNTM3Miw3ICs1Mzg1LDcgQEAKIAogIyAtLSBIZWxwIE1lbnUKICMKLS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBIZWxwIC1tZW51IC5tYmFyLmhlbHAKKy5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBIZWxwIC1tZW51IC5tYmFyLmhlbHAgLWZvbnQgZm9udF91aQogbWVudSAubWJhci5oZWxwCiAKIGlmIHshW2lzX01hY09TWF19IHsKQEAgLTU5NTUsNyArNTk2OCw3IEBACiBzZXQgZmlsZV9saXN0cygkdWlfaW5kZXgpIFtsaXN0XQogc2V0IGZpbGVfbGlzdHMoJHVpX3dvcmtkaXIpIFtsaXN0XQogCi13bSB0aXRsZSAuICJbYXBwbmFtZV0gKFtmaWxlIG5vcm1hbGl6ZSBbZmlsZSBkaXJuYW1lIFtnaXRkaXJdXV0pIgord20gdGl0bGUgLiAiW2FwcG5hbWVdIChbcmVwb25hbWVdKSBbZmlsZSBub3JtYWxpemUgW2ZpbGUgZGlybmFtZSBbZ2l0ZGlyXV1dIgogZm9jdXMgLWZvcmNlICR1aV9jb21tCiAKICMgLS0gV2FybiB0aGUgdXNlciBhYm91dCBlbnZpcm9ubWVudGFsIHByb2JsZW1zLiAgQ3lnd2luJ3MgVGNsCkBAIC02MDM0LDkgKzYwNDcsNyBAQAogCQlpZiB7W2Fza19wb3B1cCBcCiAJCQkiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgJG9iamVjdHNfY3VycmVudCBsb29zZSBvYmplY3RzLgogCi1UbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5Ci1yZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyB0aGUgZGF0YWJhc2UKLXdoZW4gbW9yZSB0aGFuICRvYmplY3RfbGltaXQgbG9vc2Ugb2JqZWN0cyBleGlzdC4KK1RvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgdGhlIGRhdGFiYXNlIHdoZW4gbW9yZSB0aGFuICRvYmplY3RfbGltaXQgbG9vc2Ugb2JqZWN0cyBleGlzdC4KIAogQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iXSBlcSB5ZXN9IHsKIAkJCWRvX2djCmRpZmYgLS1naXQgYS9naXQtbG9zdC1mb3VuZC5zaCBiL2dpdC1sb3N0LWZvdW5kLnNoCmluZGV4IDkzNjA4MDQuLjU4NTcwZGYgMTAwNzU1Ci0tLSBhL2dpdC1sb3N0LWZvdW5kLnNoCisrKyBiL2dpdC1sb3N0LWZvdW5kLnNoCkBAIC0xMiw3ICsxMiw3IEBACiBsYWY9IiRHSVRfRElSL2xvc3QtZm91bmQiCiBybSAtZnIgIiRsYWYiICYmIG1rZGlyIC1wICIkbGFmL2NvbW1pdCIgIiRsYWYvb3RoZXIiIHx8IGV4aXQKIAotZ2l0IGZzY2sgLS1mdWxsIHwKK2dpdCBmc2NrIC0tZnVsbCAtLW5vLXJlZmxvZ3MgfAogd2hpbGUgcmVhZCBkYW5nbGluZyB0eXBlIHNoYTEKIGRvCiAJY2FzZSAiJGRhbmdsaW5nIiBpbgpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLnNoIGIvZ2l0LW1lcmdlLnNoCmluZGV4IGZhNDU4OTEuLjdlYmJjZTQgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS5zaAorKysgYi9naXQtbWVyZ2Uuc2gKQEAgLTE2LDEwICsxNiwxMCBAQAogTEY9JwogJwogCi1hbGxfc3RyYXRlZ2llcz0ncmVjdXIgcmVjdXJzaXZlIG9jdG9wdXMgcmVzb2x2ZSBzdHVwaWQgb3VycycKK2FsbF9zdHJhdGVnaWVzPSdyZWN1ciByZWN1cnNpdmUgb2N0b3B1cyByZXNvbHZlIHN0dXBpZCBvdXJzIHN1YnRyZWUnCiBkZWZhdWx0X3R3b2hlYWRfc3RyYXRlZ2llcz0ncmVjdXJzaXZlJwogZGVmYXVsdF9vY3RvcHVzX3N0cmF0ZWdpZXM9J29jdG9wdXMnCi1ub190cml2aWFsX21lcmdlX3N0cmF0ZWdpZXM9J291cnMnCitub190cml2aWFsX21lcmdlX3N0cmF0ZWdpZXM9J291cnMgc3VidHJlZScKIHVzZV9zdHJhdGVnaWVzPQogCiBpbmRleF9tZXJnZT10CmRpZmYgLS1naXQgYS9naXQtcmVzZXQuc2ggYi9naXQtcmVzZXQuc2gKaW5kZXggZmVlNmQ5OC4uYTE3MmQ3YyAxMDA3NTUKLS0tIGEvZ2l0LXJlc2V0LnNoCisrKyBiL2dpdC1yZXNldC5zaApAQCAtNzEsNyArNzEsNyBAQAogCQlkaWUgIkNhbm5vdCBkbyBhIHNvZnQgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKIAlmaQogZWxzZQotCWdpdC1yZWFkLXRyZWUgLS1yZXNldCAkdXBkYXRlICIkcmV2IiB8fCBleGl0CisJZ2l0LXJlYWQtdHJlZSAtdiAtLXJlc2V0ICR1cGRhdGUgIiRyZXYiIHx8IGV4aXQKIGZpCiAKICMgQW55IHJlc2V0cyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZyBzd2l0Y2hlZCB0by4KZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IDEyY2VkMjguLmE2ZTNlMDIgMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtNDYyLDEwICs0NjIsMTMgQEAKIAl9CiAKIAlteSAkY2MgPSBqb2luKCIsICIsIHVuaXF1ZV9lbWFpbF9saXN0KEBjYykpOworCW15ICRjY2xpbmUgPSAiIjsKKwlpZiAoJGNjIG5lICcnKSB7CisJCSRjY2xpbmUgPSAiXG5DYzogJGNjIjsKKwl9CiAJJGZyb20gPSBzYW5pdGl6ZV9hZGRyZXNzX3JmYzgyMigkZnJvbSk7CiAJbXkgJGhlYWRlciA9ICJGcm9tOiAkZnJvbQotVG86ICR0bwotQ2M6ICRjYworVG86ICR0byR7Y2NsaW5lfQogU3ViamVjdDogJHN1YmplY3QKIERhdGU6ICRkYXRlCiBNZXNzYWdlLUlkOiAkbWVzc2FnZV9pZApkaWZmIC0tZ2l0IGEvZ2l0LmMgYi9naXQuYwppbmRleCA3ZGVmMzE5Li5mMjAwOTA3IDEwMDY0NAotLS0gYS9naXQuYworKysgYi9naXQuYwpAQCAtMjM0LDYgKzIzNCw3IEBACiAJCXsgImNhdC1maWxlIiwgY21kX2NhdF9maWxlLCBSVU5fU0VUVVAgfSwKIAkJeyAiY2hlY2tvdXQtaW5kZXgiLCBjbWRfY2hlY2tvdXRfaW5kZXgsIFJVTl9TRVRVUCB9LAogCQl7ICJjaGVjay1yZWYtZm9ybWF0IiwgY21kX2NoZWNrX3JlZl9mb3JtYXQgfSwKKwkJeyAiY2hlY2stYXR0ciIsIGNtZF9jaGVja19hdHRyLCBSVU5fU0VUVVAgfCBOT1RfQkFSRSB9LAogCQl7ICJjaGVycnkiLCBjbWRfY2hlcnJ5LCBSVU5fU0VUVVAgfSwKIAkJeyAiY2hlcnJ5LXBpY2siLCBjbWRfY2hlcnJ5X3BpY2ssIFJVTl9TRVRVUCB8IE5PVF9CQVJFIH0sCiAJCXsgImNvbW1pdC10cmVlIiwgY21kX2NvbW1pdF90cmVlLCBSVU5fU0VUVVAgfSwKZGlmZiAtLWdpdCBhL2dpdC5zcGVjLmluIGIvZ2l0LnNwZWMuaW4KaW5kZXggODcxOTdkMS4uNTU2YmRkYSAxMDA2NDQKLS0tIGEvZ2l0LnNwZWMuaW4KKysrIGIvZ2l0LnNwZWMuaW4KQEAgLTEsNCArMSw3IEBACiAjIFBhc3MgLS13aXRob3V0IGRvY3MgdG8gcnBtYnVpbGQgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRvY3VtZW50YXRpb24KKworJWRlZmluZSBweXRob25fcGF0aCAvdXNyL2Jpbi9weXRob24KKwogTmFtZTogCQlnaXQKIFZlcnNpb246IAlAQFZFUlNJT05AQAogUmVsZWFzZTogCTElez9kaXN0fQpAQCAtOSw3ICsxMiw3IEBACiBTb3VyY2U6IAlodHRwOi8va2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6CiBCdWlsZFJlcXVpcmVzOgl6bGliLWRldmVsID49IDEuMiwgb3BlbnNzbC1kZXZlbCwgY3VybC1kZXZlbCwgZXhwYXQtZGV2ZWwgICV7IT9fd2l0aG91dF9kb2NzOiwgeG1sdG8sIGFzY2lpZG9jID4gNi4wLjN9CiBCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCi1SZXF1aXJlczoJZ2l0LWNvcmUsIGdpdC1zdm4sIGdpdC1jdnMsIGdpdC1hcmNoLCBnaXQtZW1haWwsIGdpdGssIGdpdC1ndWksIHBlcmwtR2l0CitSZXF1aXJlczoJZ2l0LWNvcmUsIGdpdC1zdm4sIGdpdC1jdnMsIGdpdC1hcmNoLCBnaXQtZW1haWwsIGdpdGssIGdpdC1ndWksIGdpdC1wNCwgcGVybC1HaXQKIAogJWRlc2NyaXB0aW9uCiBHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgpAQCAtNTAsNiArNTMsMTMgQEAKICVkZXNjcmlwdGlvbiBhcmNoCiBHaXQgdG9vbHMgZm9yIGltcG9ydGluZyBBcmNoIHJlcG9zaXRvcmllcy4KIAorJXBhY2thZ2UgcDQKK1N1bW1hcnk6ICAgICAgICBHaXQgdG9vbHMgZm9yIGltcG9ydGluZyBQZXJmb3JjZSByZXBvc2l0b3JpZXMKK0dyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6ICAgICAgIGdpdC1jb3JlID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9LCBweXRob24KKyVkZXNjcmlwdGlvbiBwNAorR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgUGVyZm9yY2UgcmVwb3NpdG9yaWVzLgorCiAlcGFja2FnZSBlbWFpbAogU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3Igc2VuZGluZyBlbWFpbAogR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L1Rvb2xzCkBAIC04NSwyNSArOTUsMjUgQEAKICVzZXR1cCAtcQogCiAlYnVpbGQKLW1ha2UgJXtfc21wX21mbGFnc30gQ0ZMQUdTPSIkUlBNX09QVF9GTEFHUyIgV0lUSF9PV05fU1VCUFJPQ0VTU19QWT1ZZXNQbGVhc2UgXAorbWFrZSAle19zbXBfbWZsYWdzfSBDRkxBR1M9IiRSUE1fT1BUX0ZMQUdTIiBXSVRIX1A0SU1QT1JUPVllc1BsZWFzZSBcCiAgICAgIEVUQ19HSVRDT05GSUc9L2V0Yy9naXRjb25maWcgXAotICAgICBwcmVmaXg9JXtfcHJlZml4fSBhbGwgJXshP193aXRob3V0X2RvY3M6IGRvY30KKyAgICAgcHJlZml4PSV7X3ByZWZpeH0gUFlUSE9OX1BBVEg9JXtweXRob25fcGF0aH0gYWxsICV7IT9fd2l0aG91dF9kb2NzOiBkb2N9CiAKICVpbnN0YWxsCiBybSAtcmYgJFJQTV9CVUlMRF9ST09UCiBtYWtlICV7X3NtcF9tZmxhZ3N9IENGTEFHUz0iJFJQTV9PUFRfRkxBR1MiIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIFwKLSAgICAgV0lUSF9PV05fU1VCUFJPQ0VTU19QWT1ZZXNQbGVhc2UgXAorICAgICBXSVRIX1A0SU1QT1JUPVllc1BsZWFzZSBwcmVmaXg9JXtfcHJlZml4fSBtYW5kaXI9JXtfbWFuZGlyfSBcCiAgICAgIEVUQ19HSVRDT05GSUc9L2V0Yy9naXRjb25maWcgXAotICAgICBwcmVmaXg9JXtfcHJlZml4fSBtYW5kaXI9JXtfbWFuZGlyfSBJTlNUQUxMRElSUz12ZW5kb3IgXAotICAgICBpbnN0YWxsICV7IT9fd2l0aG91dF9kb2NzOiBpbnN0YWxsLWRvY30KKyAgICAgUFlUSE9OX1BBVEg9JXtweXRob25fcGF0aH0gXAorICAgICBJTlNUQUxMRElSUz12ZW5kb3IgaW5zdGFsbCAleyE/X3dpdGhvdXRfZG9jczogaW5zdGFsbC1kb2N9CiBmaW5kICRSUE1fQlVJTERfUk9PVCAtdHlwZSBmIC1uYW1lIC5wYWNrbGlzdCAtZXhlYyBybSAtZiB7fSAnOycKIGZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgJyouYnMnIC1lbXB0eSAtZXhlYyBybSAtZiB7fSAnOycKIGZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgcGVybGxvY2FsLnBvZCAtZXhlYyBybSAtZiB7fSAnOycKIAotKGZpbmQgJFJQTV9CVUlMRF9ST09UJXtfYmluZGlyfSAtdHlwZSBmIHwgZ3JlcCAtdkUgImFyY2hpbXBvcnR8c3ZufGN2c3xlbWFpbHxnaXRrfGdpdC1ndWl8Z2l0LWNpdG9vbCIgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApICAgICAgICAgICAgICAgPiBiaW4tbWFuLWRvYy1maWxlcworKGZpbmQgJFJQTV9CVUlMRF9ST09UJXtfYmluZGlyfSAtdHlwZSBmIHwgZ3JlcCAtdkUgInA0aW1wb3J0fGFyY2hpbXBvcnR8c3ZufGN2c3xlbWFpbHxnaXRrfGdpdC1ndWl8Z2l0LWNpdG9vbCIgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApICAgICAgICAgICAgICAgPiBiaW4tbWFuLWRvYy1maWxlcwogKGZpbmQgJFJQTV9CVUlMRF9ST09UJXtwZXJsX3ZlbmRvcmxpYn0gLXR5cGUgZiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCkgPj4gcGVybC1maWxlcwogJWlmICV7IT9fd2l0aG91dF9kb2NzOjF9MAotKGZpbmQgJFJQTV9CVUlMRF9ST09UJXtfbWFuZGlyfSAkUlBNX0JVSUxEX1JPT1QvRG9jdW1lbnRhdGlvbiAtdHlwZSBmIHwgZ3JlcCAtdkUgImFyY2hpbXBvcnR8c3ZufGdpdC1jdnN8ZW1haWx8Z2l0a3xnaXQtZ3VpfGdpdC1jaXRvb2wiIHwgc2VkIC1lIHNAXiRSUE1fQlVJTERfUk9PVEBAIC1lICdzLyQvKi8nICkgPj4gYmluLW1hbi1kb2MtZmlsZXMKKyhmaW5kICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0gJFJQTV9CVUlMRF9ST09UL0RvY3VtZW50YXRpb24gLXR5cGUgZiB8IGdyZXAgLXZFICJwNGltcG9ydHxhcmNoaW1wb3J0fHN2bnxnaXQtY3ZzfGVtYWlsfGdpdGt8Z2l0LWd1aXxnaXQtY2l0b29sIiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCAtZSAncy8kLyovJyApID4+IGJpbi1tYW4tZG9jLWZpbGVzCiAlZWxzZQogcm0gLXJmICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0KICVlbmRpZgpAQCAtMTM1LDYgKzE0NSwxMyBAQAogJXshP193aXRob3V0X2RvY3M6ICV7X21hbmRpcn0vbWFuMS9naXQtYXJjaGltcG9ydC4xKn0KICV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQuaHRtbCB9CiAKKyVmaWxlcyBwNAorJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIERvY3VtZW50YXRpb24vZ2l0LXA0aW1wb3J0LnR4dAorJXtfYmluZGlyfS9naXQtcDRpbXBvcnQKKyV7IT9fd2l0aG91dF9kb2NzOiAle19tYW5kaXJ9L21hbjEvZ2l0LXA0aW1wb3J0LjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi9naXQtcDRpbXBvcnQuaHRtbCB9CisKICVmaWxlcyBlbWFpbAogJWRlZmF0dHIoLSxyb290LHJvb3QpCiAlZG9jIERvY3VtZW50YXRpb24vKmVtYWlsKi50eHQKQEAgLTE2OSw2ICsxODYsOSBAQAogJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi8qLmh0bWwgfQogCiAlY2hhbmdlbG9nCisqIFR1ZSBNYXIgMjcgMjAwNyBFeWdlbmUgUnlhYmlua2luIDxyZWEtZ2l0QGNvZGVsYWJzLnJ1PgorLSBBZGRlZCB0aGUgZ2l0LXA0IHBhY2thZ2U6IFBlcmZvcmNlIGltcG9ydCBzdHVmZi4KKwogKiBNb24gRmViIDEzIDIwMDcgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgogLSBVcGRhdGUgY29yZSBwYWNrYWdlIGRlc2NyaXB0aW9uIChHaXQgaXNuJ3QgYXMgc3R1cGlkIGFzIGl0IHVzZWQgdG8gYmUpCiAKZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIuY3NzIGIvZ2l0d2ViL2dpdHdlYi5jc3MKaW5kZXggNWU0MDI5Mi4uMmIwMjNiZCAxMDA2NDQKLS0tIGEvZ2l0d2ViL2dpdHdlYi5jc3MKKysrIGIvZ2l0d2ViL2dpdHdlYi5jc3MKQEAgLTM4Nyw2ICszODcsMTAgQEAKIAljb2xvcjogI2NjY2NjYzsKIH0KIAorZGl2LmRpZmYubm9kaWZmZXJlbmNlcyB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJY29sb3I6ICM2MDAwMDA7Cit9CiAKIGRpdi5pbmRleF9pbmNsdWRlIHsKIAlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKaW5kZXggNDVhYzlkNy4uY2JkOGQwMyAxMDA3NTUKLS0tIGEvZ2l0d2ViL2dpdHdlYi5wZXJsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMTksNyArMTksNyBAQAogYmlubW9kZSBTVERPVVQsICc6dXRmOCc7CiAKIEJFR0lOIHsKLQlDR0ktPmNvbXBpbGUoKSBpZiAkRU5We01PRF9QRVJMfTsKKwlDR0ktPmNvbXBpbGUoKSBpZiAkRU5WeydNT0RfUEVSTCd9OwogfQogCiBvdXIgJGNnaSA9IG5ldyBDR0k7CkBAIC03MSw2ICs3MSwxMCBAQAogIyBzb3VyY2Ugb2YgcHJvamVjdHMgbGlzdAogb3VyICRwcm9qZWN0c19saXN0ID0gIisrR0lUV0VCX0xJU1QrKyI7CiAKKyMgZGVmYXVsdCBvcmRlciBvZiBwcm9qZWN0cyBsaXN0CisjIHZhbGlkIHZhbHVlcyBhcmUgbm9uZSwgcHJvamVjdCwgZGVzY3IsIG93bmVyLCBhbmQgYWdlCitvdXIgJGRlZmF1bHRfcHJvamVjdHNfb3JkZXIgPSAicHJvamVjdCI7CisKICMgc2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cwogIyAob25seSBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZSkKIG91ciAkZXhwb3J0X29rID0gIisrR0lUV0VCX0VYUE9SVF9PSysrIjsKQEAgLTE3Niw4ICsxODAsOCBAQAogCSMgcHJvamVjdHMgbWF0Y2hpbmcgJHByb2puYW1lLyouZ2l0IHdpbGwgbm90IGJlIHNob3duIGluIHRoZSBtYWluCiAJIyBwcm9qZWN0cyBsaXN0LCBpbnN0ZWFkIGEgJysnIG1hcmsgd2lsbCBiZSBhZGRlZCB0byAkcHJvam5hbWUKIAkjIHRoZXJlIGFuZCBhICdmb3JrcycgdmlldyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRoZSBwcm9qZWN0LCBsaXN0aW5nCi0JIyBhbGwgdGhlIGZvcmtzLiBUaGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9ubHkgaWYgcHJvamVjdCBsaXN0Ci0JIyBpcyB0YWtlbiBmcm9tIGEgZGlyZWN0b3J5LCBub3QgZmlsZS4KKwkjIGFsbCB0aGUgZm9ya3MuIElmIHByb2plY3QgbGlzdCBpcyB0YWtlbiBmcm9tIGEgZmlsZSwgZm9ya3MgaGF2ZQorCSMgdG8gYmUgbGlzdGVkIGFmdGVyIHRoZSBtYWluIHByb2plY3QuCiAKIAkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCiAJIyAkZmVhdHVyZXsnZm9ya3MnfXsnZGVmYXVsdCd9ID0gWzFdOwpAQCAtMTA0Nyw2ICsxMDUxLDggQEAKIAkkZmlsdGVyIHx8PSAnJzsKIAkkZmlsdGVyID1+IHMvXC5naXQkLy87CiAKKwlteSAoJGNoZWNrX2ZvcmtzKSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdmb3JrcycpOworCiAJaWYgKC1kICRwcm9qZWN0c19saXN0KSB7CiAJCSMgc2VhcmNoIGluIGRpcmVjdG9yeQogCQlteSAkZGlyID0gJHByb2plY3RzX2xpc3QgLiAoJGZpbHRlciA/ICIvJGZpbHRlciIgOiAnJyk7CkBAIC0xMDU0LDggKzEwNjAsNiBAQAogCQkkZGlyID1+IHMhLyskISE7CiAJCW15ICRwZnhsZW4gPSBsZW5ndGgoIiRkaXIiKTsKIAotCQlteSAoJGNoZWNrX2ZvcmtzKSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdmb3JrcycpOwotCiAJCUZpbGU6OkZpbmQ6OmZpbmQoewogCQkJZm9sbG93X2Zhc3QgPT4gMSwgIyBmb2xsb3cgc3ltYm9saWMgbGlua3MKIAkJCWRhbmdsaW5nX3N5bWxpbmtzID0+IDAsICMgaWdub3JlIGRhbmdsaW5nIHN5bWxpbmtzLCBzaWxlbnRseQpAQCAtMTA4MSw3ICsxMDg1LDkgQEAKIAkJIyAnZ2l0JTJGZ2l0LmdpdCBMaW51cytUb3J2YWxkcycKIAkJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJwogCQkjICdsaW51eCUyRmhvdHBsdWclMkZ1ZGV2LmdpdCBHcmVnK0tyb2FoLUhhcnRtYW4nCisJCW15ICVwYXRoczsKIAkJb3BlbiBteSAoJGZkKSwgJHByb2plY3RzX2xpc3Qgb3IgcmV0dXJuOworCVBST0pFQ1Q6CiAJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CiAJCQljaG9tcCAkbGluZTsKIAkJCW15ICgkcGF0aCwgJG93bmVyKSA9IHNwbGl0ICcgJywgJGxpbmU7CkBAIC0xMDk0LDExICsxMTAwLDI3IEBACiAJCQkJIyBsb29raW5nIGZvciBmb3JrczsKIAkJCQlteSAkcGZ4ID0gc3Vic3RyKCRwYXRoLCAwLCBsZW5ndGgoJGZpbHRlcikpOwogCQkJCWlmICgkcGZ4IG5lICRmaWx0ZXIpIHsKLQkJCQkJbmV4dDsKKwkJCQkJbmV4dCBQUk9KRUNUOwogCQkJCX0KIAkJCQlteSAkc2Z4ID0gc3Vic3RyKCRwYXRoLCBsZW5ndGgoJGZpbHRlcikpOwogCQkJCWlmICgkc2Z4ICF+IC9eXC8uKlwuZ2l0JC8pIHsKLQkJCQkJbmV4dDsKKwkJCQkJbmV4dCBQUk9KRUNUOworCQkJCX0KKwkJCX0gZWxzaWYgKCRjaGVja19mb3JrcykgeworCQkJUEFUSDoKKwkJCQlmb3JlYWNoIG15ICRmaWx0ZXIgKGtleXMgJXBhdGhzKSB7CisJCQkJCSMgbG9va2luZyBmb3IgZm9ya3M7CisJCQkJCW15ICRwZnggPSBzdWJzdHIoJHBhdGgsIDAsIGxlbmd0aCgkZmlsdGVyKSk7CisJCQkJCWlmICgkcGZ4IG5lICRmaWx0ZXIpIHsKKwkJCQkJCW5leHQgUEFUSDsKKwkJCQkJfQorCQkJCQlteSAkc2Z4ID0gc3Vic3RyKCRwYXRoLCBsZW5ndGgoJGZpbHRlcikpOworCQkJCQlpZiAoJHNmeCAhfiAvXlwvLipcLmdpdCQvKSB7CisJCQkJCQluZXh0IFBBVEg7CisJCQkJCX0KKwkJCQkJIyBpcyBhIGZvcmssIGRvbid0IGluY2x1ZGUgaXQgaW4KKwkJCQkJIyB0aGUgbGlzdAorCQkJCQluZXh0IFBST0pFQ1Q7CiAJCQkJfQogCQkJfQogCQkJaWYgKGNoZWNrX2V4cG9ydF9vaygiJHByb2plY3Ryb290LyRwYXRoIikpIHsKQEAgLTExMDYsMTIgKzExMjgsMTMgQEAKIAkJCQkJcGF0aCA9PiAkcGF0aCwKIAkJCQkJb3duZXIgPT4gdG9fdXRmOCgkb3duZXIpLAogCQkJCX07Ci0JCQkJcHVzaCBAbGlzdCwgJHByCisJCQkJcHVzaCBAbGlzdCwgJHByOworCQkJCShteSAkZm9ya3NfcGF0aCA9ICRwYXRoKSA9fiBzL1wuZ2l0JC8vOworCQkJCSRwYXRoc3skZm9ya3NfcGF0aH0rKzsKIAkJCX0KIAkJfQogCQljbG9zZSAkZmQ7CiAJfQotCUBsaXN0ID0gc29ydCB7JGEtPnsncGF0aCd9IGNtcCAkYi0+eydwYXRoJ319IEBsaXN0OwogCXJldHVybiBAbGlzdDsKIH0KIApAQCAtMTgwMCw3ICsxODIzLDcgQEAKIAkJICAgICAgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICJhIikgLiAiXG4iIC4KIAkJICAgICAgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICJoIikgLiAiXG4iIC4KIAkJICAgICAgJGNnaS0+cG9wdXBfbWVudSgtbmFtZSA9PiAnc3QnLCAtZGVmYXVsdCA9PiAnY29tbWl0JywKLQkJCQkgICAgICAgLXZhbHVlcyA9PiBbJ2NvbW1pdCcsICdhdXRob3InLCAnY29tbWl0dGVyJywgJ3BpY2theGUnXSkgLgorCQkgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZXMgPT4gWydjb21taXQnLCAnYXV0aG9yJywgJ2NvbW1pdHRlcicsICdwaWNrYXhlJ10pIC4KIAkJICAgICAgJGNnaS0+c3VwKCRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoX2hlbHAiKX0sICI/IikpIC4KIAkJICAgICAgIiBzZWFyY2g6XG4iLAogCQkgICAgICAkY2dpLT50ZXh0ZmllbGQoLW5hbWUgPT4gInMiLCAtdmFsdWUgPT4gJHNlYXJjaHRleHQpIC4gIlxuIiAuCkBAIC0xODcwLDE2ICsxODkzLDE2IEBACiAJbXkgJWFyZyA9IG1hcCB7ICRfID0+IHthY3Rpb249PiRffSB9IEBuYXZzOwogCWlmIChkZWZpbmVkICRoZWFkKSB7CiAJCWZvciAocXcoY29tbWl0IGNvbW1pdGRpZmYpKSB7Ci0JCQkkYXJneyRffXtoYXNofSA9ICRoZWFkOworCQkJJGFyZ3skX317J2hhc2gnfSA9ICRoZWFkOwogCQl9CiAJCWlmICgkY3VycmVudCA9fiBtL14odHJlZSB8IGxvZyB8IHNob3J0bG9nIHwgY29tbWl0IHwgY29tbWl0ZGlmZiB8IHNlYXJjaCkkL3gpIHsKIAkJCWZvciAocXcoc2hvcnRsb2cgbG9nKSkgewotCQkJCSRhcmd7JF99e2hhc2h9ID0gJGhlYWQ7CisJCQkJJGFyZ3skX317J2hhc2gnfSA9ICRoZWFkOwogCQkJfQogCQl9CiAJfQotCSRhcmd7dHJlZX17aGFzaH0gPSAkdHJlZWhlYWQgaWYgZGVmaW5lZCAkdHJlZWhlYWQ7Ci0JJGFyZ3t0cmVlfXtoYXNoX2Jhc2V9ID0gJHRyZWViYXNlIGlmIGRlZmluZWQgJHRyZWViYXNlOworCSRhcmd7J3RyZWUnfXsnaGFzaCd9ID0gJHRyZWVoZWFkIGlmIGRlZmluZWQgJHRyZWVoZWFkOworCSRhcmd7J3RyZWUnfXsnaGFzaF9iYXNlJ30gPSAkdHJlZWJhc2UgaWYgZGVmaW5lZCAkdHJlZWJhc2U7CiAKIAlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfbmF2XCI+XG4iIC4KIAkJKGpvaW4gIiB8ICIsCkBAIC0xOTI3LDkgKzE5NTAsOSBAQAogCW15ICgkYWN0aW9uLCAkdGl0bGUsICRoYXNoLCAkaGFzaF9iYXNlKSA9IEBfOwogCW15ICVhcmdzID0gKCk7CiAKLQkkYXJnc3thY3Rpb259ID0gJGFjdGlvbjsKLQkkYXJnc3toYXNofSA9ICRoYXNoIGlmICRoYXNoOwotCSRhcmdze2hhc2hfYmFzZX0gPSAkaGFzaF9iYXNlIGlmICRoYXNoX2Jhc2U7CisJJGFyZ3N7J2FjdGlvbid9ID0gJGFjdGlvbjsKKwkkYXJnc3snaGFzaCd9ID0gJGhhc2ggaWYgJGhhc2g7CisJJGFyZ3N7J2hhc2hfYmFzZSd9ID0gJGhhc2hfYmFzZSBpZiAkaGFzaF9iYXNlOwogCiAJcHJpbnQgIjxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiIgLgogCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoJWFyZ3MpLCAtY2xhc3MgPT4gInRpdGxlIn0sCkBAIC0yMzc1LDYgKzIzOTgsNyBAQAogCW15ICgkZmQsICRkaWZmdHJlZSwgJGhhc2gsICRoYXNoX3BhcmVudCkgPSBAXzsKIAogCW15ICRwYXRjaF9pZHggPSAwOworCW15ICRwYXRjaF9udW1iZXIgPSAwOwogCW15ICRwYXRjaF9saW5lOwogCW15ICRkaWZmaW5mbzsKIAlteSAoJWZyb20sICV0byk7CkBAIC0yMzk2LDYgKzI0MjAsNyBAQAogCQkjIGdpdCBkaWZmIGhlYWRlcgogCQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLykgaWYgREVCVUc7CiAJCSNhc3NlcnQoJHBhdGNoX2xpbmUgIX4gbSEkLyQhKSBpZiBERUJVRzsgIyBpcyBjaG9tcC1lZAorCQkkcGF0Y2hfbnVtYmVyKys7CiAJCXB1c2ggQGRpZmZfaGVhZGVyLCAkcGF0Y2hfbGluZTsKIAogCQkjIGV4dGVuZGVkIGRpZmYgaGVhZGVyCkBAIC0yNTU4LDYgKzI1ODMsNyBAQAogCX0gY29udGludWUgewogCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYXRjaCIKIAl9CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5ObyBkaWZmZXJlbmNlcyBmb3VuZDwvZGl2PlxuIiBpZiAoISRwYXRjaF9udW1iZXIpOwogCiAJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGF0Y2hzZXQiCiB9CkBAIC0yNTk4LDcgKzI2MjQsNyBAQAogCQlwdXNoIEBwcm9qZWN0cywgJHByOwogCX0KIAotCSRvcmRlciB8fD0gInByb2plY3QiOworCSRvcmRlciB8fD0gJGRlZmF1bHRfcHJvamVjdHNfb3JkZXI7CiAJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOwogCSR0byA9ICQjcHJvamVjdHMgaWYgKCFkZWZpbmVkICR0byB8fCAkI3Byb2plY3RzIDwgJHRvKTsKIApAQCAtMjk1Nyw3ICsyOTgzLDcgQEAKIAogc3ViIGdpdF9wcm9qZWN0X2xpc3QgewogCW15ICRvcmRlciA9ICRjZ2ktPnBhcmFtKCdvJyk7Ci0JaWYgKGRlZmluZWQgJG9yZGVyICYmICRvcmRlciAhfiBtL3Byb2plY3R8ZGVzY3J8b3duZXJ8YWdlLykgeworCWlmIChkZWZpbmVkICRvcmRlciAmJiAkb3JkZXIgIX4gbS9ub25lfHByb2plY3R8ZGVzY3J8b3duZXJ8YWdlLykgewogCQlkaWVfZXJyb3IodW5kZWYsICJVbmtub3duIG9yZGVyIHBhcmFtZXRlciIpOwogCX0KIApAQCAtMjk4MCw3ICszMDA2LDcgQEAKIAogc3ViIGdpdF9mb3JrcyB7CiAJbXkgJG9yZGVyID0gJGNnaS0+cGFyYW0oJ28nKTsKLQlpZiAoZGVmaW5lZCAkb3JkZXIgJiYgJG9yZGVyICF+IG0vcHJvamVjdHxkZXNjcnxvd25lcnxhZ2UvKSB7CisJaWYgKGRlZmluZWQgJG9yZGVyICYmICRvcmRlciAhfiBtL25vbmV8cHJvamVjdHxkZXNjcnxvd25lcnxhZ2UvKSB7CiAJCWRpZV9lcnJvcih1bmRlZiwgIlVua25vd24gb3JkZXIgcGFyYW1ldGVyIik7CiAJfQogCkBAIC0zMDk1LDcgKzMxMjEsNyBAQAogCQlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBmb3JrbGlzdCwgdW5kZWYsIDAsIDE1LAogCQkgICAgICAgICAgICAgICAgICAgICAgJCNmb3JrbGlzdCA8PSAxNSA/IHVuZGVmIDoKIAkJICAgICAgICAgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iZm9ya3MiKX0sICIuLi4iKSwKLQkJCQkgICAgICAnbm9oZWFkZXInKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICdub2hlYWRlcicpOwogCX0KIAogCWdpdF9mb290ZXJfaHRtbCgpOwpAQCAtMzIwMiw3ICszMjI4LDcgQEAKIAkJbXkgJHJldiA9IHN1YnN0cigkZnVsbF9yZXYsIDAsIDgpOwogCQlteSAkYXV0aG9yID0gJG1ldGEtPnsnYXV0aG9yJ307CiAJCW15ICVkYXRlID0gcGFyc2VfZGF0ZSgkbWV0YS0+eydhdXRob3ItdGltZSd9LAotCQkJCSAgICAgICRtZXRhLT57J2F1dGhvci10eid9KTsKKwkJICAgICAgICAgICAgICAgICAgICAgICRtZXRhLT57J2F1dGhvci10eid9KTsKIAkJbXkgJGRhdGUgPSAkZGF0ZXsnaXNvLXR6J307CiAJCWlmICgkZ3JvdXBfc2l6ZSkgewogCQkJJGN1cnJlbnRfY29sb3IgPSArKyRjdXJyZW50X2NvbG9yICUgJG51bV9jb2xvcnM7CkBAIC0zMjE0LDkgKzMyNDAsOSBAQAogCQkJcHJpbnQgIiByb3dzcGFuPVwiJGdyb3VwX3NpemVcIiIgaWYgKCRncm91cF9zaXplID4gMSk7CiAJCQlwcmludCAiPiI7CiAJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsCi0JCQkJCQkgICAgIGhhc2g9PiRmdWxsX3JldiwKLQkJCQkJCSAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCi0JCQkJICAgICAgZXNjX2h0bWwoJHJldikpOworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZnVsbF9yZXYsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSl9LAorCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkcmV2KSk7CiAJCQlwcmludCAiPC90ZD5cbiI7CiAJCX0KIAkJb3BlbiAobXkgJGRkLCAiLXwiLCBnaXRfY21kKCksICJyZXYtcGFyc2UiLCAiJGZ1bGxfcmV2XiIpCkBAIC0zMjI1LDEzICszMjUxLDEzIEBACiAJCWNsb3NlICRkZDsKIAkJY2hvbXAoJHBhcmVudF9jb21taXQpOwogCQlteSAkYmxhbWVkID0gaHJlZihhY3Rpb24gPT4gJ2JsYW1lJywKLQkJCQkgIGZpbGVfbmFtZSA9PiAkbWV0YS0+eydmaWxlbmFtZSd9LAotCQkJCSAgaGFzaF9iYXNlID0+ICRwYXJlbnRfY29tbWl0KTsKKwkJICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lID0+ICRtZXRhLT57J2ZpbGVuYW1lJ30sCisJCSAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZSA9PiAkcGFyZW50X2NvbW1pdCk7CiAJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5lbnJcIj4iOwogCQlwcmludCAkY2dpLT5hKHsgLWhyZWYgPT4gIiRibGFtZWQjbCRvcmlnX2xpbmVubyIsCi0JCQkJLWlkID0+ICJsJGxpbmVubyIsCi0JCQkJLWNsYXNzID0+ICJsaW5lbnIiIH0sCi0JCQkgICAgICBlc2NfaHRtbCgkbGluZW5vKSk7CisJCSAgICAgICAgICAgICAgICAtaWQgPT4gImwkbGluZW5vIiwKKwkJICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGluZW5yIiB9LAorCQkgICAgICAgICAgICAgIGVzY19odG1sKCRsaW5lbm8pKTsKIAkJcHJpbnQgIjwvdGQ+IjsKIAkJcHJpbnQgIjx0ZCBjbGFzcz1cInByZVwiPiIgLiBlc2NfaHRtbCgkZGF0YSkgLiAiPC90ZD5cbiI7CiAJCXByaW50ICI8L3RyPlxuIjsKQEAgLTM2MjEsNyArMzY0Nyw3IEBACiAJbXkgJG5hbWUgPSAkcHJvamVjdDsKIAkkbmFtZSA9fiBzL1wwNDcvXDA0N1xcXDA0N1wwNDcvZzsKIAlvcGVuIG15ICRmZCwgIi18IiwKLQkiJGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1cJyRuYW1lXCcvICRoYXNoIHwgJGNvbW1hbmQiCisJCSIkZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PVwnJG5hbWVcJy8gJGhhc2ggfCAkY29tbWFuZCIKIAkJb3IgZGllX2Vycm9yKHVuZGVmLCAiRXhlY3V0ZSBnaXQtdGFyLXRyZWUgZmFpbGVkIik7CiAJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKIAlwcmludCA8JGZkPjsKQEAgLTM3MzQsNyArMzc2MCw3IEBACiAJCSMgZGlmZnRyZWUgb3V0cHV0IGlzIG5vdCBwcmludGVkIGZvciBtZXJnZXMKIAkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsICItLW5vLWNvbW1pdC1pZCIsCiAJCQlAZGlmZl9vcHRzLCAkcGFyZW50LCAkaGFzaCwgIi0tIgotCQkJCW9yIGRpZV9lcnJvcih1bmRlZiwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwkJCW9yIGRpZV9lcnJvcih1bmRlZiwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKIAkJQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CiAJCWNsb3NlICRmZCBvciBkaWVfZXJyb3IodW5kZWYsICJSZWFkaW5nIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CiAJfQpAQCAtNDMwNiwxMyArNDMzMiwxMyBAQAogCQlpZiAoJHBhZ2UgPiAwKSB7CiAJCQkkcGFnaW5nX25hdiAuPQogCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoIiwgaGFzaD0+JGhhc2gsCi0JCQkJCQkgICAgICAgc2VhcmNodGV4dD0+JHNlYXJjaHRleHQsIHNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlKX0sCi0JCQkJCSJmaXJzdCIpOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNodGV4dD0+JHNlYXJjaHRleHQsIHNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlKX0sCisJCQkJICAgICAgICAiZmlyc3QiKTsKIAkJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICIgLgogCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoIiwgaGFzaD0+JGhhc2gsCi0JCQkJCQkgICAgICAgc2VhcmNodGV4dD0+JHNlYXJjaHRleHQsIHNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlLAotCQkJCQkJICAgICAgIHBhZ2U9PiRwYWdlLTEpLAotCQkJCQkgLWFjY2Vzc2tleSA9PiAicCIsIC10aXRsZSA9PiAiQWx0LXAifSwgInByZXYiKTsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaHRleHQ9PiRzZWFyY2h0ZXh0LCBzZWFyY2h0eXBlPT4kc2VhcmNodHlwZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U9PiRwYWdlLTEpLAorCQkJCSAgICAgICAgIC1hY2Nlc3NrZXkgPT4gInAiLCAtdGl0bGUgPT4gIkFsdC1wIn0sICJwcmV2Iik7CiAJCX0gZWxzZSB7CiAJCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QiOwogCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgcHJldiI7CkBAIC00MzIwLDkgKzQzNDYsOSBAQAogCQlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgewogCQkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgIiAuCiAJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzZWFyY2giLCBoYXNoPT4kaGFzaCwKLQkJCQkJCSAgICAgICBzZWFyY2h0ZXh0PT4kc2VhcmNodGV4dCwgc2VhcmNodHlwZT0+JHNlYXJjaHR5cGUsCi0JCQkJCQkgICAgICAgcGFnZT0+JHBhZ2UrMSksCi0JCQkJCSAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNodGV4dD0+JHNlYXJjaHRleHQsIHNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgcGFnZT0+JHBhZ2UrMSksCisJCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKIAkJfSBlbHNlIHsKIAkJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7IG5leHQiOwogCQl9CkBAIC00MzMwLDkgKzQzNTYsOSBAQAogCQlpZiAoJCNjb21taXRsaXN0ID49IDEwMCkgewogCQkJJG5leHRfbGluayA9CiAJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzZWFyY2giLCBoYXNoPT4kaGFzaCwKLQkJCQkJCSAgICAgICBzZWFyY2h0ZXh0PT4kc2VhcmNodGV4dCwgc2VhcmNodHlwZT0+JHNlYXJjaHR5cGUsCi0JCQkJCQkgICAgICAgcGFnZT0+JHBhZ2UrMSksCi0JCQkJCSAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNodGV4dD0+JHNlYXJjaHRleHQsIHNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgcGFnZT0+JHBhZ2UrMSksCisJCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKIAkJfQogCiAJCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gsICRwYWdpbmdfbmF2KTsKZGlmZiAtLWdpdCBhL2lkZW50LmMgYi9pZGVudC5jCmluZGV4IGJiMDNiZGQuLjY5YTA0YjggMTAwNjQ0Ci0tLSBhL2lkZW50LmMKKysrIGIvaWRlbnQuYwpAQCAtOSwxMCArOSwxMCBAQAogCiBzdGF0aWMgY2hhciBnaXRfZGVmYXVsdF9kYXRlWzUwXTsKIAotc3RhdGljIHZvaWQgY29weV9nZWNvcyhzdHJ1Y3QgcGFzc3dkICp3LCBjaGFyICpuYW1lLCBpbnQgc3opCitzdGF0aWMgdm9pZCBjb3B5X2dlY29zKGNvbnN0IHN0cnVjdCBwYXNzd2QgKncsIGNoYXIgKm5hbWUsIHNpemVfdCBzeikKIHsKIAljaGFyICpzcmMsICpkc3Q7Ci0JaW50IGxlbiwgbmxlbjsKKwlzaXplX3QgbGVuLCBubGVuOwogCiAJbmxlbiA9IHN0cmxlbih3LT5wd19uYW1lKTsKIApAQCAtNDMsMTMgKzQzLDEzIEBACiAKIH0KIAotc3RhdGljIHZvaWQgY29weV9lbWFpbChzdHJ1Y3QgcGFzc3dkICpwdykKK3N0YXRpYyB2b2lkIGNvcHlfZW1haWwoY29uc3Qgc3RydWN0IHBhc3N3ZCAqcHcpCiB7CiAJLyoKIAkgKiBNYWtlIHVwIGEgZmFrZSBlbWFpbCBhZGRyZXNzCiAJICogKG5hbWUgKyAnQCcgKyBob3N0bmFtZSBbKyAnLicgKyBkb21haW5uYW1lXSkKIAkgKi8KLQlpbnQgbGVuID0gc3RybGVuKHB3LT5wd19uYW1lKTsKKwlzaXplX3QgbGVuID0gc3RybGVuKHB3LT5wd19uYW1lKTsKIAlpZiAobGVuID4gc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKS8yKQogCQlkaWUoIllvdXIgc3lzYWRtaW4gbXVzdCBoYXRlIHlvdSEiKTsKIAltZW1jcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHB3LT5wd19uYW1lLCBsZW4pOwpAQCAtOTUsOSArOTUsOSBAQAogCQlkYXRlc3RhbXAoZ2l0X2RlZmF1bHRfZGF0ZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X2RhdGUpKTsKIH0KIAotc3RhdGljIGludCBhZGRfcmF3KGNoYXIgKmJ1ZiwgaW50IHNpemUsIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyBpbnQgYWRkX3JhdyhjaGFyICpidWYsIHNpemVfdCBzaXplLCBpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICpzdHIpCiB7Ci0JaW50IGxlbiA9IHN0cmxlbihzdHIpOworCXNpemVfdCBsZW4gPSBzdHJsZW4oc3RyKTsKIAlpZiAob2Zmc2V0ICsgbGVuID4gc2l6ZSkKIAkJcmV0dXJuIHNpemU7CiAJbWVtY3B5KGJ1ZiArIG9mZnNldCwgc3RyLCBsZW4pOwpAQCAtMTMxLDkgKzEzMSw5IEBACiAgKiBDb3B5IG92ZXIgYSBzdHJpbmcgdG8gdGhlIGRlc3RpbmF0aW9uLCBidXQgYXZvaWQgc3BlY2lhbAogICogY2hhcmFjdGVycyAoJ1xuJywgJzwnIGFuZCAnPicpIGFuZCByZW1vdmUgY3J1ZCBhdCB0aGUgZW5kCiAgKi8KLXN0YXRpYyBpbnQgY29weShjaGFyICpidWYsIGludCBzaXplLCBpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICpzcmMpCitzdGF0aWMgaW50IGNvcHkoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqc3JjKQogewotCWludCBpLCBsZW47CisJc2l6ZV90IGksIGxlbjsKIAl1bnNpZ25lZCBjaGFyIGM7CiAKIAkvKiBSZW1vdmUgY3J1ZCBmcm9tIHRoZSBiZWdpbm5pbmcuLiAqLwpAQCAtMTk2LDYgKzE5Niw4IEBACiAJaWYgKCFuYW1lKQogCQluYW1lID0gZ2l0X2RlZmF1bHRfbmFtZTsKIAlpZiAoIWVtYWlsKQorCQllbWFpbCA9IGdldGVudigiRU1BSUwiKTsKKwlpZiAoIWVtYWlsKQogCQllbWFpbCA9IGdpdF9kZWZhdWx0X2VtYWlsOwogCiAJaWYgKCEqbmFtZSkgewpkaWZmIC0tZ2l0IGEvaW5kZXgtcGFjay5jIGIvaW5kZXgtcGFjay5jCmluZGV4IDNjNzY4ZmIuLjgyNDAwNGYgMTAwNjQ0Ci0tLSBhL2luZGV4LXBhY2suYworKysgYi9pbmRleC1wYWNrLmMKQEAgLTYsMTUgKzYsMTcgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgaW5kZXhfcGFja191c2FnZVtdID0KICJnaXQtaW5kZXgtcGFjayBbLXZdIFstbyA8aW5kZXgtZmlsZT5dIFt7IC0tLWtlZXAgfCAtLWtlZXA9PG1zZz4gfV0geyA8cGFjay1maWxlPiB8IC0tc3RkaW4gWy0tZml4LXRoaW5dIFs8cGFjay1maWxlPl0gfSI7CiAKIHN0cnVjdCBvYmplY3RfZW50cnkKIHsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlvZmZfdCBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVuc2lnbmVkIGludCBoZHJfc2l6ZTsKKwl1aW50MzJfdCBjcmMzMjsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJZW51bSBvYmplY3RfdHlwZSByZWFsX3R5cGU7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKQEAgLTIyLDcgKzI0LDcgQEAKIAogdW5pb24gZGVsdGFfYmFzZSB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwlvZmZfdCBvZmZzZXQ7CiB9OwogCiAvKgpAQCAtNDYsNDUgKzQ4LDE0IEBACiBzdGF0aWMgaW50IGZyb21fc3RkaW47CiBzdGF0aWMgaW50IHZlcmJvc2U7CiAKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcHJvZ3Jlc3NfdXBkYXRlOwotCi1zdGF0aWMgdm9pZCBwcm9ncmVzc19pbnRlcnZhbChpbnQgc2lnbnVtKQotewotCXByb2dyZXNzX3VwZGF0ZSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3Byb2dyZXNzX3NpZ25hbCh2b2lkKQotewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0Jc3RydWN0IGl0aW1lcnZhbCB2OwotCi0JbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7Ci0Jc2Euc2FfaGFuZGxlciA9IHByb2dyZXNzX2ludGVydmFsOwotCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKLQlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7Ci0Jc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7Ci0KLQl2Lml0X2ludGVydmFsLnR2X3NlYyA9IDE7Ci0Jdi5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLQl2Lml0X3ZhbHVlID0gdi5pdF9pbnRlcnZhbDsKLQlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKLQotfQotCi1zdGF0aWMgdW5zaWduZWQgZGlzcGxheV9wcm9ncmVzcyh1bnNpZ25lZCBuLCB1bnNpZ25lZCB0b3RhbCwgdW5zaWduZWQgbGFzdF9wYykKLXsKLQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHRvdGFsOwotCWlmIChwZXJjZW50ICE9IGxhc3RfcGMgfHwgcHJvZ3Jlc3NfdXBkYXRlKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCV1LyV1KSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7Ci0JCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JfQotCXJldHVybiBwZXJjZW50OwotfQorc3RhdGljIHN0cnVjdCBwcm9ncmVzcyBwcm9ncmVzczsKIAogLyogV2UgYWx3YXlzIHJlYWQgaW4gNGtCIGNodW5rcy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlucHV0X2J1ZmZlcls0MDk2XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlucHV0X29mZnNldCwgaW5wdXRfbGVuLCBjb25zdW1lZF9ieXRlczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW47CitzdGF0aWMgb2ZmX3QgY29uc3VtZWRfYnl0ZXM7CiBzdGF0aWMgU0hBX0NUWCBpbnB1dF9jdHg7CitzdGF0aWMgdWludDMyX3QgaW5wdXRfY3JjMzI7CiBzdGF0aWMgaW50IGlucHV0X2ZkLCBvdXRwdXRfZmQsIHBhY2tfZmQ7CiAKIC8qIERpc2NhcmQgY3VycmVudCBidWZmZXIgdXNlZCBjb250ZW50LiAqLwpAQCAtMTI3LDggKzk4LDEzIEBACiB7CiAJaWYgKGJ5dGVzID4gaW5wdXRfbGVuKQogCQlkaWUoInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIik7CisJaW5wdXRfY3JjMzIgPSBjcmMzMihpbnB1dF9jcmMzMiwgaW5wdXRfYnVmZmVyICsgaW5wdXRfb2Zmc2V0LCBieXRlcyk7CiAJaW5wdXRfbGVuIC09IGJ5dGVzOwogCWlucHV0X29mZnNldCArPSBieXRlczsKKworCS8qIG1ha2Ugc3VyZSBvZmZfdCBpcyBzdWZmaWNpZW50bHkgbGFyZ2Ugbm90IHRvIHdyYXAgKi8KKwlpZiAoY29uc3VtZWRfYnl0ZXMgPiBjb25zdW1lZF9ieXRlcyArIGJ5dGVzKQorCQlkaWUoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKIAljb25zdW1lZF9ieXRlcyArPSBieXRlczsKIH0KIApAQCAtMjE2LDEwICsxOTIsMTMgQEAKIHN0YXRpYyB2b2lkICp1bnBhY2tfcmF3X2VudHJ5KHN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiwgdW5pb24gZGVsdGFfYmFzZSAqZGVsdGFfYmFzZSkKIHsKIAl1bnNpZ25lZCBjaGFyICpwLCBjOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IGJhc2Vfb2Zmc2V0OwogCXVuc2lnbmVkIHNoaWZ0OworCXZvaWQgKmRhdGE7CiAKIAlvYmotPm9mZnNldCA9IGNvbnN1bWVkX2J5dGVzOworCWlucHV0X2NyYzMyID0gY3JjMzIoMCwgWl9OVUxMLCAwKTsKIAogCXAgPSBmaWxsKDEpOwogCWMgPSAqcDsKQEAgLTI0OSw3ICsyMjgsNyBAQAogCQliYXNlX29mZnNldCA9IGMgJiAxMjc7CiAJCXdoaWxlIChjICYgMTI4KSB7CiAJCQliYXNlX29mZnNldCArPSAxOwotCQkJaWYgKCFiYXNlX29mZnNldCB8fCBiYXNlX29mZnNldCAmIH4ofjBVTCA+PiA3KSkKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKIAkJCQliYWRfb2JqZWN0KG9iai0+b2Zmc2V0LCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIpOwogCQkJcCA9IGZpbGwoMSk7CiAJCQljID0gKnA7CkBAIC0yNzAsNyArMjQ5LDkgQEAKIAl9CiAJb2JqLT5oZHJfc2l6ZSA9IGNvbnN1bWVkX2J5dGVzIC0gb2JqLT5vZmZzZXQ7CiAKLQlyZXR1cm4gdW5wYWNrX2VudHJ5X2RhdGEob2JqLT5vZmZzZXQsIG9iai0+c2l6ZSk7CisJZGF0YSA9IHVucGFja19lbnRyeV9kYXRhKG9iai0+b2Zmc2V0LCBvYmotPnNpemUpOworCW9iai0+Y3JjMzIgPSBpbnB1dF9jcmMzMjsKKwlyZXR1cm4gZGF0YTsKIH0KIAogc3RhdGljIHZvaWQgKmdldF9kYXRhX2Zyb21fcGFjayhzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmopCkBAIC00MTUsNyArMzk2LDcgQEAKIC8qIFBhcnNlIGFsbCBvYmplY3RzIGFuZCByZXR1cm4gdGhlIHBhY2sgY29udGVudCBTSEExIGhhc2ggKi8KIHN0YXRpYyB2b2lkIHBhcnNlX3BhY2tfb2JqZWN0cyh1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWludCBpLCBwZXJjZW50ID0gLTE7CisJaW50IGk7CiAJc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9IGRlbHRhczsKIAl2b2lkICpkYXRhOwogCXN0cnVjdCBzdGF0IHN0OwpAQCAtNDI3LDcgKzQwOCw3IEBACiAJICogLSByZW1lbWJlciBiYXNlIChTSEExIG9yIG9mZnNldCkgZm9yIGFsbCBkZWx0YXMuCiAJICovCiAJaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAiSW5kZXhpbmcgJWQgb2JqZWN0cy5cbiIsIG5yX29iamVjdHMpOworCQlzdGFydF9wcm9ncmVzcygmcHJvZ3Jlc3MsICJJbmRleGluZyAldSBvYmplY3RzLi4uIiwgIiIsIG5yX29iamVjdHMpOwogCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CiAJCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iaiwgJmRlbHRhLT5iYXNlKTsKQEAgLTQ0MCwxMSArNDIxLDExIEBACiAJCQlzaGExX29iamVjdChkYXRhLCBvYmotPnNpemUsIG9iai0+dHlwZSwgb2JqLT5zaGExKTsKIAkJZnJlZShkYXRhKTsKIAkJaWYgKHZlcmJvc2UpCi0JCQlwZXJjZW50ID0gZGlzcGxheV9wcm9ncmVzcyhpKzEsIG5yX29iamVjdHMsIHBlcmNlbnQpOworCQkJZGlzcGxheV9wcm9ncmVzcygmcHJvZ3Jlc3MsIGkrMSk7CiAJfQogCW9iamVjdHNbaV0ub2Zmc2V0ID0gY29uc3VtZWRfYnl0ZXM7CiAJaWYgKHZlcmJvc2UpCi0JCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAogCS8qIENoZWNrIHBhY2sgaW50ZWdyaXR5ICovCiAJZmx1c2goKTsKQEAgLTQ3Niw3ICs0NTcsNyBAQAogCSAqICAgZm9yIHNvbWUgbW9yZSBkZWx0YXMuCiAJICovCiAJaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAiUmVzb2x2aW5nICVkIGRlbHRhcy5cbiIsIG5yX2RlbHRhcyk7CisJCXN0YXJ0X3Byb2dyZXNzKCZwcm9ncmVzcywgIlJlc29sdmluZyAldSBkZWx0YXMuLi4iLCAiIiwgbnJfZGVsdGFzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOwogCQl1bmlvbiBkZWx0YV9iYXNlIGJhc2U7CkBAIC01MDgsMTQgKzQ4OSwxMSBAQAogCQkJfQogCQlmcmVlKGRhdGEpOwogCQlpZiAodmVyYm9zZSkKLQkJCXBlcmNlbnQgPSBkaXNwbGF5X3Byb2dyZXNzKG5yX3Jlc29sdmVkX2RlbHRhcywKLQkJCQkJCSAgIG5yX2RlbHRhcywgcGVyY2VudCk7CisJCQlkaXNwbGF5X3Byb2dyZXNzKCZwcm9ncmVzcywgbnJfcmVzb2x2ZWRfZGVsdGFzKTsKIAl9Ci0JaWYgKHZlcmJvc2UgJiYgbnJfcmVzb2x2ZWRfZGVsdGFzID09IG5yX2RlbHRhcykKLQkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAotc3RhdGljIGludCB3cml0ZV9jb21wcmVzc2VkKGludCBmZCwgdm9pZCAqaW4sIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCB3cml0ZV9jb21wcmVzc2VkKGludCBmZCwgdm9pZCAqaW4sIHVuc2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqb2JqX2NyYykKIHsKIAl6X3N0cmVhbSBzdHJlYW07CiAJdW5zaWduZWQgbG9uZyBtYXhzaXplOwpAQCAtNTM2LDYgKzUxNCw3IEBACiAKIAlzaXplID0gc3RyZWFtLnRvdGFsX291dDsKIAl3cml0ZV9vcl9kaWUoZmQsIG91dCwgc2l6ZSk7CisJKm9ial9jcmMgPSBjcmMzMigqb2JqX2NyYywgb3V0LCBzaXplKTsKIAlmcmVlKG91dCk7CiAJcmV0dXJuIHNpemU7CiB9CkBAIC01NTYsOCArNTM1LDEwIEBACiAJfQogCWhlYWRlcltuKytdID0gYzsKIAl3cml0ZV9vcl9kaWUob3V0cHV0X2ZkLCBoZWFkZXIsIG4pOworCW9ialswXS5jcmMzMiA9IGNyYzMyKDAsIFpfTlVMTCwgMCk7CisJb2JqWzBdLmNyYzMyID0gY3JjMzIob2JqWzBdLmNyYzMyLCBoZWFkZXIsIG4pOwogCW9ialsxXS5vZmZzZXQgPSBvYmpbMF0ub2Zmc2V0ICsgbjsKLQlvYmpbMV0ub2Zmc2V0ICs9IHdyaXRlX2NvbXByZXNzZWQob3V0cHV0X2ZkLCBidWYsIHNpemUpOworCW9ialsxXS5vZmZzZXQgKz0gd3JpdGVfY29tcHJlc3NlZChvdXRwdXRfZmQsIGJ1Ziwgc2l6ZSwgJm9ialswXS5jcmMzMik7CiAJaGFzaGNweShvYmotPnNoYTEsIHNoYTEpOwogfQogCkBAIC01NzEsNyArNTUyLDcgQEAKIHN0YXRpYyB2b2lkIGZpeF91bnJlc29sdmVkX2RlbHRhcyhpbnQgbnJfdW5yZXNvbHZlZCkKIHsKIAlzdHJ1Y3QgZGVsdGFfZW50cnkgKipzb3J0ZWRfYnlfcG9zOwotCWludCBpLCBuID0gMCwgcGVyY2VudCA9IC0xOworCWludCBpLCBuID0gMDsKIAogCS8qCiAJICogU2luY2UgbWFueSB1bnJlc29sdmVkIGRlbHRhcyBtYXkgd2VsbCBiZSB0aGVtc2VsdmVzIGJhc2Ugb2JqZWN0cwpAQCAtNjE2LDEyICs1OTcsOSBAQAogCQlhcHBlbmRfb2JqX3RvX3BhY2soZC0+YmFzZS5zaGExLCBkYXRhLCBzaXplLCB0eXBlKTsKIAkJZnJlZShkYXRhKTsKIAkJaWYgKHZlcmJvc2UpCi0JCQlwZXJjZW50ID0gZGlzcGxheV9wcm9ncmVzcyhucl9yZXNvbHZlZF9kZWx0YXMsCi0JCQkJCQkgICBucl9kZWx0YXMsIHBlcmNlbnQpOworCQkJZGlzcGxheV9wcm9ncmVzcygmcHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CiAJfQogCWZyZWUoc29ydGVkX2J5X3Bvcyk7Ci0JaWYgKHZlcmJvc2UpCi0JCWZwdXRjKCdcbicsIHN0ZGVycik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRqdXN0X3BhY2tfaGVhZGVyX2FuZF9zaGExKHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC02NTUsNiArNjMzLDkgQEAKIAl3cml0ZV9vcl9kaWUob3V0cHV0X2ZkLCBzaGExLCAyMCk7CiB9CiAKK3N0YXRpYyB1aW50MzJfdCBpbmRleF9kZWZhdWx0X3ZlcnNpb24gPSAxOworc3RhdGljIHVpbnQzMl90IGluZGV4X29mZjMyX2xpbWl0ID0gMHg3ZmZmZmZmZjsKKwogc3RhdGljIGludCBzaGExX2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQogewogCXN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7CkBAIC02NzAsOSArNjUxLDEwIEBACiB7CiAJc3RydWN0IHNoYTFmaWxlICpmOwogCXN0cnVjdCBvYmplY3RfZW50cnkgKipzb3J0ZWRfYnlfc2hhLCAqKmxpc3QsICoqbGFzdDsKLQl1bnNpZ25lZCBpbnQgYXJyYXlbMjU2XTsKKwl1aW50MzJfdCBhcnJheVsyNTZdOwogCWludCBpLCBmZDsKIAlTSEFfQ1RYIGN0eDsKKwl1aW50MzJfdCBpbmRleF92ZXJzaW9uOwogCiAJaWYgKG5yX29iamVjdHMpIHsKIAkJc29ydGVkX2J5X3NoYSA9CkBAIC02ODMsNyArNjY1LDYgQEAKIAkJCXNvcnRlZF9ieV9zaGFbaV0gPSAmb2JqZWN0c1tpXTsKIAkJcXNvcnQoc29ydGVkX2J5X3NoYSwgbnJfb2JqZWN0cywgc2l6ZW9mKHNvcnRlZF9ieV9zaGFbMF0pLAogCQkgICAgICBzaGExX2NvbXBhcmUpOwotCiAJfQogCWVsc2UKIAkJc29ydGVkX2J5X3NoYSA9IGxpc3QgPSBsYXN0ID0gTlVMTDsKQEAgLTcwMiw2ICs2ODMsMTcgQEAKIAkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICVzOiAlcyIsIGluZGV4X25hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJZiA9IHNoYTFmZChmZCwgaW5kZXhfbmFtZSk7CiAKKwkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KKwlpbmRleF92ZXJzaW9uID0gKG9iamVjdHNbbnJfb2JqZWN0cy0xXS5vZmZzZXQgPj4gMzEpID8gMiA6IGluZGV4X2RlZmF1bHRfdmVyc2lvbjsKKworCS8qIGluZGV4IHZlcnNpb25zIDIgYW5kIGFib3ZlIG5lZWQgYSBoZWFkZXIgKi8KKwlpZiAoaW5kZXhfdmVyc2lvbiA+PSAyKSB7CisJCXN0cnVjdCBwYWNrX2lkeF9oZWFkZXIgaGRyOworCQloZHIuaWR4X3NpZ25hdHVyZSA9IGh0b25sKFBBQ0tfSURYX1NJR05BVFVSRSk7CisJCWhkci5pZHhfdmVyc2lvbiA9IGh0b25sKGluZGV4X3ZlcnNpb24pOworCQlzaGExd3JpdGUoZiwgJmhkciwgc2l6ZW9mKGhkcikpOworCX0KKwogCS8qCiAJICogV3JpdGUgdGhlIGZpcnN0LWxldmVsIHRhYmxlICh0aGUgbGlzdCBpcyBzb3J0ZWQsCiAJICogYnV0IHdlIHVzZSBhIDI1Ni1lbnRyeSBsb29rdXAgdG8gYmUgYWJsZSB0byBhdm9pZApAQCAtNzE4LDI0ICs3MTAsNjEgQEAKIAkJYXJyYXlbaV0gPSBodG9ubChuZXh0IC0gc29ydGVkX2J5X3NoYSk7CiAJCWxpc3QgPSBuZXh0OwogCX0KLQlzaGExd3JpdGUoZiwgYXJyYXksIDI1NiAqIHNpemVvZihpbnQpKTsKKwlzaGExd3JpdGUoZiwgYXJyYXksIDI1NiAqIDQpOwogCi0JLyogcmVjb21wdXRlIHRoZSBTSEExIGhhc2ggb2Ygc29ydGVkIG9iamVjdCBuYW1lcy4KLQkgKiBjdXJyZW50bHkgcGFjay1vYmplY3RzIGRvZXMgbm90IGRvIHRoaXMsIGJ1dCB0aGF0Ci0JICogY2FuIGJlIGZpeGVkLgotCSAqLworCS8qIGNvbXB1dGUgdGhlIFNIQTEgaGFzaCBvZiBzb3J0ZWQgb2JqZWN0IG5hbWVzLiAqLwogCVNIQTFfSW5pdCgmY3R4KTsKKwogCS8qCiAJICogV3JpdGUgdGhlIGFjdHVhbCBTSEExIGVudHJpZXMuLgogCSAqLwogCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOwogCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKLQkJdW5zaWduZWQgaW50IG9mZnNldCA9IGh0b25sKG9iai0+b2Zmc2V0KTsKLQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQlpZiAoaW5kZXhfdmVyc2lvbiA8IDIpIHsKKwkJCXVpbnQzMl90IG9mZnNldCA9IGh0b25sKG9iai0+b2Zmc2V0KTsKKwkJCXNoYTF3cml0ZShmLCAmb2Zmc2V0LCA0KTsKKwkJfQogCQlzaGExd3JpdGUoZiwgb2JqLT5zaGExLCAyMCk7CiAJCVNIQTFfVXBkYXRlKCZjdHgsIG9iai0+c2hhMSwgMjApOwogCX0KKworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJdW5zaWduZWQgaW50IG5yX2xhcmdlX29mZnNldCA9IDA7CisKKwkJLyogd3JpdGUgdGhlIGNyYzMyIHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAqbGlzdCsrOworCQkJdWludDMyX3QgY3JjMzJfdmFsID0gaHRvbmwob2JqLT5jcmMzMik7CisJCQlzaGExd3JpdGUoZiwgJmNyYzMyX3ZhbCwgNCk7CisJCX0KKworCQkvKiB3cml0ZSB0aGUgMzItYml0IG9mZnNldCB0YWJsZSAqLworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQzMl90IG9mZnNldCA9IChvYmotPm9mZnNldCA8PSBpbmRleF9vZmYzMl9saW1pdCkgPworCQkJCW9iai0+b2Zmc2V0IDogKDB4ODAwMDAwMDAgfCBucl9sYXJnZV9vZmZzZXQrKyk7CisJCQlvZmZzZXQgPSBodG9ubChvZmZzZXQpOworCQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQl9CisKKwkJLyogd3JpdGUgdGhlIGxhcmdlIG9mZnNldCB0YWJsZSAqLworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJd2hpbGUgKG5yX2xhcmdlX29mZnNldCkgeworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJCXVpbnQ2NF90IG9mZnNldCA9IG9iai0+b2Zmc2V0OworCQkJaWYgKG9mZnNldCA+IGluZGV4X29mZjMyX2xpbWl0KSB7CisJCQkJdWludDMyX3Qgc3BsaXRbMl07CisJCQkJc3BsaXRbMF0JPSBodG9ubChvZmZzZXQgPj4gMzIpOworCQkJCXNwbGl0WzFdID0gaHRvbmwob2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCQkJc2hhMXdyaXRlKGYsIHNwbGl0LCA4KTsKKwkJCQlucl9sYXJnZV9vZmZzZXQtLTsKKwkJCX0KKwkJfQorCX0KKwogCXNoYTF3cml0ZShmLCBzaGExLCAyMCk7CiAJc2hhMWNsb3NlKGYsIE5VTEwsIDEpOwogCWZyZWUoc29ydGVkX2J5X3NoYSk7CkBAIC04NjUsNiArODk0LDE1IEBACiAJCQkJaWYgKGluZGV4X25hbWUgfHwgKGkrMSkgPj0gYXJnYykKIAkJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CiAJCQkJaW5kZXhfbmFtZSA9IGFyZ3ZbKytpXTsKKwkJCX0gZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWluZGV4LXZlcnNpb249IikpIHsKKwkJCQljaGFyICpjOworCQkJCWluZGV4X2RlZmF1bHRfdmVyc2lvbiA9IHN0cnRvdWwoYXJnICsgMTYsICZjLCAxMCk7CisJCQkJaWYgKGluZGV4X2RlZmF1bHRfdmVyc2lvbiA+IDIpCisJCQkJCWRpZSgiYmFkICVzIiwgYXJnKTsKKwkJCQlpZiAoKmMgPT0gJywnKQorCQkJCQlpbmRleF9vZmYzMl9saW1pdCA9IHN0cnRvdWwoYysxLCAmYywgMCk7CisJCQkJaWYgKCpjIHx8IGluZGV4X29mZjMyX2xpbWl0ICYgMHg4MDAwMDAwMCkKKwkJCQkJZGllKCJiYWQgJXMiLCBhcmcpOwogCQkJfSBlbHNlCiAJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CiAJCQljb250aW51ZTsKQEAgLTkwNCwxMCArOTQyLDEzIEBACiAJcGFyc2VfcGFja19oZWFkZXIoKTsKIAlvYmplY3RzID0geG1hbGxvYygobnJfb2JqZWN0cyArIDEpICogc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKIAlkZWx0YXMgPSB4bWFsbG9jKG5yX29iamVjdHMgKiBzaXplb2Yoc3RydWN0IGRlbHRhX2VudHJ5KSk7Ci0JaWYgKHZlcmJvc2UpCi0JCXNldHVwX3Byb2dyZXNzX3NpZ25hbCgpOwogCXBhcnNlX3BhY2tfb2JqZWN0cyhzaGExKTsKLQlpZiAobnJfZGVsdGFzICE9IG5yX3Jlc29sdmVkX2RlbHRhcykgeworCWlmIChucl9kZWx0YXMgPT0gbnJfcmVzb2x2ZWRfZGVsdGFzKSB7CisJCWlmICh2ZXJib3NlKQorCQkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCQkvKiBGbHVzaCByZW1haW5pbmcgcGFjayBmaW5hbCAyMC1ieXRlIFNIQTEuICovCisJCWZsdXNoKCk7CisJfSBlbHNlIHsKIAkJaWYgKGZpeF90aGluX3BhY2spIHsKIAkJCWludCBucl91bnJlc29sdmVkID0gbnJfZGVsdGFzIC0gbnJfcmVzb2x2ZWRfZGVsdGFzOwogCQkJaW50IG5yX29iamVjdHNfaW5pdGlhbCA9IG5yX29iamVjdHM7CkBAIC05MTcsMTcgKzk1OCwxNiBAQAogCQkJCQkgICAobnJfb2JqZWN0cyArIG5yX3VucmVzb2x2ZWQgKyAxKQogCQkJCQkgICAqIHNpemVvZigqb2JqZWN0cykpOwogCQkJZml4X3VucmVzb2x2ZWRfZGVsdGFzKG5yX3VucmVzb2x2ZWQpOwotCQkJaWYgKHZlcmJvc2UpCisJCQlpZiAodmVyYm9zZSkgeworCQkJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAkJCQlmcHJpbnRmKHN0ZGVyciwgIiVkIG9iamVjdHMgd2VyZSBhZGRlZCB0byBjb21wbGV0ZSB0aGlzIHRoaW4gcGFjay5cbiIsCiAJCQkJCW5yX29iamVjdHMgLSBucl9vYmplY3RzX2luaXRpYWwpOworCQkJfQogCQkJcmVhZGp1c3RfcGFja19oZWFkZXJfYW5kX3NoYTEoc2hhMSk7CiAJCX0KIAkJaWYgKG5yX2RlbHRhcyAhPSBucl9yZXNvbHZlZF9kZWx0YXMpCiAJCQlkaWUoInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIiwKIAkJCSAgICBucl9kZWx0YXMgLSBucl9yZXNvbHZlZF9kZWx0YXMpOwotCX0gZWxzZSB7Ci0JCS8qIEZsdXNoIHJlbWFpbmluZyBwYWNrIGZpbmFsIDIwLWJ5dGUgU0hBMS4gKi8KLQkJZmx1c2goKTsKIAl9CiAJZnJlZShkZWx0YXMpOwogCWN1cnJfaW5kZXggPSB3cml0ZV9pbmRleF9maWxlKGluZGV4X25hbWUsIHNoYTEpOwpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLmMgYi9saXN0LW9iamVjdHMuYwppbmRleCAyYmEyYzk1Li4zMTBmOGQzIDEwMDY0NAotLS0gYS9saXN0LW9iamVjdHMuYworKysgYi9saXN0LW9iamVjdHMuYwpAQCAtMjUsNiArMjUsMzcgQEAKIAlhZGRfb2JqZWN0KG9iaiwgcCwgcGF0aCwgbmFtZSk7CiB9CiAKKy8qCisgKiBQcm9jZXNzaW5nIGEgZ2l0bGluayBlbnRyeSBjdXJyZW50bHkgZG9lcyBub3RoaW5nLCBzaW5jZQorICogd2UgZG8gbm90IHJlY3Vyc2UgaW50byB0aGUgc3VicHJvamVjdC4KKyAqCisgKiBXZSAqY291bGQqIGV2ZW50dWFsbHkgYWRkIGEgZmxhZyB0aGF0IGFjdHVhbGx5IGRvZXMgdGhhdCwKKyAqIHdoaWNoIHdvdWxkIGludm9sdmU6CisgKiAgLSBpcyB0aGUgc3VicHJvamVjdCBhY3R1YWxseSBjaGVja2VkIG91dD8KKyAqICAtIGlmIHNvLCBzZWUgaWYgdGhlIHN1YnByb2plY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZAorICogICAgdG8gdGhlIGFsdGVybmF0ZXMgbGlzdCwgYW5kIGFkZCBpdCBpZiBub3QuCisgKiAgLSBwcm9jZXNzIHRoZSBjb21taXQgKG9yIHRhZykgdGhlIGdpdGxpbmsgcG9pbnRzIHRvCisgKiAgICByZWN1cnNpdmVseS4KKyAqCisgKiBIb3dldmVyLCBpdCdzIHVuY2xlYXIgd2hldGhlciB0aGVyZSBpcyByZWFsbHkgZXZlciBhbnkKKyAqIHJlYXNvbiB0byBzZWUgc3VwZXJwcm9qZWN0cyBhbmQgc3VicHJvamVjdHMgYXMgc3VjaCBhCisgKiAidW5pZmllZCIgb2JqZWN0IHBvb2wgKHBvdGVudGlhbGx5IHJlc3VsdGluZyBpbiBhIHRvdGFsbHkKKyAqIGh1bW9uZ291cyBwYWNrIC0gYXZvaWRpbmcgd2hpY2ggd2FzIHRoZSB3aG9sZSBwb2ludCBvZgorICogaGF2aW5nIGdpdGxpbmtzIGluIHRoZSBmaXJzdCBwbGFjZSEpLgorICoKKyAqIFNvIGZvciBub3csIHRoZXJlIGlzIGp1c3QgYSBub3RlIHRoYXQgd2UgKmNvdWxkKiBmb2xsb3cKKyAqIHRoZSBsaW5rLCBhbmQgaG93IHRvIGRvIGl0LiBXaGV0aGVyIGl0IG5lY2Vzc2FyaWx5IG1ha2VzCisgKiBhbnkgc2Vuc2Ugd2hhdC1zby1ldmVyIHRvIGV2ZXIgZG8gdGhhdCBpcyBhbm90aGVyIGlzc3VlLgorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2dpdGxpbmsoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc3RydWN0IG9iamVjdF9hcnJheSAqcCwKKwkJCSAgICBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLAogCQkJIHN0cnVjdCB0cmVlICp0cmVlLAogCQkJIHN0cnVjdCBvYmplY3RfYXJyYXkgKnAsCkBAIC01Niw2ICs4Nyw5IEBACiAJCQlwcm9jZXNzX3RyZWUocmV2cywKIAkJCQkgICAgIGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpLAogCQkJCSAgICAgcCwgJm1lLCBlbnRyeS5wYXRoKTsKKwkJZWxzZSBpZiAoU19JU0RJUkxOSyhlbnRyeS5tb2RlKSkKKwkJCXByb2Nlc3NfZ2l0bGluayhyZXZzLCBlbnRyeS5zaGExLAorCQkJCQlwLCAmbWUsIGVudHJ5LnBhdGgpOwogCQllbHNlCiAJCQlwcm9jZXNzX2Jsb2IocmV2cywKIAkJCQkgICAgIGxvb2t1cF9ibG9iKGVudHJ5LnNoYTEpLApkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuYyBiL2xvY2tmaWxlLmMKaW5kZXggNDgyNGY0ZC4uMjNkYjM1YSAxMDA2NDQKLS0tIGEvbG9ja2ZpbGUuYworKysgYi9sb2NrZmlsZS5jCkBAIC00LDExICs0LDE1IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKIAogc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZV9saXN0Oworc3RhdGljIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9pbmRleF9vdXRwdXQ7CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9sb2NrX2ZpbGUodm9pZCkKIHsKKwlwaWRfdCBtZSA9IGdldHBpZCgpOworCiAJd2hpbGUgKGxvY2tfZmlsZV9saXN0KSB7Ci0JCWlmIChsb2NrX2ZpbGVfbGlzdC0+ZmlsZW5hbWVbMF0pCisJCWlmIChsb2NrX2ZpbGVfbGlzdC0+b3duZXIgPT0gbWUgJiYKKwkJICAgIGxvY2tfZmlsZV9saXN0LT5maWxlbmFtZVswXSkKIAkJCXVubGluayhsb2NrX2ZpbGVfbGlzdC0+ZmlsZW5hbWUpOwogCQlsb2NrX2ZpbGVfbGlzdCA9IGxvY2tfZmlsZV9saXN0LT5uZXh0OwogCX0KQEAgLTI3LDYgKzMxLDcgQEAKIAlzcHJpbnRmKGxrLT5maWxlbmFtZSwgIiVzLmxvY2siLCBwYXRoKTsKIAlmZCA9IG9wZW4obGstPmZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKIAlpZiAoMCA8PSBmZCkgeworCQlsay0+b3duZXIgPSBnZXRwaWQoKTsKIAkJaWYgKCFsay0+b25fbGlzdCkgewogCQkJbGstPm5leHQgPSBsb2NrX2ZpbGVfbGlzdDsKIAkJCWxvY2tfZmlsZV9saXN0ID0gbGs7CkBAIC02NSw2ICs3MCwyNyBAQAogCXJldHVybiBpOwogfQogCitpbnQgaG9sZF9sb2NrZWRfaW5kZXgoc3RydWN0IGxvY2tfZmlsZSAqbGssIGludCBkaWVfb25fZXJyb3IpCit7CisJcmV0dXJuIGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobGssIGdldF9pbmRleF9maWxlKCksIGRpZV9vbl9lcnJvcik7Cit9CisKK3ZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlhbHRlcm5hdGVfaW5kZXhfb3V0cHV0ID0gbmFtZTsKK30KKworaW50IGNvbW1pdF9sb2NrZWRfaW5kZXgoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJaWYgKGFsdGVybmF0ZV9pbmRleF9vdXRwdXQpIHsKKwkJaW50IHJlc3VsdCA9IHJlbmFtZShsay0+ZmlsZW5hbWUsIGFsdGVybmF0ZV9pbmRleF9vdXRwdXQpOworCQlsay0+ZmlsZW5hbWVbMF0gPSAwOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwllbHNlCisJCXJldHVybiBjb21taXRfbG9ja19maWxlKGxrKTsKK30KKwogdm9pZCByb2xsYmFja19sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCiB7CiAJaWYgKGxrLT5maWxlbmFtZVswXSkKZGlmZiAtLWdpdCBhL2xvZy10cmVlLmMgYi9sb2ctdHJlZS5jCmluZGV4IDg3OTdhYTEuLmM2NzkzMjQgMTAwNjQ0Ci0tLSBhL2xvZy10cmVlLmMKKysrIGIvbG9nLXRyZWUuYwpAQCAtNCw2ICs0LDggQEAKICNpbmNsdWRlICJsb2ctdHJlZS5oIgogI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCiAKK3N0cnVjdCBkZWNvcmF0aW9uIG5hbWVfZGVjb3JhdGlvbiA9IHsgIm9iamVjdCBuYW1lcyIgfTsKKwogc3RhdGljIHZvaWQgc2hvd19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFiYnJldikKIHsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CkBAIC0xMyw2ICsxNSwyMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2hvd19kZWNvcmF0aW9ucyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb247CisKKwlkZWNvcmF0aW9uID0gbG9va3VwX2RlY29yYXRpb24oJm5hbWVfZGVjb3JhdGlvbiwgJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoIWRlY29yYXRpb24pCisJCXJldHVybjsKKwlwcmVmaXggPSAiICgiOworCXdoaWxlIChkZWNvcmF0aW9uKSB7CisJCXByaW50ZigiJXMlcyIsIHByZWZpeCwgZGVjb3JhdGlvbi0+bmFtZSk7CisJCXByZWZpeCA9ICIsICI7CisJCWRlY29yYXRpb24gPSBkZWNvcmF0aW9uLT5uZXh0OworCX0KKwlwdXRjaGFyKCcpJyk7Cit9CisKIC8qCiAgKiBTZWFyY2ggZm9yICJeWy1BLVphLXpdKzogW15AXStAIiBwYXR0ZXJuLiBJdCB1c3VhbGx5IG1hdGNoZXMKICAqIFNpZ25lZC1vZmYtYnk6IGFuZCBBY2tlZC1ieTogbGluZXMuCkBAIC0xMzYsNiArMTU1LDcgQEAKIAkJZnB1dHMoZGlmZl91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLCBzdGRvdXQpOwogCQlpZiAob3B0LT5wYXJlbnRzKQogCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CisJCXNob3dfZGVjb3JhdGlvbnMoY29tbWl0KTsKIAkJcHV0Y2hhcihvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CiAJCXJldHVybjsKIAl9CkBAIC0xNjUsMTQgKzE4NSwyMCBAQAogCQlpZiAob3B0LT50b3RhbCA+IDApIHsKIAkJCXN0YXRpYyBjaGFyIGJ1ZmZlcls2NF07CiAJCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAotCQkJCQkiU3ViamVjdDogW1BBVENIICUwKmQvJWRdICIsCisJCQkJCSJTdWJqZWN0OiBbJXMgJTAqZC8lZF0gIiwKKwkJCQkJb3B0LT5zdWJqZWN0X3ByZWZpeCwKIAkJCQkJZGlnaXRzX2luX251bWJlcihvcHQtPnRvdGFsKSwKIAkJCQkJb3B0LT5uciwgb3B0LT50b3RhbCk7CiAJCQlzdWJqZWN0ID0gYnVmZmVyOwotCQl9IGVsc2UgaWYgKG9wdC0+dG90YWwgPT0gMCkKLQkJCXN1YmplY3QgPSAiU3ViamVjdDogW1BBVENIXSAiOwotCQllbHNlCisJCX0gZWxzZSBpZiAob3B0LT50b3RhbCA9PSAwKSB7CisJCQlzdGF0aWMgY2hhciBidWZmZXJbMjU2XTsKKwkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkJCSJTdWJqZWN0OiBbJXNdICIsCisJCQkJCW9wdC0+c3ViamVjdF9wcmVmaXgpOworCQkJc3ViamVjdCA9IGJ1ZmZlcjsKKwkJfSBlbHNlIHsKIAkJCXN1YmplY3QgPSAiU3ViamVjdDogIjsKKwkJfQogCiAJCXByaW50ZigiRnJvbSAlcyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiIsIHNoYTEpOwogCQlpZiAob3B0LT5tZXNzYWdlX2lkKQpAQCAtMjM0LDEzICsyNjAsMTQgQEAKIAkJCXByaW50ZigiIChmcm9tICVzKSIsCiAJCQkgICAgICAgZGlmZl91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0LnNoYTEsCiAJCQkJCQkgIGFiYnJldl9jb21taXQpKTsKKwkJc2hvd19kZWNvcmF0aW9ucyhjb21taXQpOwogCQlwcmludGYoIiVzIiwKIAkJICAgICAgIGRpZmZfZ2V0X2NvbG9yKG9wdC0+ZGlmZm9wdC5jb2xvcl9kaWZmLCBESUZGX1JFU0VUKSk7CiAJCXB1dGNoYXIob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUgPyAnICcgOiAnXG4nKTsKIAkJaWYgKG9wdC0+cmVmbG9nX2luZm8pIHsKIAkJCXNob3dfcmVmbG9nX21lc3NhZ2Uob3B0LT5yZWZsb2dfaW5mbywKIAkJCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUsCi0JCQkJICAgIG9wdC0+cmVsYXRpdmVfZGF0ZSk7CisJCQkJICAgIG9wdC0+ZGF0ZV9tb2RlKTsKIAkJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkgewogCQkJCXByaW50ZigiJXMiLCBzZXApOwogCQkJCXJldHVybjsKQEAgLTI1Myw3ICsyODAsNyBAQAogCSAqLwogCWxlbiA9IHByZXR0eV9wcmludF9jb21taXQob3B0LT5jb21taXRfZm9ybWF0LCBjb21taXQsIH4wdSwgdGhpc19oZWFkZXIsCiAJCQkJICBzaXplb2YodGhpc19oZWFkZXIpLCBhYmJyZXYsIHN1YmplY3QsCi0JCQkJICBleHRyYV9oZWFkZXJzLCBvcHQtPnJlbGF0aXZlX2RhdGUpOworCQkJCSAgZXh0cmFfaGVhZGVycywgb3B0LT5kYXRlX21vZGUpOwogCiAJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCiAJCWxlbiA9IGFwcGVuZF9zaWdub2ZmKHRoaXNfaGVhZGVyLCBzaXplb2YodGhpc19oZWFkZXIpLCBsZW4sCmRpZmYgLS1naXQgYS9tYWlsbWFwLmMgYi9tYWlsbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1NjdhMgotLS0gL2Rldi9udWxsCisrKyBiL21haWxtYXAuYwpAQCAtMCwwICsxLDkyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXRoLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisKK2ludCByZWFkX21haWxtYXAoc3RydWN0IHBhdGhfbGlzdCAqbWFwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqKnJlcG9fYWJicmV2KQoreworCWNoYXIgYnVmZmVyWzEwMjRdOworCUZJTEUgKmYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKworCWlmIChmID09IE5VTEwpCisJCXJldHVybiAxOworCXdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmKSAhPSBOVUxMKSB7CisJCWNoYXIgKmVuZF9vZl9uYW1lLCAqbGVmdF9icmFja2V0LCAqcmlnaHRfYnJhY2tldDsKKwkJY2hhciAqbmFtZSwgKmVtYWlsOworCQlpbnQgaTsKKwkJaWYgKGJ1ZmZlclswXSA9PSAnIycpIHsKKwkJCXN0YXRpYyBjb25zdCBjaGFyIGFiYnJldltdID0gIiMgcmVwby1hYmJyZXY6IjsKKwkJCWludCBhYmJsZW4gPSBzaXplb2YoYWJicmV2KSAtIDE7CisJCQlpbnQgbGVuID0gc3RybGVuKGJ1ZmZlcik7CisKKwkJCWlmICghcmVwb19hYmJyZXYpCisJCQkJY29udGludWU7CisKKwkJCWlmIChsZW4gJiYgYnVmZmVyW2xlbiAtIDFdID09ICdcbicpCisJCQkJYnVmZmVyWy0tbGVuXSA9IDA7CisJCQlpZiAoIXN0cm5jbXAoYnVmZmVyLCBhYmJyZXYsIGFiYmxlbikpIHsKKwkJCQljaGFyICpjcDsKKworCQkJCWlmIChyZXBvX2FiYnJldikKKwkJCQkJZnJlZSgqcmVwb19hYmJyZXYpOworCQkJCSpyZXBvX2FiYnJldiA9IHhtYWxsb2MobGVuKTsKKworCQkJCWZvciAoY3AgPSBidWZmZXIgKyBhYmJsZW47IGlzc3BhY2UoKmNwKTsgY3ArKykKKwkJCQkJOyAvKiBub3RoaW5nICovCisJCQkJc3RyY3B5KCpyZXBvX2FiYnJldiwgY3ApOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKChsZWZ0X2JyYWNrZXQgPSBzdHJjaHIoYnVmZmVyLCAnPCcpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmICgocmlnaHRfYnJhY2tldCA9IHN0cmNocihsZWZ0X2JyYWNrZXQgKyAxLCAnPicpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChyaWdodF9icmFja2V0ID09IGxlZnRfYnJhY2tldCArIDEpCisJCQljb250aW51ZTsKKwkJZm9yIChlbmRfb2ZfbmFtZSA9IGxlZnRfYnJhY2tldDsgZW5kX29mX25hbWUgIT0gYnVmZmVyCisJCQkJJiYgaXNzcGFjZShlbmRfb2ZfbmFtZVstMV0pOyBlbmRfb2ZfbmFtZS0tKQorCQkJLyoga2VlcCBvbiBsb29raW5nICovCisJCWlmIChlbmRfb2ZfbmFtZSA9PSBidWZmZXIpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IHhtYWxsb2MoZW5kX29mX25hbWUgLSBidWZmZXIgKyAxKTsKKwkJc3RybGNweShuYW1lLCBidWZmZXIsIGVuZF9vZl9uYW1lIC0gYnVmZmVyICsgMSk7CisJCWVtYWlsID0geG1hbGxvYyhyaWdodF9icmFja2V0IC0gbGVmdF9icmFja2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IHJpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxOyBpKyspCisJCQllbWFpbFtpXSA9IHRvbG93ZXIobGVmdF9icmFja2V0W2kgKyAxXSk7CisJCWVtYWlsW3JpZ2h0X2JyYWNrZXQgLSBsZWZ0X2JyYWNrZXQgLSAxXSA9ICdcMCc7CisJCXBhdGhfbGlzdF9pbnNlcnQoZW1haWwsIG1hcCktPnV0aWwgPSBuYW1lOworCX0KKwlmY2xvc2UoZik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYXBfZW1haWwoc3RydWN0IHBhdGhfbGlzdCAqbWFwLCBjb25zdCBjaGFyICplbWFpbCwgY2hhciAqbmFtZSwgaW50IG1heGxlbikKK3sKKwljaGFyICpwOworCXN0cnVjdCBwYXRoX2xpc3RfaXRlbSAqaXRlbTsKKwljaGFyIGJ1ZlsxMDI0XSwgKm1haWxidWY7CisJaW50IGk7CisKKwkvKiBhdXRvY29tcGxldGUgY29tbW9uIGRldmVsb3BlcnMgKi8KKwlwID0gc3RyY2hyKGVtYWlsLCAnPicpOworCWlmICghcCkKKwkJcmV0dXJuIDA7CisJaWYgKHAgLSBlbWFpbCArIDEgPCBzaXplb2YoYnVmKSkKKwkJbWFpbGJ1ZiA9IGJ1ZjsKKwllbHNlCisJCW1haWxidWYgPSB4bWFsbG9jKHAgLSBlbWFpbCArIDEpOworCisJLyogZG93bmNhc2UgdGhlIGVtYWlsIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcCAtIGVtYWlsOyBpKyspCisJCW1haWxidWZbaV0gPSB0b2xvd2VyKGVtYWlsW2ldKTsKKwltYWlsYnVmW2ldID0gMDsKKwlpdGVtID0gcGF0aF9saXN0X2xvb2t1cChtYWlsYnVmLCBtYXApOworCWlmIChtYWlsYnVmICE9IGJ1ZikKKwkJZnJlZShtYWlsYnVmKTsKKwlpZiAoaXRlbSAhPSBOVUxMKSB7CisJCWNvbnN0IGNoYXIgKnJlYWxuYW1lID0gKGNvbnN0IGNoYXIgKilpdGVtLT51dGlsOworCQlzdHJsY3B5KG5hbWUsIHJlYWxuYW1lLCBtYXhsZW4pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL21haWxtYXAuaCBiL21haWxtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTAzZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWFpbG1hcC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBNQUlMTUFQX0gKKyNkZWZpbmUgTUFJTE1BUF9ICisKK2ludCByZWFkX21haWxtYXAoc3RydWN0IHBhdGhfbGlzdCAqbWFwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqKnJlcG9fYWJicmV2KTsKK2ludCBtYXBfZW1haWwoc3RydWN0IHBhdGhfbGlzdCAqbWFpbG1hcCwgY29uc3QgY2hhciAqZW1haWwsIGNoYXIgKm5hbWUsIGludCBtYXhsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21hdGNoLXRyZWVzLmMgYi9tYXRjaC10cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzY2FmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tYXRjaC10cmVlcy5jCkBAIC0wLDAgKzEsMzA0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisKK3N0YXRpYyBpbnQgc2NvcmVfbWlzc2luZyh1bnNpZ25lZCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzY29yZTsKKworCWlmIChTX0lTRElSKG1vZGUpKQorCQlzY29yZSA9IC0xMDAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZSkpCisJCXNjb3JlID0gLTUwMDsKKwllbHNlCisJCXNjb3JlID0gLTUwOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIGludCBzY29yZV9kaWZmZXJzKHVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc2NvcmU7CisKKwlpZiAoU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpCisJCXNjb3JlID0gLTEwMDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUxKSAhPSBTX0lTTE5LKG1vZGUyKSkKKwkJc2NvcmUgPSAtNTA7CisJZWxzZQorCQlzY29yZSA9IC01OworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIGludCBzY29yZV9tYXRjaGVzKHVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgc2NvcmU7CisKKwkvKiBIZWgsIHdlIGZvdW5kIFNIQS0xIGNvbGxpc2lvbnMgYmV0d2VlbiBkaWZmZXJlbnQga2luZCBvZiBvYmplY3RzICovCisJaWYgKFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKQorCQlzY29yZSA9IC0xMDA7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlMSkgIT0gU19JU0xOSyhtb2RlMikpCisJCXNjb3JlID0gLTUwOworCisJZWxzZSBpZiAoU19JU0RJUihtb2RlMSkpCisJCXNjb3JlID0gMTAwMDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUxKSkKKwkJc2NvcmUgPSA1MDA7CisJZWxzZQorCQlzY29yZSA9IDI1MDsKKwlyZXR1cm4gc2NvcmU7Cit9CisKKy8qCisgKiBJbnNwZWN0IHR3byB0cmVlcywgYW5kIGdpdmUgYSBzY29yZSB0aGF0IHRlbGxzIGhvdyBzaW1pbGFyIHRoZXkgYXJlLgorICovCitzdGF0aWMgaW50IHNjb3JlX3RyZWVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMikKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHR3bzsKKwl2b2lkICpvbmVfYnVmLCAqdHdvX2J1ZjsKKwlpbnQgc2NvcmUgPSAwOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlvbmVfYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFvbmVfYnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpCisJCWRpZSgiJXMgaXMgbm90IGEgdHJlZSIsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaW5pdF90cmVlX2Rlc2MoJm9uZSwgb25lX2J1Ziwgc2l6ZSk7CisJdHdvX2J1ZiA9IHJlYWRfc2hhMV9maWxlKGhhc2gyLCAmdHlwZSwgJnNpemUpOworCWlmICghdHdvX2J1ZikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiLCBzaGExX3RvX2hleChoYXNoMikpOworCWlmICh0eXBlICE9IE9CSl9UUkVFKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCBzaGExX3RvX2hleChoYXNoMikpOworCWluaXRfdHJlZV9kZXNjKCZ0d28sIHR3b19idWYsIHNpemUpOworCXdoaWxlIChvbmUuc2l6ZSB8IHR3by5zaXplKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVsZW0xID0gZWxlbTE7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVsZW0yID0gZWxlbTI7CisJCWNvbnN0IGNoYXIgKnBhdGgxID0gcGF0aDE7CisJCWNvbnN0IGNoYXIgKnBhdGgyID0gcGF0aDI7CisJCXVuc2lnbmVkIG1vZGUxID0gbW9kZTE7CisJCXVuc2lnbmVkIG1vZGUyID0gbW9kZTI7CisJCWludCBjbXA7CisKKwkJaWYgKG9uZS5zaXplKQorCQkJZWxlbTEgPSB0cmVlX2VudHJ5X2V4dHJhY3QoJm9uZSwgJnBhdGgxLCAmbW9kZTEpOworCQlpZiAodHdvLnNpemUpCisJCQllbGVtMiA9IHRyZWVfZW50cnlfZXh0cmFjdCgmdHdvLCAmcGF0aDIsICZtb2RlMik7CisKKwkJaWYgKCFvbmUuc2l6ZSkgeworCQkJLyogdHdvIGhhcyBtb3JlIGVudHJpZXMgKi8KKwkJCXNjb3JlICs9IHNjb3JlX21pc3NpbmcobW9kZTIsIHBhdGgyKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0d28pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF0d28uc2l6ZSkgeworCQkJLyogdHdvIGxhY2tzIHRoaXMgZW50cnkgKi8KKwkJCXNjb3JlICs9IHNjb3JlX21pc3NpbmcobW9kZTEsIHBhdGgxKTsKKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZvbmUpOworCQkJY29udGludWU7CisJCX0KKwkJY21wID0gYmFzZV9uYW1lX2NvbXBhcmUocGF0aDEsIHN0cmxlbihwYXRoMSksIG1vZGUxLAorCQkJCQlwYXRoMiwgc3RybGVuKHBhdGgyKSwgbW9kZTIpOworCQlpZiAoY21wIDwgMCkgeworCQkJLyogcGF0aDEgZG9lcyBub3QgYXBwZWFyIGluIHR3byAqLworCQkJc2NvcmUgKz0gc2NvcmVfbWlzc2luZyhtb2RlMSwgcGF0aDEpOworCQkJdXBkYXRlX3RyZWVfZW50cnkoJm9uZSk7CisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChjbXAgPiAwKSB7CisJCQkvKiBwYXRoMiBkb2VzIG5vdCBhcHBlYXIgaW4gb25lICovCisJCQlzY29yZSArPSBzY29yZV9taXNzaW5nKG1vZGUyLCBwYXRoMik7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHdvKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKGhhc2hjbXAoZWxlbTEsIGVsZW0yKSkKKwkJCS8qIHRoZXkgYXJlIGRpZmZlcmVudCAqLworCQkJc2NvcmUgKz0gc2NvcmVfZGlmZmVycyhtb2RlMSwgbW9kZTIsIHBhdGgxKTsKKwkJZWxzZQorCQkJLyogc2FtZSBzdWJ0cmVlIG9yIGJsb2IgKi8KKwkJCXNjb3JlICs9IHNjb3JlX21hdGNoZXMobW9kZTEsIG1vZGUyLCBwYXRoMSk7CisJCXVwZGF0ZV90cmVlX2VudHJ5KCZvbmUpOworCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHdvKTsKKwl9CisJZnJlZShvbmVfYnVmKTsKKwlmcmVlKHR3b19idWYpOworCXJldHVybiBzY29yZTsKK30KKworLyoKKyAqIE1hdGNoIG9uZSBpdHNlbGYgYW5kIGl0cyBzdWJ0cmVlcyB3aXRoIHR3byBhbmQgcGljayB0aGUgYmVzdCBtYXRjaC4KKyAqLworc3RhdGljIHZvaWQgbWF0Y2hfdHJlZXMoY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDEsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMiwKKwkJCWludCAqYmVzdF9zY29yZSwKKwkJCWNoYXIgKipiZXN0X21hdGNoLAorCQkJY2hhciAqYmFzZSwKKwkJCWludCByZWN1cnNlX2xpbWl0KQoreworCXN0cnVjdCB0cmVlX2Rlc2Mgb25lOworCXZvaWQgKm9uZV9idWY7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCW9uZV9idWYgPSByZWFkX3NoYTFfZmlsZShoYXNoMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIW9uZV9idWYpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIiwgc2hhMV90b19oZXgoaGFzaDEpKTsKKwlpZiAodHlwZSAhPSBPQkpfVFJFRSkKKwkJZGllKCIlcyBpcyBub3QgYSB0cmVlIiwgc2hhMV90b19oZXgoaGFzaDEpKTsKKwlpbml0X3RyZWVfZGVzYygmb25lLCBvbmVfYnVmLCBzaXplKTsKKworCXdoaWxlIChvbmUuc2l6ZSkgeworCQljb25zdCBjaGFyICpwYXRoOworCQljb25zdCB1bnNpZ25lZCBjaGFyICplbGVtOworCQl1bnNpZ25lZCBtb2RlOworCQlpbnQgc2NvcmU7CisKKwkJZWxlbSA9IHRyZWVfZW50cnlfZXh0cmFjdCgmb25lLCAmcGF0aCwgJm1vZGUpOworCQlpZiAoIVNfSVNESVIobW9kZSkpCisJCQlnb3RvIG5leHQ7CisJCXNjb3JlID0gc2NvcmVfdHJlZXMoZWxlbSwgaGFzaDIpOworCQlpZiAoKmJlc3Rfc2NvcmUgPCBzY29yZSkgeworCQkJY2hhciAqbmV3cGF0aDsKKwkJCW5ld3BhdGggPSB4bWFsbG9jKHN0cmxlbihiYXNlKSArIHN0cmxlbihwYXRoKSArIDEpOworCQkJc3ByaW50ZihuZXdwYXRoLCAiJXMlcyIsIGJhc2UsIHBhdGgpOworCQkJZnJlZSgqYmVzdF9tYXRjaCk7CisJCQkqYmVzdF9tYXRjaCA9IG5ld3BhdGg7CisJCQkqYmVzdF9zY29yZSA9IHNjb3JlOworCQl9CisJCWlmIChyZWN1cnNlX2xpbWl0KSB7CisJCQljaGFyICpuZXdiYXNlOworCQkJbmV3YmFzZSA9IHhtYWxsb2Moc3RybGVuKGJhc2UpICsgc3RybGVuKHBhdGgpICsgMik7CisJCQlzcHJpbnRmKG5ld2Jhc2UsICIlcyVzLyIsIGJhc2UsIHBhdGgpOworCQkJbWF0Y2hfdHJlZXMoZWxlbSwgaGFzaDIsIGJlc3Rfc2NvcmUsIGJlc3RfbWF0Y2gsCisJCQkJICAgIG5ld2Jhc2UsIHJlY3Vyc2VfbGltaXQgLSAxKTsKKwkJCWZyZWUobmV3YmFzZSk7CisJCX0KKworCW5leHQ6CisJCXVwZGF0ZV90cmVlX2VudHJ5KCZvbmUpOworCX0KKwlmcmVlKG9uZV9idWYpOworfQorCisvKgorICogQSB0cmVlICJoYXNoMSIgaGFzIGEgc3ViZGlyZWN0b3J5IGF0ICJwcmVmaXgiLiAgQ29tZSB1cCB3aXRoIGEKKyAqIHRyZWUgb2JqZWN0IGJ5IHJlcGxhY2luZyBpdCB3aXRoIGFub3RoZXIgdHJlZSAiaGFzaDIiLgorICovCitzdGF0aWMgaW50IHNwbGljZV90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLAorCQkgICAgICAgY2hhciAqcHJlZml4LAorCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCit7CisJY2hhciAqc3VicGF0aDsKKwlpbnQgdG9wbGVuOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHN6OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBjaGFyICpyZXdyaXRlX2hlcmU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmV3cml0ZV93aXRoOworCXVuc2lnbmVkIGNoYXIgc3VidHJlZVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWludCBzdGF0dXM7CisKKwlzdWJwYXRoID0gc3RyY2hyKHByZWZpeCwgJy8nKTsKKwlpZiAoIXN1YnBhdGgpCisJCXRvcGxlbiA9IHN0cmxlbihwcmVmaXgpOworCWVsc2UgeworCQl0b3BsZW4gPSBzdWJwYXRoIC0gcHJlZml4OworCQlzdWJwYXRoKys7CisJfQorCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDEsICZ0eXBlLCAmc3opOworCWlmICghYnVmKQorCQlkaWUoImNhbm5vdCByZWFkIHRyZWUgJXMiLCBzaGExX3RvX2hleChoYXNoMSkpOworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBidWYsIHN6KTsKKworCXJld3JpdGVfaGVyZSA9IE5VTEw7CisJd2hpbGUgKGRlc2Muc2l6ZSkgeworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBtb2RlOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCisJCXNoYTEgPSB0cmVlX2VudHJ5X2V4dHJhY3QoJmRlc2MsICZuYW1lLCAmbW9kZSk7CisJCWlmIChzdHJsZW4obmFtZSkgPT0gdG9wbGVuICYmCisJCSAgICAhbWVtY21wKG5hbWUsIHByZWZpeCwgdG9wbGVuKSkgeworCQkJaWYgKCFTX0lTRElSKG1vZGUpKQorCQkJCWRpZSgiZW50cnkgJXMgaW4gdHJlZSAlcyBpcyBub3QgYSB0cmVlIiwKKwkJCQkgICAgbmFtZSwgc2hhMV90b19oZXgoaGFzaDEpKTsKKwkJCXJld3JpdGVfaGVyZSA9ICh1bnNpZ25lZCBjaGFyICopIHNoYTE7CisJCQlicmVhazsKKwkJfQorCQl1cGRhdGVfdHJlZV9lbnRyeSgmZGVzYyk7CisJfQorCWlmICghcmV3cml0ZV9oZXJlKQorCQlkaWUoImVudHJ5ICUuKnMgbm90IGZvdW5kIGluIHRyZWUgJXMiLAorCQkgICAgdG9wbGVuLCBwcmVmaXgsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaWYgKHN1YnBhdGgpIHsKKwkJc3RhdHVzID0gc3BsaWNlX3RyZWUocmV3cml0ZV9oZXJlLCBzdWJwYXRoLCBoYXNoMiwgc3VidHJlZSk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gc3RhdHVzOworCQlyZXdyaXRlX3dpdGggPSBzdWJ0cmVlOworCX0KKwllbHNlCisJCXJld3JpdGVfd2l0aCA9IGhhc2gyOworCWhhc2hjcHkocmV3cml0ZV9oZXJlLCByZXdyaXRlX3dpdGgpOworCXN0YXR1cyA9IHdyaXRlX3NoYTFfZmlsZShidWYsIHN6LCB0cmVlX3R5cGUsIHJlc3VsdCk7CisJZnJlZShidWYpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBXZSBhcmUgdHJ5aW5nIHRvIGNvbWUgdXAgd2l0aCBhIG1lcmdlIGJldHdlZW4gb25lIGFuZCB0d28gdGhhdAorICogcmVzdWx0cyBpbiBhIHRyZWUgc2hhcGUgc2ltaWxhciB0byBvbmUuICBUaGUgdHJlZSB0d28gbWlnaHQKKyAqIGNvcnJlc3BvbmQgdG8gYSBzdWJ0cmVlIG9mIG9uZSwgaW4gd2hpY2ggY2FzZSBpdCBuZWVkcyB0byBiZQorICogc2hpZnRlZCBkb3duIGJ5IHByZWZpeGluZyBvdGhlcndpc2UgZW1wdHkgZGlyZWN0b3JpZXMuICBPbiB0aGUKKyAqIG90aGVyIGhhbmQsIGl0IGNvdWxkIGNvdmVyIHRyZWUgb25lIGFuZCB3ZSBtaWdodCBuZWVkIHRvIHBpY2sgYQorICogc3VidHJlZSBvZiBpdC4KKyAqLwordm9pZCBzaGlmdF90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMiwKKwkJdW5zaWduZWQgY2hhciAqc2hpZnRlZCwKKwkJaW50IGRlcHRoX2xpbWl0KQoreworCWNoYXIgKmFkZF9wcmVmaXg7CisJY2hhciAqZGVsX3ByZWZpeDsKKwlpbnQgYWRkX3Njb3JlLCBkZWxfc2NvcmU7CisKKwlhZGRfc2NvcmUgPSBkZWxfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCWFkZF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCWRlbF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCisJLyoKKwkgKiBTZWUgaWYgb25lJ3Mgc3VidHJlZSByZXNlbWJsZXMgdHdvOyBpZiBzbyB3ZSBuZWVkIHRvIHByZWZpeAorCSAqIHR3byB3aXRoIGEgZmV3IGZha2UgdHJlZXMgdG8gbWF0Y2ggdGhlIHByZWZpeC4KKwkgKi8KKwltYXRjaF90cmVlcyhoYXNoMSwgaGFzaDIsICZhZGRfc2NvcmUsICZhZGRfcHJlZml4LCAiIiwgZGVwdGhfbGltaXQpOworCisJLyoKKwkgKiBTZWUgaWYgdHdvJ3Mgc3VidHJlZSByZXNlbWJsZXMgb25lOyBpZiBzbyB3ZSBuZWVkIHRvCisJICogcGljayBvbmx5IHN1YnRyZWUgb2YgdHdvLgorCSAqLworCW1hdGNoX3RyZWVzKGhhc2gyLCBoYXNoMSwgJmRlbF9zY29yZSwgJmRlbF9wcmVmaXgsICIiLCBkZXB0aF9saW1pdCk7CisKKwkvKiBBc3N1bWUgd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IHNoaWZ0aW5nICovCisJaGFzaGNweShzaGlmdGVkLCBoYXNoMik7CisKKwlpZiAoYWRkX3Njb3JlIDwgZGVsX3Njb3JlKSB7CisJCS8qIFdlIG5lZWQgdG8gcGljayBhIHN1YnRyZWUgb2YgdHdvICovCisJCXVuc2lnbmVkIG1vZGU7CisKKwkJaWYgKCEqZGVsX3ByZWZpeCkKKwkJCXJldHVybjsKKworCQlpZiAoZ2V0X3RyZWVfZW50cnkoaGFzaDIsIGRlbF9wcmVmaXgsIHNoaWZ0ZWQsICZtb2RlKSkKKwkJCWRpZSgiY2Fubm90IGZpbmQgcGF0aCAlcyBpbiB0cmVlICVzIiwKKwkJCSAgICBkZWxfcHJlZml4LCBzaGExX3RvX2hleChoYXNoMikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEqYWRkX3ByZWZpeCkKKwkJcmV0dXJuOworCisJc3BsaWNlX3RyZWUoaGFzaDEsIGFkZF9wcmVmaXgsIGhhc2gyLCBzaGlmdGVkKTsKK30KKwpkaWZmIC0tZ2l0IGEvbWVyZ2UtcmVjdXJzaXZlLmMgYi9tZXJnZS1yZWN1cnNpdmUuYwppbmRleCBlMWFlYmQ3Li44ZjcyYjJjIDEwMDY0NAotLS0gYS9tZXJnZS1yZWN1cnNpdmUuYworKysgYi9tZXJnZS1yZWN1cnNpdmUuYwpAQCAtMTUsNiArMTUsMjQgQEAKICNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKICNpbmNsdWRlICJwYXRoLWxpc3QuaCIKICNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpbnRlcnBvbGF0ZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworc3RhdGljIGludCBzdWJ0cmVlX21lcmdlOworCitzdGF0aWMgc3RydWN0IHRyZWUgKnNoaWZ0X3RyZWVfb2JqZWN0KHN0cnVjdCB0cmVlICpvbmUsIHN0cnVjdCB0cmVlICp0d28pCit7CisJdW5zaWduZWQgY2hhciBzaGlmdGVkWzIwXTsKKworCS8qCisJICogTkVFRFNXT1JLOiB0aGlzIGxpbWl0cyB0aGUgcmVjdXJzaW9uIGRlcHRoIHRvIGhhcmRjb2RlZAorCSAqIHZhbHVlICcyJyB0byBhdm9pZCBleGNlc3NpdmUgb3ZlcmhlYWQuCisJICovCisJc2hpZnRfdHJlZShvbmUtPm9iamVjdC5zaGExLCB0d28tPm9iamVjdC5zaGExLCBzaGlmdGVkLCAyKTsKKwlpZiAoIWhhc2hjbXAodHdvLT5vYmplY3Quc2hhMSwgc2hpZnRlZCkpCisJCXJldHVybiB0d287CisJcmV0dXJuIGxvb2t1cF90cmVlKHNoaWZ0ZWQpOworfQogCiAvKgogICogQSB2aXJ0dWFsIGNvbW1pdCBoYXMKQEAgLTc5LDExICs5Nyw2IEBACiBzdGF0aWMgaW50IGNhbGxfZGVwdGggPSAwOwogc3RhdGljIGludCB2ZXJib3NpdHkgPSAyOwogc3RhdGljIGludCBidWZmZXJfb3V0cHV0ID0gMTsKLXN0YXRpYyBpbnQgZG9fcHJvZ3Jlc3MgPSAxOwotc3RhdGljIHVuc2lnbmVkIGxhc3RfcGVyY2VudDsKLXN0YXRpYyB1bnNpZ25lZCBtZXJnZWRfY250Owotc3RhdGljIHVuc2lnbmVkIHRvdGFsX2NudDsKLXN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcHJvZ3Jlc3NfdXBkYXRlOwogc3RhdGljIHN0cnVjdCBvdXRwdXRfYnVmZmVyICpvdXRwdXRfbGlzdCwgKm91dHB1dF9lbmQ7CiAKIHN0YXRpYyBpbnQgc2hvdyAoaW50IHYpCkBAIC0xNTgsMzkgKzE3MSw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcm9ncmVzc19pbnRlcnZhbChpbnQgc2lnbnVtKQotewotCXByb2dyZXNzX3VwZGF0ZSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3Byb2dyZXNzX3NpZ25hbCh2b2lkKQotewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0Jc3RydWN0IGl0aW1lcnZhbCB2OwotCi0JbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7Ci0Jc2Euc2FfaGFuZGxlciA9IHByb2dyZXNzX2ludGVydmFsOwotCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKLQlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7Ci0Jc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7Ci0KLQl2Lml0X2ludGVydmFsLnR2X3NlYyA9IDE7Ci0Jdi5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLQl2Lml0X3ZhbHVlID0gdi5pdF9pbnRlcnZhbDsKLQlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheV9wcm9ncmVzcygpCi17Ci0JdW5zaWduZWQgcGVyY2VudCA9IHRvdGFsX2NudCA/IG1lcmdlZF9jbnQgKiAxMDAgLyB0b3RhbF9jbnQgOiAwOwotCWlmIChwcm9ncmVzc191cGRhdGUgfHwgcGVyY2VudCAhPSBsYXN0X3BlcmNlbnQpIHsKLQkJZnByaW50ZihzdGRlcnIsICIlNHUlJSAoJXUvJXUpIGRvbmVcciIsCi0JCQlwZXJjZW50LCBtZXJnZWRfY250LCB0b3RhbF9jbnQpOwotCQlwcm9ncmVzc191cGRhdGUgPSAwOwotCQlsYXN0X3BlcmNlbnQgPSBwZXJjZW50OwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLCBpbnQgcmVmcmVzaCkKIHsKQEAgLTIyMSw3ICsyMDEsNyBAQAogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CiAJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KG1vZGUsIHNoYTEgPyBzaGExIDogbnVsbF9zaGExLCBwYXRoLCBzdGFnZSwgcmVmcmVzaCk7CiAJaWYgKCFjZSkKLQkJcmV0dXJuIGVycm9yKCJjYWNoZV9hZGRpbmZvIGZhaWxlZDogJXMiLCBzdHJlcnJvcihjYWNoZV9lcnJubykpOworCQlyZXR1cm4gZXJyb3IoImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciLCBwYXRoKTsKIAlyZXR1cm4gYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb25zKTsKIH0KIApAQCAtMzYxLDE0ICszNDEsMTEgQEAKIAlpbnQgaTsKIAogCXVubWVyZ2VkLT5zdHJkdXBfcGF0aHMgPSAxOwotCXRvdGFsX2NudCArPSBhY3RpdmVfbnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyssIG1lcmdlZF9jbnQrKykgeworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewogCQlzdHJ1Y3QgcGF0aF9saXN0X2l0ZW0gKml0ZW07CiAJCXN0cnVjdCBzdGFnZV9kYXRhICplOwogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOwotCQlpZiAoZG9fcHJvZ3Jlc3MpCi0JCQlkaXNwbGF5X3Byb2dyZXNzKCk7CiAJCWlmICghY2Vfc3RhZ2UoY2UpKQogCQkJY29udGludWU7CiAKQEAgLTU1OCw2ICs1MzUsMzEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbWFrZV9yb29tX2Zvcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHN0YXR1czsKKwljb25zdCBjaGFyICptc2cgPSAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyI7CisKKwlzdGF0dXMgPSBta2Rpcl9wKHBhdGgsIDA3NzcpOworCWlmIChzdGF0dXMpIHsKKwkJaWYgKHN0YXR1cyA9PSAtMykgeworCQkJLyogc29tZXRoaW5nIGVsc2UgZXhpc3RzICovCisJCQllcnJvcihtc2csIHBhdGgsICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJZGllKG1zZywgcGF0aCwgIiIpOworCX0KKworCS8qIFN1Y2Nlc3NmdWwgdW5saW5rIGlzIGdvb2QuLiAqLworCWlmICghdW5saW5rKHBhdGgpKQorCQlyZXR1cm4gMDsKKwkvKiAuLiBhbmQgc28gaXMgbm8gZXhpc3RpbmcgZmlsZSAqLworCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCS8qIC4uIGJ1dCBub3Qgc29tZSBvdGhlciBlcnJvciAod2hvIHJlYWxseSBjYXJlcyB3aGF0PykgKi8KKwlyZXR1cm4gZXJyb3IobXNnLCBwYXRoLCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIpOworfQorCiBzdGF0aWMgdm9pZCB1cGRhdGVfZmlsZV9mbGFncyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEsCiAJCQkgICAgICB1bnNpZ25lZCBtb2RlLAogCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwKQEAgLTU3OCwxMSArNTgwLDEyIEBACiAJCWlmICh0eXBlICE9IE9CSl9CTE9CKQogCQkJZGllKCJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIiwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7CiAKKwkJaWYgKG1ha2Vfcm9vbV9mb3JfcGF0aChwYXRoKSA8IDApIHsKKwkJCXVwZGF0ZV93ZCA9IDA7CisJCQlnb3RvIHVwZGF0ZV9pbmRleDsKKwkJfQogCQlpZiAoU19JU1JFRyhtb2RlKSB8fCAoIWhhc19zeW1saW5rcyAmJiBTX0lTTE5LKG1vZGUpKSkgewogCQkJaW50IGZkOwotCQkJaWYgKG1rZGlyX3AocGF0aCwgMDc3NykpCi0JCQkJZGllKCJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJCXVubGluayhwYXRoKTsKIAkJCWlmIChtb2RlICYgMDEwMCkKIAkJCQltb2RlID0gMDc3NzsKIAkJCWVsc2UKQEAgLTYwNCw2ICs2MDcsNyBAQAogCQkJZGllKCJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIiwKIAkJCSAgICBtb2RlLCBzaGExX3RvX2hleChzaGEpLCBwYXRoKTsKIAl9CisgdXBkYXRlX2luZGV4OgogCWlmICh1cGRhdGVfY2FjaGUpCiAJCWFkZF9jYWNoZWluZm8obW9kZSwgc2hhLCBwYXRoLCAwLCB1cGRhdGVfd2QsIEFERF9DQUNIRV9PS19UT19BREQpOwogfQpAQCAtNjQzLDYgKzY0NywzODQgQEAKIAltbS0+c2l6ZSA9IHNpemU7CiB9CiAKKy8qCisgKiBDdXN0b21pemFibGUgbG93LWxldmVsIG1lcmdlIGRyaXZlcnMgc3VwcG9ydC4KKyAqLworCitzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyOwordHlwZWRlZiBpbnQgKCpsbF9tZXJnZV9mbikoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLAorCQkJICAgbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJICAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0KTsKKworc3RydWN0IGxsX21lcmdlX2RyaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKwlsbF9tZXJnZV9mbiBmbjsKKwljb25zdCBjaGFyICpyZWN1cnNpdmU7CisJc3RydWN0IGxsX21lcmdlX2RyaXZlciAqbmV4dDsKKwljaGFyICpjbWRsaW5lOworfTsKKworLyoKKyAqIEJ1aWx0LWluIGxvdy1sZXZlbHMKKyAqLworc3RhdGljIGludCBsbF94ZGxfbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZHJ2X3VudXNlZCwKKwkJCWNvbnN0IGNoYXIgKnBhdGhfdW51c2VkLAorCQkJbW1maWxlX3QgKm9yaWcsCisJCQltbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQltbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQpCit7CisJeHBwYXJhbV90IHhwcDsKKworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJcmV0dXJuIHhkbF9tZXJnZShvcmlnLAorCQkJIHNyYzEsIG5hbWUxLAorCQkJIHNyYzIsIG5hbWUyLAorCQkJICZ4cHAsIFhETF9NRVJHRV9aRUFMT1VTLAorCQkJIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgbGxfdW5pb25fbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZHJ2X3VudXNlZCwKKwkJCSAgY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQkgIG1tZmlsZV90ICpvcmlnLAorCQkJICBtbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgbW1idWZmZXJfdCAqcmVzdWx0KQoreworCWNoYXIgKnNyYywgKmRzdDsKKwlsb25nIHNpemU7CisJY29uc3QgaW50IG1hcmtlcl9zaXplID0gNzsKKworCWludCBzdGF0dXMgPSBsbF94ZGxfbWVyZ2UoZHJ2X3VudXNlZCwgcGF0aF91bnVzZWQsCisJCQkJICBvcmlnLCBzcmMxLCBOVUxMLCBzcmMyLCBOVUxMLCByZXN1bHQpOworCWlmIChzdGF0dXMgPD0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlzaXplID0gcmVzdWx0LT5zaXplOworCXNyYyA9IGRzdCA9IHJlc3VsdC0+cHRyOworCXdoaWxlIChzaXplKSB7CisJCWNoYXIgY2g7CisJCWlmICgobWFya2VyX3NpemUgPCBzaXplKSAmJgorCQkgICAgKCpzcmMgPT0gJzwnIHx8ICpzcmMgPT0gJz0nIHx8ICpzcmMgPT0gJz4nKSkgeworCQkJaW50IGk7CisJCQljaCA9ICpzcmM7CisJCQlmb3IgKGkgPSAwOyBpIDwgbWFya2VyX3NpemU7IGkrKykKKwkJCQlpZiAoc3JjW2ldICE9IGNoKQorCQkJCQlnb3RvIG5vdF9hX21hcmtlcjsKKwkJCWlmIChzcmNbbWFya2VyX3NpemVdICE9ICdcbicpCisJCQkJZ290byBub3RfYV9tYXJrZXI7CisJCQlzcmMgKz0gbWFya2VyX3NpemUgKyAxOworCQkJc2l6ZSAtPSBtYXJrZXJfc2l6ZSArIDE7CisJCQljb250aW51ZTsKKwkJfQorCW5vdF9hX21hcmtlcjoKKwkJZG8geworCQkJY2ggPSAqc3JjKys7CisJCQkqZHN0KysgPSBjaDsKKwkJCXNpemUtLTsKKwkJfSB3aGlsZSAoY2ggIT0gJ1xuJyAmJiBzaXplKTsKKwl9CisJcmVzdWx0LT5zaXplID0gZHN0IC0gcmVzdWx0LT5wdHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGxfYmluYXJ5X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoX3VudXNlZCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLAorCQkJICAgbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJICAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0KQoreworCS8qCisJICogVGhlIHRlbnRhdGl2ZSBtZXJnZSByZXN1bHQgaXMgIm91cnMiIGZvciB0aGUgZmluYWwgcm91bmQsCisJICogb3IgY29tbW9uIGFuY2VzdG9yIGZvciBhbiBpbnRlcm5hbCBtZXJnZS4gIFN0aWxsIHJldHVybgorCSAqICJjb25mbGljdGVkIG1lcmdlIiBzdGF0dXMuCisJICovCisJbW1maWxlX3QgKnN0b2xlbiA9IGluZGV4X29ubHkgPyBvcmlnIDogc3JjMTsKKworCXJlc3VsdC0+cHRyID0gc3RvbGVuLT5wdHI7CisJcmVzdWx0LT5zaXplID0gc3RvbGVuLT5zaXplOworCXN0b2xlbi0+cHRyID0gTlVMTDsKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBMTF9CSU5BUllfTUVSR0UgMAorI2RlZmluZSBMTF9URVhUX01FUkdFIDEKKyNkZWZpbmUgTExfVU5JT05fTUVSR0UgMgorc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgbGxfbWVyZ2VfZHJ2W10gPSB7CisJeyAiYmluYXJ5IiwgImJ1aWx0LWluIGJpbmFyeSBtZXJnZSIsIGxsX2JpbmFyeV9tZXJnZSB9LAorCXsgInRleHQiLCAiYnVpbHQtaW4gMy13YXkgdGV4dCBtZXJnZSIsIGxsX3hkbF9tZXJnZSB9LAorCXsgInVuaW9uIiwgImJ1aWx0LWluIHVuaW9uIG1lcmdlIiwgbGxfdW5pb25fbWVyZ2UgfSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90ZW1wKG1tZmlsZV90ICpzcmMsIGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCisJc3RyY3B5KHBhdGgsICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKKwlmZCA9IG1rc3RlbXAocGF0aCk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXAtZmlsZSIpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzcmMtPnB0ciwgc3JjLT5zaXplKSAhPSBzcmMtPnNpemUpCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCWNsb3NlKGZkKTsKK30KKworLyoKKyAqIFVzZXIgZGVmaW5lZCBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHN1cHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgbGxfZXh0X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuLAorCQkJY29uc3QgY2hhciAqcGF0aCwKKwkJCW1tZmlsZV90ICpvcmlnLAorCQkJbW1maWxlX3QgKnNyYzEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJbW1idWZmZXJfdCAqcmVzdWx0KQoreworCWNoYXIgdGVtcFszXVs1MF07CisJY2hhciBjbWRidWZbMjA0OF07CisJc3RydWN0IGludGVycCB0YWJsZVtdID0geworCQl7ICIlTyIgfSwKKwkJeyAiJUEiIH0sCisJCXsgIiVCIiB9LAorCX07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQ7CisJY29uc3QgY2hhciAqYXJnc1syMF07CisJaW50IHN0YXR1cywgZmQsIGk7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZm4tPmNtZGxpbmUgPT0gTlVMTCkKKwkJZGllKCJjdXN0b20gbWVyZ2UgZHJpdmVyICVzIGxhY2tzIGNvbW1hbmQgbGluZS4iLCBmbi0+bmFtZSk7CisKKwlyZXN1bHQtPnB0ciA9IE5VTEw7CisJcmVzdWx0LT5zaXplID0gMDsKKwljcmVhdGVfdGVtcChvcmlnLCB0ZW1wWzBdKTsKKwljcmVhdGVfdGVtcChzcmMxLCB0ZW1wWzFdKTsKKwljcmVhdGVfdGVtcChzcmMyLCB0ZW1wWzJdKTsKKworCWludGVycF9zZXRfZW50cnkodGFibGUsIDAsIHRlbXBbMF0pOworCWludGVycF9zZXRfZW50cnkodGFibGUsIDEsIHRlbXBbMV0pOworCWludGVycF9zZXRfZW50cnkodGFibGUsIDIsIHRlbXBbMl0pOworCisJb3V0cHV0KDEsICJtZXJnaW5nICVzIHVzaW5nICVzIiwgcGF0aCwKKwkgICAgICAgZm4tPmRlc2NyaXB0aW9uID8gZm4tPmRlc2NyaXB0aW9uIDogZm4tPm5hbWUpOworCisJaW50ZXJwb2xhdGUoY21kYnVmLCBzaXplb2YoY21kYnVmKSwgZm4tPmNtZGxpbmUsIHRhYmxlLCAzKTsKKworCW1lbXNldCgmY2hpbGQsIDAsIHNpemVvZihjaGlsZCkpOworCWNoaWxkLmFyZ3YgPSBhcmdzOworCWFyZ3NbMF0gPSAic2giOworCWFyZ3NbMV0gPSAiLWMiOworCWFyZ3NbMl0gPSBjbWRidWY7CisJYXJnc1szXSA9IE5VTEw7CisKKwlzdGF0dXMgPSBydW5fY29tbWFuZCgmY2hpbGQpOworCWlmIChzdGF0dXMgPCAtRVJSX1JVTl9DT01NQU5EX0ZPUkspCisJCTsgLyogZmFpbHVyZSBpbiBydW4tY29tbWFuZCAqLworCWVsc2UKKwkJc3RhdHVzID0gLXN0YXR1czsKKwlmZCA9IG9wZW4odGVtcFsxXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWdvdG8gYmFkOworCWlmIChmc3RhdChmZCwgJnN0KSkKKwkJZ290byBjbG9zZV9iYWQ7CisJcmVzdWx0LT5zaXplID0gc3Quc3Rfc2l6ZTsKKwlyZXN1bHQtPnB0ciA9IHhtYWxsb2MocmVzdWx0LT5zaXplICsgMSk7CisJaWYgKHJlYWRfaW5fZnVsbChmZCwgcmVzdWx0LT5wdHIsIHJlc3VsdC0+c2l6ZSkgIT0gcmVzdWx0LT5zaXplKSB7CisJCWZyZWUocmVzdWx0LT5wdHIpOworCQlyZXN1bHQtPnB0ciA9IE5VTEw7CisJCXJlc3VsdC0+c2l6ZSA9IDA7CisJfQorIGNsb3NlX2JhZDoKKwljbG9zZShmZCk7CisgYmFkOgorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCXVubGluayh0ZW1wW2ldKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogbWVyZ2UuZGVmYXVsdCBhbmQgbWVyZ2UuZHJpdmVyIGNvbmZpZ3VyYXRpb24gaXRlbXMKKyAqLworc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmxsX3VzZXJfbWVyZ2UsICoqbGxfdXNlcl9tZXJnZV90YWlsOworc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfbGxfbWVyZ2U7CisKK3N0YXRpYyBpbnQgcmVhZF9tZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKKwljb25zdCBjaGFyICplcCwgKm5hbWU7CisJaW50IG5hbWVsZW47CisKKwlpZiAoIXN0cmNtcCh2YXIsICJtZXJnZS5kZWZhdWx0IikpIHsKKwkJaWYgKHZhbHVlKQorCQkJZGVmYXVsdF9sbF9tZXJnZSA9IHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGFueXRoaW5nIGJ1dCAibWVyZ2UuPG5hbWU+LnZhcmlhYmxlIjsKKwkgKiBlc3BlY2lhbGx5LCB3ZSBkbyBub3Qgd2FudCB0byBsb29rIGF0IHZhcmlhYmxlcyBzdWNoIGFzCisJICogIm1lcmdlLnN1bW1hcnkiLCAibWVyZ2UudG9vbCIsIGFuZCAibWVyZ2UudmVyYm9zaXR5Ii4KKwkgKi8KKwlpZiAocHJlZml4Y21wKHZhciwgIm1lcmdlLiIpIHx8IChlcCA9IHN0cnJjaHIodmFyLCAnLicpKSA9PSB2YXIgKyA1KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmluZCBleGlzdGluZyBvbmUgYXMgd2UgbWlnaHQgYmUgcHJvY2Vzc2luZyBtZXJnZS48bmFtZT4udmFyMgorCSAqIGFmdGVyIHNlZWluZyBtZXJnZS48bmFtZT4udmFyMS4KKwkgKi8KKwluYW1lID0gdmFyICsgNjsKKwluYW1lbGVuID0gZXAgLSBuYW1lOworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGZuLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZm4tPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWZuKSB7CisJCWNoYXIgKm5hbWVidWY7CisJCWZuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxsX21lcmdlX2RyaXZlcikpOworCQluYW1lYnVmID0geG1hbGxvYyhuYW1lbGVuICsgMSk7CisJCW1lbWNweShuYW1lYnVmLCBuYW1lLCBuYW1lbGVuKTsKKwkJbmFtZWJ1ZltuYW1lbGVuXSA9IDA7CisJCWZuLT5uYW1lID0gbmFtZWJ1ZjsKKwkJZm4tPmZuID0gbGxfZXh0X21lcmdlOworCQlmbi0+bmV4dCA9IE5VTEw7CisJCSpsbF91c2VyX21lcmdlX3RhaWwgPSBmbjsKKwkJbGxfdXNlcl9tZXJnZV90YWlsID0gJihmbi0+bmV4dCk7CisJfQorCisJZXArKzsKKworCWlmICghc3RyY21wKCJuYW1lIiwgZXApKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBsYWNrcyB2YWx1ZSIsIHZhcik7CisJCWZuLT5kZXNjcmlwdGlvbiA9IHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJkcml2ZXIiLCBlcCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJLyoKKwkJICogbWVyZ2UuPG5hbWU+LmRyaXZlciBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgbGluZToKKwkJICoKKwkJICoJY29tbWFuZC1saW5lCisJCSAqCisJCSAqIFRoZSBjb21tYW5kLWxpbmUgd2lsbCBiZSBpbnRlcnBvbGF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nCisJCSAqIHRva2VucyBhbmQgaXMgZ2l2ZW4gdG8gdGhlIHNoZWxsOgorCQkgKgorCQkgKiAgICAlTyAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBtZXJnZSBiYXNlLgorCQkgKiAgICAlQSAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIG91ciB2ZXJzaW9uLgorCQkgKiAgICAlQiAtIHRlbXBvcmFyeSBmaWxlIG5hbWUgZm9yIHRoZSBvdGhlciBicmFuY2hlcycgdmVyc2lvbi4KKwkJICoKKwkJICogVGhlIGV4dGVybmFsIG1lcmdlIGRyaXZlciBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdHMgaW4gdGhlCisJCSAqIGZpbGUgbmFtZWQgYnkgJUEsIGFuZCBzaWduYWwgdGhhdCBpdCBoYXMgZG9uZSB3aXRoIHplcm8gZXhpdAorCQkgKiBzdGF0dXMuCisJCSAqLworCQlmbi0+Y21kbGluZSA9IHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJyZWN1cnNpdmUiLCBlcCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGxhY2tzIHZhbHVlIiwgdmFyKTsKKwkJZm4tPnJlY3Vyc2l2ZSA9IHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplX2xsX21lcmdlKHZvaWQpCit7CisJaWYgKGxsX3VzZXJfbWVyZ2VfdGFpbCkKKwkJcmV0dXJuOworCWxsX3VzZXJfbWVyZ2VfdGFpbCA9ICZsbF91c2VyX21lcmdlOworCWdpdF9jb25maWcocmVhZF9tZXJnZV9jb25maWcpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZmluZF9sbF9tZXJnZV9kcml2ZXIoY29uc3QgY2hhciAqbWVyZ2VfYXR0cikKK3sKKwlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpOworCisJaW5pdGlhbGl6ZV9sbF9tZXJnZSgpOworCisJaWYgKEFUVFJfVFJVRShtZXJnZV9hdHRyKSkKKwkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07CisJZWxzZSBpZiAoQVRUUl9GQUxTRShtZXJnZV9hdHRyKSkKKwkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfQklOQVJZX01FUkdFXTsKKwllbHNlIGlmIChBVFRSX1VOU0VUKG1lcmdlX2F0dHIpKSB7CisJCWlmICghZGVmYXVsdF9sbF9tZXJnZSkKKwkJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W0xMX1RFWFRfTUVSR0VdOworCQllbHNlCisJCQluYW1lID0gZGVmYXVsdF9sbF9tZXJnZTsKKwl9CisJZWxzZQorCQluYW1lID0gbWVyZ2VfYXR0cjsKKworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJjbXAoZm4tPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGZuOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGxfbWVyZ2VfZHJ2KTsgaSsrKQorCQlpZiAoIXN0cmNtcChsbF9tZXJnZV9kcnZbaV0ubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gJmxsX21lcmdlX2RydltpXTsKKworCS8qIGRlZmF1bHQgdG8gdGhlIDMtd2F5ICovCisJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnaXRfcGF0aF9jaGVja19tZXJnZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgYXR0cl9tZXJnZV9jaGVjazsKKworCWlmICghYXR0cl9tZXJnZV9jaGVjay5hdHRyKQorCQlhdHRyX21lcmdlX2NoZWNrLmF0dHIgPSBnaXRfYXR0cigibWVyZ2UiLCA1KTsKKworCWlmIChnaXRfY2hlY2thdHRyKHBhdGgsIDEsICZhdHRyX21lcmdlX2NoZWNrKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGF0dHJfbWVyZ2VfY2hlY2sudmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgbGxfbWVyZ2UobW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKKwkJICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAorCQkgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCSAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJICAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCSAgICBjb25zdCBjaGFyICpicmFuY2gyKQoreworCW1tZmlsZV90IG9yaWcsIHNyYzEsIHNyYzI7CisJY2hhciAqbmFtZTEsICpuYW1lMjsKKwlpbnQgbWVyZ2Vfc3RhdHVzOworCWNvbnN0IGNoYXIgKmxsX2RyaXZlcl9uYW1lOworCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRyaXZlcjsKKworCW5hbWUxID0geHN0cmR1cChta3BhdGgoIiVzOiVzIiwgYnJhbmNoMSwgYS0+cGF0aCkpOworCW5hbWUyID0geHN0cmR1cChta3BhdGgoIiVzOiVzIiwgYnJhbmNoMiwgYi0+cGF0aCkpOworCisJZmlsbF9tbShvLT5zaGExLCAmb3JpZyk7CisJZmlsbF9tbShhLT5zaGExLCAmc3JjMSk7CisJZmlsbF9tbShiLT5zaGExLCAmc3JjMik7CisKKwlsbF9kcml2ZXJfbmFtZSA9IGdpdF9wYXRoX2NoZWNrX21lcmdlKGEtPnBhdGgpOworCWRyaXZlciA9IGZpbmRfbGxfbWVyZ2VfZHJpdmVyKGxsX2RyaXZlcl9uYW1lKTsKKworCWlmIChpbmRleF9vbmx5ICYmIGRyaXZlci0+cmVjdXJzaXZlKQorCQlkcml2ZXIgPSBmaW5kX2xsX21lcmdlX2RyaXZlcihkcml2ZXItPnJlY3Vyc2l2ZSk7CisJbWVyZ2Vfc3RhdHVzID0gZHJpdmVyLT5mbihkcml2ZXIsIGEtPnBhdGgsCisJCQkJICAmb3JpZywgJnNyYzEsIG5hbWUxLCAmc3JjMiwgbmFtZTIsCisJCQkJICByZXN1bHRfYnVmKTsKKworCWZyZWUobmFtZTEpOworCWZyZWUobmFtZTIpOworCWZyZWUob3JpZy5wdHIpOworCWZyZWUoc3JjMS5wdHIpOworCWZyZWUoc3JjMi5wdHIpOworCXJldHVybiBtZXJnZV9zdGF0dXM7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1lcmdlX2ZpbGUoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCiAJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKIAkJY29uc3QgY2hhciAqYnJhbmNoMSwgY29uc3QgY2hhciAqYnJhbmNoMikKQEAgLTY3MSwzMCArMTA1MywxMSBAQAogCQllbHNlIGlmIChzaGFfZXEoYi0+c2hhMSwgby0+c2hhMSkpCiAJCQloYXNoY3B5KHJlc3VsdC5zaGEsIGEtPnNoYTEpOwogCQllbHNlIGlmIChTX0lTUkVHKGEtPm1vZGUpKSB7Ci0JCQltbWZpbGVfdCBvcmlnLCBzcmMxLCBzcmMyOwogCQkJbW1idWZmZXJfdCByZXN1bHRfYnVmOwotCQkJeHBwYXJhbV90IHhwcDsKLQkJCWNoYXIgKm5hbWUxLCAqbmFtZTI7CiAJCQlpbnQgbWVyZ2Vfc3RhdHVzOwogCi0JCQluYW1lMSA9IHhzdHJkdXAobWtwYXRoKCIlczolcyIsIGJyYW5jaDEsIGEtPnBhdGgpKTsKLQkJCW5hbWUyID0geHN0cmR1cChta3BhdGgoIiVzOiVzIiwgYnJhbmNoMiwgYi0+cGF0aCkpOwotCi0JCQlmaWxsX21tKG8tPnNoYTEsICZvcmlnKTsKLQkJCWZpbGxfbW0oYS0+c2hhMSwgJnNyYzEpOwotCQkJZmlsbF9tbShiLT5zaGExLCAmc3JjMik7Ci0KLQkJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7Ci0JCQltZXJnZV9zdGF0dXMgPSB4ZGxfbWVyZ2UoJm9yaWcsCi0JCQkJCQkgJnNyYzEsIG5hbWUxLAotCQkJCQkJICZzcmMyLCBuYW1lMiwKLQkJCQkJCSAmeHBwLCBYRExfTUVSR0VfWkVBTE9VUywKLQkJCQkJCSAmcmVzdWx0X2J1Zik7Ci0JCQlmcmVlKG5hbWUxKTsKLQkJCWZyZWUobmFtZTIpOwotCQkJZnJlZShvcmlnLnB0cik7Ci0JCQlmcmVlKHNyYzEucHRyKTsKLQkJCWZyZWUoc3JjMi5wdHIpOworCQkJbWVyZ2Vfc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdF9idWYsIG8sIGEsIGIsCisJCQkJCQlicmFuY2gxLCBicmFuY2gyKTsKIAogCQkJaWYgKChtZXJnZV9zdGF0dXMgPCAwKSB8fCAhcmVzdWx0X2J1Zi5wdHIpCiAJCQkJZGllKCJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIpOwpAQCAtOTc5LDIwICsxMzQyLDMxIEBACiAJCQkJbWZpID0gbWVyZ2VfZmlsZShvLCBhLCBiLAogCQkJCQkJYV9icmFuY2gsIGJfYnJhbmNoKTsKIAotCQkJCWlmIChtZmkubWVyZ2UgfHwgIW1maS5jbGVhbikKLQkJCQkJb3V0cHV0KDEsICJSZW5hbWVkICVzID0+ICVzIiwgcmVuMV9zcmMsIHJlbjFfZHN0KTsKLQkJCQlpZiAobWZpLm1lcmdlKQotCQkJCQlvdXRwdXQoMiwgIkF1dG8tbWVyZ2VkICVzIiwgcmVuMV9kc3QpOwotCQkJCWlmICghbWZpLmNsZWFuKSB7Ci0JCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKHJlbmFtZS9tb2RpZnkpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIsCi0JCQkJCSAgICAgICByZW4xX2RzdCk7Ci0JCQkJCWNsZWFuX21lcmdlID0gMDsKKwkJCQlpZiAobWZpLmNsZWFuICYmCisJCQkJICAgIHNoYV9lcShtZmkuc2hhLCByZW4xLT5wYWlyLT50d28tPnNoYTEpICYmCisJCQkJICAgIG1maS5tb2RlID09IHJlbjEtPnBhaXItPnR3by0+bW9kZSkKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBtZXNzYWdlZCBpcyBwYXJ0IG9mCisJCQkJCSAqIHQ2MDIyIHRlc3QuIElmIHlvdSBjaGFuZ2UKKwkJCQkJICogaXQgdXBkYXRlIHRoZSB0ZXN0IHRvby4KKwkJCQkJICovCisJCQkJCW91dHB1dCgzLCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIiwgcmVuMV9kc3QpOworCQkJCWVsc2UgeworCQkJCQlpZiAobWZpLm1lcmdlIHx8ICFtZmkuY2xlYW4pCisJCQkJCQlvdXRwdXQoMSwgIlJlbmFtZWQgJXMgPT4gJXMiLCByZW4xX3NyYywgcmVuMV9kc3QpOworCQkJCQlpZiAobWZpLm1lcmdlKQorCQkJCQkJb3V0cHV0KDIsICJBdXRvLW1lcmdlZCAlcyIsIHJlbjFfZHN0KTsKKwkJCQkJaWYgKCFtZmkuY2xlYW4pIHsKKwkJCQkJCW91dHB1dCgxLCAiQ09ORkxJQ1QgKHJlbmFtZS9tb2RpZnkpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIsCisJCQkJCQkgICAgICAgcmVuMV9kc3QpOworCQkJCQkJY2xlYW5fbWVyZ2UgPSAwOwogCi0JCQkJCWlmICghaW5kZXhfb25seSkKLQkJCQkJCXVwZGF0ZV9zdGFnZXMocmVuMV9kc3QsCi0JCQkJCQkJCW8sIGEsIGIsIDEpOworCQkJCQkJaWYgKCFpbmRleF9vbmx5KQorCQkJCQkJCXVwZGF0ZV9zdGFnZXMocmVuMV9kc3QsCisJCQkJCQkJCSAgICAgIG8sIGEsIGIsIDEpOworCQkJCQl9CisJCQkJCXVwZGF0ZV9maWxlKG1maS5jbGVhbiwgbWZpLnNoYSwgbWZpLm1vZGUsIHJlbjFfZHN0KTsKIAkJCQl9Ci0JCQkJdXBkYXRlX2ZpbGUobWZpLmNsZWFuLCBtZmkuc2hhLCBtZmkubW9kZSwgcmVuMV9kc3QpOwogCQkJfQogCQl9CiAJfQpAQCAtMTAwMiw5ICsxMzc2LDkgQEAKIAlyZXR1cm4gY2xlYW5fbWVyZ2U7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpoYXNfc2hhKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpzdGFnZV9zaGEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhLCB1bnNpZ25lZCBtb2RlKQogewotCXJldHVybiBpc19udWxsX3NoYTEoc2hhKSA/IE5VTEw6ICh1bnNpZ25lZCBjaGFyICopc2hhOworCXJldHVybiAoaXNfbnVsbF9zaGExKHNoYSkgfHwgbW9kZSA9PSAwKSA/IE5VTEw6ICh1bnNpZ25lZCBjaGFyICopc2hhOwogfQogCiAvKiBQZXIgZW50cnkgbWVyZ2UgZnVuY3Rpb24gKi8KQEAgLTEwMTcsMTIgKzEzOTEsMTIgQEAKIAlwcmludF9pbmRleF9lbnRyeSgiXHRwYXRoOiAiLCBlbnRyeSk7CiAJKi8KIAlpbnQgY2xlYW5fbWVyZ2UgPSAxOwotCXVuc2lnbmVkIGNoYXIgKm9fc2hhID0gaGFzX3NoYShlbnRyeS0+c3RhZ2VzWzFdLnNoYSk7Ci0JdW5zaWduZWQgY2hhciAqYV9zaGEgPSBoYXNfc2hhKGVudHJ5LT5zdGFnZXNbMl0uc2hhKTsKLQl1bnNpZ25lZCBjaGFyICpiX3NoYSA9IGhhc19zaGEoZW50cnktPnN0YWdlc1szXS5zaGEpOwogCXVuc2lnbmVkIG9fbW9kZSA9IGVudHJ5LT5zdGFnZXNbMV0ubW9kZTsKIAl1bnNpZ25lZCBhX21vZGUgPSBlbnRyeS0+c3RhZ2VzWzJdLm1vZGU7CiAJdW5zaWduZWQgYl9tb2RlID0gZW50cnktPnN0YWdlc1szXS5tb2RlOworCXVuc2lnbmVkIGNoYXIgKm9fc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbMV0uc2hhLCBvX21vZGUpOworCXVuc2lnbmVkIGNoYXIgKmFfc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbMl0uc2hhLCBhX21vZGUpOworCXVuc2lnbmVkIGNoYXIgKmJfc2hhID0gc3RhZ2Vfc2hhKGVudHJ5LT5zdGFnZXNbM10uc2hhLCBiX21vZGUpOwogCiAJaWYgKG9fc2hhICYmICghYV9zaGEgfHwgIWJfc2hhKSkgewogCQkvKiBDYXNlIEE6IERlbGV0ZWQgaW4gb25lICovCkBAIC0xMTIzLDYgKzE0OTcsMTIgQEAKIAkJCQl1cGRhdGVfZmlsZV9mbGFncyhtZmkuc2hhLCBtZmkubW9kZSwgcGF0aCwKIAkJCQkJICAgICAgMCAvKiB1cGRhdGVfY2FjaGUgKi8sIDEgLyogdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5ICovKTsKIAkJfQorCX0gZWxzZSBpZiAoIW9fc2hhICYmICFhX3NoYSAmJiAhYl9zaGEpIHsKKwkJLyoKKwkJICogdGhpcyBlbnRyeSB3YXMgZGVsZXRlZCBhbHRvZ2V0aGVyLiBhX21vZGUgPT0gMCBtZWFucworCQkgKiB3ZSBoYWQgdGhhdCBwYXRoIGFuZCB3YW50IHRvIGFjdGl2ZWx5IHJlbW92ZSBpdC4KKwkJICovCisJCXJlbW92ZV9maWxlKDEsIHBhdGgsICFhX21vZGUpOwogCX0gZWxzZQogCQlkaWUoIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIik7CiAKQEAgLTExMzcsNiArMTUxNywxMiBAQAogCQkgICAgICAgc3RydWN0IHRyZWUgKipyZXN1bHQpCiB7CiAJaW50IGNvZGUsIGNsZWFuOworCisJaWYgKHN1YnRyZWVfbWVyZ2UpIHsKKwkJbWVyZ2UgPSBzaGlmdF90cmVlX29iamVjdChoZWFkLCBtZXJnZSk7CisJCWNvbW1vbiA9IHNoaWZ0X3RyZWVfb2JqZWN0KGhlYWQsIGNvbW1vbik7CisJfQorCiAJaWYgKHNoYV9lcShjb21tb24tPm9iamVjdC5zaGExLCBtZXJnZS0+b2JqZWN0LnNoYTEpKSB7CiAJCW91dHB1dCgwLCAiQWxyZWFkeSB1cHRvZGF0ZSEiKTsKIAkJKnJlc3VsdCA9IGhlYWQ7CkBAIC0xMTYzLDE1ICsxNTQ5LDEyIEBACiAJCXJlX21lcmdlID0gZ2V0X3JlbmFtZXMobWVyZ2UsIGNvbW1vbiwgaGVhZCwgbWVyZ2UsIGVudHJpZXMpOwogCQljbGVhbiA9IHByb2Nlc3NfcmVuYW1lcyhyZV9oZWFkLCByZV9tZXJnZSwKIAkJCQlicmFuY2gxLCBicmFuY2gyKTsKLQkJdG90YWxfY250ICs9IGVudHJpZXMtPm5yOwotCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllcy0+bnI7IGkrKywgbWVyZ2VkX2NudCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CiAJCQljb25zdCBjaGFyICpwYXRoID0gZW50cmllcy0+aXRlbXNbaV0ucGF0aDsKIAkJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZW50cmllcy0+aXRlbXNbaV0udXRpbDsKIAkJCWlmICghZS0+cHJvY2Vzc2VkCiAJCQkJJiYgIXByb2Nlc3NfZW50cnkocGF0aCwgZSwgYnJhbmNoMSwgYnJhbmNoMikpCiAJCQkJY2xlYW4gPSAwOwotCQkJaWYgKGRvX3Byb2dyZXNzKQotCQkJCWRpc3BsYXlfcHJvZ3Jlc3MoKTsKIAkJfQogCiAJCXBhdGhfbGlzdF9jbGVhcihyZV9tZXJnZSwgMCk7CkBAIC0xMjc5LDE1ICsxNjYyLDYgQEAKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGgxLCAmKCpyZXN1bHQpLT5wYXJlbnRzKTsKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGgyLCAmKCpyZXN1bHQpLT5wYXJlbnRzLT5uZXh0KTsKIAl9Ci0JaWYgKCFjYWxsX2RlcHRoICYmIGRvX3Byb2dyZXNzKSB7Ci0JCS8qIE1ha2Ugc3VyZSB3ZSBlbmQgYXQgMTAwJSAqLwotCQlpZiAoIXRvdGFsX2NudCkKLQkJCXRvdGFsX2NudCA9IDE7Ci0JCW1lcmdlZF9jbnQgPSB0b3RhbF9jbnQ7Ci0JCXByb2dyZXNzX3VwZGF0ZSA9IDE7Ci0JCWRpc3BsYXlfcHJvZ3Jlc3MoKTsKLQkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKLQl9CiAJZmx1c2hfb3V0cHV0KCk7CiAJcmV0dXJuIGNsZWFuOwogfQpAQCAtMTM0Miw2ICsxNzE2LDEzIEBACiAJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKIAlpbnQgaW5kZXhfZmQ7CiAKKwlpZiAoYXJndlswXSkgeworCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwkJaWYgKDggPCBuYW1lbGVuICYmCisJCSAgICAhc3RyY21wKGFyZ3ZbMF0gKyBuYW1lbGVuIC0gOCwgIi1zdWJ0cmVlIikpCisJCQlzdWJ0cmVlX21lcmdlID0gMTsKKwl9CisKIAlnaXRfY29uZmlnKG1lcmdlX2NvbmZpZyk7CiAJaWYgKGdldGVudigiR0lUX01FUkdFX1ZFUkJPU0lUWSIpKQogCQl2ZXJib3NpdHkgPSBzdHJ0b2woZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIiksIE5VTEwsIDEwKTsKQEAgLTEzNTcsMTIgKzE3MzgsOCBAQAogCX0KIAlpZiAoYXJnYyAtIGkgIT0gMykgLyogIi0tIiAiPGhlYWQ+IiAiPHJlbW90ZT4iICovCiAJCWRpZSgiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIpOwotCWlmICh2ZXJib3NpdHkgPj0gNSkgeworCWlmICh2ZXJib3NpdHkgPj0gNSkKIAkJYnVmZmVyX291dHB1dCA9IDA7Ci0JCWRvX3Byb2dyZXNzID0gMDsKLQl9Ci0JZWxzZQotCQlkb19wcm9ncmVzcyA9IGlzYXR0eSgxKTsKIAogCWJyYW5jaDEgPSBhcmd2WysraV07CiAJYnJhbmNoMiA9IGFyZ3ZbKytpXTsKQEAgLTEzNzMsMTIgKzE3NTAsMTAgQEAKIAlicmFuY2gxID0gYmV0dGVyX2JyYW5jaF9uYW1lKGJyYW5jaDEpOwogCWJyYW5jaDIgPSBiZXR0ZXJfYnJhbmNoX25hbWUoYnJhbmNoMik7CiAKLQlpZiAoZG9fcHJvZ3Jlc3MpCi0JCXNldHVwX3Byb2dyZXNzX3NpZ25hbCgpOwogCWlmIChzaG93KDMpKQogCQlwcmludGYoIk1lcmdpbmcgJXMgd2l0aCAlc1xuIiwgYnJhbmNoMSwgYnJhbmNoMik7CiAKLQlpbmRleF9mZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobG9jaywgZ2V0X2luZGV4X2ZpbGUoKSwgMSk7CisJaW5kZXhfZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrLCAxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBiYXNlc19jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBjb21taXQgKmFuY2VzdG9yID0gZ2V0X3JlZihiYXNlc1tpXSk7CkBAIC0xMzg4LDcgKzE3NjMsNyBAQAogCiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCiAJICAgICh3cml0ZV9jYWNoZShpbmRleF9mZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8Ci0JICAgICBjbG9zZShpbmRleF9mZCkgfHwgY29tbWl0X2xvY2tfZmlsZShsb2NrKSkpCisJICAgICBjbG9zZShpbmRleF9mZCkgfHwgY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKSkpCiAJCQlkaWUgKCJ1bmFibGUgdG8gd3JpdGUgJXMiLCBnZXRfaW5kZXhfZmlsZSgpKTsKIAogCXJldHVybiBjbGVhbiA/IDA6IDE7CmRpZmYgLS1naXQgYS9vYmplY3QtcmVmcy5jIGIvb2JqZWN0LXJlZnMuYwppbmRleCA5OGVhMTAwLi4wMjJlOGQ4IDEwMDY0NAotLS0gYS9vYmplY3QtcmVmcy5jCisrKyBiL29iamVjdC1yZWZzLmMKQEAgLTEsNzUgKzEsMjAgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCiAKIGludCB0cmFja19vYmplY3RfcmVmcyA9IDA7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVmc19oYXNoX3NpemUsIG5yX29iamVjdF9yZWZzOwotc3RhdGljIHN0cnVjdCBvYmplY3RfcmVmcyAqKnJlZnNfaGFzaDsKK3N0YXRpYyBzdHJ1Y3QgZGVjb3JhdGlvbiByZWZfZGVjb3JhdGU7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9vYmooc3RydWN0IG9iamVjdCAqb2JqLCB1bnNpZ25lZCBpbnQgbikKK3N0cnVjdCBvYmplY3RfcmVmcyAqbG9va3VwX29iamVjdF9yZWZzKHN0cnVjdCBvYmplY3QgKmJhc2UpCiB7Ci0JdW5zaWduZWQgaW50IGhhc2ggPSAqKHVuc2lnbmVkIGludCAqKW9iai0+c2hhMTsKLQlyZXR1cm4gaGFzaCAlIG47CisJcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKCZyZWZfZGVjb3JhdGUsIGJhc2UpOwogfQogCi1zdGF0aWMgdm9pZCBpbnNlcnRfcmVmX2hhc2goc3RydWN0IG9iamVjdF9yZWZzICpyZWYsIHN0cnVjdCBvYmplY3RfcmVmcyAqKmhhc2gsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIHZvaWQgYWRkX29iamVjdF9yZWZzKHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IG9iamVjdF9yZWZzICpyZWZzKQogewotCWludCBqID0gaGFzaF9vYmoocmVmLT5iYXNlLCBzaXplKTsKLQotCXdoaWxlIChoYXNoW2pdKSB7Ci0JCWorKzsKLQkJaWYgKGogPj0gc2l6ZSkKLQkJCWogPSAwOwotCX0KLQloYXNoW2pdID0gcmVmOwotfQotCi1zdGF0aWMgdm9pZCBncm93X3JlZnNfaGFzaCh2b2lkKQotewotCWludCBpOwotCWludCBuZXdfaGFzaF9zaXplID0gKHJlZnNfaGFzaF9zaXplICsgMTAwMCkgKiAzIC8gMjsKLQlzdHJ1Y3Qgb2JqZWN0X3JlZnMgKipuZXdfaGFzaDsKLQotCW5ld19oYXNoID0geGNhbGxvYyhuZXdfaGFzaF9zaXplLCBzaXplb2Yoc3RydWN0IG9iamVjdF9yZWZzICopKTsKLQlmb3IgKGkgPSAwOyBpIDwgcmVmc19oYXNoX3NpemU7IGkrKykgewotCQlzdHJ1Y3Qgb2JqZWN0X3JlZnMgKnJlZiA9IHJlZnNfaGFzaFtpXTsKLQkJaWYgKCFyZWYpCi0JCQljb250aW51ZTsKLQkJaW5zZXJ0X3JlZl9oYXNoKHJlZiwgbmV3X2hhc2gsIG5ld19oYXNoX3NpemUpOwotCX0KLQlmcmVlKHJlZnNfaGFzaCk7Ci0JcmVmc19oYXNoID0gbmV3X2hhc2g7Ci0JcmVmc19oYXNoX3NpemUgPSBuZXdfaGFzaF9zaXplOwotfQotCi1zdGF0aWMgdm9pZCBhZGRfb2JqZWN0X3JlZnMoc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqZWN0X3JlZnMgKnJlZikKLXsKLQlpbnQgbnIgPSBucl9vYmplY3RfcmVmcyArIDE7Ci0KLQlpZiAobnIgPiByZWZzX2hhc2hfc2l6ZSAqIDIgLyAzKQotCQlncm93X3JlZnNfaGFzaCgpOwotCXJlZi0+YmFzZSA9IG9iajsKLQlpbnNlcnRfcmVmX2hhc2gocmVmLCByZWZzX2hhc2gsIHJlZnNfaGFzaF9zaXplKTsKLQlucl9vYmplY3RfcmVmcyA9IG5yOwotfQotCi1zdHJ1Y3Qgb2JqZWN0X3JlZnMgKmxvb2t1cF9vYmplY3RfcmVmcyhzdHJ1Y3Qgb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0IG9iamVjdF9yZWZzICpyZWY7Ci0JaW50IGo7Ci0KLQkvKiBub3RoaW5nIHRvIGxvb2t1cCAqLwotCWlmICghcmVmc19oYXNoX3NpemUpCi0JCXJldHVybiBOVUxMOwotCWogPSBoYXNoX29iaihvYmosIHJlZnNfaGFzaF9zaXplKTsKLQl3aGlsZSAoKHJlZiA9IHJlZnNfaGFzaFtqXSkgIT0gTlVMTCkgewotCQlpZiAocmVmLT5iYXNlID09IG9iaikKLQkJCWJyZWFrOwotCQlqKys7Ci0JCWlmIChqID49IHJlZnNfaGFzaF9zaXplKQotCQkJaiA9IDA7Ci0JfQotCXJldHVybiByZWY7CisJaWYgKGFkZF9kZWNvcmF0aW9uKCZyZWZfZGVjb3JhdGUsIG9iaiwgcmVmcykpCisJCWRpZSgib2JqZWN0ICVzIHRyaWVkIHRvIGFkZCByZWZzIHR3aWNlISIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOwogfQogCiBzdHJ1Y3Qgb2JqZWN0X3JlZnMgKmFsbG9jX29iamVjdF9yZWZzKHVuc2lnbmVkIGNvdW50KQpkaWZmIC0tZ2l0IGEvb2JqZWN0LmMgYi9vYmplY3QuYwppbmRleCA3OGE0NGE2Li4zN2QxMzYzIDEwMDY0NAotLS0gYS9vYmplY3QuYworKysgYi9vYmplY3QuYwpAQCAtMTA1LDExICsxMDUsMTMgQEAKIAlvYmpfaGFzaF9zaXplID0gbmV3X2hhc2hfc2l6ZTsKIH0KIAotdm9pZCBjcmVhdGVkX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit2b2lkICpjcmVhdGVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCB0eXBlLCB2b2lkICpvKQogeworCXN0cnVjdCBvYmplY3QgKm9iaiA9IG87CisKIAlvYmotPnBhcnNlZCA9IDA7CiAJb2JqLT51c2VkID0gMDsKLQlvYmotPnR5cGUgPSBPQkpfTk9ORTsKKwlvYmotPnR5cGUgPSB0eXBlOwogCW9iai0+ZmxhZ3MgPSAwOwogCWhhc2hjcHkob2JqLT5zaGExLCBzaGExKTsKIApAQCAtMTE4LDI1ICsxMjAsMTQgQEAKIAogCWluc2VydF9vYmpfaGFzaChvYmosIG9ial9oYXNoLCBvYmpfaGFzaF9zaXplKTsKIAlucl9vYmpzKys7CisJcmV0dXJuIG9iajsKIH0KIAotdW5pb24gYW55X29iamVjdCB7Ci0Jc3RydWN0IG9iamVjdCBvYmplY3Q7Ci0Jc3RydWN0IGNvbW1pdCBjb21taXQ7Ci0Jc3RydWN0IHRyZWUgdHJlZTsKLQlzdHJ1Y3QgYmxvYiBibG9iOwotCXN0cnVjdCB0YWcgdGFnOwotfTsKLQogc3RydWN0IG9iamVjdCAqbG9va3VwX3Vua25vd25fb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKLQlpZiAoIW9iaikgewotCQl1bmlvbiBhbnlfb2JqZWN0ICpyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmV0KSk7Ci0JCWNyZWF0ZWRfb2JqZWN0KHNoYTEsICZyZXQtPm9iamVjdCk7Ci0JCXJldC0+b2JqZWN0LnR5cGUgPSBPQkpfTk9ORTsKLQkJcmV0dXJuICZyZXQtPm9iamVjdDsKLQl9CisJaWYgKCFvYmopCisJCW9iaiA9IGNyZWF0ZV9vYmplY3Qoc2hhMSwgT0JKX05PTkUsIGFsbG9jX29iamVjdF9ub2RlKCkpOwogCXJldHVybiBvYmo7CiB9CiAKQEAgLTI0MCw2ICsyMzEsMTEgQEAKIAogdm9pZCBhZGRfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpCiB7CisJYWRkX29iamVjdF9hcnJheV93aXRoX21vZGUob2JqLCBuYW1lLCBhcnJheSwgU19JRklOVkFMSUQpOworfQorCit2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIG1vZGUpCit7CiAJdW5zaWduZWQgbnIgPSBhcnJheS0+bnI7CiAJdW5zaWduZWQgYWxsb2MgPSBhcnJheS0+YWxsb2M7CiAJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOwpAQCAtMjUyLDUgKzI0OCw2IEBACiAJfQogCW9iamVjdHNbbnJdLml0ZW0gPSBvYmo7CiAJb2JqZWN0c1tucl0ubmFtZSA9IG5hbWU7CisJb2JqZWN0c1tucl0ubW9kZSA9IG1vZGU7CiAJYXJyYXktPm5yID0gKytucjsKIH0KZGlmZiAtLWdpdCBhL29iamVjdC5oIGIvb2JqZWN0LmgKaW5kZXggYmRiZjBmYS4uOTRmMTllZSAxMDA2NDQKLS0tIGEvb2JqZWN0LmgKKysrIGIvb2JqZWN0LmgKQEAgLTgsNyArOCw2IEBACiAKIHN0cnVjdCBvYmplY3RfcmVmcyB7CiAJdW5zaWduZWQgY291bnQ7Ci0Jc3RydWN0IG9iamVjdCAqYmFzZTsKIAlzdHJ1Y3Qgb2JqZWN0ICpyZWZbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KIH07CiAKQEAgLTE4LDYgKzE3LDcgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5IHsKIAkJc3RydWN0IG9iamVjdCAqaXRlbTsKIAkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbW9kZTsKIAl9ICpvYmplY3RzOwogfTsKIApAQCAtNDcsNyArNDcsNyBAQAogLyoqIEludGVybmFsIG9ubHkgKiovCiBzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCi12b2lkIGNyZWF0ZWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBvYmplY3QgKm9iaik7CitleHRlcm4gdm9pZCAqY3JlYXRlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgdHlwZSwgdm9pZCAqb2JqKTsKIAogLyoqIFJldHVybnMgdGhlIG9iamVjdCwgaGF2aW5nIHBhcnNlZCBpdCB0byBmaW5kIG91dCB3aGF0IGl0IGlzLiAqKi8KIHN0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKQEAgLTc4LDUgKzc4LDYgQEAKIAogLyogT2JqZWN0IGFycmF5IGhhbmRsaW5nIC4uICovCiB2b2lkIGFkZF9vYmplY3RfYXJyYXkoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSk7Cit2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9tb2RlKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIG1vZGUpOwogCiAjZW5kaWYgLyogT0JKRUNUX0ggKi8KZGlmZiAtLWdpdCBhL3BhY2stY2hlY2suYyBiL3BhY2stY2hlY2suYwppbmRleCBkOTg4MzIyLi5kMDQ1MzZiIDEwMDY0NAotLS0gYS9wYWNrLWNoZWNrLmMKKysrIGIvcGFjay1jaGVjay5jCkBAIC00MCwxNSArNDAsMTYgQEAKIAkgKiBoYXZlIHZlcmlmaWVkIHRoYXQgbnJfb2JqZWN0cyBtYXRjaGVzIGJldHdlZW4gaWR4IGFuZCBwYWNrLAogCSAqIHdlIGRvIG5vdCBkbyBzY2FuLXN0cmVhbWluZyBjaGVjayBvbiB0aGUgcGFjayBmaWxlLgogCSAqLwotCW5yX29iamVjdHMgPSBudW1fcGFja2VkX29iamVjdHMocCk7CisJbnJfb2JqZWN0cyA9IHAtPm51bV9vYmplY3RzOwogCWZvciAoaSA9IDAsIGVyciA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKIAkJdm9pZCAqZGF0YTsKIAkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCQl1bnNpZ25lZCBsb25nIHNpemU7CiAJCW9mZl90IG9mZnNldDsKIAotCQlpZiAobnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpLCBzaGExKSkKKwkJc2hhMSA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgaSk7CisJCWlmICghc2hhMSkKIAkJCWRpZSgiaW50ZXJuYWwgZXJyb3IgcGFjay1jaGVjayBudGgtcGFja2VkLW9iamVjdCIpOwogCQlvZmZzZXQgPSBmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApOwogCQlpZiAoIW9mZnNldCkKQEAgLTc4LDE4ICs3OSwyMCBAQAogewogCXVpbnQzMl90IG5yX29iamVjdHMsIGksIGNoYWluX2hpc3RvZ3JhbVtNQVhfQ0hBSU5dOwogCi0JbnJfb2JqZWN0cyA9IG51bV9wYWNrZWRfb2JqZWN0cyhwKTsKKwlucl9vYmplY3RzID0gcC0+bnVtX29iamVjdHM7CiAJbWVtc2V0KGNoYWluX2hpc3RvZ3JhbSwgMCwgc2l6ZW9mKGNoYWluX2hpc3RvZ3JhbSkpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBiYXNlX3NoYTFbMjBdOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQl1bnNpZ25lZCBjaGFyIGJhc2Vfc2hhMVsyMF07CiAJCWNvbnN0IGNoYXIgKnR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJdW5zaWduZWQgbG9uZyBzdG9yZV9zaXplOwogCQlvZmZfdCBvZmZzZXQ7CiAJCXVuc2lnbmVkIGludCBkZWx0YV9jaGFpbl9sZW5ndGg7CiAKLQkJaWYgKG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgaSwgc2hhMSkpCisJCXNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGkpOworCQlpZiAoIXNoYTEpCiAJCQlkaWUoImludGVybmFsIGVycm9yIHBhY2stY2hlY2sgbnRoLXBhY2tlZC1vYmplY3QiKTsKIAkJb2Zmc2V0ID0gZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBwKTsKIAkJaWYgKCFvZmZzZXQpCmRpZmYgLS1naXQgYS9wYWNrLXJlZHVuZGFudC5jIGIvcGFjay1yZWR1bmRhbnQuYwppbmRleCA0MGU1NzliLi44NzA3N2UxIDEwMDY0NAotLS0gYS9wYWNrLXJlZHVuZGFudC5jCisrKyBiL3BhY2stcmVkdW5kYW50LmMKQEAgLTI0NywxNiArMjQ3LDE5IEBACiAKIHN0YXRpYyB2b2lkIGNtcF90d29fcGFja3Moc3RydWN0IHBhY2tfbGlzdCAqcDEsIHN0cnVjdCBwYWNrX2xpc3QgKnAyKQogewotCWludCBwMV9vZmYsIHAyX29mZjsKKwl1bnNpZ25lZCBsb25nIHAxX29mZiA9IDAsIHAyX29mZiA9IDAsIHAxX3N0ZXAsIHAyX3N0ZXA7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDFfYmFzZSwgKnAyX2Jhc2U7CiAJc3RydWN0IGxsaXN0X2l0ZW0gKnAxX2hpbnQgPSBOVUxMLCAqcDJfaGludCA9IE5VTEw7CiAKLQlwMV9vZmYgPSBwMl9vZmYgPSAyNTYgKiA0ICsgNDsKIAlwMV9iYXNlID0gcDEtPnBhY2stPmluZGV4X2RhdGE7CiAJcDJfYmFzZSA9IHAyLT5wYWNrLT5pbmRleF9kYXRhOworCXAxX2Jhc2UgKz0gMjU2ICogNCArICgocDEtPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMl9iYXNlICs9IDI1NiAqIDQgKyAoKHAyLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJcDFfc3RlcCA9IChwMS0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gMjQgOiAyMDsKKwlwMl9zdGVwID0gKHAyLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOwogCi0Jd2hpbGUgKHAxX29mZiA8PSBwMS0+cGFjay0+aW5kZXhfc2l6ZSAtIDMgKiAyMCAmJgotCSAgICAgICBwMl9vZmYgPD0gcDItPnBhY2stPmluZGV4X3NpemUgLSAzICogMjApCisJd2hpbGUgKHAxX29mZiA8IHAxLT5wYWNrLT5udW1fb2JqZWN0cyAqIHAxX3N0ZXAgJiYKKwkgICAgICAgcDJfb2ZmIDwgcDItPnBhY2stPm51bV9vYmplY3RzICogcDJfc3RlcCkKIAl7CiAJCWludCBjbXAgPSBoYXNoY21wKHAxX2Jhc2UgKyBwMV9vZmYsIHAyX2Jhc2UgKyBwMl9vZmYpOwogCQkvKiBjbXAgfiBwMSAtIHAyICovCkBAIC0yNjUsMTQgKzI2OCwxNCBAQAogCQkJCQlwMV9iYXNlICsgcDFfb2ZmLCBwMV9oaW50KTsKIAkJCXAyX2hpbnQgPSBsbGlzdF9zb3J0ZWRfcmVtb3ZlKHAyLT51bmlxdWVfb2JqZWN0cywKIAkJCQkJcDFfYmFzZSArIHAxX29mZiwgcDJfaGludCk7Ci0JCQlwMV9vZmYrPTI0OwotCQkJcDJfb2ZmKz0yNDsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLwotCQkJcDFfb2ZmKz0yNDsKKwkJCXAxX29mZiArPSBwMV9zdGVwOwogCQl9IGVsc2UgeyAvKiBwMiBoYXMgdGhlIG9iamVjdCwgcDEgZG9lc24ndCAqLwotCQkJcDJfb2ZmKz0yNDsKKwkJCXAyX29mZiArPSBwMl9zdGVwOwogCQl9CiAJfQogfQpAQCAtMzUyLDI4ICszNTUsMzEgQEAKIHN0YXRpYyBzaXplX3Qgc2l6ZW9mX3VuaW9uKHN0cnVjdCBwYWNrZWRfZ2l0ICpwMSwgc3RydWN0IHBhY2tlZF9naXQgKnAyKQogewogCXNpemVfdCByZXQgPSAwOwotCWludCBwMV9vZmYsIHAyX29mZjsKKwl1bnNpZ25lZCBsb25nIHAxX29mZiA9IDAsIHAyX29mZiA9IDAsIHAxX3N0ZXAsIHAyX3N0ZXA7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDFfYmFzZSwgKnAyX2Jhc2U7CiAKLQlwMV9vZmYgPSBwMl9vZmYgPSAyNTYgKiA0ICsgNDsKIAlwMV9iYXNlID0gcDEtPmluZGV4X2RhdGE7CiAJcDJfYmFzZSA9IHAyLT5pbmRleF9kYXRhOworCXAxX2Jhc2UgKz0gMjU2ICogNCArICgocDEtPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMl9iYXNlICs9IDI1NiAqIDQgKyAoKHAyLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJcDFfc3RlcCA9IChwMS0+aW5kZXhfdmVyc2lvbiA8IDIpID8gMjQgOiAyMDsKKwlwMl9zdGVwID0gKHAyLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOwogCi0Jd2hpbGUgKHAxX29mZiA8PSBwMS0+aW5kZXhfc2l6ZSAtIDMgKiAyMCAmJgotCSAgICAgICBwMl9vZmYgPD0gcDItPmluZGV4X3NpemUgLSAzICogMjApCisJd2hpbGUgKHAxX29mZiA8IHAxLT5udW1fb2JqZWN0cyAqIHAxX3N0ZXAgJiYKKwkgICAgICAgcDJfb2ZmIDwgcDItPm51bV9vYmplY3RzICogcDJfc3RlcCkKIAl7CiAJCWludCBjbXAgPSBoYXNoY21wKHAxX2Jhc2UgKyBwMV9vZmYsIHAyX2Jhc2UgKyBwMl9vZmYpOwogCQkvKiBjbXAgfiBwMSAtIHAyICovCiAJCWlmIChjbXAgPT0gMCkgewogCQkJcmV0Kys7Ci0JCQlwMV9vZmYrPTI0OwotCQkJcDJfb2ZmKz0yNDsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLwotCQkJcDFfb2ZmKz0yNDsKKwkJCXAxX29mZiArPSBwMV9zdGVwOwogCQl9IGVsc2UgeyAvKiBwMiBoYXMgdGhlIG9iamVjdCwgcDEgZG9lc24ndCAqLwotCQkJcDJfb2ZmKz0yNDsKKwkJCXAyX29mZiArPSBwMl9zdGVwOwogCQl9CiAJfQogCXJldHVybiByZXQ7CkBAIC01MzUsNyArNTQxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogYWRkX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnApCiB7CiAJc3RydWN0IHBhY2tfbGlzdCBsOwotCXNpemVfdCBvZmY7CisJdW5zaWduZWQgbG9uZyBvZmYgPSAwLCBzdGVwOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2U7CiAKIAlpZiAoIXAtPnBhY2tfbG9jYWwgJiYgIShhbHRfb2RiIHx8IHZlcmJvc2UpKQpAQCAtNTQ0LDExICs1NTAsMTIgQEAKIAlsLnBhY2sgPSBwOwogCWxsaXN0X2luaXQoJmwuYWxsX29iamVjdHMpOwogCi0Jb2ZmID0gMjU2ICogNCArIDQ7CiAJYmFzZSA9IHAtPmluZGV4X2RhdGE7Ci0Jd2hpbGUgKG9mZiA8PSBwLT5pbmRleF9zaXplIC0gMyAqIDIwKSB7CisJYmFzZSArPSAyNTYgKiA0ICsgKChwLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJc3RlcCA9IChwLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOworCXdoaWxlIChvZmYgPCBwLT5udW1fb2JqZWN0cyAqIHN0ZXApIHsKIAkJbGxpc3RfaW5zZXJ0X2JhY2sobC5hbGxfb2JqZWN0cywgYmFzZSArIG9mZik7Ci0JCW9mZiArPSAyNDsKKwkJb2ZmICs9IHN0ZXA7CiAJfQogCS8qIHRoaXMgbGlzdCB3aWxsIGJlIHBydW5lZCBpbiBjbXBfdHdvX3BhY2tzIGxhdGVyICovCiAJbC51bmlxdWVfb2JqZWN0cyA9IGxsaXN0X2NvcHkobC5hbGxfb2JqZWN0cyk7CmRpZmYgLS1naXQgYS9wYXRjaC1pZHMuYyBiL3BhdGNoLWlkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODhmYWMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1pZHMuYwpAQCAtMCwwICsxLDE5MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInBhdGNoLWlkcy5oIgorCitzdGF0aWMgaW50IGNvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmIChjb21taXQtPnBhcmVudHMpCisJCWRpZmZfdHJlZV9zaGExKGNvbW1pdC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTEsCisJCSAgICAgICAgICAgICAgIGNvbW1pdC0+b2JqZWN0LnNoYTEsICIiLCBvcHRpb25zKTsKKwllbHNlCisJCWRpZmZfcm9vdF90cmVlX3NoYTEoY29tbWl0LT5vYmplY3Quc2hhMSwgIiIsIG9wdGlvbnMpOworCWRpZmZjb3JlX3N0ZChvcHRpb25zKTsKKwlyZXR1cm4gZGlmZl9mbHVzaF9wYXRjaF9pZChvcHRpb25zLCBzaGExKTsKK30KKworc3RhdGljIHVpbnQzMl90IHRha2UyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlkKQoreworCXJldHVybiAoKGlkWzBdIDw8IDgpIHwgaWRbMV0pOworfQorCisvKgorICogQ29udmVudGlvbmFsIGJpbmFyeSBzZWFyY2ggbG9vcCBsb29rcyBsaWtlIHRoaXM6CisgKgorICogICAgICBkbyB7CisgKiAgICAgICAgICAgICAgaW50IG1pID0gKGxvICsgaGkpIC8gMjsKKyAqICAgICAgICAgICAgICBpbnQgY21wID0gImVudHJ5IHBvaW50ZWQgYXQgYnkgbWkiIG1pbnVzICJ0YXJnZXQiOworICogICAgICAgICAgICAgIGlmICghY21wKQorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtaSBpcyB0aGUgd2FudGVkIG9uZSkKKyAqICAgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAqICAgICAgICAgICAgICAgICAgICAgIGhpID0gbWk7ICJtaSBpcyBsYXJnZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgICAgICAgICAgZWxzZQorICogICAgICAgICAgICAgICAgICAgICAgbG8gPSBtaSsxOyAibWkgaXMgc21hbGxlciB0aGFuIHRhcmdldCIKKyAqICAgICAgfSB3aGlsZSAobG8gPCBoaSk7CisgKgorICogVGhlIGludmFyaWFudHMgYXJlOgorICoKKyAqIC0gV2hlbiBlbnRlcmluZyB0aGUgbG9vcCwgbG8gcG9pbnRzIGF0IGEgc2xvdCB0aGF0IGlzIG5ldmVyCisgKiAgIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNvdWxkIGJlIGF0IHRoZSB0YXJnZXQpLCBoaSBwb2ludHMgYXQgYQorICogICBzbG90IHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjYW4gbmV2ZXIKKyAqICAgYmUgYXQgdGhlIHRhcmdldCkuCisgKgorICogLSBXZSBmaW5kIGEgcG9pbnQgJ21pJyBiZXR3ZWVuIGxvIGFuZCBoaSAobWkgY291bGQgYmUgdGhlIHNhbWUKKyAqICAgYXMgbG8sIGJ1dCBuZXZlciBjYW4gYmUgdGhlIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBoaSB3aXRoCisgKiAgICAgIGl0LgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8gYmUKKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICovCitzdGF0aWMgaW50IHBhdGNoX3BvcyhzdHJ1Y3QgcGF0Y2hfaWQgKip0YWJsZSwgaW50IG5yLCBjb25zdCB1bnNpZ25lZCBjaGFyICppZCkKK3sKKwlpbnQgaGkgPSBucjsKKwlpbnQgbG8gPSAwOworCWludCBtaSA9IDA7CisKKwlpZiAoIW5yKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobnIgIT0gMSkgeworCQl1bnNpZ25lZCBsb3YsIGhpdiwgbWl2LCBvZnM7CisKKwkJZm9yIChvZnMgPSAwOyBvZnMgPCAxODsgb2ZzICs9IDIpIHsKKwkJCWxvdiA9IHRha2UyKHRhYmxlWzBdLT5wYXRjaF9pZCArIG9mcyk7CisJCQloaXYgPSB0YWtlMih0YWJsZVtuci0xXS0+cGF0Y2hfaWQgKyBvZnMpOworCQkJbWl2ID0gdGFrZTIoaWQgKyBvZnMpOworCQkJaWYgKG1pdiA8IGxvdikKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoaGl2IDwgbWl2KQorCQkJCXJldHVybiAtMSAtIG5yOworCQkJaWYgKGxvdiAhPSBoaXYpIHsKKwkJCQkvKgorCQkJCSAqIEF0IHRoaXMgcG9pbnQgbWl2IGNvdWxkIGJlIGVxdWFsCisJCQkJICogdG8gaGl2IChidXQgaWQgY291bGQgc3RpbGwgYmUgaGlnaGVyKTsKKwkJCQkgKiB0aGUgaW52YXJpYW50IG9mIChtaSA8IGhpKSBzaG91bGQgYmUKKwkJCQkgKiBrZXB0LgorCQkJCSAqLworCQkJCW1pID0gKG5yLTEpICogKG1pdiAtIGxvdikgLyAoaGl2IC0gbG92KTsKKwkJCQlpZiAobG8gPD0gbWkgJiYgbWkgPCBoaSkKKwkJCQkJYnJlYWs7CisJCQkJZGllKCJvb3BzIik7CisJCQl9CisJCX0KKwkJaWYgKDE4IDw9IG9mcykKKwkJCWRpZSgiY2Fubm90IGhhcHBlbiAtLSBsbyBhbmQgaGkgYXJlIGlkZW50aWNhbCIpOworCX0KKworCWRvIHsKKwkJaW50IGNtcDsKKwkJY21wID0gaGFzaGNtcCh0YWJsZVttaV0tPnBhdGNoX2lkLCBpZCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIG1pOworCQlpZiAoY21wID4gMCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCQltaSA9IChoaSArIGxvKSAvIDI7CisJfSB3aGlsZSAobG8gPCBoaSk7CisJcmV0dXJuIC1sby0xOworfQorCisjZGVmaW5lIEJVQ0tFVF9TSVpFIDE5MCAvKiAxOTAgKiAyMSA9IDM5OTAsIHdpdGggc2xvcCBjbG9zZSBlbm91Z2ggdG8gNEsgKi8KK3N0cnVjdCBwYXRjaF9pZF9idWNrZXQgeworCXN0cnVjdCBwYXRjaF9pZF9idWNrZXQgKm5leHQ7CisJaW50IG5yOworCXN0cnVjdCBwYXRjaF9pZCBidWNrZXRbQlVDS0VUX1NJWkVdOworfTsKKworaW50IGluaXRfcGF0Y2hfaWRzKHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwltZW1zZXQoaWRzLCAwLCBzaXplb2YoKmlkcykpOworCWRpZmZfc2V0dXAoJmlkcy0+ZGlmZm9wdHMpOworCWlkcy0+ZGlmZm9wdHMucmVjdXJzaXZlID0gMTsKKwlpZiAoZGlmZl9zZXR1cF9kb25lKCZpZHMtPmRpZmZvcHRzKSA8IDApCisJCXJldHVybiBlcnJvcigiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIpOworCXJldHVybiAwOworfQorCitpbnQgZnJlZV9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCXN0cnVjdCBwYXRjaF9pZF9idWNrZXQgKm5leHQsICpwYXRjaGVzOworCisJZnJlZShpZHMtPnRhYmxlKTsKKwlmb3IgKHBhdGNoZXMgPSBpZHMtPnBhdGNoZXM7IHBhdGNoZXM7IHBhdGNoZXMgPSBuZXh0KSB7CisJCW5leHQgPSBwYXRjaGVzLT5uZXh0OworCQlmcmVlKHBhdGNoZXMpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaF9pZCAqYWRkX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJICAgc3RydWN0IHBhdGNoX2lkcyAqaWRzLAorCQkJCSAgIGludCBub19hZGQpCit7CisJc3RydWN0IHBhdGNoX2lkX2J1Y2tldCAqYnVja2V0OworCXN0cnVjdCBwYXRjaF9pZCAqZW50OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHBvczsKKworCWlmIChjb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzLT5kaWZmb3B0cywgc2hhMSkpCisJCXJldHVybiBOVUxMOworCXBvcyA9IHBhdGNoX3BvcyhpZHMtPnRhYmxlLCBpZHMtPm5yLCBzaGExKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiBpZHMtPnRhYmxlW3Bvc107CisJaWYgKG5vX2FkZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSAtMSAtIHBvczsKKworCWJ1Y2tldCA9IGlkcy0+cGF0Y2hlczsKKwlpZiAoIWJ1Y2tldCB8fCAoQlVDS0VUX1NJWkUgPD0gYnVja2V0LT5ucikpIHsKKwkJYnVja2V0ID0geGNhbGxvYygxLCBzaXplb2YoKmJ1Y2tldCkpOworCQlidWNrZXQtPm5leHQgPSBpZHMtPnBhdGNoZXM7CisJCWlkcy0+cGF0Y2hlcyA9IGJ1Y2tldDsKKwl9CisJZW50ID0gJmJ1Y2tldC0+YnVja2V0W2J1Y2tldC0+bnIrK107CisJaGFzaGNweShlbnQtPnBhdGNoX2lkLCBzaGExKTsKKworCWlmIChpZHMtPmFsbG9jIDw9IGlkcy0+bnIpIHsKKwkJaWRzLT5hbGxvYyA9IGFsbG9jX25yKGlkcy0+bnIpOworCQlpZHMtPnRhYmxlID0geHJlYWxsb2MoaWRzLT50YWJsZSwgc2l6ZW9mKGVudCkgKiBpZHMtPmFsbG9jKTsKKwl9CisJaWYgKHBvcyA8IGlkcy0+bnIpCisJCW1lbW1vdmUoaWRzLT50YWJsZSArIHBvcyArIDEsIGlkcy0+dGFibGUgKyBwb3MsCisJCQlzaXplb2YoZW50KSAqIChpZHMtPm5yIC0gcG9zKSk7CisJaWRzLT5ucisrOworCWlkcy0+dGFibGVbcG9zXSA9IGVudDsKKwlyZXR1cm4gaWRzLT50YWJsZVtwb3NdOworfQorCitzdHJ1Y3QgcGF0Y2hfaWQgKmhhc19jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCXJldHVybiBhZGRfY29tbWl0KGNvbW1pdCwgaWRzLCAxKTsKK30KKworc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlyZXR1cm4gYWRkX2NvbW1pdChjb21taXQsIGlkcywgMCk7Cit9CmRpZmYgLS1naXQgYS9wYXRjaC1pZHMuaCBiL3BhdGNoLWlkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzdjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1pZHMuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFBBVENIX0lEU19ICisjZGVmaW5lIFBBVENIX0lEU19ICisKK3N0cnVjdCBwYXRjaF9pZCB7CisJdW5zaWduZWQgY2hhciBwYXRjaF9pZFsyMF07CisJY2hhciBzZWVuOworfTsKKworc3RydWN0IHBhdGNoX2lkcyB7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0czsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBwYXRjaF9pZCAqKnRhYmxlOworCXN0cnVjdCBwYXRjaF9pZF9idWNrZXQgKnBhdGNoZXM7Cit9OworCitpbnQgaW5pdF9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqKTsKK2ludCBmcmVlX3BhdGNoX2lkcyhzdHJ1Y3QgcGF0Y2hfaWRzICopOworc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHBhdGNoX2lkcyAqKTsKK3N0cnVjdCBwYXRjaF9pZCAqaGFzX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBwYXRjaF9pZHMgKik7CisKKyNlbmRpZiAvKiBQQVRDSF9JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvcGF0aC1saXN0LmggYi9wYXRoLWxpc3QuaAppbmRleCBkNjQwMWVhLi5jZTVmZmFiIDEwMDY0NAotLS0gYS9wYXRoLWxpc3QuaAorKysgYi9wYXRoLWxpc3QuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX1BBVEhfTElTVF9IXwotI2RlZmluZSBfUEFUSF9MSVNUX0hfCisjaWZuZGVmIFBBVEhfTElTVF9ICisjZGVmaW5lIFBBVEhfTElTVF9ICiAKIHN0cnVjdCBwYXRoX2xpc3RfaXRlbSB7CiAJY2hhciAqcGF0aDsKQEAgLTE5LDQgKzE5LDQgQEAKIHN0cnVjdCBwYXRoX2xpc3RfaXRlbSAqcGF0aF9saXN0X2luc2VydChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9saXN0ICpsaXN0KTsKIHN0cnVjdCBwYXRoX2xpc3RfaXRlbSAqcGF0aF9saXN0X2xvb2t1cChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9saXN0ICpsaXN0KTsKIAotI2VuZGlmIC8qIF9QQVRIX0xJU1RfSF8gKi8KKyNlbmRpZiAvKiBQQVRIX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuYyBiL3Byb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmNzg5MAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyZXNzLmMKQEAgLTAsMCArMSwxMDYgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHByb2dyZXNzX3VwZGF0ZTsKKworc3RhdGljIHZvaWQgcHJvZ3Jlc3NfaW50ZXJ2YWwoaW50IHNpZ251bSkKK3sKKwlwcm9ncmVzc191cGRhdGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKwlzdHJ1Y3QgaXRpbWVydmFsIHY7CisKKwlwcm9ncmVzc191cGRhdGUgPSAwOworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IHByb2dyZXNzX2ludGVydmFsOworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7CisKKwl2Lml0X2ludGVydmFsLnR2X3NlYyA9IDE7CisJdi5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKKwl2Lml0X3ZhbHVlID0gdi5pdF9pbnRlcnZhbDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IGl0aW1lcnZhbCB2ID0ge3swLH0sfTsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKKwlzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7CisJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKK30KKworaW50IGRpc3BsYXlfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdW5zaWduZWQgbikKK3sKKwlpZiAocHJvZ3Jlc3MtPmRlbGF5KSB7CisJCWNoYXIgYnVmWzgwXTsKKwkJaWYgKCFwcm9ncmVzc191cGRhdGUgfHwgLS1wcm9ncmVzcy0+ZGVsYXkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHByb2dyZXNzLT50b3RhbCkgeworCQkJdW5zaWduZWQgcGVyY2VudCA9IG4gKiAxMDAgLyBwcm9ncmVzcy0+dG90YWw7CisJCQlpZiAocGVyY2VudCA+IHByb2dyZXNzLT5kZWxheWVkX3BlcmNlbnRfdHJlc2hvbGQpIHsKKwkJCQkvKiBpbmhpYml0IHRoaXMgcHJvZ3Jlc3MgcmVwb3J0IGVudGlyZWx5ICovCisJCQkJY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKCk7CisJCQkJcHJvZ3Jlc3MtPmRlbGF5ID0gLTE7CisJCQkJcHJvZ3Jlc3MtPnRvdGFsID0gMDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlpZiAoc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkJCSAgICAgcHJvZ3Jlc3MtPmRlbGF5ZWRfdGl0bGUsIHByb2dyZXNzLT50b3RhbCkpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBidWYpOworCX0KKwlpZiAocHJvZ3Jlc3MtPnRvdGFsKSB7CisJCXVuc2lnbmVkIHBlcmNlbnQgPSBuICogMTAwIC8gcHJvZ3Jlc3MtPnRvdGFsOworCQlpZiAocGVyY2VudCAhPSBwcm9ncmVzcy0+bGFzdF9wZXJjZW50IHx8IHByb2dyZXNzX3VwZGF0ZSkgeworCQkJcHJvZ3Jlc3MtPmxhc3RfcGVyY2VudCA9IHBlcmNlbnQ7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzJTR1JSUgKCV1LyV1KSBkb25lXHIiLAorCQkJCXByb2dyZXNzLT5wcmVmaXgsIHBlcmNlbnQsIG4sIHByb2dyZXNzLT50b3RhbCk7CisJCQlwcm9ncmVzc191cGRhdGUgPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgaWYgKHByb2dyZXNzX3VwZGF0ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzJXVcciIsIHByb2dyZXNzLT5wcmVmaXgsIG4pOworCQlwcm9ncmVzc191cGRhdGUgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3RhcnRfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgY29uc3QgY2hhciAqdGl0bGUsCisJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIHRvdGFsKQoreworCWNoYXIgYnVmWzgwXTsKKwlwcm9ncmVzcy0+cHJlZml4ID0gcHJlZml4OworCXByb2dyZXNzLT50b3RhbCA9IHRvdGFsOworCXByb2dyZXNzLT5sYXN0X3BlcmNlbnQgPSAtMTsKKwlwcm9ncmVzcy0+ZGVsYXkgPSAwOworCWlmIChzbnByaW50ZihidWYsIHNpemVvZihidWYpLCB0aXRsZSwgdG90YWwpKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBidWYpOworCXNldF9wcm9ncmVzc19zaWduYWwoKTsKK30KKwordm9pZCBzdGFydF9wcm9ncmVzc19kZWxheShzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCBjb25zdCBjaGFyICp0aXRsZSwKKwkJCSAgY29uc3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCB0b3RhbCwKKwkJCSAgdW5zaWduZWQgcGVyY2VudF90cmVzaG9sZCwgdW5zaWduZWQgZGVsYXkpCit7CisJcHJvZ3Jlc3MtPnByZWZpeCA9IHByZWZpeDsKKwlwcm9ncmVzcy0+dG90YWwgPSB0b3RhbDsKKwlwcm9ncmVzcy0+bGFzdF9wZXJjZW50ID0gLTE7CisJcHJvZ3Jlc3MtPmRlbGF5ZWRfcGVyY2VudF90cmVzaG9sZCA9IHBlcmNlbnRfdHJlc2hvbGQ7CisJcHJvZ3Jlc3MtPmRlbGF5ZWRfdGl0bGUgPSB0aXRsZTsKKwlwcm9ncmVzcy0+ZGVsYXkgPSBkZWxheTsKKwlzZXRfcHJvZ3Jlc3Nfc2lnbmFsKCk7Cit9CisKK3ZvaWQgc3RvcF9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKQoreworCWNsZWFyX3Byb2dyZXNzX3NpZ25hbCgpOworCWlmIChwcm9ncmVzcy0+dG90YWwpCisJCWZwdXRjKCdcbicsIHN0ZGVycik7Cit9CmRpZmYgLS1naXQgYS9wcm9ncmVzcy5oIGIvcHJvZ3Jlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWUxYTg5Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3MuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFBST0dSRVNTX0gKKyNkZWZpbmUgUFJPR1JFU1NfSAorCitzdHJ1Y3QgcHJvZ3Jlc3MgeworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwl1bnNpZ25lZCB0b3RhbDsKKwl1bnNpZ25lZCBsYXN0X3BlcmNlbnQ7CisJdW5zaWduZWQgZGVsYXk7CisJdW5zaWduZWQgZGVsYXllZF9wZXJjZW50X3RyZXNob2xkOworCWNvbnN0IGNoYXIgKmRlbGF5ZWRfdGl0bGU7Cit9OworCitpbnQgZGlzcGxheV9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzLCB1bnNpZ25lZCBuKTsKK3ZvaWQgc3RhcnRfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgY29uc3QgY2hhciAqdGl0bGUsCisJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIHRvdGFsKTsKK3ZvaWQgc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgY29uc3QgY2hhciAqdGl0bGUsCisJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgdG90YWwsCisJCQkgIHVuc2lnbmVkIHBlcmNlbnRfdHJlc2hvbGQsIHVuc2lnbmVkIGRlbGF5KTsKK3ZvaWQgc3RvcF9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggNjMzOWEyNy4uZDlmNDZkYSAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMyw4ICszLDEwIEBACiAgKgogICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQogICovCisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUwogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKIAogLyogSW5kZXggZXh0ZW5zaW9ucy4KICAqCkBAIC0xOCwxNiArMjAsNyBAQAogI2RlZmluZSBDQUNIRV9FWFQocykgKCAoc1swXTw8MjQpfChzWzFdPDwxNil8KHNbMl08PDgpfChzWzNdKSApCiAjZGVmaW5lIENBQ0hFX0VYVF9UUkVFIDB4NTQ1MjQ1NDUJLyogIlRSRUUiICovCiAKLXN0cnVjdCBjYWNoZV9lbnRyeSAqKmFjdGl2ZV9jYWNoZTsKLXN0YXRpYyB0aW1lX3QgaW5kZXhfZmlsZV90aW1lc3RhbXA7Ci11bnNpZ25lZCBpbnQgYWN0aXZlX25yLCBhY3RpdmVfYWxsb2MsIGFjdGl2ZV9jYWNoZV9jaGFuZ2VkOwotCi1zdHJ1Y3QgY2FjaGVfdHJlZSAqYWN0aXZlX2NhY2hlX3RyZWU7Ci0KLWludCBjYWNoZV9lcnJubzsKLQotc3RhdGljIHZvaWQgKmNhY2hlX21tYXA7Ci1zdGF0aWMgc2l6ZV90IGNhY2hlX21tYXBfc2l6ZTsKK3N0cnVjdCBpbmRleF9zdGF0ZSB0aGVfaW5kZXg7CiAKIC8qCiAgKiBUaGlzIG9ubHkgdXBkYXRlcyB0aGUgIm5vbi1jcml0aWNhbCIgcGFydHMgb2YgdGhlIGRpcmVjdG9yeQpAQCAtOTMsNiArODYsMjMgQEAKIAlyZXR1cm4gbWF0Y2g7CiB9CiAKK3N0YXRpYyBpbnQgY2VfY29tcGFyZV9naXRsaW5rKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCS8qCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgcmVxdWlyZSB0aGF0IHRoZSAuZ2l0IGRpcmVjdG9yeQorCSAqIHVuZGVyIERJUkxOSyBkaXJlY3RvcnkgYmUgYSB2YWxpZCBnaXQgZGlyZWN0b3J5LiBJdAorCSAqIG1pZ2h0IGV2ZW4gYmUgbWlzc2luZyAoaW4gY2FzZSBub2JvZHkgcG9wdWxhdGVkIHRoYXQKKwkgKiBzdWItcHJvamVjdCkuCisJICoKKwkgKiBJZiBzbywgd2UgY29uc2lkZXIgaXQgYWx3YXlzIHRvIG1hdGNoLgorCSAqLworCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGNlLT5uYW1lLCAiSEVBRCIsIHNoYTEpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOworfQorCiBzdGF0aWMgaW50IGNlX21vZGlmaWVkX2NoZWNrX2ZzKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKIHsKIAlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CkBAIC0xMDQsNiArMTE0LDkgQEAKIAkJaWYgKGNlX2NvbXBhcmVfbGluayhjZSwgeHNpemVfdChzdC0+c3Rfc2l6ZSkpKQogCQkJcmV0dXJuIERBVEFfQ0hBTkdFRDsKIAkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgorCQlpZiAoU19JU0RJUkxOSyhudG9obChjZS0+Y2VfbW9kZSkpKQorCQkJcmV0dXJuIDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIFRZUEVfQ0hBTkdFRDsKIAl9CkBAIC0xMjksNiArMTQyLDEyIEBACiAJCSAgICAoaGFzX3N5bWxpbmtzIHx8ICFTX0lTUkVHKHN0LT5zdF9tb2RlKSkpCiAJCQljaGFuZ2VkIHw9IFRZUEVfQ0hBTkdFRDsKIAkJYnJlYWs7CisJY2FzZSBTX0lGRElSTE5LOgorCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJY2hhbmdlZCB8PSBUWVBFX0NIQU5HRUQ7CisJCWVsc2UgaWYgKGNlX2NvbXBhcmVfZ2l0bGluayhjZSkpCisJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKwkJcmV0dXJuIGNoYW5nZWQ7CiAJZGVmYXVsdDoKIAkJZGllKCJpbnRlcm5hbCBlcnJvcjogY2VfbW9kZSBpcyAlbyIsIG50b2hsKGNlLT5jZV9tb2RlKSk7CiAJfQpAQCAtMTcxLDcgKzE5MCw4IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLWludCBjZV9tYXRjaF9zdGF0KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwgaW50IG9wdGlvbnMpCitpbnQgaWVfbWF0Y2hfc3RhdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBvcHRpb25zKQogewogCXVuc2lnbmVkIGludCBjaGFuZ2VkOwogCWludCBpZ25vcmVfdmFsaWQgPSBvcHRpb25zICYgMDE7CkBAIC0yMDMsOCArMjIzLDggQEAKIAkgKiBjYXJlZnVsbHkgdGhhbiBvdGhlcnMuCiAJICovCiAJaWYgKCFjaGFuZ2VkICYmCi0JICAgIGluZGV4X2ZpbGVfdGltZXN0YW1wICYmCi0JICAgIGluZGV4X2ZpbGVfdGltZXN0YW1wIDw9IG50b2hsKGNlLT5jZV9tdGltZS5zZWMpKSB7CisJICAgIGlzdGF0ZS0+dGltZXN0YW1wICYmCisJICAgIGlzdGF0ZS0+dGltZXN0YW1wIDw9IG50b2hsKGNlLT5jZV9tdGltZS5zZWMpKSB7CiAJCWlmIChhc3N1bWVfcmFjeV9pc19tb2RpZmllZCkKIAkJCWNoYW5nZWQgfD0gREFUQV9DSEFOR0VEOwogCQllbHNlCkBAIC0yMTQsMTAgKzIzNCwxMSBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1pbnQgY2VfbW9kaWZpZWQoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LCBpbnQgcmVhbGx5KQoraW50IGllX21vZGlmaWVkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCByZWFsbHkpCiB7CiAJaW50IGNoYW5nZWQsIGNoYW5nZWRfZnM7Ci0JY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsIHN0LCByZWFsbHkpOworCWNoYW5nZWQgPSBpZV9tYXRjaF9zdGF0KGlzdGF0ZSwgY2UsIHN0LCByZWFsbHkpOwogCWlmICghY2hhbmdlZCkKIAkJcmV0dXJuIDA7CiAJLyoKQEAgLTI4NSwxNSArMzA2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjYWNoZV9uYW1lX3Bvcyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK2ludCBpbmRleF9uYW1lX3BvcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCiB7CiAJaW50IGZpcnN0LCBsYXN0OwogCiAJZmlyc3QgPSAwOwotCWxhc3QgPSBhY3RpdmVfbnI7CisJbGFzdCA9IGlzdGF0ZS0+Y2FjaGVfbnI7CiAJd2hpbGUgKGxhc3QgPiBmaXJzdCkgewogCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbmV4dF07CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW25leHRdOwogCQlpbnQgY21wID0gY2FjaGVfbmFtZV9jb21wYXJlKG5hbWUsIG5hbWVsZW4sIGNlLT5uYW1lLCBudG9ocyhjZS0+Y2VfZmxhZ3MpKTsKIAkJaWYgKCFjbXApCiAJCQlyZXR1cm4gbmV4dDsKQEAgLTMwNywyNyArMzI4LDI5IEBACiB9CiAKIC8qIFJlbW92ZSBlbnRyeSwgcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG1vcmUgZW50cmllcyB0byBnby4uICovCi1pbnQgcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KGludCBwb3MpCitpbnQgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgcG9zKQogewotCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMTsKLQlhY3RpdmVfbnItLTsKLQlpZiAocG9zID49IGFjdGl2ZV9ucikKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAxOworCWlzdGF0ZS0+Y2FjaGVfbnItLTsKKwlpZiAocG9zID49IGlzdGF0ZS0+Y2FjaGVfbnIpCiAJCXJldHVybiAwOwotCW1lbW1vdmUoYWN0aXZlX2NhY2hlICsgcG9zLCBhY3RpdmVfY2FjaGUgKyBwb3MgKyAxLCAoYWN0aXZlX25yIC0gcG9zKSAqIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCW1lbW1vdmUoaXN0YXRlLT5jYWNoZSArIHBvcywKKwkJaXN0YXRlLT5jYWNoZSArIHBvcyArIDEsCisJCShpc3RhdGUtPmNhY2hlX25yIC0gcG9zKSAqIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOwogCXJldHVybiAxOwogfQogCi1pbnQgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShjb25zdCBjaGFyICpwYXRoKQoraW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgc3RybGVuKHBhdGgpKTsKIAlpZiAocG9zIDwgMCkKIAkJcG9zID0gLXBvcy0xOwotCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIgJiYgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgcGF0aCkpCi0JCXJlbW92ZV9jYWNoZV9lbnRyeV9hdChwb3MpOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yICYmICFzdHJjbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLCBwYXRoKSkKKwkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGFkZF9maWxlX3RvX2luZGV4KGNvbnN0IGNoYXIgKnBhdGgsIGludCB2ZXJib3NlKQoraW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgdmVyYm9zZSkKIHsKIAlpbnQgc2l6ZSwgbmFtZWxlbjsKIAlzdHJ1Y3Qgc3RhdCBzdDsKQEAgLTMzNiwxMCArMzU5LDE0IEBACiAJaWYgKGxzdGF0KHBhdGgsICZzdCkpCiAJCWRpZSgiJXM6IHVuYWJsZSB0byBzdGF0ICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCi0JaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpICYmICFTX0lTTE5LKHN0LnN0X21vZGUpKQotCQlkaWUoIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcyBvciBzeW1ib2xpYyBsaW5rcyIsIHBhdGgpOworCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSAmJiAhU19JU0xOSyhzdC5zdF9tb2RlKSAmJiAhU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJZGllKCIlczogY2FuIG9ubHkgYWRkIHJlZ3VsYXIgZmlsZXMsIHN5bWJvbGljIGxpbmtzIG9yIGdpdC1kaXJlY3RvcmllcyIsIHBhdGgpOwogCiAJbmFtZWxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQl3aGlsZSAobmFtZWxlbiAmJiBwYXRoW25hbWVsZW4tMV0gPT0gJy8nKQorCQkJbmFtZWxlbi0tOworCX0KIAlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShuYW1lbGVuKTsKIAljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CiAJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKQEAgLTM1MywxOSArMzgwLDE5IEBACiAJCSAqIGZyb20gaXQsIG90aGVyd2lzZSBhc3N1bWUgdW5leGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KIAkJICovCiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqZW50OwotCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CisJCWludCBwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIG5hbWVsZW4pOwogCi0JCWVudCA9ICgwIDw9IHBvcykgPyBhY3RpdmVfY2FjaGVbcG9zXSA6IE5VTEw7CisJCWVudCA9ICgwIDw9IHBvcykgPyBpc3RhdGUtPmNhY2hlW3Bvc10gOiBOVUxMOwogCQljZS0+Y2VfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGVudCwgc3Quc3RfbW9kZSk7CiAJfQogCiAJaWYgKGluZGV4X3BhdGgoY2UtPnNoYTEsIHBhdGgsICZzdCwgMSkpCiAJCWRpZSgidW5hYmxlIHRvIGluZGV4IGZpbGUgJXMiLCBwYXRoKTsKLQlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFKSkKKwlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UsIEFERF9DQUNIRV9PS19UT19BRER8QUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpKQogCQlkaWUoInVuYWJsZSB0byBhZGQgJXMgdG8gaW5kZXgiLHBhdGgpOwogCWlmICh2ZXJib3NlKQogCQlwcmludGYoImFkZCAnJXMnXG4iLCBwYXRoKTsKLQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChhY3RpdmVfY2FjaGVfdHJlZSwgcGF0aCk7CisJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLT5jYWNoZV90cmVlLCBwYXRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDY5LDE1ICs0OTYsMTYgQEAKICAqIERvIHdlIGhhdmUgYW5vdGhlciBmaWxlIHRoYXQgaGFzIHRoZSBiZWdpbm5pbmcgY29tcG9uZW50cyBiZWluZyBhCiAgKiBwcm9wZXIgc3VwZXJzZXQgb2YgdGhlIG5hbWUgd2UncmUgdHJ5aW5nIHRvIGFkZD8KICAqLwotc3RhdGljIGludCBoYXNfZmlsZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQorc3RhdGljIGludCBoYXNfZmlsZV9uYW1lKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQogewogCWludCByZXR2YWwgPSAwOwogCWludCBsZW4gPSBjZV9uYW1lbGVuKGNlKTsKIAlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CiAJY29uc3QgY2hhciAqbmFtZSA9IGNlLT5uYW1lOwogCi0Jd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgewotCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnAgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcCA9IGlzdGF0ZS0+Y2FjaGVbcG9zKytdOwogCiAJCWlmIChsZW4gPj0gY2VfbmFtZWxlbihwKSkKIAkJCWJyZWFrOwpAQCAtNDg3LDEwICs1MTUsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAocC0+bmFtZVtsZW5dICE9ICcvJykKIAkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3N0YWdlKHApICYmICFwLT5jZV9tb2RlKQorCQkJY29udGludWU7CiAJCXJldHZhbCA9IC0xOwogCQlpZiAoIW9rX3RvX3JlcGxhY2UpCiAJCQlicmVhazsKLQkJcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KC0tcG9zKTsKKwkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgLS1wb3MpOwogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNDk5LDcgKzUyOSw4IEBACiAgKiBEbyB3ZSBoYXZlIGFub3RoZXIgZmlsZSB3aXRoIGEgcGF0aG5hbWUgdGhhdCBpcyBhIHByb3BlcgogICogc3Vic2V0IG9mIHRoZSBuYW1lIHdlJ3JlIHRyeWluZyB0byBhZGQ/CiAgKi8KLXN0YXRpYyBpbnQgaGFzX2Rpcl9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQorc3RhdGljIGludCBoYXNfZGlyX25hbWUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zLCBpbnQgb2tfdG9fcmVwbGFjZSkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CkBAIC01MTcsMjggKzU0OCwzOSBAQAogCQl9CiAJCWxlbiA9IHNsYXNoIC0gbmFtZTsKIAotCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhuYW1lLCBudG9ocyhjcmVhdGVfY2VfZmxhZ3MobGVuLCBzdGFnZSkpKTsKKwkJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBuYW1lLCBudG9ocyhjcmVhdGVfY2VfZmxhZ3MobGVuLCBzdGFnZSkpKTsKIAkJaWYgKHBvcyA+PSAwKSB7Ci0JCQlyZXR2YWwgPSAtMTsKLQkJCWlmICghb2tfdG9fcmVwbGFjZSkKLQkJCQlicmVhazsKLQkJCXJlbW92ZV9jYWNoZV9lbnRyeV9hdChwb3MpOwotCQkJY29udGludWU7CisJCQkvKgorCQkJICogRm91bmQgb25lLCBidXQgbm90IHNvIGZhc3QuICBUaGlzIGNvdWxkCisJCQkgKiBiZSBhIG1hcmtlciB0aGF0IHNheXMgIkkgd2FzIGhlcmUsIGJ1dAorCQkJICogSSBhbSBiZWluZyByZW1vdmVkIi4gIFN1Y2ggYW4gZW50cnkgaXMKKwkJCSAqIG5vdCBhIHBhcnQgb2YgdGhlIHJlc3VsdGluZyB0cmVlLCBhbmQKKwkJCSAqIGl0IGlzIE9rIHRvIGhhdmUgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUKKwkJCSAqIHBhdGguCisJCQkgKi8KKwkJCWlmIChzdGFnZSB8fCBpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX21vZGUpIHsKKwkJCQlyZXR2YWwgPSAtMTsKKwkJCQlpZiAoIW9rX3RvX3JlcGxhY2UpCisJCQkJCWJyZWFrOworCQkJCXJlbW92ZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIHBvcyk7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KKwkJZWxzZQorCQkJcG9zID0gLXBvcy0xOwogCiAJCS8qCiAJCSAqIFRyaXZpYWwgb3B0aW1pemF0aW9uOiBpZiB3ZSBmaW5kIGFuIGVudHJ5IHRoYXQKIAkJICogYWxyZWFkeSBtYXRjaGVzIHRoZSBzdWItZGlyZWN0b3J5LCB0aGVuIHdlIGtub3cKIAkJICogd2UncmUgb2ssIGFuZCB3ZSBjYW4gZXhpdC4KIAkJICovCi0JCXBvcyA9IC1wb3MtMTsKLQkJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpwID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCXdoaWxlIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnAgPSBpc3RhdGUtPmNhY2hlW3Bvc107CiAJCQlpZiAoKGNlX25hbWVsZW4ocCkgPD0gbGVuKSB8fAogCQkJICAgIChwLT5uYW1lW2xlbl0gIT0gJy8nKSB8fAogCQkJICAgIG1lbWNtcChwLT5uYW1lLCBuYW1lLCBsZW4pKQogCQkJCWJyZWFrOyAvKiBub3Qgb3VyIHN1YmRpcmVjdG9yeSAqLwotCQkJaWYgKGNlX3N0YWdlKHApID09IHN0YWdlKQorCQkJaWYgKGNlX3N0YWdlKHApID09IHN0YWdlICYmIChzdGFnZSB8fCBwLT5jZV9tb2RlKSkKIAkJCQkvKiBwIGlzIGF0IHRoZSBzYW1lIHN0YWdlIGFzIG91ciBlbnRyeSwgYW5kCiAJCQkJICogaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygd2hhdCB3ZSBhcmUgbG9va2luZwogCQkJCSAqIGF0LCBzbyB3ZSBjYW5ub3QgaGF2ZSBjb25mbGljdHMgYXQgb3VyCkBAIC01NjAsMzQgKzYwMiw0NSBAQAogICogZnJvbSB0aGUgY2FjaGUgc28gdGhlIGNhbGxlciBzaG91bGQgcmVjb21wdXRlIHRoZSBpbnNlcnQgcG9zaXRpb24uCiAgKiBXaGVuIHRoaXMgaGFwcGVucywgd2UgcmV0dXJuIG5vbi16ZXJvLgogICovCi1zdGF0aWMgaW50IGNoZWNrX2ZpbGVfZGlyZWN0b3J5X2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQorc3RhdGljIGludCBjaGVja19maWxlX2RpcmVjdG9yeV9jb25mbGljdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSBpbnQgcG9zLCBpbnQgb2tfdG9fcmVwbGFjZSkKIHsKKwlpbnQgcmV0dmFsOworCisJLyoKKwkgKiBXaGVuIGNlIGlzIGFuICJJIGFtIGdvaW5nIGF3YXkiIGVudHJ5LCB3ZSBhbGxvdyBpdCB0byBiZSBhZGRlZAorCSAqLworCWlmICghY2Vfc3RhZ2UoY2UpICYmICFjZS0+Y2VfbW9kZSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIFdlIGNoZWNrIGlmIHRoZSBwYXRoIGlzIGEgc3ViLXBhdGggb2YgYSBzdWJzZXF1ZW50IHBhdGhuYW1lCiAJICogZmlyc3QsIHNpbmNlIHJlbW92aW5nIHRob3NlIHdpbGwgbm90IGNoYW5nZSB0aGUgcG9zaXRpb24KLQkgKiBpbiB0aGUgYXJyYXkKKwkgKiBpbiB0aGUgYXJyYXkuCiAJICovCi0JaW50IHJldHZhbCA9IGhhc19maWxlX25hbWUoY2UsIHBvcywgb2tfdG9fcmVwbGFjZSk7CisJcmV0dmFsID0gaGFzX2ZpbGVfbmFtZShpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpOworCiAJLyoKIAkgKiBUaGVuIGNoZWNrIGlmIHRoZSBwYXRoIG1pZ2h0IGhhdmUgYSBjbGFzaGluZyBzdWItZGlyZWN0b3J5CiAJICogYmVmb3JlIGl0LgogCSAqLwotCXJldHVybiByZXR2YWwgKyBoYXNfZGlyX25hbWUoY2UsIHBvcywgb2tfdG9fcmVwbGFjZSk7CisJcmV0dXJuIHJldHZhbCArIGhhc19kaXJfbmFtZShpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpOwogfQogCi1pbnQgYWRkX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBvcHRpb24pCitpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKQogewogCWludCBwb3M7CiAJaW50IG9rX3RvX2FkZCA9IG9wdGlvbiAmIEFERF9DQUNIRV9PS19UT19BREQ7CiAJaW50IG9rX3RvX3JlcGxhY2UgPSBvcHRpb24gJiBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRTsKIAlpbnQgc2tpcF9kZl9jaGVjayA9IG9wdGlvbiAmIEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0s7CiAKLQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhjZS0+bmFtZSwgbnRvaHMoY2UtPmNlX2ZsYWdzKSk7CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBjZS0+bmFtZSwgbnRvaHMoY2UtPmNlX2ZsYWdzKSk7CiAKIAkvKiBleGlzdGluZyBtYXRjaD8gSnVzdCByZXBsYWNlIGl0LiAqLwogCWlmIChwb3MgPj0gMCkgewotCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCA9IDE7Ci0JCWFjdGl2ZV9jYWNoZVtwb3NdID0gY2U7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CisJCWlzdGF0ZS0+Y2FjaGVbcG9zXSA9IGNlOwogCQlyZXR1cm4gMDsKIAl9CiAJcG9zID0gLXBvcy0xOwpAQCAtNTk2LDEwICs2NDksMTAgQEAKIAkgKiBJbnNlcnRpbmcgYSBtZXJnZWQgZW50cnkgKCJzdGFnZSAwIikgaW50byB0aGUgaW5kZXgKIAkgKiB3aWxsIGFsd2F5cyByZXBsYWNlIGFsbCBub24tbWVyZ2VkIGVudHJpZXMuLgogCSAqLwotCWlmIChwb3MgPCBhY3RpdmVfbnIgJiYgY2Vfc3RhZ2UoY2UpID09IDApIHsKLQkJd2hpbGUgKGNlX3NhbWVfbmFtZShhY3RpdmVfY2FjaGVbcG9zXSwgY2UpKSB7CisJaWYgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgY2Vfc3RhZ2UoY2UpID09IDApIHsKKwkJd2hpbGUgKGNlX3NhbWVfbmFtZShpc3RhdGUtPmNhY2hlW3Bvc10sIGNlKSkgewogCQkJb2tfdG9fYWRkID0gMTsKLQkJCWlmICghcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KHBvcykpCisJCQlpZiAoIXJlbW92ZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIHBvcykpCiAJCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC02MTAsMjUgKzY2MywyOSBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoIXNraXBfZGZfY2hlY2sgJiYKLQkgICAgY2hlY2tfZmlsZV9kaXJlY3RvcnlfY29uZmxpY3QoY2UsIHBvcywgb2tfdG9fcmVwbGFjZSkpIHsKKwkgICAgY2hlY2tfZmlsZV9kaXJlY3RvcnlfY29uZmxpY3QoaXN0YXRlLCBjZSwgcG9zLCBva190b19yZXBsYWNlKSkgewogCQlpZiAoIW9rX3RvX3JlcGxhY2UpCi0JCQlyZXR1cm4gZXJyb3IoIiclcycgYXBwZWFycyBhcyBib3RoIGEgZmlsZSBhbmQgYXMgYSBkaXJlY3RvcnkiLCBjZS0+bmFtZSk7Ci0JCXBvcyA9IGNhY2hlX25hbWVfcG9zKGNlLT5uYW1lLCBudG9ocyhjZS0+Y2VfZmxhZ3MpKTsKKwkJCXJldHVybiBlcnJvcigiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIsCisJCQkJICAgICBjZS0+bmFtZSk7CisJCXBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgY2UtPm5hbWUsIG50b2hzKGNlLT5jZV9mbGFncykpOwogCQlwb3MgPSAtcG9zLTE7CiAJfQogCiAJLyogTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBiaWcgZW5vdWdoIC4uICovCi0JaWYgKGFjdGl2ZV9uciA9PSBhY3RpdmVfYWxsb2MpIHsKLQkJYWN0aXZlX2FsbG9jID0gYWxsb2NfbnIoYWN0aXZlX2FsbG9jKTsKLQkJYWN0aXZlX2NhY2hlID0geHJlYWxsb2MoYWN0aXZlX2NhY2hlLCBhY3RpdmVfYWxsb2MgKiBzaXplb2Yoc3RydWN0IGNhY2hlX2VudHJ5ICopKTsKKwlpZiAoaXN0YXRlLT5jYWNoZV9uciA9PSBpc3RhdGUtPmNhY2hlX2FsbG9jKSB7CisJCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgPSBhbGxvY19ucihpc3RhdGUtPmNhY2hlX2FsbG9jKTsKKwkJaXN0YXRlLT5jYWNoZSA9IHhyZWFsbG9jKGlzdGF0ZS0+Y2FjaGUsCisJCQkJCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgKiBzaXplb2Yoc3RydWN0IGNhY2hlX2VudHJ5ICopKTsKIAl9CiAKIAkvKiBBZGQgaXQgaW4uLiAqLwotCWFjdGl2ZV9ucisrOwotCWlmIChhY3RpdmVfbnIgPiBwb3MpCi0JCW1lbW1vdmUoYWN0aXZlX2NhY2hlICsgcG9zICsgMSwgYWN0aXZlX2NhY2hlICsgcG9zLCAoYWN0aXZlX25yIC0gcG9zIC0gMSkgKiBzaXplb2YoY2UpKTsKLQlhY3RpdmVfY2FjaGVbcG9zXSA9IGNlOwotCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMTsKKwlpc3RhdGUtPmNhY2hlX25yKys7CisJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPiBwb3MpCisJCW1lbW1vdmUoaXN0YXRlLT5jYWNoZSArIHBvcyArIDEsCisJCQlpc3RhdGUtPmNhY2hlICsgcG9zLAorCQkJKGlzdGF0ZS0+Y2FjaGVfbnIgLSBwb3MgLSAxKSAqIHNpemVvZihjZSkpOworCWlzdGF0ZS0+Y2FjaGVbcG9zXSA9IGNlOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY0MywxOCArNzAwLDIwIEBACiAgKiBGb3IgZXhhbXBsZSwgeW91J2Qgd2FudCB0byBkbyB0aGlzIGFmdGVyIGRvaW5nIGEgImdpdC1yZWFkLXRyZWUiLAogICogdG8gbGluayB1cCB0aGUgc3RhdCBjYWNoZSBkZXRhaWxzIHdpdGggdGhlIHByb3BlciBmaWxlcy4KICAqLwotc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcmVhbGx5LCBpbnQgKmVycikKIHsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKnVwZGF0ZWQ7CiAJaW50IGNoYW5nZWQsIHNpemU7CiAKIAlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkgPCAwKSB7Ci0JCWNhY2hlX2Vycm5vID0gZXJybm87CisJCWlmIChlcnIpCisJCQkqZXJyID0gZXJybm87CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIHJlYWxseSk7CisJY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoaXN0YXRlLCBjZSwgJnN0LCByZWFsbHkpOwogCWlmICghY2hhbmdlZCkgewogCQlpZiAocmVhbGx5ICYmIGFzc3VtZV91bmNoYW5nZWQgJiYKIAkJICAgICEoY2UtPmNlX2ZsYWdzICYgaHRvbnMoQ0VfVkFMSUQpKSkKQEAgLTY2Myw4ICs3MjIsOSBAQAogCQkJcmV0dXJuIGNlOwogCX0KIAotCWlmIChjZV9tb2RpZmllZChjZSwgJnN0LCByZWFsbHkpKSB7Ci0JCWNhY2hlX2Vycm5vID0gRUlOVkFMOworCWlmIChpZV9tb2RpZmllZChpc3RhdGUsIGNlLCAmc3QsIHJlYWxseSkpIHsKKwkJaWYgKGVycikKKwkJCSplcnIgPSBFSU5WQUw7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNjg1LDcgKzc0NSw3IEBACiAJcmV0dXJuIHVwZGF0ZWQ7CiB9CiAKLWludCByZWZyZXNoX2NhY2hlKHVuc2lnbmVkIGludCBmbGFncykKK2ludCByZWZyZXNoX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IGk7CiAJaW50IGhhc19lcnJvcnMgPSAwOwpAQCAtNjk0LDEyICs3NTQsMTQgQEAKIAlpbnQgcXVpZXQgPSAoZmxhZ3MgJiBSRUZSRVNIX1FVSUVUKSAhPSAwOwogCWludCBub3RfbmV3ID0gKGZsYWdzICYgUkVGUkVTSF9JR05PUkVfTUlTU0lORykgIT0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKm5ldzsKLQkJY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWludCBjYWNoZV9lcnJubyA9IDA7CisKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW2ldOwogCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7Ci0JCQl3aGlsZSAoKGkgPCBhY3RpdmVfbnIpICYmCi0JCQkgICAgICAgISBzdHJjbXAoYWN0aXZlX2NhY2hlW2ldLT5uYW1lLCBjZS0+bmFtZSkpCisJCQl3aGlsZSAoKGkgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkJICAgICAgICEgc3RyY21wKGlzdGF0ZS0+Y2FjaGVbaV0tPm5hbWUsIGNlLT5uYW1lKSkKIAkJCQlpKys7CiAJCQlpLS07CiAJCQlpZiAoYWxsb3dfdW5tZXJnZWQpCkBAIC03MDksNyArNzcxLDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbmV3ID0gcmVmcmVzaF9jYWNoZV9lbnRyeShjZSwgcmVhbGx5KTsKKwkJbmV3ID0gcmVmcmVzaF9jYWNoZV9lbnQoaXN0YXRlLCBjZSwgcmVhbGx5LCAmY2FjaGVfZXJybm8pOwogCQlpZiAobmV3ID09IGNlKQogCQkJY29udGludWU7CiAJCWlmICghbmV3KSB7CkBAIC03MjAsNyArNzgyLDcgQEAKIAkJCQkgKiBtZWFucyB0aGUgaW5kZXggaXMgbm90IHZhbGlkIGFueW1vcmUuCiAJCQkJICovCiAJCQkJY2UtPmNlX2ZsYWdzICY9IH5odG9ucyhDRV9WQUxJRCk7Ci0JCQkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOworCQkJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CiAJCQl9CiAJCQlpZiAocXVpZXQpCiAJCQkJY29udGludWU7CkBAIC03MjgsMTUgKzc5MCwyMCBAQAogCQkJaGFzX2Vycm9ycyA9IDE7CiAJCQljb250aW51ZTsKIAkJfQotCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCA9IDE7Ci0JCS8qIFlvdSBjYW4gTk9UIGp1c3QgZnJlZSBhY3RpdmVfY2FjaGVbaV0gaGVyZSwgc2luY2UgaXQKKwkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMTsKKwkJLyogWW91IGNhbiBOT1QganVzdCBmcmVlIGlzdGF0ZS0+Y2FjaGVbaV0gaGVyZSwgc2luY2UgaXQKIAkJICogbWlnaHQgbm90IGJlIG5lY2Vzc2FyaWx5IG1hbGxvYygpZWQgYnV0IGNhbiBhbHNvIGNvbWUKIAkJICogZnJvbSBtbWFwKCkuICovCi0JCWFjdGl2ZV9jYWNoZVtpXSA9IG5ldzsKKwkJaXN0YXRlLT5jYWNoZVtpXSA9IG5ldzsKIAl9CiAJcmV0dXJuIGhhc19lcnJvcnM7CiB9CiAKK3N0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcmVhbGx5KQoreworCXJldHVybiByZWZyZXNoX2NhY2hlX2VudCgmdGhlX2luZGV4LCBjZSwgcmVhbGx5LCBOVUxMKTsKK30KKwogc3RhdGljIGludCB2ZXJpZnlfaGRyKHN0cnVjdCBjYWNoZV9oZWFkZXIgKmhkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCVNIQV9DVFggYzsKQEAgLTc1NCwxMSArODIxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9pbmRleF9leHRlbnNpb24oY29uc3QgY2hhciAqZXh0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHN6KQorc3RhdGljIGludCByZWFkX2luZGV4X2V4dGVuc2lvbihzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQljb25zdCBjaGFyICpleHQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc3opCiB7CiAJc3dpdGNoIChDQUNIRV9FWFQoZXh0KSkgewogCWNhc2UgQ0FDSEVfRVhUX1RSRUU6Ci0JCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZV9yZWFkKGRhdGEsIHN6KTsKKwkJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZV9yZWFkKGRhdGEsIHN6KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKCpleHQgPCAnQScgfHwgJ1onIDwgKmV4dCkKQEAgLTc3MCwxMyArODM4LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByZWFkX2NhY2hlKHZvaWQpCitpbnQgcmVhZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKIHsKLQlyZXR1cm4gcmVhZF9jYWNoZV9mcm9tKGdldF9pbmRleF9maWxlKCkpOworCXJldHVybiByZWFkX2luZGV4X2Zyb20oaXN0YXRlLCBnZXRfaW5kZXhfZmlsZSgpKTsKIH0KIAogLyogcmVtZW1iZXIgdG8gZGlzY2FyZF9jYWNoZSgpIGJlZm9yZSByZWFkaW5nIGEgZGlmZmVyZW50IGNhY2hlISAqLwotaW50IHJlYWRfY2FjaGVfZnJvbShjb25zdCBjaGFyICpwYXRoKQoraW50IHJlYWRfaW5kZXhfZnJvbShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKIHsKIAlpbnQgZmQsIGk7CiAJc3RydWN0IHN0YXQgc3Q7CkBAIC03ODQsMTEgKzg1MiwxMSBAQAogCXN0cnVjdCBjYWNoZV9oZWFkZXIgKmhkcjsKIAogCWVycm5vID0gRUJVU1k7Ci0JaWYgKGNhY2hlX21tYXApCi0JCXJldHVybiBhY3RpdmVfbnI7CisJaWYgKGlzdGF0ZS0+bW1hcCkKKwkJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CiAKIAllcnJubyA9IEVOT0VOVDsKLQlpbmRleF9maWxlX3RpbWVzdGFtcCA9IDA7CisJaXN0YXRlLT50aW1lc3RhbXAgPSAwOwogCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRU5PRU5UKQpAQCAtNzk2LDMzICs4NjQsMzUgQEAKIAkJZGllKCJpbmRleCBmaWxlIG9wZW4gZmFpbGVkICglcykiLCBzdHJlcnJvcihlcnJubykpOwogCX0KIAotCWlmICghZnN0YXQoZmQsICZzdCkpIHsKLQkJY2FjaGVfbW1hcF9zaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCWlmIChjYWNoZV9tbWFwX3NpemUgPj0gc2l6ZW9mKHN0cnVjdCBjYWNoZV9oZWFkZXIpICsgMjApCi0JCQljYWNoZV9tbWFwID0geG1tYXAoTlVMTCwgY2FjaGVfbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSwgZmQsIDApOwotCQllbHNlCi0JCQlkaWUoImluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIik7Ci0JfSBlbHNlCisJaWYgKGZzdGF0KGZkLCAmc3QpKQogCQlkaWUoImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4ICglcykiLCBzdHJlcnJvcihlcnJubykpOworCisJZXJybm8gPSBFSU5WQUw7CisJaXN0YXRlLT5tbWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWlmIChpc3RhdGUtPm1tYXBfc2l6ZSA8IHNpemVvZihzdHJ1Y3QgY2FjaGVfaGVhZGVyKSArIDIwKQorCQlkaWUoImluZGV4IGZpbGUgc21hbGxlciB0aGFuIGV4cGVjdGVkIik7CisKKwlpc3RhdGUtPm1tYXAgPSB4bW1hcChOVUxMLCBpc3RhdGUtPm1tYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKIAljbG9zZShmZCk7CiAKLQloZHIgPSBjYWNoZV9tbWFwOwotCWlmICh2ZXJpZnlfaGRyKGhkciwgY2FjaGVfbW1hcF9zaXplKSA8IDApCisJaGRyID0gaXN0YXRlLT5tbWFwOworCWlmICh2ZXJpZnlfaGRyKGhkciwgaXN0YXRlLT5tbWFwX3NpemUpIDwgMCkKIAkJZ290byB1bm1hcDsKIAotCWFjdGl2ZV9uciA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOwotCWFjdGl2ZV9hbGxvYyA9IGFsbG9jX25yKGFjdGl2ZV9ucik7Ci0JYWN0aXZlX2NhY2hlID0geGNhbGxvYyhhY3RpdmVfYWxsb2MsIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwlpc3RhdGUtPmNhY2hlX2FsbG9jID0gYWxsb2NfbnIoaXN0YXRlLT5jYWNoZV9ucik7CisJaXN0YXRlLT5jYWNoZSA9IHhjYWxsb2MoaXN0YXRlLT5jYWNoZV9hbGxvYywgc2l6ZW9mKHN0cnVjdCBjYWNoZV9lbnRyeSAqKSk7CiAKIAlvZmZzZXQgPSBzaXplb2YoKmhkcik7Ci0JZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7Ci0JCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSAoc3RydWN0IGNhY2hlX2VudHJ5ICopICgoY2hhciAqKSBjYWNoZV9tbWFwICsgb2Zmc2V0KTsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJY2UgPSAoc3RydWN0IGNhY2hlX2VudHJ5ICopKChjaGFyICopKGlzdGF0ZS0+bW1hcCkgKyBvZmZzZXQpOwogCQlvZmZzZXQgPSBvZmZzZXQgKyBjZV9zaXplKGNlKTsKLQkJYWN0aXZlX2NhY2hlW2ldID0gY2U7CisJCWlzdGF0ZS0+Y2FjaGVbaV0gPSBjZTsKIAl9Ci0JaW5kZXhfZmlsZV90aW1lc3RhbXAgPSBzdC5zdF9tdGltZTsKLQl3aGlsZSAob2Zmc2V0IDw9IGNhY2hlX21tYXBfc2l6ZSAtIDIwIC0gOCkgeworCWlzdGF0ZS0+dGltZXN0YW1wID0gc3Quc3RfbXRpbWU7CisJd2hpbGUgKG9mZnNldCA8PSBpc3RhdGUtPm1tYXBfc2l6ZSAtIDIwIC0gOCkgewogCQkvKiBBZnRlciBhbiBhcnJheSBvZiBhY3RpdmVfbnIgaW5kZXggZW50cmllcywKIAkJICogdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBudW1iZXIgb2YgZXh0ZW5kZWQKIAkJICogc2VjdGlvbnMsIGVhY2ggb2Ygd2hpY2ggaXMgcHJlZml4ZWQgd2l0aApAQCAtODMwLDM1ICs5MDAsMzcgQEAKIAkJICogaW4gNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlci4KIAkJICovCiAJCXVuc2lnbmVkIGxvbmcgZXh0c2l6ZTsKLQkJbWVtY3B5KCZleHRzaXplLCAoY2hhciAqKSBjYWNoZV9tbWFwICsgb2Zmc2V0ICsgNCwgNCk7CisJCW1lbWNweSgmZXh0c2l6ZSwgKGNoYXIgKikoaXN0YXRlLT5tbWFwKSArIG9mZnNldCArIDQsIDQpOwogCQlleHRzaXplID0gbnRvaGwoZXh0c2l6ZSk7Ci0JCWlmIChyZWFkX2luZGV4X2V4dGVuc2lvbigoKGNvbnN0IGNoYXIgKikgY2FjaGVfbW1hcCkgKyBvZmZzZXQsCi0JCQkJCSAoY2hhciAqKSBjYWNoZV9tbWFwICsgb2Zmc2V0ICsgOCwKKwkJaWYgKHJlYWRfaW5kZXhfZXh0ZW5zaW9uKGlzdGF0ZSwKKwkJCQkJICgoY29uc3QgY2hhciAqKSAoaXN0YXRlLT5tbWFwKSkgKyBvZmZzZXQsCisJCQkJCSAoY2hhciAqKSAoaXN0YXRlLT5tbWFwKSArIG9mZnNldCArIDgsCiAJCQkJCSBleHRzaXplKSA8IDApCiAJCQlnb3RvIHVubWFwOwogCQlvZmZzZXQgKz0gODsKIAkJb2Zmc2V0ICs9IGV4dHNpemU7CiAJfQotCXJldHVybiBhY3RpdmVfbnI7CisJcmV0dXJuIGlzdGF0ZS0+Y2FjaGVfbnI7CiAKIHVubWFwOgotCW11bm1hcChjYWNoZV9tbWFwLCBjYWNoZV9tbWFwX3NpemUpOworCW11bm1hcChpc3RhdGUtPm1tYXAsIGlzdGF0ZS0+bW1hcF9zaXplKTsKIAllcnJubyA9IEVJTlZBTDsKIAlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwogfQogCi1pbnQgZGlzY2FyZF9jYWNoZSh2b2lkKQoraW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCiB7CiAJaW50IHJldDsKIAotCWFjdGl2ZV9uciA9IGFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMDsKLQlpbmRleF9maWxlX3RpbWVzdGFtcCA9IDA7Ci0JY2FjaGVfdHJlZV9mcmVlKCZhY3RpdmVfY2FjaGVfdHJlZSk7Ci0JaWYgKGNhY2hlX21tYXAgPT0gTlVMTCkKKwlpc3RhdGUtPmNhY2hlX25yID0gMDsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wID0gMDsKKwljYWNoZV90cmVlX2ZyZWUoJihpc3RhdGUtPmNhY2hlX3RyZWUpKTsKKwlpZiAoaXN0YXRlLT5tbWFwID09IE5VTEwpCiAJCXJldHVybiAwOwotCXJldCA9IG11bm1hcChjYWNoZV9tbWFwLCBjYWNoZV9tbWFwX3NpemUpOwotCWNhY2hlX21tYXAgPSBOVUxMOwotCWNhY2hlX21tYXBfc2l6ZSA9IDA7CisJcmV0ID0gbXVubWFwKGlzdGF0ZS0+bW1hcCwgaXN0YXRlLT5tbWFwX3NpemUpOworCWlzdGF0ZS0+bW1hcCA9IE5VTEw7CisJaXN0YXRlLT5tbWFwX3NpemUgPSAwOwogCiAJLyogbm8gbmVlZCB0byB0aHJvdyBhd2F5IGFsbG9jYXRlZCBhY3RpdmVfY2FjaGUgKi8KIAlyZXR1cm4gcmV0OwpAQCAtOTc3LDExICsxMDQ5LDEzIEBACiAJfQogfQogCi1pbnQgd3JpdGVfY2FjaGUoaW50IG5ld2ZkLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IGVudHJpZXMpCitpbnQgd3JpdGVfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuZXdmZCkKIHsKIAlTSEFfQ1RYIGM7CiAJc3RydWN0IGNhY2hlX2hlYWRlciBoZHI7CiAJaW50IGksIHJlbW92ZWQ7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUgPSBpc3RhdGUtPmNhY2hlOworCWludCBlbnRyaWVzID0gaXN0YXRlLT5jYWNoZV9ucjsKIAogCWZvciAoaSA9IHJlbW92ZWQgPSAwOyBpIDwgZW50cmllczsgaSsrKQogCQlpZiAoIWNhY2hlW2ldLT5jZV9tb2RlKQpAQCAtOTk5LDE3ICsxMDczLDE3IEBACiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKIAkJaWYgKCFjZS0+Y2VfbW9kZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaW5kZXhfZmlsZV90aW1lc3RhbXAgJiYKLQkJICAgIGluZGV4X2ZpbGVfdGltZXN0YW1wIDw9IG50b2hsKGNlLT5jZV9tdGltZS5zZWMpKQorCQlpZiAoaXN0YXRlLT50aW1lc3RhbXAgJiYKKwkJICAgIGlzdGF0ZS0+dGltZXN0YW1wIDw9IG50b2hsKGNlLT5jZV9tdGltZS5zZWMpKQogCQkJY2Vfc211ZGdlX3JhY2lseV9jbGVhbl9lbnRyeShjZSk7CiAJCWlmIChjZV93cml0ZSgmYywgbmV3ZmQsIGNlLCBjZV9zaXplKGNlKSkgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KIAogCS8qIFdyaXRlIGV4dGVuc2lvbiBkYXRhIGhlcmUgKi8KLQlpZiAoYWN0aXZlX2NhY2hlX3RyZWUpIHsKKwlpZiAoaXN0YXRlLT5jYWNoZV90cmVlKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3o7Ci0JCXZvaWQgKmRhdGEgPSBjYWNoZV90cmVlX3dyaXRlKGFjdGl2ZV9jYWNoZV90cmVlLCAmc3opOworCQl2b2lkICpkYXRhID0gY2FjaGVfdHJlZV93cml0ZShpc3RhdGUtPmNhY2hlX3RyZWUsICZzeik7CiAJCWlmIChkYXRhICYmCiAJCSAgICAhd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgbmV3ZmQsIENBQ0hFX0VYVF9UUkVFLCBzeikgJiYKIAkJICAgICFjZV93cml0ZSgmYywgbmV3ZmQsIGRhdGEsIHN6KSkKZGlmZiAtLWdpdCBhL3JlZnMuYyBiL3JlZnMuYwppbmRleCBkN2JlMjg0Li44OTg3NmJmIDEwMDY0NAotLS0gYS9yZWZzLmMKKysrIGIvcmVmcy5jCkBAIC00NywyMiArNDcsNyBAQAogCQkJCXN0cnVjdCByZWZfbGlzdCAqKm5ld19lbnRyeSkKIHsKIAlpbnQgbGVuOwotCXN0cnVjdCByZWZfbGlzdCAqKnAgPSAmbGlzdCwgKmVudHJ5OwotCi0JLyogRmluZCB0aGUgcGxhY2UgdG8gaW5zZXJ0IHRoZSByZWYgaW50by4uICovCi0Jd2hpbGUgKChlbnRyeSA9ICpwKSAhPSBOVUxMKSB7Ci0JCWludCBjbXAgPSBzdHJjbXAoZW50cnktPm5hbWUsIG5hbWUpOwotCQlpZiAoY21wID4gMCkKLQkJCWJyZWFrOwotCi0JCS8qIFNhbWUgYXMgZXhpc3RpbmcgZW50cnk/ICovCi0JCWlmICghY21wKSB7Ci0JCQlpZiAobmV3X2VudHJ5KQotCQkJCSpuZXdfZW50cnkgPSBlbnRyeTsKLQkJCXJldHVybiBsaXN0OwotCQl9Ci0JCXAgPSAmZW50cnktPm5leHQ7Ci0JfQorCXN0cnVjdCByZWZfbGlzdCAqZW50cnk7CiAKIAkvKiBBbGxvY2F0ZSBpdCBhbmQgYWRkIGl0IGluLi4gKi8KIAlsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwpAQCAtNzEsMTEgKzU2LDk0IEBACiAJaGFzaGNscihlbnRyeS0+cGVlbGVkKTsKIAltZW1jcHkoZW50cnktPm5hbWUsIG5hbWUsIGxlbik7CiAJZW50cnktPmZsYWcgPSBmbGFnOwotCWVudHJ5LT5uZXh0ID0gKnA7Ci0JKnAgPSBlbnRyeTsKKwllbnRyeS0+bmV4dCA9IGxpc3Q7CiAJaWYgKG5ld19lbnRyeSkKIAkJKm5ld19lbnRyeSA9IGVudHJ5OwotCXJldHVybiBsaXN0OworCXJldHVybiBlbnRyeTsKK30KKworLyogbWVyZ2Ugc29ydCB0aGUgcmVmIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2xpc3QgKnNvcnRfcmVmX2xpc3Qoc3RydWN0IHJlZl9saXN0ICpsaXN0KQoreworCWludCBwc2l6ZSwgcXNpemUsIGxhc3RfbWVyZ2VfY291bnQsIGNtcDsKKwlzdHJ1Y3QgcmVmX2xpc3QgKnAsICpxLCAqbCwgKmU7CisJc3RydWN0IHJlZl9saXN0ICpuZXdfbGlzdCA9IGxpc3Q7CisJaW50IGsgPSAxOworCWludCBtZXJnZV9jb3VudCA9IDA7CisKKwlpZiAoIWxpc3QpCisJCXJldHVybiBsaXN0OworCisJZG8geworCQlsYXN0X21lcmdlX2NvdW50ID0gbWVyZ2VfY291bnQ7CisJCW1lcmdlX2NvdW50ID0gMDsKKworCQlwc2l6ZSA9IDA7CisKKwkJcCA9IG5ld19saXN0OworCQlxID0gbmV3X2xpc3Q7CisJCW5ld19saXN0ID0gTlVMTDsKKwkJbCA9IE5VTEw7CisKKwkJd2hpbGUgKHApIHsKKwkJCW1lcmdlX2NvdW50Kys7CisKKwkJCXdoaWxlIChwc2l6ZSA8IGsgJiYgcS0+bmV4dCkgeworCQkJCXEgPSBxLT5uZXh0OworCQkJCXBzaXplKys7CisJCQl9CisJCQlxc2l6ZSA9IGs7CisKKwkJCXdoaWxlICgocHNpemUgPiAwKSB8fCAocXNpemUgPiAwICYmIHEpKSB7CisJCQkJaWYgKHFzaXplID09IDAgfHwgIXEpIHsKKwkJCQkJZSA9IHA7CisJCQkJCXAgPSBwLT5uZXh0OworCQkJCQlwc2l6ZS0tOworCQkJCX0gZWxzZSBpZiAocHNpemUgPT0gMCkgeworCQkJCQllID0gcTsKKwkJCQkJcSA9IHEtPm5leHQ7CisJCQkJCXFzaXplLS07CisJCQkJfSBlbHNlIHsKKwkJCQkJY21wID0gc3RyY21wKHEtPm5hbWUsIHAtPm5hbWUpOworCQkJCQlpZiAoY21wIDwgMCkgeworCQkJCQkJZSA9IHE7CisJCQkJCQlxID0gcS0+bmV4dDsKKwkJCQkJCXFzaXplLS07CisJCQkJCX0gZWxzZSBpZiAoY21wID4gMCkgeworCQkJCQkJZSA9IHA7CisJCQkJCQlwID0gcC0+bmV4dDsKKwkJCQkJCXBzaXplLS07CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoaGFzaGNtcChxLT5zaGExLCBwLT5zaGExKSkKKwkJCQkJCQlkaWUoIkR1cGxpY2F0ZWQgcmVmLCBhbmQgU0hBMXMgZG9uJ3QgbWF0Y2g6ICVzIiwKKwkJCQkJCQkgICAgcS0+bmFtZSk7CisJCQkJCQl3YXJuaW5nKCJEdXBsaWNhdGVkIHJlZjogJXMiLCBxLT5uYW1lKTsKKwkJCQkJCWUgPSBxOworCQkJCQkJcSA9IHEtPm5leHQ7CisJCQkJCQlxc2l6ZS0tOworCQkJCQkJZnJlZShlKTsKKwkJCQkJCWUgPSBwOworCQkJCQkJcCA9IHAtPm5leHQ7CisJCQkJCQlwc2l6ZS0tOworCQkJCQl9CisJCQkJfQorCisJCQkJZS0+bmV4dCA9IE5VTEw7CisKKwkJCQlpZiAobCkKKwkJCQkJbC0+bmV4dCA9IGU7CisJCQkJaWYgKCFuZXdfbGlzdCkKKwkJCQkJbmV3X2xpc3QgPSBlOworCQkJCWwgPSBlOworCQkJfQorCisJCQlwID0gcTsKKwkJfTsKKworCQlrID0gayAqIDI7CisJfSB3aGlsZSAoKGxhc3RfbWVyZ2VfY291bnQgIT0gbWVyZ2VfY291bnQpIHx8IChsYXN0X21lcmdlX2NvdW50ICE9IDEpKTsKKworCXJldHVybiBuZXdfbGlzdDsKIH0KIAogLyoKQEAgLTE0Miw3ICsyMTAsNyBAQAogCQkgICAgIWdldF9zaGExX2hleChyZWZsaW5lICsgMSwgc2hhMSkpCiAJCQloYXNoY3B5KGxhc3QtPnBlZWxlZCwgc2hhMSk7CiAJfQotCWNhY2hlZF9yZWZzLT5wYWNrZWQgPSBsaXN0OworCWNhY2hlZF9yZWZzLT5wYWNrZWQgPSBzb3J0X3JlZl9saXN0KGxpc3QpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlZl9saXN0ICpnZXRfcGFja2VkX3JlZnModm9pZCkKQEAgLTIwMSw3ICsyNjksNyBAQAogCQlmcmVlKHJlZik7CiAJCWNsb3NlZGlyKGRpcik7CiAJfQotCXJldHVybiBsaXN0OworCXJldHVybiBzb3J0X3JlZl9saXN0KGxpc3QpOwogfQogCiBzdGF0aWMgc3RydWN0IHJlZl9saXN0ICpnZXRfbG9vc2VfcmVmcyh2b2lkKQpAQCAtMjE1LDYgKzI4Myw4NiBAQAogCiAvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyByZWZzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaCAqLwogI2RlZmluZSBNQVhERVBUSCA1CisjZGVmaW5lIE1BWFJFRkxFTiAoMTAyNCkKKworc3RhdGljIGludCByZXNvbHZlX2dpdGxpbmtfcGFja2VkX3JlZihjaGFyICpuYW1lLCBpbnQgcGF0aGxlbiwgY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCUZJTEUgKmY7CisJc3RydWN0IGNhY2hlZF9yZWZzIHJlZnM7CisJc3RydWN0IHJlZl9saXN0ICpyZWY7CisJaW50IHJldHZhbDsKKworCXN0cmNweShuYW1lICsgcGF0aGxlbiwgInBhY2tlZC1yZWZzIik7CisJZiA9IGZvcGVuKG5hbWUsICJyIik7CisJaWYgKCFmKQorCQlyZXR1cm4gLTE7CisJcmVhZF9wYWNrZWRfcmVmcyhmLCAmcmVmcyk7CisJZmNsb3NlKGYpOworCXJlZiA9IHJlZnMucGFja2VkOworCXJldHZhbCA9IC0xOworCXdoaWxlIChyZWYpIHsKKwkJaWYgKCFzdHJjbXAocmVmLT5uYW1lLCByZWZuYW1lKSkgeworCQkJcmV0dmFsID0gMDsKKwkJCW1lbWNweShyZXN1bHQsIHJlZi0+c2hhMSwgMjApOworCQkJYnJlYWs7CisJCX0KKwkJcmVmID0gcmVmLT5uZXh0OworCX0KKwlmcmVlX3JlZl9saXN0KHJlZnMucGFja2VkKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfZ2l0bGlua19yZWZfcmVjdXJzaXZlKGNoYXIgKm5hbWUsIGludCBwYXRobGVuLCBjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIGludCByZWN1cnNpb24pCit7CisJaW50IGZkLCBsZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisJY2hhciBidWZmZXJbMTI4XSwgKnA7CisKKwlpZiAocmVjdXJzaW9uID4gTUFYREVQVEggfHwgbGVuID4gTUFYUkVGTEVOKQorCQlyZXR1cm4gLTE7CisJbWVtY3B5KG5hbWUgKyBwYXRobGVuLCByZWZuYW1lLCBsZW4rMSk7CisJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gcmVzb2x2ZV9naXRsaW5rX3BhY2tlZF9yZWYobmFtZSwgcGF0aGxlbiwgcmVmbmFtZSwgcmVzdWx0KTsKKworCWxlbiA9IHJlYWQoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGJ1ZmZlcltsZW4tMV0pKQorCQlsZW4tLTsKKwlidWZmZXJbbGVuXSA9IDA7CisKKwkvKiBXYXMgaXQgYSBkZXRhY2hlZCBoZWFkIG9yIGFuIG9sZC1mYXNoaW9uZWQgc3ltbGluaz8gKi8KKwlpZiAoIWdldF9zaGExX2hleChidWZmZXIsIHJlc3VsdCkpCisJCXJldHVybiAwOworCisJLyogU3ltcmVmPyAqLworCWlmIChzdHJuY21wKGJ1ZmZlciwgInJlZjoiLCA0KSkKKwkJcmV0dXJuIC0xOworCXAgPSBidWZmZXIgKyA0OworCXdoaWxlIChpc3NwYWNlKCpwKSkKKwkJcCsrOworCisJcmV0dXJuIHJlc29sdmVfZ2l0bGlua19yZWZfcmVjdXJzaXZlKG5hbWUsIHBhdGhsZW4sIHAsIHJlc3VsdCwgcmVjdXJzaW9uKzEpOworfQorCitpbnQgcmVzb2x2ZV9naXRsaW5rX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCit7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKSwgcmV0dmFsOworCWNoYXIgKmdpdGRpcjsKKworCXdoaWxlIChsZW4gJiYgcGF0aFtsZW4tMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIC0xOworCWdpdGRpciA9IHhtYWxsb2MobGVuICsgTUFYUkVGTEVOICsgOCk7CisJbWVtY3B5KGdpdGRpciwgcGF0aCwgbGVuKTsKKwltZW1jcHkoZ2l0ZGlyICsgbGVuLCAiLy5naXQvIiwgNyk7CisKKwlyZXR2YWwgPSByZXNvbHZlX2dpdGxpbmtfcmVmX3JlY3Vyc2l2ZShnaXRkaXIsIGxlbis2LCByZWZuYW1lLCByZXN1bHQsIDApOworCWZyZWUoZ2l0ZGlyKTsKKwlyZXR1cm4gcmV0dmFsOworfQogCiBjb25zdCBjaGFyICpyZXNvbHZlX3JlZihjb25zdCBjaGFyICpyZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZWFkaW5nLCBpbnQgKmZsYWcpCiB7CmRpZmYgLS1naXQgYS9yZWZzLmggYi9yZWZzLmgKaW5kZXggYWNlZGZmYy4uZjYxZjZkOSAxMDA2NDQKLS0tIGEvcmVmcy5oCisrKyBiL3JlZnMuaApAQCAtNjAsNCArNjAsNyBAQAogLyoqIHJlbmFtZSByZWYsIHJldHVybiAwIG9uIHN1Y2Nlc3MgKiovCiBleHRlcm4gaW50IHJlbmFtZV9yZWYoY29uc3QgY2hhciAqb2xkcmVmLCBjb25zdCBjaGFyICpuZXdyZWYsIGNvbnN0IGNoYXIgKmxvZ21zZyk7CiAKKy8qKiByZXNvbHZlIHJlZiBpbiBuZXN0ZWQgImdpdGxpbmsiIHJlcG9zaXRvcnkgKi8KK2V4dGVybiBpbnQgcmVzb2x2ZV9naXRsaW5rX3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpOworCiAjZW5kaWYgLyogUkVGU19IICovCmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCA0ODYzOTNjLi5lNjBhMjZjIDEwMDY0NAotLS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJncmVwLmgiCiAjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKIAogc3RhdGljIGNoYXIgKnBhdGhfbmFtZShzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMTE1LDkgKzExNiwxNCBAQAogCiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iaiwgbmFtZSwgU19JRklOVkFMSUQpOworfQorCit2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIG1vZGUpCit7CiAJaWYgKHJldnMtPm5vX3dhbGsgJiYgKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKIAkJZGllKCJvYmplY3QgcmFuZ2VzIGRvIG5vdCBtYWtlIHNlbnNlIHdoZW4gbm90IHdhbGtpbmcgcmV2aXNpb25zIik7Ci0JYWRkX29iamVjdF9hcnJheShvYmosIG5hbWUsICZyZXZzLT5wZW5kaW5nKTsKKwlhZGRfb2JqZWN0X2FycmF5X3dpdGhfbW9kZShvYmosIG5hbWUsICZyZXZzLT5wZW5kaW5nLCBtb2RlKTsKIAlpZiAocmV2cy0+cmVmbG9nX2luZm8gJiYgb2JqLT50eXBlID09IE9CSl9DT01NSVQpCiAJCWFkZF9yZWZsb2dfZm9yX3dhbGsocmV2cy0+cmVmbG9nX2luZm8sCiAJCQkJKHN0cnVjdCBjb21taXQgKilvYmosIG5hbWUpOwpAQCAtNDIyLDYgKzQyOCw4NiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgY2hlcnJ5X3BpY2tfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBsZWZ0X2NvdW50ID0gMCwgcmlnaHRfY291bnQgPSAwOworCWludCBsZWZ0X2ZpcnN0OworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCisJLyogRmlyc3QgY291bnQgdGhlIGNvbW1pdHMgb24gdGhlIGxlZnQgYW5kIG9uIHRoZSByaWdodCAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJOworCQllbHNlIGlmIChmbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJbGVmdF9jb3VudCsrOworCQllbHNlCisJCQlyaWdodF9jb3VudCsrOworCX0KKworCWxlZnRfZmlyc3QgPSBsZWZ0X2NvdW50IDwgcmlnaHRfY291bnQ7CisJaW5pdF9wYXRjaF9pZHMoJmlkcyk7CisKKwkvKiBDb21wdXRlIHBhdGNoLWlkcyBmb3Igb25lIHNpZGUgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQl1bnNpZ25lZCBmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgZmV3ZXIgbGVmdCwgbGVmdF9maXJzdCBpcyBzZXQgYW5kIHdlIG9taXQKKwkJICogY29tbWl0cyBvbiB0aGUgcmlnaHQgYnJhbmNoIGluIHRoaXMgbG9vcC4gIElmIHdlIGhhdmUKKwkJICogZmV3ZXIgcmlnaHQsIHdlIHNraXAgdGhlIGxlZnQgb25lcy4KKwkJICovCisJCWlmIChsZWZ0X2ZpcnN0ICE9ICEhKGZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJY29udGludWU7CisJCWNvbW1pdC0+dXRpbCA9IGFkZF9jb21taXRfcGF0Y2hfaWQoY29tbWl0LCAmaWRzKTsKKwl9CisKKwkvKiBDaGVjayB0aGUgb3RoZXIgc2lkZSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXN0cnVjdCBwYXRjaF9pZCAqaWQ7CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgQk9VTkRBUlkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmZXdlciBsZWZ0LCBsZWZ0X2ZpcnN0IGlzIHNldCBhbmQgd2Ugb21pdAorCQkgKiBjb21taXRzIG9uIHRoZSBsZWZ0IGJyYW5jaCBpbiB0aGlzIGxvb3AuCisJCSAqLworCQlpZiAobGVmdF9maXJzdCA9PSAhIShmbGFncyAmIFNZTU1FVFJJQ19MRUZUKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEhhdmUgd2Ugc2VlbiB0aGUgc2FtZSBwYXRjaCBpZD8KKwkJICovCisJCWlkID0gaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpOworCQlpZiAoIWlkKQorCQkJY29udGludWU7CisJCWlkLT5zZWVuID0gMTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CisJfQorCisJLyogTm93IGNoZWNrIHRoZSBvcmlnaW5hbCBzaWRlIGZvciBzZWVuIG9uZXMgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCQlzdHJ1Y3QgcGF0Y2hfaWQgKmVudDsKKworCQllbnQgPSBjb21taXQtPnV0aWw7CisJCWlmICghZW50KQorCQkJY29udGludWU7CisJCWlmIChlbnQtPnNlZW4pCisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJY29tbWl0LT51dGlsID0gTlVMTDsKKwl9CisKKwlmcmVlX3BhdGNoX2lkcygmaWRzKTsKK30KKwogc3RhdGljIHZvaWQgbGltaXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gcmV2cy0+Y29tbWl0czsKQEAgLTQ0OSw2ICs1MzUsOSBAQAogCQkJY29udGludWU7CiAJCXAgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcCktPm5leHQ7CiAJfQorCWlmIChyZXZzLT5jaGVycnlfcGljaykKKwkJY2hlcnJ5X3BpY2tfbGlzdChuZXdsaXN0KTsKKwogCXJldnMtPmNvbW1pdHMgPSBuZXdsaXN0OwogfQogCkBAIC01NjcsNiArNjU2LDcgQEAKIAlyZXZzLT5taW5fYWdlID0gLTE7CiAJcmV2cy0+c2tpcF9jb3VudCA9IC0xOwogCXJldnMtPm1heF9jb3VudCA9IC0xOworCXJldnMtPnN1YmplY3RfcHJlZml4ID0gIlBBVENIIjsKIAogCXJldnMtPnBydW5lX2ZuID0gTlVMTDsKIAlyZXZzLT5wcnVuZV9kYXRhID0gTlVMTDsKQEAgLTYzOCw2ICs3MjgsNyBAQAogCQkJaW50IGZsYWdzLAogCQkJaW50IGNhbnRfYmVfZmlsZW5hbWUpCiB7CisJdW5zaWduZWQgbW9kZTsKIAljaGFyICpkb3Rkb3Q7CiAJc3RydWN0IG9iamVjdCAqb2JqZWN0OwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CkBAIC03MTEsMTIgKzgwMiwxMiBAQAogCQlsb2NhbF9mbGFncyA9IFVOSU5URVJFU1RJTkc7CiAJCWFyZysrOwogCX0KLQlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKKwlpZiAoZ2V0X3NoYTFfd2l0aF9tb2RlKGFyZywgc2hhMSwgJm1vZGUpKQogCQlyZXR1cm4gLTE7CiAJaWYgKCFjYW50X2JlX2ZpbGVuYW1lKQogCQl2ZXJpZnlfbm9uX2ZpbGVuYW1lKHJldnMtPnByZWZpeCwgYXJnKTsKIAlvYmplY3QgPSBnZXRfcmVmZXJlbmNlKHJldnMsIGFyZywgc2hhMSwgZmxhZ3MgXiBsb2NhbF9mbGFncyk7Ci0JYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iamVjdCwgYXJnKTsKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iamVjdCwgYXJnLCBtb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTEzLDYgKzEwMDQsMTAgQEAKIAkJCQlyZXZzLT5sZWZ0X3JpZ2h0ID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tY2hlcnJ5LXBpY2siKSkgeworCQkJCXJldnMtPmNoZXJyeV9waWNrID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tb2JqZWN0cyIpKSB7CiAJCQkJcmV2cy0+dGFnX29iamVjdHMgPSAxOwogCQkJCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CkBAIC0xMDE2LDcgKzExMTEsMTggQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tcmVsYXRpdmUtZGF0ZSIpKSB7Ci0JCQkJcmV2cy0+cmVsYXRpdmVfZGF0ZSA9IDE7CisJCQkJcmV2cy0+ZGF0ZV9tb2RlID0gREFURV9SRUxBVElWRTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RybmNtcChhcmcsICItLWRhdGU9IiwgNykpIHsKKwkJCQlpZiAoIXN0cmNtcChhcmcgKyA3LCAicmVsYXRpdmUiKSkKKwkJCQkJcmV2cy0+ZGF0ZV9tb2RlID0gREFURV9SRUxBVElWRTsKKwkJCQllbHNlIGlmICghc3RyY21wKGFyZyArIDcsICJsb2NhbCIpKQorCQkJCQlyZXZzLT5kYXRlX21vZGUgPSBEQVRFX0xPQ0FMOworCQkJCWVsc2UgaWYgKCFzdHJjbXAoYXJnICsgNywgImRlZmF1bHQiKSkKKwkJCQkJcmV2cy0+ZGF0ZV9tb2RlID0gREFURV9OT1JNQUw7CisJCQkJZWxzZQorCQkJCQlkaWUoInVua25vd24gZGF0ZSBmb3JtYXQgJXMiLCBhcmcpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0xMDg4LDEwICsxMTk0LDExIEBACiAJaWYgKGRlZiAmJiAhcmV2cy0+cGVuZGluZy5ucikgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7Ci0JCWlmIChnZXRfc2hhMShkZWYsIHNoYTEpKQorCQl1bnNpZ25lZCBtb2RlOworCQlpZiAoZ2V0X3NoYTFfd2l0aF9tb2RlKGRlZiwgc2hhMSwgJm1vZGUpKQogCQkJZGllKCJiYWQgZGVmYXVsdCByZXZpc2lvbiAnJXMnIiwgZGVmKTsKIAkJb2JqZWN0ID0gZ2V0X3JlZmVyZW5jZShyZXZzLCBkZWYsIHNoYTEsIDApOwotCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCBkZWYpOworCQlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iamVjdCwgZGVmLCBtb2RlKTsKIAl9CiAKIAlpZiAocmV2cy0+dG9wb19vcmRlcikKZGlmZiAtLWdpdCBhL3JldmlzaW9uLmggYi9yZXZpc2lvbi5oCmluZGV4IDU1ZTZiNTMuLmNkZjk0YWQgMTAwNjQ0Ci0tLSBhL3JldmlzaW9uLmgKKysrIGIvcmV2aXNpb24uaApAQCAtNDcsNiArNDcsNyBAQAogCQkJbGVmdF9yaWdodDoxLAogCQkJcGFyZW50czoxLAogCQkJcmV2ZXJzZToxLAorCQkJY2hlcnJ5X3BpY2s6MSwKIAkJCWZpcnN0X3BhcmVudF9vbmx5OjE7CiAKIAkvKiBEaWZmIGZsYWdzICovCkBAIC02Miw4ICs2Myw4IEBACiAKIAkvKiBGb3JtYXQgaW5mbyAqLwogCXVuc2lnbmVkIGludAlzaG93bl9vbmU6MSwKLQkJCWFiYnJldl9jb21taXQ6MSwKLQkJCXJlbGF0aXZlX2RhdGU6MTsKKwkJCWFiYnJldl9jb21taXQ6MTsKKwllbnVtIGRhdGVfbW9kZSBkYXRlX21vZGU7CiAKIAljb25zdCBjaGFyICoqaWdub3JlX3BhY2tlZDsgLyogcHJldGVuZCBvYmplY3RzIGluIHRoZXNlIGFyZSB1bnBhY2tlZCAqLwogCWludCBudW1faWdub3JlX3BhY2tlZDsKQEAgLTc4LDYgKzc5LDcgQEAKIAljb25zdCBjaGFyCSphZGRfc2lnbm9mZjsKIAljb25zdCBjaGFyCSpleHRyYV9oZWFkZXJzOwogCWNvbnN0IGNoYXIJKmxvZ19yZWVuY29kZTsKKwljb25zdCBjaGFyCSpzdWJqZWN0X3ByZWZpeDsKIAlpbnQJCW5vX2lubGluZTsKIAogCS8qIEZpbHRlciBieSBjb21taXQgbG9nIG1lc3NhZ2UgKi8KQEAgLTEyOSw1ICsxMzEsNiBAQAogCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKIGV4dGVybiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBtb2RlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDUyMzQxNzAuLjMyMjQ0ZDcgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKIAogI2lmbmRlZiBPX05PQVRJTUUKICNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19QUENfXykpCkBAIC00MzcsNyArNDM4LDcgQEAKIAl2b2lkICppZHhfbWFwOwogCXN0cnVjdCBwYWNrX2lkeF9oZWFkZXIgKmhkcjsKIAlzaXplX3QgaWR4X3NpemU7Ci0JdWludDMyX3QgbnIsIGksICppbmRleDsKKwl1aW50MzJfdCB2ZXJzaW9uLCBuciwgaSwgKmluZGV4OwogCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwogCXN0cnVjdCBzdGF0IHN0OwogCkBAIC00NTUsMjEgKzQ1NiwyMyBAQAogCWlkeF9tYXAgPSB4bW1hcChOVUxMLCBpZHhfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOwogCWNsb3NlKGZkKTsKIAotCS8qIGEgZnV0dXJlIGluZGV4IGZvcm1hdCB3b3VsZCBzdGFydCB3aXRoIHRoaXMsIGFzIG9sZGVyIGdpdAotCSAqIGJpbmFyaWVzIHdvdWxkIGZhaWwgdGhlIG5vbi1tb25vdG9uaWMgaW5kZXggY2hlY2sgYmVsb3cuCi0JICogZ2l2ZSBhIG5pY2VyIHdhcm5pbmcgdG8gdGhlIHVzZXIgaWYgd2UgY2FuLgotCSAqLwogCWhkciA9IGlkeF9tYXA7CiAJaWYgKGhkci0+aWR4X3NpZ25hdHVyZSA9PSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpKSB7Ci0JCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7Ci0JCXJldHVybiBlcnJvcigiaW5kZXggZmlsZSAlcyBpcyBhIG5ld2VyIHZlcnNpb24iCi0JCQkiIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYmluYXJ5IgotCQkJIiAodHJ5IHVwZ3JhZGluZyBHSVQgdG8gYSBuZXdlciB2ZXJzaW9uKSIsCi0JCQlwYXRoKTsKLQl9CisJCXZlcnNpb24gPSBudG9obChoZHItPmlkeF92ZXJzaW9uKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHZlcnNpb24gJWQiCisJCQkJICAgICAiIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYmluYXJ5IgorCQkJCSAgICAgIiAodHJ5IHVwZ3JhZGluZyBHSVQgdG8gYSBuZXdlciB2ZXJzaW9uKSIsCisJCQkJICAgICBwYXRoLCB2ZXJzaW9uKTsKKwkJfQorCX0gZWxzZQorCQl2ZXJzaW9uID0gMTsKIAogCW5yID0gMDsKIAlpbmRleCA9IGlkeF9tYXA7CisJaWYgKHZlcnNpb24gPiAxKQorCQlpbmRleCArPSAyOyAgLyogc2tpcCBpbmRleCBoZWFkZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJdWludDMyX3QgbiA9IG50b2hsKGluZGV4W2ldKTsKIAkJaWYgKG4gPCBucikgewpAQCAtNDc5LDIxICs0ODIsNTEgQEAKIAkJbnIgPSBuOwogCX0KIAotCS8qCi0JICogVG90YWwgc2l6ZToKLQkgKiAgLSAyNTYgaW5kZXggZW50cmllcyA0IGJ5dGVzIGVhY2gKLQkgKiAgLSAyNC1ieXRlIGVudHJpZXMgKiBuciAoMjAtYnl0ZSBzaGExICsgNC1ieXRlIG9mZnNldCkKLQkgKiAgLSAyMC1ieXRlIFNIQTEgb2YgdGhlIHBhY2tmaWxlCi0JICogIC0gMjAtYnl0ZSBTSEExIGZpbGUgY2hlY2tzdW0KLQkgKi8KLQlpZiAoaWR4X3NpemUgIT0gNCoyNTYgKyBuciAqIDI0ICsgMjAgKyAyMCkgewotCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOwotCQlyZXR1cm4gZXJyb3IoIndyb25nIGluZGV4IGZpbGUgc2l6ZSBpbiAlcyIsIHBhdGgpOworCWlmICh2ZXJzaW9uID09IDEpIHsKKwkJLyoKKwkJICogVG90YWwgc2l6ZToKKwkJICogIC0gMjU2IGluZGV4IGVudHJpZXMgNCBieXRlcyBlYWNoCisJCSAqICAtIDI0LWJ5dGUgZW50cmllcyAqIG5yICgyMC1ieXRlIHNoYTEgKyA0LWJ5dGUgb2Zmc2V0KQorCQkgKiAgLSAyMC1ieXRlIFNIQTEgb2YgdGhlIHBhY2tmaWxlCisJCSAqICAtIDIwLWJ5dGUgU0hBMSBmaWxlIGNoZWNrc3VtCisJCSAqLworCQlpZiAoaWR4X3NpemUgIT0gNCoyNTYgKyBuciAqIDI0ICsgMjAgKyAyMCkgeworCQkJbXVubWFwKGlkeF9tYXAsIGlkeF9zaXplKTsKKwkJCXJldHVybiBlcnJvcigid3JvbmcgaW5kZXggZmlsZSBzaXplIGluICVzIiwgcGF0aCk7CisJCX0KKwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gMikgeworCQkvKgorCQkgKiBNaW5pbXVtIHNpemU6CisJCSAqICAtIDggYnl0ZXMgb2YgaGVhZGVyCisJCSAqICAtIDI1NiBpbmRleCBlbnRyaWVzIDQgYnl0ZXMgZWFjaAorCQkgKiAgLSAyMC1ieXRlIHNoYTEgZW50cnkgKiBucgorCQkgKiAgLSA0LWJ5dGUgY3JjIGVudHJ5ICogbnIKKwkJICogIC0gNC1ieXRlIG9mZnNldCBlbnRyeSAqIG5yCisJCSAqICAtIDIwLWJ5dGUgU0hBMSBvZiB0aGUgcGFja2ZpbGUKKwkJICogIC0gMjAtYnl0ZSBTSEExIGZpbGUgY2hlY2tzdW0KKwkJICogQW5kIGFmdGVyIHRoZSA0LWJ5dGUgb2Zmc2V0IHRhYmxlIG1pZ2h0IGJlIGEKKwkJICogdmFyaWFibGUgc2l6ZWQgdGFibGUgY29udGFpbmluZyA4LWJ5dGUgZW50cmllcworCQkgKiBmb3Igb2Zmc2V0cyBsYXJnZXIgdGhhbiAyXjMxLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBtaW5fc2l6ZSA9IDggKyA0KjI1NiArIG5yKigyMCArIDQgKyA0KSArIDIwICsgMjA7CisJCWlmIChpZHhfc2l6ZSA8IG1pbl9zaXplIHx8IGlkeF9zaXplID4gbWluX3NpemUgKyAobnIgLSAxKSo4KSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJ3cm9uZyBpbmRleCBmaWxlIHNpemUgaW4gJXMiLCBwYXRoKTsKKwkJfQorCQlpZiAoaWR4X3NpemUgIT0gbWluX3NpemUpIHsKKwkJCS8qIG1ha2Ugc3VyZSB3ZSBjYW4gZGVhbCB3aXRoIGxhcmdlIHBhY2sgb2Zmc2V0cyAqLworCQkJb2ZmX3QgeCA9IDB4N2ZmZmZmZmZVTCwgeSA9IDB4ZmZmZmZmZmZVTDsKKwkJCWlmICh4ID4gKHggKyAxKSB8fCB5ID4gKHkgKyAxKSkgeworCQkJCW11bm1hcChpZHhfbWFwLCBpZHhfc2l6ZSk7CisJCQkJcmV0dXJuIGVycm9yKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IGluICVzIiwgcGF0aCk7CisJCQl9CisJCX0KIAl9CiAKLQlwLT5pbmRleF92ZXJzaW9uID0gMTsKKwlwLT5pbmRleF92ZXJzaW9uID0gdmVyc2lvbjsKIAlwLT5pbmRleF9kYXRhID0gaWR4X21hcDsKIAlwLT5pbmRleF9zaXplID0gaWR4X3NpemU7CisJcC0+bnVtX29iamVjdHMgPSBucjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjA1LDExICs2MzgsMTEgQEAKIAkJCXAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl92ZXJzaW9uKSk7CiAKIAkvKiBWZXJpZnkgdGhlIHBhY2sgbWF0Y2hlcyBpdHMgaW5kZXguICovCi0JaWYgKG51bV9wYWNrZWRfb2JqZWN0cyhwKSAhPSBudG9obChoZHIuaGRyX2VudHJpZXMpKQorCWlmIChwLT5udW1fb2JqZWN0cyAhPSBudG9obChoZHIuaGRyX2VudHJpZXMpKQogCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGNsYWltcyB0byBoYXZlICV1IG9iamVjdHMiCi0JCQkiIHdoaWxlIGluZGV4IHNpemUgaW5kaWNhdGVzICV1IG9iamVjdHMiLAotCQkJcC0+cGFja19uYW1lLCBudG9obChoZHIuaGRyX2VudHJpZXMpLAotCQkJbnVtX3BhY2tlZF9vYmplY3RzKHApKTsKKwkJCSAgICAgIiB3aGlsZSBpbmRleCBpbmRpY2F0ZXMgJXUgb2JqZWN0cyIsCisJCQkgICAgIHAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl9lbnRyaWVzKSwKKwkJCSAgICAgcC0+bnVtX29iamVjdHMpOwogCWlmIChsc2VlayhwLT5wYWNrX2ZkLCBwLT5wYWNrX3NpemUgLSBzaXplb2Yoc2hhMSksIFNFRUtfU0VUKSA9PSAtMSkKIAkJcmV0dXJuIGVycm9yKCJlbmQgb2YgcGFja2ZpbGUgJXMgaXMgdW5hdmFpbGFibGUiLCBwLT5wYWNrX25hbWUpOwogCWlmIChyZWFkX2luX2Z1bGwocC0+cGFja19mZCwgc2hhMSwgc2l6ZW9mKHNoYTEpKSAhPSBzaXplb2Yoc2hhMSkpCkBAIC0xMTI4LDYgKzExNjEsNDMgQEAKIAlyZXR1cm4gdW5wYWNrX3NoYTFfcmVzdCgmc3RyZWFtLCBoZHIsICpzaXplLCBzaGExKTsKIH0KIAordW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9mcm9tX2RlbHRhKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJICAgICAgICAgIG9mZl90IGN1cnBvcykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworCXVuc2lnbmVkIGNoYXIgZGVsdGFfaGVhZFsyMF0sICppbjsKKwl6X3N0cmVhbSBzdHJlYW07CisJaW50IHN0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBkZWx0YV9oZWFkOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZGVsdGFfaGVhZCk7CisKKwlpbmZsYXRlSW5pdCgmc3RyZWFtKTsKKwlkbyB7CisJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBjdXJwb3MsICZzdHJlYW0uYXZhaWxfaW4pOworCQlzdHJlYW0ubmV4dF9pbiA9IGluOworCQlzdCA9IGluZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQljdXJwb3MgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKKwl9IHdoaWxlICgoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUikgJiYKKwkJIHN0cmVhbS50b3RhbF9vdXQgPCBzaXplb2YoZGVsdGFfaGVhZCkpOworCWluZmxhdGVFbmQoJnN0cmVhbSk7CisJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpICYmIHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZW9mKGRlbHRhX2hlYWQpKQorCQlkaWUoImRlbHRhIGRhdGEgdW5wYWNrLWluaXRpYWwgZmFpbGVkIik7CisKKwkvKiBFeGFtaW5lIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGRlbHRhIHRvIGZpZ3VyZSBvdXQKKwkgKiB0aGUgcmVzdWx0IHNpemUuCisJICovCisJZGF0YSA9IGRlbHRhX2hlYWQ7CisKKwkvKiBpZ25vcmUgYmFzZSBzaXplICovCisJZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCBkZWx0YV9oZWFkK3NpemVvZihkZWx0YV9oZWFkKSk7CisKKwkvKiBSZWFkIHRoZSByZXN1bHQgc2l6ZSAqLworCXJldHVybiBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIGRlbHRhX2hlYWQrc2l6ZW9mKGRlbHRhX2hlYWQpKTsKK30KKwogc3RhdGljIG9mZl90IGdldF9kZWx0YV9iYXNlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAogCQkJCSAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCiAJCQkJICAgIG9mZl90ICpjdXJwb3MsCkBAIC0xMTQ5LDcgKzEyMTksNyBAQAogCQliYXNlX29mZnNldCA9IGMgJiAxMjc7CiAJCXdoaWxlIChjICYgMTI4KSB7CiAJCQliYXNlX29mZnNldCArPSAxOwotCQkJaWYgKCFiYXNlX29mZnNldCB8fCBiYXNlX29mZnNldCAmIH4ofjBVTCA+PiA3KSkKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKIAkJCQlkaWUoIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiKTsKIAkJCWMgPSBiYXNlX2luZm9bdXNlZCsrXTsKIAkJCWJhc2Vfb2Zmc2V0ID0gKGJhc2Vfb2Zmc2V0IDw8IDcpICsgKGMgJiAxMjcpOwpAQCAtMTE5MSw0MCArMTI2MSw4IEBACiAJICogYmFzZWQgb24gYSBiYXNlIHdpdGggYSB3cm9uZyBzaXplLiAgVGhpcyBzYXZlcyB0b25zIG9mCiAJICogaW5mbGF0ZSgpIGNhbGxzLgogCSAqLwotCWlmIChzaXplcCkgewotCQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOwotCQl1bnNpZ25lZCBjaGFyIGRlbHRhX2hlYWRbMjBdLCAqaW47Ci0JCXpfc3RyZWFtIHN0cmVhbTsKLQkJaW50IHN0OwotCi0JCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7Ci0JCXN0cmVhbS5uZXh0X291dCA9IGRlbHRhX2hlYWQ7Ci0JCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZGVsdGFfaGVhZCk7Ci0KLQkJaW5mbGF0ZUluaXQoJnN0cmVhbSk7Ci0JCWRvIHsKLQkJCWluID0gdXNlX3BhY2socCwgd19jdXJzLCBjdXJwb3MsICZzdHJlYW0uYXZhaWxfaW4pOwotCQkJc3RyZWFtLm5leHRfaW4gPSBpbjsKLQkJCXN0ID0gaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7Ci0JCQljdXJwb3MgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKLQkJfSB3aGlsZSAoKHN0ID09IFpfT0sgfHwgc3QgPT0gWl9CVUZfRVJST1IpCi0JCQkmJiBzdHJlYW0udG90YWxfb3V0IDwgc2l6ZW9mKGRlbHRhX2hlYWQpKTsKLQkJaW5mbGF0ZUVuZCgmc3RyZWFtKTsKLQkJaWYgKChzdCAhPSBaX1NUUkVBTV9FTkQpICYmCi0JCSAgICBzdHJlYW0udG90YWxfb3V0ICE9IHNpemVvZihkZWx0YV9oZWFkKSkKLQkJCWRpZSgiZGVsdGEgZGF0YSB1bnBhY2staW5pdGlhbCBmYWlsZWQiKTsKLQotCQkvKiBFeGFtaW5lIHRoZSBpbml0aWFsIHBhcnQgb2YgdGhlIGRlbHRhIHRvIGZpZ3VyZSBvdXQKLQkJICogdGhlIHJlc3VsdCBzaXplLgotCQkgKi8KLQkJZGF0YSA9IGRlbHRhX2hlYWQ7Ci0KLQkJLyogaWdub3JlIGJhc2Ugc2l6ZSAqLwotCQlnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIGRlbHRhX2hlYWQrc2l6ZW9mKGRlbHRhX2hlYWQpKTsKLQotCQkvKiBSZWFkIHRoZSByZXN1bHQgc2l6ZSAqLwotCQkqc2l6ZXAgPSBnZXRfZGVsdGFfaGRyX3NpemUoJmRhdGEsIGRlbHRhX2hlYWQrc2l6ZW9mKGRlbHRhX2hlYWQpKTsKLQl9CisJaWYgKHNpemVwKQorCQkqc2l6ZXAgPSBnZXRfc2l6ZV9mcm9tX2RlbHRhKHAsIHdfY3VycywgY3VycG9zKTsKIAogCXJldHVybiB0eXBlOwogfQpAQCAtMTUyNiwzOCArMTU2NCw2MCBAQAogCXJldHVybiBkYXRhOwogfQogCi11aW50MzJfdCBudW1fcGFja2VkX29iamVjdHMoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnApCitjb25zdCB1bnNpZ25lZCBjaGFyICpudGhfcGFja2VkX29iamVjdF9zaGExKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCQkgICAgdWludDMyX3QgbikKIHsKLQkvKiBTZWUgY2hlY2tfcGFja2VkX2dpdF9pZHgoKSAqLwotCXJldHVybiAodWludDMyX3QpKChwLT5pbmRleF9zaXplIC0gMjAgLSAyMCAtIDQqMjU2KSAvIDI0KTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJaWYgKG4gPj0gcC0+bnVtX29iamVjdHMpCisJCXJldHVybiBOVUxMOworCWluZGV4ICs9IDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlyZXR1cm4gaW5kZXggKyAyNCAqIG4gKyA0OworCX0gZWxzZSB7CisJCWluZGV4ICs9IDg7CisJCXJldHVybiBpbmRleCArIDIwICogbjsKKwl9CiB9CiAKLWludCBudGhfcGFja2VkX29iamVjdF9zaGExKGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB1aW50MzJfdCBuLAotCQkJICAgdW5zaWduZWQgY2hhciogc2hhMSkKK3N0YXRpYyBvZmZfdCBudGhfcGFja2VkX29iamVjdF9vZmZzZXQoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IG4pCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOwogCWluZGV4ICs9IDQgKiAyNTY7Ci0JaWYgKG51bV9wYWNrZWRfb2JqZWN0cyhwKSA8PSBuKQotCQlyZXR1cm4gLTE7Ci0JaGFzaGNweShzaGExLCBpbmRleCArIDI0ICogbiArIDQpOwotCXJldHVybiAwOworCWlmIChwLT5pbmRleF92ZXJzaW9uID09IDEpIHsKKwkJcmV0dXJuIG50b2hsKCooKHVpbnQzMl90ICopKGluZGV4ICsgMjQgKiBuKSkpOworCX0gZWxzZSB7CisJCXVpbnQzMl90IG9mZjsKKwkJaW5kZXggKz0gOCArIHAtPm51bV9vYmplY3RzICogKDIwICsgNCk7CisJCW9mZiA9IG50b2hsKCooKHVpbnQzMl90ICopKGluZGV4ICsgNCAqIG4pKSk7CisJCWlmICghKG9mZiAmIDB4ODAwMDAwMDApKQorCQkJcmV0dXJuIG9mZjsKKwkJaW5kZXggKz0gcC0+bnVtX29iamVjdHMgKiA0ICsgKG9mZiAmIDB4N2ZmZmZmZmYpICogODsKKwkJcmV0dXJuICgoKHVpbnQ2NF90KW50b2hsKCooKHVpbnQzMl90ICopKGluZGV4ICsgMCkpKSkgPDwgMzIpIHwKKwkJCQkgICBudG9obCgqKCh1aW50MzJfdCAqKShpbmRleCArIDQpKSk7CisJfQogfQogCiBvZmZfdCBmaW5kX3BhY2tfZW50cnlfb25lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQkJICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKIHsKIAljb25zdCB1aW50MzJfdCAqbGV2ZWwxX29mcyA9IHAtPmluZGV4X2RhdGE7Ci0JaW50IGhpID0gbnRvaGwobGV2ZWwxX29mc1sqc2hhMV0pOwotCWludCBsbyA9ICgoKnNoYTEgPT0gMHgwKSA/IDAgOiBudG9obChsZXZlbDFfb2ZzWypzaGExIC0gMV0pKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJdW5zaWduZWQgaGksIGxvOwogCisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWxldmVsMV9vZnMgKz0gMjsKKwkJaW5kZXggKz0gODsKKwl9CiAJaW5kZXggKz0gNCAqIDI1NjsKKwloaSA9IG50b2hsKGxldmVsMV9vZnNbKnNoYTFdKTsKKwlsbyA9ICgoKnNoYTEgPT0gMHgwKSA/IDAgOiBudG9obChsZXZlbDFfb2ZzWypzaGExIC0gMV0pKTsKIAogCWRvIHsKLQkJaW50IG1pID0gKGxvICsgaGkpIC8gMjsKLQkJaW50IGNtcCA9IGhhc2hjbXAoaW5kZXggKyAyNCAqIG1pICsgNCwgc2hhMSk7CisJCXVuc2lnbmVkIG1pID0gKGxvICsgaGkpIC8gMjsKKwkJdW5zaWduZWQgeCA9IChwLT5pbmRleF92ZXJzaW9uID4gMSkgPyAobWkgKiAyMCkgOiAobWkgKiAyNCArIDQpOworCQlpbnQgY21wID0gaGFzaGNtcChpbmRleCArIHgsIHNoYTEpOwogCQlpZiAoIWNtcCkKLQkJCXJldHVybiBudG9obCgqKCh1aW50MzJfdCAqKSgoY2hhciAqKWluZGV4ICsgKDI0ICogbWkpKSkpOworCQkJcmV0dXJuIG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBtaSk7CiAJCWlmIChjbXAgPiAwKQogCQkJaGkgPSBtaTsKIAkJZWxzZQpAQCAtMjI3OCwxMCArMjMzOCw5IEBACiAJICovCiAJaWYgKCh0eXBlID09IE9CSl9CTE9CKSAmJiBTX0lTUkVHKHN0LT5zdF9tb2RlKSkgewogCQl1bnNpZ25lZCBsb25nIG5zaXplID0gc2l6ZTsKLQkJY2hhciAqbmJ1ZiA9IGJ1ZjsKLQkJaWYgKGNvbnZlcnRfdG9fZ2l0KHBhdGgsICZuYnVmLCAmbnNpemUpKSB7Ci0JCQlpZiAoc2l6ZSkKLQkJCQltdW5tYXAoYnVmLCBzaXplKTsKKwkJY2hhciAqbmJ1ZiA9IGNvbnZlcnRfdG9fZ2l0KHBhdGgsIGJ1ZiwgJm5zaXplKTsKKwkJaWYgKG5idWYpIHsKKwkJCW11bm1hcChidWYsIHNpemUpOwogCQkJc2l6ZSA9IG5zaXplOwogCQkJYnVmID0gbmJ1ZjsKIAkJCXJlX2FsbG9jYXRlZCA9IDE7CkBAIC0yMzMzLDYgKzIzOTIsOCBAQAogCQkJCSAgICAgcGF0aCk7CiAJCWZyZWUodGFyZ2V0KTsKIAkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgorCQlyZXR1cm4gcmVzb2x2ZV9naXRsaW5rX3JlZihwYXRoLCAiSEVBRCIsIHNoYTEpOwogCWRlZmF1bHQ6CiAJCXJldHVybiBlcnJvcigiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIsIHBhdGgpOwogCX0KZGlmZiAtLWdpdCBhL3NoYTFfbmFtZS5jIGIvc2hhMV9uYW1lLmMKaW5kZXggYmVkZTBlNS4uNTVmMjVhMiAxMDA2NDQKLS0tIGEvc2hhMV9uYW1lLmMKKysrIGIvc2hhMV9uYW1lLmMKQEAgLTcxLDE5ICs3MSwxOSBAQAogc3RhdGljIGludCBmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbWF0Y2gsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IHBhY2tlZF9naXQgKnA7Ci0JdW5zaWduZWQgY2hhciBmb3VuZF9zaGExWzIwXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmb3VuZF9zaGExID0gTlVMTDsKIAlpbnQgZm91bmQgPSAwOwogCiAJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CiAJZm9yIChwID0gcGFja2VkX2dpdDsgcCAmJiBmb3VuZCA8IDI7IHAgPSBwLT5uZXh0KSB7Ci0JCXVpbnQzMl90IG51bSA9IG51bV9wYWNrZWRfb2JqZWN0cyhwKTsKKwkJdWludDMyX3QgbnVtID0gcC0+bnVtX29iamVjdHM7CiAJCXVpbnQzMl90IGZpcnN0ID0gMCwgbGFzdCA9IG51bTsKIAkJd2hpbGUgKGZpcnN0IDwgbGFzdCkgewogCQkJdWludDMyX3QgbWlkID0gKGZpcnN0ICsgbGFzdCkgLyAyOwotCQkJdW5zaWduZWQgY2hhciBub3dbMjBdOworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm93OwogCQkJaW50IGNtcDsKIAotCQkJbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBtaWQsIG5vdyk7CisJCQlub3cgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIG1pZCk7CiAJCQljbXAgPSBoYXNoY21wKG1hdGNoLCBub3cpOwogCQkJaWYgKCFjbXApIHsKIAkJCQlmaXJzdCA9IG1pZDsKQEAgLTk2LDE0ICs5NiwxNCBAQAogCQkJbGFzdCA9IG1pZDsKIAkJfQogCQlpZiAoZmlyc3QgPCBudW0pIHsKLQkJCXVuc2lnbmVkIGNoYXIgbm93WzIwXSwgbmV4dFsyMF07Ci0JCQludGhfcGFja2VkX29iamVjdF9zaGExKHAsIGZpcnN0LCBub3cpOworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbm93LCAqbmV4dDsKKwkJICAgICAgIG5vdyA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgZmlyc3QpOwogCQkJaWYgKG1hdGNoX3NoYShsZW4sIG1hdGNoLCBub3cpKSB7Ci0JCQkJaWYgKG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgZmlyc3QrMSwgbmV4dCkgfHwKLQkJCQkgICAgIW1hdGNoX3NoYShsZW4sIG1hdGNoLCBuZXh0KSkgeworCQkJCW5leHQgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGZpcnN0KzEpOworCQkJICAgICAgIGlmICghbmV4dHx8ICFtYXRjaF9zaGEobGVuLCBtYXRjaCwgbmV4dCkpIHsKIAkJCQkJLyogdW5pcXVlIHdpdGhpbiB0aGlzIHBhY2sgKi8KIAkJCQkJaWYgKCFmb3VuZCkgewotCQkJCQkJaGFzaGNweShmb3VuZF9zaGExLCBub3cpOworCQkJCQkJZm91bmRfc2hhMSA9IG5vdzsKIAkJCQkJCWZvdW5kKys7CiAJCQkJCX0KIAkJCQkJZWxzZSBpZiAoaGFzaGNtcChmb3VuZF9zaGExLCBub3cpKSB7CkBAIC02NDMsMTEgKzY0MywxNyBAQAogICovCiBpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlpbnQgcmV0LCBicmFja2V0X2RlcHRoOwogCXVuc2lnbmVkIHVudXNlZDsKKwlyZXR1cm4gZ2V0X3NoYTFfd2l0aF9tb2RlKG5hbWUsIHNoYTEsICZ1bnVzZWQpOworfQorCitpbnQgZ2V0X3NoYTFfd2l0aF9tb2RlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkICptb2RlKQoreworCWludCByZXQsIGJyYWNrZXRfZGVwdGg7CiAJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CiAJY29uc3QgY2hhciAqY3A7CiAKKwkqbW9kZSA9IFNfSUZJTlZBTElEOwogCXByZXBhcmVfYWx0X29kYigpOwogCXJldCA9IGdldF9zaGExXzEobmFtZSwgbmFtZWxlbiwgc2hhMSk7CiAJaWYgKCFyZXQpCkBAIC02ODUsNiArNjkxLDcgQEAKIAkJCQlicmVhazsKIAkJCWlmIChjZV9zdGFnZShjZSkgPT0gc3RhZ2UpIHsKIAkJCQloYXNoY3B5KHNoYTEsIGNlLT5zaGExKTsKKwkJCQkqbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCXBvcysrOwpAQCAtNzAzLDcgKzcxMCw3IEBACiAJCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKIAkJaWYgKCFnZXRfc2hhMV8xKG5hbWUsIGNwLW5hbWUsIHRyZWVfc2hhMSkpCiAJCQlyZXR1cm4gZ2V0X3RyZWVfZW50cnkodHJlZV9zaGExLCBjcCsxLCBzaGExLAotCQkJCQkgICAgICAmdW51c2VkKTsKKwkJCQkJICAgICAgbW9kZSk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9zaG93LWluZGV4LmMgYi9zaG93LWluZGV4LmMKaW5kZXggYTMwYTJkZS4uNTdlZDllOCAxMDA2NDQKLS0tIGEvc2hvdy1pbmRleC5jCisrKyBiL3Nob3ctaW5kZXguYwpAQCAtMSwxNCArMSwyNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbnI7Ci0JdW5zaWduZWQgaW50IGVudHJ5WzZdOworCXVuc2lnbmVkIGludCB2ZXJzaW9uOwogCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9wX2luZGV4WzI1Nl07CiAKLQlpZiAoZnJlYWQodG9wX2luZGV4LCBzaXplb2YodG9wX2luZGV4KSwgMSwgc3RkaW4pICE9IDEpCi0JCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwlpZiAoZnJlYWQodG9wX2luZGV4LCAyICogNCwgMSwgc3RkaW4pICE9IDEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgaGVhZGVyIik7CisJaWYgKHRvcF9pbmRleFswXSA9PSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpKSB7CisJCXZlcnNpb24gPSBudG9obCh0b3BfaW5kZXhbMV0pOworCQlpZiAodmVyc2lvbiA8IDIgfHwgdmVyc2lvbiA+IDIpCisJCQlkaWUoInVua25vd24gaW5kZXggdmVyc2lvbiIpOworCQlpZiAoZnJlYWQodG9wX2luZGV4LCAyNTYgKiA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwl9IGVsc2UgeworCQl2ZXJzaW9uID0gMTsKKwkJaWYgKGZyZWFkKCZ0b3BfaW5kZXhbMl0sIDI1NCAqIDQsIDEsIHN0ZGluKSAhPSAxKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCIpOworCX0KIAluciA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCXVuc2lnbmVkIG4gPSBudG9obCh0b3BfaW5kZXhbaV0pOwpAQCAtMTYsMTMgKzI4LDUxIEBACiAJCQlkaWUoImNvcnJ1cHQgaW5kZXggZmlsZSIpOwogCQluciA9IG47CiAJfQotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7Ci0JCXVuc2lnbmVkIG9mZnNldDsKKwlpZiAodmVyc2lvbiA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBlbnRyeVs2XTsKIAotCQlpZiAoZnJlYWQoZW50cnksIDI0LCAxLCBzdGRpbikgIT0gMSkKLQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZW50cnkgJXUvJXUiLCBpLCBucik7Ci0JCW9mZnNldCA9IG50b2hsKGVudHJ5WzBdKTsKLQkJcHJpbnRmKCIldSAlc1xuIiwgb2Zmc2V0LCBzaGExX3RvX2hleCgodm9pZCAqKShlbnRyeSsxKSkpOworCQkJaWYgKGZyZWFkKGVudHJ5LCA0ICsgMjAsIDEsIHN0ZGluKSAhPSAxKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZW50cnkgJXUvJXUiLCBpLCBucik7CisJCQlvZmZzZXQgPSBudG9obChlbnRyeVswXSk7CisJCQlwcmludGYoIiV1ICVzXG4iLCBvZmZzZXQsIHNoYTFfdG9faGV4KCh2b2lkICopKGVudHJ5KzEpKSk7CisJCX0KKwl9IGVsc2UgeworCQl1bnNpZ25lZCBvZmY2NF9uciA9IDA7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJdWludDMyX3QgY3JjOworCQkJdWludDMyX3Qgb2ZmOworCQl9ICplbnRyaWVzID0geG1hbGxvYyhuciAqIHNpemVvZihlbnRyaWVzWzBdKSk7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKGVudHJpZXNbaV0uc2hhMSwgMjAsIDEsIHN0ZGluKSAhPSAxKQorCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgc2hhMSAldS8ldSIsIGksIG5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCQlpZiAoZnJlYWQoJmVudHJpZXNbaV0uY3JjLCA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIGNyYyAldS8ldSIsIGksIG5yKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCQlpZiAoZnJlYWQoJmVudHJpZXNbaV0ub2ZmLCA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIDMyYiBvZmZzZXQgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCQl1aW50NjRfdCBvZmZzZXQ7CisJCQl1aW50MzJfdCBvZmYgPSBudG9obChlbnRyaWVzW2ldLm9mZik7CisJCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkgeworCQkJCW9mZnNldCA9IG9mZjsKKwkJCX0gZWxzZSB7CisJCQkJdWludDMyX3Qgb2ZmNjRbMl07CisJCQkJaWYgKChvZmYgJiAweDdmZmZmZmZmKSAhPSBvZmY2NF9ucikKKwkJCQkJZGllKCJpbmNvbnNpc3RlbnQgNjRiIG9mZnNldCBpbmRleCIpOworCQkJCWlmIChmcmVhZChvZmY2NCwgOCwgMSwgc3RkaW4pICE9IDEpCisJCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgNjRiIG9mZnNldCAldSIsIG9mZjY0X25yKTsKKwkJCQlvZmZzZXQgPSAoKCh1aW50NjRfdCludG9obChvZmY2NFswXSkpIDw8IDMyKSB8CisJCQkJCQkgICAgIG50b2hsKG9mZjY0WzFdKTsKKwkJCQlvZmY2NF9ucisrOworCQkJfQorCQkJcHJpbnRmKCIlbGx1ICVzICglMDh4KVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0LAorCQkJICAgICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksCisJCQkgICAgICAgbnRvaGwoZW50cmllc1tpXS5jcmMpKTsKKwkJfQorCQlmcmVlKGVudHJpZXMpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIuc2ggYi90L2RpZmYtbGliLnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2ggYi90L2xpYi1yZWFkLXRyZWUtbS0zd2F5LnNoCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL3QvdDAwMjAtY3JsZi5zaCBiL3QvdDAwMjAtY3JsZi5zaAppbmRleCA3MjNiMjlhLi5mZTFkZmQwIDEwMDc1NQotLS0gYS90L3QwMDIwLWNybGYuc2gKKysrIGIvdC90MDAyMC1jcmxmLnNoCkBAIC00LDYgKzQsMTAgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKK3FfdG9fbnVsICgpIHsKKwl0ciBRICdcMCcKK30KKwogYXBwZW5kX2NyICgpIHsKIAlzZWQgLWUgJ3MvJC9RLycgfCB0ciBRICdcMDE1JwogfQpAQCAtMjAsNiArMjQsNyBAQAogCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKIAlta2RpciBkaXIgJiYKIAlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+ZGlyL3R3byAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgTlVMUWluIHRleHQgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fbnVsID50aHJlZSAmJgogCWdpdCBhZGQgLiAmJgogCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCkBAIC0yNyw2ICszMiw3IEBACiAJb25lPWBnaXQgcmV2LXBhcnNlIEhFQUQ6b25lYCAmJgogCWRpcj1gZ2l0IHJldi1wYXJzZSBIRUFEOmRpcmAgJiYKIAl0d289YGdpdCByZXYtcGFyc2UgSEVBRDpkaXIvdHdvYCAmJgorCXRocmVlPWBnaXQgcmV2LXBhcnNlIEhFQUQ6dGhyZWVgICYmCiAKIAlmb3IgdyBpbiBTb21lIGV4dHJhIGxpbmVzIGhlcmU7IGRvIGVjaG8gJHc7IGRvbmUgPj5vbmUgJiYKIAlnaXQgZGlmZiA+cGF0Y2guZmlsZSAmJgpAQCAtMzgsNyArNDQsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgd2l0aCBhdXRvY3JsZj1pbnB1dCcgJwogCi0Jcm0gLWYgdG1wIG9uZSBkaXIvdHdvICYmCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCiAJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKIAlnaXQgcmVwby1jb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgogCkBAIC02Miw3ICs2OCw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIGF1dG9jcmxmPXRydWUnICcKIAotCXJtIC1mIHRtcCBvbmUgZGlyL3R3byAmJgorCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAJZ2l0IHJlcG8tY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgogCkBAIC04Niw3ICs5Miw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9dHJ1ZScgJwogCi0Jcm0gLWYgdG1wIG9uZSBkaXIvdHdvICYmCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCiAJZ2l0IHJlcG8tY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKQEAgLTExMCw3ICsxMTYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGF1dG9jcmxmPWlucHV0JyAnCiAKLQlybSAtZiB0bXAgb25lIGRpci90d28gJiYKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKIAlnaXQgcmVwby1jb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKQEAgLTEzNiw3ICsxNDIsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAoYXV0b2NybGY9aW5wdXQpJyAnCiAKLQlybSAtZiB0bXAgb25lIGRpci90d28gJiYKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKIAlnaXQgcmVwby1jb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKQEAgLTE0OSw3ICsxNTUsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9aW5wdXQpJyAnCiAKLQlybSAtZiB0bXAgb25lIGRpci90d28gJiYKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKIAlnaXQgcmVwby1jb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKQEAgLTE2Miw3ICsxNjgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWluZGV4IChhdXRvY3JsZj1pbnB1dCknICcKIAotCXJtIC1mIHRtcCBvbmUgZGlyL3R3byAmJgorCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgogCWdpdCByZXBvLWNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCiAJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKIApAQCAtMTc2LDcgKzE4Miw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIChhdXRvY3JsZj10cnVlKScgJwogCi0Jcm0gLWYgdG1wIG9uZSBkaXIvdHdvICYmCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCiAJZ2l0IHJlcG8tY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgogCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCiAKQEAgLTE4OSw3ICsxOTUsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9dHJ1ZSknICcKIAotCXJtIC1mIHRtcCBvbmUgZGlyL3R3byAmJgorCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgogCWdpdCByZXBvLWNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKIAlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgogCkBAIC0yMDIsNyArMjA4LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9dHJ1ZSknICcKIAotCXJtIC1mIHRtcCBvbmUgZGlyL3R3byAmJgorCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgogCWdpdCByZXBvLWNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKIAlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgogCkBAIC0yMTQsNCArMjIwLDc0IEBACiAJfQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBpcyBiaW5hcnknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInR3byAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlcG8tY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwlpZiByZW1vdmVfY3IgZGlyL3R3byA+L2Rldi9udWxsCisJdGhlbgorCQllY2hvICJIdWg/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpICYmCisKKwlpZiByZW1vdmVfY3Igb25lID4vZGV2L251bGwKKwl0aGVuCisJCTogaGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkgJiYKKworCWlmIHJlbW92ZV9jciB0aHJlZSA+L2Rldi9udWxsCisJdGhlbgorCQllY2hvICJIdWg/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIHNheXMgdHdvIGlzIGlucHV0JyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwllY2hvICJ0d28gY3JsZj1pbnB1dCIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWlmIHJlbW92ZV9jciBkaXIvdHdvID4vZGV2L251bGwKKwl0aGVuCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGF0dHJpYnV0ZXMgc2F5cyB0d28gYW5kIHRocmVlIGFyZSB0ZXh0JyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwllY2hvICJ0KiBjcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaWYgcmVtb3ZlX2NyIGRpci90d28gPi9kZXYvbnVsbAorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiSHVoPyIKKwkJZmFsc2UKKwlmaSAmJgorCisJaWYgcmVtb3ZlX2NyIHRocmVlID4vZGV2L251bGwKKwl0aGVuCisJCTogaGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIxLWNvbnZlcnNpb24uc2ggYi90L3QwMDIxLWNvbnZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFiOWVjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjEtY29udmVyc2lvbi5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmxvYiBjb252ZXJzaW9uIHZpYSBnaXRhdHRyaWJ1dGVzJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0IDw8XEVPRiA+cm90MTMuc2gKK3RyICdbYS16QS1aXScgJ1tuLXphLW1OLVpBLU1dJworRU9GCitjaG1vZCAreCByb3QxMy5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGZpbHRlci5yb3QxMy5zbXVkZ2UgLi9yb3QxMy5zaCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnJvdDEzLmNsZWFuIC4vcm90MTMuc2ggJiYKKworCXsKKwkgICAgZWNobyAiKi50IGZpbHRlcj1yb3QxMyIKKwkgICAgZWNobyAiKi5pIGlkZW50IgorCX0gPi5naXRhdHRyaWJ1dGVzICYmCisKKwl7CisJICAgIGVjaG8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbQorCSAgICBlY2hvIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoKKwkgICAgZWNobyAnXCcnJGlkZW50JCdcJycKKwl9ID50ZXN0ICYmCisJY2F0IHRlc3QgPnRlc3QudCAmJgorCWNhdCB0ZXN0ID50ZXN0Lm8gJiYKKwljYXQgdGVzdCA+dGVzdC5pICYmCisJZ2l0IGFkZCB0ZXN0IHRlc3QudCB0ZXN0LmkgJiYKKwlybSAtZiB0ZXN0IHRlc3QudCB0ZXN0LmkgJiYKKwlnaXQgY2hlY2tvdXQgLS0gdGVzdCB0ZXN0LnQgdGVzdC5pCisnCisKK3NjcmlwdD0ncy9eXCRpZGVudDogXChbMC05YS1mXSpcKSBcJC9cMS9wJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGNoZWNrICcKKworCWNtcCB0ZXN0Lm8gdGVzdCAmJgorCWNtcCB0ZXN0Lm8gdGVzdC50ICYmCisKKwkjIGlkZW50IHNob3VsZCBiZSBzdHJpcHBlZCBpbiB0aGUgcmVwb3NpdG9yeQorCWdpdCBkaWZmIC0tcmF3IC0tZXhpdC1jb2RlIDp0ZXN0IDp0ZXN0LmkgJiYKKwlpZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOnRlc3QpICYmCisJZW1iZWRkZWQ9JChzZWQgLW5lICIkc2NyaXB0IiB0ZXN0LmkpICYmCisJdGVzdCAieiRpZCIgPSAieiRlbWJlZGRlZCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2ggYi90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKaW5kZXggZTI2YTM2Yy4uZGU0ZTVlYiAxMDA3NTUKLS0tIGEvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCisrKyBiL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaApAQCAtMTg0LDcgKzE4NCw3IEBACiAgIDkgIGV4aXN0cyAgTyE9QSAgICBtaXNzaW5nICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxMCAgZXhpc3RzICBPPT1BICAgIG1pc3NpbmcgICByZW1vdmUgICAgICBkaXR0bworIDEwICBleGlzdHMgIE89PUEgICAgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDExICBleGlzdHMgIE8hPUEgICAgTyE9QiAgICAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKICAgICAgICAgICAgICAgICAgICAgIEEhPUIgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCmRpZmYgLS1naXQgYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2ZWUyYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMCwwICsxLDUyOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAxJyAnCisKKwllY2hvIGhlbGxvID5hICYmCisJbzA9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKwljcCBhIGIgJiYKKwljcCBhIGMgJiYKKwlta2RpciBkICYmCisJY3AgYSBkL2UgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgYSBiIGMgZC9lICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJYzA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBkZi0xICYmCisJZ2l0IGJyYW5jaCBkZi0yICYmCisJZ2l0IGJyYW5jaCBkZi0zICYmCisJZ2l0IGJyYW5jaCByZW1vdmUgJiYKKworCWVjaG8gaGVsbG8gPj5hICYmCisJY3AgYSBkL2UgJiYKKwlvMT0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJZ2l0IGFkZCBhIGQvZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIG1vZGlmaWVzIGEgYW5kIGQvZSIgJiYKKwljMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDInICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKworCWVjaG8gZ29vZGJ5ZSA+PmEgJiYKKwlvMj0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJZ2l0IGFkZCBhICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIG1vZGlmaWVzIGEiICYmCisJYzI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8yCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzJyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTEgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBiICYmIG1rZGlyIGIgJiYgZWNobyBkZi0xID5iL2MgJiYgZ2l0IGFkZCBiL2MgJiYKKwlvMz0kKGdpdCBoYXNoLW9iamVjdCBiL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0xIG1ha2VzIGIvYyIgJiYKKwljMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8zCWIvYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8zIDAJYi9jIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA0JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTIgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBhICYmIG1rZGlyIGEgJiYgZWNobyBkZi0yID5hL2MgJiYgZ2l0IGFkZCBhL2MgJiYKKwlvND0kKGdpdCBoYXNoLW9iamVjdCBhL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0yIG1ha2VzIGEvYyIgJiYKKwljND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzQJYS9jIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA1JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mIGIgJiYKKwllY2hvIHJlbW92ZS1jb25mbGljdCA+YSAmJgorCisJZ2l0IGFkZCBhICYmCisJZ2l0IHJtIGIgJiYKKwlvNT0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIHJlbW92ZXMgYiBhbmQgbW9kaWZpZXMgYSIgJiYKKwljNT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzUJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzUgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDYnICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgZGYtMyAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mciBkICYmIGVjaG8gZGYtMyA+ZCAmJiBnaXQgYWRkIGQgJiYKKwlvNj0kKGdpdCBoYXNoLW9iamVjdCBkKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMyBtYWtlcyBkIiAmJgorCWM2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvNglkIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG82IDAJZCIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgc2ltcGxlJyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzIiICYmCisKKwlnaXQtbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzIiICIkYzEiCisJc3RhdHVzPSQ/CisJY2FzZSAiJHN0YXR1cyIgaW4KKwkxKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyA+JjIgIndoeSBzdGF0dXMgJHN0YXR1cyEhISIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMiAyCWEiCisJCWVjaG8gIjEwMDY0NCAkbzEgMwlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQtbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzUiCisJc3RhdHVzPSQ/CisJY2FzZSAiJHN0YXR1cyIgaW4KKwkxKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyA+JjIgIndoeSBzdGF0dXMgJHN0YXR1cyEhISIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZW1vdmUgY29uZmxpY3QnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAyCWEiCisJCWVjaG8gIjEwMDY0NCAkbzUgMwlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2Ygc2ltcGxlJyAnCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCWdpdC1tZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMSIgIiRjMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8zIDAJYi9jIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQtbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzQiCisJc3RhdHVzPSQ/CisJY2FzZSAiJHN0YXR1cyIgaW4KKwkxKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyA+JjIgIndoeSBzdGF0dXMgJHN0YXR1cyEhISIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWEiCisJCWVjaG8gIjEwMDY0NCAkbzEgMglhIgorCQllY2hvICIxMDA2NDQgJG80IDAJYS9jIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHRoZSBvdGhlciB3YXknICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzQiICYmCisKKwlnaXQtbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzQiICIkYzEiCisJc3RhdHVzPSQ/CisJY2FzZSAiJHN0YXR1cyIgaW4KKwkxKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyA+JjIgIndoeSBzdGF0dXMgJHN0YXR1cyEhISIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0IHRoZSBvdGhlciB3YXknICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQtbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzYiCisJc3RhdHVzPSQ/CisJY2FzZSAiJHN0YXR1cyIgaW4KKwkxKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyA+JjIgIndoeSBzdGF0dXMgJHN0YXR1cyEhISIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvNiAzCWQiCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMglkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGM2IiAmJgorCisJZ2l0LW1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGM2IiAiJGMxIgorCXN0YXR1cz0kPworCWNhc2UgIiRzdGF0dXMiIGluCisJMSkKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gPiYyICJ3aHkgc3RhdHVzICRzdGF0dXMhISEiCisJCWZhbHNlCisJCTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzYgMglkIgorCQllY2hvICIxMDA2NDQgJG8wIDEJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDMJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYW5kIDMtd2F5IG1lcmdlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICIkYzIiICYmCisJZ2l0IHJlYWQtdHJlZSAtbSAiJGMwIiAiJGMyIiAiJGMxIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFuZCBiaW5kIG1lcmdlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9TS8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2MiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2QvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbCAmJgorCisJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1hMS8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlNL2MiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlNL2QvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhMS9hIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2MiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhMS9kL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCisJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD16LyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2QvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJei9hIgorCQllY2hvICIxMDA2NDQgJG8wIDAJei9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJei9jIgorCQllY2hvICIxMDA2NDQgJG8xIDAJei9kL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaCBiL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzliOWYyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKQEAgLTAsMCArMSw4NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J0Jhc2ljIHN1YnByb2plY3QgZnVuY3Rpb25hbGl0eScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdXBlciBwcm9qZWN0IGNyZWF0aW9uJyBcCisgICAgJzogPk1ha2VmaWxlICYmCisgICAgZ2l0IGFkZCBNYWtlZmlsZSAmJgorICAgIGdpdCBjb21taXQgLW0gIlN1cGVycHJvamVjdCBjcmVhdGVkIicKKworCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MDAwMDAwIDE2MDAwMCAwMDAwMC4uLiBBCXN1YjEKKzowMDAwMDAgMTYwMDAwIDAwMDAwLi4uIEEJc3ViMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgc3VicHJvamVjdHMnIFwKKyAgICAnbWtkaXIgc3ViMSAmJgorICAgICggY2Qgc3ViMSAmJiBnaXQgaW5pdCAmJiA6ID5NYWtlZmlsZSAmJiBnaXQgYWRkICogJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJzdWJwcm9qZWN0IDEiICkgJiYKKyAgICBta2RpciBzdWIyICYmCisgICAgKCBjZCBzdWIyICYmIGdpdCBpbml0ICYmIDogPk1ha2VmaWxlICYmIGdpdCBhZGQgKiAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3QgMiIgKSAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgc3ViMSAmJgorICAgIGdpdCBhZGQgc3ViMiAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3RzIGFkZGVkIiAmJgorICAgIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXY9NSBIRUFEXiBIRUFEIHxjdXQgLWQiICIgLWYtMyw1LSA+Y3VycmVudCAmJgorICAgIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisKK2dpdCBicmFuY2ggc2F2ZSBIRUFECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGZzY2sgaWdub3JlcyB0aGUgc3VicHJvamVjdHMnIFwKKyAgICAnZ2l0IGZzY2sgLS1mdWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBjb21taXQgaW4gYSBzdWJwcm9qZWN0IGRldGVjdGVkJyBcCisgICAgJyggY2Qgc3ViMSAmJgorICAgIGVjaG8gImFsbDoiID4+TWFrZWZpbGUgJiYKKyAgICBlY2hvICIJdHJ1ZSIgPj5NYWtlZmlsZSAmJgorICAgIGdpdCBjb21taXQgLXEgLWEgLW0gIm1ha2UgYWxsIiApICYmIHsKKyAgICAgICAgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKwl0ZXN0ICQ/ID0gMQorICAgIH0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGEgY2hhbmdlZCBzdWJwcm9qZWN0IEhFQUQgY2FuIGJlIGNvbW1pdHRlZCcgXAorICAgICdnaXQgY29tbWl0IC1xIC1hIC1tICJzdWIxIGNoYW5nZWQiICYmIHsKKwlnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKwl0ZXN0ICQ/ID0gMQorICAgIH0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtaW5kZXggd29ya3MgZm9yIHN1YnByb2plY3QgZWxlbWVudHMnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxCisgICAgdGVzdCAkPyA9IDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGRpZmYtdHJlZSB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgXAorICAgICdnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgLS0gc3ViMQorICAgIHRlc3QgJD8gPSAxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBnaXQgZGlmZiB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgXAorICAgICdnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisgICAgdGVzdCAkPyA9IDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGNsb25lIHdvcmtzJyBcCisgICAgJ2dpdCBscy1maWxlcyAtcyA+ZXhwZWN0ZWQgJiYKKyAgICBnaXQgY2xvbmUgLWwgLXMgLiBjbG9uZWQgJiYKKyAgICAoIGNkIGNsb25lZCAmJiBnaXQgbHMtZmlsZXMgLXMgKSA+Y3VycmVudCAmJgorICAgIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGFuZCBhZGRpbmcgc3VicHJvamVjdCcgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIC0tIHN1YjIgJiYKKyAgICBtdiBzdWIyIHN1YjMgJiYKKyAgICBnaXQgYWRkIHN1YjMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJyZW5hbWluZyBhIHN1YnByb2plY3QiICYmIHsKKwlnaXQgZGlmZiAtTSAtLW5hbWUtc3RhdHVzIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKwl0ZXN0ICQ/ID0gMQorICAgIH0nCisKKyMgdGhlIGluZGV4IG11c3QgY29udGFpbiB0aGUgb2JqZWN0IG5hbWUgdGhlIEhFQUQgb2YgdGhlCisjIHN1YnByb2plY3Qgc3ViMSB3YXMgYXQgdGhlIHBvaW50ICJzYXZlIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgaW4gc3VwZXJwcm9qZWN0JyBcCisgICAgJ2dpdCBjaGVja291dCBzYXZlICYmCisgICAgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1yYXcgLS1jYWNoZWQgc2F2ZSAtLSBzdWIxJworCisjIGp1c3QgaW50ZXJlc3Rpbmcgd2hhdCBoYXBwZW5lZC4uLgorIyBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIC1NIHNhdmUgbWFzdGVyCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzYwMC1ybS5zaCBiL3QvdDM2MDAtcm0uc2gKaW5kZXggZTMxY2Y5My4uMGE5N2I3NSAxMDA3NTUKLS0tIGEvdC90MzYwMC1ybS5zaAorKysgYi90L3QzNjAwLXJtLnNoCkBAIC04NCw2ICs4NCwzMCBAQAogICAgICdXaGVuIHRoZSBybSBpbiAiZ2l0LXJtIC1mIiBmYWlscywgaXQgc2hvdWxkIG5vdCByZW1vdmUgdGhlIGZpbGUgZnJvbSB0aGUgaW5kZXgnIFwKICAgICAnZ2l0LWxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBiYXonCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBub25leGlzdGVudCBmaWxlIHdpdGggLS1pZ25vcmUtdW5tYXRjaCcgJworCWdpdCBybSAtLWlnbm9yZS11bm1hdGNoIG5vbmV4aXN0ZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJybSIgY29tbWFuZCBwcmludGVkJyAnCisJZWNobyBmcm90eiA+IHRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUgZm9yIHJtIHRlc3QiICYmCisJZ2l0IHJtIHRlc3QtZmlsZSA+IHJtLW91dHB1dCAmJgorCXRlc3QgYGVncmVwICJecm0gIiBybS1vdXRwdXQgfCB3YyAtbGAgPSAxICYmCisJcm0gLWYgdGVzdC1maWxlIHJtLW91dHB1dCAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGZyb20gcm0gdGVzdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJtIiBjb21tYW5kIHN1cHByZXNzZWQgd2l0aCAtLXF1aWV0JyAnCisJZWNobyBmcm90eiA+IHRlc3QtZmlsZSAmJgorCWdpdCBhZGQgdGVzdC1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUgZm9yIHJtIC0tcXVpZXQgdGVzdCIgJiYKKwlnaXQgcm0gLS1xdWlldCB0ZXN0LWZpbGUgPiBybS1vdXRwdXQgJiYKKwl0ZXN0IGB3YyAtbCA8IHJtLW91dHB1dGAgPSAwICYmCisJcm0gLWYgdGVzdC1maWxlIHJtLW91dHB1dCAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGZyb20gcm0gLS1xdWlldCB0ZXN0IgorJworCiAjIE5vdywgZmFpbHVyZSBjYXNlcy4KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlLWFkZCBmb28gYW5kIGJheicgJwogCWdpdCBhZGQgZm9vIGJheiAmJgpAQCAtMTU0LDQgKzE3OCw4IEBACiAJISB0ZXN0IC1kIGZyb3R6CiAnCiAKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ1JlbW92ZSBub25leGlzdGVudCBmaWxlIHJldHVybnMgbm9uemVybyBleGl0IHN0YXR1cycgJworCWdpdCBybSBub25leGlzdGVudAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKaW5kZXggNDg4ZTA3NS4uOGY0YzI5YSAxMDA3NTUKLS0tIGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKKysrIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKQEAgLTI0MSw2ICsyNDEsNyBAQAogZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKIGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCiBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRSBpbml0aWFsLi5tYXN0ZXIKIAogZGlmZiAtLWFiYnJldiBpbml0aWFsLi5zaWRlCiBkaWZmIC1yIGluaXRpYWwuLnNpZGUKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDkzYmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTY0IEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRSBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0VdIFNlY29uZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgICAgMiArKworIGZpbGUwICAgfCAgICAzICsrKworIGZpbGUyICAgfCAgICAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQuZGlmZiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0VdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAgICAyICsrCisgZmlsZTEgICB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMC5kaWZmIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1RFU1RDQVNFXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAgICAyICsrCisgZmlsZTAgICB8ICAgIDMgKysrCisgZmlsZTMgICB8ICAgIDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9ImM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEuZGlmZiIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2ggYi90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjAwNDVjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjAtZGlmZi1leHRlcm5hbC5zaApAQCAtMCwwICsxLDk3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZXh0ZXJuYWwgZGlmZiBpbnRlcmZhY2UgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK196NDA9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gaW5pdGlhbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBzZWNvbmQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyB0aGlyZCA+ZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCcgJworCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIGVudmlyb25tZW50IHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKworCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGxvZyAtcCAtMSBIRUFEIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYXR0cmlidXRlJyAnCisKKwlnaXQgY29uZmlnIGRpZmYucGFycm90LmNvbW1hbmQgZWNobyAmJgorCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZj1wYXJyb3QiICYmCisKKwlnaXQgZGlmZiB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMDA2NDQgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYXR0cmlidXRlIHNob3VsZCBhcHBseSBvbmx5IHRvIGRpZmYnICcKKworCWdpdCBsb2cgLXAgLTEgSEVBRCB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYucGFycm90LmNvbW1hbmQgJiYKKwlnaXQgY29uZmlnIGRpZmYuY29sb3IuY29tbWFuZCBlY2hvICYmCisKKwllY2hvID4uZ2l0YXR0cmlidXRlcyAiZmlsZSBkaWZmPWNvbG9yIiAmJgorCisJZ2l0IGRpZmYgfCB7CisJCXJlYWQgcGF0aCBvbGRmaWxlIG9sZGhleCBvbGRtb2RlIG5ld2ZpbGUgbmV3aGV4IG5ld21vZGUgJiYKKwkJdGVzdCAieiRwYXRoIiA9IHpmaWxlICYmCisJCXRlc3QgInokb2xkbW9kZSIgPSB6MTAwNjQ0ICYmCisJCXRlc3QgInokbmV3aGV4IiA9ICJ6JF96NDAiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjAxLXNob3J0bG9nLnNoIGIvdC90NDIwMS1zaG9ydGxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDg3MzNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMS1zaG9ydGxvZy5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXNob3J0bG9nCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvIDEgPiBhMQorZ2l0IGFkZCBhMQordHJlZT0kKGdpdCB3cml0ZS10cmVlKQorY29tbWl0PSQoIChlY2hvICJUZXN0IjsgZWNobykgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgKQorZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CisKK2VjaG8gMiA+IGExCitnaXQgY29tbWl0IC0tcXVpZXQgLW0gIlRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiBpdCBpcyB3cmFwcGVkIGNvcnJlY3RseSIgYTEKKworIyB0ZXN0IGlmIHRoZSB3cmFwcGluZyBpcyBzdGlsbCB2YWxpZCB3aGVuIHJlcGxhY2luZyBhbGwgaSdzIGJ5IHRyZWJsZSBjbGVmcy4KK2VjaG8gMyA+IGExCitnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiQoZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8IHNlZCAicy9pLzEyMzQvZyIgfCB0ciAxMjM0ICdcMzYwXDIzNVwyMDRcMjM2JykiIGExCisKKyMgbm93IGZzY2sgdXAgdGhlIHV0ZjgKK2dpdCByZXBvLWNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIG5vbi11dGYtOAorZWNobyA0ID4gYTEKK2dpdCBjb21taXQgLS1xdWlldCAtbSAiJChlY2hvICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIHwgc2VkICJzL2kvMTIzNC9nIiB8IHRyIDEyMzQgJ1wzNzBcMjM1XDIwNFwyMzYnKSIgYTEKKworZWNobyA1ID4gYTEKK2dpdCBjb21taXQgLS1xdWlldCAtbSAiYQkJCQkJCQkJMTIJMzQJNTYJNzgiIGExCisKK2dpdCBzaG9ydGxvZyAtdyBIRUFEID4gb3V0CisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK0EgVSBUaG9yICg1KToKKyAgICAgIFRlc3QKKyAgICAgIFRoaXMgaXMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZmlyc3QgbGluZSBmb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZgorICAgICAgICAgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo8J2EnnMg8J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvCdhJ5yc3QgbPCdhJ5uZSBmb3IgdGhlIGNvbW3wnYSedCBtZXNzYWdlIHRvIHNlZSDwnYSeZgorICAgICAgICAg8J2EnnQg8J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIFRo+J2EnnMg+J2EnnMgYSB2ZXJ5LCB2ZXJ5IGxvbmcgZvidhJ5yc3QgbPidhJ5uZSBmb3IgdGhlIGNvbW34nYSedAorICAgICAgICAgbWVzc2FnZSB0byBzZWUg+J2EnmYg+J2EnnQg+J2EnnMgd3JhcHBlZCBjb3JyZWN0bHkKKyAgICAgIGEJCQkJCQkJCTEyCTM0CisgICAgICAgICA1Ngk3OAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd3JhcHBpbmcnICdkaWZmIC11IGV4cGVjdCBvdXQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMC10YXItdHJlZS5zaCBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKaW5kZXggYjQzNTlkZi4uZTIyM2MwNyAxMDA3NTUKLS0tIGEvdC90NTAwMC10YXItdHJlZS5zaAorKysgYi90L3Q1MDAwLXRhci10cmVlLnNoCkBAIC01MCw4ICs1MCwxNiBAQAogICAgICBnaXQtY29tbWl0LXRyZWUgJHRyZWVpZCA8L2Rldi9udWxsKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdC1hcmNoaXZlJyBcCisgICAgJ2dpdC1hcmNoaXZlIEhFQUQgPmIudGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0LXRhci10cmVlJyBcCi0gICAgJ2dpdC10YXItdHJlZSBIRUFEID5iLnRhcicKKyAgICAnZ2l0LXRhci10cmVlIEhFQUQgPmIyLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdC1hcmNoaXZlIHZzLiBnaXQtdGFyLXRyZWUnIFwKKyAgICAnZGlmZiBiLnRhciBiMi50YXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lJyBcCmRpZmYgLS1naXQgYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaAppbmRleCAwODMwOTVmLi5mMzM2NzY5IDEwMDc1NQotLS0gYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCisrKyBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICd1c2UgcGFja2VkIGRlbHRpZmllZCAoUkVGX0RFTFRBKSBvYmplY3RzJyBcCiAgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKICAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCi0gICAgIHJtIC5naXQyL29iamVjdHMvcGFjay90ZXN0LSogJiYKKyAgICAgcm0gLWYgLmdpdDIvb2JqZWN0cy9wYWNrL3Rlc3QtKiAmJgogICAgICBjcCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrIHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgewogCSBnaXQtZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCiAJIHdoaWxlIHJlYWQgb2JqZWN0CkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAndXNlIHBhY2tlZCBkZWx0aWZpZWQgKE9GU19ERUxUQSkgb2JqZWN0cycgXAogICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCiAgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgotICAgICBybSAuZ2l0Mi9vYmplY3RzL3BhY2svdGVzdC0qICYmCisgICAgIHJtIC1mIC5naXQyL29iamVjdHMvcGFjay90ZXN0LSogJiYKICAgICAgY3AgdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggLmdpdDIvb2JqZWN0cy9wYWNrICYmIHsKIAkgZ2l0LWRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgogCSB3aGlsZSByZWFkIG9iamVjdApAQCAtMTg4LDE1ICsxODgsMTUgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvcnJ1cHQgYSBwYWNrIGFuZCBzZWUgaWYgdmVyaWZ5IGNhdGNoZXMnIFwKLSAgICAnY3AgdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4IHRlc3QtMy5pZHggJiYKLSAgICAgY3AgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayB0ZXN0LTMucGFjayAmJgorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4ID50ZXN0LTMuaWR4ICYmCisgICAgIGNhdCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrID50ZXN0LTMucGFjayAmJgogICAgICBpZiBnaXQtdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAogICAgICB0aGVuIGZhbHNlCiAgICAgIGVsc2UgOjsKICAgICAgZmkgJiYKIAogICAgICA6IFBBQ0tfU0lHTkFUVVJFICYmCi0gICAgIGNwIHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCiAgICAgIGRkIGlmPS9kZXYvemVybyBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MiAmJgogICAgICBpZiBnaXQtdmVyaWZ5LXBhY2sgdGVzdC0zLmlkeAogICAgICB0aGVuIGZhbHNlCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgZmkgJiYKIAogICAgICA6IFBBQ0tfVkVSU0lPTiAmJgotICAgICBjcCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgogICAgICBkZCBpZj0vZGV2L3plcm8gb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTcgJiYKICAgICAgaWYgZ2l0LXZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKICAgICAgdGhlbiBmYWxzZQpAQCAtMjEyLDcgKzIxMiw3IEBACiAgICAgIGZpICYmCiAKICAgICAgOiBUWVBFL1NJWkUgYnl0ZSBvZiB0aGUgZmlyc3QgcGFja2VkIG9iamVjdCBkYXRhICYmCi0gICAgIGNwIHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCiAgICAgIGRkIGlmPS9kZXYvemVybyBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MTIgJiYKICAgICAgaWYgZ2l0LXZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKICAgICAgdGhlbiBmYWxzZQpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgIDogc3VtIG9mIHRoZSBpbmRleCBmaWxlIGl0c2VsZiAmJgogICAgICBsPWB3YyAtYyA8dGVzdC0zLmlkeGAgJiYKICAgICAgbD1gZXhwciAkbCAtIDIwYCAmJgotICAgICBjcCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgogICAgICBkZCBpZj0vZGV2L3plcm8gb2Y9dGVzdC0zLmlkeCBjb3VudD0yMCBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSRsICYmCiAgICAgIGlmIGdpdC12ZXJpZnktcGFjayB0ZXN0LTMucGFjawogICAgICB0aGVuIGZhbHNlCkBAIC0yMzMsMjEgKzIzMywyMSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnYnVpbGQgcGFjayBpbmRleCBmb3IgYW4gZXhpc3RpbmcgcGFjaycgXAotICAgICdjcCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgogICAgICBnaXQtaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy5wYWNrICYmCiAgICAgIGNtcCB0bXAuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgogCiAgICAgIGdpdC1pbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCiAgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgogCi0gICAgIGNwIHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY2F0IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgPnRlc3QtMy5wYWNrICYmCiAgICAgIGdpdC1pbmRleC1wYWNrIC1vIHRtcC5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayAmJgogICAgICBjbXAgdG1wLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggJiYKIAogICAgICBnaXQtaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgogICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggJiYKIAotICAgICBjcCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNhdCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrID50ZXN0LTMucGFjayAmJgogICAgICBnaXQtaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKICAgICAgY21wIHRtcC5pZHggdGVzdC0zLSR7cGFja25hbWVfM30uaWR4ICYmCiAKZGlmZiAtLWdpdCBhL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2ggYi90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoCmluZGV4IGE2ZGJiMDQuLmZjZTc3ZjEgMTAwNzU1Ci0tLSBhL3QvdDUzMDEtc2xpZGluZy13aW5kb3cuc2gKKysrIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApAQCAtMTIsNyArMTIsNyBAQAogICAgICBmb3IgaSBpbiBhIGIgYwogICAgICBkbwogICAgICAgICAgZWNobyAkaSA+JGkgJiYKLSAgICAgICAgIGRkIGlmPS9kZXYvdXJhbmRvbSBicz0zMmsgY291bnQ9MSA+PiRpICYmCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiJGkiIDMyNzY4ID4+JGkgJiYKICAgICAgICAgIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgJGkgfHwgcmV0dXJuIDEKICAgICAgZG9uZSAmJgogICAgICBlY2hvIGQgPmQgJiYgY2F0IGMgPj5kICYmIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgZCAmJgpkaWZmIC0tZ2l0IGEvdC90NTMwMi1wYWNrLWluZGV4LnNoIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY5MDJmYzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzAyLXBhY2staW5kZXguc2gKQEAgLTAsMCArMSwxNDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTmljb2xhcyBQaXRyZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYWNrIGluZGV4IHdpdGggNjQtYml0IG9mZnNldHMgYW5kIG9iamVjdCBDUkMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwJyBcCisgICAgJ3JtIC1yZiAuZ2l0CisgICAgIGdpdC1pbml0ICYmCisgICAgIGZvciBpIGluIGBzZXEgLXcgMTAwYAorICAgICBkbworICAgICAgICAgZWNobyAkaSA+ZmlsZV8kaSAmJgorICAgICAgICAgdGVzdC1nZW5yYW5kb20gIiRpIiA4MTkyID4+ZmlsZV8kaSAmJgorICAgICAgICAgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXyRpIHx8IHJldHVybiAxCisgICAgIGRvbmUgJiYKKyAgICAgeyBlY2hvIDEwMSAmJiB0ZXN0LWdlbnJhbmRvbSAxMDAgODE5MjsgfSA+ZmlsZV8xMDEgJiYKKyAgICAgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXzEwMSAmJgorICAgICB0cmVlPWBnaXQtd3JpdGUtdHJlZWAgJiYKKyAgICAgY29tbWl0PWBnaXQtY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYgeworCSBlY2hvICR0cmVlICYmCisJIGdpdC1scy10cmVlICR0cmVlIHwgc2VkIC1lICJzLy4qIFxcKFswLTlhLWZdKlxcKQkuKi9cXDEvIgorICAgICB9ID5vYmotbGlzdCAmJgorICAgICBnaXQtdXBkYXRlLXJlZiBIRUFEICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrLW9iamVjdHMgd2l0aCBpbmRleCB2ZXJzaW9uIDEnIFwKKyAgICAncGFjazE9JChnaXQtcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0xIHRlc3QtMSA8b2JqLWxpc3QpICYmCisgICAgIGdpdC12ZXJpZnktcGFjayAtdiAidGVzdC0xLSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ3BhY2syPSQoZ2l0LXBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiB0ZXN0LTIgPG9iai1saXN0KSAmJgorICAgICBnaXQtdmVyaWZ5LXBhY2sgLXYgInRlc3QtMi0ke3BhY2syfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2JvdGggcGFja3Mgc2hvdWxkIGJlIGlkZW50aWNhbCcgXAorICAgICdjbXAgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAidGVzdC0yLSR7cGFjazJ9LnBhY2siJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFwKKyAgICAnaW5kZXggdjEgYW5kIGluZGV4IHYyIHNob3VsZCBiZSBkaWZmZXJlbnQnIFwKKyAgICAnY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAidGVzdC0yLSR7cGFjazJ9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAxJyBcCisgICAgJ2dpdC1pbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC1vIDEuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ2dpdC1pbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yIC1vIDIuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleC1wYWNrIHJlc3VsdHMgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmVzJyBcCisgICAgJ2NtcCAidGVzdC0xLSR7cGFjazF9LmlkeCIgIjEuaWR4IiAmJgorICAgICBjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICIyLmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbmRleCB2MjogZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIHBhY2stb2JqZWN0cycgXAorICAgICdwYWNrMz0kKGdpdC1wYWNrLW9iamVjdHMgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCB0ZXN0LTMgPG9iai1saXN0KSAmJgorICAgICBnaXQtdmVyaWZ5LXBhY2sgLXYgInRlc3QtMy0ke3BhY2szfS5wYWNrIicKKwordGVzdF9leHBlY3RfZmFpbHVyZSBcCisgICAgJzY0LWJpdCBvZmZzZXRzOiBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgaW5kZXggdjIgcmVzdWx0cycgXAorICAgICdjbXAgInRlc3QtMi0ke3BhY2syfS5pZHgiICJ0ZXN0LTMtJHtwYWNrM30uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4IHYyOiBmb3JjZSBzb21lIDY0LWJpdCBvZmZzZXRzIHdpdGggaW5kZXgtcGFjaycgXAorICAgICdnaXQtaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwIC1vIDMuaWR4ICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc2NC1iaXQgb2Zmc2V0czogaW5kZXgtcGFjayByZXN1bHQgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmUnIFwKKyAgICAnY21wICJ0ZXN0LTMtJHtwYWNrM30uaWR4IiAiMy5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSAxKSBzdHJlYW0gcGFjayB0byByZXBvc2l0b3J5JyBcCisgICAgJ2dpdC1pbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC0tc3RkaW4gPCAidGVzdC0xLSR7cGFjazF9LnBhY2siICYmCisgICAgIGdpdC1wcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0LWNvdW50LW9iamVjdHMgfCAoIHJlYWQgbnIgcmVzdCAmJiB0ZXN0ICIkbnIiIC1lcSAxICkgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMikgY3JlYXRlIGEgc3RlYWx0aCBjb3JydXB0aW9uIGluIGEgZGVsdGEgYmFzZSByZWZlcmVuY2UnIFwKKyAgICAnIyB0aGlzIHRlc3QgYXNzdW1lcyBhIGRlbHRhIHNtYWxsZXIgdGhhbiAxNiBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrCisgICAgIGdpdC1zaG93LWluZGV4IDwxLmlkeCB8IHNvcnQgLW4gfCB0YWlsIC1uIDEgfCAoCisgICAgICAgcmVhZCBkZWx0YV9vZmZzIGRlbHRhX3NoYTEgJiYKKyAgICAgICBnaXQtY2F0LWZpbGUgYmxvYiAiJGRlbHRhX3NoYTEiID4gYmxvYl8xICYmCisgICAgICAgY2htb2QgK3cgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgICBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiBzZWVrPSQoKCRkZWx0YV9vZmZzICsgMSkpIFwKKwkgIGlmPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgc2tpcD0kKCgyNTYgKiA0ICsgNCkpIFwKKwkgIGJzPTEgY291bnQ9MjAgY29udj1ub3RydW5jICYmCisgICAgICAgZ2l0LWNhdC1maWxlIGJsb2IgIiRkZWx0YV9zaGExIiA+IGJsb2JfMiApJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFwKKyAgICAnW2luZGV4IHYxXSAzKSBjb3JydXB0ZWQgZGVsdGEgaGFwcGlseSByZXR1cm5lZCB3cm9uZyBkYXRhJyBcCisgICAgJ2NtcCBibG9iXzEgYmxvYl8yJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFwKKyAgICAnW2luZGV4IHYxXSA0KSBjb25maXJtIHRoYXQgdGhlIHBhY2sgaXMgYWN0dWFsbHkgY29ycnVwdGVkJyBcCisgICAgJ2dpdC1mc2NrIC0tZnVsbCAkY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSA1KSBwYWNrLW9iamVjdHMgaGFwcGlseSByZXVzZXMgY29ycnVwdGVkIGRhdGEnIFwKKyAgICAncGFjazQ9JChnaXQtcGFjay1vYmplY3RzIHRlc3QtNCA8b2JqLWxpc3QpICYmCisgICAgIHRlc3QgLWYgInRlc3QtNC0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3RfZmFpbHVyZSBcCisgICAgJ1tpbmRleCB2MV0gNikgbmV3bHkgY3JlYXRlZCBwYWNrIGlzIEJBRCAhJyBcCisgICAgJ2dpdC12ZXJpZnktcGFjayAtdiAidGVzdC00LSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSAxKSBzdHJlYW0gcGFjayB0byByZXBvc2l0b3J5JyBcCisgICAgJ3JtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKyAgICAgZ2l0LWluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQtcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdC1jb3VudC1vYmplY3RzIHwgKCByZWFkIG5yIHJlc3QgJiYgdGVzdCAiJG5yIiAtZXEgMSApICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LnBhY2siICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGNtcCAidGVzdC0zLSR7cGFjazF9LmlkeCIgICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDIpIGNyZWF0ZSBhIHN0ZWFsdGggY29ycnVwdGlvbiBpbiBhIGRlbHRhIGJhc2UgcmVmZXJlbmNlJyBcCisgICAgJyMgdGhpcyB0ZXN0IGFzc3VtZXMgYSBkZWx0YSBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgcGFjaworICAgICBnaXQtc2hvdy1pbmRleCA8MS5pZHggfCBzb3J0IC1uIHwgdGFpbCAtbiAxIHwgKAorICAgICAgIHJlYWQgZGVsdGFfb2ZmcyBkZWx0YV9zaGExIGRlbHRhX2NyYyAmJgorICAgICAgIGdpdC1jYXQtZmlsZSBibG9iICIkZGVsdGFfc2hhMSIgPiBibG9iXzMgJiYKKyAgICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICAgIGRkIG9mPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siIHNlZWs9JCgoJGRlbHRhX29mZnMgKyAxKSkgXAorCSAgaWY9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiBza2lwPSQoKDggKyAyNTYgKiA0KSkgXAorCSAgYnM9MSBjb3VudD0yMCBjb252PW5vdHJ1bmMgJiYKKyAgICAgICBnaXQtY2F0LWZpbGUgYmxvYiAiJGRlbHRhX3NoYTEiID4gYmxvYl80ICknCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgXAorICAgICdbaW5kZXggdjJdIDMpIGNvcnJ1cHRlZCBkZWx0YSBoYXBwaWx5IHJldHVybmVkIHdyb25nIGRhdGEnIFwKKyAgICAnY21wIGJsb2JfMyBibG9iXzQnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgXAorICAgICdbaW5kZXggdjJdIDQpIGNvbmZpcm0gdGhhdCB0aGUgcGFjayBpcyBhY3R1YWxseSBjb3JydXB0ZWQnIFwKKyAgICAnZ2l0LWZzY2sgLS1mdWxsICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgXAorICAgICdbaW5kZXggdjJdIDUpIHBhY2stb2JqZWN0cyByZWZ1c2VzIHRvIHJldXNlIGNvcnJ1cHRlZCBkYXRhJyBcCisgICAgJ2dpdC1wYWNrLW9iamVjdHMgdGVzdC01IDxvYmotbGlzdCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAyLXF1aWNrZmV0Y2guc2ggYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQ3NjBmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDItcXVpY2tmZXRjaC5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBxdWlja2ZldGNoIGZyb20gbG9jYWwnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gaWNoaSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJY250PSQoICgKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGhvdXQgYWx0ZXJuYXRlJyAnCisKKwkoCisJCW1rZGlyIGNsb25lZCAmJgorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGluaXQtZGIgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uCisJKSAmJgorCWNudD0kKCAoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVydGhlciBjb21taXRzIGluIHRoZSBvcmlnaW5hbCcgJworCisJdGVzdF90aWNrICYmCisJZWNobyBuaSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisKKwljbnQ9JCggKAorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBjb21taXQgYW5kIHRyZWUgYnV0IG5vdCBibG9iIGJ5IGhhbmQnICcKKworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCB8CisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCB8CisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzCisJKSAmJgorCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNgorCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlIHwgc2VkIC1lICJzfC4ufCYvfCIpICYmCisJdGVzdCAtZiAiY2xvbmVkLy5naXQvb2JqZWN0cy8kYmxvYiIgJiYKKwlybSAtZiAiY2xvbmVkLy5naXQvb2JqZWN0cy8kYmxvYiIgJiYKKworCWNudD0kKCAoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdWlja2ZldGNoIHNob3VsZCBub3QgbGVhdmUgYSBjb3JydXB0ZWQgcmVwb3NpdG9yeScgJworCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGZldGNoCisJKSAmJgorCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2ggYi90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaAppbmRleCA3ODMxZTM0Li5mY2IzMzAyIDEwMDc1NQotLS0gYS90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaAorKysgYi90L3Q2MDAyLXJldi1saXN0LWJpc2VjdC5zaApAQCAtMTYzLDcgKzE2Myw3IEBACiAjIHRoZSBiaXNlY3Rpb24gcG9pbnQgaXMgdGhlIGhlYWQgLSB0aGlzIGlzIHRoZSBiYWQgcG9pbnQuCiAjCiAKLXRlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICItLWJpc2VjdCBsNSBecm9vdCIgJ2dpdC1yZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QnIDw8RU9GCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290IiAnZ2l0LXJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsNSBecm9vdCcgPDxFT0YKIGMzCiBFT0YKIApkaWZmIC0tZ2l0IGEvdC90NjAwNC1yZXYtbGlzdC1wYXRoLW9wdGltLnNoIGIvdC90NjAwNC1yZXYtbGlzdC1wYXRoLW9wdGltLnNoCmluZGV4IDUxODJkYmIuLjc2MWYwOWIgMTAwNzU1Ci0tLSBhL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaAorKysgYi90L3Q2MDA0LXJldi1saXN0LXBhdGgtb3B0aW0uc2gKQEAgLTcsNyArNyw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKIGVjaG8gSGVsbG8gPiBhICYmCiBnaXQgYWRkIGEgJiYKLWdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0IiBhCitnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgYSAmJgoraW5pdGlhbD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBwYXRoLW9wdGltaXphdGlvbiAnCkBAIC0xNiw0ICsxNywzNSBAQAogICAgIHRlc3QgJChnaXQtcmV2LWxpc3QgJGNvbW1pdCAtLSAuIHwgd2MgLWwpID0gMQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdXJ0aGVyIHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwllY2hvIElycmVsZXZhbnQgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIGFuIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWVjaG8gIk1vcmUgSXJyZWxldmFuY3kiID5jICYmCisJZ2l0IGFkZCBjICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBtYWtlcyBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWVjaG8gQnllID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSB0b3VjaGVzIGEiICYmCisJc2lkZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwllY2hvICJZZXQgbW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIHlldCBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIEFub3RoZXIgPmIgJiYKKwlnaXQgYWRkIGIgJiYKKwlnaXQgY29tbWl0IC1tICJNYXN0ZXIgdG91Y2hlcyBiIiAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJZWNobyBUb3VjaGVkID5iICYmCisJZ2l0IGFkZCBiICYmCisJZ2l0IGNvbW1pdCAtbSAiTWFzdGVyIHRvdWNoZXMgYiBhZ2FpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBvcHRpbWl6YXRpb24gMicgJworCSggZWNobyAiJHNpZGUiOyBlY2hvICIkaW5pdGlhbCIgKSA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBhID5hY3R1YWwgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoIGIvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKaW5kZXggYjYwOGUyMC4uZTNmN2FlOCAxMDA3NTUKLS0tIGEvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKKysrIGIvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKQEAgLTQ3LDYgKzQ3LDggQEAKIGdpdCBicmFuY2ggcmVkICYmCiBnaXQgYnJhbmNoIGJsdWUgJiYKIGdpdCBicmFuY2ggeWVsbG93ICYmCitnaXQgYnJhbmNoIGNoYW5nZSAmJgorZ2l0IGJyYW5jaCBjaGFuZ2UrcmVuYW1lICYmCiAKIHNlZCAtZSAiL15nIC9zLy4qL2cgOiBtYXN0ZXIgY2hhbmdlcyBhIGxpbmUvIiA8QSA+QSsgJiYKIG12IEErIEEgJiYKQEAgLTc3LDYgKzc5LDE3IEBACiBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQyBNIE4gJiYKIGdpdCBjb21taXQgLW0gImJsdWUgcmVuYW1lcyBBLT5DLCBNLT5OIiAmJgogCitnaXQgY2hlY2tvdXQgY2hhbmdlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogY2hhbmdlZCBsaW5lLyIgPEEgPkErICYmCittdiBBKyBBICYmCitnaXQgY29tbWl0IC1xIC1hIC1tICJjaGFuZ2VkIiAmJgorCitnaXQgY2hlY2tvdXQgY2hhbmdlK3JlbmFtZSAmJgorc2VkIC1lICIvXmcgL3MvLiovZyA6IGNoYW5nZWQgbGluZS8iIDxBID5CICYmCitybSBBICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gImNoYW5nZWQgYW5kIHJlbmFtZWQiICYmCisKIGdpdCBjaGVja291dCBtYXN0ZXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVuYW1pbmcgYnJhbmNoIGludG8gdW5yZW5hbWluZyBvbmUnIFwKQEAgLTMxOCw0ICszMzEsMTQgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvcgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBpZGVudGljYWwgY2hhbmdlcyBpbiBhIHJlbmFtZWQgZmlsZScgJworCXJtIC1mIEEgTSBOCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjaGFuZ2UrcmVuYW1lICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UgfCBncmVwICJeU2tpcHBlZCBCIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgY2hhbmdlICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UrcmVuYW1lIHwgZ3JlcCAiXlNraXBwZWQgQiIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2ggYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoIGIvdC90NjAyNS1tZXJnZS1zeW1saW5rcy5zaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS90L3Q2MDI2LW1lcmdlLWF0dHIuc2ggYi90L3Q2MDI2LW1lcmdlLWF0dHIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZmYzM0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjYtbWVyZ2UtYXR0ci5zaApAQCAtMCwwICsxLDE0NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwZXIgcGF0aCBtZXJnZSBjb250cm9sbGVkIGJ5IG1lcmdlIGF0dHJpYnV0ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIEluaXRpYWwgPiRmICYmIGdpdCBhZGQgJGYgfHwgYnJlYWsKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwlmb3IgZiBpbiB0ZXh0IGJpbmFyeSB1bmlvbgorCWRvCisJCWVjaG8gTWFzdGVyID4+JGYgJiYgZ2l0IGFkZCAkZiB8fCBicmVhaworCWRvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIE1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgZiBpbiB0ZXh0IGJpbmFyeSB1bmlvbgorCWRvCisJCWVjaG8gU2lkZSA+PiRmICYmIGdpdCBhZGQgJGYgfHwgYnJlYWsKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBTaWRlICYmCisKKwlnaXQgdGFnIGFuY2hvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG1lcmdlICcKKworCXsKKwkJZWNobyAiYmluYXJ5IC1tZXJnZSIKKwkJZWNobyAidW5pb24gbWVyZ2U9dW5pb24iCisJfSA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWlmIGdpdCBtZXJnZSBtYXN0ZXIKKwl0aGVuCisJCWVjaG8gR2FhaCwgc2hvdWxkIGhhdmUgY29uZmxpY3RlZAorCQlmYWxzZQorCWVsc2UKKwkJZWNobyBPaywgY29uZmxpY3RlZC4KKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtZXJnZSByZXN1bHQgaW4gaW5kZXgnICcKKworCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgYmluYXJ5ICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCB0ZXh0ICYmCisJISAoZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCB1bmlvbikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtZXJnZSByZXN1bHQgaW4gd29ya2luZyB0cmVlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRDpiaW5hcnkgPmJpbmFyeS1vcmlnICYmCisJZ3JlcCAiPDw8PDw8PCIgdGV4dCAmJgorCWNtcCBiaW5hcnktb3JpZyBiaW5hcnkgJiYKKwkhIGdyZXAgIjw8PDw8PDwiIHVuaW9uICYmCisJZ3JlcCBNYXN0ZXIgdW5pb24gJiYKKwlncmVwIFNpZGUgdW5pb24KKworJworCitjYXQgPi4vY3VzdG9tLW1lcmdlIDw8XEVPRgorIyEvYmluL3NoCisKK29yaWc9IiQxIiBvdXJzPSIkMiIgdGhlaXJzPSIkMyIgZXhpdD0iJDQiCisoCisJZWNobyAib3JpZyBpcyAkb3JpZyIKKwllY2hvICJvdXJzIGlzICRvdXJzIgorCWVjaG8gInRoZWlycyBpcyAkdGhlaXJzIgorCWVjaG8gIj09PSBvcmlnID09PSIKKwljYXQgIiRvcmlnIgorCWVjaG8gIj09PSBvdXJzID09PSIKKwljYXQgIiRvdXJzIgorCWVjaG8gIj09PSB0aGVpcnMgPT09IgorCWNhdCAiJHRoZWlycyIKKykgPiIkb3VycysiCitjYXQgIiRvdXJzKyIgPiIkb3VycyIKK3JtIC1mICIkb3VycysiCitleGl0ICIkZXhpdCIKK0VPRgorY2htb2QgK3ggLi9jdXN0b20tbWVyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGJhY2tlbmQnICcKKworCWVjaG8gIiogbWVyZ2U9dW5pb24iID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gInRleHQgbWVyZ2U9Y3VzdG9tIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBcCisJbWVyZ2UuY3VzdG9tLmRyaXZlciAiLi9jdXN0b20tbWVyZ2UgJU8gJUEgJUIgMCIgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5uYW1lICJjdXN0b20gbWVyZ2UgZHJpdmVyIGZvciB0ZXN0aW5nIiAmJgorCisJZ2l0IG1lcmdlIG1hc3RlciAmJgorCisJY21wIGJpbmFyeSB1bmlvbiAmJgorCXNlZCAtZSAxLDNkIHRleHQgPmNoZWNrLTEgJiYKKwlvPSQoZ2l0LXVucGFjay1maWxlIG1hc3Rlcl46dGV4dCkgJiYKKwlhPSQoZ2l0LXVucGFjay1maWxlIHNpZGVeOnRleHQpICYmCisJYj0kKGdpdC11bnBhY2stZmlsZSBtYXN0ZXI6dGV4dCkgJiYKKwlzaCAtYyAiLi9jdXN0b20tbWVyZ2UgJG8gJGEgJGIgMCIgJiYKKwlzZWQgLWUgMSwzZCAkYSA+Y2hlY2stMiAmJgorCWNtcCBjaGVjay0xIGNoZWNrLTIgJiYKKwlybSAtZiAkbyAkYSAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2UgYmFja2VuZCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5kcml2ZXIgIi4vY3VzdG9tLW1lcmdlICVPICVBICVCIDEiICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIFwKKwltZXJnZS5jdXN0b20ubmFtZSAiY3VzdG9tIG1lcmdlIGRyaXZlciBmb3IgdGVzdGluZyIgJiYKKworCWlmIGdpdCBtZXJnZSBtYXN0ZXIKKwl0aGVuCisJCWVjaG8gIkVoPyBzaG91bGQgaGF2ZSBjb25mbGljdGVkIgorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiT2ssIGNvbmZsaWN0ZWQiCisJZmkgJiYKKworCWNtcCBiaW5hcnkgdW5pb24gJiYKKwlzZWQgLWUgMSwzZCB0ZXh0ID5jaGVjay0xICYmCisJbz0kKGdpdC11bnBhY2stZmlsZSBtYXN0ZXJeOnRleHQpICYmCisJYT0kKGdpdC11bnBhY2stZmlsZSBhbmNob3I6dGV4dCkgJiYKKwliPSQoZ2l0LXVucGFjay1maWxlIG1hc3Rlcjp0ZXh0KSAmJgorCXNoIC1jICIuL2N1c3RvbS1tZXJnZSAkbyAkYSAkYiAwIiAmJgorCXNlZCAtZSAxLDNkICRhID5jaGVjay0yICYmCisJY21wIGNoZWNrLTEgY2hlY2stMiAmJgorCXJtIC1mICRvICRhICRiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwZjZhZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hyaXN0aWFuIENvdWRlcgorIwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgZ2l0LWJpc2VjdCBmdW5jdGlvbmFsaXR5JworCitleGVjIDwvZGV2L251bGwKKworLiAuL3Rlc3QtbGliLnNoCisKK2FkZF9saW5lX2ludG9fZmlsZSgpCit7CisgICAgX2xpbmU9JDEKKyAgICBfZmlsZT0kMgorCisgICAgaWYgWyAtZiAiJF9maWxlIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRfbGluZSIgPj4gJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkFkZCA8JF9saW5lPiBpbnRvIDwkX2ZpbGU+LiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiRfbGluZSIgPiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIGdpdCBhZGQgJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkNyZWF0ZSBmaWxlIDwkX2ZpbGU+IHdpdGggPCRfbGluZT4gaW5zaWRlLiIKKyAgICBmaQorCisgICAgdGVzdF90aWNrCisgICAgZ2l0LWNvbW1pdCAtLXF1aWV0IC1tICIkTVNHIiAkX2ZpbGUKK30KKworSEFTSDE9CitIQVNIMj0KK0hBU0gzPQorSEFTSDQ9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNpYyByZXBvIHdpdGggMSBmaWxlIChoZWxsbykgYW5kIDQgY29tbWl0cycgJworICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjE6IEhlbGxvIFdvcmxkIiBoZWxsbyAmJgorICAgICBIQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICIyOiBBIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKyAgICAgSEFTSDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiMzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisgICAgIEhBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjQ6IENpYW8gZm9yIG5vdyIgaGVsbG8gJiYKKyAgICAgSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydHMgd2l0aCBvbmx5IG9uZSBiYWQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCWdpdCBiaXNlY3QgbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZG9lcyBub3Qgc3RhcnQgd2l0aCBvbmx5IG9uZSBnb29kJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxIHx8IHJldHVybiAxCisKKwlpZiBnaXQgYmlzZWN0IG5leHQKKwl0aGVuCisJCWVjaG8gT29wcywgc2hvdWxkIGhhdmUgZmFpbGVkLgorCQlmYWxzZQorCWVsc2UKKwkJOgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydCB3aXRoIG9uZSBiYWQgYW5kIGdvb2QnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5leHQKKycKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQW5vdGhlciIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHNpbXBsZSBjYXNlJyBcCisgICAgJ2VjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJncmVwIEFub3RoZXIgaGVsbG8gPiAvZGV2L251bGwiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBjaG1vZCAreCB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBnaXQgYmlzZWN0IHN0YXJ0ICYmCisgICAgIGdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKyAgICAgZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDMgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCcKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQ2lhbyIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHdpdGggbW9yZSBjb21wbGV4ICJnaXQgYmlzZWN0IHN0YXJ0IicgXAorICAgICdlY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAiZ3JlcCBDaWFvIGhlbGxvID4gL2Rldi9udWxsIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgY2htb2QgK3ggdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDQgaXMgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCcKKworIworIwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXJ1bi5zaCBiL3QvdDYwMzAtYmlzZWN0LXJ1bi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzljNzIyOC4uMDAwMDAwMAotLS0gYS90L3Q2MDMwLWJpc2VjdC1ydW4uc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IENocmlzdGlhbiBDb3VkZXIKLSMKLXRlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGdpdC1iaXNlY3QgcnVuIGZ1bmN0aW9uYWxpdHknCi0KLS4gLi90ZXN0LWxpYi5zaAotCi1hZGRfbGluZV9pbnRvX2ZpbGUoKQotewotICAgIF9saW5lPSQxCi0gICAgX2ZpbGU9JDIKLQotICAgIGlmIFsgLWYgIiRfZmlsZSIgXTsgdGhlbgotICAgICAgICBlY2hvICIkX2xpbmUiID4+ICRfZmlsZSB8fCByZXR1cm4gJD8KLSAgICAgICAgTVNHPSJBZGQgPCRfbGluZT4gaW50byA8JF9maWxlPi4iCi0gICAgZWxzZQotICAgICAgICBlY2hvICIkX2xpbmUiID4gJF9maWxlIHx8IHJldHVybiAkPwotICAgICAgICBnaXQgYWRkICRfZmlsZSB8fCByZXR1cm4gJD8KLSAgICAgICAgTVNHPSJDcmVhdGUgZmlsZSA8JF9maWxlPiB3aXRoIDwkX2xpbmU+IGluc2lkZS4iCi0gICAgZmkKLQotICAgIGdpdC1jb21taXQgLW0gIiRNU0ciICRfZmlsZQotfQotCi1IQVNIMT0KLUhBU0gzPQotSEFTSDQ9Ci0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdzZXQgdXAgYmFzaWMgcmVwbyB3aXRoIDEgZmlsZSAoaGVsbG8pIGFuZCA0IGNvbW1pdHMnIFwKLSAgICAnYWRkX2xpbmVfaW50b19maWxlICIxOiBIZWxsbyBXb3JsZCIgaGVsbG8gJiYKLSAgICAgYWRkX2xpbmVfaW50b19maWxlICIyOiBBIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKLSAgICAgYWRkX2xpbmVfaW50b19maWxlICIzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKLSAgICAgYWRkX2xpbmVfaW50b19maWxlICI0OiBDaWFvIGZvciBub3ciIGhlbGxvICYmCi0gICAgIEhBU0gxPSQoZ2l0IHJldi1saXN0IEhFQUQgfCB0YWlsIC0xKSAmJgotICAgICBIQVNIMz0kKGdpdCByZXYtbGlzdCBIRUFEIHwgaGVhZCAtMiB8IHRhaWwgLTEpICYmCi0gICAgIEhBU0g0PSQoZ2l0IHJldi1saXN0IEhFQUQgfCBoZWFkIC0xKScKLQotIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKLSMgaW50cm9kdWNlZCAiQW5vdGhlciIgaW50byBoZWxsby4KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQgYmlzZWN0IHJ1biBzaW1wbGUgY2FzZScgXAotICAgICdlY2hvICIjIS9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKLSAgICAgZWNobyAiZ3JlcCBBbm90aGVyIGhlbGxvID4gL2Rldi9udWxsIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgotICAgICBlY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKLSAgICAgY2htb2QgK3ggdGVzdF9zY3JpcHQuc2ggJiYKLSAgICAgZ2l0IGJpc2VjdCBzdGFydCAmJgotICAgICBnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCi0gICAgIGdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgotICAgICBnaXQgYmlzZWN0IHJ1biAuL3Rlc3Rfc2NyaXB0LnNoID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKLSAgICAgZ3JlcCAiJEhBU0gzIGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0JwotCi0jCi0jCi10ZXN0X2RvbmUKLQpkaWZmIC0tZ2l0IGEvdC90NzIwMS1jby5zaCBiL3QvdDcyMDEtY28uc2gKaW5kZXggODY3YmJkMi4uNWZhNmE0NSAxMDA3NTUKLS0tIGEvdC90NzIwMS1jby5zaAorKysgYi90L3Q3MjAxLWNvLnNoCkBAIC0zLDcgKzMsMjAgQEAKICMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCiAjCiAKLXRlc3RfZGVzY3JpcHRpb249J2dpdC1jaGVja291dCB0ZXN0cy4nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY2hlY2tvdXQgdGVzdHMuCisKK0NyZWF0ZXMgbWFzdGVyLCBmb3JrcyByZW5hbWVyIGFuZCBzaWRlIGJyYW5jaGVzIGZyb20gaXQuCitUZXN0IHN3aXRjaGluZyBhY3Jvc3MgdGhlbS4KKworICAhIFttYXN0ZXJdIEluaXRpYWwgQSBvbmUsIEEgdHdvCisgICAqIFtyZW5hbWVyXSBSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvCisgICAgISBbc2lkZV0gU2lkZSBNIG9uZSwgRCB0d28sIEEgdGhyZWUKKyAgLS0tCisgICAgKyBbc2lkZV0gU2lkZSBNIG9uZSwgRCB0d28sIEEgdGhyZWUKKyAgICogIFtyZW5hbWVyXSBSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvCisgICsqKyBbbWFzdGVyXSBJbml0aWFsIEEgb25lLCBBIHR3bworCisnCiAKIC4gLi90ZXN0LWxpYi5zaAogCkBAIC0xMjksNCArMTQyLDUyIEBACiAJISB0ZXN0IC1zIGN1cnJlbnQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQnICcKKworCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggYnJhbmNobmFtZV4nICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuICYmCisJZ2l0IGNoZWNrb3V0IHJlbmFtZXJeICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQgd2l0aCBIRUFEXjAnICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCBjMDc1NDc0Li5kZWUzYWQ3Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMTYsNiArMTYsNyBAQAogdW5zZXQgQVVUSE9SX05BTUUKIHVuc2V0IENPTU1JVF9BVVRIT1JfRU1BSUwKIHVuc2V0IENPTU1JVF9BVVRIT1JfTkFNRQordW5zZXQgRU1BSUwKIHVuc2V0IEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTCiB1bnNldCBHSVRfQVVUSE9SX0RBVEUKIEdJVF9BVVRIT1JfRU1BSUw9YXV0aG9yQGV4YW1wbGUuY29tCkBAIC0zNiw2ICszNywxMCBAQAogZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9OQU1FCiBleHBvcnQgRURJVE9SIFZJU1VBTAogCisjIFByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8gZXhwb3J0CisjIENEUEFUSCBpbnRvIHRoZSBlbnZpcm9ubWVudAordW5zZXQgQ0RQQVRICisKIGNhc2UgJChlY2hvICRHSVRfVFJBQ0UgfHRyICJbQS1aXSIgIlthLXpdIikgaW4KIAkxfDJ8dHJ1ZSkKIAkJZWNobyAiKiB3YXJuaW5nOiBTb21lIHRlc3RzIHdpbGwgbm90IHdvcmsgaWYgR0lUX1RSQUNFIiBcCmRpZmYgLS1naXQgYS90YWcuYyBiL3RhZy5jCmluZGV4IDU2YTQ5ZjQuLjMzMGQyODcgMTAwNjQ0Ci0tLSBhL3RhZy5jCisrKyBiL3RhZy5jCkBAIC0yMCwxMyArMjAsOSBAQAogCiBzdHJ1Y3QgdGFnICpsb29rdXBfdGFnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0gICAgICAgIHN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qoc2hhMSk7Ci0gICAgICAgIGlmICghb2JqKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHRhZyAqcmV0ID0gYWxsb2NfdGFnX25vZGUoKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVkX29iamVjdChzaGExLCAmcmV0LT5vYmplY3QpOwotICAgICAgICAgICAgICAgIHJldC0+b2JqZWN0LnR5cGUgPSBPQkpfVEFHOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChzaGExLCBPQkpfVEFHLCBhbGxvY190YWdfbm9kZSgpKTsKIAlpZiAoIW9iai0+dHlwZSkKIAkJb2JqLT50eXBlID0gT0JKX1RBRzsKICAgICAgICAgaWYgKG9iai0+dHlwZSAhPSBPQkpfVEFHKSB7CmRpZmYgLS1naXQgYS90ZXN0LWdlbnJhbmRvbS5jIGIvdGVzdC1nZW5yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2VmZTZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1nZW5yYW5kb20uYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogU2ltcGxlIHJhbmRvbSBkYXRhIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSByZXByb2R1Y2libGUgdGVzdCBmaWxlcy4KKyAqIFRoaXMgaXMgaW5zcGlyZWQgZnJvbSBQT1NJWC4xLTIwMDEgaW1wbGVtZW50YXRpb24gZXhhbXBsZSBmb3IgcmFuZCgpLgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVuc2lnbmVkIGxvbmcgY291bnQsIG5leHQgPSAwOworCXVuc2lnbmVkIGNoYXIgKmM7CisKKwlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpIHsKKwkJZnByaW50Ziggc3RkZXJyLCAiVXNhZ2U6ICVzIDxzZWVkX3N0cmluZz4gWzxzaXplPl0iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIDE7CisJfQorCisJYyA9ICh1bnNpZ25lZCBjaGFyICopIGFyZ3ZbMV07CisJZG8geworCQluZXh0ID0gbmV4dCAqIDExICsgKmM7CisJfSB3aGlsZSAoKmMrKyk7CisKKwljb3VudCA9IChhcmdjID09IDMpID8gc3RydG91bChhcmd2WzJdLCBOVUxMLCAwKSA6IC0xTDsKKworCXdoaWxlIChjb3VudC0tKSB7CisJCW5leHQgPSBuZXh0ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCQlpZiAocHV0Y2hhcigobmV4dCA+PiAxNikgJiAweGZmKSA9PSBFT0YpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LW1hdGNoLXRyZWVzLmMgYi90ZXN0LW1hdGNoLXRyZWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjNDY4OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtbWF0Y2gtdHJlZXMuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCXVuc2lnbmVkIGNoYXIgaGFzaDFbMjBdLCBoYXNoMlsyMF0sIHNoaWZ0ZWRbMjBdOworCXN0cnVjdCB0cmVlICpvbmUsICp0d287CisKKwlpZiAoZ2V0X3NoYTEoYXZbMV0sIGhhc2gxKSkKKwkJZGllKCJjYW5ub3QgcGFyc2UgJXMgYXMgYW4gb2JqZWN0IG5hbWUiLCBhdlsxXSk7CisJaWYgKGdldF9zaGExKGF2WzJdLCBoYXNoMikpCisJCWRpZSgiY2Fubm90IHBhcnNlICVzIGFzIGFuIG9iamVjdCBuYW1lIiwgYXZbMl0pOworCW9uZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGFzaDEpOworCWlmICghb25lKQorCQlkaWUoIm5vdCBhIHRyZWVpc2ggJXMiLCBhdlsxXSk7CisJdHdvID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoYXNoMik7CisJaWYgKCF0d28pCisJCWRpZSgibm90IGEgdHJlZWlzaCAlcyIsIGF2WzJdKTsKKworCXNoaWZ0X3RyZWUob25lLT5vYmplY3Quc2hhMSwgdHdvLT5vYmplY3Quc2hhMSwgc2hpZnRlZCwgLTEpOworCXByaW50Zigic2hpZnRlZDogJXNcbiIsIHNoYTFfdG9faGV4KHNoaWZ0ZWQpKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKaW5kZXggZDE4OGMwZi4uZTRhMzlhYSAxMDA2NDQKLS0tIGEvdHJlZS5jCisrKyBiL3RyZWUuYwpAQCAtMTI3LDEyICsxMjcsOCBAQAogc3RydWN0IHRyZWUgKmxvb2t1cF90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKLQlpZiAoIW9iaikgewotCQlzdHJ1Y3QgdHJlZSAqcmV0ID0gYWxsb2NfdHJlZV9ub2RlKCk7Ci0JCWNyZWF0ZWRfb2JqZWN0KHNoYTEsICZyZXQtPm9iamVjdCk7Ci0JCXJldC0+b2JqZWN0LnR5cGUgPSBPQkpfVFJFRTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHNoYTEsIE9CSl9UUkVFLCBhbGxvY190cmVlX25vZGUoKSk7CiAJaWYgKCFvYmotPnR5cGUpCiAJCW9iai0+dHlwZSA9IE9CSl9UUkVFOwogCWlmIChvYmotPnR5cGUgIT0gT0JKX1RSRUUpIHsKQEAgLTE0Myw2ICsxMzksMTQgQEAKIAlyZXR1cm4gKHN0cnVjdCB0cmVlICopIG9iajsKIH0KIAorLyoKKyAqIE5PVEUhIFRyZWUgcmVmcyB0byBleHRlcm5hbCBnaXQgcmVwb3NpdG9yaWVzCisgKiAoaWUgZ2l0bGlua3MpIGRvIG5vdCBjb3VudCBhcyByZWFsIHJlZmVyZW5jZXMuCisgKgorICogWW91IGRvbid0IGhhdmUgdG8gaGF2ZSB0aG9zZSByZXBvc2l0b3JpZXMKKyAqIGF2YWlsYWJsZSBhdCBhbGwsIG11Y2ggbGVzcyBoYXZlIHRoZSBvYmplY3RzCisgKiBhY2Nlc3NpYmxlIGZyb20gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKyAqLwogc3RhdGljIHZvaWQgdHJhY2tfdHJlZV9yZWZzKHN0cnVjdCB0cmVlICppdGVtKQogewogCWludCBuX3JlZnMgPSAwLCBpOwpAQCAtMTUyLDggKzE1NiwxMSBAQAogCiAJLyogQ291bnQgaG93IG1hbnkgZW50cmllcyB0aGVyZSBhcmUuLiAqLwogCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBpdGVtLT5idWZmZXIsIGl0ZW0tPnNpemUpOwotCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKQorCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmIChTX0lTRElSTE5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CiAJCW5fcmVmcysrOworCX0KIAogCS8qIEFsbG9jYXRlIG9iamVjdCByZWZzIGFuZCB3YWxrIGl0IGFnYWluLi4gKi8KIAlpID0gMDsKQEAgLTE2Miw2ICsxNjksOCBAQAogCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CiAJCXN0cnVjdCBvYmplY3QgKm9iajsKIAorCQlpZiAoU19JU0RJUkxOSyhlbnRyeS5tb2RlKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKIAkJCW9iaiA9ICZsb29rdXBfdHJlZShlbnRyeS5zaGExKS0+b2JqZWN0OwogCQllbHNlCmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCmluZGV4IGVlMTBlZWEuLjY3NWE5OTkgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5jCisrKyBiL3VucGFjay10cmVlcy5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKICNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgogCiAjZGVmaW5lIERCUlRfREVCVUcgMQogCkBAIC03MCw3ICs3MSw2IEBACiAKIHN0YXRpYyBpbnQgdW5wYWNrX3RyZWVzX3JlYyhzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICoqcG9zbnMsIGludCBsZW4sCiAJCQkgICAgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAotCQkJICAgIGludCAqaW5kcG9zLAogCQkJICAgIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmRmX2NvbmZsaWN0X2xpc3QpCiB7CiAJaW50IGJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJY2FjaGVfbmFtZSA9IE5VTEw7CiAKIAkJLyogQ2hlY2sgdGhlIGNhY2hlICovCi0JCWlmIChvLT5tZXJnZSAmJiAqaW5kcG9zIDwgYWN0aXZlX25yKSB7CisJCWlmIChvLT5tZXJnZSAmJiBvLT5wb3MgPCBhY3RpdmVfbnIpIHsKIAkJCS8qIFRoaXMgaXMgYSBiaXQgdHJpY2t5OiAqLwogCQkJLyogSWYgdGhlIGluZGV4IGhhcyBhIHN1YmRpcmVjdG9yeSAod2l0aAogCQkJICogY29udGVudHMpIGFzIHRoZSBmaXJzdCBuYW1lLCBpdCdsbCBnZXQgYQpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkgKiBmaWxlIGNhc2UuCiAJCQkgKi8KIAotCQkJY2FjaGVfbmFtZSA9IGFjdGl2ZV9jYWNoZVsqaW5kcG9zXS0+bmFtZTsKKwkJCWNhY2hlX25hbWUgPSBhY3RpdmVfY2FjaGVbby0+cG9zXS0+bmFtZTsKIAkJCWlmIChzdHJsZW4oY2FjaGVfbmFtZSkgPiBiYXNlbGVuICYmCiAJCQkgICAgIW1lbWNtcChjYWNoZV9uYW1lLCBiYXNlLCBiYXNlbGVuKSkgewogCQkJCWNhY2hlX25hbWUgKz0gYmFzZWxlbjsKQEAgLTE1OCw4ICsxNTgsOCBAQAogCiAJCWlmIChjYWNoZV9uYW1lICYmICFzdHJjbXAoY2FjaGVfbmFtZSwgZmlyc3QpKSB7CiAJCQlhbnlfZmlsZXMgPSAxOwotCQkJc3JjWzBdID0gYWN0aXZlX2NhY2hlWyppbmRwb3NdOwotCQkJcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KCppbmRwb3MpOworCQkJc3JjWzBdID0gYWN0aXZlX2NhY2hlW28tPnBvc107CisJCQlyZW1vdmVfY2FjaGVfZW50cnlfYXQoby0+cG9zKTsKIAkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewpAQCAtMjI4LDcgKzIyOCw3IEBACiAjaWYgREJSVF9ERUJVRyA+IDEKIAkJCQlwcmludGYoIkFkZGVkICVkIGVudHJpZXNcbiIsIHJldCk7CiAjZW5kaWYKLQkJCQkqaW5kcG9zICs9IHJldDsKKwkJCQlvLT5wb3MgKz0gcmV0OwogCQkJfSBlbHNlIHsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgc3JjX3NpemU7IGkrKykgewogCQkJCQlpZiAoc3JjW2ldKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJCW5ld2Jhc2VbYmFzZWxlbiArIHBhdGhsZW5dID0gJy8nOwogCQkJbmV3YmFzZVtiYXNlbGVuICsgcGF0aGxlbiArIDFdID0gJ1wwJzsKIAkJCWlmICh1bnBhY2tfdHJlZXNfcmVjKHN1YnBvc25zLCBsZW4sIG5ld2Jhc2UsIG8sCi0JCQkJCSAgICAgaW5kcG9zLCBkZl9jb25mbGljdF9saXN0KSkgeworCQkJCQkgICAgIGRmX2NvbmZsaWN0X2xpc3QpKSB7CiAJCQkJcmV0dmFsID0gLTE7CiAJCQkJZ290byBsZWF2ZV9kaXJlY3Rvcnk7CiAJCQl9CkBAIC0yODksMzYgKzI4OSwxMyBAQAogCX0KIH0KIAotc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBwcm9ncmVzc191cGRhdGU7Ci0KLXN0YXRpYyB2b2lkIHByb2dyZXNzX2ludGVydmFsKGludCBzaWdudW0pCi17Ci0JcHJvZ3Jlc3NfdXBkYXRlID0gMTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCi17Ci0Jc3RydWN0IHNpZ2FjdGlvbiBzYTsKLQlzdHJ1Y3QgaXRpbWVydmFsIHY7Ci0KLQltZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKLQlzYS5zYV9oYW5kbGVyID0gcHJvZ3Jlc3NfaW50ZXJ2YWw7Ci0Jc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOwotCXNhLnNhX2ZsYWdzID0gU0FfUkVTVEFSVDsKLQlzaWdhY3Rpb24oU0lHQUxSTSwgJnNhLCBOVUxMKTsKLQotCXYuaXRfaW50ZXJ2YWwudHZfc2VjID0gMTsKLQl2Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOwotCXYuaXRfdmFsdWUgPSB2Lml0X2ludGVydmFsOwotCXNldGl0aW1lcihJVElNRVJfUkVBTCwgJnYsIE5VTEwpOwotfQotCiBzdGF0aWMgc3RydWN0IGNoZWNrb3V0IHN0YXRlOwogc3RhdGljIHZvaWQgY2hlY2tfdXBkYXRlcyhzdHJ1Y3QgY2FjaGVfZW50cnkgKipzcmMsIGludCBuciwKIAkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCXVuc2lnbmVkIHNob3J0IG1hc2sgPSBodG9ucyhDRV9VUERBVEUpOwotCXVuc2lnbmVkIGxhc3RfcGVyY2VudCA9IDIwMCwgY250ID0gMCwgdG90YWwgPSAwOworCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgcHJvZ3Jlc3M7CiAKIAlpZiAoby0+dXBkYXRlICYmIG8tPnZlcmJvc2VfdXBkYXRlKSB7CiAJCWZvciAodG90YWwgPSBjbnQgPSAwOyBjbnQgPCBucjsgY250KyspIHsKQEAgLTMyNywzNSArMzA0LDE3IEBACiAJCQkJdG90YWwrKzsKIAkJfQogCi0JCS8qIERvbid0IGJvdGhlciBkb2luZyB0aGlzIGZvciB2ZXJ5IHNtYWxsIHVwZGF0ZXMgKi8KLQkJaWYgKHRvdGFsIDwgMjUwKQotCQkJdG90YWwgPSAwOwotCi0JCWlmICh0b3RhbCkgewotCQkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBmaWxlcyBvdXQuLi5cbiIpOwotCQkJc2V0dXBfcHJvZ3Jlc3Nfc2lnbmFsKCk7Ci0JCQlwcm9ncmVzc191cGRhdGUgPSAxOwotCQl9CisJCXN0YXJ0X3Byb2dyZXNzX2RlbGF5KCZwcm9ncmVzcywgIkNoZWNraW5nICV1IGZpbGVzIG91dC4uLiIsCisJCQkJICAgICAiIiwgdG90YWwsIDUwLCAyKTsKIAkJY250ID0gMDsKIAl9CiAKIAl3aGlsZSAobnItLSkgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gKnNyYysrOwogCi0JCWlmICh0b3RhbCkgewotCQkJaWYgKCFjZS0+Y2VfbW9kZSB8fCBjZS0+Y2VfZmxhZ3MgJiBtYXNrKSB7Ci0JCQkJdW5zaWduZWQgcGVyY2VudDsKLQkJCQljbnQrKzsKLQkJCQlwZXJjZW50ID0gKGNudCAqIDEwMCkgLyB0b3RhbDsKLQkJCQlpZiAocGVyY2VudCAhPSBsYXN0X3BlcmNlbnQgfHwKLQkJCQkgICAgcHJvZ3Jlc3NfdXBkYXRlKSB7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCV1LyV1KSBkb25lXHIiLAotCQkJCQkJcGVyY2VudCwgY250LCB0b3RhbCk7Ci0JCQkJCWxhc3RfcGVyY2VudCA9IHBlcmNlbnQ7Ci0JCQkJCXByb2dyZXNzX3VwZGF0ZSA9IDA7Ci0JCQkJfQotCQkJfQotCQl9CisJCWlmICh0b3RhbCkKKwkJCWlmICghY2UtPmNlX21vZGUgfHwgY2UtPmNlX2ZsYWdzICYgbWFzaykKKwkJCQlkaXNwbGF5X3Byb2dyZXNzKCZwcm9ncmVzcywgKytjbnQpOwogCQlpZiAoIWNlLT5jZV9tb2RlKSB7CiAJCQlpZiAoby0+dXBkYXRlKQogCQkJCXVubGlua19lbnRyeShjZS0+bmFtZSk7CkBAIC0zNjcsMTUgKzMyNiwxMiBAQAogCQkJCWNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsIE5VTEwpOwogCQl9CiAJfQotCWlmICh0b3RhbCkgewotCQlzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7Ci0JCWZwdXRjKCdcbicsIHN0ZGVycik7Ci0JfQorCWlmICh0b3RhbCkKKwkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOzsKIH0KIAogaW50IHVucGFja190cmVlcyhzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnRyZWVzLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7Ci0JaW50IGluZHBvcyA9IDA7CiAJdW5zaWduZWQgbGVuID0gb2JqZWN0X2xpc3RfbGVuZ3RoKHRyZWVzKTsKIAlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICoqcG9zbnM7CiAJaW50IGk7CkBAIC00MDQsNyArMzYwLDcgQEAKIAkJCXBvc24gPSBwb3NuLT5uZXh0OwogCQl9CiAJCWlmICh1bnBhY2tfdHJlZXNfcmVjKHBvc25zLCBsZW4sIG8tPnByZWZpeCA/IG8tPnByZWZpeCA6ICIiLAotCQkJCSAgICAgbywgJmluZHBvcywgJmRmX2NvbmZsaWN0X2xpc3QpKQorCQkJCSAgICAgbywgJmRmX2NvbmZsaWN0X2xpc3QpKQogCQkJcmV0dXJuIC0xOwogCX0KIApAQCAtNDY3LDYgKzQyMyw2NCBAQAogCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChhY3RpdmVfY2FjaGVfdHJlZSwgY2UtPm5hbWUpOwogfQogCitzdGF0aWMgaW50IHZlcmlmeV9jbGVhbl9zdWJkaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqYWN0aW9uLAorCQkJCSAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwkvKgorCSAqIHdlIGFyZSBhYm91dCB0byBleHRyYWN0ICJwYXRoIjsgd2Ugd291bGQgbm90IHdhbnQgdG8gbG9zZQorCSAqIGFueXRoaW5nIGluIHRoZSBleGlzdGluZyBkaXJlY3RvcnkgdGhlcmUuCisJICovCisJaW50IG5hbWVsZW47CisJaW50IHBvcywgaTsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkOworCWNoYXIgKnBhdGhidWY7CisJaW50IGNudCA9IDA7CisKKwkvKgorCSAqIEZpcnN0IGxldCdzIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGxvY2FsIG1vZGlmaWNhdGlvbgorCSAqIGluIHRoYXQgZGlyZWN0b3J5LgorCSAqLworCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gY250OyAvKiB3ZSBoYXZlIGl0IGFzIG5vbmRpcmVjdG9yeSAqLworCXBvcyA9IC1wb3MgLSAxOworCWZvciAoaSA9IHBvczsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWludCBsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJaWYgKGxlbiA8IG5hbWVsZW4gfHwKKwkJICAgIHN0cm5jbXAocGF0aCwgY2UtPm5hbWUsIG5hbWVsZW4pIHx8CisJCSAgICBjZS0+bmFtZVtuYW1lbGVuXSAhPSAnLycpCisJCQlicmVhazsKKwkJLyoKKwkJICogY2UtPm5hbWUgaXMgYW4gZW50cnkgaW4gdGhlIHN1YmRpcmVjdG9yeS4KKwkJICovCisJCWlmICghY2Vfc3RhZ2UoY2UpKSB7CisJCQl2ZXJpZnlfdXB0b2RhdGUoY2UsIG8pOworCQkJY2UtPmNlX21vZGUgPSAwOworCQl9CisJCWNudCsrOworCX0KKworCS8qCisJICogVGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCBsb3NlIGEgbG9jYWxseQorCSAqIHByZXNlbnQgZmlsZSB0aGF0IGlzIG5vdCBpZ25vcmVkLgorCSAqLworCXBhdGhidWYgPSB4bWFsbG9jKG5hbWVsZW4gKyAyKTsKKwltZW1jcHkocGF0aGJ1ZiwgcGF0aCwgbmFtZWxlbik7CisJc3RyY3B5KHBhdGhidWYrbmFtZWxlbiwgIi8iKTsKKworCW1lbXNldCgmZCwgMCwgc2l6ZW9mKGQpKTsKKwlpZiAoby0+ZGlyKQorCQlkLmV4Y2x1ZGVfcGVyX2RpciA9IG8tPmRpci0+ZXhjbHVkZV9wZXJfZGlyOworCWkgPSByZWFkX2RpcmVjdG9yeSgmZCwgcGF0aCwgcGF0aGJ1ZiwgbmFtZWxlbisxLCBOVUxMKTsKKwlpZiAoaSkKKwkJZGllKCJVcGRhdGluZyAnJXMnIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0IiwKKwkJICAgIHBhdGgpOworCWZyZWUocGF0aGJ1Zik7CisJcmV0dXJuIGNudDsKK30KKwogLyoKICAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CiAgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCkBAIC00NzgsOSArNDkyLDYyIEBACiAKIAlpZiAoby0+aW5kZXhfb25seSB8fCBvLT5yZXNldCB8fCAhby0+dXBkYXRlKQogCQlyZXR1cm47Ci0JaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmICEoby0+ZGlyICYmIGV4Y2x1ZGVkKG8tPmRpciwgcGF0aCkpKQorCisJaWYgKCFsc3RhdChwYXRoLCAmc3QpKSB7CisJCWludCBjbnQ7CisKKwkJaWYgKG8tPmRpciAmJiBleGNsdWRlZChvLT5kaXIsIHBhdGgpKQorCQkJLyoKKwkJCSAqIHBhdGggaXMgZXhwbGljaXRseSBleGNsdWRlZCwgc28gaXQgaXMgT2sgdG8KKwkJCSAqIG92ZXJ3cml0ZSBpdC4KKwkJCSAqLworCQkJcmV0dXJuOworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJLyoKKwkJCSAqIFdlIGFyZSBjaGVja2luZyBvdXQgcGF0aCAiZm9vIiBhbmQKKwkJCSAqIGZvdW5kICJmb28vLiIgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwkJCSAqIFRoaXMgaXMgdHJpY2t5IC0tIGlmIHdlIGhhdmUgbW9kaWZpZWQKKwkJCSAqIGZpbGVzIHRoYXQgYXJlIGluICJmb28vIiB3ZSB3b3VsZCBsb3NlCisJCQkgKiBpdC4KKwkJCSAqLworCQkJY250ID0gdmVyaWZ5X2NsZWFuX3N1YmRpcmVjdG9yeShwYXRoLCBhY3Rpb24sIG8pOworCisJCQkvKgorCQkJICogSWYgdGhpcyByZW1vdmVkIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgsCisJCQkgKiB3aGF0IHRoYXQgbWVhbnMgaXM6CisJCQkgKgorCQkJICogKDEpIHRoZSBjYWxsZXIgdW5wYWNrX3RyZWVzX3JlYygpIHNhdyBwYXRoL2ZvbworCQkJICogaW4gdGhlIGluZGV4LCBhbmQgaXQgaGFzIG5vdCByZW1vdmVkIGl0IGJlY2F1c2UKKwkJCSAqIGl0IHRoaW5rcyBpdCBpcyBoYW5kbGluZyAncGF0aCcgYXMgYmxvYiB3aXRoCisJCQkgKiBEL0YgY29uZmxpY3Q7CisJCQkgKiAoMikgd2Ugd2lsbCByZXR1cm4gIm9rLCB3ZSBwbGFjZWQgYSBtZXJnZWQgZW50cnkKKwkJCSAqIGluIHRoZSBpbmRleCIgd2hpY2ggd291bGQgY2F1c2Ugby0+cG9zIHRvIGJlCisJCQkgKiBpbmNyZW1lbnRlZCBieSBvbmU7CisJCQkgKiAoMykgaG93ZXZlciwgb3JpZ2luYWwgby0+cG9zIG5vdyBoYXMgJ3BhdGgvZm9vJworCQkJICogbWFya2VkIHdpdGggInRvIGJlIHJlbW92ZWQiLgorCQkJICoKKwkJCSAqIFdlIG5lZWQgdG8gaW5jcmVtZW50IGl0IGJ5IHRoZSBudW1iZXIgb2YKKwkJCSAqIGRlbGV0ZWQgZW50cmllcyBoZXJlLgorCQkJICovCisJCQlvLT5wb3MgKz0gY250OworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogVGhlIHByZXZpb3VzIHJvdW5kIG1heSBhbHJlYWR5IGhhdmUgZGVjaWRlZCB0bworCQkgKiBkZWxldGUgdGhpcyBwYXRoLCB3aGljaCBpcyBpbiBhIHN1YmRpcmVjdG9yeSB0aGF0CisJCSAqIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBibG9iLgorCQkgKi8KKwkJY250ID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwkJaWYgKDAgPD0gY250KSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2NudF07CisJCQlpZiAoIWNlX3N0YWdlKGNlKSAmJiAhY2UtPmNlX21vZGUpCisJCQkJcmV0dXJuOworCQl9CisKIAkJZGllKCJVbnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGUgJyVzJyAiCiAJCSAgICAid291bGQgYmUgJXMgYnkgbWVyZ2UuIiwgcGF0aCwgYWN0aW9uKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgbWVyZ2VkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqbWVyZ2UsIHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkLApAQCAtNTI1LDcgKzU5Miw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQga2VlcF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorc3RhdGljIGludCBrZWVwX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKIAlhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQpOwogCXJldHVybiAxOwpAQCAtNTU2LDcgKzYyMyw2IEBACiAJaW50IGNvdW50OwogCWludCBoZWFkX21hdGNoID0gMDsKIAlpbnQgcmVtb3RlX21hdGNoID0gMDsKLQljb25zdCBjaGFyICpwYXRoID0gTlVMTDsKIAogCWludCBkZl9jb25mbGljdF9oZWFkID0gMDsKIAlpbnQgZGZfY29uZmxpY3RfcmVtb3RlID0gMDsKQEAgLTU2NiwxMyArNjMyLDEwIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgewotCQlpZiAoIXN0YWdlc1tpXSkKKwkJaWYgKCFzdGFnZXNbaV0gfHwgc3RhZ2VzW2ldID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQogCQkJYW55X2FuY19taXNzaW5nID0gMTsKLQkJZWxzZSB7Ci0JCQlpZiAoIXBhdGgpCi0JCQkJcGF0aCA9IHN0YWdlc1tpXS0+bmFtZTsKKwkJZWxzZQogCQkJbm9fYW5jX2V4aXN0cyA9IDA7Ci0JCX0KIAl9CiAKIAlpbmRleCA9IHN0YWdlc1swXTsKQEAgLTU4OCwxMyArNjUxLDYgQEAKIAkJcmVtb3RlID0gTlVMTDsKIAl9CiAKLQlpZiAoIXBhdGggJiYgaW5kZXgpCi0JCXBhdGggPSBpbmRleC0+bmFtZTsKLQlpZiAoIXBhdGggJiYgaGVhZCkKLQkJcGF0aCA9IGhlYWQtPm5hbWU7Ci0JaWYgKCFwYXRoICYmIHJlbW90ZSkKLQkJcGF0aCA9IHJlbW90ZS0+bmFtZTsKLQogCS8qIEZpcnN0LCBpZiB0aGVyZSdzIGEgIzE2IHNpdHVhdGlvbiwgbm90ZSB0aGF0IHRvIHByZXZlbnQgIzEzCiAJICogYW5kICMxNC4KIAkgKi8KQEAgLTY0Niw2ICs3MDIsMjMgQEAKIAlpZiAoby0+YWdncmVzc2l2ZSkgewogCQlpbnQgaGVhZF9kZWxldGVkID0gIWhlYWQgJiYgIWRmX2NvbmZsaWN0X2hlYWQ7CiAJCWludCByZW1vdGVfZGVsZXRlZCA9ICFyZW1vdGUgJiYgIWRmX2NvbmZsaWN0X3JlbW90ZTsKKwkJY29uc3QgY2hhciAqcGF0aCA9IE5VTEw7CisKKwkJaWYgKGluZGV4KQorCQkJcGF0aCA9IGluZGV4LT5uYW1lOworCQllbHNlIGlmIChoZWFkKQorCQkJcGF0aCA9IGhlYWQtPm5hbWU7CisJCWVsc2UgaWYgKHJlbW90ZSkKKwkJCXBhdGggPSByZW1vdGUtPm5hbWU7CisJCWVsc2UgeworCQkJZm9yIChpID0gMTsgaSA8IG8tPmhlYWRfaWR4OyBpKyspIHsKKwkJCQlpZiAoc3RhZ2VzW2ldICYmIHN0YWdlc1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkgeworCQkJCQlwYXRoID0gc3RhZ2VzW2ldLT5uYW1lOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwogCQkvKgogCQkgKiBEZWxldGVkIGluIGJvdGguCiAJCSAqIERlbGV0ZWQgaW4gb25lIGFuZCB1bmNoYW5nZWQgaW4gdGhlIG90aGVyLgpAQCAtNjc3LDEyICs3NTAsMTIgQEAKIAogCW8tPm5vbnRyaXZpYWxfbWVyZ2UgPSAxOwogCi0JLyogIzIsICMzLCAjNCwgIzYsICM3LCAjOSwgIzExLiAqLworCS8qICMyLCAjMywgIzQsICM2LCAjNywgIzksICMxMCwgIzExLiAqLwogCWNvdW50ID0gMDsKIAlpZiAoIWhlYWRfbWF0Y2ggfHwgIXJlbW90ZV9tYXRjaCkgewogCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgewotCQkJaWYgKHN0YWdlc1tpXSkgewotCQkJCWtlZXBfZW50cnkoc3RhZ2VzW2ldKTsKKwkJCWlmIChzdGFnZXNbaV0gJiYgc3RhZ2VzW2ldICE9IG8tPmRmX2NvbmZsaWN0X2VudHJ5KSB7CisJCQkJa2VlcF9lbnRyeShzdGFnZXNbaV0sIG8pOwogCQkJCWNvdW50Kys7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02OTUsOCArNzY4LDggQEAKIAkJc2hvd19zdGFnZV9lbnRyeShzdGRlcnIsICJyZW1vdGUgIiwgc3RhZ2VzW3JlbW90ZV9tYXRjaF0pOwogCX0KICNlbmRpZgotCWlmIChoZWFkKSB7IGNvdW50ICs9IGtlZXBfZW50cnkoaGVhZCk7IH0KLQlpZiAocmVtb3RlKSB7IGNvdW50ICs9IGtlZXBfZW50cnkocmVtb3RlKTsgfQorCWlmIChoZWFkKSB7IGNvdW50ICs9IGtlZXBfZW50cnkoaGVhZCwgbyk7IH0KKwlpZiAocmVtb3RlKSB7IGNvdW50ICs9IGtlZXBfZW50cnkocmVtb3RlLCBvKTsgfQogCXJldHVybiBjb3VudDsKIH0KIApAQCAtNzEzLDEyICs3ODYsMTggQEAKIAkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY3VycmVudCA9IHNyY1swXTsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZHRyZWUgPSBzcmNbMV0sICpuZXd0cmVlID0gc3JjWzJdOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkdHJlZSA9IHNyY1sxXTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld3RyZWUgPSBzcmNbMl07CiAKIAlpZiAoby0+bWVyZ2Vfc2l6ZSAhPSAyKQogCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBkbyBhIHR3b3dheSBtZXJnZSBvZiAlZCB0cmVlcyIsCiAJCQkgICAgIG8tPm1lcmdlX3NpemUpOwogCisJaWYgKG9sZHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCW9sZHRyZWUgPSBOVUxMOworCWlmIChuZXd0cmVlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQluZXd0cmVlID0gTlVMTDsKKwogCWlmIChjdXJyZW50KSB7CiAJCWlmICgoIW9sZHRyZWUgJiYgIW5ld3RyZWUpIHx8IC8qIDQgYW5kIDUgKi8KIAkJICAgICghb2xkdHJlZSAmJiBuZXd0cmVlICYmCkBAIC03MjYsOSArODA1LDkgQEAKIAkJICAgIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKIAkJICAgICBzYW1lKG9sZHRyZWUsIG5ld3RyZWUpKSB8fCAvKiAxNCBhbmQgMTUgKi8KIAkJICAgIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKLQkJICAgICAhc2FtZShvbGR0cmVlLCBuZXd0cmVlKSAmJiAvKiAxOCBhbmQgMTkqLworCQkgICAgICFzYW1lKG9sZHRyZWUsIG5ld3RyZWUpICYmIC8qIDE4IGFuZCAxOSAqLwogCQkgICAgIHNhbWUoY3VycmVudCwgbmV3dHJlZSkpKSB7Ci0JCQlyZXR1cm4ga2VlcF9lbnRyeShjdXJyZW50KTsKKwkJCXJldHVybiBrZWVwX2VudHJ5KGN1cnJlbnQsIG8pOwogCQl9CiAJCWVsc2UgaWYgKG9sZHRyZWUgJiYgIW5ld3RyZWUgJiYgc2FtZShjdXJyZW50LCBvbGR0cmVlKSkgewogCQkJLyogMTAgb3IgMTEgKi8KQEAgLTc3NCw3ICs4NTMsNyBAQAogCWlmIChhICYmIG9sZCkKIAkJZGllKCJFbnRyeSAnJXMnIG92ZXJsYXBzLiAgQ2Fubm90IGJpbmQuIiwgYS0+bmFtZSk7CiAJaWYgKCFhKQotCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQpOworCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQsIG8pOwogCWVsc2UKIAkJcmV0dXJuIG1lcmdlZF9lbnRyeShhLCBOVUxMLCBvKTsKIH0KQEAgLTgwNCw3ICs4ODMsNyBAQAogCQkJICAgIGNlX21hdGNoX3N0YXQob2xkLCAmc3QsIDEpKQogCQkJCW9sZC0+Y2VfZmxhZ3MgfD0gaHRvbnMoQ0VfVVBEQVRFKTsKIAkJfQotCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQpOworCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQsIG8pOwogCX0KIAlyZXR1cm4gbWVyZ2VkX2VudHJ5KGEsIG9sZCwgbyk7CiB9CmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuaCBiL3VucGFjay10cmVlcy5oCmluZGV4IDE5MWY3NDQuLmZlZTdkYTQgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5oCisrKyBiL3VucGFjay10cmVlcy5oCkBAIC0xNiw2ICsxNiw3IEBACiAJaW50IHZlcmJvc2VfdXBkYXRlOwogCWludCBhZ2dyZXNzaXZlOwogCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlpbnQgcG9zOwogCXN0cnVjdCBkaXJfc3RydWN0ICpkaXI7CiAJbWVyZ2VfZm5fdCBmbjsKIApkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwppbmRleCBhMjU2MzJiLi5hMDU1OTkwIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuYworKysgYi93dC1zdGF0dXMuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaWYgKGZpbGVfZXhpc3RzKHgpKQogCQlhZGRfZXhjbHVkZXNfZnJvbV9maWxlKCZkaXIsIHgpOwogCi0JcmVhZF9kaXJlY3RvcnkoJmRpciwgIi4iLCAiIiwgMCk7CisJcmVhZF9kaXJlY3RvcnkoJmRpciwgIi4iLCAiIiwgMCwgTlVMTCk7CiAJZm9yKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKIAkJLyogY2hlY2sgZm9yIG1hdGNoaW5nIGVudHJ5LCB3aGljaCBpcyB1bm1lcmdlZDsgbGlmdGVkIGZyb20KIAkJICogYnVpbHRpbi1scy1maWxlczpzaG93X290aGVyX2ZpbGVzICovCg==