From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Clark Subject: Re: Unstableness in grant table block drivers Date: Mon, 18 Apr 2005 09:38:50 -0700 Message-ID: References: <20050416153922.GH27157@us.ibm.com> Reply-To: cwc22@cam.ac.uk Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_20398_14467821.1113842330305" Return-path: In-Reply-To: <20050416153922.GH27157@us.ibm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ryan Harper , Anthony Liguori Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org ------=_Part_20398_14467821.1113842330305 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline > > Ryan: is this an SMP guest? >=20 > Yes, that only shows up when trying to boot an SMP guest. Does the crash only occur when trying to boot an SMP guest - ie. do UP guests start correctly? Ryan and Anthony: I've attached a patch that I'd like you to apply to your unstable tree -- it just printk's almost everything so I can get an idea of the code path you're running. Alternatively, the three .c files modified by the patch are also attached - they're taken from 2005-04-14 unstable and you should be able to just replace the files in your tree. After changing your tree and rebuilding, please send the console logs from boot onwards for xen/dom0 and domU, in a uniprocessor configuration, both with and without using grant tables for block transport. thanks Christopher ------=_Part_20398_14467821.1113842330305 Content-Type: text/x-patch; name="instrument.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="instrument.patch" PT09PT0gbGludXgtMi42LjExLXhlbi1zcGFyc2UvZHJpdmVycy94ZW4vYmxrYmFjay9ibGtiYWNr LmMgMS4zOCB2cyBlZGl0ZWQgPT09PT0KLS0tIDEuMzgvbGludXgtMi42LjExLXhlbi1zcGFyc2Uv ZHJpdmVycy94ZW4vYmxrYmFjay9ibGtiYWNrLmMJMjAwNS0wNC0wNSAwNToyODowNSAtMDc6MDAK KysrIGVkaXRlZC9saW51eC0yLjYuMTEteGVuLXNwYXJzZS9kcml2ZXJzL3hlbi9ibGtiYWNrL2Js a2JhY2suYwkyMDA1LTA0LTE3IDIxOjE0OjM4IC0wNzowMApAQCAtMTE1LDYgKzExNSw3IEBACiAK IHN0YXRpYyB2b2lkIGZhc3RfZmx1c2hfYXJlYShpbnQgaWR4LCBpbnQgbnJfcGFnZXMpCiB7Cisg ICAgcHJpbnRrKCJjd2M6JXM6aW5cbiIsIF9fRlVOQ1RJT05fXyk7CiAjaWZkZWYgQ09ORklHX1hF Tl9CTEtERVZfR1JBTlQKICAgICBnbnR0YWJfb3BfdCAgICAgICBhb3BbQkxLSUZfTUFYX1NFR01F TlRTX1BFUl9SRVFVRVNUXTsKICAgICB1bnNpZ25lZCBpbnQgICAgICBpLCBpbnZjb3VudCA9IDA7 CkBAIC0xNTEsNiArMTUyLDcgQEAKICAgICBpZiAoIHVubGlrZWx5KEhZUEVSVklTT1JfbXVsdGlj YWxsKG1jbCwgbnJfcGFnZXMpICE9IDApICkKICAgICAgICAgQlVHKCk7CiAjZW5kaWYKKyAgICBw cmludGsoImN3YzolczpvdXRcbiIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKIApAQCAtMzc0LDYgKzM3 Niw3IEBACiB7CiAgICAgaW50IHJzcCA9IEJMS0lGX1JTUF9FUlJPUjsKICAgICBpbnQgcGVuZGlu Z19pZHggPSBwZW5kaW5nX3JpbmdbTUFTS19QRU5EX0lEWChwZW5kaW5nX2NvbnMpXTsKKyAgICBw cmludGsoImN3YzolczppbiBpZDolbHVcbiIsIF9fRlVOQ1RJT05fXywgcmVxLT5pZCk7CiAKICAg ICAvKiBXZSBleHBlY3Qgb25lIGJ1ZmZlciBvbmx5LiAqLwogICAgIGlmICggdW5saWtlbHkocmVx LT5ucl9zZWdtZW50cyAhPSAxKSApCkBAIC0zODQsNiArMzg3LDcgQEAKICAgICAgICAgIChibGtp Zl9sYXN0X3NlY3QocmVxLT5mcmFtZV9hbmRfc2VjdHNbMF0pICE9IDcpICkKICAgICAgICAgZ290 byBvdXQ7CiAKKyAgICBwcmludGsoImN3YzolczptaWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAjaWZk ZWYgQ09ORklHX1hFTl9CTEtERVZfR1JBTlQKICAgICB7CiAgICAgICAgIGdudHRhYl9vcF90ICAg ICBvcDsKQEAgLTQyOCwxMiArNDMyLDE0IEBACiAjZW5kaWYKICNlbmRpZiAvKiBlbmRpZiBDT05G SUdfWEVOX0JMS0RFVl9HUkFOVCAqLwogICAgCisgICAgcHJpbnRrKCJjd2M6JXM6dmJkX3Byb2Jl XG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHJzcCA9IHZiZF9wcm9iZShibGtpZiwgKHZkaXNrX3Qg KilNTUFQX1ZBRERSKHBlbmRpbmdfaWR4LCAwKSwgCiAgICAgICAgICAgICAgICAgICAgIFBBR0Vf U0laRSAvIHNpemVvZih2ZGlza190KSk7CiAKICBvdXQ6CiAgICAgZmFzdF9mbHVzaF9hcmVhKHBl bmRpbmdfaWR4LCAxKTsKICAgICBtYWtlX3Jlc3BvbnNlKGJsa2lmLCByZXEtPmlkLCByZXEtPm9w ZXJhdGlvbiwgcnNwKTsKKyAgICBwcmludGsoImN3YzolczpvdXQgcmVzcG9uc2U6JWRcbiIsIF9f RlVOQ1RJT05fXywgcnNwKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzcGF0Y2hfcndfYmxvY2tfaW8o YmxraWZfdCAqYmxraWYsIGJsa2lmX3JlcXVlc3RfdCAqcmVxKQpAQCAtNDY0LDYgKzQ3MCw3IEBA CiAKICAgICAvKiBDaGVjayB0aGF0IG51bWJlciBvZiBzZWdtZW50cyBpcyBzYW5lLiAqLwogICAg IG5zZWcgPSByZXEtPm5yX3NlZ21lbnRzOworICAgIHByaW50aygiY3djOiVzOmluIG5zZWdzOiV1 XG4iLCBfX0ZVTkNUSU9OX18sIG5zZWcpOwogICAgIGlmICggdW5saWtlbHkobnNlZyA9PSAwKSB8 fCAKICAgICAgICAgIHVubGlrZWx5KG5zZWcgPiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVF U1QpICkKICAgICB7CkBAIC00OTcsNiArNTA0LDcgQEAKICAgICBpZiAoIHVubGlrZWx5KEhZUEVS VklTT1JfZ3JhbnRfdGFibGVfb3AoCiAgICAgICAgICAgICAgICAgICAgIEdOVFRBQk9QX21hcF9n cmFudF9yZWYsIGFvcCwgbnNlZykpKQogICAgICAgICBCVUcoKTsKKyAgICBwcmludGsoImN3Yzol czpwb3N0IG1hcFxuIiwgX19GVU5DVElPTl9fKTsKIAogICAgIGZvciAoIGkgPSAwOyBpIDwgbnNl ZzsgaSsrICkKICAgICB7CkBAIC01MTMsNiArNTIxLDcgQEAKICAgICAgICAgcGVuZGluZ19oYW5k bGUocGVuZGluZ19pZHgsIGkpID0gYW9wW2ldLnUubWFwX2dyYW50X3JlZi5oYW5kbGU7CiAgICAg fQogI2VuZGlmCisgICAgcHJpbnRrKCJjd2M6JXM6cHJlIHBvcHVsYXRlIHNlZ3NcbiIsIF9fRlVO Q1RJT05fXyk7CiAKICAgICBmb3IgKCBpID0gMDsgaSA8IG5zZWc7IGkrKyApCiAgICAgewpAQCAt NTI3LDYgKzUzNiw4IEBACiAgICAgICAgICAgICBnb3RvIGJhZF9kZXNjcmlwdG9yOwogICAgICAg ICBwcmVxLm5yX3NlY3RzICs9IHNlZ1tpXS5uc2VjOwogI2VuZGlmCisgICAgIAlwcmludGsoImN3 YzolczogYnVmOiVseCBwb3B1bGF0ZWQgJXUgc2VjdHNcbiIsCisgICAgICAgICAgICAgICBfX0ZV TkNUSU9OX18sIHNlZ1tpXS5idWYsIHNlZ1tpXS5uc2VjKTsKICAgICB9CiAKICAgICBpZiAoIHZi ZF90cmFuc2xhdGUoJnByZXEsIGJsa2lmLCBvcGVyYXRpb24pICE9IDAgKQpAQCAtNjQ2LDYgKzY1 Nyw3IEBACiAKICAgICAgICAgcHJlcS5zZWN0b3JfbnVtYmVyICs9IHNlZ1tpXS5uc2VjOwogICAg IH0KKyAgICBwcmludGsoImN3YzolczogcG9zdCBiaW9fYWRkX3BhZ2VcbiIsIF9fRlVOQ1RJT05f Xyk7CiAKICAgICBpZiAoIChxID0gYmRldl9nZXRfcXVldWUoYmlvLT5iaV9iZGV2KSkgIT0gcGx1 Z2dlZF9xdWV1ZSApCiAgICAgewpAQCAtNjYyLDExICs2NzQsMTMgQEAKICAgICAgICAgc3VibWl0 X2JpbyhvcGVyYXRpb24sIGJpb2xpc3RbaV0pOwogCiAjZW5kaWYKKyAgICBwcmludGsoImN3Yzol czogJWQgYmlvcyBzdWJtaXR0ZWRcbiIsIF9fRlVOQ1RJT05fXywgbmJpbyk7CiAKICAgICByZXR1 cm47CiAKICBiYWRfZGVzY3JpcHRvcjoKICAgICBtYWtlX3Jlc3BvbnNlKGJsa2lmLCByZXEtPmlk LCByZXEtPm9wZXJhdGlvbiwgQkxLSUZfUlNQX0VSUk9SKTsKKyAgICBwcmludGsoImN3Yzolczog JWQgYmFkIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CiB9IAogCiAKPT09PT0gbGludXgt Mi42LjExLXhlbi1zcGFyc2UvZHJpdmVycy94ZW4vYmxrZnJvbnQvYmxrZnJvbnQuYyAxLjUyIHZz IGVkaXRlZCA9PT09PQotLS0gMS41Mi9saW51eC0yLjYuMTEteGVuLXNwYXJzZS9kcml2ZXJzL3hl bi9ibGtmcm9udC9ibGtmcm9udC5jCTIwMDUtMDQtMDUgMDA6NDM6NDAgLTA3OjAwCisrKyBlZGl0 ZWQvbGludXgtMi42LjExLXhlbi1zcGFyc2UvZHJpdmVycy94ZW4vYmxrZnJvbnQvYmxrZnJvbnQu YwkyMDA1LTA0LTE3IDIyOjM0OjIxIC0wNzowMApAQCAtMjI2LDYgKzIyNiw3IEBACiB7CiAgICAg c3RydWN0IGdlbmRpc2sgKmdkID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKICAgICBzdHJ1Y3Qg eGxiZF9kaXNrX2luZm8gKmRpID0gKHN0cnVjdCB4bGJkX2Rpc2tfaW5mbyAqKWdkLT5wcml2YXRl X2RhdGE7CisgICAgcHJpbnRrKCJjd2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAog ICAgIC8qIFVwZGF0ZSBvZiB1c2FnZSBjb3VudCBpcyBwcm90ZWN0ZWQgYnkgcGVyLWRldmljZSBz ZW1hcGhvcmUuICovCiAgICAgZGktPm1pLT51c2FnZSsrOwpAQCAtMjM4LDYgKzIzOSw3IEBACiB7 CiAgICAgc3RydWN0IGdlbmRpc2sgKmdkID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKICAgICBz dHJ1Y3QgeGxiZF9kaXNrX2luZm8gKmRpID0gKHN0cnVjdCB4bGJkX2Rpc2tfaW5mbyAqKWdkLT5w cml2YXRlX2RhdGE7CisgICAgcHJpbnRrKCJjd2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9f KTsKIAogICAgIC8qCiAgICAgICogV2hlbiB1c2FnZSBkcm9wcyB0byB6ZXJvIGl0IG1heSBhbGxv dyBtb3JlIFZCRCB1cGRhdGVzIHRvIG9jY3VyLgpAQCAtMjU1LDYgKzI1Nyw3IEBACiAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmd1bWVudCkKIHsKICAg ICBpbnQgaTsKKyAgICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwog CiAgICAgRFBSSU5US19JT0NUTCgiY29tbWFuZDogMHgleCwgYXJndW1lbnQ6IDB4JWx4LCBkZXY6 IDB4JTA0eFxuIiwKICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIChsb25nKWFyZ3VtZW50LCBp bm9kZS0+aV9yZGV2KTsgCkBAIC0zMDUsNiArMzA4LDcgQEAKICNpZmRlZiBDT05GSUdfWEVOX0JM S0RFVl9HUkFOVAogICAgIGludCByZWY7CiAjZW5kaWYKKyAgICBwcmludGsoImN3YzolczogaW4g YmxraWZfc3RhdGU6JXVcbiIsIF9fRlVOQ1RJT05fXywgYmxraWZfc3RhdGUpOwogCiAgICAgaWYg KCB1bmxpa2VseShibGtpZl9zdGF0ZSAhPSBCTEtJRl9TVEFURV9DT05ORUNURUQpICkKICAgICAg ICAgcmV0dXJuIDE7CkBAIC0zNTUsNiArMzU5LDcgQEAKICAgICAvKiBLZWVwIGEgcHJpdmF0ZSBj b3B5IHNvIHdlIGNhbiByZWlzc3VlIHJlcXVlc3RzIHdoZW4gcmVjb3ZlcmluZy4gKi8KICAgICB0 cmFuc2xhdGVfcmVxX3RvX3BmbigmcmVjX3JpbmdbaWRdLCByaW5nX3JlcSk7CiAKKyAgICBwcmlu dGsoImN3Yzolczogb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiAwOwogfQogCkBA IC0zNjcsNiArMzcyLDcgQEAKIHsKICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogICAgIGludCBx dWV1ZWQ7CisgICAgcHJpbnRrKCJjd2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAog ICAgIERQUklOVEsoIkVudGVyZWQgZG9fYmxraWZfcmVxdWVzdFxuIik7IAogCkBAIC00MDcsMTIg KzQxMywxNSBAQAogICAgIFJJTkdfSURYIGksIHJwOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7 IAogICAgIAorICAgIHByaW50aygiY3djOiVzOiBwcmUgc3Bpbl9sb2NrX2lycXNhdmVcbiIsIF9f RlVOQ1RJT05fXyk7CiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdz KTsgICAgIAorICAgIHByaW50aygiY3djOiVzOiBwb3N0IHNwaW5fbG9ja19pcnFzYXZlXG4iLCBf X0ZVTkNUSU9OX18pOwogCiAgICAgaWYgKCB1bmxpa2VseShibGtpZl9zdGF0ZSA9PSBCTEtJRl9T VEFURV9DTE9TRUQpIHx8IAogICAgICAgICAgdW5saWtlbHkocmVjb3ZlcnkpICkKICAgICB7CiAg ICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsKKyAg ICAgICAgcHJpbnRrKCJjd2M6JXM6IHNwaW5fdW5sb2NrX2lycXNhdmVcbiIsIF9fRlVOQ1RJT05f Xyk7CiAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKICAgICB9CiAgICAgCkBAIC00MjYsNiAr NDM1LDcgQEAKICAgICAgICAgYnJldCA9IFJJTkdfR0VUX1JFU1BPTlNFKCZibGtfcmluZywgaSk7 CiAgICAgICAgIGlkID0gYnJldC0+aWQ7CiAgICAgICAgIHJlcSA9IChzdHJ1Y3QgcmVxdWVzdCAq KXJlY19yaW5nW2lkXS5pZDsKKyAgICAgICAgcHJpbnRrKCJjd2M6JXM6IGJsa2lmX2NvbXBsZXRp b24gY2FsbCBpZCAlbHVcbiIsIF9fRlVOQ1RJT05fXywgaWQpOwogICAgICAgICBibGtpZl9jb21w bGV0aW9uKCAmcmVjX3JpbmdbaWRdICk7CiAKICAgICAgICAgQUREX0lEX1RPX0ZSRUVMSVNUKGlk KTsgLyogb3ZlcndyaXRlcyByZXEgKi8KQEAgLTQ1NCwxMiArNDY0LDE0IEBACiAgICAgICAgICAg ICBCVUcoKTsKICAgICAgICAgfQogICAgIH0KKyAgICBwcmludGsoImN3YzolczogcG9zdCBsb29w XG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgYmxrX3JpbmcucnNwX2NvbnMgPSBpOwogICAgIAog ICAgIGtpY2tfcGVuZGluZ19yZXF1ZXN0X3F1ZXVlcygpOwogCiAgICAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmYmxraWZfaW9fbG9jaywgZmxhZ3MpOworICAgIHByaW50aygiY3djOiVzOiBvdXQg dW5sb2NrX2lycV9yZXN0b3JlXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgcmV0dXJuIElSUV9I QU5ETEVEOwogfQpAQCAtNzY4LDYgKzc4MCw3IEBACiAjaWZkZWYgQ09ORklHX1hFTl9CTEtERVZf R1JBTlQKICAgICBpbnQgcmVmOwogI2VuZGlmCisgICAgcHJpbnRrKCJjd2M6JXM6IGluIG9wOiVk XG4iLCBfX0ZVTkNUSU9OX18sIG9wZXJhdGlvbik7CiAKICAgICBmc2VjdCA9IChidWZmZXJfbWEg JiB+UEFHRV9NQVNLKSA+PiA5OwogICAgIGxzZWN0ID0gZnNlY3QgKyBucl9zZWN0b3JzIC0gMTsK QEAgLTgwOSw2ICs4MjIsNyBAQAogICAgICAgICAgICAgIChzZ19kZXYgPT0gZGV2aWNlKSAmJgog ICAgICAgICAgICAgIChzZ19uZXh0X3NlY3QgPT0gc2VjdG9yX251bWJlcikgKQogICAgICAgICB7 CisgICAgICAgICAgICBwcmludGsoImN3YzolczogYnVpbGRpbmcgcmVxXG4iLCBfX0ZVTkNUSU9O X18pOwogICAgICAgICAgICAgcmVxID0gUklOR19HRVRfUkVRVUVTVCgmYmxrX3JpbmcsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGtfcmluZy5yZXFfcHJvZF9wdnQgLSAx KTsKICAgICAgICAgICAgIGJoID0gKHN0cnVjdCBidWZmZXJfaGVhZCAqKWlkOwpAQCAtODQyLDEw ICs4NTYsMTIgQEAKICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgY29weSBvZiB0aGUgcmVxdWVz dCBpbiB0aGUgcmVjb3ZlcnkgcmluZy4gKi8KICAgICAgICAgICAgIHRyYW5zbGF0ZV9yZXFfdG9f cGZuKCZyZWNfcmluZ1tyZXEtPmlkXSwgcmVxICk7CiAKKyAgICAgICAgICAgIHByaW50aygiY3dj OiVzOiBhY2Nlc3MgZ3JhbnRlZCB0byAlbHhcbiIsIF9fRlVOQ1RJT05fXywgYnVmZmVyX21hKTsK ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCBSSU5H X0ZVTEwoJmJsa19yaW5nKSApCiAgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiY3djOiVz OiByaW5nIGZ1bGxcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAg ICAgICAgfQogICAgICAgICBlbHNlCkBAIC04NTcsOCArODczLDEyIEBACiAgICAgICAgIGJyZWFr OwogCiAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICBwcmludGsoImN3YzolczogcHJl IHBhbmljIGZvciB1bmtub3duIG9wICVkXG4iLCBfX0ZVTkNUSU9OX18sIG9wZXJhdGlvbik7CiAg ICAgICAgIHBhbmljKCJ1bmtub3duIG9wICVkXG4iLCBvcGVyYXRpb24pOworICAgICAgICB9CiAg ICAgfQorICAgIHByaW50aygiY3djOiVzOiBtaWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKICAgICAv KiBGaWxsIG91dCBhIGNvbW11bmljYXRpb25zIHJpbmcgc3RydWN0dXJlLiAqLwogICAgIHJlcSA9 IFJJTkdfR0VUX1JFUVVFU1QoJmJsa19yaW5nLCBibGtfcmluZy5yZXFfcHJvZF9wdnQpOwpAQCAt ODkyLDYgKzkxMiw3IEBACiAKICAgICBibGtfcmluZy5yZXFfcHJvZF9wdnQrKzsKICAgICAKKyAg ICBwcmludGsoImN3Yzolczogb3V0IGJ1ZjolbHhcbiIsIF9fRlVOQ1RJT05fXywgYnVmZmVyX21h KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTA1MSw2ICsxMDcyLDcgQEAKICAgICBBU1NFUlQo IHJlZiAhPSAtRU5PU1BDICk7CiAKICAgICBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVm KCByZWYsIHJkb21pZCwgYWRkcmVzcyA+PiBQQUdFX1NISUZULCAwICk7CisgICAgcHJpbnRrKCJj d2M6JXM6IGdyYW50IGFjY2VzcyB0byBidWY6JWx4XG4iLCBfX0ZVTkNUSU9OX18sIGFkZHJlc3Mg Pj4gUEFHRV9TSElGVCk7CiAKICAgICByZXEtPmZyYW1lX2FuZF9zZWN0c1swXSA9ICgoKHUzMikg cmVmKSA8PCAxNikgfCA3OwogCkBAIC0xMDYyLDYgKzEwODQsNyBAQAogewogICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3MsIGlkOwogICAgIGJsa2lmX3JlcXVlc3RfdCAqcmVxX2Q7CisgICAgcHJpbnRr KCJjd2M6JXM6IGluXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgcmV0cnk6CiAgICAgd2hpbGUgKCBS SU5HX0ZVTEwoJmJsa19yaW5nKSApCkBAIC0xMDcwLDkgKzEwOTMsMTIgQEAKICAgICAgICAgc2No ZWR1bGVfdGltZW91dCgxKTsKICAgICB9CiAKKyAgICBwcmludGsoImN3YzolczogcHJlIHNwaW5f bG9ja19pcnFzYXZlXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZi bGtpZl9pb19sb2NrLCBmbGFncyk7CisgICAgcHJpbnRrKCJjd2M6JXM6IHBvc3Qgc3Bpbl9sb2Nr X2lycXNhdmVcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgaWYgKCBSSU5HX0ZVTEwoJmJsa19yaW5n KSApCiAgICAgeworICAgICAgICBwcmludGsoImN3Yzolczogc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZVxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxr aWZfaW9fbG9jaywgZmxhZ3MpOwogICAgICAgICBnb3RvIHJldHJ5OwogICAgIH0KQEAgLTEwOTAs NiArMTExNiw3IEBACiAgICAgYmxrX3JpbmcucmVxX3Byb2RfcHZ0Kys7CiAgICAgZmx1c2hfcmVx dWVzdHMoKTsKIAorICAgIHByaW50aygiY3djOiVzOiBzcGluX3VubG9ja19pcnFyZXN0b3JlIDJc biIsIF9fRlVOQ1RJT05fXyk7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxraWZfaW9f bG9jaywgZmxhZ3MpOwogCiAgICAgd2hpbGUgKCAhYmxraWZfY29udHJvbF9yc3BfdmFsaWQgKQpA QCAtMTEwMCw2ICsxMTI3LDcgQEAKIAogICAgIG1lbWNweShyc3AsICZibGtpZl9jb250cm9sX3Jz cCwgc2l6ZW9mKCpyc3ApKTsKICAgICBibGtpZl9jb250cm9sX3JzcF92YWxpZCA9IDA7CisgICAg cHJpbnRrKCJjd2M6JXM6IG91dFxuIiwgX19GVU5DVElPTl9fKTsKIH0KIAogCkBAIC0xMTE1LDYg KzExNDMsNyBAQAogICAgIAogICAgIG1zZy0+c3RhdHVzID0gKG9rID8gQkxLSUZfRFJJVkVSX1NU QVRVU19VUCA6IEJMS0lGX0RSSVZFUl9TVEFUVVNfRE9XTik7CiAKKyAgICBwcmludGsoImN3Yzol czogY3RybF9pZl9zZW5kX21lc3NhZ2VfYmxvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgY3Ry bF9pZl9zZW5kX21lc3NhZ2VfYmxvY2soJmNtc2csIE5VTEwsIDAsIFRBU0tfVU5JTlRFUlJVUFRJ QkxFKTsKIH0KIApAQCAtMTEzMSwxNiArMTE2MCwyMCBAQAogICAgIG1zZy0+aGFuZGxlICAgICAg PSAwOwogICAgIG1zZy0+c2htZW1fZnJhbWUgPSAodmlydF90b19tYWNoaW5lKGJsa19yaW5nLnNy aW5nKSA+PiBQQUdFX1NISUZUKTsKICAgICAKKyAgICBwcmludGsoImN3YzolczogY3RybF9pZl9z ZW5kX21lc3NhZ2VfYmxvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgY3RybF9pZl9zZW5kX21l c3NhZ2VfYmxvY2soJmNtc2csIE5VTEwsIDAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIH0KIAog c3RhdGljIHZvaWQgYmxraWZfZnJlZSh2b2lkKQogewogICAgIC8qIFByZXZlbnQgbmV3IHJlcXVl c3RzIGJlaW5nIGlzc3VlZCB1bnRpbCB3ZSBmaXggdGhpbmdzIHVwLiAqLworICAgIHByaW50aygi Y3djOiVzOiBwcmUgc3Bpbl9sb2NrX2lycVxuIiwgX19GVU5DVElPTl9fKTsKICAgICBzcGluX2xv Y2tfaXJxKCZibGtpZl9pb19sb2NrKTsKKyAgICBwcmludGsoImN3YzolczogcG9zdCBzcGluX2xv Y2tfaXJxXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHJlY292ZXJ5ID0gMTsKICAgICBibGtpZl9z dGF0ZSA9IEJMS0lGX1NUQVRFX0RJU0NPTk5FQ1RFRDsKICAgICBzcGluX3VubG9ja19pcnEoJmJs a2lmX2lvX2xvY2spOworICAgIHByaW50aygiY3djOiVzOiBzcGluX3VubG9ja19pcnFcbiIsIF9f RlVOQ1RJT05fXyk7CiAKICAgICAvKiBGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggb2xk IGRldmljZSBjaGFubmVsLiAqLwogICAgIGlmICggYmxrX3Jpbmcuc3JpbmcgIT0gTlVMTCApCkBA IC0xMTUzLDE2ICsxMTg2LDE5IEBACiAgICAgCiAgICAgdW5iaW5kX2V2dGNobl9mcm9tX2lycShi bGtpZl9ldnRjaG4pOwogICAgIGJsa2lmX2V2dGNobiA9IDA7CisgICAgcHJpbnRrKCJjd2M6JXM6 IG91dFxuIiwgX19GVU5DVElPTl9fKTsKIH0KIAogc3RhdGljIHZvaWQgYmxraWZfY2xvc2Uodm9p ZCkKIHsKKyAgICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogfQog CiAvKiBNb3ZlIGZyb20gQ0xPU0VEIHRvIERJU0NPTk5FQ1RFRCBzdGF0ZS4gKi8KIHN0YXRpYyB2 b2lkIGJsa2lmX2Rpc2Nvbm5lY3Qodm9pZCkKIHsKICAgICBibGtpZl9zcmluZ190ICpzcmluZzsK KyAgICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIAogICAg IGlmICggYmxrX3Jpbmcuc3JpbmcgIT0gTlVMTCApCiAgICAgICAgIGZyZWVfcGFnZSgodW5zaWdu ZWQgbG9uZylibGtfcmluZy5zcmluZyk7CkBAIC0xMTc2LDYgKzEyMTIsNyBAQAogCiBzdGF0aWMg dm9pZCBibGtpZl9yZXNldCh2b2lkKQogeworICAgIHByaW50aygiY3djOiVzOiBjYWxsZWRcbiIs IF9fRlVOQ1RJT05fXyk7CiAgICAgYmxraWZfZnJlZSgpOwogICAgIGJsa2lmX2Rpc2Nvbm5lY3Qo KTsKIH0KQEAgLTExODQsNiArMTIyMSw3IEBACiB7CiAgICAgaW50IGk7CiAgICAgYmxraWZfcmVx dWVzdF90ICpyZXE7CisgICAgcHJpbnRrKCJjd2M6JXM6IGluXG4iLCBfX0ZVTkNUSU9OX18pOwog CiAgICAgLyogSG1tLCByZXF1ZXN0cyBtaWdodCBiZSByZS1vcmRlcmVkIHdoZW4gd2UgcmUtaXNz dWUgdGhlbS4KICAgICAgKiBUaGlzIHdpbGwgbmVlZCB0byBiZSBmaXhlZCBvbmNlIHdlIGhhdmUg YmFycmllcnMgKi8KQEAgLTExOTksNiArMTIzNyw3IEBACiAgICAgICAgICAgICBibGtfcmluZy5y ZXFfcHJvZF9wdnQrKzsKICAgICAgICAgfQogICAgIH0KKyAgICBwcmludGsoImN3YzolczogcG9z dCAxXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgLyogU3RhZ2UgMiA6IFNldCB1cCBzaGFkb3cg bGlzdC4gKi8KICAgICBmb3IgKCBpID0gMDsgaSA8IGJsa19yaW5nLnJlcV9wcm9kX3B2dDsgaSsr ICkgCkBAIC0xMjA4LDEyICsxMjQ3LDE0IEBACiAgICAgICAgIHJlcS0+aWQgPSBpOwogICAgICAg ICB0cmFuc2xhdGVfcmVxX3RvX3BmbigmcmVjX3JpbmdbaV0sIHJlcSk7CiAgICAgfQorICAgIHBy aW50aygiY3djOiVzOiBwb3N0IDJcbiIsIF9fRlVOQ1RJT05fXyk7CiAKICAgICAvKiBTdGFnZSAz IDogU2V0IHVwIGZyZWUgbGlzdC4gKi8KICAgICBmb3IgKCA7IGkgPCBCTEtfUklOR19TSVpFOyBp KysgKQogICAgICAgICByZWNfcmluZ1tpXS5pZCA9IGkrMTsKICAgICByZWNfcmluZ19mcmVlID0g YmxrX3JpbmcucmVxX3Byb2RfcHZ0OwogICAgIHJlY19yaW5nW0JMS19SSU5HX1NJWkUtMV0uaWQg PSAweDBmZmZmZmZmOworICAgIHByaW50aygiY3djOiVzOiBwb3N0IDNcbiIsIF9fRlVOQ1RJT05f Xyk7CiAKICAgICAvKiBibGtfcmluZy0+cmVxX3Byb2Qgd2lsbCBiZSBzZXQgd2hlbiB3ZSBmbHVz aF9yZXF1ZXN0cygpLiovCiAgICAgd21iKCk7CkBAIC0xMjI5LDYgKzEyNzAsNyBAQAogCiAgICAg LyogTm93IHNhZmUgdG8gbGVmdCBvdGhlciBwZW9wZSB1c2UgaW50ZXJmYWNlLiAqLwogICAgIGJs a2lmX3N0YXRlID0gQkxLSUZfU1RBVEVfQ09OTkVDVEVEOworICAgIHByaW50aygiY3djOiVzOiBv dXRcbiIsIF9fRlVOQ1RJT05fXyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsa2lmX2Nvbm5lY3QoYmxr aWZfZmVfaW50ZXJmYWNlX3N0YXR1c190ICpzdGF0dXMpCkBAIC0xMjQwLDYgKzEyODIsNyBAQAog I2lmZGVmIENPTkZJR19YRU5fQkxLREVWX0dSQU5UCiAgICAgcmRvbWlkICAgICAgID0gc3RhdHVz LT5kb21pZDsKICNlbmRpZgorICAgIHByaW50aygiY3djOiVzOiBpblxuIiwgX19GVU5DVElPTl9f KTsKIAogICAgIGVyciA9IHJlcXVlc3RfaXJxKGJsa2lmX2lycSwgYmxraWZfaW50LCBTQV9TQU1Q TEVfUkFORE9NLCAiYmxraWYiLCBOVUxMKTsKICAgICBpZiAoIGVyciApCkBAIC0xMjUwLDYgKzEy OTMsNyBAQAogCiAgICAgaWYgKCByZWNvdmVyeSApIAogICAgIHsKKyAgICAgICAgcHJpbnRrKCJj d2M6JXM6IHJlY292ZXJ5XG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICBibGtpZl9yZWNvdmVy KCk7CiAgICAgfSAKICAgICBlbHNlIApAQCAtMTI1NywxNSArMTMwMSwxOSBAQAogICAgICAgICAv KiBUcmFuc2l0aW9uIHRvIGNvbm5lY3RlZCBpbiBjYXNlIHdlIG5lZWQgdG8gZG8gCiAgICAgICAg ICAqICBhIHBhcnRpdGlvbiBwcm9iZSBvbiBhIHdob2xlIGRpc2suICovCiAgICAgICAgIGJsa2lm X3N0YXRlID0gQkxLSUZfU1RBVEVfQ09OTkVDVEVEOworICAgICAgICBwcmludGsoImN3Yzolczog Y29ubmVjdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICAKICAgICAgICAgLyogUHJvYmUg Zm9yIGRpc2NzIGF0dGFjaGVkIHRvIHRoZSBpbnRlcmZhY2UuICovCiAgICAgICAgIHhsdmJkX2lu aXQoKTsKICAgICB9CiAgICAgCiAgICAgLyogS2ljayBwZW5kaW5nIHJlcXVlc3RzLiAqLworICAg IHByaW50aygiY3djOiVzOiBwcmUgc3Bpbl9sb2NrX2lycVxuIiwgX19GVU5DVElPTl9fKTsKICAg ICBzcGluX2xvY2tfaXJxKCZibGtpZl9pb19sb2NrKTsKKyAgICBwcmludGsoImN3YzolczogcG9z dCBzcGluX2xvY2tfaXJxXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIGtpY2tfcGVuZGluZ19yZXF1 ZXN0X3F1ZXVlcygpOwogICAgIHNwaW5fdW5sb2NrX2lycSgmYmxraWZfaW9fbG9jayk7CisgICAg cHJpbnRrKCJjd2M6JXM6IHNwaW5fdW5sb2NrX2lycVxuIiwgX19GVU5DVElPTl9fKTsKIH0KIAog c3RhdGljIHZvaWQgdW5leHBlY3RlZChibGtpZl9mZV9pbnRlcmZhY2Vfc3RhdHVzX3QgKnN0YXR1 cykKQEAgLTEyODIsNiArMTMzMCw3IEBACiAgICAgICAgIHVuZXhwZWN0ZWQoc3RhdHVzKTsKICAg ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBwcmludGsoImN3Yzolczogc3RhdHVzOiAldVxuIiwg X19GVU5DVElPTl9fLCBzdGF0dXMtPnN0YXR1cyk7CiAKICAgICBzd2l0Y2ggKCBzdGF0dXMtPnN0 YXR1cyApIAogICAgIHsKQEAgLTEzNTMsNiArMTQwMiw3IEBACiAKIHN0YXRpYyB2b2lkIGJsa2lm X2N0cmxpZl9yeChjdHJsX21zZ190ICptc2csIHVuc2lnbmVkIGxvbmcgaWQpCiB7CisgICAgcHJp bnRrKCJjd2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKICAgICBzd2l0Y2ggKCBtc2ct PnN1YnR5cGUgKQogICAgIHsKICAgICBjYXNlIENNU0dfQkxLSUZfRkVfSU5URVJGQUNFX1NUQVRV UzoKQEAgLTEzNzEsNiArMTQyMSw3IEBACiB7CiAgICAgaW50IGVyciA9IDA7CiAgICAgaW50IGk7 CisgICAgcHJpbnRrKCJjd2M6JXM6IGluXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHNlbmRfZHJp dmVyX3N0YXR1cygxKTsKIAogICAgIC8qCkBAIC0xMzg5LDYgKzE0NDAsNyBAQAogICAgICAgICBw cmludGsoS0VSTl9JTkZPICJ4ZW5fYmxrOiBUaW1lb3V0IGNvbm5lY3RpbmcgdG8gZGV2aWNlIVxu Iik7CiAgICAgICAgIGVyciA9IC1FTk9TWVM7CiAgICAgfQorICAgIHByaW50aygiY3djOiVzOiBv dXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgcmV0dXJuIGVycjsKIH0KIApAQCAtMTQyNCwxNiAr MTQ3NiwxOSBAQAogCiB2b2lkIGJsa2Rldl9zdXNwZW5kKHZvaWQpCiB7CisgICAgcHJpbnRrKCJj d2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIH0KIAogdm9pZCBibGtkZXZfcmVzdW1l KHZvaWQpCiB7CisgICAgcHJpbnRrKCJjd2M6JXM6IGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsK ICAgICBzZW5kX2RyaXZlcl9zdGF0dXMoMSk7CiB9CiAKIHZvaWQgYmxraWZfY29tcGxldGlvbihi bGtpZl9yZXF1ZXN0X3QgKnJlcSkKIHsKICAgICBpbnQgaTsKKyAgICBwcmludGsoImN3Yzolczog aW5cbiIsIF9fRlVOQ1RJT05fXyk7CiAjaWZkZWYgQ09ORklHX1hFTl9CTEtERVZfR1JBTlQKICAg ICBncmFudF9yZWZfdCBncmVmOwogCkBAIC0xNDU2LDQgKzE1MTEsNSBAQAogICAgICAgICBicmVh azsKICAgICB9CiAjZW5kaWYKKyAgICBwcmludGsoImN3Yzolczogb3V0XG4iLCBfX0ZVTkNUSU9O X18pOwogfQo9PT09PSB4ZW4vY29tbW9uL2dyYW50X3RhYmxlLmMgMS4zMyB2cyBlZGl0ZWQgPT09 PT0KLS0tIDEuMzMveGVuL2NvbW1vbi9ncmFudF90YWJsZS5jCTIwMDUtMDQtMTQgMTM6NTM6MjMg LTA3OjAwCisrKyBlZGl0ZWQveGVuL2NvbW1vbi9ncmFudF90YWJsZS5jCTIwMDUtMDQtMTcgMjI6 MTg6MzIgLTA3OjAwCkBAIC0yMiw4ICsyMiw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8K IAotI2RlZmluZSBHUkFOVF9ERUJVRyAwCi0jZGVmaW5lIEdSQU5UX0RFQlVHX1ZFUkJPU0UgMAor I2RlZmluZSBHUkFOVF9ERUJVRyAxCisjZGVmaW5lIEdSQU5UX0RFQlVHX1ZFUkJPU0UgMQogCiAj aW5jbHVkZSA8eGVuL2NvbmZpZy5oPgogI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgpAQCAtMTA0LDcg KzEwNCw5IEBACiAgICAgYWN0ID0gJmdyYW50aW5nX2QtPmdyYW50X3RhYmxlLT5hY3RpdmVbcmVm XTsKICAgICBzaGEgPSAmZ3JhbnRpbmdfZC0+Z3JhbnRfdGFibGUtPnNoYXJlZFtyZWZdOwogCisg ICAgcHJpbnRrKCJjd2M6JXM6IHByZSBzcGluX2xvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAg c3Bpbl9sb2NrKCZncmFudGluZ19kLT5ncmFudF90YWJsZS0+bG9jayk7CisgICAgcHJpbnRrKCJj d2M6JXM6IHBvc3Qgc3Bpbl9sb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgaWYgKCBhY3Qt PnBpbiA9PSAwICkKICAgICB7CkBAIC0yNDgsNiArMjUwLDcgQEAKICAgICAgKi8KIAogICAgIHNw aW5fdW5sb2NrKCZncmFudGluZ19kLT5ncmFudF90YWJsZS0+bG9jayk7CisgICAgcHJpbnRrKCJj d2M6JXM6IHNwaW5fdW5sb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgaWYgKCAoaG9zdF92 aXJ0X2FkZHIgIT0gMCkgJiYgKGRldl9oc3Rfcm9fZmxhZ3MgJiBHTlRNQVBfaG9zdF9tYXApICkK ICAgICB7CkBAIC0yNjksNyArMjcyLDkgQEAKICAgICAgICAgewogICAgICAgICAgICAgLyogQWJv cnQuICovCiAKKyAgICAgICAgICAgIHByaW50aygiY3djOiVzOiBwcmUgc3Bpbl9sb2NrIDJcbiIs IF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICBzcGluX2xvY2soJmdyYW50aW5nX2QtPmdyYW50 X3RhYmxlLT5sb2NrKTsKKyAgICAgICAgICAgIHByaW50aygiY3djOiVzOiBwb3N0IHNwaW5fbG9j ayAyXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgICAgICAgICBpZiAoIGRldl9oc3Rfcm9fZmxh Z3MgJiBHTlRNQVBfcmVhZG9ubHkgKQogICAgICAgICAgICAgICAgIGFjdC0+cGluIC09IEdOVFBJ Tl9oc3RyX2luYzsKQEAgLTI4OSwxNCArMjk0LDE3IEBACiAgICAgICAgICAgICB9CiAKICAgICAg ICAgICAgIHNwaW5fdW5sb2NrKCZncmFudGluZ19kLT5ncmFudF90YWJsZS0+bG9jayk7CisgICAg ICAgICAgICBwcmludGsoImN3Yzolczogc3Bpbl91bmxvY2sgMlxuIiwgX19GVU5DVElPTl9fKTsK ICAgICAgICAgfQogCiAgICAgfQogICAgICpwZnJhbWUgPSBmcmFtZTsKKyAgICBwcmludGsoImN3 Yzolczogb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVybiByYzsKIAogIHVubG9ja19v dXQ6CiAgICAgc3Bpbl91bmxvY2soJmdyYW50aW5nX2QtPmdyYW50X3RhYmxlLT5sb2NrKTsKKyAg ICBwcmludGsoImN3Yzolczogc3Bpbl91bmxvY2sgb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwogICAg IHJldHVybiByYzsKIH0KIApAQCAtNTA3LDcgKzUxNSw5IEBACiAgICAgYWN0ID0gJnJkLT5ncmFu dF90YWJsZS0+YWN0aXZlW3JlZl07CiAgICAgc2hhID0gJnJkLT5ncmFudF90YWJsZS0+c2hhcmVk W3JlZl07CiAKKyAgICBwcmludGsoImN3YzolczogcHJlIHNwaW5fbG9ja1xuIiwgX19GVU5DVElP Tl9fKTsKICAgICBzcGluX2xvY2soJnJkLT5ncmFudF90YWJsZS0+bG9jayk7CisgICAgcHJpbnRr KCJjd2M6JXM6IHBvc3Qgc3Bpbl9sb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAgICAgaWYgKCBm cmFtZSA9PSAwICkKICAgICAgICAgZnJhbWUgPSBhY3QtPmZyYW1lOwpAQCAtNTYyLDYgKzU3Miw3 IEBACiAgICAgICAgICAgICBnb3RvIHVubWFwX291dDsKICAgICAgICAgfQogCisgICAgICAgIHBy aW50aygiY3djOiVzOiBwcmUgcGFnZXRhYmxlIGRlbGV0ZVxuIiwgX19GVU5DVElPTl9fKTsKICAg ICAgICAgLyogRGVsZXRlIHBhZ2V0YWJsZSBlbnRyeQogICAgICAgICAgKi8KICAgICAgICAgaWYg KCB1bmxpa2VseShfX3B1dF91c2VyKDAsICh1bnNpZ25lZCBsb25nICopcGwxZSkpKQpAQCAtNTg4 LDYgKzU5OSw3IEBACiAKICAgICAgICAgcmMgPSAwOwogICAgICAgICAqdmEgPSB2aXJ0OworICAg ICAgICBwcmludGsoImN3YzolczogcG9zdCBwYWdldGFibGUgZGVsZXRlXG4iLCBfX0ZVTkNUSU9O X18pOwogICAgIH0KIAogICAgIGlmICggKG1hcC0+cmVmX2FuZF9mbGFncyAmIChHTlRNQVBfZGV2 aWNlX21hcHxHTlRNQVBfaG9zdF9tYXApKSA9PSAwKQpAQCAtNjE3LDYgKzYyOSw3IEBACiAKICB1 bm1hcF9vdXQ6CiAgICAgKHZvaWQpX19wdXRfdXNlcihyYywgJnVvcC0+c3RhdHVzKTsKKyAgICBw cmludGsoImN3Yzolczogb3V0IHNwaW5fdW5sb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHNw aW5fdW5sb2NrKCZyZC0+Z3JhbnRfdGFibGUtPmxvY2spOwogICAgIHB1dF9kb21haW4ocmQpOwog ICAgIHJldHVybiByYzsKQEAgLTg5NywxMSArOTEwLDE0IEBACiAgICAgICAgICAgICByZWYgPSAo bWFwLT5yZWZfYW5kX2ZsYWdzID4+IE1BUFRSQUNLX1JFRl9TSElGVCk7CiAgICAgICAgICAgICBh Y3QgPSAmcmd0LT5hY3RpdmVbcmVmXTsKIAorICAgICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IHBy ZSBzcGluX2xvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICBzcGluX2xvY2soJnJn dC0+bG9jayk7CisgICAgICAgICAgICBwcmludGsoImN3YzolczogcG9zdCBzcGluX2xvY2tcbiIs IF9fRlVOQ1RJT05fXyk7CiAKICAgICAgICAgICAgIGlmICggYWN0LT5mcmFtZSAhPSBmcmFtZSAp CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnJndC0+bG9jayk7 CisgICAgICAgICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IG5vdCBmcmFtZSBzcGluX3VubG9ja1xu IiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg IH0KIApAQCAtOTEwLDYgKzkyNiw3IEBACiAgICAgICAgICAgICBpZiAoIHJlZmNvdW50ID09IDAg KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZyZ3QtPmxvY2sp OworICAgICAgICAgICAgICAgIHByaW50aygiY3djOiVzOiByZWZjb3VudCAwIHNwaW5fdW5sb2Nr XG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg ICAgfQogCkBAIC05MzcsNiArOTU0LDcgQEAKICAgICAgICAgICAgICAgICBwdXRfcGFnZSgmZnJh bWVfdGFibGVbZnJhbWVdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNwaW5fdW5sb2Nr KCZyZ3QtPmxvY2spOworICAgICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IHNwaW5fdW5sb2NrXG4i LCBfX0ZVTkNUSU9OX18pOwogCiAgICAgICAgICAgICBjbGVhcl9iaXQoR05UTUFQX2hvc3RfbWFw LCAmbWFwLT5yZWZfYW5kX2ZsYWdzKTsKIApAQCAtOTQ5LDYgKzk2Nyw3IEBACiAgICAgfQogICAg IHB1dF9kb21haW4ocmQpOwogCisgICAgcHJpbnRrKCJjd2M6JXM6IG91dCBmb3VuZDolZFxuIiwg X19GVU5DVElPTl9fLCBmb3VuZCk7CiAgICAgcmV0dXJuIGZvdW5kOwogfQogCkBAIC05NzQsMTMg Kzk5MywxNiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBwcmludGsoImN3Yzol czogcHJlIHNwaW5fbG9ja1xuIiwgX19GVU5DVElPTl9fKTsKICAgICBzcGluX2xvY2soJnJndC0+ bG9jayk7CisgICAgcHJpbnRrKCJjd2M6JXM6IHBvc3Qgc3Bpbl9sb2NrXG4iLCBfX0ZVTkNUSU9O X18pOwogCiAgICAgc2hhID0gJnJndC0+c2hhcmVkW3JlZl07CiAgICAgCiAgICAgc2ZsYWdzID0g c2hhLT5mbGFnczsKICAgICBzZG9tICAgPSBzaGEtPmRvbWlkOwogCisgICAgcHJpbnRrKCJjd2M6 JXM6IHByZSBjbXB4Y2hnIGxvb3BcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgZm9yICggOyA7ICkK ICAgICB7CiAgICAgICAgIHRhcmdldF9wZm4gPSBzaGEtPmZyYW1lOwpAQCAtMTAyOCwxMCArMTA1 MCwxMiBAQAogICAgIH0KIAogICAgIHNwaW5fdW5sb2NrKCZyZ3QtPmxvY2spOworICAgIHByaW50 aygiY3djOiVzOiBvdXQgc3Bpbl91bmxvY2sgMVxuIiwgX19GVU5DVElPTl9fKTsKICAgICByZXR1 cm4gMTsKIAogIGZhaWw6CiAgICAgc3Bpbl91bmxvY2soJnJndC0+bG9jayk7CisgICAgcHJpbnRr KCJjd2M6JXM6IG91dCBzcGluX3VubG9jayAwXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIHJldHVy biAwOwogfQogCg== ------=_Part_20398_14467821.1113842330305 Content-Type: text/x-csrc; name="blkback.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="blkback.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogKiBhcmNoL3hlbi9kcml2ZXJzL2Jsa2lmL2JhY2tlbmQv bWFpbi5jCiAqIAogKiBCYWNrLWVuZCBvZiB0aGUgZHJpdmVyIGZvciB2aXJ0dWFsIGJsb2NrIGRl dmljZXMuIFRoaXMgcG9ydGlvbiBvZiB0aGUKICogZHJpdmVyIGV4cG9ydHMgYSAndW5pZmllZCcg YmxvY2stZGV2aWNlIGludGVyZmFjZSB0aGF0IGNhbiBiZSBhY2Nlc3NlZAogKiBieSBhbnkgb3Bl cmF0aW5nIHN5c3RlbSB0aGF0IGltcGxlbWVudHMgYSBjb21wYXRpYmxlIGZyb250IGVuZC4gQSAK ICogcmVmZXJlbmNlIGZyb250LWVuZCBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW46CiAq ICBhcmNoL3hlbi9kcml2ZXJzL2Jsa2lmL2Zyb250ZW5kCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIw MDMtMjAwNCwgS2VpciBGcmFzZXIgJiBTdGV2ZSBIYW5kCiAqIENvcHlyaWdodCAoYykgMjAwNSwg Q2hyaXN0b3BoZXIgQ2xhcmsKICovCgojaW5jbHVkZSAiY29tbW9uLmgiCiNpbmNsdWRlIDxhc20t eGVuL2V2dGNobi5oPgojaWZkZWYgQ09ORklHX1hFTl9CTEtERVZfR1JBTlQKI2luY2x1ZGUgPGFz bS14ZW4veGVuLXB1YmxpYy9ncmFudF90YWJsZS5oPgojZW5kaWYKCi8qCiAqIFRoZXNlIGFyZSBy YXRoZXIgYXJiaXRyYXJ5LiBUaGV5IGFyZSBmYWlybHkgbGFyZ2UgYmVjYXVzZSBhZGphY2VudCBy ZXF1ZXN0cwogKiBwdWxsZWQgZnJvbSBhIGNvbW11bmljYXRpb24gcmluZyBhcmUgcXVpdGUgbGlr ZWx5IHRvIGVuZCB1cCBiZWluZyBwYXJ0IG9mCiAqIHRoZSBzYW1lIHNjYXR0ZXIvZ2F0aGVyIHJl cXVlc3QgYXQgdGhlIGRpc2MuCiAqIAogKiAqKiBUUlkgSU5DUkVBU0lORyAnTUFYX1BFTkRJTkdf UkVRUycgSUYgV1JJVEUgU1BFRURTIFNFRU0gVE9PIExPVyAqKgogKiBUaGlzIHdpbGwgaW5jcmVh c2UgdGhlIGNoYW5jZXMgb2YgYmVpbmcgYWJsZSB0byB3cml0ZSB3aG9sZSB0cmFja3MuCiAqIDY0 IHNob3VsZCBiZSBlbm91Z2ggdG8ga2VlcCB1cyBjb21wZXRpdGl2ZSB3aXRoIExpbnV4LgogKi8K I2RlZmluZSBNQVhfUEVORElOR19SRVFTIDY0CiNkZWZpbmUgQkFUQ0hfUEVSX0RPTUFJTiAxNgoK c3RhdGljIHVuc2lnbmVkIGxvbmcgbW1hcF92c3RhcnQ7CiNkZWZpbmUgTU1BUF9QQUdFUyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAoTUFYX1BFTkRJ TkdfUkVRUyAqIEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkKI2RlZmluZSBNTUFQX1ZB RERSKF9yZXEsX3NlZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICht bWFwX3ZzdGFydCArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKICAgICAoKF9yZXEpICogQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUICogUEFHRV9T SVpFKSArICAgIFwKICAgICAoKF9zZWcpICogUEFHRV9TSVpFKSkKCi8qCiAqIEVhY2ggb3V0c3Rh bmRpbmcgcmVxdWVzdCB0aGF0IHdlJ3ZlIHBhc3NlZCB0byB0aGUgbG93ZXIgZGV2aWNlIGxheWVy cyBoYXMgYSAKICogJ3BlbmRpbmdfcmVxJyBhbGxvY2F0ZWQgdG8gaXQuIEVhY2ggYnVmZmVyX2hl YWQgdGhhdCBjb21wbGV0ZXMgZGVjcmVtZW50cyAKICogdGhlIHBlbmRjbnQgdG93YXJkcyB6ZXJv LiBXaGVuIGl0IGhpdHMgemVybywgdGhlIHNwZWNpZmllZCBkb21haW4gaGFzIGEgCiAqIHJlc3Bv bnNlIHF1ZXVlZCBmb3IgaXQsIHdpdGggdGhlIHNhdmVkICdpZCcgcGFzc2VkIGJhY2suCiAqLwp0 eXBlZGVmIHN0cnVjdCB7CiAgICBibGtpZl90ICAgICAgICpibGtpZjsKICAgIHVuc2lnbmVkIGxv bmcgIGlkOwogICAgaW50ICAgICAgICAgICAgbnJfcGFnZXM7CiAgICBhdG9taWNfdCAgICAgICBw ZW5kY250OwogICAgdW5zaWduZWQgc2hvcnQgb3BlcmF0aW9uOwogICAgaW50ICAgICAgICAgICAg c3RhdHVzOwp9IHBlbmRpbmdfcmVxX3Q7CgovKgogKiBXZSBjYW4ndCBhbGxvY2F0ZSBwZW5kaW5n X3JlcSdzIGluIG9yZGVyLCBzaW5jZSB0aGV5IG1heSBjb21wbGV0ZSBvdXQgb2YgCiAqIG9yZGVy LiBXZSB0aGVyZWZvcmUgbWFpbnRhaW4gYW4gYWxsb2NhdGlvbiByaW5nLiBUaGlzIHJpbmcgYWxz byBpbmRpY2F0ZXMgCiAqIHdoZW4gZW5vdWdoIHdvcmsgaGFzIGJlZW4gcGFzc2VkIGRvd24gLS0g YXQgdGhhdCBwb2ludCB0aGUgYWxsb2NhdGlvbiByaW5nIAogKiB3aWxsIGJlIGVtcHR5LgogKi8K c3RhdGljIHBlbmRpbmdfcmVxX3QgcGVuZGluZ19yZXFzW01BWF9QRU5ESU5HX1JFUVNdOwpzdGF0 aWMgdW5zaWduZWQgY2hhciBwZW5kaW5nX3JpbmdbTUFYX1BFTkRJTkdfUkVRU107CnN0YXRpYyBz cGlubG9ja190IHBlbmRfcHJvZF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwovKiBOQi4gV2Ug dXNlIGEgZGlmZmVyZW50IGluZGV4IHR5cGUgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIHNoYXJlZCBi bGsgcmluZ3MuICovCnR5cGVkZWYgdW5zaWduZWQgaW50IFBFTkRfUklOR19JRFg7CiNkZWZpbmUg TUFTS19QRU5EX0lEWChfaSkgKChfaSkmKE1BWF9QRU5ESU5HX1JFUVMtMSkpCnN0YXRpYyBQRU5E X1JJTkdfSURYIHBlbmRpbmdfcHJvZCwgcGVuZGluZ19jb25zOwojZGVmaW5lIE5SX1BFTkRJTkdf UkVRUyAoTUFYX1BFTkRJTkdfUkVRUyAtIHBlbmRpbmdfcHJvZCArIHBlbmRpbmdfY29ucykKCiNp ZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkKc3RhdGljIGttZW1f Y2FjaGVfdCAqYnVmZmVyX2hlYWRfY2FjaGVwOwojZWxzZQpzdGF0aWMgcmVxdWVzdF9xdWV1ZV90 ICpwbHVnZ2VkX3F1ZXVlOwpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfcGx1Z2dlZF9xdWV1ZSh2 b2lkKQp7CiAgICByZXF1ZXN0X3F1ZXVlX3QgKnEgPSBwbHVnZ2VkX3F1ZXVlOwogICAgaWYgKCBx ICE9IE5VTEwgKQogICAgewogICAgICAgIGlmICggcS0+dW5wbHVnX2ZuICE9IE5VTEwgKQogICAg ICAgICAgICBxLT51bnBsdWdfZm4ocSk7CiAgICAgICAgYmxrX3B1dF9xdWV1ZShxKTsKICAgICAg ICBwbHVnZ2VkX3F1ZXVlID0gTlVMTDsKICAgIH0KfQojZW5kaWYKCiNpZmRlZiBDT05GSUdfWEVO X0JMS0RFVl9HUkFOVAovKiBXaGVuIHVzaW5nIGdyYW50IHRhYmxlcyB0byBtYXAgYSBmcmFtZSBm b3IgZGV2aWNlIGFjY2VzcyB0aGVuIHRoZQogKiBoYW5kbGUgcmV0dXJuZWQgbXVzdCBiZSB1c2Vk IHRvIHVubWFwIHRoZSBmcmFtZS4gVGhpcyBpcyBuZWVkZWQgdG8KICogZHJvcCB0aGUgcmVmIGNv dW50IG9uIHRoZSBmcmFtZS4KICovCnN0YXRpYyB1MTYgcGVuZGluZ19ncmFudF9oYW5kbGVzW01N QVBfUEFHRVNdOwojZGVmaW5lIHBlbmRpbmdfaGFuZGxlKF9pZHgsIF9pKSBcCiAgICAocGVuZGlu Z19ncmFudF9oYW5kbGVzWygoX2lkeCkgKiBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Qp ICsgKF9pKV0pCiNkZWZpbmUgQkxLQkFDS19JTlZBTElEX0hBTkRMRSAoMHhGRkZGKQojZW5kaWYK CiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9UQVBfQkUKLyoKICogSWYgdGhlIHRhcCBkcml2ZXIg aXMgdXNlZCwgd2UgbWF5IGdldCBwYWdlcyBiZWxvbmdpbmcgdG8gZWl0aGVyIHRoZSB0YXAKICog b3IgKG1vcmUgbGlrZWx5KSB0aGUgcmVhbCBmcm9udGVuZC4gIFRoZSBiYWNrZW5kIG11c3Qgc3Bl Y2lmeSB3aGljaCBkb21haW4KICogYSBnaXZlbiBwYWdlIGJlbG9uZ3MgdG8gaW4gdXBkYXRlX3Zh X21hcHBpbmcgdGhvdWdoLiAgRm9yIHRoZSBtb21lbnQsIAogKiB0aGUgdGFwIHJld3JpdGVzIHRo ZSBJRCBmaWVsZCBvZiB0aGUgcmVxdWVzdCB0byBjb250YWluIHRoZSByZXF1ZXN0IGluZGV4CiAq IGFuZCB0aGUgaWQgb2YgdGhlIHJlYWwgZnJvbnQgZW5kIGRvbWFpbi4KICovCiNkZWZpbmUgQkxL VEFQX0NPT0tJRSAweGJlYWRmZWVkCnN0YXRpYyBpbmxpbmUgZG9taWRfdCBJRF9UT19ET00odW5z aWduZWQgbG9uZyBpZCkgeyByZXR1cm4gKGlkID4+IDE2KTsgfQojZW5kaWYKCnN0YXRpYyBpbnQg ZG9fYmxvY2tfaW9fb3AoYmxraWZfdCAqYmxraWYsIGludCBtYXhfdG9fZG8pOwpzdGF0aWMgdm9p ZCBkaXNwYXRjaF9wcm9iZShibGtpZl90ICpibGtpZiwgYmxraWZfcmVxdWVzdF90ICpyZXEpOwpz dGF0aWMgdm9pZCBkaXNwYXRjaF9yd19ibG9ja19pbyhibGtpZl90ICpibGtpZiwgYmxraWZfcmVx dWVzdF90ICpyZXEpOwpzdGF0aWMgdm9pZCBtYWtlX3Jlc3BvbnNlKGJsa2lmX3QgKmJsa2lmLCB1 bnNpZ25lZCBsb25nIGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9y dCBvcCwgaW50IHN0KTsKCnN0YXRpYyB2b2lkIGZhc3RfZmx1c2hfYXJlYShpbnQgaWR4LCBpbnQg bnJfcGFnZXMpCnsKICAgIHByaW50aygiY3djOiVzOmluXG4iLCBfX0ZVTkNUSU9OX18pOwojaWZk ZWYgQ09ORklHX1hFTl9CTEtERVZfR1JBTlQKICAgIGdudHRhYl9vcF90ICAgICAgIGFvcFtCTEtJ Rl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOwogICAgdW5zaWduZWQgaW50ICAgICAgaSwgaW52 Y291bnQgPSAwOwogICAgdTE2ICAgICAgICAgICAgICAgaGFuZGxlOwoKICAgIGZvciAoIGkgPSAw OyBpIDwgbnJfcGFnZXM7IGkrKyApCiAgICB7CiAgICAgICAgaWYgKCBCTEtCQUNLX0lOVkFMSURf SEFORExFICE9ICggaGFuZGxlID0gcGVuZGluZ19oYW5kbGUoaWR4LCBpKSApICkKICAgICAgICB7 CiAgICAgICAgICAgIGFvcFtpXS51LnVubWFwX2dyYW50X3JlZi5ob3N0X3ZpcnRfYWRkciA9IE1N QVBfVkFERFIoaWR4LCBpKTsKICAgICAgICAgICAgYW9wW2ldLnUudW5tYXBfZ3JhbnRfcmVmLmRl dl9idXNfYWRkciAgID0gMDsKICAgICAgICAgICAgYW9wW2ldLnUudW5tYXBfZ3JhbnRfcmVmLmhh bmRsZSAgICAgICAgID0gaGFuZGxlOwogICAgICAgICAgICBwZW5kaW5nX2hhbmRsZShpZHgsIGkp ID0gQkxLQkFDS19JTlZBTElEX0hBTkRMRTsKICAgICAgICAgICAgaW52Y291bnQrKzsKICAgICAg ICB9CiAgICB9CiAgICBpZiAoIHVubGlrZWx5KEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoCiAg ICAgICAgICAgICAgICAgICAgR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmLCBhb3AsIGludmNvdW50 KSkpCiAgICAgICAgQlVHKCk7CiNlbHNlCgogICAgbXVsdGljYWxsX2VudHJ5X3QgbWNsW0JMS0lG X01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CiAgICBpbnQgICAgICAgICAgICAgICBpOwoKICAg IGZvciAoIGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKyApCiAgICB7CiAgICAgICAgbWNsW2ldLm9w ID0gX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nOwogICAgICAgIG1jbFtpXS5hcmdzWzBd ID0gTU1BUF9WQUREUihpZHgsIGkpOwogICAgICAgIG1jbFtpXS5hcmdzWzFdID0gMDsKICAgICAg ICBtY2xbaV0uYXJnc1syXSA9IDA7CiAgICB9CgogICAgbWNsW25yX3BhZ2VzLTFdLmFyZ3NbMl0g PSBVVk1GX1RMQl9GTFVTSHxVVk1GX0FMTDsKICAgIGlmICggdW5saWtlbHkoSFlQRVJWSVNPUl9t dWx0aWNhbGwobWNsLCBucl9wYWdlcykgIT0gMCkgKQogICAgICAgIEJVRygpOwojZW5kaWYKICAg IHByaW50aygiY3djOiVzOm91dFxuIiwgX19GVU5DVElPTl9fKTsKfQoKCi8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICog QkxPQ0stREVWSUNFIFNDSEVEVUxFUiBMSVNUIE1BSU5URU5BTkNFCiAqLwoKc3RhdGljIHN0cnVj dCBsaXN0X2hlYWQgYmxraW9fc2NoZWR1bGVfbGlzdDsKc3RhdGljIHNwaW5sb2NrX3QgYmxraW9f c2NoZWR1bGVfbGlzdF9sb2NrOwoKc3RhdGljIGludCBfX29uX2Jsa2Rldl9saXN0KGJsa2lmX3Qg KmJsa2lmKQp7CiAgICByZXR1cm4gYmxraWYtPmJsa2Rldl9saXN0Lm5leHQgIT0gTlVMTDsKfQoK c3RhdGljIHZvaWQgcmVtb3ZlX2Zyb21fYmxrZGV2X2xpc3QoYmxraWZfdCAqYmxraWYpCnsKICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICBpZiAoICFfX29uX2Jsa2Rldl9saXN0KGJsa2lmKSAp IHJldHVybjsKICAgIHNwaW5fbG9ja19pcnFzYXZlKCZibGtpb19zY2hlZHVsZV9saXN0X2xvY2ss IGZsYWdzKTsKICAgIGlmICggX19vbl9ibGtkZXZfbGlzdChibGtpZikgKQogICAgewogICAgICAg IGxpc3RfZGVsKCZibGtpZi0+YmxrZGV2X2xpc3QpOwogICAgICAgIGJsa2lmLT5ibGtkZXZfbGlz dC5uZXh0ID0gTlVMTDsKICAgICAgICBibGtpZl9wdXQoYmxraWYpOwogICAgfQogICAgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmYmxraW9fc2NoZWR1bGVfbGlzdF9sb2NrLCBmbGFncyk7Cn0KCnN0 YXRpYyB2b2lkIGFkZF90b19ibGtkZXZfbGlzdF90YWlsKGJsa2lmX3QgKmJsa2lmKQp7CiAgICB1 bnNpZ25lZCBsb25nIGZsYWdzOwogICAgaWYgKCBfX29uX2Jsa2Rldl9saXN0KGJsa2lmKSApIHJl dHVybjsKICAgIHNwaW5fbG9ja19pcnFzYXZlKCZibGtpb19zY2hlZHVsZV9saXN0X2xvY2ssIGZs YWdzKTsKICAgIGlmICggIV9fb25fYmxrZGV2X2xpc3QoYmxraWYpICYmIChibGtpZi0+c3RhdHVz ID09IENPTk5FQ1RFRCkgKQogICAgewogICAgICAgIGxpc3RfYWRkX3RhaWwoJmJsa2lmLT5ibGtk ZXZfbGlzdCwgJmJsa2lvX3NjaGVkdWxlX2xpc3QpOwogICAgICAgIGJsa2lmX2dldChibGtpZik7 CiAgICB9CiAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibGtpb19zY2hlZHVsZV9saXN0X2xv Y2ssIGZsYWdzKTsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKICogU0NIRURVTEVSIEZVTkNUSU9OUwogKi8KCnN0 YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChibGtpb19zY2hlZHVsZV93YWl0KTsKCnN0YXRp YyBpbnQgYmxraW9fc2NoZWR1bGUodm9pZCAqYXJnKQp7CiAgICBERUNMQVJFX1dBSVRRVUVVRSh3 cSwgY3VycmVudCk7CgogICAgYmxraWZfdCAgICAgICAgICAqYmxraWY7CiAgICBzdHJ1Y3QgbGlz dF9oZWFkICplbnQ7CgogICAgZGFlbW9uaXplKAojaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtF Uk5FTF9WRVJTSU9OKDIsNiwwKQogICAgICAgICJ4ZW5ibGtkIgojZW5kaWYKICAgICAgICApOwoK ICAgIGZvciAoIDsgOyApCiAgICB7CiAgICAgICAgLyogV2FpdCBmb3Igd29yayB0byBkby4gKi8K ICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmYmxraW9fc2NoZWR1bGVfd2FpdCwgJndxKTsKICAgICAg ICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogICAgICAgIGlmICggKE5S X1BFTkRJTkdfUkVRUyA9PSBNQVhfUEVORElOR19SRVFTKSB8fCAKICAgICAgICAgICAgIGxpc3Rf ZW1wdHkoJmJsa2lvX3NjaGVkdWxlX2xpc3QpICkKICAgICAgICAgICAgc2NoZWR1bGUoKTsKICAg ICAgICBfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAgICAgICAgcmVtb3ZlX3dh aXRfcXVldWUoJmJsa2lvX3NjaGVkdWxlX3dhaXQsICZ3cSk7CgogICAgICAgIC8qIFF1ZXVlIHVw IGEgYmF0Y2ggb2YgcmVxdWVzdHMuICovCiAgICAgICAgd2hpbGUgKCAoTlJfUEVORElOR19SRVFT IDwgTUFYX1BFTkRJTkdfUkVRUykgJiYKICAgICAgICAgICAgICAgICFsaXN0X2VtcHR5KCZibGtp b19zY2hlZHVsZV9saXN0KSApCiAgICAgICAgewogICAgICAgICAgICBlbnQgPSBibGtpb19zY2hl ZHVsZV9saXN0Lm5leHQ7CiAgICAgICAgICAgIGJsa2lmID0gbGlzdF9lbnRyeShlbnQsIGJsa2lm X3QsIGJsa2Rldl9saXN0KTsKICAgICAgICAgICAgYmxraWZfZ2V0KGJsa2lmKTsKICAgICAgICAg ICAgcmVtb3ZlX2Zyb21fYmxrZGV2X2xpc3QoYmxraWYpOwogICAgICAgICAgICBpZiAoIGRvX2Js b2NrX2lvX29wKGJsa2lmLCBCQVRDSF9QRVJfRE9NQUlOKSApCiAgICAgICAgICAgICAgICBhZGRf dG9fYmxrZGV2X2xpc3RfdGFpbChibGtpZik7CiAgICAgICAgICAgIGJsa2lmX3B1dChibGtpZik7 CiAgICAgICAgfQoKICAgICAgICAvKiBQdXNoIHRoZSBiYXRjaCB0aHJvdWdoIHRvIGRpc2MuICov CiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkKICAgICAgICBy dW5fdGFza19xdWV1ZSgmdHFfZGlzayk7CiNlbHNlCiAgICAgICAgZmx1c2hfcGx1Z2dlZF9xdWV1 ZSgpOwojZW5kaWYKICAgIH0KfQoKc3RhdGljIHZvaWQgbWF5YmVfdHJpZ2dlcl9ibGtpb19zY2hl ZHVsZSh2b2lkKQp7CiAgICAvKgogICAgICogTmVlZGVkIHNvIHRoYXQgdHdvIHByb2Nlc3Nlcywg d2hvIHRvZ2V0aGVyIG1ha2UgdGhlIGZvbGxvd2luZyBwcmVkaWNhdGUKICAgICAqIHRydWUsIGRv bid0IGJvdGggcmVhZCBzdGFsZSB2YWx1ZXMgYW5kIGV2YWx1YXRlIHRoZSBwcmVkaWNhdGUKICAg ICAqIGluY29ycmVjdGx5LiBJbmNyZWRpYmx5IHVubGlrZWx5IHRvIHN0YWxsIHRoZSBzY2hlZHVs ZXIgb24geDg2LCBidXQuLi4KICAgICAqLwogICAgc21wX21iKCk7CgogICAgaWYgKCAoTlJfUEVO RElOR19SRVFTIDwgKE1BWF9QRU5ESU5HX1JFUVMvMikpICYmCiAgICAgICAgICFsaXN0X2VtcHR5 KCZibGtpb19zY2hlZHVsZV9saXN0KSApCiAgICAgICAgd2FrZV91cCgmYmxraW9fc2NoZWR1bGVf d2FpdCk7Cn0KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogKiBDT01QTEVUSU9OIENBTExCQUNLIC0tIENhbGxlZCBh cyBiaC0+Yl9lbmRfaW8oKQogKi8KCnN0YXRpYyB2b2lkIF9fZW5kX2Jsb2NrX2lvX29wKHBlbmRp bmdfcmVxX3QgKnBlbmRpbmdfcmVxLCBpbnQgdXB0b2RhdGUpCnsKICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7CgogICAgLyogQW4gZXJyb3IgZmFpbHMgdGhlIGVudGlyZSByZXF1ZXN0LiAqLwogICAg aWYgKCAhdXB0b2RhdGUgKQogICAgewogICAgICAgIERQUklOVEsoIkJ1ZmZlciBub3QgdXAtdG8t ZGF0ZSBhdCBlbmQgb2Ygb3BlcmF0aW9uXG4iKTsKICAgICAgICBwZW5kaW5nX3JlcS0+c3RhdHVz ID0gQkxLSUZfUlNQX0VSUk9SOwogICAgfQoKICAgIGlmICggYXRvbWljX2RlY19hbmRfdGVzdCgm cGVuZGluZ19yZXEtPnBlbmRjbnQpICkKICAgIHsKICAgICAgICBpbnQgcGVuZGluZ19pZHggPSBw ZW5kaW5nX3JlcSAtIHBlbmRpbmdfcmVxczsKICAgICAgICBmYXN0X2ZsdXNoX2FyZWEocGVuZGlu Z19pZHgsIHBlbmRpbmdfcmVxLT5ucl9wYWdlcyk7CiAgICAgICAgbWFrZV9yZXNwb25zZShwZW5k aW5nX3JlcS0+YmxraWYsIHBlbmRpbmdfcmVxLT5pZCwKICAgICAgICAgICAgICAgICAgICAgIHBl bmRpbmdfcmVxLT5vcGVyYXRpb24sIHBlbmRpbmdfcmVxLT5zdGF0dXMpOwogICAgICAgIGJsa2lm X3B1dChwZW5kaW5nX3JlcS0+YmxraWYpOwogICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZwZW5k X3Byb2RfbG9jaywgZmxhZ3MpOwogICAgICAgIHBlbmRpbmdfcmluZ1tNQVNLX1BFTkRfSURYKHBl bmRpbmdfcHJvZCsrKV0gPSBwZW5kaW5nX2lkeDsKICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwZW5kX3Byb2RfbG9jaywgZmxhZ3MpOwogICAgICAgIG1heWJlX3RyaWdnZXJfYmxraW9f c2NoZWR1bGUoKTsKICAgIH0KfQoKI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJT SU9OKDIsNiwwKQpzdGF0aWMgdm9pZCBlbmRfYmxvY2tfaW9fb3Aoc3RydWN0IGJ1ZmZlcl9oZWFk ICpiaCwgaW50IHVwdG9kYXRlKQp7CiAgICBfX2VuZF9ibG9ja19pb19vcChiaC0+Yl9wcml2YXRl LCB1cHRvZGF0ZSk7CiAgICBrbWVtX2NhY2hlX2ZyZWUoYnVmZmVyX2hlYWRfY2FjaGVwLCBiaCk7 Cn0KI2Vsc2UKc3RhdGljIGludCBlbmRfYmxvY2tfaW9fb3Aoc3RydWN0IGJpbyAqYmlvLCB1bnNp Z25lZCBpbnQgZG9uZSwgaW50IGVycm9yKQp7CiAgICBpZiAoIGRvbmUgfHwgZXJyb3IgKQogICAg ICAgIF9fZW5kX2Jsb2NrX2lvX29wKGJpby0+YmlfcHJpdmF0ZSwgKGRvbmUgJiYgIWVycm9yKSk7 CiAgICBiaW9fcHV0KGJpbyk7CiAgICByZXR1cm4gZXJyb3I7Cn0KI2VuZGlmCgoKLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogKiBOT1RJRklDQVRJT04gRlJPTSBHVUVTVCBPUy4KICovCgppcnFyZXR1 cm5fdCBibGtpZl9iZV9pbnQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq cmVncykKewogICAgYmxraWZfdCAqYmxraWYgPSBkZXZfaWQ7CiAgICBhZGRfdG9fYmxrZGV2X2xp c3RfdGFpbChibGtpZik7CiAgICBtYXliZV90cmlnZ2VyX2Jsa2lvX3NjaGVkdWxlKCk7CiAgICBy ZXR1cm4gSVJRX0hBTkRMRUQ7Cn0KCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBET1dOV0FSRCBDQUxMUyAtLSBU aGVzZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYmxvY2stZGV2aWNlIGxheWVyIHByb3Blci4KICovCgpz dGF0aWMgaW50IGRvX2Jsb2NrX2lvX29wKGJsa2lmX3QgKmJsa2lmLCBpbnQgbWF4X3RvX2RvKQp7 CiAgICBibGtpZl9iYWNrX3JpbmdfdCAqYmxrX3JpbmcgPSAmYmxraWYtPmJsa19yaW5nOwogICAg YmxraWZfcmVxdWVzdF90ICpyZXE7CiAgICBSSU5HX0lEWCBpLCBycDsKICAgIGludCBtb3JlX3Rv X2RvID0gMDsKCiAgICBycCA9IGJsa19yaW5nLT5zcmluZy0+cmVxX3Byb2Q7CiAgICBybWIoKTsg LyogRW5zdXJlIHdlIHNlZSBxdWV1ZWQgcmVxdWVzdHMgdXAgdG8gJ3JwJy4gKi8KCiAgICBmb3Ig KCBpID0gYmxrX3JpbmctPnJlcV9jb25zOyAKICAgICAgICAgKGkgIT0gcnApICYmICFSSU5HX1JF UVVFU1RfQ09OU19PVkVSRkxPVyhibGtfcmluZywgaSk7CiAgICAgICAgICBpKysgKQogICAgewog ICAgICAgIGlmICggKG1heF90b19kby0tID09IDApIHx8IChOUl9QRU5ESU5HX1JFUVMgPT0gTUFY X1BFTkRJTkdfUkVRUykgKQogICAgICAgIHsKICAgICAgICAgICAgbW9yZV90b19kbyA9IDE7CiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXEgPSBSSU5HX0dF VF9SRVFVRVNUKGJsa19yaW5nLCBpKTsKICAgICAgICBzd2l0Y2ggKCByZXEtPm9wZXJhdGlvbiAp CiAgICAgICAgewogICAgICAgIGNhc2UgQkxLSUZfT1BfUkVBRDoKICAgICAgICBjYXNlIEJMS0lG X09QX1dSSVRFOgogICAgICAgICAgICBkaXNwYXRjaF9yd19ibG9ja19pbyhibGtpZiwgcmVxKTsK ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQkxLSUZfT1BfUFJPQkU6CiAgICAgICAg ICAgIGRpc3BhdGNoX3Byb2JlKGJsa2lmLCByZXEpOwogICAgICAgICAgICBicmVhazsKCiAgICAg ICAgZGVmYXVsdDoKICAgICAgICAgICAgRFBSSU5USygiZXJyb3I6IHVua25vd24gYmxvY2sgaW8g b3BlcmF0aW9uIFslZF1cbiIsCiAgICAgICAgICAgICAgICAgICAgcmVxLT5vcGVyYXRpb24pOwog ICAgICAgICAgICBtYWtlX3Jlc3BvbnNlKGJsa2lmLCByZXEtPmlkLCByZXEtPm9wZXJhdGlvbiwg QkxLSUZfUlNQX0VSUk9SKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAg IGJsa19yaW5nLT5yZXFfY29ucyA9IGk7CiAgICByZXR1cm4gbW9yZV90b19kbzsKfQoKc3RhdGlj IHZvaWQgZGlzcGF0Y2hfcHJvYmUoYmxraWZfdCAqYmxraWYsIGJsa2lmX3JlcXVlc3RfdCAqcmVx KQp7CiAgICBpbnQgcnNwID0gQkxLSUZfUlNQX0VSUk9SOwogICAgaW50IHBlbmRpbmdfaWR4ID0g cGVuZGluZ19yaW5nW01BU0tfUEVORF9JRFgocGVuZGluZ19jb25zKV07CiAgICBwcmludGsoImN3 YzolczppbiBpZDolbHVcbiIsIF9fRlVOQ1RJT05fXywgcmVxLT5pZCk7CgogICAgLyogV2UgZXhw ZWN0IG9uZSBidWZmZXIgb25seS4gKi8KICAgIGlmICggdW5saWtlbHkocmVxLT5ucl9zZWdtZW50 cyAhPSAxKSApCiAgICAgICAgZ290byBvdXQ7CgogICAgLyogTWFrZSBzdXJlIHRoZSBidWZmZXIg aXMgcGFnZS1zaXplZC4gKi8KICAgIGlmICggKGJsa2lmX2ZpcnN0X3NlY3QocmVxLT5mcmFtZV9h bmRfc2VjdHNbMF0pICE9IDApIHx8CiAgICAgICAgIChibGtpZl9sYXN0X3NlY3QocmVxLT5mcmFt ZV9hbmRfc2VjdHNbMF0pICE9IDcpICkKICAgICAgICBnb3RvIG91dDsKCiAgICBwcmludGsoImN3 YzolczptaWRcbiIsIF9fRlVOQ1RJT05fXyk7CiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFO VAogICAgewogICAgICAgIGdudHRhYl9vcF90ICAgICBvcDsKCiAgICAgICAgb3AudS5tYXBfZ3Jh bnRfcmVmLmhvc3RfdmlydF9hZGRyID0gTU1BUF9WQUREUihwZW5kaW5nX2lkeCwgMCk7CiAgICAg ICAgb3AudS5tYXBfZ3JhbnRfcmVmLmZsYWdzID0gR05UTUFQX2hvc3RfbWFwOwogICAgICAgIG9w LnUubWFwX2dyYW50X3JlZi5yZWYgPSBibGtpZl9ncmVmX2Zyb21fZmFzKHJlcS0+ZnJhbWVfYW5k X3NlY3RzWzBdKTsKICAgICAgICBvcC51Lm1hcF9ncmFudF9yZWYuZG9tID0gYmxraWYtPmRvbWlk OwoKICAgICAgICBpZiAoIHVubGlrZWx5KEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoCiAgICAg ICAgICAgICAgICAgICAgICAgIEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSkpKQogICAg ICAgICAgICBCVUcoKTsKCiAgICAgICAgaWYgKCBvcC51Lm1hcF9ncmFudF9yZWYuZGV2X2J1c19h ZGRyID09IDAgKQogICAgICAgICAgICBnb3RvIG91dDsKCiAgICAgICAgcGVuZGluZ19oYW5kbGUo cGVuZGluZ19pZHgsIDApID0gb3AudS5tYXBfZ3JhbnRfcmVmLmhhbmRsZTsKICAgIH0KI2Vsc2Ug LyogZWxzZSBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVCAqLwoKI2lmZGVmIENPTkZJR19YRU5fQkxL REVWX1RBUF9CRQogICAgLyogR3JhYiB0aGUgcmVhbCBmcm9udGVuZCBvdXQgb2YgdGhlIHByb2Jl IG1lc3NhZ2UuICovCiAgICBpZiAocmVxLT5mcmFtZV9hbmRfc2VjdHNbMV0gPT0gQkxLVEFQX0NP T0tJRSkgCiAgICAgICAgYmxraWYtPmlzX2Jsa3RhcCA9IDE7CiNlbmRpZgoKCiNpZmRlZiBDT05G SUdfWEVOX0JMS0RFVl9UQVBfQkUKICAgIGlmICggSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGlu Z19vdGhlcmRvbWFpbigKICAgICAgICBNTUFQX1ZBRERSKHBlbmRpbmdfaWR4LCAwKSwKICAgICAg ICAocHRlX3QpIHsgKHJlcS0+ZnJhbWVfYW5kX3NlY3RzWzBdICYgUEFHRV9NQVNLKSB8IF9fUEFH RV9LRVJORUwgfSwKICAgICAgICAwLCAoYmxraWYtPmlzX2Jsa3RhcCA/IElEX1RPX0RPTShyZXEt PmlkKSA6IGJsa2lmLT5kb21pZCkgKSApCiAgICAgICAgCiAgICAgICAgZ290byBvdXQ7CiNlbHNl CiAgICBpZiAoIEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4oCiAgICAg ICAgTU1BUF9WQUREUihwZW5kaW5nX2lkeCwgMCksCiAgICAgICAgKHB0ZV90KSB7IChyZXEtPmZy YW1lX2FuZF9zZWN0c1swXSAmIFBBR0VfTUFTSykgfCBfX1BBR0VfS0VSTkVMIH0sCiAgICAgICAg MCwgYmxraWYtPmRvbWlkKSApIAogICAgICAgIAogICAgICAgIGdvdG8gb3V0OwojZW5kaWYKI2Vu ZGlmIC8qIGVuZGlmIENPTkZJR19YRU5fQkxLREVWX0dSQU5UICovCiAgIAogICAgcHJpbnRrKCJj d2M6JXM6dmJkX3Byb2JlXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgcnNwID0gdmJkX3Byb2JlKGJs a2lmLCAodmRpc2tfdCAqKU1NQVBfVkFERFIocGVuZGluZ19pZHgsIDApLCAKICAgICAgICAgICAg ICAgICAgICBQQUdFX1NJWkUgLyBzaXplb2YodmRpc2tfdCkpOwoKIG91dDoKICAgIGZhc3RfZmx1 c2hfYXJlYShwZW5kaW5nX2lkeCwgMSk7CiAgICBtYWtlX3Jlc3BvbnNlKGJsa2lmLCByZXEtPmlk LCByZXEtPm9wZXJhdGlvbiwgcnNwKTsKICAgIHByaW50aygiY3djOiVzOm91dCByZXNwb25zZTol ZFxuIiwgX19GVU5DVElPTl9fLCByc3ApOwp9CgpzdGF0aWMgdm9pZCBkaXNwYXRjaF9yd19ibG9j a19pbyhibGtpZl90ICpibGtpZiwgYmxraWZfcmVxdWVzdF90ICpyZXEpCnsKICAgIGV4dGVybiB2 b2lkIGxsX3J3X2Jsb2NrKGludCBydywgaW50IG5yLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaHNb XSk7IAogICAgaW50IG9wZXJhdGlvbiA9IChyZXEtPm9wZXJhdGlvbiA9PSBCTEtJRl9PUF9XUklU RSkgPyBXUklURSA6IFJFQUQ7CiAgICB1bnNpZ25lZCBsb25nIGZhcyA9IDA7CiAgICBpbnQgaSwg cGVuZGluZ19pZHggPSBwZW5kaW5nX3JpbmdbTUFTS19QRU5EX0lEWChwZW5kaW5nX2NvbnMpXTsK ICAgIHBlbmRpbmdfcmVxX3QgKnBlbmRpbmdfcmVxOwojaWZkZWYgQ09ORklHX1hFTl9CTEtERVZf R1JBTlQKICAgIGdudHRhYl9vcF90ICAgICAgIGFvcFtCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JF UVVFU1RdOwojZWxzZQogICAgdW5zaWduZWQgbG9uZyByZW1hcF9wcm90OwogICAgbXVsdGljYWxs X2VudHJ5X3QgbWNsW0JMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVF07CiNlbmRpZgogICAg c3RydWN0IHBoeXNfcmVxIHByZXE7CiAgICBzdHJ1Y3QgeyAKICAgICAgICB1bnNpZ25lZCBsb25n IGJ1ZjsgdW5zaWduZWQgaW50IG5zZWM7CiAgICB9IHNlZ1tCTEtJRl9NQVhfU0VHTUVOVFNfUEVS X1JFUVVFU1RdOwogICAgdW5zaWduZWQgaW50IG5zZWc7CiNpZiBMSU5VWF9WRVJTSU9OX0NPREUg PCBLRVJORUxfVkVSU0lPTigyLDYsMCkKICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiNlbHNl CiAgICBzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMLCAqYmlvbGlzdFtCTEtJRl9NQVhfU0VHTUVOVFNf UEVSX1JFUVVFU1RdOwogICAgaW50IG5iaW8gPSAwOwogICAgcmVxdWVzdF9xdWV1ZV90ICpxOwoj ZW5kaWYKCiAgICAvKiBDaGVjayB0aGF0IG51bWJlciBvZiBzZWdtZW50cyBpcyBzYW5lLiAqLwog ICAgbnNlZyA9IHJlcS0+bnJfc2VnbWVudHM7CiAgICBwcmludGsoImN3YzolczppbiBuc2Vnczol dVxuIiwgX19GVU5DVElPTl9fLCBuc2VnKTsKICAgIGlmICggdW5saWtlbHkobnNlZyA9PSAwKSB8 fCAKICAgICAgICAgdW5saWtlbHkobnNlZyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVT VCkgKQogICAgewogICAgICAgIERQUklOVEsoIkJhZCBudW1iZXIgb2Ygc2VnbWVudHMgaW4gcmVx dWVzdCAoJWQpXG4iLCBuc2VnKTsKICAgICAgICBnb3RvIGJhZF9kZXNjcmlwdG9yOwogICAgfQoK ICAgIHByZXEuZGV2ICAgICAgICAgICA9IHJlcS0+ZGV2aWNlOwogICAgcHJlcS5zZWN0b3JfbnVt YmVyID0gcmVxLT5zZWN0b3JfbnVtYmVyOwogICAgcHJlcS5ucl9zZWN0cyAgICAgID0gMDsKCiNp ZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAgZm9yICggaSA9IDA7IGkgPCBuc2VnOyBp KysgKQogICAgewogICAgICAgIGZhcyAgICAgICAgID0gcmVxLT5mcmFtZV9hbmRfc2VjdHNbaV07 CiAgICAgICAgc2VnW2ldLm5zZWMgPSBibGtpZl9sYXN0X3NlY3QoZmFzKSAtIGJsa2lmX2ZpcnN0 X3NlY3QoZmFzKSArIDE7CgogICAgICAgIGlmICggc2VnW2ldLm5zZWMgPD0gMCApCiAgICAgICAg ICAgIGdvdG8gYmFkX2Rlc2NyaXB0b3I7CiAgICAgICAgcHJlcS5ucl9zZWN0cyArPSBzZWdbaV0u bnNlYzsKCiAgICAgICAgYW9wW2ldLnUubWFwX2dyYW50X3JlZi5ob3N0X3ZpcnRfYWRkciA9IE1N QVBfVkFERFIocGVuZGluZ19pZHgsIGkpOwoKICAgICAgICBhb3BbaV0udS5tYXBfZ3JhbnRfcmVm LmRvbSA9IGJsa2lmLT5kb21pZDsKICAgICAgICBhb3BbaV0udS5tYXBfZ3JhbnRfcmVmLnJlZiA9 IGJsa2lmX2dyZWZfZnJvbV9mYXMoZmFzKTsKICAgICAgICBhb3BbaV0udS5tYXBfZ3JhbnRfcmVm LmZsYWdzID0gKCBHTlRNQVBfaG9zdF9tYXAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICggKCBvcGVyYXRpb24gPT0gUkVBRCApID8KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IEdOVE1BUF9yZWFkb25seSApICk7CiAgICB9 CgogICAgaWYgKCB1bmxpa2VseShIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKAogICAgICAgICAg ICAgICAgICAgIEdOVFRBQk9QX21hcF9ncmFudF9yZWYsIGFvcCwgbnNlZykpKQogICAgICAgIEJV RygpOwogICAgcHJpbnRrKCJjd2M6JXM6cG9zdCBtYXBcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAg Zm9yICggaSA9IDA7IGkgPCBuc2VnOyBpKysgKQogICAgewogICAgICAgIGlmICggdW5saWtlbHko YW9wW2ldLnUubWFwX2dyYW50X3JlZi5kZXZfYnVzX2FkZHIgPT0gMCkgKQogICAgICAgIHsKICAg ICAgICAgICAgRFBSSU5USygiaW52YWxpZCBidWZmZXIgLS0gY291bGQgbm90IHJlbWFwIGl0XG4i KTsKICAgICAgICAgICAgZmFzdF9mbHVzaF9hcmVhKHBlbmRpbmdfaWR4LCBuc2VnKTsKICAgICAg ICAgICAgZ290byBiYWRfZGVzY3JpcHRvcjsKICAgICAgICB9CgogICAgICAgIHBoeXNfdG9fbWFj aGluZV9tYXBwaW5nW19fcGEoTU1BUF9WQUREUihwZW5kaW5nX2lkeCwgaSkpPj5QQUdFX1NISUZU XSA9CiAgICAgICAgICAgIEZPUkVJR05fRlJBTUUoYW9wW2ldLnUubWFwX2dyYW50X3JlZi5kZXZf YnVzX2FkZHIpOwoKICAgICAgICBwZW5kaW5nX2hhbmRsZShwZW5kaW5nX2lkeCwgaSkgPSBhb3Bb aV0udS5tYXBfZ3JhbnRfcmVmLmhhbmRsZTsKICAgIH0KI2VuZGlmCiAgICBwcmludGsoImN3Yzol czpwcmUgcG9wdWxhdGUgc2Vnc1xuIiwgX19GVU5DVElPTl9fKTsKCiAgICBmb3IgKCBpID0gMDsg aSA8IG5zZWc7IGkrKyApCiAgICB7CiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAg ICAgIHNlZ1tpXS5idWYgID0gKGFvcFtpXS51Lm1hcF9ncmFudF9yZWYuZGV2X2J1c19hZGRyIDw8 IFBBR0VfU0hJRlQpIHwKICAgICAgICAgICAgICAgICAgICAgIChibGtpZl9maXJzdF9zZWN0KGZh cykgPDwgOSk7CiNlbHNlCiAgICAgICAgZmFzICAgICAgICAgID0gcmVxLT5mcmFtZV9hbmRfc2Vj dHNbaV07CiAgICAgICAgc2VnW2ldLmJ1ZiAgPSAoZmFzICYgUEFHRV9NQVNLKSB8IChibGtpZl9m aXJzdF9zZWN0KGZhcykgPDwgOSk7CiAgICAgICAgc2VnW2ldLm5zZWMgPSBibGtpZl9sYXN0X3Nl Y3QoZmFzKSAtIGJsa2lmX2ZpcnN0X3NlY3QoZmFzKSArIDE7CiAgICAgICAgaWYgKCBzZWdbaV0u bnNlYyA8PSAwICkKICAgICAgICAgICAgZ290byBiYWRfZGVzY3JpcHRvcjsKICAgICAgICBwcmVx Lm5yX3NlY3RzICs9IHNlZ1tpXS5uc2VjOwojZW5kaWYKICAgICAJcHJpbnRrKCJjd2M6JXM6IGJ1 ZjolbHggcG9wdWxhdGVkICV1IHNlY3RzXG4iLAogICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18s IHNlZ1tpXS5idWYsIHNlZ1tpXS5uc2VjKTsKICAgIH0KCiAgICBpZiAoIHZiZF90cmFuc2xhdGUo JnByZXEsIGJsa2lmLCBvcGVyYXRpb24pICE9IDAgKQogICAgewogICAgICAgIERQUklOVEsoImFj Y2VzcyBkZW5pZWQ6ICVzIG9mIFslbGx1LCVsbHVdIG9uIGRldj0lMDR4XG4iLCAKICAgICAgICAg ICAgICAgIG9wZXJhdGlvbiA9PSBSRUFEID8gInJlYWQiIDogIndyaXRlIiwgcHJlcS5zZWN0b3Jf bnVtYmVyLAogICAgICAgICAgICAgICAgcHJlcS5zZWN0b3JfbnVtYmVyICsgcHJlcS5ucl9zZWN0 cywgcHJlcS5kZXYpOyAKICAgICAgICBnb3RvIGJhZF9kZXNjcmlwdG9yOwogICAgfQoKI2lmbmRl ZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAgaWYgKCBvcGVyYXRpb24gPT0gUkVBRCApCiAg ICAgICAgcmVtYXBfcHJvdCA9IF9QQUdFX1BSRVNFTlR8X1BBR0VfRElSVFl8X1BBR0VfQUNDRVNT RUR8X1BBR0VfUlc7CiAgICBlbHNlCiAgICAgICAgcmVtYXBfcHJvdCA9IF9QQUdFX1BSRVNFTlR8 X1BBR0VfRElSVFl8X1BBR0VfQUNDRVNTRUQ7CgogICAgZm9yICggaSA9IDA7IGkgPCBuc2VnOyBp KysgKQogICAgewogICAgICAgIG1jbFtpXS5vcCA9IF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFw cGluZ19vdGhlcmRvbWFpbjsKICAgICAgICBtY2xbaV0uYXJnc1swXSA9IE1NQVBfVkFERFIocGVu ZGluZ19pZHgsIGkpOwogICAgICAgIG1jbFtpXS5hcmdzWzFdID0gKHNlZ1tpXS5idWYgJiBQQUdF X01BU0spIHwgcmVtYXBfcHJvdDsKICAgICAgICBtY2xbaV0uYXJnc1syXSA9IDA7CiAgICAgICAg bWNsW2ldLmFyZ3NbM10gPSBibGtpZi0+ZG9taWQ7CiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9U QVBfQkUKICAgICAgICBpZiAoIGJsa2lmLT5pc19ibGt0YXAgKQogICAgICAgICAgICBtY2xbaV0u YXJnc1szXSA9IElEX1RPX0RPTShyZXEtPmlkKTsKI2VuZGlmCiAgICAgICAgcGh5c190b19tYWNo aW5lX21hcHBpbmdbX19wYShNTUFQX1ZBRERSKHBlbmRpbmdfaWR4LCBpKSk+PlBBR0VfU0hJRlRd ID0KICAgICAgICAgICAgRk9SRUlHTl9GUkFNRShzZWdbaV0uYnVmID4+IFBBR0VfU0hJRlQpOwog ICAgfQoKICAgIEJVR19PTihIWVBFUlZJU09SX211bHRpY2FsbChtY2wsIG5zZWcpICE9IDApOwoK ICAgIGZvciAoIGkgPSAwOyBpIDwgbnNlZzsgaSsrICkKICAgIHsKICAgICAgICBpZiAoIHVubGlr ZWx5KG1jbFtpXS5hcmdzWzVdICE9IDApICkKICAgICAgICB7CiAgICAgICAgICAgIERQUklOVEso ImludmFsaWQgYnVmZmVyIC0tIGNvdWxkIG5vdCByZW1hcCBpdFxuIik7CiAgICAgICAgICAgIGZh c3RfZmx1c2hfYXJlYShwZW5kaW5nX2lkeCwgbnNlZyk7CiAgICAgICAgICAgIGdvdG8gYmFkX2Rl c2NyaXB0b3I7CiAgICAgICAgfQogICAgfQojZW5kaWYgLyogZW5kIGlmbmRlZiBDT05GSUdfWEVO X0JMS0RFVl9HUkFOVCAqLwoKICAgIHBlbmRpbmdfcmVxID0gJnBlbmRpbmdfcmVxc1twZW5kaW5n X2lkeF07CiAgICBwZW5kaW5nX3JlcS0+YmxraWYgICAgID0gYmxraWY7CiAgICBwZW5kaW5nX3Jl cS0+aWQgICAgICAgID0gcmVxLT5pZDsKICAgIHBlbmRpbmdfcmVxLT5vcGVyYXRpb24gPSBvcGVy YXRpb247CiAgICBwZW5kaW5nX3JlcS0+c3RhdHVzICAgID0gQkxLSUZfUlNQX09LQVk7CiAgICBw ZW5kaW5nX3JlcS0+bnJfcGFnZXMgID0gbnNlZzsKCiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBL RVJORUxfVkVSU0lPTigyLDYsMCkKCiAgICBhdG9taWNfc2V0KCZwZW5kaW5nX3JlcS0+cGVuZGNu dCwgbnNlZyk7CiAgICBwZW5kaW5nX2NvbnMrKzsKICAgIGJsa2lmX2dldChibGtpZik7CgogICAg Zm9yICggaSA9IDA7IGkgPCBuc2VnOyBpKysgKQogICAgewogICAgICAgIGJoID0ga21lbV9jYWNo ZV9hbGxvYyhidWZmZXJfaGVhZF9jYWNoZXAsIEdGUF9LRVJORUwpOwogICAgICAgIGlmICggdW5s aWtlbHkoYmggPT0gTlVMTCkgKQogICAgICAgIHsKICAgICAgICAgICAgX19lbmRfYmxvY2tfaW9f b3AocGVuZGluZ19yZXEsIDApOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAg ICAgIG1lbXNldChiaCwgMCwgc2l6ZW9mIChzdHJ1Y3QgYnVmZmVyX2hlYWQpKTsKCiAgICAgICAg aW5pdF93YWl0cXVldWVfaGVhZCgmYmgtPmJfd2FpdCk7CiAgICAgICAgYmgtPmJfc2l6ZSAgICAg ICAgICA9IHNlZ1tpXS5uc2VjIDw8IDk7CiAgICAgICAgYmgtPmJfZGV2ICAgICAgICAgICA9IHBy ZXEuZGV2OwogICAgICAgIGJoLT5iX3JkZXYgICAgICAgICAgPSBwcmVxLmRldjsKICAgICAgICBi aC0+Yl9yc2VjdG9yICAgICAgID0gKHVuc2lnbmVkIGxvbmcpcHJlcS5zZWN0b3JfbnVtYmVyOwog ICAgICAgIGJoLT5iX2RhdGEgICAgICAgICAgPSAoY2hhciAqKU1NQVBfVkFERFIocGVuZGluZ19p ZHgsIGkpICsKICAgICAgICAgICAgKHNlZ1tpXS5idWYgJiB+UEFHRV9NQVNLKTsKICAgICAgICBi aC0+Yl9wYWdlICAgICAgICAgID0gdmlydF90b19wYWdlKE1NQVBfVkFERFIocGVuZGluZ19pZHgs IGkpKTsKICAgICAgICBiaC0+Yl9lbmRfaW8gICAgICAgID0gZW5kX2Jsb2NrX2lvX29wOwogICAg ICAgIGJoLT5iX3ByaXZhdGUgICAgICAgPSBwZW5kaW5nX3JlcTsKCiAgICAgICAgYmgtPmJfc3Rh dGUgPSAoMSA8PCBCSF9NYXBwZWQpIHwgKDEgPDwgQkhfTG9jaykgfCAKICAgICAgICAgICAgKDEg PDwgQkhfUmVxKSB8ICgxIDw8IEJIX0xhdW5kZXIpOwogICAgICAgIGlmICggb3BlcmF0aW9uID09 IFdSSVRFICkKICAgICAgICAgICAgYmgtPmJfc3RhdGUgfD0gKDEgPDwgQkhfSkJEKSB8ICgxIDw8 IEJIX1JlcSkgfCAoMSA8PCBCSF9VcHRvZGF0ZSk7CgogICAgICAgIGF0b21pY19zZXQoJmJoLT5i X2NvdW50LCAxKTsKCiAgICAgICAgLyogRGlzcGF0Y2ggYSBzaW5nbGUgcmVxdWVzdC4gV2UnbGwg Zmx1c2ggaXQgdG8gZGlzYyBsYXRlci4gKi8KICAgICAgICBnZW5lcmljX21ha2VfcmVxdWVzdChv cGVyYXRpb24sIGJoKTsKCiAgICAgICAgcHJlcS5zZWN0b3JfbnVtYmVyICs9IHNlZ1tpXS5uc2Vj OwogICAgfQoKI2Vsc2UKCiAgICBmb3IgKCBpID0gMDsgaSA8IG5zZWc7IGkrKyApCiAgICB7CiAg ICAgICAgd2hpbGUgKCAoYmlvID09IE5VTEwpIHx8CiAgICAgICAgICAgICAgICAoYmlvX2FkZF9w YWdlKGJpbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydF90b19wYWdlKE1NQVBf VkFERFIocGVuZGluZ19pZHgsIGkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vn W2ldLm5zZWMgPDwgOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnW2ldLmJ1ZiAm IH5QQUdFX01BU0spID09IDApICkKICAgICAgICB7CiAgICAgICAgICAgIGJpbyA9IGJpb2xpc3Rb bmJpbysrXSA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBuc2VnLWkpOwogICAgICAgICAgICBpZiAo IHVubGlrZWx5KGJpbyA9PSBOVUxMKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgKG5iaW8tMSk7IGkrKyApCiAgICAgICAgICAgICAgICAgICAgYmlvX3B1 dChiaW9saXN0W2ldKTsKICAgICAgICAgICAgICAgIGZhc3RfZmx1c2hfYXJlYShwZW5kaW5nX2lk eCwgbnNlZyk7CiAgICAgICAgICAgICAgICBnb3RvIGJhZF9kZXNjcmlwdG9yOwogICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgYmlvLT5iaV9iZGV2ICAgID0gcHJlcS5i ZGV2OwogICAgICAgICAgICBiaW8tPmJpX3ByaXZhdGUgPSBwZW5kaW5nX3JlcTsKICAgICAgICAg ICAgYmlvLT5iaV9lbmRfaW8gID0gZW5kX2Jsb2NrX2lvX29wOwogICAgICAgICAgICBiaW8tPmJp X3NlY3RvciAgPSBwcmVxLnNlY3Rvcl9udW1iZXI7CiAgICAgICAgfQoKICAgICAgICBwcmVxLnNl Y3Rvcl9udW1iZXIgKz0gc2VnW2ldLm5zZWM7CiAgICB9CiAgICBwcmludGsoImN3YzolczogcG9z dCBiaW9fYWRkX3BhZ2VcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgaWYgKCAocSA9IGJkZXZfZ2V0 X3F1ZXVlKGJpby0+YmlfYmRldikpICE9IHBsdWdnZWRfcXVldWUgKQogICAgewogICAgICAgIGZs dXNoX3BsdWdnZWRfcXVldWUoKTsKICAgICAgICBibGtfZ2V0X3F1ZXVlKHEpOwogICAgICAgIHBs dWdnZWRfcXVldWUgPSBxOwogICAgfQoKICAgIGF0b21pY19zZXQoJnBlbmRpbmdfcmVxLT5wZW5k Y250LCBuYmlvKTsKICAgIHBlbmRpbmdfY29ucysrOwogICAgYmxraWZfZ2V0KGJsa2lmKTsKCiAg ICBmb3IgKCBpID0gMDsgaSA8IG5iaW87IGkrKyApCiAgICAgICAgc3VibWl0X2JpbyhvcGVyYXRp b24sIGJpb2xpc3RbaV0pOwoKI2VuZGlmCiAgICBwcmludGsoImN3YzolczogJWQgYmlvcyBzdWJt aXR0ZWRcbiIsIF9fRlVOQ1RJT05fXywgbmJpbyk7CgogICAgcmV0dXJuOwoKIGJhZF9kZXNjcmlw dG9yOgogICAgbWFrZV9yZXNwb25zZShibGtpZiwgcmVxLT5pZCwgcmVxLT5vcGVyYXRpb24sIEJM S0lGX1JTUF9FUlJPUik7CiAgICBwcmludGsoImN3YzolczogJWQgYmFkIGRlc2NyaXB0b3JcbiIs IF9fRlVOQ1RJT05fXyk7Cn0gCgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogTUlTQ0VMTEFORU9VUyBTRVRVUCAv IFRFQVJET1dOIC8gREVCVUdHSU5HCiAqLwoKCnN0YXRpYyB2b2lkIG1ha2VfcmVzcG9uc2UoYmxr aWZfdCAqYmxraWYsIHVuc2lnbmVkIGxvbmcgaWQsIAogICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIHNob3J0IG9wLCBpbnQgc3QpCnsKICAgIGJsa2lmX3Jlc3BvbnNlX3QgKnJlc3A7 CiAgICB1bnNpZ25lZCBsb25nICAgICBmbGFnczsKICAgIGJsa2lmX2JhY2tfcmluZ190ICpibGtf cmluZyA9ICZibGtpZi0+YmxrX3Jpbmc7CgogICAgLyogUGxhY2Ugb24gdGhlIHJlc3BvbnNlIHJp bmcgZm9yIHRoZSByZWxldmFudCBkb21haW4uICovIAogICAgc3Bpbl9sb2NrX2lycXNhdmUoJmJs a2lmLT5ibGtfcmluZ19sb2NrLCBmbGFncyk7CiAgICByZXNwID0gUklOR19HRVRfUkVTUE9OU0Uo YmxrX3JpbmcsIGJsa19yaW5nLT5yc3BfcHJvZF9wdnQpOwogICAgcmVzcC0+aWQgICAgICAgID0g aWQ7CiAgICByZXNwLT5vcGVyYXRpb24gPSBvcDsKICAgIHJlc3AtPnN0YXR1cyAgICA9IHN0Owog ICAgd21iKCk7IC8qIEVuc3VyZSBvdGhlciBzaWRlIGNhbiBzZWUgdGhlIHJlc3BvbnNlIGZpZWxk cy4gKi8KICAgIGJsa19yaW5nLT5yc3BfcHJvZF9wdnQrKzsKICAgIFJJTkdfUFVTSF9SRVNQT05T RVMoYmxrX3JpbmcpOwogICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxraWYtPmJsa19yaW5n X2xvY2ssIGZsYWdzKTsKCiAgICAvKiBLaWNrIHRoZSByZWxldmFudCBkb21haW4uICovCiAgICBu b3RpZnlfdmlhX2V2dGNobihibGtpZi0+ZXZ0Y2huKTsKfQoKdm9pZCBibGtpZl9kZXNjaGVkdWxl KGJsa2lmX3QgKmJsa2lmKQp7CiAgICByZW1vdmVfZnJvbV9ibGtkZXZfbGlzdChibGtpZik7Cn0K CnN0YXRpYyBpbnQgX19pbml0IGJsa2lmX2luaXQodm9pZCkKewogICAgaW50IGk7CgogICAgaWYg KCAhKHhlbl9zdGFydF9pbmZvLmZsYWdzICYgU0lGX0lOSVRET01BSU4pICYmCiAgICAgICAgICEo eGVuX3N0YXJ0X2luZm8uZmxhZ3MgJiBTSUZfQkxLX0JFX0RPTUFJTikgKQogICAgICAgIHJldHVy biAwOwoKICAgIGJsa2lmX2ludGVyZmFjZV9pbml0KCk7CgogICAgaWYgKCAobW1hcF92c3RhcnQg PSBhbGxvY2F0ZV9lbXB0eV9sb3dtZW1fcmVnaW9uKE1NQVBfUEFHRVMpKSA9PSAwICkKICAgICAg ICBCVUcoKTsKCiAgICBwZW5kaW5nX2NvbnMgPSAwOwogICAgcGVuZGluZ19wcm9kID0gTUFYX1BF TkRJTkdfUkVRUzsKICAgIG1lbXNldChwZW5kaW5nX3JlcXMsIDAsIHNpemVvZihwZW5kaW5nX3Jl cXMpKTsKICAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX1BFTkRJTkdfUkVRUzsgaSsrICkKICAgICAg ICBwZW5kaW5nX3JpbmdbaV0gPSBpOwogICAgCiAgICBzcGluX2xvY2tfaW5pdCgmYmxraW9fc2No ZWR1bGVfbGlzdF9sb2NrKTsKICAgIElOSVRfTElTVF9IRUFEKCZibGtpb19zY2hlZHVsZV9saXN0 KTsKCiAgICBpZiAoIGtlcm5lbF90aHJlYWQoYmxraW9fc2NoZWR1bGUsIDAsIENMT05FX0ZTIHwg Q0xPTkVfRklMRVMpIDwgMCApCiAgICAgICAgQlVHKCk7CgojaWYgTElOVVhfVkVSU0lPTl9DT0RF IDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCiAgICBidWZmZXJfaGVhZF9jYWNoZXAgPSBrbWVtX2Nh Y2hlX2NyZWF0ZSgKICAgICAgICAiYnVmZmVyX2hlYWRfY2FjaGUiLCBzaXplb2Yoc3RydWN0IGJ1 ZmZlcl9oZWFkKSwKICAgICAgICAwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwsIE5VTEwpOwoj ZW5kaWYKCiAgICBibGtpZl9jdHJsaWZfaW5pdCgpOwogICAgCiNpZmRlZiBDT05GSUdfWEVOX0JM S0RFVl9HUkFOVAogICAgbWVtc2V0KCBwZW5kaW5nX2dyYW50X2hhbmRsZXMsICBCTEtCQUNLX0lO VkFMSURfSEFORExFLCBNTUFQX1BBR0VTICk7CiAgICBwcmludGsoS0VSTl9BTEVSVCAiQmxraWYg YmFja2VuZCBpcyB1c2luZyBncmFudCB0YWJsZXMuXG4iKTsKI2VuZGlmCgojaWZkZWYgQ09ORklH X1hFTl9CTEtERVZfVEFQX0JFCiAgICBwcmludGsoS0VSTl9BTEVSVCAiTk9URTogQmxraWYgYmFj a2VuZCBpcyBydW5uaW5nIHdpdGggdGFwIHN1cHBvcnQgb24hXG4iKTsKI2VuZGlmCgogICAgcmV0 dXJuIDA7Cn0KCl9faW5pdGNhbGwoYmxraWZfaW5pdCk7Cg== ------=_Part_20398_14467821.1113842330305 Content-Type: text/x-csrc; name="blkfront.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="blkfront.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogKiBibGtmcm9udC5jCiAqIAogKiBYZW5MaW51eCB2aXJ0 dWFsIGJsb2NrLWRldmljZSBkcml2ZXIuCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCwg S2VpciBGcmFzZXIgJiBTdGV2ZSBIYW5kCiAqIE1vZGlmaWNhdGlvbnMgYnkgTWFyayBBLiBXaWxs aWFtc29uIGFyZSAoYykgSW50ZWwgUmVzZWFyY2ggQ2FtYnJpZGdlCiAqIENvcHlyaWdodCAoYykg MjAwNCwgQ2hyaXN0aWFuIExpbXBhY2gKICogQ29weXJpZ2h0IChjKSAyMDA0LCBBbmRyZXcgV2Fy ZmllbGQKICogQ29weXJpZ2h0IChjKSAyMDA1LCBDaHJpc3RvcGhlciBDbGFyawogKiAKICogVGhp cyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIExpbnV4IGtlcm5l bCwgb3IKICogaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIgc29mdHdhcmUgcGFja2FnZXMsIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKiAKICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQog KiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQKICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKICogbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs CiAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKiAK ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug c2hhbGwgYmUgaW5jbHVkZWQgaW4KICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuCiAqIAogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwogKiBJTiBUSEUgU09GVFdBUkUuCiAqLwoKI2lm IDEKI2RlZmluZSBBU1NFUlQoX3ApIFwKICAgIGlmICggIShfcCkgKSB7IHByaW50aygiQXNzZXJ0 aW9uICclcycgZmFpbGVkLCBsaW5lICVkLCBmaWxlICVzIiwgI19wICwgXAogICAgX19MSU5FX18s IF9fRklMRV9fKTsgKihpbnQqKTA9MDsgfQojZWxzZQojZGVmaW5lIEFTU0VSVChfcCkKI2VuZGlm CgojaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgoKI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBL RVJORUxfVkVSU0lPTigyLDYsMCkKI2luY2x1ZGUgImJsb2NrLmgiCiNlbHNlCiNpbmNsdWRlICJj b21tb24uaCIKI2luY2x1ZGUgPGxpbnV4L2Jsay5oPgojaW5jbHVkZSA8bGludXgvdHF1ZXVlLmg+ CiNlbmRpZgoKI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CiNpbmNsdWRlIDxsaW51eC9zY2hlZC5o PgojaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KI2lu Y2x1ZGUgPGFzbS14ZW4vY3RybF9pZi5oPgojaW5jbHVkZSA8YXNtLXhlbi9ldnRjaG4uaD4KI2lm ZGVmIENPTkZJR19YRU5fQkxLREVWX0dSQU5UCiNpbmNsdWRlIDxhc20teGVuL3hlbi1wdWJsaWMv Z3JhbnRfdGFibGUuaD4KI2luY2x1ZGUgPGFzbS14ZW4vZ250dGFiLmg+CiNlbmRpZgoKdHlwZWRl ZiB1bnNpZ25lZCBjaGFyIGJ5dGU7IC8qIGZyb20gbGludXgvaWRlLmggKi8KCi8qIENvbnRyb2wg d2hldGhlciBydW50aW1lIHVwZGF0ZSBvZiB2YmRzIGlzIGVuYWJsZWQuICovCiNkZWZpbmUgRU5B QkxFX1ZCRF9VUERBVEUgMQoKI2lmIEVOQUJMRV9WQkRfVVBEQVRFCnN0YXRpYyB2b2lkIHZiZF91 cGRhdGUodm9pZCk7CiNlbHNlCnN0YXRpYyB2b2lkIHZiZF91cGRhdGUodm9pZCl7fTsKI2VuZGlm CgojZGVmaW5lIEJMS0lGX1NUQVRFX0NMT1NFRCAgICAgICAwCiNkZWZpbmUgQkxLSUZfU1RBVEVf RElTQ09OTkVDVEVEIDEKI2RlZmluZSBCTEtJRl9TVEFURV9DT05ORUNURUQgICAgMgoKI2RlZmlu ZSBXUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAieGVuX2JsazogIiBm bXQsICMjYXJncykKCnN0YXRpYyBpbnQgYmxraWZfaGFuZGxlID0gMDsKc3RhdGljIHVuc2lnbmVk IGludCBibGtpZl9zdGF0ZSA9IEJMS0lGX1NUQVRFX0NMT1NFRDsKc3RhdGljIHVuc2lnbmVkIGlu dCBibGtpZl9ldnRjaG4gPSAwOwpzdGF0aWMgdW5zaWduZWQgaW50IGJsa2lmX2lycSA9IDA7Cgpz dGF0aWMgaW50IGJsa2lmX2NvbnRyb2xfcnNwX3ZhbGlkOwpzdGF0aWMgYmxraWZfcmVzcG9uc2Vf dCBibGtpZl9jb250cm9sX3JzcDsKCnN0YXRpYyBibGtpZl9mcm9udF9yaW5nX3QgYmxrX3Jpbmc7 CgojZGVmaW5lIEJMS19SSU5HX1NJWkUgX19SSU5HX1NJWkUoKGJsa2lmX3NyaW5nX3QgKikwLCBQ QUdFX1NJWkUpCgojaWZkZWYgQ09ORklHX1hFTl9CTEtERVZfR1JBTlQKc3RhdGljIGRvbWlkX3Qg cmRvbWlkID0gMDsKc3RhdGljIGdyYW50X3JlZl90IGdyZWZfaGVhZCwgZ3JlZl90ZXJtaW5hbDsK I2RlZmluZSBNQVhJTVVNX09VVFNUQU5ESU5HX0JMT0NLX1JFUVMgXAogICAgKEJMS0lGX01BWF9T RUdNRU5UU19QRVJfUkVRVUVTVCAqIEJMS0lGX1JJTkdfU0laRSkKI2VuZGlmCgp1bnNpZ25lZCBs b25nIHJlY19yaW5nX2ZyZWU7CmJsa2lmX3JlcXVlc3RfdCByZWNfcmluZ1tCTEtfUklOR19TSVpF XTsKCnN0YXRpYyBpbnQgcmVjb3ZlcnkgPSAwOyAgICAgICAgICAgLyogIlJlY292ZXJ5IGluIHBy b2dyZXNzIiBmbGFnLiAgUHJvdGVjdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogYnkgdGhlIGJsa2lmX2lvX2xvY2sgKi8KCnN0YXRpYyB2b2lkIGtpY2tfcGVuZGluZ19y ZXF1ZXN0X3F1ZXVlcyh2b2lkKTsKCmludCBfX2luaXQgeGxibGtfaW5pdCh2b2lkKTsKCnZvaWQg YmxraWZfY29tcGxldGlvbiggYmxraWZfcmVxdWVzdF90ICpyZXEgKTsKCnN0YXRpYyBpbmxpbmUg aW50IEdFVF9JRF9GUk9NX0ZSRUVMSVNUKCB2b2lkICkKewogICAgdW5zaWduZWQgbG9uZyBmcmVl ID0gcmVjX3JpbmdfZnJlZTsKCiAgICBCVUdfT04oZnJlZSA+IEJMS19SSU5HX1NJWkUpOwoKICAg IHJlY19yaW5nX2ZyZWUgPSByZWNfcmluZ1tmcmVlXS5pZDsKCiAgICByZWNfcmluZ1tmcmVlXS5p ZCA9IDB4MGZmZmZmZWU7IC8qIGRlYnVnICovCgogICAgcmV0dXJuIGZyZWU7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBBRERfSURfVE9fRlJFRUxJU1QoIHVuc2lnbmVkIGxvbmcgaWQgKQp7CiAgICBy ZWNfcmluZ1tpZF0uaWQgPSByZWNfcmluZ19mcmVlOwogICAgcmVjX3JpbmdfZnJlZSA9IGlkOwp9 CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKiAgQ09NTU9OIENPREUgIChpbmxpbmVkKSAgKioq KioqKioqKioqKioqKioqKioqKioqLwoKLyogS2VybmVsLXNwZWNpZmljIGRlZmluaXRpb25zIHVz ZWQgaW4gdGhlIGNvbW1vbiBjb2RlICovCiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVM X1ZFUlNJT04oMiw2LDApCiNkZWZpbmUgRElTQUJMRV9TQ0FUVEVSR0FUSEVSKCkgCiNlbHNlCnN0 YXRpYyBpbnQgc2dfb3BlcmF0aW9uID0gLTE7CiNkZWZpbmUgRElTQUJMRV9TQ0FUVEVSR0FUSEVS KCkgKHNnX29wZXJhdGlvbiA9IC0xKQojZW5kaWYKCnN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2xh dGVfcmVxX3RvX3BmbihibGtpZl9yZXF1ZXN0X3QgKnhyZXEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBibGtpZl9yZXF1ZXN0X3QgKnJlcSkKewogICAgaW50IGk7Cgog ICAgeHJlcS0+b3BlcmF0aW9uICAgICA9IHJlcS0+b3BlcmF0aW9uOwogICAgeHJlcS0+bnJfc2Vn bWVudHMgICA9IHJlcS0+bnJfc2VnbWVudHM7CiAgICB4cmVxLT5kZXZpY2UgICAgICAgID0gcmVx LT5kZXZpY2U7CiAgICAvKiBwcmVzZXJ2ZSBpZCAqLwogICAgeHJlcS0+c2VjdG9yX251bWJlciA9 IHJlcS0+c2VjdG9yX251bWJlcjsKCiAgICBmb3IgKCBpID0gMDsgaSA8IHJlcS0+bnJfc2VnbWVu dHM7IGkrKyApCiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAgICAgIHhyZXEtPmZy YW1lX2FuZF9zZWN0c1tpXSA9IHJlcS0+ZnJhbWVfYW5kX3NlY3RzW2ldOwojZWxzZQogICAgICAg IHhyZXEtPmZyYW1lX2FuZF9zZWN0c1tpXSA9IG1hY2hpbmVfdG9fcGh5cyhyZXEtPmZyYW1lX2Fu ZF9zZWN0c1tpXSk7CiNlbmRpZgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNsYXRlX3JlcV90 b19tZm4oYmxraWZfcmVxdWVzdF90ICp4cmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmxraWZfcmVxdWVzdF90ICpyZXEpCnsKICAgIGludCBpOwoKICAgIHhyZXEt Pm9wZXJhdGlvbiAgICAgPSByZXEtPm9wZXJhdGlvbjsKICAgIHhyZXEtPm5yX3NlZ21lbnRzICAg PSByZXEtPm5yX3NlZ21lbnRzOwogICAgeHJlcS0+ZGV2aWNlICAgICAgICA9IHJlcS0+ZGV2aWNl OwogICAgeHJlcS0+aWQgICAgICAgICAgICA9IHJlcS0+aWQ7ICAgLyogY29weSBpZCAodW5saWtl IGFib3ZlKSAqLwogICAgeHJlcS0+c2VjdG9yX251bWJlciA9IHJlcS0+c2VjdG9yX251bWJlcjsK CiAgICBmb3IgKCBpID0gMDsgaSA8IHJlcS0+bnJfc2VnbWVudHM7IGkrKyApCiNpZmRlZiBDT05G SUdfWEVOX0JMS0RFVl9HUkFOVAogICAgICAgIHhyZXEtPmZyYW1lX2FuZF9zZWN0c1tpXSA9IHJl cS0+ZnJhbWVfYW5kX3NlY3RzW2ldOwojZWxzZQogICAgICAgIHhyZXEtPmZyYW1lX2FuZF9zZWN0 c1tpXSA9IHBoeXNfdG9fbWFjaGluZShyZXEtPmZyYW1lX2FuZF9zZWN0c1tpXSk7CiNlbmRpZgp9 CgoKc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3JlcXVlc3RzKHZvaWQpCnsKICAgIERJU0FCTEVf U0NBVFRFUkdBVEhFUigpOwogICAgUklOR19QVVNIX1JFUVVFU1RTKCZibGtfcmluZyk7CiAgICBu b3RpZnlfdmlhX2V2dGNobihibGtpZl9ldnRjaG4pOwp9CgoKCgovKioqKioqKioqKioqKioqKioq KioqKioqKiogIEtFUk5FTCBWRVJTSU9OIDIuNiAgKioqKioqKioqKioqKioqKioqKioqKioqKiov CgojaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQoKbW9kdWxl X2luaXQoeGxibGtfaW5pdCk7CgojaWYgRU5BQkxFX1ZCRF9VUERBVEUKc3RhdGljIHZvaWQgdXBk YXRlX3ZiZHNfdGFzayh2b2lkICp1bnVzZWQpCnsgCiAgICB4bHZiZF91cGRhdGVfdmJkcygpOwp9 CgpzdGF0aWMgdm9pZCB2YmRfdXBkYXRlKHZvaWQpCnsKICAgIHN0YXRpYyBERUNMQVJFX1dPUkso dXBkYXRlX3RxLCB1cGRhdGVfdmJkc190YXNrLCBOVUxMKTsKICAgIHNjaGVkdWxlX3dvcmsoJnVw ZGF0ZV90cSk7Cn0KI2VuZGlmIC8qIEVOQUJMRV9WQkRfVVBEQVRFICovCgpzdGF0aWMgdm9pZCBr aWNrX3BlbmRpbmdfcmVxdWVzdF9xdWV1ZXModm9pZCkKewoKICAgIGlmICggKHhsYmRfYmxrX3F1 ZXVlICE9IE5VTEwpICYmCiAgICAgICAgIHRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJnhs YmRfYmxrX3F1ZXVlLT5xdWV1ZV9mbGFncykgKQogICAgewogICAgICAgIGJsa19zdGFydF9xdWV1 ZSh4bGJkX2Jsa19xdWV1ZSk7CiAgICAgICAgLyogWFhYY2wgY2FsbCB0byByZXF1ZXN0X2ZuIHNo b3VsZCBub3QgYmUgbmVlZGVkIGJ1dAogICAgICAgICAqIHdlIGdldCBzdHVjayB3aXRob3V0Li4u ICBuZWVkcyBpbnZlc3RpZ2F0aW5nCiAgICAgICAgICovCiAgICAgICAgeGxiZF9ibGtfcXVldWUt PnJlcXVlc3RfZm4oeGxiZF9ibGtfcXVldWUpOwogICAgfQoKfQoKCmludCBibGtpZl9vcGVuKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKewogICAgc3RydWN0IGdlbmRp c2sgKmdkID0gaW5vZGUtPmlfYmRldi0+YmRfZGlzazsKICAgIHN0cnVjdCB4bGJkX2Rpc2tfaW5m byAqZGkgPSAoc3RydWN0IHhsYmRfZGlza19pbmZvICopZ2QtPnByaXZhdGVfZGF0YTsKICAgIHBy aW50aygiY3djOiVzOiBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgLyogVXBkYXRlIG9m IHVzYWdlIGNvdW50IGlzIHByb3RlY3RlZCBieSBwZXItZGV2aWNlIHNlbWFwaG9yZS4gKi8KICAg IGRpLT5taS0+dXNhZ2UrKzsKICAgIAogICAgcmV0dXJuIDA7Cn0KCgppbnQgYmxraWZfcmVsZWFz ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCnsKICAgIHN0cnVjdCBn ZW5kaXNrICpnZCA9IGlub2RlLT5pX2JkZXYtPmJkX2Rpc2s7CiAgICBzdHJ1Y3QgeGxiZF9kaXNr X2luZm8gKmRpID0gKHN0cnVjdCB4bGJkX2Rpc2tfaW5mbyAqKWdkLT5wcml2YXRlX2RhdGE7CiAg ICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwoKICAgIC8qCiAgICAg KiBXaGVuIHVzYWdlIGRyb3BzIHRvIHplcm8gaXQgbWF5IGFsbG93IG1vcmUgVkJEIHVwZGF0ZXMg dG8gb2NjdXIuCiAgICAgKiBVcGRhdGUgb2YgdXNhZ2UgY291bnQgaXMgcHJvdGVjdGVkIGJ5IGEg cGVyLWRldmljZSBzZW1hcGhvcmUuCiAgICAgKi8KICAgIGlmICgtLWRpLT5taS0+dXNhZ2UgPT0g MCkgewogICAgICAgIHZiZF91cGRhdGUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKCmludCBi bGtpZl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZ3VtZW50KQp7CiAg ICBpbnQgaTsKICAgIHByaW50aygiY3djOiVzOiBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Cgog ICAgRFBSSU5US19JT0NUTCgiY29tbWFuZDogMHgleCwgYXJndW1lbnQ6IDB4JWx4LCBkZXY6IDB4 JTA0eFxuIiwKICAgICAgICAgICAgICAgICAgY29tbWFuZCwgKGxvbmcpYXJndW1lbnQsIGlub2Rl LT5pX3JkZXYpOyAKICAKICAgIHN3aXRjaCAoY29tbWFuZCkgewoKICAgIGNhc2UgSERJT19HRVRH RU86CiAgICAgICAgLyogcmV0dXJuIEVOT1NZUyB0byB1c2UgZGVmYXVsdHMgKi8KICAgICAgICBy ZXR1cm4gLUVOT1NZUzsKCiAgICBjYXNlIENEUk9NTVVMVElTRVNTSU9OOgogICAgICAgIERQUklO VEsoIkZJWE1FOiBzdXBwb3J0IG11bHRpc2Vzc2lvbiBDRHMgbGF0ZXJcbiIpOwogICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24pOyBpKysgKQog ICAgICAgICAgICBpZiAoIHB1dF91c2VyKDAsIChieXRlICopKGFyZ3VtZW50ICsgaSkpICkgcmV0 dXJuIC1FRkFVTFQ7CiAgICAgICAgcmV0dXJuIDA7CgogICAgZGVmYXVsdDoKICAgICAgICBwcmlu dGsoS0VSTl9BTEVSVCAiaW9jdGwgJTA4eCBub3Qgc3VwcG9ydGVkIGJ5IFhlbiBibGtkZXZcbiIs CiAgICAgICAgICAgICAgIGNvbW1hbmQpOwogICAgICAgIHJldHVybiAtRU5PU1lTOwogICAgfQoK ICAgIHJldHVybiAwOwp9CgoKLyoKICogYmxraWZfcXVldWVfcmVxdWVzdAogKgogKiByZXF1ZXN0 IGJsb2NrIGlvIAogKiAKICogaWQ6IGZvciBndWVzdCB1c2Ugb25seS4KICogb3BlcmF0aW9uOiBC TEtJRl9PUF97UkVBRCxXUklURSxQUk9CRX0KICogYnVmZmVyOiBidWZmZXIgdG8gcmVhZC93cml0 ZSBpbnRvLiB0aGlzIHNob3VsZCBiZSBhCiAqICAgdmlydHVhbCBhZGRyZXNzIGluIHRoZSBndWVz dCBvcy4KICovCnN0YXRpYyBpbnQgYmxraWZfcXVldWVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAq cmVxKQp7CiAgICBzdHJ1Y3QgeGxiZF9kaXNrX2luZm8gKmRpID0KICAgICAgICAoc3RydWN0IHhs YmRfZGlza19pbmZvICopcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7CiAgICB1bnNpZ25lZCBs b25nIGJ1ZmZlcl9tYTsKICAgIGJsa2lmX3JlcXVlc3RfdCAqcmluZ19yZXE7CiAgICBzdHJ1Y3Qg YmlvICpiaW87CiAgICBzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKICAgIGludCBpZHg7CiAgICB1bnNp Z25lZCBsb25nIGlkOwogICAgdW5zaWduZWQgaW50IGZzZWN0LCBsc2VjdDsKI2lmZGVmIENPTkZJ R19YRU5fQkxLREVWX0dSQU5UCiAgICBpbnQgcmVmOwojZW5kaWYKICAgIHByaW50aygiY3djOiVz OiBpbiBibGtpZl9zdGF0ZToldVxuIiwgX19GVU5DVElPTl9fLCBibGtpZl9zdGF0ZSk7CgogICAg aWYgKCB1bmxpa2VseShibGtpZl9zdGF0ZSAhPSBCTEtJRl9TVEFURV9DT05ORUNURUQpICkKICAg ICAgICByZXR1cm4gMTsKCiAgICAvKiBGaWxsIG91dCBhIGNvbW11bmljYXRpb25zIHJpbmcgc3Ry dWN0dXJlLiAqLwogICAgcmluZ19yZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCZibGtfcmluZywgYmxr X3JpbmcucmVxX3Byb2RfcHZ0KTsKICAgIGlkID0gR0VUX0lEX0ZST01fRlJFRUxJU1QoKTsKICAg IHJlY19yaW5nW2lkXS5pZCA9ICh1bnNpZ25lZCBsb25nKSByZXE7CgogICAgcmluZ19yZXEtPmlk ID0gaWQ7CiAgICByaW5nX3JlcS0+b3BlcmF0aW9uID0gcnFfZGF0YV9kaXIocmVxKSA/IEJMS0lG X09QX1dSSVRFIDoKICAgICAgICBCTEtJRl9PUF9SRUFEOwogICAgcmluZ19yZXEtPnNlY3Rvcl9u dW1iZXIgPSAoYmxraWZfc2VjdG9yX3QpcmVxLT5zZWN0b3I7CiAgICByaW5nX3JlcS0+ZGV2aWNl ID0gZGktPnhkX2RldmljZTsKCiAgICByaW5nX3JlcS0+bnJfc2VnbWVudHMgPSAwOwogICAgcnFf Zm9yX2VhY2hfYmlvKGJpbywgcmVxKQogICAgewogICAgICAgIGJpb19mb3JfZWFjaF9zZWdtZW50 KGJ2ZWMsIGJpbywgaWR4KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCByaW5nX3JlcS0+bnJf c2VnbWVudHMgPT0gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUICkKICAgICAgICAgICAg ICAgIEJVRygpOwogICAgICAgICAgICBidWZmZXJfbWEgPSBwYWdlX3RvX3BoeXMoYnZlYy0+YnZf cGFnZSk7CiAgICAgICAgICAgIGZzZWN0ID0gYnZlYy0+YnZfb2Zmc2V0ID4+IDk7CiAgICAgICAg ICAgIGxzZWN0ID0gZnNlY3QgKyAoYnZlYy0+YnZfbGVuID4+IDkpIC0gMTsKI2lmZGVmIENPTkZJ R19YRU5fQkxLREVWX0dSQU5UCiAgICAgICAgICAgIC8qIGluc3RhbGwgYSBncmFudCByZWZlcmVu Y2UuICovCiAgICAgICAgICAgIHJlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2UoJmdy ZWZfaGVhZCwgZ3JlZl90ZXJtaW5hbCk7CiAgICAgICAgICAgIEFTU0VSVCggcmVmICE9IC1FTk9T UEMgKTsKCiAgICAgICAgICAgIGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoCiAgICAg ICAgICAgICAgICAgICAgICAgIHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgcmRvbWlkLAog ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbWEgPj4gUEFHRV9TSElGVCwKICAgICAgICAg ICAgICAgICAgICAgICAgcnFfZGF0YV9kaXIocmVxKSApOwoKICAgICAgICAgICAgcmluZ19yZXEt PmZyYW1lX2FuZF9zZWN0c1tyaW5nX3JlcS0+bnJfc2VnbWVudHMrK10gPQogICAgICAgICAgICAg ICAgKCgodTMyKSByZWYpIDw8IDE2KSB8IChmc2VjdCA8PCAzKSB8IGxzZWN0OwojZWxzZQogICAg ICAgICAgICByaW5nX3JlcS0+ZnJhbWVfYW5kX3NlY3RzW3JpbmdfcmVxLT5ucl9zZWdtZW50cysr XSA9CiAgICAgICAgICAgICAgICBidWZmZXJfbWEgfCAoZnNlY3QgPDwgMykgfCBsc2VjdDsKI2Vu ZGlmCiAgICAgICAgfQogICAgfQoKICAgIGJsa19yaW5nLnJlcV9wcm9kX3B2dCsrOwogICAgCiAg ICAvKiBLZWVwIGEgcHJpdmF0ZSBjb3B5IHNvIHdlIGNhbiByZWlzc3VlIHJlcXVlc3RzIHdoZW4g cmVjb3ZlcmluZy4gKi8KICAgIHRyYW5zbGF0ZV9yZXFfdG9fcGZuKCZyZWNfcmluZ1tpZF0sIHJp bmdfcmVxKTsKCiAgICBwcmludGsoImN3Yzolczogb3V0XG4iLCBfX0ZVTkNUSU9OX18pOwogICAg cmV0dXJuIDA7Cn0KCgovKgogKiBkb19ibGtpZl9yZXF1ZXN0CiAqICByZWFkIGEgYmxvY2s7IHJl cXVlc3QgaXMgaW4gYSByZXF1ZXN0IHF1ZXVlCiAqLwp2b2lkIGRvX2Jsa2lmX3JlcXVlc3QocmVx dWVzdF9xdWV1ZV90ICpycSkKewogICAgc3RydWN0IHJlcXVlc3QgKnJlcTsKICAgIGludCBxdWV1 ZWQ7CiAgICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwoKICAgIERQ UklOVEsoIkVudGVyZWQgZG9fYmxraWZfcmVxdWVzdFxuIik7IAoKICAgIHF1ZXVlZCA9IDA7Cgog ICAgd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHJxKSkgIT0gTlVMTCkgewogICAgICAg IGlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkgewogICAgICAgICAgICBlbmRfcmVxdWVzdChyZXEs IDApOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmICggUklOR19G VUxMKCZibGtfcmluZykgKQogICAgICAgIHsKICAgICAgICAgICAgYmxrX3N0b3BfcXVldWUocnEp OwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgRFBSSU5USygiZG9fYmxrX3Jl cSAlcDogY21kICVwLCBzZWMgJWx4LCAoJXUvJWxpKSBidWZmZXI6JXAgWyVzXVxuIiwKICAgICAg ICAgICAgICAgIHJlcSwgcmVxLT5jbWQsIHJlcS0+c2VjdG9yLCByZXEtPmN1cnJlbnRfbnJfc2Vj dG9ycywKICAgICAgICAgICAgICAgIHJlcS0+bnJfc2VjdG9ycywgcmVxLT5idWZmZXIsCiAgICAg ICAgICAgICAgICBycV9kYXRhX2RpcihyZXEpID8gIndyaXRlIiA6ICJyZWFkIik7CiAgICAgICAg YmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwogICAgICAgIGlmIChibGtpZl9xdWV1ZV9yZXF1 ZXN0KHJlcSkpIHsKICAgICAgICAgICAgYmxrX3N0b3BfcXVldWUocnEpOwogICAgICAgICAgICBi cmVhazsKICAgICAgICB9CiAgICAgICAgcXVldWVkKys7CiAgICB9CgogICAgaWYgKHF1ZXVlZCAh PSAwKQogICAgICAgIGZsdXNoX3JlcXVlc3RzKCk7Cn0KCgpzdGF0aWMgaXJxcmV0dXJuX3QgYmxr aWZfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnB0cmVncykKewog ICAgc3RydWN0IHJlcXVlc3QgKnJlcTsKICAgIGJsa2lmX3Jlc3BvbnNlX3QgKmJyZXQ7CiAgICBS SU5HX0lEWCBpLCBycDsKICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7IAogICAgCiAgICBwcmludGso ImN3YzolczogcHJlIHNwaW5fbG9ja19pcnFzYXZlXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgc3Bp bl9sb2NrX2lycXNhdmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsgICAgIAogICAgcHJpbnRrKCJj d2M6JXM6IHBvc3Qgc3Bpbl9sb2NrX2lycXNhdmVcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgaWYg KCB1bmxpa2VseShibGtpZl9zdGF0ZSA9PSBCTEtJRl9TVEFURV9DTE9TRUQpIHx8IAogICAgICAg ICB1bmxpa2VseShyZWNvdmVyeSkgKQogICAgewogICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsKICAgICAgICBwcmludGsoImN3Yzolczogc3Bpbl91 bmxvY2tfaXJxc2F2ZVxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICByZXR1cm4gSVJRX0hBTkRM RUQ7CiAgICB9CiAgICAKICAgIHJwID0gYmxrX3Jpbmcuc3JpbmctPnJzcF9wcm9kOwogICAgcm1i KCk7IC8qIEVuc3VyZSB3ZSBzZWUgcXVldWVkIHJlc3BvbnNlcyB1cCB0byAncnAnLiAqLwoKICAg IGZvciAoIGkgPSBibGtfcmluZy5yc3BfY29uczsgaSAhPSBycDsgaSsrICkKICAgIHsKICAgICAg ICB1bnNpZ25lZCBsb25nIGlkOwoKICAgICAgICBicmV0ID0gUklOR19HRVRfUkVTUE9OU0UoJmJs a19yaW5nLCBpKTsKICAgICAgICBpZCA9IGJyZXQtPmlkOwogICAgICAgIHJlcSA9IChzdHJ1Y3Qg cmVxdWVzdCAqKXJlY19yaW5nW2lkXS5pZDsKICAgICAgICBwcmludGsoImN3YzolczogYmxraWZf Y29tcGxldGlvbiBjYWxsIGlkICVsdVxuIiwgX19GVU5DVElPTl9fLCBpZCk7CiAgICAgICAgYmxr aWZfY29tcGxldGlvbiggJnJlY19yaW5nW2lkXSApOwoKICAgICAgICBBRERfSURfVE9fRlJFRUxJ U1QoaWQpOyAvKiBvdmVyd3JpdGVzIHJlcSAqLwoKICAgICAgICBzd2l0Y2ggKCBicmV0LT5vcGVy YXRpb24gKQogICAgICAgIHsKICAgICAgICBjYXNlIEJMS0lGX09QX1JFQUQ6CiAgICAgICAgY2Fz ZSBCTEtJRl9PUF9XUklURToKICAgICAgICAgICAgaWYgKCB1bmxpa2VseShicmV0LT5zdGF0dXMg IT0gQkxLSUZfUlNQX09LQVkpICkKICAgICAgICAgICAgICAgIERQUklOVEsoIkJhZCByZXR1cm4g ZnJvbSBibGtkZXYgZGF0YSByZXF1ZXN0OiAleFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAg YnJldC0+c3RhdHVzKTsKICAgICAKICAgICAgICAgICAgaWYgKCB1bmxpa2VseShlbmRfdGhhdF9y ZXF1ZXN0X2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcSwgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIChicmV0LT5zdGF0dXMgPT0gQkxLSUZfUlNQX09LQVkpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICByZXEtPmhhcmRfbnJfc2VjdG9ycykpICkKICAgICAgICAgICAg ICAgIEJVRygpOwogICAgICAgICAgICBlbmRfdGhhdF9yZXF1ZXN0X2xhc3QocmVxKTsKCiAgICAg ICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQkxLSUZfT1BfUFJPQkU6CiAgICAgICAgICAgIG1l bWNweSgmYmxraWZfY29udHJvbF9yc3AsIGJyZXQsIHNpemVvZigqYnJldCkpOwogICAgICAgICAg ICBibGtpZl9jb250cm9sX3JzcF92YWxpZCA9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICAgIEJVRygpOwogICAgICAgIH0KICAgIH0KICAgIHByaW50aygi Y3djOiVzOiBwb3N0IGxvb3BcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgYmxrX3JpbmcucnNwX2Nv bnMgPSBpOwogICAgCiAgICBraWNrX3BlbmRpbmdfcmVxdWVzdF9xdWV1ZXMoKTsKCiAgICBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZibGtpZl9pb19sb2NrLCBmbGFncyk7CiAgICBwcmludGsoImN3 Yzolczogb3V0IHVubG9ja19pcnFfcmVzdG9yZVxuIiwgX19GVU5DVElPTl9fKTsKCiAgICByZXR1 cm4gSVJRX0hBTkRMRUQ7Cn0KCiNlbHNlCi8qKioqKioqKioqKioqKioqKioqKioqKioqKiAgS0VS TkVMIFZFUlNJT04gMi40ICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCnN0YXRpYyBrZGV2 X3QgICAgICAgIHNnX2RldjsKc3RhdGljIHVuc2lnbmVkIGxvbmcgc2dfbmV4dF9zZWN0OwoKLyoK ICogUmVxdWVzdCBxdWV1ZXMgd2l0aCBvdXRzdGFuZGluZyB3b3JrLCBidXQgcmluZyBpcyBjdXJy ZW50bHkgZnVsbC4KICogV2UgbmVlZCBubyBzcGVjaWFsIGxvY2sgaGVyZSwgYXMgd2UgYWx3YXlz IGFjY2VzcyB0aGlzIHdpdGggdGhlCiAqIGJsa2lmX2lvX2xvY2sgaGVsZC4gV2Ugb25seSBuZWVk IGEgc21hbGwgbWF4aW11bSBsaXN0LgogKi8KI2RlZmluZSBNQVhfUEVORElORyA4CnN0YXRpYyBy ZXF1ZXN0X3F1ZXVlX3QgKnBlbmRpbmdfcXVldWVzW01BWF9QRU5ESU5HXTsKc3RhdGljIGludCBu cl9wZW5kaW5nOwoKCiNkZWZpbmUgYmxraWZfaW9fbG9jayBpb19yZXF1ZXN0X2xvY2sKCi8qPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PSovCiNpZiBFTkFCTEVfVkJEX1VQREFURQoKLyoKICogYmxraWZfdXBk YXRlX2ludC91cGRhdGUtdmJkc190YXNrIC0gaGFuZGxlIFZCRCB1cGRhdGUgZXZlbnRzLgogKiAg U2NoZWR1bGUgYSB0YXNrIGZvciBrZXZlbnRkIHRvIHJ1biwgd2hpY2ggd2lsbCB1cGRhdGUgdGhl IFZCRHMgYW5kIHBlcmZvcm0gCiAqICB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIG91ciB2 aWV3IG9mIFZCRCBzdGF0ZS4KICovCnN0YXRpYyB2b2lkIHVwZGF0ZV92YmRzX3Rhc2sodm9pZCAq dW51c2VkKQp7IAogICAgeGx2YmRfdXBkYXRlX3ZiZHMoKTsKfQoKc3RhdGljIHZvaWQgdmJkX3Vw ZGF0ZSh2b2lkKQp7CiAgICBzdGF0aWMgc3RydWN0IHRxX3N0cnVjdCB1cGRhdGVfdHE7CiAgICB1 cGRhdGVfdHEucm91dGluZSA9IHVwZGF0ZV92YmRzX3Rhc2s7CiAgICBzY2hlZHVsZV90YXNrKCZ1 cGRhdGVfdHEpOwp9CgojZW5kaWYgLyogRU5BQkxFX1ZCRF9VUERBVEUgKi8KLyo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ki8KCnN0YXRpYyB2b2lkIGtpY2tfcGVuZGluZ19yZXF1ZXN0X3F1ZXVlcyh2b2lk KQp7CiAgICAvKiBXZSBraWNrIHBlbmRpbmcgcmVxdWVzdCBxdWV1ZXMgaWYgdGhlIHJpbmcgaXMg cmVhc29uYWJseSBlbXB0eS4gKi8KICAgIGlmICggKG5yX3BlbmRpbmcgIT0gMCkgJiYgCiAgICAg ICAgIChSSU5HX1BFTkRJTkdfUkVRVUVTVFMoJmJsa19yaW5nKSA8IChCTEtfUklOR19TSVpFID4+ IDEpKSApCiAgICB7CiAgICAgICAgLyogQXR0ZW1wdCB0byBkcmFpbiB0aGUgcXVldWUsIGJ1dCBi YWlsIGlmIHRoZSByaW5nIGJlY29tZXMgZnVsbC4gKi8KICAgICAgICB3aGlsZSAoIChucl9wZW5k aW5nICE9IDApICYmICFSSU5HX0ZVTEwoJmJsa19yaW5nKSApCiAgICAgICAgICAgIGRvX2Jsa2lm X3JlcXVlc3QocGVuZGluZ19xdWV1ZXNbLS1ucl9wZW5kaW5nXSk7CiAgICB9Cn0KCmludCBibGtp Zl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKewogICAgc2hv cnQgeGxkZXYgPSBpbm9kZS0+aV9yZGV2OyAKICAgIHN0cnVjdCBnZW5kaXNrICpnZCA9IGdldF9n ZW5kaXNrKHhsZGV2KTsKICAgIHhsX2Rpc2tfdCAqZGlzayA9IHhsZGV2X3RvX3hsZGlzayhpbm9k ZS0+aV9yZGV2KTsKICAgIHNob3J0IG1pbm9yID0gTUlOT1IoeGxkZXYpOyAKCiAgICBpZiAoIGdk LT5wYXJ0W21pbm9yXS5ucl9zZWN0cyA9PSAwICkKICAgIHsgCiAgICAgICAgLyoKICAgICAgICAg KiBEZXZpY2UgZWl0aGVyIGRvZXNuJ3QgZXhpc3QsIG9yIGhhcyB6ZXJvIGNhcGFjaXR5OyB3ZSB1 c2UgYSBmZXcKICAgICAgICAgKiBjaGVlc3kgaGV1cmlzdGljcyB0byByZXR1cm4gdGhlIHJlbGV2 YW50IGVycm9yIGNvZGUKICAgICAgICAgKi8KICAgICAgICBpZiAoIChnZC0+c2l6ZXNbbWlub3Ig Pj4gZ2QtPm1pbm9yX3NoaWZ0XSAhPSAwKSB8fAogICAgICAgICAgICAgKChtaW5vciAmIChnZC0+ bWF4X3AgLSAxKSkgIT0gMCkgKQogICAgICAgIHsgCiAgICAgICAgICAgIC8qCiAgICAgICAgICAg ICAqIFdlIGhhdmUgYSByZWFsIGRldmljZSwgYnV0IG5vIHN1Y2ggcGFydGl0aW9uLCBvciB3ZSBq dXN0IGhhdmUgYQogICAgICAgICAgICAgKiBwYXJ0aXRpb24gbnVtYmVyIHNvIGd1ZXNzIHRoaXMg aXMgdGhlIHByb2JsZW0uCiAgICAgICAgICAgICAqLwogICAgICAgICAgICByZXR1cm4gLUVOWElP OyAgICAgLyogbm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyAqLwogICAgICAgIH0KICAgICAgICBl bHNlIGlmICggZ2QtPmZsYWdzW21pbm9yID4+IGdkLT5taW5vcl9zaGlmdF0gJiBHRU5IRF9GTF9S RU1PVkFCTEUgKQogICAgICAgIHsKICAgICAgICAgICAgLyogVGhpcyBpcyBhIHJlbW92YWJsZSBk ZXZpY2UgPT4gYXNzdW1lIHRoYXQgbWVkaWEgaXMgbWlzc2luZy4gKi8gCiAgICAgICAgICAgIHJl dHVybiAtRU5PTUVESVVNOyAvKiBtZWRpYSBub3QgcHJlc2VudCAodGhpcyBpcyBhIGd1ZXNzKSAq LwogICAgICAgIH0gCiAgICAgICAgZWxzZQogICAgICAgIHsgCiAgICAgICAgICAgIC8qIEp1c3Qg Z28gZm9yIHRoZSBnZW5lcmFsICdubyBzdWNoIGRldmljZScgZXJyb3IuICovCiAgICAgICAgICAg IHJldHVybiAtRU5PREVWOyAgICAvKiBubyBzdWNoIGRldmljZSAqLwogICAgICAgIH0KICAgIH0K ICAgIAogICAgLyogVXBkYXRlIG9mIHVzYWdlIGNvdW50IGlzIHByb3RlY3RlZCBieSBwZXItZGV2 aWNlIHNlbWFwaG9yZS4gKi8KICAgIGRpc2stPnVzYWdlKys7CgogICAgcmV0dXJuIDA7Cn0KCgpp bnQgYmxraWZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAp CnsKICAgIHhsX2Rpc2tfdCAqZGlzayA9IHhsZGV2X3RvX3hsZGlzayhpbm9kZS0+aV9yZGV2KTsK CiAgICAvKgogICAgICogV2hlbiB1c2FnZSBkcm9wcyB0byB6ZXJvIGl0IG1heSBhbGxvdyBtb3Jl IFZCRCB1cGRhdGVzIHRvIG9jY3VyLgogICAgICogVXBkYXRlIG9mIHVzYWdlIGNvdW50IGlzIHBy b3RlY3RlZCBieSBhIHBlci1kZXZpY2Ugc2VtYXBob3JlLgogICAgICovCiAgICBpZiAoIC0tZGlz ay0+dXNhZ2UgPT0gMCApIHsKICAgICAgICB2YmRfdXBkYXRlKCk7CiAgICB9CgogICAgcmV0dXJu IDA7Cn0KCgppbnQgYmxraWZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUg KmZpbGVwLAogICAgICAgICAgICAgICAgdW5zaWduZWQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBh cmd1bWVudCkKewogICAga2Rldl90IGRldiA9IGlub2RlLT5pX3JkZXY7CiAgICBzdHJ1Y3QgaGRf Z2VvbWV0cnkgKmdlbyA9IChzdHJ1Y3QgaGRfZ2VvbWV0cnkgKilhcmd1bWVudDsKICAgIHN0cnVj dCBnZW5kaXNrICpnZDsgICAgIAogICAgc3RydWN0IGhkX3N0cnVjdCAqcGFydDsgCiAgICBpbnQg aTsKICAgIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKICAgIGJ5dGUgaGVhZHMsIHNlY3RvcnM7 CgogICAgLyogTkIuIE5vIG5lZWQgdG8gY2hlY2sgcGVybWlzc2lvbnMuIFRoYXQgaXMgZG9uZSBm b3IgdXMuICovCiAgICAKICAgIERQUklOVEtfSU9DVEwoImNvbW1hbmQ6IDB4JXgsIGFyZ3VtZW50 OiAweCVseCwgZGV2OiAweCUwNHhcbiIsCiAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIChsb25n KSBhcmd1bWVudCwgZGV2KTsgCiAgCiAgICBnZCA9IGdldF9nZW5kaXNrKGRldik7CiAgICBwYXJ0 ID0gJmdkLT5wYXJ0W01JTk9SKGRldildOyAKCiAgICBzd2l0Y2ggKCBjb21tYW5kICkKICAgIHsK ICAgIGNhc2UgQkxLR0VUU0laRToKICAgICAgICBEUFJJTlRLX0lPQ1RMKCIgICBCTEtHRVRTSVpF OiAleCAlbHhcbiIsIEJMS0dFVFNJWkUsIHBhcnQtPm5yX3NlY3RzKTsgCiAgICAgICAgcmV0dXJu IHB1dF91c2VyKHBhcnQtPm5yX3NlY3RzLCAodW5zaWduZWQgbG9uZyAqKSBhcmd1bWVudCk7Cgog ICAgY2FzZSBCTEtHRVRTSVpFNjQ6CiAgICAgICAgRFBSSU5US19JT0NUTCgiICAgQkxLR0VUU0la RTY0OiAleCAlbGx4XG4iLCBCTEtHRVRTSVpFNjQsCiAgICAgICAgICAgICAgICAgICAgICAodTY0 KXBhcnQtPm5yX3NlY3RzICogNTEyKTsKICAgICAgICByZXR1cm4gcHV0X3VzZXIoKHU2NClwYXJ0 LT5ucl9zZWN0cyAqIDUxMiwgKHU2NCAqKSBhcmd1bWVudCk7CgogICAgY2FzZSBCTEtSUlBBUlQ6 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlLXJlYWQgcGFydGl0aW9uIHRhYmxl ICovCiAgICAgICAgRFBSSU5US19JT0NUTCgiICAgQkxLUlJQQVJUOiAleFxuIiwgQkxLUlJQQVJU KTsKICAgICAgICByZXR1cm4gYmxraWZfcmV2YWxpZGF0ZShkZXYpOwoKICAgIGNhc2UgQkxLU1Na R0VUOgogICAgICAgIHJldHVybiBoYXJkc2VjdF9zaXplW01BSk9SKGRldildW01JTk9SKGRldild OyAKCiAgICBjYXNlIEJMS0JTWkdFVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogZ2V0IGJsb2NrIHNpemUgKi8KICAgICAgICBEUFJJTlRLX0lPQ1RMKCIgICBCTEtC U1pHRVQ6ICV4XG4iLCBCTEtCU1pHRVQpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgQkxLQlNa U0VUOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgYmxvY2sg c2l6ZSAqLwogICAgICAgIERQUklOVEtfSU9DVEwoIiAgIEJMS0JTWlNFVDogJXhcbiIsIEJMS0JT WlNFVCk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBCTEtSQVNFVDogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWFkLWFoZWFkICovCiAgICAgICAgRFBS SU5US19JT0NUTCgiICAgQkxLUkFTRVQ6ICV4XG4iLCBCTEtSQVNFVCk7CiAgICAgICAgYnJlYWs7 CgogICAgY2FzZSBCTEtSQUdFVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGdldCByZWFkLWFoZWFkICovCiAgICAgICAgRFBSSU5US19JT0NUTCgiICAgQkxLUkFG RVQ6ICV4XG4iLCBCTEtSQUdFVCk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBIRElPX0dFVEdF TzoKICAgICAgICBEUFJJTlRLX0lPQ1RMKCIgICBIRElPX0dFVEdFTzogJXhcbiIsIEhESU9fR0VU R0VPKTsKICAgICAgICBpZiAoIWFyZ3VtZW50KSByZXR1cm4gLUVJTlZBTDsKCiAgICAgICAgLyog V2UgZG9uJ3QgaGF2ZSByZWFsIGdlb21ldHJ5IGluZm8sIGJ1dCBsZXQncyBhdCBsZWFzdCByZXR1 cm4KICAgICAgICAgICB2YWx1ZXMgY29uc2lzdGVudCB3aXRoIHRoZSBzaXplIG9mIHRoZSBkZXZp Y2UgKi8KCiAgICAgICAgaGVhZHMgPSAweGZmOwogICAgICAgIHNlY3RvcnMgPSAweDNmOyAKICAg ICAgICBjeWxpbmRlcnMgPSBwYXJ0LT5ucl9zZWN0cyAvIChoZWFkcyAqIHNlY3RvcnMpOwoKICAg ICAgICBpZiAocHV0X3VzZXIoMHgwMCwgICh1bnNpZ25lZCBsb25nICopICZnZW8tPnN0YXJ0KSkg cmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgaWYgKHB1dF91c2VyKGhlYWRzLCAgKGJ5dGUgKikmZ2Vv LT5oZWFkcykpIHJldHVybiAtRUZBVUxUOwogICAgICAgIGlmIChwdXRfdXNlcihzZWN0b3JzLCAg KGJ5dGUgKikmZ2VvLT5zZWN0b3JzKSkgcmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgaWYgKHB1dF91 c2VyKGN5bGluZGVycywgKHVuc2lnbmVkIHNob3J0ICopJmdlby0+Y3lsaW5kZXJzKSkgcmV0dXJu IC1FRkFVTFQ7CgogICAgICAgIHJldHVybiAwOwoKICAgIGNhc2UgSERJT19HRVRHRU9fQklHOiAK ICAgICAgICBEUFJJTlRLX0lPQ1RMKCIgICBIRElPX0dFVEdFT19CSUc6ICV4XG4iLCBIRElPX0dF VEdFT19CSUcpOwogICAgICAgIGlmICghYXJndW1lbnQpIHJldHVybiAtRUlOVkFMOwoKICAgICAg ICAvKiBXZSBkb24ndCBoYXZlIHJlYWwgZ2VvbWV0cnkgaW5mbywgYnV0IGxldCdzIGF0IGxlYXN0 IHJldHVybgogICAgICAgICAgIHZhbHVlcyBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhl IGRldmljZSAqLwoKICAgICAgICBoZWFkcyA9IDB4ZmY7CiAgICAgICAgc2VjdG9ycyA9IDB4M2Y7 IAogICAgICAgIGN5bGluZGVycyA9IHBhcnQtPm5yX3NlY3RzIC8gKGhlYWRzICogc2VjdG9ycyk7 CgogICAgICAgIGlmIChwdXRfdXNlcigweDAwLCAgKHVuc2lnbmVkIGxvbmcgKikgJmdlby0+c3Rh cnQpKSAgcmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgaWYgKHB1dF91c2VyKGhlYWRzLCAgKGJ5dGUg KikmZ2VvLT5oZWFkcykpICAgcmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgaWYgKHB1dF91c2VyKHNl Y3RvcnMsICAoYnl0ZSAqKSZnZW8tPnNlY3RvcnMpKSByZXR1cm4gLUVGQVVMVDsKICAgICAgICBp ZiAocHV0X3VzZXIoY3lsaW5kZXJzLCAodW5zaWduZWQgaW50ICopICZnZW8tPmN5bGluZGVycykp IHJldHVybiAtRUZBVUxUOwoKICAgICAgICByZXR1cm4gMDsKCiAgICBjYXNlIENEUk9NTVVMVElT RVNTSU9OOgogICAgICAgIERQUklOVEsoIkZJWE1FOiBzdXBwb3J0IG11bHRpc2Vzc2lvbiBDRHMg bGF0ZXJcbiIpOwogICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjZHJvbV9t dWx0aXNlc3Npb24pOyBpKysgKQogICAgICAgICAgICBpZiAoIHB1dF91c2VyKDAsIChieXRlICop KGFyZ3VtZW50ICsgaSkpICkgcmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgcmV0dXJuIDA7CgogICAg Y2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgogICAgICAgIERQUklOVEsoIkZJWE1FOiBT Q1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSIGlvY3RsIGluIFhMIGJsa2lmIik7CiAgICAgICAgcmV0 dXJuIC1FTk9TWVM7CgogICAgZGVmYXVsdDoKICAgICAgICBwcmludGsoS0VSTl9BTEVSVCAiaW9j dGwgJTA4eCBub3Qgc3VwcG9ydGVkIGJ5IFhMIGJsa2lmXG4iLCBjb21tYW5kKTsKICAgICAgICBy ZXR1cm4gLUVOT1NZUzsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0KCgoKLyogY2hlY2sgbWVk aWEgY2hhbmdlOiBzaG91bGQgcHJvYmFibHkgZG8gc29tZXRoaW5nIGhlcmUgaW4gc29tZSBjYXNl cyA6LSkgKi8KaW50IGJsa2lmX2NoZWNrKGtkZXZfdCBkZXYpCnsKICAgIERQUklOVEsoImJsa2lm X2NoZWNrXG4iKTsKICAgIHJldHVybiAwOwp9CgppbnQgYmxraWZfcmV2YWxpZGF0ZShrZGV2X3Qg ZGV2KQp7CiAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZDsKICAgIHN0cnVjdCBnZW5kaXNrICpn ZDsKICAgIHhsX2Rpc2tfdCAqZGlzazsKICAgIHVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7CiAgICBp bnQgaSwgcmMgPSAwOwogICAgCiAgICBpZiAoIChiZCA9IGJkZ2V0KGRldikpID09IE5VTEwgKQog ICAgICAgIHJldHVybiAtRUlOVkFMOwoKICAgIC8qCiAgICAgKiBVcGRhdGUgb2YgcGFydGl0aW9u IGluZm8sIGFuZCBjaGVjayBvZiB1c2FnZSBjb3VudCwgaXMgcHJvdGVjdGVkCiAgICAgKiBieSB0 aGUgcGVyLWJsb2NrLWRldmljZSBzZW1hcGhvcmUuCiAgICAgKi8KICAgIGRvd24oJmJkLT5iZF9z ZW0pOwoKICAgIGlmICggKChnZCA9IGdldF9nZW5kaXNrKGRldikpID09IE5VTEwpIHx8CiAgICAg ICAgICgoZGlzayA9IHhsZGV2X3RvX3hsZGlzayhkZXYpKSA9PSBOVUxMKSB8fAogICAgICAgICAo KGNhcGFjaXR5ID0gZ2QtPnBhcnRbTUlOT1IoZGV2KV0ubnJfc2VjdHMpID09IDApICkKICAgIHsK ICAgICAgICByYyA9IC1FSU5WQUw7CiAgICAgICAgZ290byBvdXQ7CiAgICB9CgogICAgaWYgKCBk aXNrLT51c2FnZSA+IDEgKQogICAgewogICAgICAgIHJjID0gLUVCVVNZOwogICAgICAgIGdvdG8g b3V0OwogICAgfQoKICAgIC8qIE9ubHkgcmVyZWFkIHBhcnRpdGlvbiB0YWJsZSBpZiBWQkRzIGFy ZW4ndCBtYXBwZWQgdG8gcGFydGl0aW9ucy4gKi8KICAgIGlmICggIShnZC0+ZmxhZ3NbTUlOT1Io ZGV2KSA+PiBnZC0+bWlub3Jfc2hpZnRdICYgR0VOSERfRkxfVklSVF9QQVJUTlMpICkKICAgIHsK ICAgICAgICBmb3IgKCBpID0gZ2QtPm1heF9wIC0gMTsgaSA+PSAwOyBpLS0gKQogICAgICAgIHsK ICAgICAgICAgICAgaW52YWxpZGF0ZV9kZXZpY2UoZGV2K2ksIDEpOwogICAgICAgICAgICBnZC0+ cGFydFtNSU5PUihkZXYraSldLnN0YXJ0X3NlY3QgPSAwOwogICAgICAgICAgICBnZC0+cGFydFtN SU5PUihkZXYraSldLm5yX3NlY3RzICAgPSAwOwogICAgICAgICAgICBnZC0+c2l6ZXNbTUlOT1Io ZGV2K2kpXSAgICAgICAgICAgPSAwOwogICAgICAgIH0KCiAgICAgICAgZ3Jva19wYXJ0aXRpb25z KGdkLCBNSU5PUihkZXYpPj5nZC0+bWlub3Jfc2hpZnQsIGdkLT5tYXhfcCwgY2FwYWNpdHkpOwog ICAgfQoKIG91dDoKICAgIHVwKCZiZC0+YmRfc2VtKTsKICAgIGJkcHV0KGJkKTsKICAgIHJldHVy biByYzsKfQoKCi8qCiAqIGJsa2lmX3F1ZXVlX3JlcXVlc3QKICoKICogcmVxdWVzdCBibG9jayBp byAKICogCiAqIGlkOiBmb3IgZ3Vlc3QgdXNlIG9ubHkuCiAqIG9wZXJhdGlvbjogQkxLSUZfT1Bf e1JFQUQsV1JJVEUsUFJPQkV9CiAqIGJ1ZmZlcjogYnVmZmVyIHRvIHJlYWQvd3JpdGUgaW50by4g dGhpcyBzaG91bGQgYmUgYQogKiAgIHZpcnR1YWwgYWRkcmVzcyBpbiB0aGUgZ3Vlc3Qgb3MuCiAq LwpzdGF0aWMgaW50IGJsa2lmX3F1ZXVlX3JlcXVlc3QodW5zaWduZWQgbG9uZyAgIGlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG9wZXJhdGlvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiAgICAgICAgICBidWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgc2VjdG9yX251bWJlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICBucl9zZWN0b3Jz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2Rldl90ICAgICAgICAgIGRldmljZSkK ewogICAgdW5zaWduZWQgbG9uZyAgICAgICBidWZmZXJfbWEgPSB2aXJ0X3RvX2J1cyhidWZmZXIp OwogICAgdW5zaWduZWQgbG9uZyAgICAgICB4aWQ7CiAgICBzdHJ1Y3QgZ2VuZGlzayAgICAgKmdk OwogICAgYmxraWZfcmVxdWVzdF90ICAgICpyZXE7CiAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJo OwogICAgdW5zaWduZWQgaW50ICAgICAgICBmc2VjdCwgbHNlY3Q7CiNpZmRlZiBDT05GSUdfWEVO X0JMS0RFVl9HUkFOVAogICAgaW50IHJlZjsKI2VuZGlmCiAgICBwcmludGsoImN3YzolczogaW4g b3A6JWRcbiIsIF9fRlVOQ1RJT05fXywgb3BlcmF0aW9uKTsKCiAgICBmc2VjdCA9IChidWZmZXJf bWEgJiB+UEFHRV9NQVNLKSA+PiA5OwogICAgbHNlY3QgPSBmc2VjdCArIG5yX3NlY3RvcnMgLSAx OwoKICAgIC8qIEJ1ZmZlciBtdXN0IGJlIHNlY3Rvci1hbGlnbmVkLiBFeHRlbnQgbXVzdG4ndCBj cm9zcyBhIHBhZ2UgYm91bmRhcnkuICovCiAgICBpZiAoIHVubGlrZWx5KChidWZmZXJfbWEgJiAo KDE8PDkpLTEpKSAhPSAwKSApCiAgICAgICAgQlVHKCk7CiAgICBpZiAoIGxzZWN0ID4gNyApCiAg ICAgICAgQlVHKCk7CgogICAgYnVmZmVyX21hICY9IFBBR0VfTUFTSzsKCiAgICBpZiAoIHVubGlr ZWx5KGJsa2lmX3N0YXRlICE9IEJMS0lGX1NUQVRFX0NPTk5FQ1RFRCkgKQogICAgICAgIHJldHVy biAxOwoKICAgIHN3aXRjaCAoIG9wZXJhdGlvbiApCiAgICB7CgogICAgY2FzZSBCTEtJRl9PUF9S RUFEOgogICAgY2FzZSBCTEtJRl9PUF9XUklURToKICAgICAgICBnZCA9IGdldF9nZW5kaXNrKGRl dmljZSk7IAoKICAgICAgICAvKgogICAgICAgICAqIFVwZGF0ZSB0aGUgc2VjdG9yX251bWJlciB3 ZSdsbCBwYXNzIGRvd24gYXMgYXBwcm9wcmlhdGU7IG5vdGUgdGhhdAogICAgICAgICAqIHdlIGNv dWxkIHNhbml0eSBjaGVjayB0aGF0IHJlc3VsdGluZyBzZWN0b3Igd2lsbCBiZSBpbiB0aGlzCiAg ICAgICAgICogcGFydGl0aW9uLCBidXQgdGhpcyB3aWxsIGhhcHBlbiBpbiBkcml2ZXIgYmFja2Vu ZCBhbnlob3cuCiAgICAgICAgICovCiAgICAgICAgc2VjdG9yX251bWJlciArPSBnZC0+cGFydFtN SU5PUihkZXZpY2UpXS5zdGFydF9zZWN0OwoKICAgICAgICAvKgogICAgICAgICAqIElmIHRoaXMg dW5pdCBkb2Vzbid0IGNvbnNpc3Qgb2YgdmlydHVhbCBwYXJ0aXRpb25zIHRoZW4gd2UgY2xlYXIg CiAgICAgICAgICogdGhlIHBhcnRuIGJpdHMgZnJvbSB0aGUgZGV2aWNlIG51bWJlci4KICAgICAg ICAgKi8KICAgICAgICBpZiAoICEoZ2QtPmZsYWdzW01JTk9SKGRldmljZSk+PmdkLT5taW5vcl9z aGlmdF0gJiAKICAgICAgICAgICAgICAgR0VOSERfRkxfVklSVF9QQVJUTlMpICkKICAgICAgICAg ICAgZGV2aWNlICY9IH4oZ2QtPm1heF9wIC0gMSk7CgogICAgICAgIGlmICggKHNnX29wZXJhdGlv biA9PSBvcGVyYXRpb24pICYmCiAgICAgICAgICAgICAoc2dfZGV2ID09IGRldmljZSkgJiYKICAg ICAgICAgICAgIChzZ19uZXh0X3NlY3QgPT0gc2VjdG9yX251bWJlcikgKQogICAgICAgIHsKICAg ICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IGJ1aWxkaW5nIHJlcVxuIiwgX19GVU5DVElPTl9fKTsK ICAgICAgICAgICAgcmVxID0gUklOR19HRVRfUkVRVUVTVCgmYmxrX3JpbmcsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJsa19yaW5nLnJlcV9wcm9kX3B2dCAtIDEpOwogICAg ICAgICAgICBiaCA9IChzdHJ1Y3QgYnVmZmVyX2hlYWQgKilpZDsKICAgICAKICAgICAgICAgICAg YmgtPmJfcmVxbmV4dCA9IChzdHJ1Y3QgYnVmZmVyX2hlYWQgKilyZWNfcmluZ1tyZXEtPmlkXS5p ZDsKICAgICAKICAgICAgICAgICAgcmVjX3JpbmdbcmVxLT5pZF0uaWQgPSBpZDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9H UkFOVAogICAgICAgICAgICAvKiBpbnN0YWxsIGEgZ3JhbnQgcmVmZXJlbmNlLiAqLwogICAgICAg ICAgICByZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZncmVmX2hlYWQsIGdyZWZf dGVybWluYWwpOwogICAgICAgICAgICBBU1NFUlQoIHJlZiAhPSAtRU5PU1BDICk7CgogICAgICAg ICAgICBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKAogICAgICAgICAgICAgICAgICAg ICAgICByZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHJkb21pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgYnVmZmVyX21hID4+IFBBR0VfU0hJRlQsCiAgICAgICAgICAgICAgICAgICAgICAg ICggb3BlcmF0aW9uID09IEJMS0lGX09QX1dSSVRFID8gMSA6IDAgKSApOwoKICAgICAgICAgICAg cmVxLT5mcmFtZV9hbmRfc2VjdHNbcmVxLT5ucl9zZWdtZW50c10gPQogICAgICAgICAgICAgICAg KCgodTMyKSByZWYgKSA8PCAxNikgfCAoZnNlY3QgPDwgMykgfCBsc2VjdDsKI2Vsc2UKICAgICAg ICAgICAgcmVxLT5mcmFtZV9hbmRfc2VjdHNbcmVxLT5ucl9zZWdtZW50c10gPQogICAgICAgICAg ICAgICAgYnVmZmVyX21hIHwgKGZzZWN0IDw8IDMpIHwgbHNlY3Q7CiNlbmRpZgogICAgICAgICAg ICBpZiAoICsrcmVxLT5ucl9zZWdtZW50cyA8IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVT VCApCiAgICAgICAgICAgICAgICBzZ19uZXh0X3NlY3QgKz0gbnJfc2VjdG9yczsKICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgRElTQUJMRV9TQ0FUVEVSR0FUSEVSKCk7CgogICAgICAg ICAgICAvKiBVcGRhdGUgdGhlIGNvcHkgb2YgdGhlIHJlcXVlc3QgaW4gdGhlIHJlY292ZXJ5IHJp bmcuICovCiAgICAgICAgICAgIHRyYW5zbGF0ZV9yZXFfdG9fcGZuKCZyZWNfcmluZ1tyZXEtPmlk XSwgcmVxICk7CgogICAgICAgICAgICBwcmludGsoImN3YzolczogYWNjZXNzIGdyYW50ZWQgdG8g JWx4XG4iLCBfX0ZVTkNUSU9OX18sIGJ1ZmZlcl9tYSk7CiAgICAgICAgICAgIHJldHVybiAwOwog ICAgICAgIH0KICAgICAgICBlbHNlIGlmICggUklOR19GVUxMKCZibGtfcmluZykgKQogICAgICAg IHsKICAgICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IHJpbmcgZnVsbFxuIiwgX19GVU5DVElPTl9f KTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICAgIHNnX29wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICAgICAgICAgc2dfZGV2 ICAgICAgID0gZGV2aWNlOwogICAgICAgICAgICBzZ19uZXh0X3NlY3QgPSBzZWN0b3JfbnVtYmVy ICsgbnJfc2VjdG9yczsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAg ICAgICB7CiAgICAgICAgcHJpbnRrKCJjd2M6JXM6IHByZSBwYW5pYyBmb3IgdW5rbm93biBvcCAl ZFxuIiwgX19GVU5DVElPTl9fLCBvcGVyYXRpb24pOwogICAgICAgIHBhbmljKCJ1bmtub3duIG9w ICVkXG4iLCBvcGVyYXRpb24pOwogICAgICAgIH0KICAgIH0KICAgIHByaW50aygiY3djOiVzOiBt aWRcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgLyogRmlsbCBvdXQgYSBjb21tdW5pY2F0aW9ucyBy aW5nIHN0cnVjdHVyZS4gKi8KICAgIHJlcSA9IFJJTkdfR0VUX1JFUVVFU1QoJmJsa19yaW5nLCBi bGtfcmluZy5yZXFfcHJvZF9wdnQpOwoKICAgIHhpZCA9IEdFVF9JRF9GUk9NX0ZSRUVMSVNUKCk7 CiAgICByZWNfcmluZ1t4aWRdLmlkID0gaWQ7CgogICAgcmVxLT5pZCAgICAgICAgICAgID0geGlk OwogICAgcmVxLT5vcGVyYXRpb24gICAgID0gb3BlcmF0aW9uOwogICAgcmVxLT5zZWN0b3JfbnVt YmVyID0gKGJsa2lmX3NlY3Rvcl90KXNlY3Rvcl9udW1iZXI7CiAgICByZXEtPmRldmljZSAgICAg ICAgPSBkZXZpY2U7IAogICAgcmVxLT5ucl9zZWdtZW50cyAgID0gMTsKI2lmZGVmIENPTkZJR19Y RU5fQkxLREVWX0dSQU5UCiAgICAvKiBpbnN0YWxsIGEgZ3JhbnQgcmVmZXJlbmNlLiAqLwogICAg cmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmZ3JlZl9oZWFkLCBncmVmX3Rlcm1p bmFsKTsKICAgIEFTU0VSVCggcmVmICE9IC1FTk9TUEMgKTsKCiAgICBnbnR0YWJfZ3JhbnRfZm9y ZWlnbl9hY2Nlc3NfcmVmKAogICAgICAgICAgICAgICAgcmVmLAogICAgICAgICAgICAgICAgcmRv bWlkLAogICAgICAgICAgICAgICAgYnVmZmVyX21hID4+IFBBR0VfU0hJRlQsCiAgICAgICAgICAg ICAgICAoIG9wZXJhdGlvbiA9PSBCTEtJRl9PUF9XUklURSA/IDEgOiAwICkgKTsKCiAgICByZXEt PmZyYW1lX2FuZF9zZWN0c1swXSA9ICgoKHUzMikgcmVmKTw8MTYpICB8IChmc2VjdDw8MykgfCBs c2VjdDsKI2Vsc2UKICAgIHJlcS0+ZnJhbWVfYW5kX3NlY3RzWzBdID0gYnVmZmVyX21hIHwgKGZz ZWN0PDwzKSB8IGxzZWN0OwojZW5kaWYKCiAgICAvKiBLZWVwIGEgcHJpdmF0ZSBjb3B5IHNvIHdl IGNhbiByZWlzc3VlIHJlcXVlc3RzIHdoZW4gcmVjb3ZlcmluZy4gKi8gICAgCiAgICB0cmFuc2xh dGVfcmVxX3RvX3BmbigmcmVjX3JpbmdbeGlkXSwgcmVxICk7CgogICAgYmxrX3JpbmcucmVxX3By b2RfcHZ0Kys7CiAgICAKICAgIHByaW50aygiY3djOiVzOiBvdXQgYnVmOiVseFxuIiwgX19GVU5D VElPTl9fLCBidWZmZXJfbWEpOwogICAgcmV0dXJuIDA7Cn0KCgovKgogKiBkb19ibGtpZl9yZXF1 ZXN0CiAqICByZWFkIGEgYmxvY2s7IHJlcXVlc3QgaXMgaW4gYSByZXF1ZXN0IHF1ZXVlCiAqLwp2 b2lkIGRvX2Jsa2lmX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpycSkKewogICAgc3RydWN0IHJl cXVlc3QgKnJlcTsKICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpuZXh0X2JoOwogICAgaW50 IHJ3LCBuc2VjdCwgZnVsbCwgcXVldWVkID0gMDsKCiAgICBEUFJJTlRLKCJFbnRlcmVkIGRvX2Js a2lmX3JlcXVlc3RcbiIpOyAKCiAgICB3aGlsZSAoICFycS0+cGx1Z2dlZCAmJiAhbGlzdF9lbXB0 eSgmcnEtPnF1ZXVlX2hlYWQpKQogICAgewogICAgICAgIGlmICggKHJlcSA9IGJsa2Rldl9lbnRy eV9uZXh0X3JlcXVlc3QoJnJxLT5xdWV1ZV9oZWFkKSkgPT0gTlVMTCApIAogICAgICAgICAgICBn b3RvIG91dDsKICAKICAgICAgICBEUFJJTlRLKCJkb19ibGtpZl9yZXF1ZXN0ICVwOiBjbWQgJWks IHNlYyAlbHgsICglbGkvJWxpKSBiaDolcFxuIiwKICAgICAgICAgICAgICAgIHJlcSwgcmVxLT5j bWQsIHJlcS0+c2VjdG9yLAogICAgICAgICAgICAgICAgcmVxLT5jdXJyZW50X25yX3NlY3RvcnMs IHJlcS0+bnJfc2VjdG9ycywgcmVxLT5iaCk7CgogICAgICAgIHJ3ID0gcmVxLT5jbWQ7CiAgICAg ICAgaWYgKCBydyA9PSBSRUFEQSApCiAgICAgICAgICAgIHJ3ID0gUkVBRDsKICAgICAgICBpZiAo IHVubGlrZWx5KChydyAhPSBSRUFEKSAmJiAocncgIT0gV1JJVEUpKSApCiAgICAgICAgICAgIHBh bmljKCJYZW5vTGludXggVmlydHVhbCBCbG9jayBEZXZpY2U6IGJhZCBjbWQ6ICVkXG4iLCBydyk7 CgogICAgICAgIHJlcS0+ZXJyb3JzID0gMDsKCiAgICAgICAgYmggPSByZXEtPmJoOwogICAgICAg IHdoaWxlICggYmggIT0gTlVMTCApCiAgICAgICAgewogICAgICAgICAgICBuZXh0X2JoID0gYmgt PmJfcmVxbmV4dDsKICAgICAgICAgICAgYmgtPmJfcmVxbmV4dCA9IE5VTEw7CgogICAgICAgICAg ICBmdWxsID0gYmxraWZfcXVldWVfcmVxdWVzdCgKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nKWJoLAogICAgICAgICAgICAgICAgKHJ3ID09IFJFQUQpID8gQkxLSUZfT1BfUkVBRCA6IEJM S0lGX09QX1dSSVRFLCAKICAgICAgICAgICAgICAgIGJoLT5iX2RhdGEsIGJoLT5iX3JzZWN0b3Is IGJoLT5iX3NpemU+PjksIGJoLT5iX3JkZXYpOwoKICAgICAgICAgICAgaWYgKCBmdWxsICkKICAg ICAgICAgICAgeyAKICAgICAgICAgICAgICAgIGJoLT5iX3JlcW5leHQgPSBuZXh0X2JoOwogICAg ICAgICAgICAgICAgcGVuZGluZ19xdWV1ZXNbbnJfcGVuZGluZysrXSA9IHJxOwogICAgICAgICAg ICAgICAgaWYgKCB1bmxpa2VseShucl9wZW5kaW5nID49IE1BWF9QRU5ESU5HKSApCiAgICAgICAg ICAgICAgICAgICAgQlVHKCk7CiAgICAgICAgICAgICAgICBnb3RvIG91dDsgCiAgICAgICAgICAg IH0KCiAgICAgICAgICAgIHF1ZXVlZCsrOwoKICAgICAgICAgICAgLyogRGVxdWV1ZSB0aGUgYnVm ZmVyIGhlYWQgZnJvbSB0aGUgcmVxdWVzdC4gKi8KICAgICAgICAgICAgbnNlY3QgPSBiaC0+Yl9z aXplID4+IDk7CiAgICAgICAgICAgIGJoID0gcmVxLT5iaCA9IG5leHRfYmg7CiAgICAgICAgICAg IAogICAgICAgICAgICBpZiAoIGJoICE9IE5VTEwgKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAvKiBUaGVyZSdzIGFub3RoZXIgYnVmZmVyIGhlYWQgdG8gZG8uIFVwZGF0ZSB0aGUgcmVx dWVzdC4gKi8KICAgICAgICAgICAgICAgIHJlcS0+aGFyZF9zZWN0b3IgKz0gbnNlY3Q7CiAgICAg ICAgICAgICAgICByZXEtPmhhcmRfbnJfc2VjdG9ycyAtPSBuc2VjdDsKICAgICAgICAgICAgICAg IHJlcS0+c2VjdG9yID0gcmVxLT5oYXJkX3NlY3RvcjsKICAgICAgICAgICAgICAgIHJlcS0+bnJf c2VjdG9ycyA9IHJlcS0+aGFyZF9ucl9zZWN0b3JzOwogICAgICAgICAgICAgICAgcmVxLT5jdXJy ZW50X25yX3NlY3RvcnMgPSBiaC0+Yl9zaXplID4+IDk7CiAgICAgICAgICAgICAgICByZXEtPmJ1 ZmZlciA9IGJoLT5iX2RhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAvKiBUaGF0IHdhcyB0aGUgbGFzdCBidWZmZXIgaGVhZC4g RmluYWxpc2UgdGhlIHJlcXVlc3QuICovCiAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGVu ZF90aGF0X3JlcXVlc3RfZmlyc3QocmVxLCAxLCAiWGVuQmxrIikpICkKICAgICAgICAgICAgICAg ICAgICBCVUcoKTsKICAgICAgICAgICAgICAgIGJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocmVxKTsK ICAgICAgICAgICAgICAgIGVuZF90aGF0X3JlcXVlc3RfbGFzdChyZXEpOwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgfQoKIG91dDoKICAgIGlmICggcXVldWVkICE9IDAgKQogICAgICAgIGZs dXNoX3JlcXVlc3RzKCk7Cn0KCgpzdGF0aWMgdm9pZCBibGtpZl9pbnQoaW50IGlycSwgdm9pZCAq ZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcHRyZWdzKQp7CiAgICBSSU5HX0lEWCBpLCBycDsgCiAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOyAKICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpuZXh0 X2JoOwogICAgCiAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7 ICAgICAKCiAgICBpZiAoIHVubGlrZWx5KGJsa2lmX3N0YXRlID09IEJMS0lGX1NUQVRFX0NMT1NF RCB8fCByZWNvdmVyeSkgKQogICAgewogICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlv X3JlcXVlc3RfbG9jaywgZmxhZ3MpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBycCA9IGJs a19yaW5nLnNyaW5nLT5yc3BfcHJvZDsKICAgIHJtYigpOyAvKiBFbnN1cmUgd2Ugc2VlIHF1ZXVl ZCByZXNwb25zZXMgdXAgdG8gJ3JwJy4gKi8KCiAgICBmb3IgKCBpID0gYmxrX3JpbmcucnNwX2Nv bnM7IGkgIT0gcnA7IGkrKyApCiAgICB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpZDsKICAgICAg ICBibGtpZl9yZXNwb25zZV90ICpicmV0OwogICAgICAgIAogICAgICAgIGJyZXQgPSBSSU5HX0dF VF9SRVNQT05TRSgmYmxrX3JpbmcsIGkpOwogICAgICAgIGlkID0gYnJldC0+aWQ7CiAgICAgICAg YmggPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopcmVjX3JpbmdbaWRdLmlkOyAKCiAgICAgICAgYmxr aWZfY29tcGxldGlvbiggJnJlY19yaW5nW2lkXSApOwoKICAgICAgICBBRERfSURfVE9fRlJFRUxJ U1QoaWQpOwoKICAgICAgICBzd2l0Y2ggKCBicmV0LT5vcGVyYXRpb24gKQogICAgICAgIHsKICAg ICAgICBjYXNlIEJMS0lGX09QX1JFQUQ6CiAgICAgICAgY2FzZSBCTEtJRl9PUF9XUklURToKICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShicmV0LT5zdGF0dXMgIT0gQkxLSUZfUlNQX09LQVkpICkK ICAgICAgICAgICAgICAgIERQUklOVEsoIkJhZCByZXR1cm4gZnJvbSBibGtkZXYgZGF0YSByZXF1 ZXN0OiAlbHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZXQtPnN0YXR1cyk7CiAgICAg ICAgICAgIGZvciAoIDsgYmggIT0gTlVMTDsgYmggPSBuZXh0X2JoICkKICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgbmV4dF9iaCA9IGJoLT5iX3JlcW5leHQ7CiAgICAgICAgICAgICAgICBi aC0+Yl9yZXFuZXh0ID0gTlVMTDsKICAgICAgICAgICAgICAgIGJoLT5iX2VuZF9pbyhiaCwgYnJl dC0+c3RhdHVzID09IEJMS0lGX1JTUF9PS0FZKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgY2FzZSBCTEtJRl9PUF9QUk9CRToKICAgICAgICAgICAgbWVtY3B5KCZi bGtpZl9jb250cm9sX3JzcCwgYnJldCwgc2l6ZW9mKCpicmV0KSk7CiAgICAgICAgICAgIGJsa2lm X2NvbnRyb2xfcnNwX3ZhbGlkID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICAgQlVHKCk7CiAgICAgICAgfQoKICAgIH0KICAgIGJsa19yaW5nLnJzcF9j b25zID0gaTsKICAgIAogICAga2lja19wZW5kaW5nX3JlcXVlc3RfcXVldWVzKCk7CgogICAgc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7Cn0KCiNlbmRpZgoK LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBDT01NT04gQ09ERSAgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KCiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAp2b2lk IGJsa2lmX2NvbnRyb2xfcHJvYmVfc2VuZChibGtpZl9yZXF1ZXN0X3QgKnJlcSwgYmxraWZfcmVz cG9uc2VfdCAqcnNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGFkZHJlc3MpCnsKICAgIGludCByZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZn cmVmX2hlYWQsIGdyZWZfdGVybWluYWwpOwogICAgQVNTRVJUKCByZWYgIT0gLUVOT1NQQyApOwoK ICAgIGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoIHJlZiwgcmRvbWlkLCBhZGRyZXNz ID4+IFBBR0VfU0hJRlQsIDAgKTsKICAgIHByaW50aygiY3djOiVzOiBncmFudCBhY2Nlc3MgdG8g YnVmOiVseFxuIiwgX19GVU5DVElPTl9fLCBhZGRyZXNzID4+IFBBR0VfU0hJRlQpOwoKICAgIHJl cS0+ZnJhbWVfYW5kX3NlY3RzWzBdID0gKCgodTMyKSByZWYpIDw8IDE2KSB8IDc7CgogICAgYmxr aWZfY29udHJvbF9zZW5kKHJlcSwgcnNwKTsKfQojZW5kaWYKCnZvaWQgYmxraWZfY29udHJvbF9z ZW5kKGJsa2lmX3JlcXVlc3RfdCAqcmVxLCBibGtpZl9yZXNwb25zZV90ICpyc3ApCnsKICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MsIGlkOwogICAgYmxraWZfcmVxdWVzdF90ICpyZXFfZDsKICAgIHBy aW50aygiY3djOiVzOiBpblxuIiwgX19GVU5DVElPTl9fKTsKCiByZXRyeToKICAgIHdoaWxlICgg UklOR19GVUxMKCZibGtfcmluZykgKQogICAgewogICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRB U0tfSU5URVJSVVBUSUJMRSk7CiAgICAgICAgc2NoZWR1bGVfdGltZW91dCgxKTsKICAgIH0KCiAg ICBwcmludGsoImN3YzolczogcHJlIHNwaW5fbG9ja19pcnFzYXZlXG4iLCBfX0ZVTkNUSU9OX18p OwogICAgc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsKICAgIHByaW50 aygiY3djOiVzOiBwb3N0IHNwaW5fbG9ja19pcnFzYXZlXG4iLCBfX0ZVTkNUSU9OX18pOwogICAg aWYgKCBSSU5HX0ZVTEwoJmJsa19yaW5nKSApCiAgICB7CiAgICAgICAgcHJpbnRrKCJjd2M6JXM6 IHNwaW5fdW5sb2NrX2lycXJlc3RvcmVcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmYmxraWZfaW9fbG9jaywgZmxhZ3MpOwogICAgICAgIGdvdG8gcmV0 cnk7CiAgICB9CgogICAgRElTQUJMRV9TQ0FUVEVSR0FUSEVSKCk7CiAgICByZXFfZCA9IFJJTkdf R0VUX1JFUVVFU1QoJmJsa19yaW5nLCBibGtfcmluZy5yZXFfcHJvZF9wdnQpOwogICAgKnJlcV9k ID0gKnJlcTsgICAgCgogICAgaWQgPSBHRVRfSURfRlJPTV9GUkVFTElTVCgpOwogICAgcmVxX2Qt PmlkID0gaWQ7CiAgICByZWNfcmluZ1tpZF0uaWQgPSAodW5zaWduZWQgbG9uZykgcmVxOwoKICAg IHRyYW5zbGF0ZV9yZXFfdG9fcGZuKCAmcmVjX3JpbmdbaWRdLCByZXEgKTsKCiAgICBibGtfcmlu Zy5yZXFfcHJvZF9wdnQrKzsKICAgIGZsdXNoX3JlcXVlc3RzKCk7CgogICAgcHJpbnRrKCJjd2M6 JXM6IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgMlxuIiwgX19GVU5DVElPTl9fKTsKICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsKCiAgICB3aGlsZSAoICFi bGtpZl9jb250cm9sX3JzcF92YWxpZCApCiAgICB7CiAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUo VEFTS19JTlRFUlJVUFRJQkxFKTsKICAgICAgICBzY2hlZHVsZV90aW1lb3V0KDEpOwogICAgfQoK ICAgIG1lbWNweShyc3AsICZibGtpZl9jb250cm9sX3JzcCwgc2l6ZW9mKCpyc3ApKTsKICAgIGJs a2lmX2NvbnRyb2xfcnNwX3ZhbGlkID0gMDsKICAgIHByaW50aygiY3djOiVzOiBvdXRcbiIsIF9f RlVOQ1RJT05fXyk7Cn0KCgovKiBTZW5kIGEgZHJpdmVyIHN0YXR1cyBub3RpZmljYXRpb24gdG8g dGhlIGRvbWFpbiBjb250cm9sbGVyLiAqLwpzdGF0aWMgdm9pZCBzZW5kX2RyaXZlcl9zdGF0dXMo aW50IG9rKQp7CiAgICBjdHJsX21zZ190IGNtc2cgPSB7CiAgICAgICAgLnR5cGUgICAgPSBDTVNH X0JMS0lGX0ZFLAogICAgICAgIC5zdWJ0eXBlID0gQ01TR19CTEtJRl9GRV9EUklWRVJfU1RBVFVT LAogICAgICAgIC5sZW5ndGggID0gc2l6ZW9mKGJsa2lmX2ZlX2RyaXZlcl9zdGF0dXNfdCksCiAg ICB9OwogICAgYmxraWZfZmVfZHJpdmVyX3N0YXR1c190ICptc2cgPSAodm9pZCopY21zZy5tc2c7 CiAgICAKICAgIG1zZy0+c3RhdHVzID0gKG9rID8gQkxLSUZfRFJJVkVSX1NUQVRVU19VUCA6IEJM S0lGX0RSSVZFUl9TVEFUVVNfRE9XTik7CgogICAgcHJpbnRrKCJjd2M6JXM6IGN0cmxfaWZfc2Vu ZF9tZXNzYWdlX2Jsb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgY3RybF9pZl9zZW5kX21lc3Nh Z2VfYmxvY2soJmNtc2csIE5VTEwsIDAsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKfQoKLyogVGVs bCB0aGUgY29udHJvbGxlciB0byBicmluZyB1cCB0aGUgaW50ZXJmYWNlLiAqLwpzdGF0aWMgdm9p ZCBibGtpZl9zZW5kX2ludGVyZmFjZV9jb25uZWN0KHZvaWQpCnsKICAgIGN0cmxfbXNnX3QgY21z ZyA9IHsKICAgICAgICAudHlwZSAgICA9IENNU0dfQkxLSUZfRkUsCiAgICAgICAgLnN1YnR5cGUg PSBDTVNHX0JMS0lGX0ZFX0lOVEVSRkFDRV9DT05ORUNULAogICAgICAgIC5sZW5ndGggID0gc2l6 ZW9mKGJsa2lmX2ZlX2ludGVyZmFjZV9jb25uZWN0X3QpLAogICAgfTsKICAgIGJsa2lmX2ZlX2lu dGVyZmFjZV9jb25uZWN0X3QgKm1zZyA9ICh2b2lkKiljbXNnLm1zZzsKICAgIAogICAgbXNnLT5o YW5kbGUgICAgICA9IDA7CiAgICBtc2ctPnNobWVtX2ZyYW1lID0gKHZpcnRfdG9fbWFjaGluZShi bGtfcmluZy5zcmluZykgPj4gUEFHRV9TSElGVCk7CiAgICAKICAgIHByaW50aygiY3djOiVzOiBj dHJsX2lmX3NlbmRfbWVzc2FnZV9ibG9ja1xuIiwgX19GVU5DVElPTl9fKTsKICAgIGN0cmxfaWZf c2VuZF9tZXNzYWdlX2Jsb2NrKCZjbXNnLCBOVUxMLCAwLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7 Cn0KCnN0YXRpYyB2b2lkIGJsa2lmX2ZyZWUodm9pZCkKewogICAgLyogUHJldmVudCBuZXcgcmVx dWVzdHMgYmVpbmcgaXNzdWVkIHVudGlsIHdlIGZpeCB0aGluZ3MgdXAuICovCiAgICBwcmludGso ImN3YzolczogcHJlIHNwaW5fbG9ja19pcnFcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICBzcGluX2xv Y2tfaXJxKCZibGtpZl9pb19sb2NrKTsKICAgIHByaW50aygiY3djOiVzOiBwb3N0IHNwaW5fbG9j a19pcnFcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICByZWNvdmVyeSA9IDE7CiAgICBibGtpZl9zdGF0 ZSA9IEJMS0lGX1NUQVRFX0RJU0NPTk5FQ1RFRDsKICAgIHNwaW5fdW5sb2NrX2lycSgmYmxraWZf aW9fbG9jayk7CiAgICBwcmludGsoImN3Yzolczogc3Bpbl91bmxvY2tfaXJxXG4iLCBfX0ZVTkNU SU9OX18pOwoKICAgIC8qIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBvbGQgZGV2aWNl IGNoYW5uZWwuICovCiAgICBpZiAoIGJsa19yaW5nLnNyaW5nICE9IE5VTEwgKQogICAgewogICAg ICAgIGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylibGtfcmluZy5zcmluZyk7CiAgICAgICAgYmxr X3Jpbmcuc3JpbmcgPSBOVUxMOwogICAgfQogICAgZnJlZV9pcnEoYmxraWZfaXJxLCBOVUxMKTsK ICAgIGJsa2lmX2lycSA9IDA7CiAgICAKICAgIHVuYmluZF9ldnRjaG5fZnJvbV9pcnEoYmxraWZf ZXZ0Y2huKTsKICAgIGJsa2lmX2V2dGNobiA9IDA7CiAgICBwcmludGsoImN3Yzolczogb3V0XG4i LCBfX0ZVTkNUSU9OX18pOwp9CgpzdGF0aWMgdm9pZCBibGtpZl9jbG9zZSh2b2lkKQp7CiAgICBw cmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwp9CgovKiBNb3ZlIGZyb20g Q0xPU0VEIHRvIERJU0NPTk5FQ1RFRCBzdGF0ZS4gKi8Kc3RhdGljIHZvaWQgYmxraWZfZGlzY29u bmVjdCh2b2lkKQp7CiAgICBibGtpZl9zcmluZ190ICpzcmluZzsKICAgIHByaW50aygiY3djOiVz OiBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAKICAgIGlmICggYmxrX3Jpbmcuc3Jpbmcg IT0gTlVMTCApCiAgICAgICAgZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJsa19yaW5nLnNyaW5n KTsKICAgIAogICAgc3JpbmcgPSAoYmxraWZfc3JpbmdfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBf S0VSTkVMKTsKICAgIFNIQVJFRF9SSU5HX0lOSVQoc3JpbmcpOwogICAgRlJPTlRfUklOR19JTklU KCZibGtfcmluZywgc3JpbmcsIFBBR0VfU0laRSk7CiAgICBibGtpZl9zdGF0ZSAgPSBCTEtJRl9T VEFURV9ESVNDT05ORUNURUQ7CiAgICBibGtpZl9zZW5kX2ludGVyZmFjZV9jb25uZWN0KCk7Cn0K CnN0YXRpYyB2b2lkIGJsa2lmX3Jlc2V0KHZvaWQpCnsKICAgIHByaW50aygiY3djOiVzOiBjYWxs ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICBibGtpZl9mcmVlKCk7CiAgICBibGtpZl9kaXNjb25u ZWN0KCk7Cn0KCnN0YXRpYyB2b2lkIGJsa2lmX3JlY292ZXIodm9pZCkKewogICAgaW50IGk7CiAg ICBibGtpZl9yZXF1ZXN0X3QgKnJlcTsKICAgIHByaW50aygiY3djOiVzOiBpblxuIiwgX19GVU5D VElPTl9fKTsKCiAgICAvKiBIbW0sIHJlcXVlc3RzIG1pZ2h0IGJlIHJlLW9yZGVyZWQgd2hlbiB3 ZSByZS1pc3N1ZSB0aGVtLgogICAgICogVGhpcyB3aWxsIG5lZWQgdG8gYmUgZml4ZWQgb25jZSB3 ZSBoYXZlIGJhcnJpZXJzICovCgogICAgLyogU3RhZ2UgMSA6IEZpbmQgYWN0aXZlIGFuZCBtb3Zl IHRvIHNhZmV0eS4gKi8KICAgIGZvciAoIGkgPSAwOyBpIDwgQkxLX1JJTkdfU0laRTsgaSsrICkK ICAgIHsKICAgICAgICBpZiAoIHJlY19yaW5nW2ldLmlkID49IFBBR0VfT0ZGU0VUICkKICAgICAg ICB7CiAgICAgICAgICAgIHJlcSA9IFJJTkdfR0VUX1JFUVVFU1QoJmJsa19yaW5nLCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGtfcmluZy5yZXFfcHJvZF9wdnQpOwogICAg ICAgICAgICB0cmFuc2xhdGVfcmVxX3RvX21mbihyZXEsICZyZWNfcmluZ1tpXSk7CiAgICAgICAg ICAgIGJsa19yaW5nLnJlcV9wcm9kX3B2dCsrOwogICAgICAgIH0KICAgIH0KICAgIHByaW50aygi Y3djOiVzOiBwb3N0IDFcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgLyogU3RhZ2UgMiA6IFNldCB1 cCBzaGFkb3cgbGlzdC4gKi8KICAgIGZvciAoIGkgPSAwOyBpIDwgYmxrX3JpbmcucmVxX3Byb2Rf cHZ0OyBpKysgKSAKICAgIHsKICAgICAgICByZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCZibGtfcmlu ZywgaSk7CiAgICAgICAgcmVjX3JpbmdbaV0uaWQgPSByZXEtPmlkOyAgCiAgICAgICAgcmVxLT5p ZCA9IGk7CiAgICAgICAgdHJhbnNsYXRlX3JlcV90b19wZm4oJnJlY19yaW5nW2ldLCByZXEpOwog ICAgfQogICAgcHJpbnRrKCJjd2M6JXM6IHBvc3QgMlxuIiwgX19GVU5DVElPTl9fKTsKCiAgICAv KiBTdGFnZSAzIDogU2V0IHVwIGZyZWUgbGlzdC4gKi8KICAgIGZvciAoIDsgaSA8IEJMS19SSU5H X1NJWkU7IGkrKyApCiAgICAgICAgcmVjX3JpbmdbaV0uaWQgPSBpKzE7CiAgICByZWNfcmluZ19m cmVlID0gYmxrX3JpbmcucmVxX3Byb2RfcHZ0OwogICAgcmVjX3JpbmdbQkxLX1JJTkdfU0laRS0x XS5pZCA9IDB4MGZmZmZmZmY7CiAgICBwcmludGsoImN3YzolczogcG9zdCAzXG4iLCBfX0ZVTkNU SU9OX18pOwoKICAgIC8qIGJsa19yaW5nLT5yZXFfcHJvZCB3aWxsIGJlIHNldCB3aGVuIHdlIGZs dXNoX3JlcXVlc3RzKCkuKi8KICAgIHdtYigpOwoKICAgIC8qIFN3aXRjaCBvZmYgcmVjb3Zlcnkg bW9kZSwgdXNpbmcgYSBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgdGhhdAogICAgICogaXQncyBz ZWVuIGJlZm9yZSB3ZSBmbHVzaCByZXF1ZXN0cyAtIHdlIGRvbid0IHdhbnQgdG8gbWlzcyBhbnkK ICAgICAqIGludGVycnVwdHMuICovCiAgICByZWNvdmVyeSA9IDA7CiAgICB3bWIoKTsKCiAgICAv KiBLaWNrcyB0aGluZ3MgYmFjayBpbnRvIGxpZmUuICovCiAgICBmbHVzaF9yZXF1ZXN0cygpOwoK ICAgIC8qIE5vdyBzYWZlIHRvIGxlZnQgb3RoZXIgcGVvcGUgdXNlIGludGVyZmFjZS4gKi8KICAg IGJsa2lmX3N0YXRlID0gQkxLSUZfU1RBVEVfQ09OTkVDVEVEOwogICAgcHJpbnRrKCJjd2M6JXM6 IG91dFxuIiwgX19GVU5DVElPTl9fKTsKfQoKc3RhdGljIHZvaWQgYmxraWZfY29ubmVjdChibGtp Zl9mZV9pbnRlcmZhY2Vfc3RhdHVzX3QgKnN0YXR1cykKewogICAgaW50IGVyciA9IDA7CgogICAg YmxraWZfZXZ0Y2huID0gc3RhdHVzLT5ldnRjaG47CiAgICBibGtpZl9pcnEgICAgPSBiaW5kX2V2 dGNobl90b19pcnEoYmxraWZfZXZ0Y2huKTsKI2lmZGVmIENPTkZJR19YRU5fQkxLREVWX0dSQU5U CiAgICByZG9taWQgICAgICAgPSBzdGF0dXMtPmRvbWlkOwojZW5kaWYKICAgIHByaW50aygiY3dj OiVzOiBpblxuIiwgX19GVU5DVElPTl9fKTsKCiAgICBlcnIgPSByZXF1ZXN0X2lycShibGtpZl9p cnEsIGJsa2lmX2ludCwgU0FfU0FNUExFX1JBTkRPTSwgImJsa2lmIiwgTlVMTCk7CiAgICBpZiAo IGVyciApCiAgICB7CiAgICAgICAgcHJpbnRrKEtFUk5fQUxFUlQgInhlbl9ibGs6IHJlcXVlc3Rf aXJxIGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg aWYgKCByZWNvdmVyeSApIAogICAgewogICAgICAgIHByaW50aygiY3djOiVzOiByZWNvdmVyeVxu IiwgX19GVU5DVElPTl9fKTsKICAgICAgICBibGtpZl9yZWNvdmVyKCk7CiAgICB9IAogICAgZWxz ZSAKICAgIHsKICAgICAgICAvKiBUcmFuc2l0aW9uIHRvIGNvbm5lY3RlZCBpbiBjYXNlIHdlIG5l ZWQgdG8gZG8gCiAgICAgICAgICogIGEgcGFydGl0aW9uIHByb2JlIG9uIGEgd2hvbGUgZGlzay4g Ki8KICAgICAgICBibGtpZl9zdGF0ZSA9IEJMS0lGX1NUQVRFX0NPTk5FQ1RFRDsKICAgICAgICBw cmludGsoImN3YzolczogY29ubmVjdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgIAogICAg ICAgIC8qIFByb2JlIGZvciBkaXNjcyBhdHRhY2hlZCB0byB0aGUgaW50ZXJmYWNlLiAqLwogICAg ICAgIHhsdmJkX2luaXQoKTsKICAgIH0KICAgIAogICAgLyogS2ljayBwZW5kaW5nIHJlcXVlc3Rz LiAqLwogICAgcHJpbnRrKCJjd2M6JXM6IHByZSBzcGluX2xvY2tfaXJxXG4iLCBfX0ZVTkNUSU9O X18pOwogICAgc3Bpbl9sb2NrX2lycSgmYmxraWZfaW9fbG9jayk7CiAgICBwcmludGsoImN3Yzol czogcG9zdCBzcGluX2xvY2tfaXJxXG4iLCBfX0ZVTkNUSU9OX18pOwogICAga2lja19wZW5kaW5n X3JlcXVlc3RfcXVldWVzKCk7CiAgICBzcGluX3VubG9ja19pcnEoJmJsa2lmX2lvX2xvY2spOwog ICAgcHJpbnRrKCJjd2M6JXM6IHNwaW5fdW5sb2NrX2lycVxuIiwgX19GVU5DVElPTl9fKTsKfQoK c3RhdGljIHZvaWQgdW5leHBlY3RlZChibGtpZl9mZV9pbnRlcmZhY2Vfc3RhdHVzX3QgKnN0YXR1 cykKewogICAgRFBSSU5USygiIFVuZXhwZWN0ZWQgYmxraWYgc3RhdHVzICV1IGluIHN0YXRlICV1 XG4iLCAKICAgICAgICAgICAgc3RhdHVzLT5zdGF0dXMsIGJsa2lmX3N0YXRlKTsKfQoKc3RhdGlj IHZvaWQgYmxraWZfc3RhdHVzKGJsa2lmX2ZlX2ludGVyZmFjZV9zdGF0dXNfdCAqc3RhdHVzKQp7 CiAgICBpZiAoIHN0YXR1cy0+aGFuZGxlICE9IGJsa2lmX2hhbmRsZSApCiAgICB7CiAgICAgICAg V1BSSU5USygiIEludmFsaWQgYmxraWY6IGhhbmRsZT0ldVxuIiwgc3RhdHVzLT5oYW5kbGUpOwog ICAgICAgIHVuZXhwZWN0ZWQoc3RhdHVzKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBwcmlu dGsoImN3Yzolczogc3RhdHVzOiAldVxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMtPnN0YXR1cyk7 CgogICAgc3dpdGNoICggc3RhdHVzLT5zdGF0dXMgKSAKICAgIHsKICAgIGNhc2UgQkxLSUZfSU5U RVJGQUNFX1NUQVRVU19DTE9TRUQ6CiAgICAgICAgc3dpdGNoICggYmxraWZfc3RhdGUgKQogICAg ICAgIHsKICAgICAgICBjYXNlIEJMS0lGX1NUQVRFX0NMT1NFRDoKICAgICAgICAgICAgdW5leHBl Y3RlZChzdGF0dXMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEJMS0lGX1NUQVRF X0RJU0NPTk5FQ1RFRDoKICAgICAgICBjYXNlIEJMS0lGX1NUQVRFX0NPTk5FQ1RFRDoKICAgICAg ICAgICAgdW5leHBlY3RlZChzdGF0dXMpOwogICAgICAgICAgICBibGtpZl9jbG9zZSgpOwogICAg ICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBCTEtJRl9J TlRFUkZBQ0VfU1RBVFVTX0RJU0NPTk5FQ1RFRDoKICAgICAgICBzd2l0Y2ggKCBibGtpZl9zdGF0 ZSApCiAgICAgICAgewogICAgICAgIGNhc2UgQkxLSUZfU1RBVEVfQ0xPU0VEOgogICAgICAgICAg ICBibGtpZl9kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQkxL SUZfU1RBVEVfRElTQ09OTkVDVEVEOgogICAgICAgIGNhc2UgQkxLSUZfU1RBVEVfQ09OTkVDVEVE OgogICAgICAgICAgICAvKiB1bmV4cGVjdGVkKHN0YXR1cyk7ICovIC8qIG9jY3VycyBkdXJpbmcg c3VzcGVuZC9yZXN1bWUgKi8KICAgICAgICAgICAgYmxraWZfcmVzZXQoKTsKICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgQkxLSUZfSU5URVJGQUNF X1NUQVRVU19DT05ORUNURUQ6CiAgICAgICAgc3dpdGNoICggYmxraWZfc3RhdGUgKQogICAgICAg IHsKICAgICAgICBjYXNlIEJMS0lGX1NUQVRFX0NMT1NFRDoKICAgICAgICAgICAgdW5leHBlY3Rl ZChzdGF0dXMpOwogICAgICAgICAgICBibGtpZl9kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIGJs a2lmX2Nvbm5lY3Qoc3RhdHVzKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBCTEtJ Rl9TVEFURV9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgIGJsa2lmX2Nvbm5lY3Qoc3RhdHVzKTsK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBCTEtJRl9TVEFURV9DT05ORUNURUQ6CiAg ICAgICAgICAgIHVuZXhwZWN0ZWQoc3RhdHVzKTsKICAgICAgICAgICAgYmxraWZfY29ubmVjdChz dGF0dXMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAg Y2FzZSBCTEtJRl9JTlRFUkZBQ0VfU1RBVFVTX0NIQU5HRUQ6CiAgICAgICAgc3dpdGNoICggYmxr aWZfc3RhdGUgKQogICAgICAgIHsKICAgICAgICBjYXNlIEJMS0lGX1NUQVRFX0NMT1NFRDoKICAg ICAgICBjYXNlIEJMS0lGX1NUQVRFX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgdW5leHBlY3Rl ZChzdGF0dXMpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEJMS0lGX1NUQVRFX0NP Tk5FQ1RFRDoKICAgICAgICAgICAgdmJkX3VwZGF0ZSgpOwogICAgICAgICAgICBicmVhazsKICAg ICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICBXUFJJTlRLKCIgSW52 YWxpZCBibGtpZiBzdGF0dXM6ICVkXG4iLCBzdGF0dXMtPnN0YXR1cyk7CiAgICAgICAgYnJlYWs7 CiAgICB9Cn0KCgpzdGF0aWMgdm9pZCBibGtpZl9jdHJsaWZfcngoY3RybF9tc2dfdCAqbXNnLCB1 bnNpZ25lZCBsb25nIGlkKQp7CiAgICBwcmludGsoImN3YzolczogY2FsbGVkXG4iLCBfX0ZVTkNU SU9OX18pOwogICAgc3dpdGNoICggbXNnLT5zdWJ0eXBlICkKICAgIHsKICAgIGNhc2UgQ01TR19C TEtJRl9GRV9JTlRFUkZBQ0VfU1RBVFVTOgogICAgICAgIGJsa2lmX3N0YXR1cygoYmxraWZfZmVf aW50ZXJmYWNlX3N0YXR1c190ICopCiAgICAgICAgICAgICAgICAgICAgICZtc2ctPm1zZ1swXSk7 CiAgICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgIG1zZy0+bGVuZ3RoID0gMDsKICAg ICAgICBicmVhazsKICAgIH0KCiAgICBjdHJsX2lmX3NlbmRfcmVzcG9uc2UobXNnKTsKfQoKaW50 IHdhaXRfZm9yX2Jsa2lmKHZvaWQpCnsKICAgIGludCBlcnIgPSAwOwogICAgaW50IGk7CiAgICBw cmludGsoImN3YzolczogaW5cbiIsIF9fRlVOQ1RJT05fXyk7CiAgICBzZW5kX2RyaXZlcl9zdGF0 dXMoMSk7CgogICAgLyoKICAgICAqIFdlIHNob3VsZCByZWFkICducl9pbnRlcmZhY2VzJyBmcm9t IHJlc3BvbnNlIG1lc3NhZ2UgYW5kIHdhaXQKICAgICAqIGZvciBub3RpZmljYXRpb25zIGJlZm9y ZSBwcm9jZWVkaW5nLiBGb3Igbm93IHdlIGFzc3VtZSB0aGF0IHdlCiAgICAgKiB3aWxsIGJlIG5v dGlmaWVkIG9mIGV4YWN0bHkgb25lIGludGVyZmFjZS4KICAgICAqLwogICAgZm9yICggaT0wOyAo YmxraWZfc3RhdGUgIT0gQkxLSUZfU1RBVEVfQ09OTkVDVEVEKSAmJiAoaSA8IDEwKkhaKTsgaSsr ICkKICAgIHsKICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwog ICAgICAgIHNjaGVkdWxlX3RpbWVvdXQoMSk7CiAgICB9CgogICAgaWYgKCBibGtpZl9zdGF0ZSAh PSBCTEtJRl9TVEFURV9DT05ORUNURUQgKQogICAgewogICAgICAgIHByaW50ayhLRVJOX0lORk8g Inhlbl9ibGs6IFRpbWVvdXQgY29ubmVjdGluZyB0byBkZXZpY2UhXG4iKTsKICAgICAgICBlcnIg PSAtRU5PU1lTOwogICAgfQogICAgcHJpbnRrKCJjd2M6JXM6IG91dFxuIiwgX19GVU5DVElPTl9f KTsKICAgIHJldHVybiBlcnI7Cn0KCmludCBfX2luaXQgeGxibGtfaW5pdCh2b2lkKQp7CiAgICBp bnQgaTsKCiNpZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAgaWYgKCAwID4gZ250dGFi X2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoIE1BWElNVU1fT1VUU1RBTkRJTkdfQkxPQ0tfUkVRUywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3JlZl9oZWFkLCAm Z3JlZl90ZXJtaW5hbCApKQogICAgICAgIHJldHVybiAxOwogICAgcHJpbnRrKEtFUk5fQUxFUlQg IkJsa2lmIGZyb250ZW5kIGlzIHVzaW5nIGdyYW50IHRhYmxlcy5cbiIpOwojZW5kaWYKCiAgICBp ZiAoICh4ZW5fc3RhcnRfaW5mby5mbGFncyAmIFNJRl9JTklURE9NQUlOKSB8fAogICAgICAgICAo eGVuX3N0YXJ0X2luZm8uZmxhZ3MgJiBTSUZfQkxLX0JFX0RPTUFJTikgKQogICAgICAgIHJldHVy biAwOwoKICAgIHByaW50ayhLRVJOX0lORk8gInhlbl9ibGs6IEluaXRpYWxpc2luZyB2aXJ0dWFs IGJsb2NrIGRldmljZSBkcml2ZXJcbiIpOwoKICAgIHJlY19yaW5nX2ZyZWUgPSAwOwogICAgZm9y ICggaSA9IDA7IGkgPCBCTEtfUklOR19TSVpFOyBpKysgKQogICAgICAgIHJlY19yaW5nW2ldLmlk ID0gaSsxOwogICAgcmVjX3JpbmdbQkxLX1JJTkdfU0laRS0xXS5pZCA9IDB4MGZmZmZmZmY7Cgog ICAgKHZvaWQpY3RybF9pZl9yZWdpc3Rlcl9yZWNlaXZlcihDTVNHX0JMS0lGX0ZFLCBibGtpZl9j dHJsaWZfcngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTExCQUNLX0lO X0JMT0NLSU5HX0NPTlRFWFQpOwoKICAgIHdhaXRfZm9yX2Jsa2lmKCk7CgogICAgcmV0dXJuIDA7 Cn0KCnZvaWQgYmxrZGV2X3N1c3BlbmQodm9pZCkKewogICAgcHJpbnRrKCJjd2M6JXM6IGNhbGxl ZFxuIiwgX19GVU5DVElPTl9fKTsKfQoKdm9pZCBibGtkZXZfcmVzdW1lKHZvaWQpCnsKICAgIHBy aW50aygiY3djOiVzOiBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICBzZW5kX2RyaXZlcl9z dGF0dXMoMSk7Cn0KCnZvaWQgYmxraWZfY29tcGxldGlvbihibGtpZl9yZXF1ZXN0X3QgKnJlcSkK ewogICAgaW50IGk7CiAgICBwcmludGsoImN3YzolczogaW5cbiIsIF9fRlVOQ1RJT05fXyk7CiNp ZmRlZiBDT05GSUdfWEVOX0JMS0RFVl9HUkFOVAogICAgZ3JhbnRfcmVmX3QgZ3JlZjsKCiAgICBm b3IgKCBpID0gMDsgaSA8IHJlcS0+bnJfc2VnbWVudHM7IGkrKyApCiAgICB7CiAgICAgICAgZ3Jl ZiA9IGJsa2lmX2dyZWZfZnJvbV9mYXMocmVxLT5mcmFtZV9hbmRfc2VjdHNbaV0pOwogICAgICAg IGdudHRhYl9yZWxlYXNlX2dyYW50X3JlZmVyZW5jZSgmZ3JlZl9oZWFkLCBncmVmKTsKICAgIH0K I2Vsc2UKICAgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCB0aGUgZGlydHkgbG9nZ2luZyBiaXRz IHNldCAqLwogICAgc3dpdGNoICggcmVxLT5vcGVyYXRpb24gKQogICAgewogICAgY2FzZSBCTEtJ Rl9PUF9SRUFEOgogICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcmVxLT5ucl9zZWdtZW50czsgaSsr ICkKICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gcmVxLT5mcmFtZV9h bmRfc2VjdHNbaV0gPj4gUEFHRV9TSElGVDsKICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtZm4g PSBwaHlzX3RvX21hY2hpbmVfbWFwcGluZ1twZm5dOwogICAgICAgICAgICB4ZW5fbWFjaHBoeXNf dXBkYXRlKG1mbiwgcGZuKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiNlbmRpZgog ICAgcHJpbnRrKCJjd2M6JXM6IG91dFxuIiwgX19GVU5DVElPTl9fKTsKfQo= ------=_Part_20398_14467821.1113842330305 Content-Type: text/x-csrc; name="grant_table.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="grant_table.c" LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogKiBjb21tb24vZ3JhbnRfdGFibGUuYwogKiAKICogTWVj aGFuaXNtIGZvciBncmFudGluZyBmb3JlaWduIGFjY2VzcyB0byBwYWdlIGZyYW1lcywgYW5kIHJl Y2VpdmluZwogKiBwYWdlLW93bmVyc2hpcCB0cmFuc2ZlcnMuCiAqIAogKiBDb3B5cmlnaHQgKGMp IDIwMDUgQ2hyaXN0b3BoZXIgQ2xhcmsKICogQ29weXJpZ2h0IChjKSAyMDA0IEsgQSBGcmFzZXIK ICogCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqIAogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKiAKICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0 ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCiNkZWZpbmUgR1JBTlRfREVC VUcgMQojZGVmaW5lIEdSQU5UX0RFQlVHX1ZFUkJPU0UgMQoKI2luY2x1ZGUgPHhlbi9jb25maWcu aD4KI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgojaW5jbHVkZSA8eGVuL3NoYWRvdy5oPgojaW5jbHVk ZSA8eGVuL21tLmg+CgojZGVmaW5lIFBJTl9GQUlMKF9sYmwsIF9yYywgX2YsIF9hLi4uKSAgIFwK ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgRFBSSU5USyggX2Ys ICMjIF9hICk7ICAgICAgXAogICAgICAgIHJjID0gKF9yYyk7ICAgICAgICAgICAgICAgIFwKICAg ICAgICBnb3RvIF9sYmw7ICAgICAgICAgICAgICAgICBcCiAgICB9IHdoaWxlICggMCApCgpzdGF0 aWMgaW5saW5lIGludApnZXRfbWFwdHJhY2tfaGFuZGxlKAogICAgZ3JhbnRfdGFibGVfdCAqdCkK ewogICAgdW5zaWduZWQgaW50IGg7CiAgICBpZiAoIHVubGlrZWx5KChoID0gdC0+bWFwdHJhY2tf aGVhZCkgPT0gdC0+bWFwdHJhY2tfbGltaXQpICkKICAgICAgICByZXR1cm4gLTE7CiAgICB0LT5t YXB0cmFja19oZWFkID0gdC0+bWFwdHJhY2tbaF0ucmVmX2FuZF9mbGFncyA+PiBNQVBUUkFDS19S RUZfU0hJRlQ7CiAgICB0LT5tYXBfY291bnQrKzsKICAgIHJldHVybiBoOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQKcHV0X21hcHRyYWNrX2hhbmRsZSgKICAgIGdyYW50X3RhYmxlX3QgKnQsIGludCBo YW5kbGUpCnsKICAgIHQtPm1hcHRyYWNrW2hhbmRsZV0ucmVmX2FuZF9mbGFncyA9IHQtPm1hcHRy YWNrX2hlYWQgPDwgTUFQVFJBQ0tfUkVGX1NISUZUOwogICAgdC0+bWFwdHJhY2tfaGVhZCA9IGhh bmRsZTsKICAgIHQtPm1hcF9jb3VudC0tOwp9CgpzdGF0aWMgaW50Cl9fZ250dGFiX2FjdGl2YXRl X2dyYW50X3JlZigKICAgIHN0cnVjdCBkb21haW4gICAgICAgICAgKm1hcHBpbmdfZCwgICAgICAg ICAgLyogSU4gKi8KICAgIHN0cnVjdCBleGVjX2RvbWFpbiAgICAgKm1hcHBpbmdfZWQsCiAgICBz dHJ1Y3QgZG9tYWluICAgICAgICAgICpncmFudGluZ19kLAogICAgZ3JhbnRfcmVmX3QgICAgICAg ICAgICAgcmVmLAogICAgdTE2ICAgICAgICAgICAgICAgICAgICAgZGV2X2hzdF9yb19mbGFncywK ICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICAgIGhvc3RfdmlydF9hZGRyLAogICAgdW5zaWduZWQg bG9uZyAgICAgICAgICAqcGZyYW1lICkgICAgICAgICAgICAvKiBPVVQgKi8KewogICAgZG9taWRf dCAgICAgICAgICAgICAgIHNkb207CiAgICB1MTYgICAgICAgICAgICAgICAgICAgc2ZsYWdzOwog ICAgYWN0aXZlX2dyYW50X2VudHJ5X3QgKmFjdDsKICAgIGdyYW50X2VudHJ5X3QgICAgICAgICpz aGE7CiAgICBzMTYgICAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgdW5zaWduZWQgbG9uZyAg ICAgICAgIGZyYW1lID0gMDsKICAgIGludCAgICAgICAgICAgICAgICAgICByZXRyaWVzID0gMDsK CiAgICAvKgogICAgICogT2JqZWN0aXZlcyBvZiB0aGlzIGZ1bmN0aW9uOgogICAgICogLiBNYWtl IHRoZSByZWNvcmQgKCBncmFudGluZ19kLCByZWYgKSBhY3RpdmUsIGlmIG5vdCBhbHJlYWR5Lgog ICAgICogLiBVcGRhdGUgc2hhcmVkIGdyYW50IGVudHJ5IG9mIG93bmVyLCBpbmRpY2F0aW5nIGZy YW1lIGlzIG1hcHBlZC4KICAgICAqIC4gSW5jcmVtZW50IHRoZSBvd25lciBhY3QtPnBpbiByZWZl cmVuY2UgY291bnRzLgogICAgICogLiBnZXRfcGFnZSBvbiBzaGFyZWQgZnJhbWUgaWYgbmV3IG1h cHBpbmcuCiAgICAgKiAuIGdldF9wYWdlX3R5cGUgaWYgdGhpcyBpcyBmaXJzdCBSVyBtYXBwaW5n IG9mIGZyYW1lLgogICAgICogLiBBZGQgUFRFIHRvIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiBt YXBwaW5nX2QsIGlmIG5lY2Vzc2FyeS4KICAgICAqIFJldHVybnM6CiAgICAgKiAuICAtdmU6IGVy cm9yCiAgICAgKiAuICAgIDE6IG9rCiAgICAgKiAuICAgIDA6IG9rIGFuZCBUTEIgaW52YWxpZGF0 ZSBvZiBob3N0X3ZpcnRfYWRkciBuZWVkZWQuCiAgICAgKgogICAgICogT24gc3VjY2VzcywgKnBm cmFtZSBjb250YWlucyBtZm4uCiAgICAgKi8KCiAgICAvKgogICAgICogV2UgYm91bmQgdGhlIG51 bWJlciBvZiB0aW1lcyB3ZSByZXRyeSBDTVBYQ0hHIG9uIG1lbW9yeSBsb2NhdGlvbnMgdGhhdAog ICAgICogd2Ugc2hhcmUgd2l0aCBhIGd1ZXN0IE9TLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhlIGd1 ZXN0IGNhbiBtb2RpZnkgdGhhdAogICAgICogbG9jYXRpb24gYXQgYSBoaWdoZXIgcmF0ZSB0aGFu IHdlIGNhbiByZWFkLW1vZGlmeS1DTVBYQ0hHLCBzbyB0aGUgZ3Vlc3QKICAgICAqIGNvdWxkIGNh dXNlIHVzIHRvIGxpdmVsb2NrLiBUaGVyZSBhcmUgYSBmZXcgY2FzZXMgd2hlcmUgaXQgaXMgdmFs aWQgZm9yCiAgICAgKiB0aGUgZ3Vlc3QgdG8gcmFjZSBvdXIgdXBkYXRlcyAoZS5nLiwgdG8gY2hh bmdlIHRoZSBHVEZfcmVhZG9ubHkgZmxhZyksCiAgICAgKiBzbyB3ZSBhbGxvdyBhIGZldyByZXRy aWVzIGJlZm9yZSBmYWlsaW5nLgogICAgICovCgogICAgYWN0ID0gJmdyYW50aW5nX2QtPmdyYW50 X3RhYmxlLT5hY3RpdmVbcmVmXTsKICAgIHNoYSA9ICZncmFudGluZ19kLT5ncmFudF90YWJsZS0+ c2hhcmVkW3JlZl07CgogICAgcHJpbnRrKCJjd2M6JXM6IHByZSBzcGluX2xvY2tcbiIsIF9fRlVO Q1RJT05fXyk7CiAgICBzcGluX2xvY2soJmdyYW50aW5nX2QtPmdyYW50X3RhYmxlLT5sb2NrKTsK ICAgIHByaW50aygiY3djOiVzOiBwb3N0IHNwaW5fbG9ja1xuIiwgX19GVU5DVElPTl9fKTsKCiAg ICBpZiAoIGFjdC0+cGluID09IDAgKQogICAgewogICAgICAgIC8qIENBU0UgMTogQWN0aXZhdGlu ZyBhIHByZXZpb3VzbHkgaW5hY3RpdmUgZW50cnkuICovCgogICAgICAgIHNmbGFncyA9IHNoYS0+ ZmxhZ3M7CiAgICAgICAgc2RvbSAgID0gc2hhLT5kb21pZDsKCiAgICAgICAgZm9yICggOyA7ICkK ICAgICAgICB7CiAgICAgICAgICAgIHUzMiBzY29tYm8sIHByZXZfc2NvbWJvLCBuZXdfc2NvbWJv OwoKICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgoc2ZsYWdzICYgR1RGX3R5cGVfbWFzaykgIT0g R1RGX3Blcm1pdF9hY2Nlc3MpIHx8CiAgICAgICAgICAgICAgICAgdW5saWtlbHkoc2RvbSAhPSBt YXBwaW5nX2QtPmlkKSApCiAgICAgICAgICAgICAgICBQSU5fRkFJTCh1bmxvY2tfb3V0LCBHTlRT VF9nZW5lcmFsX2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBmbGFncyAoJXgp IG9yIGRvbSAoJWQpLiAoTkIuIGV4cGVjdGVkIGRvbSAlZClcbiIsCiAgICAgICAgICAgICAgICAg ICAgICAgIHNmbGFncywgc2RvbSwgbWFwcGluZ19kLT5pZCk7CgogICAgICAgICAgICAvKiBNZXJn ZSB0d28gMTYtYml0IHZhbHVlcyBpbnRvIGEgMzItYml0IGNvbWJpbmVkIHVwZGF0ZS4gKi8KICAg ICAgICAgICAgLyogTkIuIEVuZGlhbm5lc3MhICovCiAgICAgICAgICAgIHByZXZfc2NvbWJvID0g c2NvbWJvID0gKCh1MzIpc2RvbSA8PCAxNikgfCAodTMyKXNmbGFnczsKCiAgICAgICAgICAgIG5l d19zY29tYm8gPSBzY29tYm8gfCBHVEZfcmVhZGluZzsKICAgICAgICAgICAgaWYgKCAhKGRldl9o c3Rfcm9fZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkpICkKICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgbmV3X3Njb21ibyB8PSBHVEZfd3JpdGluZzsKICAgICAgICAgICAgICAgIGlmICggdW5s aWtlbHkoc2ZsYWdzICYgR1RGX3JlYWRvbmx5KSApCiAgICAgICAgICAgICAgICAgICAgUElOX0ZB SUwodW5sb2NrX291dCwgR05UU1RfZ2VuZXJhbF9lcnJvciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZS1waW4gYSByL28gZ3JhbnQgZW50cnkuXG4iKTsKICAg ICAgICAgICAgfQoKICAgICAgICAgICAgLyogTkIuIHByZXZfc2NvbWJvIGlzIHVwZGF0ZWQgaW4g cGxhY2UgdG8gc2VlbiB2YWx1ZS4gKi8KICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjbXB4Y2hn X3VzZXIoKHUzMiAqKSZzaGEtPmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwcmV2X3Njb21ibywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbmV3X3Njb21ibykpICkKICAgICAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEdO VFNUX2dlbmVyYWxfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiRmF1bHQgd2hpbGUg bW9kaWZ5aW5nIHNoYXJlZCBmbGFncyBhbmQgZG9taWQuXG4iKTsKCiAgICAgICAgICAgIC8qIERp ZCB0aGUgY29tYmluZWQgdXBkYXRlIHdvcmsgKGRpZCB3ZSBzZWUgd2hhdCB3ZSBleHBlY3RlZD8p LiAqLwogICAgICAgICAgICBpZiAoIGxpa2VseShwcmV2X3Njb21ibyA9PSBzY29tYm8pICkKICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgaWYgKCByZXRyaWVzKysgPT0gNCApCiAg ICAgICAgICAgICAgICBQSU5fRkFJTCh1bmxvY2tfb3V0LCBHTlRTVF9nZW5lcmFsX2Vycm9yLAog ICAgICAgICAgICAgICAgICAgICAgICAgIlNoYXJlZCBncmFudCBlbnRyeSBpcyB1bnN0YWJsZS5c biIpOwoKICAgICAgICAgICAgLyogRGlkbid0IHNlZSB3aGF0IHdlIGV4cGVjdGVkLiBTcGxpdCBv dXQgdGhlIHNlZW4gZmxhZ3MgJiBkb20uICovCiAgICAgICAgICAgIC8qIE5CLiBFbmRpYW5uZXNz ISAqLwogICAgICAgICAgICBzZmxhZ3MgPSAodTE2KXByZXZfc2NvbWJvOwogICAgICAgICAgICBz ZG9tICAgPSAodTE2KShwcmV2X3Njb21ibyA+PiAxNik7CiAgICAgICAgfQoKICAgICAgICAvKiBy bWIoKTsgKi8gLyogbm90IG9uIHg4NiAqLwoKICAgICAgICBmcmFtZSA9IF9fZ3Bmbl90b19tZm5f Zm9yZWlnbihncmFudGluZ19kLCBzaGEtPmZyYW1lKTsKCiAgICAgICAgaWYgKCB1bmxpa2VseSgh cGZuX2lzX3JhbShmcmFtZSkpIHx8CiAgICAgICAgICAgICB1bmxpa2VseSghKChkZXZfaHN0X3Jv X2ZsYWdzICYgR05UTUFQX3JlYWRvbmx5KSA/CiAgICAgICAgICAgICAgICAgICAgICAgIGdldF9w YWdlKCZmcmFtZV90YWJsZVtmcmFtZV0sIGdyYW50aW5nX2QpIDoKICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0X3BhZ2VfYW5kX3R5cGUoJmZyYW1lX3RhYmxlW2ZyYW1lXSwgZ3JhbnRpbmdfZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdUX3dyaXRhYmxlX3Bh Z2UpKSkgKQogICAgICAgIHsKICAgICAgICAgICAgY2xlYXJfYml0KF9HVEZfd3JpdGluZywgJnNo YS0+ZmxhZ3MpOwogICAgICAgICAgICBjbGVhcl9iaXQoX0dURl9yZWFkaW5nLCAmc2hhLT5mbGFn cyk7CiAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEdOVFNUX2dlbmVyYWxfZXJyb3Is CiAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcGluIHRoZSBncmFudGVkIGZyYW1lICgl bHgpIVxuIiwgZnJhbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCBkZXZfaHN0X3JvX2ZsYWdz ICYgR05UTUFQX2RldmljZV9tYXAgKQogICAgICAgICAgICBhY3QtPnBpbiArPSAoZGV2X2hzdF9y b19mbGFncyAmIEdOVE1BUF9yZWFkb25seSkgPwogICAgICAgICAgICAgICAgR05UUElOX2RldnJf aW5jIDogR05UUElOX2RldndfaW5jOwogICAgICAgIGlmICggZGV2X2hzdF9yb19mbGFncyAmIEdO VE1BUF9ob3N0X21hcCApCiAgICAgICAgICAgIGFjdC0+cGluICs9IChkZXZfaHN0X3JvX2ZsYWdz ICYgR05UTUFQX3JlYWRvbmx5KSA/CiAgICAgICAgICAgICAgICBHTlRQSU5faHN0cl9pbmMgOiBH TlRQSU5faHN0d19pbmM7CiAgICAgICAgYWN0LT5kb21pZCA9IHNkb207CiAgICAgICAgYWN0LT5m cmFtZSA9IGZyYW1lOwogICAgfQogICAgZWxzZSAKICAgIHsKICAgICAgICAvKiBDQVNFIDI6IEFj dGl2ZSBtb2RpY2F0aW9ucyB0byBhbiBhbHJlYWR5IGFjdGl2ZSBlbnRyeS4gKi8KCiAgICAgICAg LyoKICAgICAgICAgKiBBIGNoZWVzeSBjaGVjayBmb3IgcG9zc2libGUgcGluLWNvdW50IG92ZXJm bG93LgogICAgICAgICAqIEEgbW9yZSBhY2N1cmF0ZSBjaGVjayBjYW5ub3QgYmUgZG9uZSB3aXRo IGEgc2luZ2xlIGNvbXBhcmlzb24uCiAgICAgICAgICovCiAgICAgICAgaWYgKCAoYWN0LT5waW4g JiAweDgwODA4MDgwVSkgIT0gMCApCiAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEVO T1NQQywgIlJpc2sgb2YgY291bnRlciBvdmVyZmxvdyAlMDh4XG4iLCBhY3QtPnBpbik7CgogICAg ICAgIGZyYW1lID0gYWN0LT5mcmFtZTsKCiAgICAgICAgaWYgKCAhKGRldl9oc3Rfcm9fZmxhZ3Mg JiBHTlRNQVBfcmVhZG9ubHkpICYmIAogICAgICAgICAgICAgISgoc2ZsYWdzID0gc2hhLT5mbGFn cykgJiBHVEZfd3JpdGluZykgKQogICAgICAgIHsKICAgICAgICAgICAgZm9yICggOyA7ICkKICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgdTE2IHByZXZfc2ZsYWdzOwogICAgICAgICAgICAg ICAgCiAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHNmbGFncyAmIEdURl9yZWFkb25seSkg KQogICAgICAgICAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEdOVFNUX2dlbmVyYWxf ZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUtcGlu IGEgci9vIGdyYW50IGVudHJ5LlxuIik7CgogICAgICAgICAgICAgICAgcHJldl9zZmxhZ3MgPSBz ZmxhZ3M7CgogICAgICAgICAgICAgICAgLyogTkIuIHByZXZfc2ZsYWdzIGlzIHVwZGF0ZWQgaW4g cGxhY2UgdG8gc2VlbiB2YWx1ZS4gKi8KICAgICAgICAgICAgICAgIGlmICggdW5saWtlbHkoY21w eGNoZ191c2VyKCZzaGEtPmZsYWdzLCBwcmV2X3NmbGFncywgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3NmbGFncyB8IEdURl93cml0aW5nKSkgKQogICAg ICAgICAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEdOVFNUX2dlbmVyYWxfZXJyb3Is CiAgICAgICAgICAgICAgICAgICAgICAgICAiRmF1bHQgd2hpbGUgbW9kaWZ5aW5nIHNoYXJlZCBm bGFncy5cbiIpOwoKICAgICAgICAgICAgICAgIGlmICggbGlrZWx5KHByZXZfc2ZsYWdzID09IHNm bGFncykgKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGlmICgg cmV0cmllcysrID09IDQgKQogICAgICAgICAgICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQs IEdOVFNUX2dlbmVyYWxfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNoYXJl ZCBncmFudCBlbnRyeSBpcyB1bnN0YWJsZS5cbiIpOwoKICAgICAgICAgICAgICAgIHNmbGFncyA9 IHByZXZfc2ZsYWdzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFn ZXRfcGFnZV90eXBlKCZmcmFtZV90YWJsZVtmcmFtZV0sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEdUX3dyaXRhYmxlX3BhZ2UpKSApCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIGNsZWFyX2JpdChfR1RGX3dyaXRpbmcsICZzaGEtPmZsYWdzKTsKICAgICAg ICAgICAgICAgIFBJTl9GQUlMKHVubG9ja19vdXQsIEdOVFNUX2dlbmVyYWxfZXJyb3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZS1waW4gYSB1bndyaXRhYmxlIHBh Z2UuXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCBkZXZfaHN0X3Jv X2ZsYWdzICYgR05UTUFQX2RldmljZV9tYXAgKQogICAgICAgICAgICBhY3QtPnBpbiArPSAoZGV2 X2hzdF9yb19mbGFncyAmIEdOVE1BUF9yZWFkb25seSkgPyAKICAgICAgICAgICAgICAgIEdOVFBJ Tl9kZXZyX2luYyA6IEdOVFBJTl9kZXZ3X2luYzsKICAgICAgICBpZiAoIGRldl9oc3Rfcm9fZmxh Z3MgJiBHTlRNQVBfaG9zdF9tYXAgKQogICAgICAgICAgICBhY3QtPnBpbiArPSAoZGV2X2hzdF9y b19mbGFncyAmIEdOVE1BUF9yZWFkb25seSkgPwogICAgICAgICAgICAgICAgR05UUElOX2hzdHJf aW5jIDogR05UUElOX2hzdHdfaW5jOwogICAgfQoKICAgIC8qIEF0IHRoaXMgcG9pbnQ6CiAgICAg KiBhY3QtPnBpbiB1cGRhdGVkIHRvIHJlZmxlY3QgbWFwcGluZy4KICAgICAqIHNoYS0+ZmxhZ3Mg dXBkYXRlZCB0byBpbmRpY2F0ZSB0byBncmFudGluZyBkb21haW4gbWFwcGluZyBkb25lLgogICAg ICogZnJhbWUgY29udGFpbnMgdGhlIG1mbi4KICAgICAqLwoKICAgIHNwaW5fdW5sb2NrKCZncmFu dGluZ19kLT5ncmFudF90YWJsZS0+bG9jayk7CiAgICBwcmludGsoImN3Yzolczogc3Bpbl91bmxv Y2tcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgaWYgKCAoaG9zdF92aXJ0X2FkZHIgIT0gMCkgJiYg KGRldl9oc3Rfcm9fZmxhZ3MgJiBHTlRNQVBfaG9zdF9tYXApICkKICAgIHsKICAgICAgICAvKiBX cml0ZSB1cGRhdGUgaW50byB0aGUgcGFnZXRhYmxlCiAgICAgICAgICovCgogICAgICAgIHJjID0g dXBkYXRlX2dyYW50X3ZhX21hcHBpbmcoIGhvc3RfdmlydF9hZGRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChmcmFtZSA8PCBQQUdFX1NISUZUKSB8IF9QQUdFX1BSRVNFTlQgIHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UEFHRV9BQ0NFU1NFRCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1BBR0VfRElSVFkgICAgfAogICAgICAgICAgICAgICAgICAgICAgICgo ZGV2X2hzdF9yb19mbGFncyAmIEdOVE1BUF9yZWFkb25seSkgPyAwIDogX1BBR0VfUlcpLAogICAg ICAgICAgICAgICAgICAgICAgIG1hcHBpbmdfZCwgbWFwcGluZ19lZCApOwoKICAgICAgICAvKiBJ TVBPUlRBTlQ6IChyYyA9PSAwKSA9PiBtdXN0IGZsdXNoIC8gaW52YWxpZGF0ZSBlbnRyeSBpbiBU TEIuCiAgICAgICAgICogVGhpcyBpcyBkb25lIGluIHRoZSBvdXRlciBnbnR0YWJfbWFwX2dyYW50 X3JlZi4KICAgICAgICAgKi8KCiAgICAgICAgaWYgKCAwID4gcmMgKQogICAgICAgIHsKICAgICAg ICAgICAgLyogQWJvcnQuICovCgogICAgICAgICAgICBwcmludGsoImN3YzolczogcHJlIHNwaW5f bG9jayAyXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICAgICBzcGluX2xvY2soJmdyYW50aW5n X2QtPmdyYW50X3RhYmxlLT5sb2NrKTsKICAgICAgICAgICAgcHJpbnRrKCJjd2M6JXM6IHBvc3Qg c3Bpbl9sb2NrIDJcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgICAgICBpZiAoIGRldl9oc3Rf cm9fZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkgKQogICAgICAgICAgICAgICAgYWN0LT5waW4gLT0g R05UUElOX2hzdHJfaW5jOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgIGFjdC0+cGluIC09IEdOVFBJTl9oc3R3X2luYzsKICAgICAgICAgICAgICAgIGlmICgg KGFjdC0+cGluICYgKEdOVFBJTl9oc3R3X21hc2t8R05UUElOX2RldndfbWFzaykpID09IDAgKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNsZWFyX2JpdChfR1RGX3dyaXRp bmcsICZzaGEtPmZsYWdzKTsKICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKCZmcmFt ZV90YWJsZVtmcmFtZV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICAgIGlmICggYWN0LT5waW4gPT0gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNs ZWFyX2JpdChfR1RGX3JlYWRpbmcsICZzaGEtPmZsYWdzKTsKICAgICAgICAgICAgICAgIHB1dF9w YWdlKCZmcmFtZV90YWJsZVtmcmFtZV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzcGlu X3VubG9jaygmZ3JhbnRpbmdfZC0+Z3JhbnRfdGFibGUtPmxvY2spOwogICAgICAgICAgICBwcmlu dGsoImN3Yzolczogc3Bpbl91bmxvY2sgMlxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICB9Cgog ICAgfQogICAgKnBmcmFtZSA9IGZyYW1lOwogICAgcHJpbnRrKCJjd2M6JXM6IG91dFxuIiwgX19G VU5DVElPTl9fKTsKICAgIHJldHVybiByYzsKCiB1bmxvY2tfb3V0OgogICAgc3Bpbl91bmxvY2so JmdyYW50aW5nX2QtPmdyYW50X3RhYmxlLT5sb2NrKTsKICAgIHByaW50aygiY3djOiVzOiBzcGlu X3VubG9jayBvdXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICByZXR1cm4gcmM7Cn0KCnN0YXRpYyBp bnQKX19nbnR0YWJfbWFwX2dyYW50X3JlZigKICAgIGdudHRhYl9tYXBfZ3JhbnRfcmVmX3QgKnVv cCwKICAgIHVuc2lnbmVkIGxvbmcgKnZhKQp7CiAgICBkb21pZF90ICAgICAgICAgICAgICAgZG9t OwogICAgZ3JhbnRfcmVmX3QgICAgICAgICAgIHJlZjsKICAgIHN0cnVjdCBkb21haW4gICAgICAg ICpsZCwgKnJkOwogICAgc3RydWN0IGV4ZWNfZG9tYWluICAgKmxlZDsKICAgIHUxNiAgICAgICAg ICAgICAgICAgICBkZXZfaHN0X3JvX2ZsYWdzOwogICAgaW50ICAgICAgICAgICAgICAgICAgIGhh bmRsZTsKICAgIHVuc2lnbmVkIGxvbmcgICAgICAgICBmcmFtZSwgaG9zdF92aXJ0X2FkZHI7CiAg ICBpbnQgICAgICAgICAgICAgICAgICAgcmM7CgogICAgLyogUmV0dXJucyAwIGlmIFRMQiBmbHVz aCAvIGludmFsaWRhdGUgcmVxdWlyZWQgYnkgY2FsbGVyLgogICAgICogdmEgd2lsbCBpbmRpY2F0 ZSB0aGUgYWRkcmVzcyB0byBiZSBpbnZhbGlkYXRlZC4gKi8KCiAgICBsZWQgPSBjdXJyZW50Owog ICAgbGQgPSBsZWQtPmRvbWFpbjsKCiAgICAvKiBCaXR3aXNlLU9SIGF2b2lkcyBzaG9ydC1jaXJj dWl0aW5nIHdoaWNoIHNjcmV3cyBjb250cm9sIGZsb3cuICovCiAgICBpZiAoIHVubGlrZWx5KF9f Z2V0X3VzZXIoZG9tLCAmdW9wLT5kb20pIHwKICAgICAgICAgICAgICAgICAgX19nZXRfdXNlcihy ZWYsICZ1b3AtPnJlZikgfAogICAgICAgICAgICAgICAgICBfX2dldF91c2VyKGhvc3RfdmlydF9h ZGRyLCAmdW9wLT5ob3N0X3ZpcnRfYWRkcikgfAogICAgICAgICAgICAgICAgICBfX2dldF91c2Vy KGRldl9oc3Rfcm9fZmxhZ3MsICZ1b3AtPmZsYWdzKSkgKQogICAgewogICAgICAgIERQUklOVEso IkZhdWx0IHdoaWxlIHJlYWRpbmcgZ250dGFiX21hcF9ncmFudF9yZWZfdC5cbiIpOwogICAgICAg IHJldHVybiAtRUZBVUxUOyAvKiBkb24ndCBzZXQgc3RhdHVzICovCiAgICB9CgoKICAgIGlmICgg KChob3N0X3ZpcnRfYWRkciAhPSAwKSB8fCAoZGV2X2hzdF9yb19mbGFncyAmIEdOVE1BUF9ob3N0 X21hcCkgKSAmJgogICAgICAgICB1bmxpa2VseSghX19hZGRyX29rKGhvc3RfdmlydF9hZGRyKSkp CiAgICB7CiAgICAgICAgRFBSSU5USygiQmFkIHZpcnR1YWwgYWRkcmVzcyAoJXgpIG9yIGZsYWdz ICgleCkuXG4iLAogICAgICAgICAgICAgICAgaG9zdF92aXJ0X2FkZHIsIGRldl9oc3Rfcm9fZmxh Z3MpOwogICAgICAgICh2b2lkKV9fcHV0X3VzZXIoR05UU1RfYmFkX3ZpcnRfYWRkciwgJnVvcC0+ aGFuZGxlKTsKICAgICAgICByZXR1cm4gR05UU1RfYmFkX2dudHJlZjsKICAgIH0KCiAgICBpZiAo IHVubGlrZWx5KHJlZiA+PSBOUl9HUkFOVF9FTlRSSUVTKSB8fAogICAgICAgICB1bmxpa2VseSgo ZGV2X2hzdF9yb19mbGFncyAmIChHTlRNQVBfZGV2aWNlX21hcHxHTlRNQVBfaG9zdF9tYXApKSA9 PQowKSApCiAgICB7CiAgICAgICAgRFBSSU5USygiQmFkIHJlZiAoJWQpIG9yIGZsYWdzICgleCku XG4iLCByZWYsIGRldl9oc3Rfcm9fZmxhZ3MpOwogICAgICAgICh2b2lkKV9fcHV0X3VzZXIoR05U U1RfYmFkX2dudHJlZiwgJnVvcC0+aGFuZGxlKTsKICAgICAgICByZXR1cm4gR05UU1RfYmFkX2du dHJlZjsKICAgIH0KCiAgICBpZiAoIHVubGlrZWx5KChyZCA9IGZpbmRfZG9tYWluX2J5X2lkKGRv bSkpID09IE5VTEwpIHx8CiAgICAgICAgIHVubGlrZWx5KGxkID09IHJkKSApCiAgICB7CiAgICAg ICAgaWYgKCByZCAhPSBOVUxMICkKICAgICAgICAgICAgcHV0X2RvbWFpbihyZCk7CiAgICAgICAg RFBSSU5USygiQ291bGQgbm90IGZpbmQgZG9tYWluICVkXG4iLCBkb20pOwogICAgICAgICh2b2lk KV9fcHV0X3VzZXIoR05UU1RfYmFkX2RvbWFpbiwgJnVvcC0+aGFuZGxlKTsKICAgICAgICByZXR1 cm4gR05UU1RfYmFkX2RvbWFpbjsKICAgIH0KCiAgICAvKiBnZXQgYSBtYXB0cmFjayBoYW5kbGUg Ki8KICAgIGlmICggdW5saWtlbHkoKGhhbmRsZSA9IGdldF9tYXB0cmFja19oYW5kbGUobGQtPmdy YW50X3RhYmxlKSkgPT0gLTEpICkKICAgIHsKICAgICAgICBpbnQgICAgICAgICAgICAgIGk7CiAg ICAgICAgZ3JhbnRfbWFwcGluZ190ICpuZXdfbXQ7CiAgICAgICAgZ3JhbnRfdGFibGVfdCAgICps Z3QgICAgICA9IGxkLT5ncmFudF90YWJsZTsKCiAgICAgICAgLyogZ3JvdyB0aGUgbWFwdHJhY2sg dGFibGUgKi8KICAgICAgICBpZiAoIChuZXdfbXQgPSAodm9pZCAqKWFsbG9jX3hlbmhlYXBfcGFn ZXMobGd0LT5tYXB0cmFja19vcmRlciArIDEpKSA9PSBOVUxMICkKICAgICAgICB7CiAgICAgICAg ICAgIHB1dF9kb21haW4ocmQpOwogICAgICAgICAgICBEUFJJTlRLKCJObyBtb3JlIG1hcCBoYW5k bGVzIGF2YWlsYWJsZVxuIik7CiAgICAgICAgICAgICh2b2lkKV9fcHV0X3VzZXIoR05UU1Rfbm9f ZGV2aWNlX3NwYWNlLCAmdW9wLT5oYW5kbGUpOwogICAgICAgICAgICByZXR1cm4gR05UU1Rfbm9f ZGV2aWNlX3NwYWNlOwogICAgICAgIH0KCiAgICAgICAgbWVtY3B5KG5ld19tdCwgbGd0LT5tYXB0 cmFjaywgUEFHRV9TSVpFIDw8IGxndC0+bWFwdHJhY2tfb3JkZXIpOwogICAgICAgIGZvciAoIGkg PSBsZ3QtPm1hcHRyYWNrX2xpbWl0OyBpIDwgKGxndC0+bWFwdHJhY2tfbGltaXQgPDwgMSk7IGkr KyApCiAgICAgICAgICAgIG5ld19tdFtpXS5yZWZfYW5kX2ZsYWdzID0gKGkrMSkgPDwgTUFQVFJB Q0tfUkVGX1NISUZUOwoKICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZXMoKHVuc2lnbmVkIGxvbmcp bGd0LT5tYXB0cmFjaywgbGd0LT5tYXB0cmFja19vcmRlcik7CiAgICAgICAgbGd0LT5tYXB0cmFj ayAgICAgICAgICA9IG5ld19tdDsKICAgICAgICBsZ3QtPm1hcHRyYWNrX29yZGVyICAgKz0gMTsK ICAgICAgICBsZ3QtPm1hcHRyYWNrX2xpbWl0ICA8PD0gMTsKCiAgICAgICAgcHJpbnRrKCJEb3Vi bGVkIG1hcHRyYWNrIHNpemVcbiIpOwogICAgICAgIGhhbmRsZSA9IGdldF9tYXB0cmFja19oYW5k bGUobGQtPmdyYW50X3RhYmxlKTsKICAgIH0KCiNpZiBHUkFOVF9ERUJVR19WRVJCT1NFCiAgICBE UFJJTlRLKCJNYXBwaW5nIGdyYW50IHJlZiAoJWh1KSBmb3IgZG9tYWluICglaHUpIHdpdGggZmxh Z3MgKCV4KVxuIiwKICAgICAgICAgICAgcmVmLCBkb20sIGRldl9oc3Rfcm9fZmxhZ3MpOwojZW5k aWYKCiAgICBpZiAoIDAgPD0gKCByYyA9IF9fZ250dGFiX2FjdGl2YXRlX2dyYW50X3JlZiggbGQs IGxlZCwgcmQsIHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZXZfaHN0X3JvX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGhvc3RfdmlydF9hZGRyLCAmZnJhbWUpKSkKICAgIHsKICAgICAg ICAvKiBPbmx5IG1ha2UgdGhlIG1hcHRyYWNrIGxpdmUgX2FmdGVyXyB3cml0aW5nIHRoZSBwdGUs CiAgICAgICAgICogaW4gY2FzZSB3ZSBvdmVyd3JpdGUgdGhlIHNhbWUgZnJhbWUgbnVtYmVyLCBj YXVzaW5nIGEKICAgICAgICAgKiAgbWFwdHJhY2sgd2FsayB0byBmaW5kIGl0CiAgICAgICAgICov CiAgICAgICAgbGQtPmdyYW50X3RhYmxlLT5tYXB0cmFja1toYW5kbGVdLmRvbWlkID0gZG9tOwoK ICAgICAgICBsZC0+Z3JhbnRfdGFibGUtPm1hcHRyYWNrW2hhbmRsZV0ucmVmX2FuZF9mbGFncwog ICAgICAgICAgICA9IChyZWYgPDwgTUFQVFJBQ0tfUkVGX1NISUZUKSB8CiAgICAgICAgICAgICAg KGRldl9oc3Rfcm9fZmxhZ3MgJiBNQVBUUkFDS19HTlRNQVBfTUFTSyk7CgogICAgICAgICh2b2lk KV9fcHV0X3VzZXIoZnJhbWUsICZ1b3AtPmRldl9idXNfYWRkcik7CgogICAgICAgIGlmICggZGV2 X2hzdF9yb19mbGFncyAmIEdOVE1BUF9ob3N0X21hcCApCiAgICAgICAgICAgICp2YSA9IGhvc3Rf dmlydF9hZGRyOwoKICAgICAgICAodm9pZClfX3B1dF91c2VyKGhhbmRsZSwgJnVvcC0+aGFuZGxl KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAodm9pZClfX3B1dF91c2VyKHJjLCAmdW9w LT5oYW5kbGUpOwogICAgICAgIHB1dF9tYXB0cmFja19oYW5kbGUobGQtPmdyYW50X3RhYmxlLCBo YW5kbGUpOwogICAgfQoKICAgIHB1dF9kb21haW4ocmQpOwogICAgcmV0dXJuIHJjOwp9CgpzdGF0 aWMgbG9uZwpnbnR0YWJfbWFwX2dyYW50X3JlZigKICAgIGdudHRhYl9tYXBfZ3JhbnRfcmVmX3Qg KnVvcCwgdW5zaWduZWQgaW50IGNvdW50KQp7CiAgICBpbnQgaSwgZmx1c2ggPSAwOwogICAgdW5z aWduZWQgbG9uZyB2YVs4XTsKCiAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQogICAg ICAgIGlmICggX19nbnR0YWJfbWFwX2dyYW50X3JlZigmdW9wW2ldLAogICAgICAgICAgICAgJnZh WyAoZmx1c2ggPCA4ID8gZmx1c2ggOiAwKSBdICAgKSA9PSAwKQogICAgICAgICAgICBmbHVzaCsr OwoKICAgIGlmICggZmx1c2ggIT0gMCApCiAgICB7CiAgICAgICAgaWYgKCBmbHVzaCA8PSA4ICkK ICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBmbHVzaDsgaSsrICkKICAgICAgICAgICAgICAg IGZsdXNoX3RsYl9vbmVfbWFzayhjdXJyZW50LT5kb21haW4tPmNwdXNldCwgdmFbaV0pOwogICAg ICAgIGVsc2UgCiAgICAgICAgICAgIGxvY2FsX2ZsdXNoX3RsYigpOwogICAgfQoKICAgIHJldHVy biAwOwp9CgpzdGF0aWMgaW50Cl9fZ250dGFiX3VubWFwX2dyYW50X3JlZigKICAgIGdudHRhYl91 bm1hcF9ncmFudF9yZWZfdCAqdW9wLAogICAgdW5zaWduZWQgbG9uZyAqdmEpCnsKICAgIGRvbWlk X3QgICAgICAgIGRvbTsKICAgIGdyYW50X3JlZl90ICAgIHJlZjsKICAgIHUxNiAgICAgICAgICAg IGhhbmRsZTsKICAgIHN0cnVjdCBkb21haW4gKmxkLCAqcmQ7CgogICAgYWN0aXZlX2dyYW50X2Vu dHJ5X3QgKmFjdDsKICAgIGdyYW50X2VudHJ5X3QgKnNoYTsKICAgIGdyYW50X21hcHBpbmdfdCAq bWFwOwogICAgdTE2ICAgICAgICAgICAgZmxhZ3M7CiAgICBzMTYgICAgICAgICAgICByYyA9IDE7 CiAgICB1bnNpZ25lZCBsb25nICBmcmFtZSwgdmlydDsKCiAgICBsZCA9IGN1cnJlbnQtPmRvbWFp bjsKCiAgICAvKiBCaXR3aXNlLU9SIGF2b2lkcyBzaG9ydC1jaXJjdWl0aW5nIHdoaWNoIHNjcmV3 cyBjb250cm9sIGZsb3cuICovCiAgICBpZiAoIHVubGlrZWx5KF9fZ2V0X3VzZXIodmlydCwgJnVv cC0+aG9zdF92aXJ0X2FkZHIpIHwKICAgICAgICAgICAgICAgICAgX19nZXRfdXNlcihmcmFtZSwg JnVvcC0+ZGV2X2J1c19hZGRyKSB8CiAgICAgICAgICAgICAgICAgIF9fZ2V0X3VzZXIoaGFuZGxl LCAmdW9wLT5oYW5kbGUpKSApCiAgICB7CiAgICAgICAgRFBSSU5USygiRmF1bHQgd2hpbGUgcmVh ZGluZyBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmX3QuXG4iKTsKICAgICAgICByZXR1cm4gLUVGQVVM VDsgLyogZG9uJ3Qgc2V0IHN0YXR1cyAqLwogICAgfQoKICAgIG1hcCA9ICZsZC0+Z3JhbnRfdGFi bGUtPm1hcHRyYWNrW2hhbmRsZV07CgogICAgaWYgKCB1bmxpa2VseShoYW5kbGUgPj0gbGQtPmdy YW50X3RhYmxlLT5tYXB0cmFja19saW1pdCkgfHwKICAgICAgICAgdW5saWtlbHkoIShtYXAtPnJl Zl9hbmRfZmxhZ3MgJiBNQVBUUkFDS19HTlRNQVBfTUFTSykpICkKICAgIHsKICAgICAgICBEUFJJ TlRLKCJCYWQgaGFuZGxlICglZCkuXG4iLCBoYW5kbGUpOwogICAgICAgICh2b2lkKV9fcHV0X3Vz ZXIoR05UU1RfYmFkX2hhbmRsZSwgJnVvcC0+c3RhdHVzKTsKICAgICAgICByZXR1cm4gR05UU1Rf YmFkX2hhbmRsZTsKICAgIH0KCiAgICBkb20gICA9IG1hcC0+ZG9taWQ7CiAgICByZWYgICA9IG1h cC0+cmVmX2FuZF9mbGFncyA+PiBNQVBUUkFDS19SRUZfU0hJRlQ7CiAgICBmbGFncyA9IG1hcC0+ cmVmX2FuZF9mbGFncyAmIE1BUFRSQUNLX0dOVE1BUF9NQVNLOwoKICAgIGlmICggdW5saWtlbHko KHJkID0gZmluZF9kb21haW5fYnlfaWQoZG9tKSkgPT0gTlVMTCkgfHwKICAgICAgICAgdW5saWtl bHkobGQgPT0gcmQpICkKICAgIHsKICAgICAgICBpZiAoIHJkICE9IE5VTEwgKQogICAgICAgICAg ICBwdXRfZG9tYWluKHJkKTsKICAgICAgICBEUFJJTlRLKCJDb3VsZCBub3QgZmluZCBkb21haW4g JWRcbiIsIGRvbSk7CiAgICAgICAgKHZvaWQpX19wdXRfdXNlcihHTlRTVF9iYWRfZG9tYWluLCAm dW9wLT5zdGF0dXMpOwogICAgICAgIHJldHVybiBHTlRTVF9iYWRfZG9tYWluOwogICAgfQojaWYg R1JBTlRfREVCVUdfVkVSQk9TRQogICAgRFBSSU5USygiVW5tYXBwaW5nIGdyYW50IHJlZiAoJWh1 KSBmb3IgZG9tYWluICglaHUpIHdpdGggaGFuZGxlICglaHUpXG4iLAogICAgICAgICAgICByZWYs IGRvbSwgaGFuZGxlKTsKI2VuZGlmCgogICAgYWN0ID0gJnJkLT5ncmFudF90YWJsZS0+YWN0aXZl W3JlZl07CiAgICBzaGEgPSAmcmQtPmdyYW50X3RhYmxlLT5zaGFyZWRbcmVmXTsKCiAgICBwcmlu dGsoImN3YzolczogcHJlIHNwaW5fbG9ja1xuIiwgX19GVU5DVElPTl9fKTsKICAgIHNwaW5fbG9j aygmcmQtPmdyYW50X3RhYmxlLT5sb2NrKTsKICAgIHByaW50aygiY3djOiVzOiBwb3N0IHNwaW5f bG9ja1xuIiwgX19GVU5DVElPTl9fKTsKCiAgICBpZiAoIGZyYW1lID09IDAgKQogICAgICAgIGZy YW1lID0gYWN0LT5mcmFtZTsKICAgIGVsc2UgaWYgKCBmcmFtZSA9PSBHTlRVTk1BUF9ERVZfRlJP TV9WSVJUICkKICAgIHsKICAgICAgICBpZiAoICEoIGZsYWdzICYgR05UTUFQX2RldmljZV9tYXAg KSApCiAgICAgICAgICAgIFBJTl9GQUlMKHVubWFwX291dCwgR05UU1RfYmFkX2Rldl9hZGRyLAog ICAgICAgICAgICAgICAgICAgICAiQmFkIGZyYW1lIG51bWJlcjogZnJhbWUgbm90IG1hcHBlZCBm b3IgZGV2aWNlIGFjY2Vzcy5cbiIpOwogICAgICAgIGZyYW1lID0gYWN0LT5mcmFtZTsKCiAgICAg ICAgLyogZnJhbWUgd2lsbCBiZSB1bm1hcHBlZCBmb3IgZGV2aWNlIGFjY2VzcyBiZWxvdyBpZiB2 aXJ0IGFkZHIgb2sgKi8KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAoIHVubGlrZWx5 KGZyYW1lICE9IGFjdC0+ZnJhbWUpICkKICAgICAgICAgICAgUElOX0ZBSUwodW5tYXBfb3V0LCBH TlRTVF9nZW5lcmFsX2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAiQmFkIGZyYW1lIG51bWJl ciBkb2Vzbid0IG1hdGNoIGdudHJlZi5cbiIpOwogICAgICAgIGlmICggZmxhZ3MgJiBHTlRNQVBf ZGV2aWNlX21hcCApCiAgICAgICAgICAgIGFjdC0+cGluIC09IChmbGFncyAmIEdOVE1BUF9yZWFk b25seSkgPyBHTlRQSU5fZGV2cl9pbmMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6IEdOVFBJTl9kZXZ3X2luYzsKCiAgICAgICAgbWFwLT5yZWZfYW5k X2ZsYWdzICY9IH5HTlRNQVBfZGV2aWNlX21hcDsKICAgICAgICAodm9pZClfX3B1dF91c2VyKDAs ICZ1b3AtPmRldl9idXNfYWRkcik7CgogICAgICAgIC8qIGZyYW1lIGlzIG5vdyB1bm1hcHBlZCBm b3IgZGV2aWNlIGFjY2VzcyAqLwogICAgfQoKICAgIGlmICggKHZpcnQgIT0gMCkgJiYKICAgICAg ICAgKGZsYWdzICYgR05UTUFQX2hvc3RfbWFwKSAmJgogICAgICAgICAoKGFjdC0+cGluICYgKEdO VFBJTl9oc3R3X21hc2sgfCBHTlRQSU5faHN0cl9tYXNrKSkgPiAwKSkKICAgIHsKICAgICAgICBs MV9wZ2VudHJ5X3QgICAqcGwxZTsKICAgICAgICB1bnNpZ25lZCBsb25nICAgX29sMWU7CgogICAg ICAgIHBsMWUgPSAmbGluZWFyX3BnX3RhYmxlW2wxX2xpbmVhcl9vZmZzZXQodmlydCldOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGlmICggdW5saWtlbHkoX19n ZXRfdXNlcihfb2wxZSwgKHVuc2lnbmVkIGxvbmcgKilwbDFlKSAhPSAwKSApCiAgICAgICAgewog ICAgICAgICAgICBEUFJJTlRLKCJDb3VsZCBub3QgZmluZCBQVEUgZW50cnkgZm9yIGFkZHJlc3Mg JXhcbiIsIHZpcnQpOwogICAgICAgICAgICByYyA9IC1FSU5WQUw7CiAgICAgICAgICAgIGdvdG8g dW5tYXBfb3V0OwogICAgICAgIH0KCiAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgdmlydHVhbCBh ZGRyZXNzIHN1cHBsaWVkIGlzIGFjdHVhbGx5CiAgICAgICAgICogbWFwcGVkIHRvIGFjdC0+ZnJh bWUuCiAgICAgICAgICovCiAgICAgICAgaWYgKCB1bmxpa2VseSgoX29sMWUgPj4gUEFHRV9TSElG VCkgIT0gZnJhbWUgKSkKICAgICAgICB7CiAgICAgICAgICAgIERQUklOVEsoIlBURSBlbnRyeSAl eCBmb3IgYWRkcmVzcyAleCBkb2Vzbid0IG1hdGNoIGZyYW1lICV4XG4iLAogICAgICAgICAgICAg ICAgICAgIF9vbDFlLCB2aXJ0LCBmcmFtZSk7CiAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKICAg ICAgICAgICAgZ290byB1bm1hcF9vdXQ7CiAgICAgICAgfQoKICAgICAgICBwcmludGsoImN3Yzol czogcHJlIHBhZ2V0YWJsZSBkZWxldGVcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgLyogRGVs ZXRlIHBhZ2V0YWJsZSBlbnRyeQogICAgICAgICAqLwogICAgICAgIGlmICggdW5saWtlbHkoX19w dXRfdXNlcigwLCAodW5zaWduZWQgbG9uZyAqKXBsMWUpKSkKICAgICAgICB7CiAgICAgICAgICAg IERQUklOVEsoIkNhbm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICV4IGZvciB2aXJ0dWFsIGFkZHJl c3MgJXhcbiIsCiAgICAgICAgICAgICAgICAgICAgcGwxZSwgdmlydCk7CiAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKICAgICAgICAgICAgZ290byB1bm1hcF9vdXQ7CiAgICAgICAgfQoKICAgICAg ICBtYXAtPnJlZl9hbmRfZmxhZ3MgJj0gfkdOVE1BUF9ob3N0X21hcDsKCiAgICAgICAgYWN0LT5w aW4gLT0gKGZsYWdzICYgR05UTUFQX3JlYWRvbmx5KSA/IEdOVFBJTl9oc3RyX2luYwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHTlRQSU5faHN0d19pbmM7 CgogICAgICAgIGlmICggZnJhbWUgPT0gR05UVU5NQVBfREVWX0ZST01fVklSVCApCiAgICAgICAg ewogICAgICAgICAgICBhY3QtPnBpbiAtPSAoZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkpID8gR05U UElOX2RldnJfaW5jCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBHTlRQSU5fZGV2d19pbmM7CgogICAgICAgICAgICBtYXAtPnJlZl9hbmRfZmxhZ3Mg Jj0gfkdOVE1BUF9kZXZpY2VfbWFwOwogICAgICAgICAgICAodm9pZClfX3B1dF91c2VyKDAsICZ1 b3AtPmRldl9idXNfYWRkcik7CiAgICAgICAgfQoKICAgICAgICByYyA9IDA7CiAgICAgICAgKnZh ID0gdmlydDsKICAgICAgICBwcmludGsoImN3YzolczogcG9zdCBwYWdldGFibGUgZGVsZXRlXG4i LCBfX0ZVTkNUSU9OX18pOwogICAgfQoKICAgIGlmICggKG1hcC0+cmVmX2FuZF9mbGFncyAmIChH TlRNQVBfZGV2aWNlX21hcHxHTlRNQVBfaG9zdF9tYXApKSA9PSAwKQogICAgewogICAgICAgIG1h cC0+cmVmX2FuZF9mbGFncyA9IDA7CiAgICAgICAgcHV0X21hcHRyYWNrX2hhbmRsZShsZC0+Z3Jh bnRfdGFibGUsIGhhbmRsZSk7CiAgICB9CgogICAgLyogSWYganVzdCB1bm1hcHBlZCBhIHdyaXRh YmxlIG1hcHBpbmcsIG1hcmsgYXMgZGlydGllZCAqLwogICAgaWYgKCB1bmxpa2VseShzaGFkb3df bW9kZV9sb2dfZGlydHkocmQpKSAmJgogICAgICAgICEoIGZsYWdzICYgR05UTUFQX3JlYWRvbmx5 ICkgKQogICAgICAgICBtYXJrX2RpcnR5KHJkLCBmcmFtZSk7CgogICAgLyogSWYgdGhlIGxhc3Qg d3JpdGFibGUgbWFwcGluZyBoYXMgYmVlbiByZW1vdmVkLCBwdXRfcGFnZV90eXBlICovCiAgICBp ZiAoICggKGFjdC0+cGluICYgKEdOVFBJTl9kZXZ3X21hc2t8R05UUElOX2hzdHdfbWFzaykgKSA9 PSAwKSAmJgogICAgICAgICAoICEoIGZsYWdzICYgR05UTUFQX3JlYWRvbmx5ICkgKSApCiAgICB7 CiAgICAgICAgY2xlYXJfYml0KF9HVEZfd3JpdGluZywgJnNoYS0+ZmxhZ3MpOwogICAgICAgIHB1 dF9wYWdlX3R5cGUoJmZyYW1lX3RhYmxlW2ZyYW1lXSk7CiAgICB9CgogICAgaWYgKCBhY3QtPnBp biA9PSAwICkKICAgIHsKICAgICAgICBjbGVhcl9iaXQoX0dURl9yZWFkaW5nLCAmc2hhLT5mbGFn cyk7CiAgICAgICAgcHV0X3BhZ2UoJmZyYW1lX3RhYmxlW2ZyYW1lXSk7CiAgICB9CgogdW5tYXBf b3V0OgogICAgKHZvaWQpX19wdXRfdXNlcihyYywgJnVvcC0+c3RhdHVzKTsKICAgIHByaW50aygi Y3djOiVzOiBvdXQgc3Bpbl91bmxvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICBzcGluX3VubG9j aygmcmQtPmdyYW50X3RhYmxlLT5sb2NrKTsKICAgIHB1dF9kb21haW4ocmQpOwogICAgcmV0dXJu IHJjOwp9CgpzdGF0aWMgbG9uZwpnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmKAogICAgZ250dGFiX3Vu bWFwX2dyYW50X3JlZl90ICp1b3AsIHVuc2lnbmVkIGludCBjb3VudCkKewogICAgaW50IGksIGZs dXNoID0gMDsKICAgIHVuc2lnbmVkIGxvbmcgdmFbOF07CgogICAgZm9yICggaSA9IDA7IGkgPCBj b3VudDsgaSsrICkKICAgICAgICBpZiAoIF9fZ250dGFiX3VubWFwX2dyYW50X3JlZigmdW9wW2ld LAogICAgICAgICAgICAgJnZhWyAoZmx1c2ggPCA4ID8gZmx1c2ggOiAwKSBdICAgKSA9PSAwKQog ICAgICAgICAgICBmbHVzaCsrOwoKICAgIGlmICggZmx1c2ggIT0gMCApCiAgICB7CiAgICAgICAg aWYgKCBmbHVzaCA8PSA4ICkKICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBmbHVzaDsgaSsr ICkKICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhjdXJyZW50LT5kb21haW4tPmNw dXNldCwgdmFbaV0pOwogICAgICAgIGVsc2UgCiAgICAgICAgICAgIGxvY2FsX2ZsdXNoX3RsYigp OwogICAgfQoKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgbG9uZyAKZ250dGFiX3NldHVwX3RhYmxl KAogICAgZ250dGFiX3NldHVwX3RhYmxlX3QgKnVvcCwgdW5zaWduZWQgaW50IGNvdW50KQp7CiAg ICBnbnR0YWJfc2V0dXBfdGFibGVfdCAgb3A7CiAgICBzdHJ1Y3QgZG9tYWluICAgICAgICAqZDsK ICAgIGludCAgICAgICAgICAgICAgICAgICBpOwoKICAgIGlmICggY291bnQgIT0gMSApCiAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CgogICAgaWYgKCB1bmxpa2VseShjb3B5X2Zyb21fdXNlcigmb3As IHVvcCwgc2l6ZW9mKG9wKSkgIT0gMCkgKQogICAgewogICAgICAgIERQUklOVEsoIkZhdWx0IHdo aWxlIHJlYWRpbmcgZ250dGFiX3NldHVwX3RhYmxlX3QuXG4iKTsKICAgICAgICByZXR1cm4gLUVG QVVMVDsKICAgIH0KCiAgICBpZiAoIHVubGlrZWx5KG9wLm5yX2ZyYW1lcyA+IE5SX0dSQU5UX0ZS QU1FUykgKQogICAgewogICAgICAgIERQUklOVEsoIlhlbiBvbmx5IHN1cHBvcnRzIGF0IG1vc3Qg JWQgZ3JhbnQtdGFibGUgZnJhbWVzIHBlciBkb21haW4uXG4iLAogICAgICAgICAgICAgICAgTlJf R1JBTlRfRlJBTUVTKTsKICAgICAgICAodm9pZClwdXRfdXNlcihHTlRTVF9nZW5lcmFsX2Vycm9y LCAmdW9wLT5zdGF0dXMpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmICggb3AuZG9t ID09IERPTUlEX1NFTEYgKQogICAgewogICAgICAgIG9wLmRvbSA9IGN1cnJlbnQtPmRvbWFpbi0+ aWQ7CiAgICB9CiAgICBlbHNlIGlmICggdW5saWtlbHkoIUlTX1BSSVYoY3VycmVudC0+ZG9tYWlu KSkgKQogICAgewogICAgICAgICh2b2lkKXB1dF91c2VyKEdOVFNUX3Blcm1pc3Npb25fZGVuaWVk LCAmdW9wLT5zdGF0dXMpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmICggdW5saWtl bHkoKGQgPSBmaW5kX2RvbWFpbl9ieV9pZChvcC5kb20pKSA9PSBOVUxMKSApCiAgICB7CiAgICAg ICAgRFBSSU5USygiQmFkIGRvbWlkICVkLlxuIiwgb3AuZG9tKTsKICAgICAgICAodm9pZClwdXRf dXNlcihHTlRTVF9iYWRfZG9tYWluLCAmdW9wLT5zdGF0dXMpOwogICAgICAgIHJldHVybiAwOwog ICAgfQoKICAgIGlmICggb3AubnJfZnJhbWVzIDw9IE5SX0dSQU5UX0ZSQU1FUyApCiAgICB7CiAg ICAgICAgQVNTRVJUKGQtPmdyYW50X3RhYmxlICE9IE5VTEwpOwogICAgICAgICh2b2lkKXB1dF91 c2VyKEdOVFNUX29rYXksICZ1b3AtPnN0YXR1cyk7CgogICAgICAgIGZvciAoIGkgPSAwOyBpIDwg b3AubnJfZnJhbWVzOyBpKysgKQogICAgICAgICAgICAodm9pZClwdXRfdXNlciggKAogICAgICAg ICAgICAgICAgdmlydF90b19waHlzKCAoY2hhciopKGQtPmdyYW50X3RhYmxlLT5zaGFyZWQpKyhp KlBBR0VfU0laRSkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiBQQUdFX1NISUZU ICksICZ1b3AtPmZyYW1lX2xpc3RbaV0pOwogICAgfQoKICAgIHB1dF9kb21haW4oZCk7CiAgICBy ZXR1cm4gMDsKfQoKI2lmIEdSQU5UX0RFQlVHCnN0YXRpYyBpbnQKZ250dGFiX2R1bXBfdGFibGUo Z250dGFiX2R1bXBfdGFibGVfdCAqdW9wKQp7CiAgICBncmFudF90YWJsZV90ICAgICAgICAqZ3Q7 CiAgICBnbnR0YWJfZHVtcF90YWJsZV90ICAgb3A7CiAgICBzdHJ1Y3QgZG9tYWluICAgICAgICAq ZDsKICAgIHUzMiAgICAgICAgICAgICAgICAgICBzaGFyZWRfbWZuOwogICAgYWN0aXZlX2dyYW50 X2VudHJ5X3QgKmFjdDsKICAgIGdyYW50X2VudHJ5X3QgICAgICAgICBzaGFfY29weTsKICAgIGdy YW50X21hcHBpbmdfdCAgICAgICptYXB0cmFjazsKICAgIGludCAgICAgICAgICAgICAgICAgICBp OwoKCiAgICBpZiAoIHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKCZvcCwgdW9wLCBzaXplb2Yob3Ap KSAhPSAwKSApCiAgICB7CiAgICAgICAgRFBSSU5USygiRmF1bHQgd2hpbGUgcmVhZGluZyBnbnR0 YWJfZHVtcF90YWJsZV90LlxuIik7CiAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CiAgICB9CgogICAg aWYgKCBvcC5kb20gPT0gRE9NSURfU0VMRiApCiAgICB7CiAgICAgICAgb3AuZG9tID0gY3VycmVu dC0+ZG9tYWluLT5pZDsKICAgIH0KCiAgICBpZiAoIHVubGlrZWx5KChkID0gZmluZF9kb21haW5f YnlfaWQob3AuZG9tKSkgPT0gTlVMTCkgKQogICAgewogICAgICAgIERQUklOVEsoIkJhZCBkb21p ZCAlZC5cbiIsIG9wLmRvbSk7CiAgICAgICAgKHZvaWQpcHV0X3VzZXIoR05UU1RfYmFkX2RvbWFp biwgJnVvcC0+c3RhdHVzKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBBU1NFUlQoZC0+ Z3JhbnRfdGFibGUgIT0gTlVMTCk7CiAgICBndCA9IGQtPmdyYW50X3RhYmxlOwogICAgKHZvaWQp cHV0X3VzZXIoR05UU1Rfb2theSwgJnVvcC0+c3RhdHVzKTsKCiAgICBzaGFyZWRfbWZuID0gdmly dF90b19waHlzKGQtPmdyYW50X3RhYmxlLT5zaGFyZWQpOwoKICAgIERQUklOVEsoIkdyYW50IHRh YmxlIGZvciBkb20gKCVodSkgTUZOICgleClcbiIsCiAgICAgICAgICAgIG9wLmRvbSwgc2hhcmVk X21mbik7CgogICAgQVNTRVJUKGQtPmdyYW50X3RhYmxlLT5hY3RpdmUgIT0gTlVMTCk7CiAgICBB U1NFUlQoZC0+Z3JhbnRfdGFibGUtPnNoYXJlZCAhPSBOVUxMKTsKICAgIEFTU0VSVChkLT5ncmFu dF90YWJsZS0+bWFwdHJhY2sgIT0gTlVMTCk7CgogICAgZm9yICggaSA9IDA7IGkgPCBOUl9HUkFO VF9FTlRSSUVTOyBpKysgKQogICAgewogICAgICAgIHNoYV9jb3B5ID0gIGd0LT5zaGFyZWRbaV07 CgogICAgICAgIGlmICggc2hhX2NvcHkuZmxhZ3MgKQogICAgICAgIHsKICAgICAgICAgICAgRFBS SU5USygiR3JhbnQ6IGRvbSAoJWh1KSBTSEFSRUQgKCVkKSBmbGFnczooJWh4KSBkb206KCVodSkg ZnJhbWU6KCVseClcbiIsCiAgICAgICAgICAgICAgICAgICAgb3AuZG9tLCBpLCBzaGFfY29weS5m bGFncywgc2hhX2NvcHkuZG9taWQsIHNoYV9jb3B5LmZyYW1lKTsKICAgICAgICB9CiAgICB9Cgog ICAgc3Bpbl9sb2NrKCZndC0+bG9jayk7CgogICAgZm9yICggaSA9IDA7IGkgPCBOUl9HUkFOVF9F TlRSSUVTOyBpKysgKQogICAgewogICAgICAgIGFjdCA9ICZndC0+YWN0aXZlW2ldOwoKICAgICAg ICBpZiAoIGFjdC0+cGluICkKICAgICAgICB7CiAgICAgICAgICAgIERQUklOVEsoIkdyYW50OiBk b20gKCVodSkgQUNUSVZFICglZCkgcGluOigleCkgZG9tOiglaHUpIGZyYW1lOiglbHgpXG4iLAog ICAgICAgICAgICAgICAgICAgIG9wLmRvbSwgaSwgYWN0LT5waW4sIGFjdC0+ZG9taWQsIGFjdC0+ ZnJhbWUpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKCBpID0gMDsgaSA8IGd0LT5tYXB0cmFj a19saW1pdDsgaSsrICkKICAgIHsKICAgICAgICBtYXB0cmFjayA9ICZndC0+bWFwdHJhY2tbaV07 CgogICAgICAgIGlmICggbWFwdHJhY2stPnJlZl9hbmRfZmxhZ3MgJiBNQVBUUkFDS19HTlRNQVBf TUFTSyApCiAgICAgICAgewogICAgICAgICAgICBEUFJJTlRLKCJHcmFudDogZG9tICglaHUpIE1B UCAoJWQpIHJlZjooJWh1KSBmbGFnczooJXgpIGRvbTooJWh1KVxuIiwKICAgICAgICAgICAgICAg ICAgICBvcC5kb20sIGksCiAgICAgICAgICAgICAgICAgICAgbWFwdHJhY2stPnJlZl9hbmRfZmxh Z3MgPj4gTUFQVFJBQ0tfUkVGX1NISUZULAogICAgICAgICAgICAgICAgICAgIG1hcHRyYWNrLT5y ZWZfYW5kX2ZsYWdzICYgTUFQVFJBQ0tfR05UTUFQX01BU0ssCiAgICAgICAgICAgICAgICAgICAg bWFwdHJhY2stPmRvbWlkKTsKICAgICAgICB9CiAgICB9CgogICAgc3Bpbl91bmxvY2soJmd0LT5s b2NrKTsKCiAgICBwdXRfZG9tYWluKGQpOwogICAgcmV0dXJuIDA7Cn0KI2VuZGlmCgpsb25nIApk b19ncmFudF90YWJsZV9vcCgKICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnVvcCwgdW5zaWdu ZWQgaW50IGNvdW50KQp7CiAgICBsb25nIHJjOwoKICAgIGlmICggY291bnQgPiA1MTIgKQogICAg ICAgIHJldHVybiAtRUlOVkFMOwoKICAgIExPQ0tfQklHTE9DSyhjdXJyZW50LT5kb21haW4pOwoK ICAgIHJjID0gLUVGQVVMVDsKICAgIHN3aXRjaCAoIGNtZCApCiAgICB7CiAgICBjYXNlIEdOVFRB Qk9QX21hcF9ncmFudF9yZWY6CiAgICAgICAgaWYgKCB1bmxpa2VseSghYXJyYXlfYWNjZXNzX29r KAogICAgICAgICAgICBWRVJJRllfV1JJVEUsIHVvcCwgY291bnQsIHNpemVvZihnbnR0YWJfbWFw X2dyYW50X3JlZl90KSkpICkKICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgcmMgPSBnbnR0 YWJfbWFwX2dyYW50X3JlZigoZ250dGFiX21hcF9ncmFudF9yZWZfdCAqKXVvcCwgY291bnQpOwog ICAgICAgIGJyZWFrOwogICAgY2FzZSBHTlRUQUJPUF91bm1hcF9ncmFudF9yZWY6CiAgICAgICAg aWYgKCB1bmxpa2VseSghYXJyYXlfYWNjZXNzX29rKAogICAgICAgICAgICBWRVJJRllfV1JJVEUs IHVvcCwgY291bnQsIHNpemVvZihnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmX3QpKSkgKQogICAgICAg ICAgICBnb3RvIG91dDsKICAgICAgICByYyA9IGdudHRhYl91bm1hcF9ncmFudF9yZWYoKGdudHRh Yl91bm1hcF9ncmFudF9yZWZfdCAqKXVvcCwgY291bnQpOwogICAgICAgIGJyZWFrOwogICAgY2Fz ZSBHTlRUQUJPUF9zZXR1cF90YWJsZToKICAgICAgICByYyA9IGdudHRhYl9zZXR1cF90YWJsZSgo Z250dGFiX3NldHVwX3RhYmxlX3QgKil1b3AsIGNvdW50KTsKICAgICAgICBicmVhazsKI2lmIEdS QU5UX0RFQlVHCiAgICBjYXNlIEdOVFRBQk9QX2R1bXBfdGFibGU6CiAgICAgICAgcmMgPSBnbnR0 YWJfZHVtcF90YWJsZSgoZ250dGFiX2R1bXBfdGFibGVfdCAqKXVvcCk7CiAgICAgICAgYnJlYWs7 CiNlbmRpZgogICAgZGVmYXVsdDoKICAgICAgICByYyA9IC1FTk9TWVM7CiAgICAgICAgYnJlYWs7 CiAgICB9CgpvdXQ6CiAgICBVTkxPQ0tfQklHTE9DSyhjdXJyZW50LT5kb21haW4pOwoKICAgIHJl dHVybiByYzsKfQoKaW50CmdudHRhYl9jaGVja191bm1hcCgKICAgIHN0cnVjdCBkb21haW4gKnJk LCBzdHJ1Y3QgZG9tYWluICpsZCwgdW5zaWduZWQgbG9uZyBmcmFtZSwgaW50IHJlYWRvbmx5KQp7 CiAgICAvKiBDYWxsZWQgd2hlbiBwdXRfcGFnZSBpcyBpbnZva2VkIG9uIGEgcGFnZSBiZWxvbmdp bmcgdG8gYSBmb3JlaWduIGRvbWFpbi4KICAgICAqIEluc3RlYWQgb2YgZGVjcmVtZW50aW5nIHRo ZSBmcmFtZSB0YWJsZSByZWYgY291bnQsIGxvY2F0ZSB0aGUgZ3JhbnQKICAgICAqIHRhYmxlIGVu dHJ5LCBpZiBhbnksIGFuZCBpZiBmb3VuZCwgZGVjcmVtZW50IHRoYXQgY291bnQuCiAgICAgKiBD YWxsZWQgYSBfbG90XyBhdCBkb21haW4gY3JlYXRpb24gYmVjYXVzZSBwYWdlcyBtYXBwZWQgYnkg cHJpdiBkb21haW5zCiAgICAgKiBhbHNvIHRyYXZlcnNlIHRoaXMuCiAgICAgKi8KCiAgICAvKiBO b3RlOiBpZiB0aGUgc2FtZSBmcmFtZSBpcyBtYXBwZWQgbXVsdGlwbGUgdGltZXMsIGFuZCB0aGVu IG9uZSBvZgogICAgICogICAgICAgdGhlIHB0ZXMgaXMgb3ZlcndyaXR0ZW4sIHdoaWNoIG1hcHRy YWNrIGhhbmRsZSBnZXRzIGludmFsaWRhdGVkPwogICAgICogQWR2aWNlOiBkb24ndCBkbyBpdC4K ICAgICAqLwoKICAgIHVuc2lnbmVkIGludCBoYW5kbGUsIHJlZiwgcmVmY291bnQ7CiAgICBncmFu dF90YWJsZV90ICAgICAgICAqbGd0LCAqcmd0OwogICAgYWN0aXZlX2dyYW50X2VudHJ5X3QgKmFj dDsKICAgIGdyYW50X21hcHBpbmdfdCAgICAgICptYXA7CiAgICBpbnQgZm91bmQgPSAwOwoKICAg IGxndCA9IGxkLT5ncmFudF90YWJsZTsKCiNpZiBHUkFOVF9ERUJVR19WRVJCT1NFCiAgICBpZiAo IGxkLT5pZCAhPSAwICkKICAgIHsKICAgICAgICBEUFJJTlRLKCJGb3JlaWduIHVucmVmIHJkKCVk KSBsZCglZCkgZnJtKCV4KSBmbGdzKCV4KS5cbiIsCiAgICAgICAgICAgICAgICByZC0+aWQsIGxk LT5pZCwgZnJhbWUsIHJlYWRvbmx5KTsKICAgIH0KI2VuZGlmCgogICAgLyogRmFzdCBleGl0IGlm IHdlJ3JlIG5vdCBtYXBwaW5nIGFueXRoaW5nIHVzaW5nIGdyYW50IHRhYmxlcyAqLwogICAgaWYg KCBsZ3QtPm1hcF9jb3VudCA9PSAwICkKICAgICAgICByZXR1cm4gMDsKCiAgICBpZiAoIGdldF9k b21haW4ocmQpID09IDAgKQogICAgewogICAgICAgIERQUklOVEsoImdudHRhYl9jaGVja191bm1h cDogY291bGRuJ3QgZ2V0X2RvbWFpbiByZCglZClcbiIsIHJkLT5pZCk7CiAgICAgICAgcmV0dXJu IDA7CiAgICB9CgogICAgcmd0ID0gcmQtPmdyYW50X3RhYmxlOwoKICAgIGZvciAoIGhhbmRsZSA9 IDA7IGhhbmRsZSA8IGxndC0+bWFwdHJhY2tfbGltaXQ7IGhhbmRsZSsrICkKICAgIHsKICAgICAg ICBtYXAgPSAmbGd0LT5tYXB0cmFja1toYW5kbGVdOwoKCiAgICAgICAgLyogY3djMjI6IGlmIG11 bHRpcGxlIGdyYW50cyBvZiB0aGUgc2FtZSBmcmFtZSBhcmUgZGlzYWxsb3dlZCwKICAgICAgICAg KiB0aGVuIHRoZSByZWFkb25seSBjaGVjayBoZXJlIGNhbiBiZSBjaGFuZ2VkIHRvIGNhdXNlIGFu IGVhcmx5IGFib3J0CiAgICAgICAgICogaWYgd2UndmUgbWF0Y2hlZCBvbiBmcmFtZSwgYnV0IG5v dCBvbiB3cml0ZSBwZXJtaXNzaW9uLgogICAgICAgICAqLwogICAgICAgIGlmICggKCBtYXAtPnJl Zl9hbmRfZmxhZ3MgJiBNQVBUUkFDS19HTlRNQVBfTUFTSyApICYmCiAgICAgICAgICAgICAoIHJl YWRvbmx5ID8gMSA6ICghKG1hcC0+cmVmX2FuZF9mbGFncyAmIEdOVE1BUF9yZWFkb25seSkpKSkK ICAgICAgICB7CiAgICAgICAgICAgIHJlZiA9IChtYXAtPnJlZl9hbmRfZmxhZ3MgPj4gTUFQVFJB Q0tfUkVGX1NISUZUKTsKICAgICAgICAgICAgYWN0ID0gJnJndC0+YWN0aXZlW3JlZl07CgogICAg ICAgICAgICBwcmludGsoImN3YzolczogcHJlIHNwaW5fbG9ja1xuIiwgX19GVU5DVElPTl9fKTsK ICAgICAgICAgICAgc3Bpbl9sb2NrKCZyZ3QtPmxvY2spOwogICAgICAgICAgICBwcmludGsoImN3 YzolczogcG9zdCBzcGluX2xvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgICAgICAgICBpZiAo IGFjdC0+ZnJhbWUgIT0gZnJhbWUgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcGlu X3VubG9jaygmcmd0LT5sb2NrKTsKICAgICAgICAgICAgICAgIHByaW50aygiY3djOiVzOiBub3Qg ZnJhbWUgc3Bpbl91bmxvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmVmY291bnQgPSBhY3QtPnBpbiAmICgg cmVhZG9ubHkgPyBHTlRQSU5faHN0cl9tYXNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDogR05UUElOX2hzdHdfbWFzayApOwogICAgICAgICAgICBpZiAoIHJl ZmNvdW50ID09IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcGluX3VubG9jaygm cmd0LT5sb2NrKTsKICAgICAgICAgICAgICAgIHByaW50aygiY3djOiVzOiByZWZjb3VudCAwIHNw aW5fdW5sb2NrXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIGdvdGNoYSAqLwogICAgICAgICAgICBEUFJJTlRL KCJHcmFudCB1bnJlZiByZCglZCkgbGQoJWQpIGZybSgleCkgZmxncygleCkuXG4iLAogICAgICAg ICAgICAgICAgICAgIHJkLT5pZCwgbGQtPmlkLCBmcmFtZSwgcmVhZG9ubHkpOwoKICAgICAgICAg ICAgaWYgKCByZWFkb25seSApCiAgICAgICAgICAgICAgICBhY3QtPnBpbiAtPSBHTlRQSU5faHN0 cl9pbmM7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWN0 LT5waW4gLT0gR05UUElOX2hzdHdfaW5jOwoKICAgICAgICAgICAgICAgIC8qIGFueSBtb3JlIGdy YW50ZWQgd3JpdGFibGUgbWFwcGluZ3M/ICovCiAgICAgICAgICAgICAgICBpZiAoIChhY3QtPnBp biAmIChHTlRQSU5faHN0d19tYXNrfEdOVFBJTl9kZXZ3X21hc2spKSA9PSAwICkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjbGVhcl9iaXQoX0dURl93cml0aW5nLCAmcmd0 LT5zaGFyZWRbcmVmXS5mbGFncyk7CiAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2VfdHlwZSgm ZnJhbWVfdGFibGVbZnJhbWVdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAg ICAgICAgICAgaWYgKCBhY3QtPnBpbiA9PSAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgY2xlYXJfYml0KF9HVEZfcmVhZGluZywgJnJndC0+c2hhcmVkW3JlZl0uZmxhZ3MpOwogICAg ICAgICAgICAgICAgcHV0X3BhZ2UoJmZyYW1lX3RhYmxlW2ZyYW1lXSk7CiAgICAgICAgICAgIH0K ICAgICAgICAgICAgc3Bpbl91bmxvY2soJnJndC0+bG9jayk7CiAgICAgICAgICAgIHByaW50aygi Y3djOiVzOiBzcGluX3VubG9ja1xuIiwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgICAgIGNsZWFy X2JpdChHTlRNQVBfaG9zdF9tYXAsICZtYXAtPnJlZl9hbmRfZmxhZ3MpOwoKICAgICAgICAgICAg aWYgKCAhKG1hcC0+cmVmX2FuZF9mbGFncyAmIEdOVE1BUF9kZXZpY2VfbWFwKSApCiAgICAgICAg ICAgICAgICBwdXRfbWFwdHJhY2tfaGFuZGxlKGxndCwgaGFuZGxlKTsKCiAgICAgICAgICAgIGZv dW5kID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcHV0X2RvbWFp bihyZCk7CgogICAgcHJpbnRrKCJjd2M6JXM6IG91dCBmb3VuZDolZFxuIiwgX19GVU5DVElPTl9f LCBmb3VuZCk7CiAgICByZXR1cm4gZm91bmQ7Cn0KCmludCAKZ250dGFiX3ByZXBhcmVfZm9yX3Ry YW5zZmVyKAogICAgc3RydWN0IGRvbWFpbiAqcmQsIHN0cnVjdCBkb21haW4gKmxkLCBncmFudF9y ZWZfdCByZWYpCnsKICAgIGdyYW50X3RhYmxlX3QgKnJndDsKICAgIGdyYW50X2VudHJ5X3QgKnNo YTsKICAgIGRvbWlkX3QgICAgICAgIHNkb207CiAgICB1MTYgICAgICAgICAgICBzZmxhZ3M7CiAg ICB1MzIgICAgICAgICAgICBzY29tYm8sIHByZXZfc2NvbWJvOwogICAgaW50ICAgICAgICAgICAg cmV0cmllcyA9IDA7CiAgICB1bnNpZ25lZCBsb25nICB0YXJnZXRfcGZuOwoKICAgIERQUklOVEso ImdudHRhYl9wcmVwYXJlX2Zvcl90cmFuc2ZlciByZCglaHUpIGxkKCVodSkgcmVmKCVodSkuXG4i LAogICAgICAgICAgICByZC0+aWQsIGxkLT5pZCwgcmVmKTsKCiAgICBpZiAoIHVubGlrZWx5KChy Z3QgPSByZC0+Z3JhbnRfdGFibGUpID09IE5VTEwpIHx8CiAgICAgICAgIHVubGlrZWx5KHJlZiA+ PSBOUl9HUkFOVF9FTlRSSUVTKSApCiAgICB7CiAgICAgICAgRFBSSU5USygiRG9tICVkIGhhcyBu byBnLnQuLCBvciByZWYgaXMgYmFkICglZCkuXG4iLCByZC0+aWQsIHJlZik7CiAgICAgICAgcmV0 dXJuIDA7CiAgICB9CgogICAgcHJpbnRrKCJjd2M6JXM6IHByZSBzcGluX2xvY2tcbiIsIF9fRlVO Q1RJT05fXyk7CiAgICBzcGluX2xvY2soJnJndC0+bG9jayk7CiAgICBwcmludGsoImN3Yzolczog cG9zdCBzcGluX2xvY2tcbiIsIF9fRlVOQ1RJT05fXyk7CgogICAgc2hhID0gJnJndC0+c2hhcmVk W3JlZl07CiAgICAKICAgIHNmbGFncyA9IHNoYS0+ZmxhZ3M7CiAgICBzZG9tICAgPSBzaGEtPmRv bWlkOwoKICAgIHByaW50aygiY3djOiVzOiBwcmUgY21weGNoZyBsb29wXG4iLCBfX0ZVTkNUSU9O X18pOwogICAgZm9yICggOyA7ICkKICAgIHsKICAgICAgICB0YXJnZXRfcGZuID0gc2hhLT5mcmFt ZTsKCiAgICAgICAgaWYgKCB1bmxpa2VseSh0YXJnZXRfcGZuID49IG1heF9wYWdlICkgKQogICAg ICAgIHsKICAgICAgICAgICAgRFBSSU5USygiQmFkIHBmbiAoJXgpXG4iLCB0YXJnZXRfcGZuKTsK ICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCB1bmxpa2VseShz ZmxhZ3MgIT0gR1RGX2FjY2VwdF90cmFuc2ZlcikgfHwKICAgICAgICAgICAgIHVubGlrZWx5KHNk b20gIT0gbGQtPmlkKSApCiAgICAgICAgewogICAgICAgICAgICBEUFJJTlRLKCJCYWQgZmxhZ3Mg KCV4KSBvciBkb20gKCVkKS4gKE5CLiBleHBlY3RlZCBkb20gJWQpXG4iLAogICAgICAgICAgICAg ICAgICAgIHNmbGFncywgc2RvbSwgbGQtPmlkKTsKICAgICAgICAgICAgZ290byBmYWlsOwogICAg ICAgIH0KCiAgICAgICAgLyogTWVyZ2UgdHdvIDE2LWJpdCB2YWx1ZXMgaW50byBhIDMyLWJpdCBj b21iaW5lZCB1cGRhdGUuICovCiAgICAgICAgLyogTkIuIEVuZGlhbm5lc3MhICovCiAgICAgICAg cHJldl9zY29tYm8gPSBzY29tYm8gPSAoKHUzMilzZG9tIDw8IDE2KSB8ICh1MzIpc2ZsYWdzOwoK ICAgICAgICAvKiBOQi4gcHJldl9zY29tYm8gaXMgdXBkYXRlZCBpbiBwbGFjZSB0byBzZWVuIHZh bHVlLiAqLwogICAgICAgIGlmICggdW5saWtlbHkoY21weGNoZ191c2VyKCh1MzIgKikmc2hhLT5m bGFncywgcHJldl9zY29tYm8sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy ZXZfc2NvbWJvIHwgR1RGX3RyYW5zZmVyX2NvbW1pdHRlZCkpICkKICAgICAgICB7CiAgICAgICAg ICAgIERQUklOVEsoIkZhdWx0IHdoaWxlIG1vZGlmeWluZyBzaGFyZWQgZmxhZ3MgYW5kIGRvbWlk LlxuIik7CiAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICB9CgogICAgICAgIC8qIERpZCB0 aGUgY29tYmluZWQgdXBkYXRlIHdvcmsgKGRpZCB3ZSBzZWUgd2hhdCB3ZSBleHBlY3RlZD8pLiAq LwogICAgICAgIGlmICggbGlrZWx5KHByZXZfc2NvbWJvID09IHNjb21ibykgKQogICAgICAgICAg ICBicmVhazsKCiAgICAgICAgaWYgKCByZXRyaWVzKysgPT0gNCApCiAgICAgICAgewogICAgICAg ICAgICBEUFJJTlRLKCJTaGFyZWQgZ3JhbnQgZW50cnkgaXMgdW5zdGFibGUuXG4iKTsKICAgICAg ICAgICAgZ290byBmYWlsOwogICAgICAgIH0KCiAgICAgICAgLyogRGlkbid0IHNlZSB3aGF0IHdl IGV4cGVjdGVkLiBTcGxpdCBvdXQgdGhlIHNlZW4gZmxhZ3MgJiBkb20uICovCiAgICAgICAgLyog TkIuIEVuZGlhbm5lc3MhICovCiAgICAgICAgc2ZsYWdzID0gKHUxNilwcmV2X3Njb21ibzsKICAg ICAgICBzZG9tICAgPSAodTE2KShwcmV2X3Njb21ibyA+PiAxNik7CiAgICB9CgogICAgc3Bpbl91 bmxvY2soJnJndC0+bG9jayk7CiAgICBwcmludGsoImN3Yzolczogb3V0IHNwaW5fdW5sb2NrIDFc biIsIF9fRlVOQ1RJT05fXyk7CiAgICByZXR1cm4gMTsKCiBmYWlsOgogICAgc3Bpbl91bmxvY2so JnJndC0+bG9jayk7CiAgICBwcmludGsoImN3Yzolczogb3V0IHNwaW5fdW5sb2NrIDBcbiIsIF9f RlVOQ1RJT05fXyk7CiAgICByZXR1cm4gMDsKfQoKdm9pZCAKZ250dGFiX25vdGlmeV90cmFuc2Zl cigKICAgIHN0cnVjdCBkb21haW4gKnJkLCBzdHJ1Y3QgZG9tYWluICpsZCwgZ3JhbnRfcmVmX3Qg cmVmLCB1bnNpZ25lZCBsb25nIGZyYW1lKQp7CiAgICBncmFudF9lbnRyeV90ICAqc2hhOwogICAg dW5zaWduZWQgbG9uZyAgIHBmbjsKCiAgICBEUFJJTlRLKCJnbnR0YWJfbm90aWZ5X3RyYW5zZmVy IHJkKCVodSkgbGQoJWh1KSByZWYoJWh1KS5cbiIsCiAgICAgICAgICAgIHJkLT5pZCwgbGQtPmlk LCByZWYpOwoKICAgIHNoYSA9ICZyZC0+Z3JhbnRfdGFibGUtPnNoYXJlZFtyZWZdOwoKICAgIHNw aW5fbG9jaygmcmQtPmdyYW50X3RhYmxlLT5sb2NrKTsKCiAgICBwZm4gPSBzaGEtPmZyYW1lOwoK ICAgIGlmICggdW5saWtlbHkocGZuID49IG1heF9wYWdlICkgKQogICAgICAgIERQUklOVEsoIkJh ZCBwZm4gKCV4KVxuIiwgcGZuKTsKICAgIGVsc2UKICAgIHsKICAgICAgICBtYWNoaW5lX3RvX3Bo eXNfbWFwcGluZ1tmcmFtZV0gPSBwZm47CgogICAgICAgIGlmICggdW5saWtlbHkoc2hhZG93X21v ZGVfbG9nX2RpcnR5KGxkKSkpCiAgICAgICAgICAgICBtYXJrX2RpcnR5KGxkLCBmcmFtZSk7Cgog ICAgICAgIGlmIChzaGFkb3dfbW9kZV90cmFuc2xhdGUobGQpKQogICAgICAgICAgICBfX3BoeXNf dG9fbWFjaGluZV9tYXBwaW5nW3Bmbl0gPSBmcmFtZTsKICAgIH0KICAgIHNoYS0+ZnJhbWUgPSBf X21mbl90b19ncGZuKHJkLCBmcmFtZSk7CiAgICBzaGEtPmRvbWlkID0gcmQtPmlkOwogICAgd21i KCk7CiAgICBzaGEtPmZsYWdzID0gKCBHVEZfYWNjZXB0X3RyYW5zZmVyIHwgR1RGX3RyYW5zZmVy X2NvbXBsZXRlZCApOwoKICAgIHNwaW5fdW5sb2NrKCZyZC0+Z3JhbnRfdGFibGUtPmxvY2spOwoK ICAgIHJldHVybjsKfQoKaW50IApncmFudF90YWJsZV9jcmVhdGUoCiAgICBzdHJ1Y3QgZG9tYWlu ICpkKQp7CiAgICBncmFudF90YWJsZV90ICp0OwogICAgaW50ICAgICAgICAgICAgaTsKCiAgICBp ZiAoICh0ID0geG1hbGxvYyhncmFudF90YWJsZV90KSkgPT0gTlVMTCApCiAgICAgICAgZ290byBu b19tZW07CgogICAgLyogU2ltcGxlIHN0dWZmLiAqLwogICAgbWVtc2V0KHQsIDAsIHNpemVvZigq dCkpOwogICAgc3Bpbl9sb2NrX2luaXQoJnQtPmxvY2spOwoKICAgIC8qIEFjdGl2ZSBncmFudCB0 YWJsZS4gKi8KICAgIGlmICggKHQtPmFjdGl2ZSA9IHhtYWxsb2NfYXJyYXkoYWN0aXZlX2dyYW50 X2VudHJ5X3QsIE5SX0dSQU5UX0VOVFJJRVMpKQogICAgICAgICA9PSBOVUxMICkKICAgICAgICBn b3RvIG5vX21lbTsKICAgIG1lbXNldCh0LT5hY3RpdmUsIDAsIHNpemVvZihhY3RpdmVfZ3JhbnRf ZW50cnlfdCkgKiBOUl9HUkFOVF9FTlRSSUVTKTsKCiAgICAvKiBUcmFja2luZyBvZiBtYXBwZWQg Zm9yZWlnbiBmcmFtZXMgdGFibGUgKi8KICAgIGlmICggKHQtPm1hcHRyYWNrID0gKHZvaWQgKilh bGxvY194ZW5oZWFwX3BhZ2UoKSkgPT0gTlVMTCApCiAgICAgICAgZ290byBub19tZW07CiAgICB0 LT5tYXB0cmFja19vcmRlciA9IDA7CiAgICB0LT5tYXB0cmFja19saW1pdCA9IFBBR0VfU0laRSAv IHNpemVvZihncmFudF9tYXBwaW5nX3QpOwogICAgbWVtc2V0KHQtPm1hcHRyYWNrLCAwLCBQQUdF X1NJWkUpOwogICAgZm9yICggaSA9IDA7IGkgPCB0LT5tYXB0cmFja19saW1pdDsgaSsrICkKICAg ICAgICB0LT5tYXB0cmFja1tpXS5yZWZfYW5kX2ZsYWdzID0gKGkrMSkgPDwgTUFQVFJBQ0tfUkVG X1NISUZUOwoKICAgIC8qIFNoYXJlZCBncmFudCB0YWJsZS4gKi8KICAgIGlmICggKHQtPnNoYXJl ZCA9ICh2b2lkICopYWxsb2NfeGVuaGVhcF9wYWdlcyhPUkRFUl9HUkFOVF9GUkFNRVMpKSA9PSBO VUxMICkKICAgICAgICBnb3RvIG5vX21lbTsKICAgIG1lbXNldCh0LT5zaGFyZWQsIDAsIE5SX0dS QU5UX0ZSQU1FUyAqIFBBR0VfU0laRSk7CgogICAgZm9yICggaSA9IDA7IGkgPCBOUl9HUkFOVF9G UkFNRVM7IGkrKyApCiAgICB7CiAgICAgICAgU0hBUkVfUEZOX1dJVEhfRE9NQUlOKHZpcnRfdG9f cGFnZSgoY2hhciAqKSh0LT5zaGFyZWQpKyhpKlBBR0VfU0laRSkpLCBkKTsKICAgICAgICBtYWNo aW5lX3RvX3BoeXNfbWFwcGluZ1sgKHZpcnRfdG9fcGh5cygoY2hhciopKHQtPnNoYXJlZCkrKGkq UEFHRV9TSVpFKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gUEFHRV9TSElG VCkgXSA9IElOVkFMSURfTTJQX0VOVFJZOwogICAgfQoKICAgIC8qIE9rYXksIGluc3RhbGwgdGhl IHN0cnVjdHVyZS4gKi8KICAgIHdtYigpOyAvKiBhdm9pZCByYWNlcyB3aXRoIGxvY2stZnJlZSBh Y2Nlc3MgdG8gZC0+Z3JhbnRfdGFibGUgKi8KICAgIGQtPmdyYW50X3RhYmxlID0gdDsKICAgIHJl dHVybiAwOwoKIG5vX21lbToKICAgIGlmICggdCAhPSBOVUxMICkKICAgIHsKICAgICAgICBpZiAo IHQtPmFjdGl2ZSAhPSBOVUxMICkKICAgICAgICAgICAgeGZyZWUodC0+YWN0aXZlKTsKICAgICAg ICBpZiAoIHQtPm1hcHRyYWNrICE9IE5VTEwgKQogICAgICAgICAgICBmcmVlX3hlbmhlYXBfcGFn ZSgodW5zaWduZWQgbG9uZyl0LT5tYXB0cmFjayk7CiAgICAgICAgeGZyZWUodCk7CiAgICB9CiAg ICByZXR1cm4gLUVOT01FTTsKfQoKdm9pZApnbnR0YWJfcmVsZWFzZV9kZXZfbWFwcGluZ3MoZ3Jh bnRfdGFibGVfdCAqZ3QpCnsKICAgIGdyYW50X21hcHBpbmdfdCAgICAgICAgKm1hcDsKICAgIGRv bWlkX3QgICAgICAgICAgICAgICAgIGRvbTsKICAgIGdyYW50X3JlZl90ICAgICAgICAgICAgIHJl ZjsKICAgIHUxNiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTsKICAgIHN0cnVjdCBkb21haW4g ICAgICAgICAgKmxkLCAqcmQ7CiAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBmcmFtZTsKICAg IGFjdGl2ZV9ncmFudF9lbnRyeV90ICAgKmFjdDsKICAgIGdyYW50X2VudHJ5X3QgICAgICAgICAg KnNoYTsKCiAgICBsZCA9IGN1cnJlbnQtPmRvbWFpbjsKCiAgICBmb3IgKCBoYW5kbGUgPSAwOyBo YW5kbGUgPCBndC0+bWFwdHJhY2tfbGltaXQ7IGhhbmRsZSsrICkKICAgIHsKICAgICAgICBtYXAg PSAmZ3QtPm1hcHRyYWNrW2hhbmRsZV07CgogICAgICAgIGlmICggbWFwLT5yZWZfYW5kX2ZsYWdz ICYgR05UTUFQX2RldmljZV9tYXAgKQogICAgICAgIHsKICAgICAgICAgICAgZG9tID0gbWFwLT5k b21pZDsKICAgICAgICAgICAgcmVmID0gbWFwLT5yZWZfYW5kX2ZsYWdzID4+IE1BUFRSQUNLX1JF Rl9TSElGVDsKCiAgICAgICAgICAgIERQUklOVEsoIkdyYW50IHJlbGVhc2UgKCVodSkgcmVmOigl aHUpIGZsYWdzOigleCkgZG9tOiglaHUpXG4iLAogICAgICAgICAgICAgICAgICAgIGhhbmRsZSwg cmVmLAogICAgICAgICAgICAgICAgICAgIG1hcC0+cmVmX2FuZF9mbGFncyAmIE1BUFRSQUNLX0dO VE1BUF9NQVNLLCBkb20pOwoKICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgocmQgPSBmaW5kX2Rv bWFpbl9ieV9pZChkb20pKSA9PSBOVUxMKSB8fAogICAgICAgICAgICAgICAgIHVubGlrZWx5KGxk ID09IHJkKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICggcmQgIT0gTlVMTCAp CiAgICAgICAgICAgICAgICAgICAgcHV0X2RvbWFpbihyZCk7CgogICAgICAgICAgICAgICAgcHJp bnRrKEtFUk5fV0FSTklORyAiR3JhbnQgcmVsZWFzZTogQ291bGQgbm90IGZpbmQgZG9tYWluICVk XG4iLCBkb20pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIGFjdCA9ICZyZC0+Z3JhbnRfdGFibGUtPmFjdGl2ZVtyZWZdOwogICAgICAgICAgICBz aGEgPSAmcmQtPmdyYW50X3RhYmxlLT5zaGFyZWRbcmVmXTsKCiAgICAgICAgICAgIHNwaW5fbG9j aygmcmQtPmdyYW50X3RhYmxlLT5sb2NrKTsKCiAgICAgICAgICAgIGlmICggYWN0LT5waW4gJiAo R05UUElOX2RldndfbWFzayB8IEdOVFBJTl9kZXZyX21hc2spICkKICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgZnJhbWUgPSBhY3QtPmZyYW1lOwoKICAgICAgICAgICAgICAgIGlmICggKCAo YWN0LT5waW4gJiBHTlRQSU5faHN0d19tYXNrKSA9PSAwICkgJiYKICAgICAgICAgICAgICAgICAg ICAgKCAoYWN0LT5waW4gJiBHTlRQSU5fZGV2d19tYXNrKSA+ICAwICkgKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgIGNsZWFyX2JpdChfR1RGX3dyaXRpbmcsICZzaGEtPmZs YWdzKTsKICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKCZmcmFtZV90YWJsZVtmcmFt ZV0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFjdC0+cGluICY9IH4oR05U UElOX2RldndfbWFzayB8IEdOVFBJTl9kZXZyX21hc2spOwoKICAgICAgICAgICAgICAgIGlmICgg YWN0LT5waW4gPT0gMCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2xl YXJfYml0KF9HVEZfcmVhZGluZywgJnNoYS0+ZmxhZ3MpOwogICAgICAgICAgICAgICAgICAgIG1h cC0+cmVmX2FuZF9mbGFncyA9IDA7CiAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UoJmZyYW1l X3RhYmxlW2ZyYW1lXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgbWFwLT5yZWZfYW5kX2ZsYWdzICY9IH5HTlRNQVBfZGV2aWNlX21h cDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3Bpbl91bmxvY2soJnJkLT5ncmFudF90YWJs ZS0+bG9jayk7CgogICAgICAgICAgICBwdXRfZG9tYWluKHJkKTsKICAgICAgICB9CiAgICB9Cn0K Cgp2b2lkCmdyYW50X3RhYmxlX2Rlc3Ryb3koCiAgICBzdHJ1Y3QgZG9tYWluICpkKQp7CiAgICBn cmFudF90YWJsZV90ICp0OwoKICAgIGlmICggKHQgPSBkLT5ncmFudF90YWJsZSkgIT0gTlVMTCAp CiAgICB7CiAgICAgICAgLyogRnJlZSBtZW1vcnkgcmVsYXRpbmcgdG8gdGhpcyBncmFudCB0YWJs ZS4gKi8KICAgICAgICBkLT5ncmFudF90YWJsZSA9IE5VTEw7CiAgICAgICAgZnJlZV94ZW5oZWFw X3BhZ2VzKCh1bnNpZ25lZCBsb25nKXQtPnNoYXJlZCwgT1JERVJfR1JBTlRfRlJBTUVTKTsKICAg ICAgICBmcmVlX3hlbmhlYXBfcGFnZSgodW5zaWduZWQgbG9uZyl0LT5tYXB0cmFjayk7IC8vY3dj MjIKICAgICAgICB4ZnJlZSh0LT5hY3RpdmUpOwogICAgICAgIHhmcmVlKHQpOwogICAgfQp9Cgp2 b2lkCmdyYW50X3RhYmxlX2luaXQoCiAgICB2b2lkKQp7CiAgICAvKiBOb3RoaW5nLiAqLwogICAg RFBSSU5USygiR3JhbnQgdGFibGUgaW5pdFxuIik7Cn0KCi8qCiAqIExvY2FsIHZhcmlhYmxlczoK ICogbW9kZTogQwogKiBjLXNldC1zdHlsZTogIkJTRCIKICogYy1iYXNpYy1vZmZzZXQ6IDQKICog dGFiLXdpZHRoOiA0CiAqIGluZGVudC10YWJzLW1vZGU6IG5pbAogKiBFbmQ6CiAqLwo= ------=_Part_20398_14467821.1113842330305 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------=_Part_20398_14467821.1113842330305--