From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Leonard Subject: [PATCH ARM v5 19/20] mini-os: initial ARM support Date: Thu, 26 Jun 2014 12:28:36 +0100 Message-ID: <1403782117-15125-20-git-send-email-talex5@gmail.com> References: <1403782117-15125-1-git-send-email-talex5@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1X07rn-0004l1-If for xen-devel@lists.xenproject.org; Thu, 26 Jun 2014 11:29:24 +0000 Received: by mail-wg0-f66.google.com with SMTP id k14so991622wgh.9 for ; Thu, 26 Jun 2014 04:29:20 -0700 (PDT) In-Reply-To: <1403782117-15125-1-git-send-email-talex5@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Thomas Leonard , Dave.Scott@eu.citrix.com, anil@recoil.org, stefano.stabellini@eu.citrix.com, samuel.thibault@ens-lyon.org List-Id: xen-devel@lists.xenproject.org T24gQVJNLCBNaW5pLU9TIHdpbGwgYm9vdCBhbmQgZGlzcGxheSBzb21lIG91dHB1dCBvbiB0aGUg Y29uc29sZS4KVGVzdGVkIHdpdGg6CgptYWtlIFhFTl9UQVJHRVRfQVJDSD1hcm0zMiBDUk9TU19D T01QSUxFPWFybS1saW51eC1nbnVlYWJpaGYtIFwKCUNPTkZJR19URVNUPXkgQ09ORklHX1NUQVJU X05FVFdPUks9biBDT05GSUdfQkxLRlJPTlQ9biBcCglDT05GSUdfTkVURlJPTlQ9biBDT05GSUdf RkJGUk9OVD1uIENPTkZJR19LQkRGUk9OVD1uIFwKCUNPTkZJR19DT05TRlJPTlQ9biBDT05GSUdf WEM9biAtajQKClNpZ25lZC1vZmYtYnk6IEthcmltIEFsbGFoIEFobWVkIDxrYXJpbS5hbGxhaC5h aG1lZEBnbWFpbC5jb20+Clt0YWxleDVAZ21haWwuY29tOiBtYWRlIHg4Nl82NCBzdXBwb3J0IHdv cmsgYWdhaW5dClt0YWxleDVAZ21haWwuY29tOiBzcGxpdCBpbnRvIG11bHRpcGxlIHBhdGNoZXNd Clt0YWxleDVAZ21haWwuY29tOiByZS1lbmFibGVkIGZvcmNlX2V2dGNobl9jYWxsYmFja10KW3Rh bGV4NUBnbWFpbC5jb206IGVuYWJsZSByZWd1bGFyIGNvbnNvbGVdClt0YWxleDVAZ21haWwuY29t OiBmaXhlZCBpbml0aWFsaXNhdGlvbiBjb2RlOgotIENvbmZpZ3VyZSB3cml0ZS1iYWNrIGNhY2hp bmcgaW4gcGFnZSB0YWJsZS4gVGhpcyBpcyBuZWVkZWQgZm9yCiAgcmVsaWFibGUgaHlwZXJjYWxs cyB0byBYZW4gKHRoYW5rcyB0byBKdWxpZW4gR3JhbGwpLgotIFVzZSAiY2xpZW50IG1vZGUiIGZv ciBhY2Nlc3MgY29udHJvbCAoZG9tYWlucyBhcmUgZGVwcmVjYXRlZCwKICBhY2NvcmRpbmcgdG8g QVJNIENvcnRleC1BIFNlcmllcyBQcm9ncmFtbWVy4oCZcyBHdWlkZSB2ZXJzaW9uIDQuMCwKICBz ZWN0aW9uIDkuNi40KS4KLSBFbmFibGUgbW9yZSBTQ1RMUiBmZWF0dXJlcyAoaWNhY2hlLCBicmFu Y2ggcHJlZGljdGlvbildClt0YWxleDVAZ21haWwuY29tOiB1c2UgVmlydHVhbCBDb3VudCByZWdp c3RlciBmb3IgbW9ub3RvbmljIHRpbWVdClt0YWxleDVAZ21haWwuY29tOiBmaXhlZCBIWVBFUlZJ U09SX3NodXRkb3duXQpbdGFsZXg1QGdtYWlsLmNvbTogZ2V0IHhlbnN0b3JlIGRldGFpbHMgZnJv bSBoeXBlcnZpc29yXQpbdGFsZXg1QGdtYWlsLmNvbTogdXNlIEdDQyBpbXBsZW1lbnRhdGlvbiBv ZiBkaXZpc2lvbl0KW3RhbGV4NUBnbWFpbC5jb206IGNsZWFuZWQgdXAgaW50ZXJydXB0IGhhbmRs ZXJzIGFuZCB0aHJlYWRpbmddClt0YWxleDVAZ21haWwuY29tOiBjYWxsIGV4aXRfdGhyZWFkIHdo ZW4gYSB0aHJlYWQgcmV0dXJuc10KW3RhbGV4NUBnbWFpbC5jb206IGltcGxlbWVudGVkIGJsb2Nr X2RvbWFpbiBmb3IgQVJNXQpbdGFsZXg1QGdtYWlsLmNvbTogZml4ZWQgaGFuZyB3aGVuIGVuYWJs aW5nIGludGVycnVwdHNdClt0YWxleDVAZ21haWwuY29tOiBhZGRlZCAtbWFyY2g9YXJtdjctYSB0 byBmbGFnc10KW3RhbGV4NUBnbWFpbC5jb206IENMUkVYIGFmdGVyIGhhbmRsaW5nIElSUXNdClt0 YWxleDVAZ21haWwuY29tOiB1bmJpbmQgZGVidWcgcG9ydCBhdCBzaHV0ZG93bl0KW3RhbGV4NUBn bWFpbC5jb206IGFsbG93IHVuYWxpZ25lZCBhY2Nlc3Nlc10KW3RhbGV4NUBnbWFpbC5jb206IGZp eCB6SW1hZ2UgaGVhZGVyIGZvciBYU0EtOTVdClt0YWxleDVAZ21haWwuY29tOiBnZXQgUkFNIGJh c2UgYW5kIHNpemUgZnJvbSB0aGUgRkRUXQpbdGFsZXg1QGdtYWlsLmNvbTogZ2V0IEdJQyBhZGRy ZXNzZXMgZnJvbSBGRFRdClt0YWxleDVAZ21haWwuY29tOiBhZGRlZCBBUk0gZ3JhbnQgdGFibGUg aW5pdGlhbGlzYXRpb25dClt0YWxleDVAZ21haWwuY29tOiBhZGRlZCBtaXNzaW5nIGNvcHlyaWdo dCBoZWFkZXIgdG8gaHlwZXJjYWxsczMyLlNdClt0YWxleDVAZ21haWwuY29tOiBtb3ZlZCBHSUMg ZHJpdmVyIHRvIGFybSBkaXJlY3RvcnldClt0YWxleDVAZ21haWwuY29tOiBmaXhlcyBzdWdnZXN0 ZWQgYnkgSnVsaWVuIEdyYWxsOgotIFJlbW92ZWQgdW5uZWNlc3NhcnkgaXNiLgotIFJlbmFtZWQg R0lDRF9QUklPUklUWSB0byBHSUNEX0lQUklPUklUWVIuCi0gQ2hhbmdlIElSUSBudW1iZXIgdHlw ZSBmcm9tIHVuc2lnbmVkIGNoYXIgdG8gaW50LgotIEFkZGVkIHZvbGF0aWxlIHRvIHtzZXQsY2xl YXJ9X2JpdF9ub25fYXRvbWljLgotIEZpeGVkIHNvbWUgY29tbWVudHMuCi0gQ2hlY2sgY29tcGF0 aWJsZSBwcm9wZXJ0aWVzIGluIERUQi5dClt0YWxleDVAZ21haWwuY29tOiBtYWRlIGltYWdlIHJl bG9jYXRhYmxlXQpbdGFsZXg1QGdtYWlsLmNvbTogYWRkZWQgbWZuX3RvX3BmbiBhbmQgcGZuX3Rv X21mbl0KU2lnbmVkLW9mZi1ieTogVGhvbWFzIExlb25hcmQgPHRhbGV4NUBnbWFpbC5jb20+Ci0t LQogZXh0cmFzL21pbmktb3MvQVJNLVRPRE8udHh0ICAgICAgICAgICAgICB8ICAgNiArCiBleHRy YXMvbWluaS1vcy9Db25maWcubWsgICAgICAgICAgICAgICAgIHwgICAyICsKIGV4dHJhcy9taW5p LW9zL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgIDkgKysKIGV4dHJhcy9taW5pLW9zL2Fy Y2gvYXJtL01ha2VmaWxlICAgICAgICAgfCAgMzIgKysrKwogZXh0cmFzL21pbmktb3MvYXJjaC9h cm0vYXJjaC5tayAgICAgICAgICB8ICAgNyArCiBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9hcm0z Mi5TICAgICAgICAgIHwgMjY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGV4dHJh cy9taW5pLW9zL2FyY2gvYXJtL2V2ZW50cy5jICAgICAgICAgfCAgMzAgKysrKwogZXh0cmFzL21p bmktb3MvYXJjaC9hcm0vZ2ljLmMgICAgICAgICAgICB8IDIyMiArKysrKysrKysrKysrKysrKysr KysrKysrKwogZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vaHlwZXJjYWxsczMyLlMgICB8ICA3NSAr KysrKysrKysKIGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL21pbmlvcy1hcm0zMi5sZHMgfCAgNzUg KysrKysrKysrCiBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9tbS5jICAgICAgICAgICAgIHwgMTM0 ICsrKysrKysrKysrKysrKysKIGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3NjaGVkLmMgICAgICAg ICAgfCAgMzcgKysrKysKIGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3NldHVwLmMgICAgICAgICAg fCAxMTYgKysrKysrKysrKysrKysKIGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3RpbWUuYyAgICAg ICAgICAgfCAyMDIgKysrKysrKysrKysrKysrKysrKysrKysKIGV4dHJhcy9taW5pLW9zL2tlcm5l bC5jICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDEyMTQgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dHJhcy9taW5p LW9zL0FSTS1UT0RPLnR4dAogY3JlYXRlIG1vZGUgMTAwNzU1IGV4dHJhcy9taW5pLW9zL2FyY2gv YXJtL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0cmFzL21pbmktb3MvYXJjaC9hcm0v YXJjaC5tawogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2FybTMy LlMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9ldmVudHMuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2dpYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vaHlwZXJjYWxsczMyLlMKIGNyZWF0 ZSBtb2RlIDEwMDc1NSBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9taW5pb3MtYXJtMzIubGRzCiBj cmVhdGUgbW9kZSAxMDA2NDQgZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vbW0uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGV4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3NjaGVkLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBleHRyYXMvbWluaS1vcy9hcmNoL2FybS9zZXR1cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vdGltZS5jCgpkaWZmIC0tZ2l0IGEvZXh0cmFzL21pbmkt b3MvQVJNLVRPRE8udHh0IGIvZXh0cmFzL21pbmktb3MvQVJNLVRPRE8udHh0Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWVlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9leHRy YXMvbWluaS1vcy9BUk0tVE9ETy50eHQKQEAgLTAsMCArMSw2IEBACisqIHN1cHBvcnQgYWJvcnQg ZXhjZXB0aW9uIGhhbmRsaW5nICggYW5kIG90aGVycyApCisqIGdpYyByZXF1ZXN0X2lycSBpbXBs ZW1lbnRhdGlvbiwgY3VycmVudGx5IGFsbCBJUlFzIGFsbCBoYXJkY29kZWQgaW4gZ2ljIGlycSBo YW5kbGVyLgorKiBiaW5kXyoKKyogYWRkIG11bHRpcGxlIGNwdSBzdXBwb3J0ICg/KQorKiBtYXBf ZnJhbWVzCisqIG1ha2Ugc3VyZSB0aGF0IHdhbGxjbG9jayBpcyBmdW5jdGlvbmluZyBwcm9wZXJs eQpkaWZmIC0tZ2l0IGEvZXh0cmFzL21pbmktb3MvQ29uZmlnLm1rIGIvZXh0cmFzL21pbmktb3Mv Q29uZmlnLm1rCmluZGV4IGQ2MTg3N2IuLjRlY2RlNTQgMTAwNjQ0Ci0tLSBhL2V4dHJhcy9taW5p LW9zL0NvbmZpZy5taworKysgYi9leHRyYXMvbWluaS1vcy9Db25maWcubWsKQEAgLTEyLDYgKzEy LDggQEAgZXhwb3J0IFhFTl9JTlRFUkZBQ0VfVkVSU0lPTgogIyBJZiBub3QgeDg2IHRoZW4gdXNl ICQoWEVOX1RBUkdFVF9BUkNIKQogaWZlcSAoJChmaW5kc3RyaW5nIHg4Nl8sJChYRU5fVEFSR0VU X0FSQ0gpKSx4ODZfKQogVEFSR0VUX0FSQ0hfRkFNID0geDg2CitlbHNlIGlmZXEgKCQoZmluZHN0 cmluZyBhcm0sJChYRU5fVEFSR0VUX0FSQ0gpKSxhcm0pCitUQVJHRVRfQVJDSF9GQU0gPSBhcm0K IGVsc2UKIFRBUkdFVF9BUkNIX0ZBTSA9ICQoWEVOX1RBUkdFVF9BUkNIKQogZW5kaWYKZGlmZiAt LWdpdCBhL2V4dHJhcy9taW5pLW9zL01ha2VmaWxlIGIvZXh0cmFzL21pbmktb3MvTWFrZWZpbGUK aW5kZXggOTMxY2QwNS4uMDFkOGFmMCAxMDA2NDQKLS0tIGEvZXh0cmFzL21pbmktb3MvTWFrZWZp bGUKKysrIGIvZXh0cmFzL21pbmktb3MvTWFrZWZpbGUKQEAgLTc4LDYgKzc4LDkgQEAgVEFSR0VU IDo9IG1pbmktb3MKIFNVQkRJUlMgOj0gbGliIHhlbmJ1cyBjb25zb2xlCiAKIGlmZXEgKCQoWEVO X1RBUkdFVF9BUkNIKSxhcm0zMikKKyMgTmVlZCBsaWJnY2MuYSBmb3IgZGl2aXNpb24gaGVscGVy cworTERMSUJTICs9IGAkKENDKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWAKKwogIyBEZXZpY2Ug dHJlZSBzdXBwb3J0CiBTVUJESVJTICs9IGxpYi9mZHQKIHNyYy15ICs9IGxpYi9mZHQvZmR0LmMK QEAgLTEwOSw3ICsxMTIsOSBAQCBzcmMteSArPSBzY2hlZC5jCiBzcmMtJChDT05GSUdfVEVTVCkg Kz0gdGVzdC5jCiAKIHNyYy15ICs9IGxpYi9jdHlwZS5jCitpZm5lcSAoJChYRU5fVEFSR0VUX0FS Q0gpLGFybTMyKQogc3JjLXkgKz0gbGliL21hdGguYworZW5kaWYKIHNyYy15ICs9IGxpYi9wcmlu dGYuYwogc3JjLXkgKz0gbGliL3N0YWNrX2Noa19mYWlsLmMKIHNyYy15ICs9IGxpYi9zdHJpbmcu YwpAQCAtMjAzLDcgKzIwOCwxMSBAQCAkKE9CSl9ESVIpLyQoVEFSR0VUKTogJChPQkpTKSAkKEFQ UF9PKSBhcmNoX2xpYgogCSQoTEQpIC1yICQoTERGTEFHUykgJChIRUFEX09CSikgJChBUFBfTykg JChPQkpTKSAkKExEQVJDSExJQikgJChMRExJQlMpIC1vICRALm8KIAkkKE9CSkNPUFkpIC13IC1H ICQoR0xPQkFMX1BSRUZJWCkqIC1HIF9zdGFydCAkQC5vICRALm8KIAkkKExEKSAkKExERkxBR1Mp ICQoTERGTEFHU19GSU5BTCkgJEAubyAkKEVYVFJBX09CSlMpIC1vICRACitpZmVxICgkKFhFTl9U QVJHRVRfQVJDSCksYXJtMzIpCisJJChPQkpDT1BZKSAtTyBiaW5hcnkgJEAgJEAuaW1nCitlbHNl CiAJZ3ppcCAtZiAtOSAtYyAkQCA+JEAuZ3oKK2VuZGlmCiAKIC5QSE9OWTogY2xlYW4gYXJjaF9j bGVhbgogCmRpZmYgLS1naXQgYS9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9NYWtlZmlsZSBiL2V4 dHJhcy9taW5pLW9zL2FyY2gvYXJtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAuLjhiNzg2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9leHRyYXMvbWluaS1vcy9hcmNo L2FybS9NYWtlZmlsZQpAQCAtMCwwICsxLDMyIEBACisjCisjIEFSTSBhcmNoaXRlY3R1cmUgc3Bl Y2lmaWMgbWFrZWZpbGVzLgorIworCitYRU5fUk9PVCA9ICQoQ1VSRElSKS8uLi8uLi8uLi8uLgor aW5jbHVkZSAkKFhFTl9ST09UKS9Db25maWcubWsKK2luY2x1ZGUgLi4vLi4vQ29uZmlnLm1rCisK KyMgaW5jbHVkZSBhcmNoLm1rIGhhcyB0byBiZSBiZWZvcmUgbWluaW9zLm1rIQorCitpbmNsdWRl IGFyY2gubWsKK2luY2x1ZGUgLi4vLi4vbWluaW9zLm1rCisKKyMgU291cmNlcyBoZXJlIGFyZSBh bGwgKi5jICh3aXRob3V0ICQoWEVOX1RBUkdFVF9BUkNIKS5TKQorIyBUaGlzIGlzIGhhbmRsZWQg aW4gJChIRUFEX0FSQ0hfT0JKKQorQVJDSF9TUkNTIDo9ICQod2lsZGNhcmQgKi5jKQorCisjIFRo ZSBvYmplY3RzIGJ1aWx0IGZyb20gdGhlIHNvdXJjZXMuCitBUkNIX09CSlMgOj0gJChwYXRzdWJz dCAlLmMsJChPQkpfRElSKS8lLm8sJChBUkNIX1NSQ1MpKQorCitBUkNIX09CSlMgKz0gaHlwZXJj YWxsczMyLm8KKworYWxsOiAkKE9CSl9ESVIpLyQoQVJDSF9MSUIpCisKKyMgJChIRUFEX0FSQ0hf T0JKKSBpcyBvbmx5IGJ1aWx0IGhlcmUsIG5lZWRlZCBvbiBsaW5raW5nCisjIGluIC4uLy4uL01h a2VmaWxlLgorJChPQkpfRElSKS8kKEFSQ0hfTElCKTogJChBUkNIX09CSlMpICQoT0JKX0RJUikv JChIRUFEX0FSQ0hfT0JKKQorCSQoQVIpIHJ2ICQoT0JKX0RJUikvJChBUkNIX0xJQikgJChBUkNI X09CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoT0JKX0RJUikvJChBUkNIX0xJQikgJChBUkNIX09C SlMpICQoT0JKX0RJUikvJChIRUFEX0FSQ0hfT0JKKQorCmRpZmYgLS1naXQgYS9leHRyYXMvbWlu aS1vcy9hcmNoL2FybS9hcmNoLm1rIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vYXJjaC5tawpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjIwZDk5Ci0tLSAvZGV2L251bGwK KysrIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vYXJjaC5tawpAQCAtMCwwICsxLDcgQEAKK2lm ZXEgKCQoWEVOX1RBUkdFVF9BUkNIKSxhcm0zMikKK0RFRl9BU0ZMQUdTICs9IC1tYXJjaD1hcm12 Ny1hCitBUkNIX0NGTEFHUyAgOj0gLW1hcmNoPWFybXY3LWEgLW1hcm0gLWZtcy1leHRlbnNpb25z IC1EX19hcm1fXyAtRFhFTl9IQVZFX1BWX0dVRVNUX0VOVFJZICMtRENQVV9FWENMVVNJVkVfTERT VAorRVhUUkFfSU5DICs9ICQoVEFSR0VUX0FSQ0hfRkFNKS8kKFhFTl9UQVJHRVRfQVJDSCkKK0VY VFJBX1NSQyArPSBhcmNoLyQoRVhUUkFfSU5DKQorZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZXh0cmFz L21pbmktb3MvYXJjaC9hcm0vYXJtMzIuUyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2FybTMy LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3NGVkOQotLS0gL2Rldi9u dWxsCisrKyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2FybTMyLlMKQEAgLTAsMCArMSwyNjYg QEAKK0AgVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiBSQU0gKGFueSB2YWx1ZSB3aWxs IGRvLCBidXQgaXQgbXVzdCBiZQorQCBzZWN0aW9uLWFsaWduZWQpLiBVcGRhdGUgdGhlIGxkcyBz Y3JpcHQgaWYgY2hhbmdlZC4KKyNkZWZpbmUgVklSVF9CQVNFIDB4NDAwMDAwCisKK0AgT2Zmc2V0 IG9mIHRoZSBrZXJuZWwgd2l0aGluIHRoZSBSQU0uIFRoaXMgaXMgYSB6SW1hZ2UgY29udmVudGlv biB3aGljaCB3ZQorQCByZWx5IG9uLgorI2RlZmluZSBaSU1BR0VfS0VSTkVMX09GRlNFVCAweDgw MDAKKworQCBEZXNpcmVkIHZpcnR1YWwgYWRkcmVzcyBvZiBfc3RhcnQuIE11c3QgbWF0Y2ggdmFs dWUgaW4gLmxkcyBmaWxlLgorI2RlZmluZSBWSVJUX1NUQVJUIChWSVJUX0JBU0UgKyBaSU1BR0Vf S0VSTkVMX09GRlNFVCkKKworLnNlY3Rpb24gLnRleHQKKworLmdsb2JsIF9zdGFydAorX3N0YXJ0 OgorCUAgekltYWdlIGhlYWRlcgorLnJlcHQgICA4CisgICAgICAgIG1vdiAgICAgcjAsIHIwCisu ZW5kcgorICAgICAgICBiICAgICAgIHJlc2V0CisgICAgICAgIC53b3JkICAgMHgwMTZmMjgxOCAg ICAgIEAgTWFnaWMgbnVtYmVycyB0byBoZWxwIHRoZSBsb2FkZXIKKyAgICAgICAgLndvcmQgICAw CQlAIHpJbWFnZSBzdGFydCBhZGRyZXNzICgwID0gcmVsb2NhdGFibGUpCisgICAgICAgIC53b3Jk ICAgX2VkYXRhIC0gX3N0YXJ0IEAgekltYWdlIGVuZCBhZGRyZXNzIChleGNsdWRlcyBic3Mgc2Vj dGlvbikKKwlAIGVuZCBvZiB6SW1hZ2UgaGVhZGVyCisKK0AgQ2FsbGVkIGF0IGJvb3QgdGltZS4g U2V0cyB1cCBNTVUsIGV4Y2VwdGlvbiB2ZWN0b3JzIGFuZCBzdGFjaywgYW5kIHRoZW4gY2FsbHMg QyBhcmNoX2luaXQoKSBmdW5jdGlvbi4KK0AgPT4gcjIgLT4gRFRCCitAIDw9IG5ldmVyIHJldHVy bnMKK0AgTm90ZTogdGhpcyBib290IGNvZGUgbmVlZHMgdG8gYmUgd2l0aGluIHRoZSBmaXJzdCAo MU1CIC0gWklNQUdFX0tFUk5FTF9PRkZTRVQpIG9mIF9zdGFydC4KK3Jlc2V0OgorCUAgUHJvYmxl bTogdGhlIEMgY29kZSB3YW50cyB0byBiZSBhdCBhIGtub3duIGFkZHJlc3MgKFZJUlRfQkFTRSks IGJ1dCBYZW4gbWlnaHQKKwlAIGxvYWQgdXMgYW55d2hlcmUuIFdlIGluaXRpYWxpc2UgdGhlIE1N VSAobWFwcGluZyB2aXJ0dWFsIHRvIHBoeXNpY2FsIEAgYWRkcmVzc2VzKQorCUAgc28gZXZlcnl0 aGluZyBlbmRzIHVwIHdoZXJlIHRoZSBjb2RlIGV4cGVjdHMgaXQgdG8gYmUuCisJQAorCUAgV2Ug Y2FsY3VsYXRlIHRoZSBvZmZldCBiZXR3ZWVuIHdoZXJlIHRoZSBsaW5rZXIgdGhvdWdodCBfc3Rh cnQgd291bGQgYmUgYW5kIHdoZXJlCisJQCBpdCBhY3R1YWxseSBpcyBhbmQgaW5pdGlhbGlzZSB0 aGUgcGFnZSB0YWJsZXMgdG8gaGF2ZSB0aGF0IG9mZnNldCBmb3IgZXZlcnkgcGFnZS4KKwlACisJ QCBXaGVuIHdlIHR1cm4gb24gdGhlIE1NVSwgd2UncmUgc3RpbGwgZXhlY3V0aW5nIGF0IHRoZSBv bGQgYWRkcmVzcy4gV2UgZG9uJ3Qgd2FudAorCUAgdGhlIGNvZGUgdG8gZGlzYXBwZWFyIGZyb20g dW5kZXIgdXMuIFNvIHdlIGhhdmUgdG8gZG8gdGhlIG1hcHBpbmcgaW4gc3RhZ2VzOgorCUAKKwlA IDEuIHNldCB1cCBhIG1hcHBpbmcgdG8gb3VyIGN1cnJlbnQgcGFnZSBmcm9tIGJvdGggaXRzIGN1 cnJlbnQgYW5kIGRlc2lyZWQgYWRkcmVzc2VzCisJQCAyLiBlbmFibGUgdGhlIE1NVQorCUAgMy4g anVtcCB0byB0aGUgbmV3IGFkZHJlc3MKKwlAIDQuIHJlbWFwIGFsbCB0aGUgb3RoZXIgcGFnZXMg d2l0aCB0aGUgY2FsY3VsYXRlZCBvZmZzZXQKKworCWFkcglyMSwgX3N0YXJ0CQlAIHIxID0gcGh5 c2ljYWwgYWRkcmVzcyBvZiBfc3RhcnQKKwlsZHIJcjMsID1WSVJUX1NUQVJUCQlAIHIzID0gKGRl c2lyZWQpIHZpcnR1YWwgYWRkcmVzcyBvZiBfc3RhcnQKKwlzdWIgCXI5LCByMSwgcjMJCUAgcjkg PSAocGh5c2ljYWwgLSB2aXJ0dWFsKSBvZmZzZXQKKworCWxkcglyNywgPXBhZ2VfZGlyCQlAIHI3 ID0gKGRlc2lyZWQpIHZpcnR1YWwgYWRkciBvZiBwYWdlX2RpcgorCWFkZAlyMSwgcjcsIHI5CQlA IHIxID0gcGh5c2ljYWwgYWRkciBvZiBwYWdlX2RpcgorCisJQCBUZWxsIHRoZSBzeXN0ZW0gd2hl cmUgb3VyIHBhZ2UgdGFibGUgaXMgbG9jYXRlZC4KKwltY3IJcDE1LCAwLCByMSwgYzIsIGMwLCAw CUAgc2V0IHR0YnIwID0gcjEKKworCUAgU2V0IGFjY2VzcyBwZXJtaXNzaW9uIGZvciBkb21haW5z LgorCUAgRG9tYWlucyBhcmUgZGVwcmVjYXRlZCwgYnV0IHdlIGhhdmUgdG8gY29uZmlndXJlIHRo ZW0gYW55d2F5LgorCUAgV2UgbWFyayBldmVyeSBwYWdlIGFzIGJlaW5nIGRvbWFpbiAwIGFuZCBz ZXQgZG9tYWluIDAgdG8gImNsaWVudCBtb2RlIgorCUAgKGNsaWVudCBtb2RlID0gdXNlIGFjY2Vz cyBmbGFncyBpbiBwYWdlIHRhYmxlKS4KKwltb3YJcjAsICMxCQkJQCAxID0gY2xpZW50CisJbWNy CXAxNSwgMCwgcjAsIGMzLCBjMCwgMAlAIERBQ1IKKworCUAgVGVtcGxhdGUgKGZsYWdzKSBmb3Ig YSAxIE1CIHBhZ2UtdGFibGUgZW50cnkuCisJQCBURVhbMjowXSBDIEIgPSAwMDEgMSAxIChvdXRl ciBhbmQgaW5uZXIgd3JpdGUtYmFjaywgd3JpdGUtYWxsb2NhdGUpCisJbGRyCXI4LCA9KDB4MiAr ICAJCS8qIFNlY3Rpb24gZW50cnkgKi8gXAorCQkgICAgICAweGMgKyAgCQkvKiBDIEIgKi8gXAor CQkgICAgICAoMyA8PCAxMCkgKyAJLyogUmVhZC93cml0ZSAqLyBcCisJCSAgICAgICgxIDw8IDEy KSArCS8qIFRFWCAqLyBcCisJCSAgICAgICgxIDw8IDE2KSArCS8qIFNoYXJhYmxlICovIFwKKwkJ ICAgICAgKDE8PDE5KSkJCS8qIE5vbi1zZWN1cmUgKi8KKwlAIHI4ID0gdGVtcGxhdGUgcGFnZSB0 YWJsZSBlbnRyeQorCisJQCBBZGQgdHdvIGVudHJpZXMgZm9yIHRoZSBjdXJyZW50IHBoeXNpY2Fs IHNlY3Rpb24sIGF0IHRoZSBvbGQgYW5kIG5ldworCUAgYWRkcmVzc2VzLgorCUAgSXQncyBPSyBp ZiB0aGV5J3JlIHRoZSBzYW1lLiBJdCdzIGV2ZW4gT0sgaWYgdGhlIG5ldyBzZWN0aW9uIG92ZXJs YXBzCisJQCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcGFnZSB0YWJsZSwgc2luY2UgdGhl IE1NVSBpcyBzdGlsbCB0dXJuZWQgb2ZmLgorCW1vdglyMCwgcGMsIGxzciMyMAorCW1vdglyMCwg cjAsIGxzbCMyMAkJQCByMCA9IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhpcyBjb2RlJ3Mgc2VjdGlv biBzdGFydAorCW9ycglyMywgcjAsIHI4CQlAIHIzID0gdGFibGUgZW50cnkgZm9yIHRoaXMgc2Vj dGlvbgorCXN0cglyMywgW3IxLCAjVklSVF9CQVNFID4+IDE4XSBAIG1hcCBkZXNpcmVkIHZpcnR1 YWwgc2VjdGlvbiB0byB0aGlzIGNvZGUKKwlzdHIJcjMsIFtyMSwgcjAsIGxzciMxOF0JQCBtYXAg Y3VycmVudCBzZWN0aW9uIHRvIHRoaXMgY29kZSB0b28KKworCUAgTWFwIHRoZSBzZWN0aW9uIGNv bnRhaW5pbmcgdGhlIHBhZ2UgdGFibGUgdG8gaXRzIGRlc2lyZWQgYWRkcmVzcywgaWYgcG9zc2li bGUuCisJQCBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGVzaXJlZCB2aXJ0dWFsIHNlY3Rpb24g ZG9lc24ndCBtYXRjaCB0aGUgb2xkIGFkZHJlc3Mgb2YgdGhlCisJQCBjb2RlLCBzaW5jZSB0aGF0 IG5lZWRzIHRvIHJlbWFpbiB2YWxpZCBicmllZmx5IGFmdGVyIHRoZSBNTVUgaXMgdHVybmVkIG9u LgorCW1vdglyMywgcjEsIGxzciMyMAkJQCByMyA9IHBoeXNpY2FsIHNlY3Rpb24gbnVtYmVyIGNv bnRhaW5pbmcgcGFnZSB0YWJsZQorCXJzYglyNCwgcjksIHIzLCBsc2wjMjAJQCByNCA9IGRlc2ly ZWQgdmlydHVhbCBhZGRyZXNzIG9mIHBhZ2UgdGFibGUncyBzZWN0aW9uCisJb3JyCXIzLCByOCwg cjMsIGxzbCMyMAlAIHIzID0gdGFibGUgZW50cnkgZm9yIHBhZ2UgdGFibGUKKwljbXAJcjQsIHIw CQkJQCBpcyByNCB3aGVyZSB3ZSdyZSBleGVjdXRpbmcgZnJvbT8KKwltb3ZuZQlyNSwgcjQJCQlA IHVzZSBpdCBpZiBub3QKKwlhZGRlcQlyNSwgcjQsICMxPDwyMAkJQCBlbHNlIHVzZSBuZXh0IHNl Y3Rpb24gaW5zdGVhZAorCXN0cglyMywgW3IxLCByNSwgbHNyIzE4XQlAIGFkZCBzZWN0aW9uIGVu dHJ5IGZvciBwYWdlIHRhYmxlIGl0c2VsZgorCUAgcjUgPSB0ZW1wb3JhcnkgdmlydHVhbCBhZGRy ZXNzIG9mIHBhZ2UgdGFibGUgc2VjdGlvbgorCisJQCBJbnZhbGlkYXRlIFRMQgorCW1jcglwMTUs IDAsIHIxLCBjOCwgYzcsIDAJQCBUTEJJQUxMCisKKwlAIEVuYWJsZSBNTVUgLyBTQ1RMUgorCUAg V2UgbGVhdmUgY2FjaGVzIG9mZiBmb3Igbm93IGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8gYmUgY2hh bmdpbmcgdGhlCisJQCBUTEIgYSBsb3QgYW5kIHRoaXMgYXZvaWRzIGhhdmluZyB0byBmbHVzaCB0 aGUgY2FjaGVzIGVhY2ggdGltZS4KKwltcmMJcDE1LCAwLCByMSwgYzEsIGMwLCAwCUAgU0NUTFIK KwlvcnIJcjEsIHIxLCAjMHgxCQlAIEVuYWJsZSBNTVUKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMw LCAwCUAgU0NUTFIKKwlpc2IKKworCWFkcglyMSwgc3RhZ2UyCQlAIFBoeXNpY2FsIGFkZHJlc3Mg b2Ygc3RhZ2UyCisJc3ViCXIxLCByMSwgcjkJCUAgVmlydHVhbCBhZGRyZXNzIG9mIHN0YWdlMgor CWJ4CXIxCisKK0AgQ2FsbGVkIG9uY2UgdGhlIE1NVSBpcyBlbmFibGVkLiBUaGUgYm9vdCBjb2Rl IGFuZCB0aGUgcGFnZSB0YWJsZSBhcmUgbWFwcGVkLAorQCBidXQgbm90aGluZyBlbHNlIGlzIHll dC4KK0AKK0AgPT4gcjIgLT4gZHRiIChwaHlzaWNhbCkKK0AgICAgcjMgPSBwYWdlIHRhYmxlIGVu dHJ5IGZvciBwYWdlIHRhYmxlIGl0c2VsZgorQCAgICByNCA9IGRlc2lyZWQgdmlydHVhbCBhZGRy ZXNzIG9mIHBhZ2UgdGFibGUncyBzZWN0aW9uCitAICAgIHI1ID0gdGVtcG9yYXJ5IHZpcnR1YWwg YWRkcmVzcyBvZiBwYWdlIHRhYmxlJ3Mgc2VjdGlvbgorQCAgICByNyA9IGRlc2lyZWQgdmlydHVh bCBhZGRyZXNzIG9mIHBhZ2UgdGFibGUKK0AgICAgcjggPSBzZWN0aW9uIGVudHJ5IHRlbXBsYXRl IChmbGFncykKK0AgICAgcjkgPSBkZXNpcmVkIHBoeXNpY2FsIC0gdmlydHVhbCBvZmZzZXQKK0Ag ICAgcGMgLT4gc29tZXdoZXJlIGluIG5ld2x5LW1hcHBlZCB2aXJ0dWFsIGNvZGUgc2VjdGlvbgor c3RhZ2UyOgorCUAgUmVtYXAgcGFnZSB0YWJsZSB0byBpdHMgZmluYWwgbG9jYXRpb24sIG5vdyBp dCBjYW4ndCBjbGFzaCB3aXRoIG91cgorCUAgZXhlY3V0aW9uIGFkZHJlc3MuCisJc3ViCXI1LCBy NSwJcjQJCUAgcjUgPSBkaWZmZXJlbmNlIGJldHdlZW4gZGVzaXJlZCBhbmQgYWN0dWFsCisJYWRk CXI1LCByNSwgcjcJCUAgcjUgPSB0ZW1wb3JhcnkgdmlydHVhbCBhZGRyZXNzIG9mIHBhZ2VfZGly CisJc3RyCXIzLCBbcjUsIHI0LCBsc3IjMThdCUAgbWFwIHBhZ2UgdGFibGUgc2VjdGlvbiBhdCBk ZXNpcmVkIGFkZHJlc3MKKworCUAgSW52YWxpZGF0ZSBUTEIKKwltY3IJcDE1LCAwLCByMSwgYzgs IGM3LCAwCUAgVExCSUFMTAorCWlzYgorCisJQCBUaGUgbmV3IG1hcHBpbmcgaGFzIG5vdyB0YWtl biBlZmZlY3Q6CisJQCByNyAtPiBwYWdlX2RpcgorCisJQCBGaWxsIGluIHRoZSB3aG9sZSB0b3At bGV2ZWwgdHJhbnNsYXRpb24gdGFibGUgKGF0IHBhZ2VfZGlyKS4KKwlAIFBvcHVsYXRlIHRoZSB3 aG9sZSBwYWdlZGlyIHdpdGggMU1CIHNlY3Rpb24gZGVzY3JpcHRvcnMuCisKKwltb3YJcjEsIHI3 CQkJQCByMSAtPiBmaXJzdCBzZWN0aW9uIGVudHJ5CisJYWRkCXIzLCByMSwgIzQqNCoxMDI0CUAg bGltaXQgKDQgR0IgYWRkcmVzcyBzcGFjZSwgNCBieXRlIGVudHJpZXMpCisJb3JyCXIwLCByOCwg cjkJCUAgcjAgPSBlbnRyeSBtYXBwaW5nIHNlY3Rpb24gemVybyB0byBzdGFydCBvZiBwaHlzaWNh bCBSQU0KKzE6CisJc3RyCXIwLCBbcjFdLCM0CQlAIHdyaXRlIHRoZSBzZWN0aW9uIGVudHJ5CisJ YWRkCXIwLCByMCwgIzEgPDwgMjAgCUAgbmV4dCBwaHlzaWNhbCBwYWdlICh3cmFwcykKKwljbXAJ cjEsIHIzCisJYm5lCTFiCisKKwlAIEludmFsaWRhdGUgVExCCisJbWNyCXAxNSwgMCwgcjEsIGM4 LCBjNywgMAlAIFRMQklBTEwKKwlpc2IKKworCUAgQXQgdGhpcyBwb2ludCwgZXZlcnl0aGluZyBp cyBtYXBwZWQgdG8gaXRzIGZpbmFsIGxvY2F0aW9uLgorCUAgSXQncyBub3cgc2FmZSB0byB0dXJu IG9uIGNhY2hpbmcuCisJbGRyCXIwLCA9KDMgPDwgMTEpICsgNAlAIGljYWNoZSwgYnJhbmNoIHBy ZWRpY3Rpb24sIGRjYWNoZQorCW1yYwlwMTUsIDAsIHIxLCBjMSwgYzAsIDAJQCBTQ1RMUgorCW9y cglyMSwgcjEsIHIwCisJbWNyCXAxNSwgMCwgcjEsIGMxLCBjMCwgMAlAIFNDVExSCisKKwlAIFNl dCBWQkFSIC0+IGV4Y2VwdGlvbl92ZWN0b3JfdGFibGUKKwlAIFNDVExSLlYgPSAwCisJYWRyCXIw LCBleGNlcHRpb25fdmVjdG9yX3RhYmxlCisJbWNyCXAxNSwgMCwgcjAsIGMxMiwgYzAsIDAKKwor CUAgSW5pdGlhbGlzZSAxNiBLQiBzdGFjaworCWxkcglzcCwgPXN0YWNrX2VuZAorCisJQCBTdG9y ZSB2aXJ0dWFsIC0+IHBoeXNpY2FsIG9mZnNldCBmb3IgQyBjb2RlCisJbGRyCXIwLCA9cGh5c2lj YWxfYWRkcmVzc19vZmZzZXQKKwlzdHIJcjksIFtyMF0KKworCXN1YglyMCwgcjIsIHI5CQlAIHIw IC0+IGRldmljZSB0cmVlICh2aXJ0dWFsIGFkZHJlc3MpCisKKwliCWFyY2hfaW5pdAorCisucHVz aHNlY3Rpb24gLmRhdGEKK19kYXRhOgorLmFsaWduCTE0CisuZ2xvYmwgcGFnZV9kaXIKK0AgRWFj aCB3b3JkIG1hcHMgb25lIDFNQiB2aXJ0dWFsIHNlY3Rpb24gdG8gYSBwaHlzaWNhbCBzZWN0aW9u CitwYWdlX2RpcjoKKwkuZmlsbCAoNCoxMDI0KSwgNCwgMHgwCisKKy5hbGlnbiAxMgorLmdsb2Js IHNoYXJlZF9pbmZvX3BhZ2UKK3NoYXJlZF9pbmZvX3BhZ2U6CisJLmZpbGwgKDEwMjQpLCA0LCAw eDAKKworLmFsaWduIDMKKy5nbG9ibCBzdGFjaworc3RhY2s6CisJLmZpbGwgKDQqMTAyNCksIDQs IDB4MAorc3RhY2tfZW5kOgorCisuYWxpZ24gMworaXJxc3RhY2s6CisJLmZpbGwgKDEwMjQpLCA0 LCAweDAKK2lycXN0YWNrX2VuZDoKKworLmdsb2JsIHBoeXNpY2FsX2FkZHJlc3Nfb2Zmc2V0Citw aHlzaWNhbF9hZGRyZXNzX29mZnNldDoKKwkubG9uZyAJMAorCisucG9wc2VjdGlvbgorCitAIGV4 Y2VwdGlvbiBiYXNlIGFkZHJlc3MKKy5hbGlnbiA1CisuZ2xvYmwgZXhjZXB0aW9uX3ZlY3Rvcl90 YWJsZQorQCBOb3RlOiByZW1lbWJlciB0byBjYWxsIENMUkVYIGlmIHJldHVybmluZyBmcm9tIGFu IGV4Y2VwdGlvbjoKK0AgIlRoZSBhcmNoaXRlY3R1cmUgZW5hYmxlcyB0aGUgbG9jYWwgbW9uaXRv ciB0byB0cmVhdCBhbnkgZXhjbHVzaXZlIHN0b3JlIGFzCitAICBtYXRjaGluZyBhIHByZXZpb3Vz IExEUkVYIGFkZHJlc3MuIEZvciB0aGlzIHJlYXNvbiwgdXNlIG9mIHRoZSBDTFJFWAorQCAgaW5z dHJ1Y3Rpb24gdG8gY2xlYXIgYW4gZXhpc3RpbmcgdGFnIGlzIHJlcXVpcmVkIG9uIGNvbnRleHQg c3dpdGNoZXMuIgorQCAtLSBBUk0gQ29ydGV4LUEgU2VyaWVzIFByb2dyYW1tZXLigJlzIEd1aWRl IChWZXJzaW9uOiA0LjApCitleGNlcHRpb25fdmVjdG9yX3RhYmxlOgorCWIJLiBAIHJlc2V0CisJ YgkuIEAgdW5kZWZpbmVkIGluc3RydWN0aW9uCisJYgkuIEAgc3VwZXJ2aXNvciBjYWxsCisJYgku IEAgcHJlZmV0Y2ggY2FsbAorCWIJLiBAIHByZWZldGNoIGFib3J0CisJYgkuIEAgZGF0YSBhYm9y dAorCWIJaXJxX2hhbmRsZXIgQCBpcnEKKwkud29yZCAweGU3ZjAwMGYwICAgIEAgYWJvcnQgb24g RklRCisKK2lycV9oYW5kbGVyOgorCWxkcglzcCwgPWlycXN0YWNrX2VuZAorCXB1c2gJe3IwIC0g cjEyLCByMTR9CisKKwlsZHIJcjAsIElSUV9oYW5kbGVyCisJY21wCXIwLCAjMAorCS53b3JkCTB4 MDdmMDAwZjAgICAgCUAgdW5kZXEgLSBwYW5pYyBpZiBubyBoYW5kbGVyCisJYmx4CXIwCQlAIGNh bGwgaGFuZGxlcgorCisJQCBSZXR1cm4gZnJvbSBJUlEKKwlwb3AJe3IwIC0gcjEyLCByMTR9CisJ Y2xyZXgKKwlzdWJzCXBjLCBsciwgIzQKKworLmdsb2JsIElSUV9oYW5kbGVyCitJUlFfaGFuZGxl cjoKKwkubG9uZwkweDAKKworCisuZ2xvYmwgX19hcmNoX3N3aXRjaF90aHJlYWRzCitAID0+IHIw ID0gJnByZXYtPnNwCitAICAgIHIxID0gJm5leHQtPnNwCitAIDw9IHJldHVybnMgdG8gbmV4dCB0 aHJlYWQncyBzYXZlZCByZXR1cm4gYWRkcmVzcworX19hcmNoX3N3aXRjaF90aHJlYWRzOgorCXN0 bWlhCXIwLCB7c3AsIGxyfQlAIFN0b3JlIGN1cnJlbnQgc3AgYW5kIGlwIHRvIHByZXYncyBzdHJ1 Y3QgdGhyZWFkCisJc3RyCWZwLCBbc3AsICMtNF0JQCBTdG9yZSBmcCBvbiB0aGUgb2xkIHN0YWNr CisKKwlsZG1pYQlyMSwge3NwLCBscn0JQCBMb2FkIG5ldyBzcCwgaXAgZnJvbSBuZXh0J3Mgc3Ry dWN0IHRocmVhZAorCWxkcglmcCwgW3NwLCAjLTRdCUAgUmVzdG9yZSBmcCBmcm9tIHRoZSBzdGFj aworCisJbW92CXBjLCBscgorCitAIFRoaXMgaXMgY2FsbGVkIGlmIHlvdSB0cnkgdG8gZGl2aWRl IGJ5IHplcm8uIEZvciBub3csIHdlIG1ha2UgYSBzdXBlcnZpc29yIGNhbGwsCitAIHdoaWNoIHdp bGwgbWFrZSB1cyBoYWx0LgorLmdsb2JsIHJhaXNlCityYWlzZToKKwlzdmMJMAorCisuZ2xvYmwg YXJtX3N0YXJ0X3RocmVhZAorYXJtX3N0YXJ0X3RocmVhZDoKKwlwb3AJe3IwLCByMX0KKwlAIHIw ID0gdXNlciBkYXRhCisJQCByMSAtPiB0aHJlYWQncyBtYWluIGZ1bmN0aW9uCisJbGRyCWxyLCA9 ZXhpdF90aHJlYWQKKwlieAlyMQpkaWZmIC0tZ2l0IGEvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0v ZXZlbnRzLmMgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9ldmVudHMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdlNzYzCi0tLSAvZGV2L251bGwKKysrIGIvZXh0cmFz L21pbmktb3MvYXJjaC9hcm0vZXZlbnRzLmMKQEAgLTAsMCArMSwzMCBAQAorI2luY2x1ZGUgPG1p bmktb3Mvb3MuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL2V2ZW50cy5oPgorI2luY2x1ZGUgPG1pbmkt b3MvaHlwZXJ2aXNvci5oPgorCitzdGF0aWMgdm9pZCB2aXJxX2RlYnVnKGV2dGNobl9wb3J0X3Qg cG9ydCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKnBhcmFtcykKK3sKKyAgICBwcmludGso IlJlY2VpdmVkIGEgdmlycV9kZWJ1ZyBldmVudFxuIik7Cit9CisKK2V2dGNobl9wb3J0X3QgZGVi dWdfcG9ydCA9IC0xOwordm9pZCBhcmNoX2luaXRfZXZlbnRzKHZvaWQpCit7CisgICAgZGVidWdf cG9ydCA9IGJpbmRfdmlycShWSVJRX0RFQlVHLCAoZXZ0Y2huX2hhbmRsZXJfdCl2aXJxX2RlYnVn LCAwKTsKKyAgICBpZihkZWJ1Z19wb3J0ID09IC0xKQorICAgICAgICBCVUcoKTsKKyAgICB1bm1h c2tfZXZ0Y2huKGRlYnVnX3BvcnQpOworfQorCit2b2lkIGFyY2hfdW5iaW5kX3BvcnRzKHZvaWQp Cit7CisgICAgaWYoZGVidWdfcG9ydCAhPSAtMSkKKyAgICB7CisgICAgICAgIG1hc2tfZXZ0Y2hu KGRlYnVnX3BvcnQpOworICAgICAgICB1bmJpbmRfZXZ0Y2huKGRlYnVnX3BvcnQpOworICAgIH0K K30KKwordm9pZCBhcmNoX2ZpbmlfZXZlbnRzKHZvaWQpCit7Cit9CmRpZmYgLS1naXQgYS9leHRy YXMvbWluaS1vcy9hcmNoL2FybS9naWMuYyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL2dpYy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDFlYjAKLS0tIC9kZXYvbnVs bAorKysgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9naWMuYwpAQCAtMCwwICsxLDIyMiBAQAor Ly8gQVJNIEdJQyBpbXBsZW1lbnRhdGlvbgorCisjaW5jbHVkZSA8bWluaS1vcy9vcy5oPgorI2lu Y2x1ZGUgPG1pbmktb3MvaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGxpYmZkdC5oPgorCisvLyNk ZWZpbmUgVkdJQ19ERUJVRworI2lmZGVmIFZHSUNfREVCVUcKKyNkZWZpbmUgREVCVUcoX2YsIF9h Li4uKSBcCisgICAgREVCVUcoIk1JTklfT1MoZmlsZT12Z2ljLmMsIGxpbmU9JWQpICIgX2YgLCBf X0xJTkVfXywgIyMgX2EpCisjZWxzZQorI2RlZmluZSBERUJVRyhfZiwgX2EuLi4pICAgICgodm9p ZCkwKQorI2VuZGlmCisKK2V4dGVybiB2b2lkICgqSVJRX2hhbmRsZXIpKHZvaWQpOworCitzdHJ1 Y3QgZ2ljIHsKKyAgICB2b2xhdGlsZSBjaGFyICpnaWNkX2Jhc2U7CisgICAgdm9sYXRpbGUgY2hh ciAqZ2ljY19iYXNlOworfTsKKworc3RhdGljIHN0cnVjdCBnaWMgZ2ljOworCisvLyBEaXN0cmli dXRvciBJbnRlcmZhY2UKKyNkZWZpbmUgR0lDRF9DVExSICAgICAgICAweDAKKyNkZWZpbmUgR0lD RF9JU0VOQUJMRVIgICAgMHgxMDAKKyNkZWZpbmUgR0lDRF9JUFJJT1JJVFlSICAgMHg0MDAKKyNk ZWZpbmUgR0lDRF9JVEFSR0VUU1IgICAgMHg4MDAKKyNkZWZpbmUgR0lDRF9JQ0ZHUiAgICAgICAg MHhDMDAKKworLy8gQ1BVIEludGVyZmFjZQorI2RlZmluZSBHSUNDX0NUTFIgICAgMHgwCisjZGVm aW5lIEdJQ0NfUE1SICAgIDB4NAorI2RlZmluZSBHSUNDX0lBUiAgICAweGMKKyNkZWZpbmUgR0lD Q19FT0lSICAgIDB4MTAKKyNkZWZpbmUgR0lDQ19IUFBJUiAgICAweDE4CisKKyNkZWZpbmUgZ2lj ZChnaWMsIG9mZnNldCkgKChnaWMpLT5naWNkX2Jhc2UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgZ2lj YyhnaWMsIG9mZnNldCkgKChnaWMpLT5naWNjX2Jhc2UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBS RUcoYWRkcikgKCh1aW50MzJfdCAqKShhZGRyKSkKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBS RUdfUkVBRDMyKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyKQoreworICAgIHVpbnQzMl90IHZhbHVl OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsZHIgJTAsIFslMV0iOiI9JnIiKHZhbHVlKToi ciIoYWRkcikpOworICAgIHJtYigpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIFJFR19XUklURTMyKHZvbGF0aWxlIHVpbnQzMl90ICphZGRyLCB1bnNpZ25lZCBp bnQgdmFsdWUpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ciAlMCwgWyUxXSI6OiJy Iih2YWx1ZSksICJyIihhZGRyKSk7CisgICAgd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdpY19z ZXRfcHJpb3JpdHkoc3RydWN0IGdpYyAqZ2ljLCBpbnQgaXJxX251bWJlciwgdW5zaWduZWQgY2hh ciBwcmlvcml0eSkKK3sKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICB1aW50MzJfdCAqYWRkciA9 IFJFRyhnaWNkKGdpYywgR0lDRF9JUFJJT1JJVFlSKSkgKyAoaXJxX251bWJlciA+PiAyKTsKKyAg ICB2YWx1ZSA9IFJFR19SRUFEMzIoYWRkcik7CisgICAgdmFsdWUgJj0gfigweGZmIDw8ICg4ICog KGlycV9udW1iZXIgJiAweDMpKSk7IC8vIGNsZWFyIG9sZCBwcmlvcml0eQorICAgIHZhbHVlIHw9 IHByaW9yaXR5IDw8ICg4ICogKGlycV9udW1iZXIgJiAweDMpKTsgLy8gc2V0IG5ldyBwcmlvcml0 eQorICAgIFJFR19XUklURTMyKGFkZHIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgZ2ljX3Jv dXRlX2ludGVycnVwdChzdHJ1Y3QgZ2ljICpnaWMsIGludCBpcnFfbnVtYmVyLCB1bnNpZ25lZCBj aGFyIGNwdV9zZXQpCit7CisgICAgdWludDMyX3QgdmFsdWU7CisgICAgdWludDMyX3QgKmFkZHIg PSBSRUcoZ2ljZChnaWMsIEdJQ0RfSVRBUkdFVFNSKSkgKyAoaXJxX251bWJlciA+PiAyKTsKKyAg ICB2YWx1ZSA9IFJFR19SRUFEMzIoYWRkcik7CisgICAgdmFsdWUgJj0gfigweGZmIDw8ICg4ICog KGlycV9udW1iZXIgJiAweDMpKSk7IC8vIGNsZWFyIG9sZCB0YXJnZXQKKyAgICB2YWx1ZSB8PSBj cHVfc2V0IDw8ICg4ICogKGlycV9udW1iZXIgJiAweDMpKTsgLy8gc2V0IG5ldyB0YXJnZXQKKyAg ICBSRUdfV1JJVEUzMihhZGRyLCB2YWx1ZSk7Cit9CisKKy8qIFdoZW4gYWNjZXNzaW5nIHRoZSBH SUMgcmVnaXN0ZXJzLCB3ZSBjYW4ndCB1c2UgTERSRVgvU1RSRVggYmVjYXVzZSBpdCdzIG5vdCBy ZWd1bGFyIG1lbW9yeS4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0X25vbl9h dG9taWMoaW50IG5yLCB2b2xhdGlsZSB2b2lkICpiYXNlKQoreworICAgIHZvbGF0aWxlIHVpbnQz Ml90ICp0bXAgPSBiYXNlOworICAgIHRtcFtuciA+PiA1XSAmPSAodW5zaWduZWQgbG9uZyl+KDEg PDwgKG5yICYgMHgxZikpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNldF9iaXRfbm9u X2F0b21pYyhpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKmJhc2UpCit7CisgICAgdm9sYXRpbGUgdWlu dDMyX3QgKnRtcCA9IGJhc2U7CisgICAgdG1wW25yID4+IDVdIHw9ICgxIDw8IChuciAmIDB4MWYp KTsKK30KKworLyogTm90ZTogbm90IHRocmVhZCBzYWZlIChidXQgd2Ugb25seSBzdXBwb3J0IG9u ZSBDUFUgZm9yIG5vdyBhbnl3YXkpICovCitzdGF0aWMgdm9pZCBnaWNfZW5hYmxlX2ludGVycnVw dChzdHJ1Y3QgZ2ljICpnaWMsIGludCBpcnFfbnVtYmVyLAorICAgICAgICB1bnNpZ25lZCBjaGFy IGNwdV9zZXQsIHVuc2lnbmVkIGNoYXIgbGV2ZWxfc2Vuc2l0aXZlLCB1bnNpZ25lZCBjaGFyIHBw aSkKK3sKKyAgICB2b2lkICpzZXRfZW5hYmxlX3JlZzsKKyAgICB2b2lkICpjZmdfcmVnOworCisg ICAgLy8gc2V0IHByaW9yaXR5CisgICAgZ2ljX3NldF9wcmlvcml0eShnaWMsIGlycV9udW1iZXIs IDB4MCk7CisKKyAgICAvLyBzZXQgdGFyZ2V0IGNwdXMgZm9yIHRoaXMgaW50ZXJydXB0CisgICAg Z2ljX3JvdXRlX2ludGVycnVwdChnaWMsIGlycV9udW1iZXIsIGNwdV9zZXQpOworCisgICAgLy8g c2V0IGxldmVsL2VkZ2UgdHJpZ2dlcmVkCisgICAgY2ZnX3JlZyA9ICh2b2lkICopZ2ljZChnaWMs IEdJQ0RfSUNGR1IpOworICAgIGxldmVsX3NlbnNpdGl2ZSA/IGNsZWFyX2JpdF9ub25fYXRvbWlj KChpcnFfbnVtYmVyICogMikgKyAxLCBjZmdfcmVnKSA6IHNldF9iaXRfbm9uX2F0b21pYygoaXJx X251bWJlciAqIDIpICsgMSwgY2ZnX3JlZyk7CisgICAgaWYocHBpKQorICAgICAgICBjbGVhcl9i aXRfbm9uX2F0b21pYygoaXJxX251bWJlciAqIDIpLCBjZmdfcmVnKTsKKworICAgIHdtYigpOwor CisgICAgLy8gZW5hYmxlIGZvcndhcmRpbmcgaW50ZXJydXB0IGZyb20gZGlzdHJpYnV0b3IgdG8g Y3B1IGludGVyZmFjZQorICAgIHNldF9lbmFibGVfcmVnID0gKHZvaWQgKilnaWNkKGdpYywgR0lD RF9JU0VOQUJMRVIpOworICAgIHNldF9iaXRfbm9uX2F0b21pYyhpcnFfbnVtYmVyLCBzZXRfZW5h YmxlX3JlZyk7CisgICAgd21iKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdpY19lbmFibGVfaW50ZXJy dXB0cyhzdHJ1Y3QgZ2ljICpnaWMpCit7CisgICAgLy8gR2xvYmFsIGVuYWJsZSBmb3J3YXJkaW5n IGludGVycnVwdHMgZnJvbSBkaXN0cmlidXRvciB0byBjcHUgaW50ZXJmYWNlCisgICAgUkVHX1dS SVRFMzIoUkVHKGdpY2QoZ2ljLCBHSUNEX0NUTFIpKSwgMHgwMDAwMDAwMSk7CisKKyAgICAvLyBH bG9iYWwgZW5hYmxlIHNpZ25hbGxpbmcgb2YgaW50ZXJydXB0IGZyb20gdGhlIGNwdSBpbnRlcmZh Y2UKKyAgICBSRUdfV1JJVEUzMihSRUcoZ2ljYyhnaWMsIEdJQ0NfQ1RMUikpLCAweDAwMDAwMDAx KTsKK30KKworc3RhdGljIHZvaWQgZ2ljX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZ2ljICpn aWMpCit7CisgICAgLy8gR2xvYmFsIGRpc2FibGUgc2lnbmFsbGluZyBvZiBpbnRlcnJ1cHQgZnJv bSB0aGUgY3B1IGludGVyZmFjZQorICAgIFJFR19XUklURTMyKFJFRyhnaWNjKGdpYywgR0lDQ19D VExSKSksIDB4MDAwMDAwMDApOworCisgICAgLy8gR2xvYmFsIGRpc2FibGUgZm9yd2FyZGluZyBp bnRlcnJ1cHRzIGZyb20gZGlzdHJpYnV0b3IgdG8gY3B1IGludGVyZmFjZQorICAgIFJFR19XUklU RTMyKFJFRyhnaWNkKGdpYywgR0lDRF9DVExSKSksIDB4MDAwMDAwMDApOworfQorCitzdGF0aWMg dm9pZCBnaWNfY3B1X3NldF9wcmlvcml0eShzdHJ1Y3QgZ2ljICpnaWMsIGNoYXIgcHJpb3JpdHkp Cit7CisgICAgUkVHX1dSSVRFMzIoUkVHKGdpY2MoZ2ljLCBHSUNDX1BNUikpLCBwcmlvcml0eSAm IDB4MDAwMDAwRkYpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnaWNfcmVhZGlhcihzdHJ1 Y3QgZ2ljICpnaWMpIHsKKyAgICByZXR1cm4gUkVHX1JFQUQzMihSRUcoZ2ljYyhnaWMsIEdJQ0Nf SUFSKSkpICYgMHgwMDAwMDNGRjsgLy8gSW50ZXJydXB0IElECit9CisKK3N0YXRpYyB2b2lkIGdp Y19lb2lyKHN0cnVjdCBnaWMgKmdpYywgdWludDMyX3QgaXJxKSB7CisgICAgUkVHX1dSSVRFMzIo UkVHKGdpY2MoZ2ljLCBHSUNDX0VPSVIpKSwgaXJxICYgMHgwMDAwMDNGRik7Cit9CisKKy8vRklY TUUgR2V0IGV2ZW50X2lycSBmcm9tIGR0CisjZGVmaW5lIEVWRU5UU19JUlEgMzEKKyNkZWZpbmUg VklSVFVBTFRJTUVSX0lSUSAyNworCitzdGF0aWMgdm9pZCBnaWNfaGFuZGxlcih2b2lkKSB7Cisg ICAgdW5zaWduZWQgaW50IGlycSA9IGdpY19yZWFkaWFyKCZnaWMpOworCisgICAgREVCVUcoIklS USByZWNlaXZlZCA6ICVpXG4iLCBpcnEpOworICAgIHN3aXRjaChpcnEpIHsKKyAgICBjYXNlIEVW RU5UU19JUlE6CisgICAgICAgIGRvX2h5cGVydmlzb3JfY2FsbGJhY2soTlVMTCk7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgVklSVFVBTFRJTUVSX0lSUToKKyAgICAgICAgdGltZXJfaGFuZGxl cigwLCBOVUxMLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVC VUcoIlVuaGFuZGxlZCBpcnFcbiIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBERUJV RygiRUlSUVxuIik7CisKKyAgICBnaWNfZW9pcigmZ2ljLCBpcnEpOworfQorCit2b2lkIGdpY19p bml0KHZvaWQpIHsKKyAgICBnaWMuZ2ljZF9iYXNlID0gTlVMTDsKKyAgICBpbnQgbm9kZSA9IDA7 CisgICAgaW50IGRlcHRoID0gMDsKKyAgICBmb3IgKDs7KQorICAgIHsKKyAgICAgICAgbm9kZSA9 IGZkdF9uZXh0X25vZGUoZGV2aWNlX3RyZWUsIG5vZGUsICZkZXB0aCk7CisgICAgICAgIGlmIChu b2RlIDw9IDAgfHwgZGVwdGggPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg KGZkdF9nZXRwcm9wKGRldmljZV90cmVlLCBub2RlLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBO VUxMKSkgeworICAgICAgICAgICAgaW50IGxlbiA9IDA7CisKKyAgICAgICAgICAgIGlmIChmZHRf bm9kZV9jaGVja19jb21wYXRpYmxlKGRldmljZV90cmVlLCBub2RlLCAiYXJtLGNvcnRleC1hMTUt Z2ljIikgJiYKKyAgICAgICAgICAgICAgICBmZHRfbm9kZV9jaGVja19jb21wYXRpYmxlKGRldmlj ZV90cmVlLCBub2RlLCAiYXJtLGNvcnRleC1hOS1naWMiKSAmJgorICAgICAgICAgICAgICAgIGZk dF9ub2RlX2NoZWNrX2NvbXBhdGlibGUoZGV2aWNlX3RyZWUsIG5vZGUsICJhcm0sY29ydGV4LWE3 LWdpYyIpKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJTa2lwcGluZyBpbmNvbXBhdGlibGUg aW50ZXJydXB0LWNvbnRyb2xsZXIgbm9kZVxuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IHVpbnQ2NF90ICpyZWcgPSBmZHRf Z2V0cHJvcChkZXZpY2VfdHJlZSwgbm9kZSwgInJlZyIsICZsZW4pOworICAgICAgICAgICAgaWYg KHJlZyA9PSBOVUxMIHx8IGxlbiAhPSAzMikgeworICAgICAgICAgICAgICAgIC8qIFRPRE86IHN1 cHBvcnQgb3RoZXIgZm9ybWF0cyAqLworICAgICAgICAgICAgICAgIHByaW50aygiQmFkICdyZWcn IHByb3BlcnR5OiAlcCAlZFxuIiwgcmVnLCBsZW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2ljLmdpY2RfYmFzZSA9IHRvX3ZpcnQoKGxv bmcpIGZkdDY0X3RvX2NwdShyZWdbMF0pKTsKKyAgICAgICAgICAgIGdpYy5naWNjX2Jhc2UgPSB0 b192aXJ0KChsb25nKSBmZHQ2NF90b19jcHUocmVnWzJdKSk7CisgICAgICAgICAgICBwcmludGso IkZvdW5kIEdJQzogZ2ljZF9iYXNlID0gJXAsIGdpY2NfYmFzZSA9ICVwXG4iLCBnaWMuZ2ljZF9i YXNlLCBnaWMuZ2ljY19iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg fQorICAgIGlmICghZ2ljLmdpY2RfYmFzZSkgeworICAgICAgICBwcmludGsoIkdJQyBub3QgZm91 bmQhXG4iKTsKKyAgICAgICAgQlVHKCk7CisgICAgfQorICAgIHdtYigpOworCisgICAgSVJRX2hh bmRsZXIgPSBnaWNfaGFuZGxlcjsKKworICAgIGdpY19kaXNhYmxlX2ludGVycnVwdHMoJmdpYyk7 CisgICAgZ2ljX2NwdV9zZXRfcHJpb3JpdHkoJmdpYywgMHhmZik7CisKKyAgICAvKiBNdXN0IGNh bGwgZ2ljX2VuYWJsZV9pbnRlcnJ1cHRzIGJlZm9yZSBlbmFibGluZyBpbmRpdmlkdWFsIGludGVy cnVwdHMsIG90aGVyd2lzZSBvdXIgSVJRIGhhbmRsZXIKKyAgICAgKiBnZXRzIGNhbGxlZCBlbmRs ZXNzbHkgd2l0aCBzcHVyaW91cyBpbnRlcnJ1cHRzLiAqLworICAgIGdpY19lbmFibGVfaW50ZXJy dXB0cygmZ2ljKTsKKworICAgIGdpY19lbmFibGVfaW50ZXJydXB0KCZnaWMsIEVWRU5UU19JUlEg LyogaW50ZXJydXB0IG51bWJlciAqLywgMHgxIC8qY3B1X3NldCovLCAxIC8qbGV2ZWxfc2Vuc2l0 aXZlKi8sIDAgLyogcHBpICovKTsKKyAgICBnaWNfZW5hYmxlX2ludGVycnVwdCgmZ2ljLCBWSVJU VUFMVElNRVJfSVJRIC8qIGludGVycnVwdCBudW1iZXIgKi8sIDB4MSAvKmNwdV9zZXQqLywgMSAv KmxldmVsX3NlbnNpdGl2ZSovLCAxIC8qIHBwaSAqLyk7Cit9CmRpZmYgLS1naXQgYS9leHRyYXMv bWluaS1vcy9hcmNoL2FybS9oeXBlcmNhbGxzMzIuUyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJt L2h5cGVyY2FsbHMzMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNzY2 MmQKLS0tIC9kZXYvbnVsbAorKysgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9oeXBlcmNhbGxz MzIuUwpAQCAtMCwwICsxLDc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBoeXBlcmNh bGwuUworICoKKyAqIFhlbiBoeXBlcmNhbGwgd3JhcHBlcnMKKyAqCisgKiBTdGVmYW5vIFN0YWJl bGxpbmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPiwgQ2l0cml4LCAyMDEyCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgb3IsIHdoZW4gZGlzdHJpYnV0ZWQKKyAqIHNlcGFyYXRlbHkg ZnJvbSB0aGUgTGludXgga2VybmVsIG9yIGluY29ycG9yYXRlZCBpbnRvIG90aGVyCisgKiBzb2Z0 d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb3VyY2UgZmlsZSAodGhlICJTb2Z0d2Fy ZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LAorICogbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRI RQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjZGVmaW5lIF9fSFlQRVJWSVNPUl9t ZW1vcnlfb3AgICAgICAgICAgICAxMgorI2RlZmluZSBfX0hZUEVSVklTT1JfeGVuX3ZlcnNpb24g ICAgICAgICAgMTcKKyNkZWZpbmUgX19IWVBFUlZJU09SX2NvbnNvbGVfaW8gICAgICAgICAgIDE4 CisjZGVmaW5lIF9fSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCAgICAgICAyMAorI2RlZmluZSBf X0hZUEVSVklTT1JfdmNwdV9vcCAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgX19IWVBFUlZJU09S X3hzbV9vcCAgICAgICAgICAgICAgIDI3CisjZGVmaW5lIF9fSFlQRVJWSVNPUl9zY2hlZF9vcCAg ICAgICAgICAgICAyOQorI2RlZmluZSBfX0hZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcCAgICAg MzIKKyNkZWZpbmUgX19IWVBFUlZJU09SX3BoeXNkZXZfb3AgICAgICAgICAgIDMzCisjZGVmaW5l IF9fSFlQRVJWSVNPUl9odm1fb3AgICAgICAgICAgICAgICAzNAorI2RlZmluZSBfX0hZUEVSVklT T1Jfc3lzY3RsICAgICAgICAgICAgICAgMzUKKyNkZWZpbmUgX19IWVBFUlZJU09SX2RvbWN0bCAg ICAgICAgICAgICAgIDM2CisKKyNkZWZpbmUgX19IVkMoaW1tMTYpIC5sb25nICgoMHhFMTQwMDA3 MCB8ICgoKGltbTE2KSAmIDB4RkZGMCkgPDwgNCkgfCAoKGltbTE2KSAmIDB4MDAwRikpICYgMHhG RkZGRkZGRikKKworI2RlZmluZSBYRU5fSU1NIDB4RUExCisKKyNkZWZpbmUgSFlQRVJDQUxMX1NJ TVBMRShoeXBlcmNhbGwpCQlcCisuZ2xvYmwgSFlQRVJWSVNPUl8jI2h5cGVyY2FsbDsJCQlcCisu YWxpZ24gNCwweDkwOwkJCQkJXAorSFlQRVJWSVNPUl8jI2h5cGVyY2FsbDoJCQkJXAorICAgICAg ICBtb3YgcjEyLCAjX19IWVBFUlZJU09SXyMjaHlwZXJjYWxsOwlcCisgICAgICAgIF9fSFZDKFhF Tl9JTU0pOwkJCQlcCisgICAgICAgIG1vdiBwYywgbHI7CisKKyNkZWZpbmUgX2h5cGVyY2FsbDAg SFlQRVJDQUxMX1NJTVBMRQorI2RlZmluZSBfaHlwZXJjYWxsMSBIWVBFUkNBTExfU0lNUExFCisj ZGVmaW5lIF9oeXBlcmNhbGwyIEhZUEVSQ0FMTF9TSU1QTEUKKyNkZWZpbmUgX2h5cGVyY2FsbDMg SFlQRVJDQUxMX1NJTVBMRQorI2RlZmluZSBfaHlwZXJjYWxsNCBIWVBFUkNBTExfU0lNUExFCisK K19oeXBlcmNhbGwyKHNjaGVkX29wKTsKK19oeXBlcmNhbGwyKG1lbW9yeV9vcCk7CitfaHlwZXJj YWxsMihldmVudF9jaGFubmVsX29wKTsKK19oeXBlcmNhbGwyKHhlbl92ZXJzaW9uKTsKK19oeXBl cmNhbGwzKGNvbnNvbGVfaW8pOworX2h5cGVyY2FsbDEocGh5c2Rldl9vcCk7CitfaHlwZXJjYWxs MyhncmFudF90YWJsZV9vcCk7CitfaHlwZXJjYWxsMyh2Y3B1X29wKTsKK19oeXBlcmNhbGwxKHN5 c2N0bCk7CitfaHlwZXJjYWxsMShkb21jdGwpOworX2h5cGVyY2FsbDIoaHZtX29wKTsKK19oeXBl cmNhbGwxKHhzbV9vcCk7CmRpZmYgLS1naXQgYS9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9taW5p b3MtYXJtMzIubGRzIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vbWluaW9zLWFybTMyLmxkcwpu ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMThjYTU1Ci0tLSAvZGV2L251bGwK KysrIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vbWluaW9zLWFybTMyLmxkcwpAQCAtMCwwICsx LDc1IEBACitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAu ID0gMHg0MDgwMDA7CisgIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAq LworICAudGV4dCA6IHsKKwkqKC50ZXh0KQorCSooLmdudS53YXJuaW5nKQorCX0gPSAweDkwOTAK KworICBfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IHNlY3Rpb24gKi8KKworICAucm9kYXRh IDogeyAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSB9CisgIC4gPSBBTElHTig0MDk2KTsKKyAgX2Vy b2RhdGEgPSAuOworCisgIC8qIG5ld2xpYiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KKyAg LiA9IEFMSUdOKDMyIC8gOCk7CisgIFBST1ZJREUgKF9fcHJlaW5pdF9hcnJheV9zdGFydCA9IC4p OworICAucHJlaW5pdF9hcnJheSAgICAgOiB7ICooLnByZWluaXRfYXJyYXkpIH0KKyAgUFJPVklE RSAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworICBQUk9WSURFIChfX2luaXRfYXJyYXlfc3Rh cnQgPSAuKTsKKyAgLmluaXRfYXJyYXkgICAgIDogeyAqKC5pbml0X2FycmF5KSB9CisgIFBST1ZJ REUgKF9faW5pdF9hcnJheV9lbmQgPSAuKTsKKyAgUFJPVklERSAoX19maW5pX2FycmF5X3N0YXJ0 ID0gLik7CisgIC5maW5pX2FycmF5ICAgICA6IHsgKiguZmluaV9hcnJheSkgfQorICBQUk9WSURF IChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CisKKyAgLmN0b3JzIDogeworICAgICAgICBfX0NUT1Jf TElTVF9fID0gLjsKKyAgICAgICAgKiguY3RvcnMpCisJQ09OU1RSVUNUT1JTCisgICAgICAgIExP TkcoMCkKKyAgICAgICAgX19DVE9SX0VORF9fID0gLjsKKyAgICAgICAgfQorCisgIC5kdG9ycyA6 IHsKKyAgICAgICAgX19EVE9SX0xJU1RfXyA9IC47CisgICAgICAgICooLmR0b3JzKQorICAgICAg ICBMT05HKDApCisgICAgICAgIF9fRFRPUl9FTkRfXyA9IC47CisgICAgICAgIH0KKworICAuZGF0 YSA6IHsJCQkvKiBEYXRhICovCisJKiguZGF0YSkKKwl9CisKKyAgX2VkYXRhID0gLjsJCQkvKiBF bmQgb2YgZGF0YSBzZWN0aW9uICovCisKKyAgLyogTm90aGluZyBhZnRlciBoZXJlIGlzIGluY2x1 ZGVkIGluIHRoZSB6SW1hZ2UncyBzaXplICovCisKKyAgX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNT ICovCisgIC5ic3MgOiB7CisJKiguYnNzKQorICAgICAgICAqKC5hcHAuYnNzKQorCX0KKyAgX2Vu ZCA9IC4gOworCisgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLworICAvRElTQ0FSRC8g OiB7CisJKigudGV4dC5leGl0KQorCSooLmRhdGEuZXhpdCkKKwkqKC5leGl0Y2FsbC5leGl0KQor CX0KKworICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAwIDogeyAq KC5zdGFiKSB9CisgIC5zdGFic3RyIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLnN0YWIuZXhjbCAw IDogeyAqKC5zdGFiLmV4Y2wpIH0KKyAgLnN0YWIuZXhjbHN0ciAwIDogeyAqKC5zdGFiLmV4Y2xz dHIpIH0KKyAgLnN0YWIuaW5kZXggMCA6IHsgKiguc3RhYi5pbmRleCkgfQorICAuc3RhYi5pbmRl eHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9CisgIC5jb21tZW50IDAgOiB7ICooLmNvbW1l bnQpIH0KK30KZGlmZiAtLWdpdCBhL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL21tLmMgYi9leHRy YXMvbWluaS1vcy9hcmNoL2FybS9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjVlMzhhODgKLS0tIC9kZXYvbnVsbAorKysgYi9leHRyYXMvbWluaS1vcy9hcmNoL2FybS9t bS5jCkBAIC0wLDAgKzEsMTM0IEBACisjaW5jbHVkZSA8Y29uc29sZS5oPgorI2luY2x1ZGUgPHhl bi9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhcmNoX21tLmg+CisjaW5jbHVkZSA8bWluaS1vcy9oeXBl cnZpc29yLmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8bGliLmg+CisKK3Vuc2ln bmVkIGxvbmcgYWxsb2NhdGVfb25kZW1hbmQodW5zaWduZWQgbG9uZyBuLCB1bnNpZ25lZCBsb25n IGFsaWdubWVudCkKK3sKKyAgICAvLyBGSVhNRQorICAgIEJVRygpOworfQorCit2b2lkIGFyY2hf aW5pdF9tbSh1bnNpZ25lZCBsb25nICpzdGFydF9wZm5fcCwgdW5zaWduZWQgbG9uZyAqbWF4X3Bm bl9wKQoreworICAgIGludCBtZW1vcnk7CisgICAgaW50IHByb3BfbGVuID0gMDsKKyAgICBjb25z dCB1aW50NjRfdCAqcmVnczsKKworICAgIHByaW50aygiICAgIF90ZXh0OiAlcChWQSlcbiIsICZf dGV4dCk7CisgICAgcHJpbnRrKCIgICAgX2V0ZXh0OiAlcChWQSlcbiIsICZfZXRleHQpOworICAg IHByaW50aygiICAgIF9lcm9kYXRhOiAlcChWQSlcbiIsICZfZXJvZGF0YSk7CisgICAgcHJpbnRr KCIgICAgX2VkYXRhOiAlcChWQSlcbiIsICZfZWRhdGEpOworICAgIHByaW50aygiICAgIHN0YWNr IHN0YXJ0OiAlcChWQSlcbiIsIHN0YWNrKTsKKyAgICBwcmludGsoIiAgICBfZW5kOiAlcChWQSlc biIsICZfZW5kKTsKKworICAgIGlmIChmZHRfbnVtX21lbV9yc3YoZGV2aWNlX3RyZWUpICE9IDAp CisgICAgICAgIHByaW50aygiV0FSTklORzogcmVzZXJ2ZWQgbWVtb3J5IG5vdCBzdXBwb3J0ZWQh XG4iKTsKKworICAgIG1lbW9yeSA9IGZkdF9ub2RlX29mZnNldF9ieV9wcm9wX3ZhbHVlKGRldmlj ZV90cmVlLCAtMSwgImRldmljZV90eXBlIiwgIm1lbW9yeSIsIHNpemVvZigibWVtb3J5IikpOwor ICAgIGlmIChtZW1vcnkgPCAwKSB7CisgICAgICAgIHByaW50aygiTm8gbWVtb3J5IGZvdW5kIGlu IEZEVCFcbiIpOworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICAvKiBYZW4gd2lsbCBhbHdh eXMgcHJvdmlkZSB1cyBhdCBsZWFzdCBvbmUgYmFuayBvZiBtZW1vcnkuCisgICAgICogTWluaS1P UyB3aWxsIHVzZSB0aGUgZmlyc3QgYmFuayBmb3IgdGhlIHRpbWUtYmVpbmcuICovCisgICAgcmVn cyA9IGZkdF9nZXRwcm9wKGRldmljZV90cmVlLCBtZW1vcnksICJyZWciLCAmcHJvcF9sZW4pOwor ICAgIGlmIChyZWdzID09IE5VTEwgfHwgcHJvcF9sZW4gIT0gMTYpIHsKKyAgICAgICAgLyogVE9E Tzogc3VwcG9ydCBvdGhlciBmb3JtYXRzICovCisgICAgICAgIHByaW50aygiQmFkICdyZWcnIHBy b3BlcnR5OiAlcCAlZFxuIiwgcmVncywgcHJvcF9sZW4pOworICAgICAgICBCVUcoKTsKKyAgICB9 CisKKyAgICB1bnNpZ25lZCBpbnQgZW5kID0gKHVuc2lnbmVkIGludCkgJl9lbmQ7CisgICAgdW5z aWduZWQgaW50IG1lbV9iYXNlID0gZmR0NjRfdG9fY3B1KHJlZ3NbMF0pOworICAgIHVuc2lnbmVk IGludCBtZW1fc2l6ZSA9IGZkdDY0X3RvX2NwdShyZWdzWzFdKTsKKyAgICBwcmludGsoIkZvdW5k IG1lbW9yeSBhdCAlcCAobGVuIDB4JXgpXG4iLCBtZW1fYmFzZSwgbWVtX3NpemUpOworCisgICAg QlVHX09OKHRvX3ZpcnQobWVtX2Jhc2UpID4gKHZvaWQgKikgJl90ZXh0KTsgICAgICAgICAgLyog T3VyIGltYWdlIGlzbid0IGluIG91ciBSQU0hICovCisgICAgKnN0YXJ0X3Bmbl9wID0gUEZOX1VQ KHRvX3BoeXMoZW5kKSk7CisgICAgaW50IGhlYXBfbGVuID0gbWVtX3NpemUgLSAoUEZOX1BIWVMo KnN0YXJ0X3Bmbl9wKSAtIG1lbV9iYXNlKTsKKyAgICAqbWF4X3Bmbl9wID0gKnN0YXJ0X3Bmbl9w ICsgUEZOX0RPV04oaGVhcF9sZW4pOworCisgICAgcHJpbnRrKCJVc2luZyBwYWdlcyAlZCB0byAl ZCBhcyBmcmVlIHNwYWNlIGZvciBoZWFwLlxuIiwgKnN0YXJ0X3Bmbl9wLCAqbWF4X3Bmbl9wKTsK KworICAgIC8qIFRoZSBkZXZpY2UgdHJlZSBpcyBwcm9iYWJseSBpbiBtZW1vcnkgdGhhdCB3ZSdy ZSBhYm91dCB0byBoYW5kIG92ZXIgdG8gdGhlIHBhZ2UKKyAgICAgKiBhbGxvY2F0b3IsIHNvIG1v dmUgaXQgdG8gdGhlIGVuZCBhbmQgcmVzZXJ2ZSB0aGF0IHNwYWNlLgorICAgICAqLworICAgIGlu dCBmZHRfc2l6ZSA9IGZkdF90b3RhbHNpemUoZGV2aWNlX3RyZWUpOworICAgIHZvaWQgKm5ld19k ZXZpY2VfdHJlZSA9IHRvX3ZpcnQoKCgqbWF4X3Bmbl9wIDw8IFBBR0VfU0hJRlQpIC0gZmR0X3Np emUpICYgUEFHRV9NQVNLKTsKKyAgICBpZiAobmV3X2RldmljZV90cmVlICE9IGRldmljZV90cmVl KSB7CisgICAgICAgIG1lbW1vdmUobmV3X2RldmljZV90cmVlLCBkZXZpY2VfdHJlZSwgZmR0X3Np emUpOworICAgIH0KKyAgICBkZXZpY2VfdHJlZSA9IG5ld19kZXZpY2VfdHJlZTsKKyAgICAqbWF4 X3Bmbl9wID0gdG9fcGh5cyhuZXdfZGV2aWNlX3RyZWUpID4+IFBBR0VfU0hJRlQ7Cit9CisKK3Zv aWQgYXJjaF9pbml0X3AybSh1bnNpZ25lZCBsb25nIG1heF9wZm4pCit7Cit9CisKK3ZvaWQgYXJj aF9pbml0X2RlbWFuZF9tYXBwaW5nX2FyZWEodW5zaWduZWQgbG9uZyBjdXJfcGZuKQoreworfQor CisvKiBHZXQgWGVuJ3Mgc3VnZ2VzdGVkIHBoeXNpY2FsIHBhZ2UgYXNzaWdubWVudHMgZm9yIHRo ZSBncmFudCB0YWJsZS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9nbnR0YWJfYmFzZSh2 b2lkKQoreworICAgIGludCBoeXBlcnZpc29yOworICAgIGludCBsZW4gPSAwOworICAgIGNvbnN0 IHVpbnQ2NF90ICpyZWdzOworICAgIHVuc2lnbmVkIGludCBnbnR0YWJfYmFzZTsKKworICAgIGh5 cGVydmlzb3IgPSBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0aWJsZShkZXZpY2VfdHJlZSwgLTEs ICJ4ZW4seGVuIik7CisgICAgQlVHX09OKGh5cGVydmlzb3IgPCAwKTsKKworICAgIHJlZ3MgPSBm ZHRfZ2V0cHJvcChkZXZpY2VfdHJlZSwgaHlwZXJ2aXNvciwgInJlZyIsICZsZW4pOworICAgIGlm IChyZWdzID09IE5VTEwgfHwgbGVuICE9IDE2KSB7CisgICAgICAgIC8qIFRPRE86IHN1cHBvcnQg b3RoZXIgZm9ybWF0cyAqLworICAgICAgICBwcmludGsoIkJhZCAncmVnJyBwcm9wZXJ0eTogJXAg JWRcbiIsIHJlZ3MsIGxlbik7CisgICAgICAgIEJVRygpOworICAgIH0KKworICAgIGdudHRhYl9i YXNlID0gZmR0NjRfdG9fY3B1KHJlZ3NbMF0pOworCisgICAgcHJpbnRrKCJGRFQgc3VnZ2VzdHMg Z3JhbnQgdGFibGUgYmFzZSAlbHhcbiIsIGdudHRhYl9iYXNlKTsKKworICAgIHJldHVybiBnbnR0 YWJfYmFzZTsKK30KKworZ3JhbnRfZW50cnlfdCAqYXJjaF9pbml0X2dudHRhYihpbnQgbnJfZ3Jh bnRfZnJhbWVzKQoreworICAgIHN0cnVjdCB4ZW5fYWRkX3RvX3BoeXNtYXAgeGF0cDsKKyAgICBz dHJ1Y3QgZ250dGFiX3NldHVwX3RhYmxlIHNldHVwOworICAgIHhlbl9wZm5fdCBmcmFtZXNbbnJf Z3JhbnRfZnJhbWVzXTsKKyAgICB1bnNpZ25lZCBsb25nIGdudHRhYl90YWJsZTsKKyAgICBpbnQg aSwgcmM7CisKKyAgICBnbnR0YWJfdGFibGUgPSBnZXRfZ250dGFiX2Jhc2UoKTsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBucl9ncmFudF9mcmFtZXM7IGkrKykKKyAgICB7CisgICAgICAgIHhhdHAu ZG9taWQgPSBET01JRF9TRUxGOworICAgICAgICB4YXRwLnNpemUgPSAwOyAgICAgIC8qIFNlZW1z IHRvIGJlIHVudXNlZCAqLworICAgICAgICB4YXRwLnNwYWNlID0gWEVOTUFQU1BBQ0VfZ3JhbnRf dGFibGU7CisgICAgICAgIHhhdHAuaWR4ID0gaTsKKyAgICAgICAgeGF0cC5ncGZuID0gKGdudHRh Yl90YWJsZSA+PiBQQUdFX1NISUZUKSArIGk7CisgICAgICAgIHJjID0gSFlQRVJWSVNPUl9tZW1v cnlfb3AoWEVOTUVNX2FkZF90b19waHlzbWFwLCAmeGF0cCk7CisgICAgICAgIEJVR19PTihyYyAh PSAwKTsKKyAgICB9CisKKyAgICBzZXR1cC5kb20gPSBET01JRF9TRUxGOworICAgIHNldHVwLm5y X2ZyYW1lcyA9IG5yX2dyYW50X2ZyYW1lczsKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzZXR1 cC5mcmFtZV9saXN0LCBmcmFtZXMpOworICAgIEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05U VEFCT1Bfc2V0dXBfdGFibGUsICZzZXR1cCwgMSk7CisgICAgaWYgKHNldHVwLnN0YXR1cyAhPSAw KQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJHTlRUQUJPUF9zZXR1cF90YWJsZSBmYWlsZWQ7IHN0 YXR1cyA9ICVkXG4iLCBzZXR1cC5zdGF0dXMpOworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAg ICByZXR1cm4gdG9fdmlydChnbnR0YWJfdGFibGUpOworfQpkaWZmIC0tZ2l0IGEvZXh0cmFzL21p bmktb3MvYXJjaC9hcm0vc2NoZWQuYyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3NjaGVkLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwNmMxYgotLS0gL2Rldi9udWxs CisrKyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3NjaGVkLmMKQEAgLTAsMCArMSwzNyBAQAor I2luY2x1ZGUgPG1pbmktb3Mvc2NoZWQuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL3htYWxsb2MuaD4K Kwordm9pZCBhcm1fc3RhcnRfdGhyZWFkKHZvaWQpOworCisvKiBBcmNoaXRlY3R1cmUgc3BlY2lm aWMgc2V0dXAgb2YgdGhyZWFkIGNyZWF0aW9uICovCitzdHJ1Y3QgdGhyZWFkKiBhcmNoX2NyZWF0 ZV90aHJlYWQoY2hhciAqbmFtZSwgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkICopLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCit7CisgICAgc3RydWN0IHRocmVh ZCAqdGhyZWFkOworCisgICAgdGhyZWFkID0geG1hbGxvYyhzdHJ1Y3QgdGhyZWFkKTsKKyAgICAv KiBXZSBjYW4ndCB1c2UgbGF6eSBhbGxvY2F0aW9uIGhlcmUgc2luY2UgdGhlIHRyYXAgaGFuZGxl ciBydW5zIG9uIHRoZSBzdGFjayAqLworICAgIHRocmVhZC0+c3RhY2sgPSAoY2hhciAqKWFsbG9j X3BhZ2VzKFNUQUNLX1NJWkVfUEFHRV9PUkRFUik7CisgICAgdGhyZWFkLT5uYW1lID0gbmFtZTsK KyAgICBwcmludGsoIlRocmVhZCBcIiVzXCI6IHBvaW50ZXI6IDB4JWx4LCBzdGFjazogMHglbHhc biIsIG5hbWUsIHRocmVhZCwKKyAgICAgICAgICAgIHRocmVhZC0+c3RhY2spOworCisgICAgLyog U2F2ZSBwb2ludGVyIHRvIHRoZSB0aHJlYWQgb24gdGhlIHN0YWNrLCB1c2VkIGJ5IGN1cnJlbnQg bWFjcm8gKi8KKyAgICAqKCh1bnNpZ25lZCBsb25nICopdGhyZWFkLT5zdGFjaykgPSAodW5zaWdu ZWQgbG9uZyl0aHJlYWQ7CisKKyAgICAvKiBQdXNoIHRoZSBkZXRhaWxzIHRvIHBhc3MgdG8gYXJt X3N0YXJ0X3RocmVhZCBvbnRvIHRoZSBzdGFjayAqLworICAgIGludCAqc3AgPSAoaW50ICopICh0 aHJlYWQtPnN0YWNrICsgU1RBQ0tfU0laRSk7CisgICAgKigtLXNwKSA9IChpbnQpIGZ1bmN0aW9u OworICAgICooLS1zcCkgPSAoaW50KSBkYXRhOworICAgIHRocmVhZC0+c3AgPSAodW5zaWduZWQg bG9uZykgc3A7CisKKyAgICB0aHJlYWQtPmlwID0gKHVuc2lnbmVkIGxvbmcpIGFybV9zdGFydF90 aHJlYWQ7CisKKyAgICByZXR1cm4gdGhyZWFkOworfQorCit2b2lkIHJ1bl9pZGxlX3RocmVhZCh2 b2lkKQoreworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92IHNwLCAlMDsgbW92IHBjLCAl MSI6OiJyIihpZGxlX3RocmVhZC0+c3ApLCAiciIoaWRsZV90aHJlYWQtPmlwKSk7CisgICAgLyog TmV2ZXIgYXJyaXZlIGhlcmUhICovCit9CmRpZmYgLS1naXQgYS9leHRyYXMvbWluaS1vcy9hcmNo L2FybS9zZXR1cC5jIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vc2V0dXAuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFlNTlmCi0tLSAvZGV2L251bGwKKysrIGIvZXh0 cmFzL21pbmktb3MvYXJjaC9hcm0vc2V0dXAuYwpAQCAtMCwwICsxLDExNiBAQAorI2luY2x1ZGUg PG1pbmktb3Mvb3MuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL2tlcm5lbC5oPgorI2luY2x1ZGUgPG1p bmktb3MvZ2ljLmg+CisjaW5jbHVkZSA8eGVuL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9tZW1vcnku aD4KKyNpbmNsdWRlIDx4ZW4vaHZtL3BhcmFtcy5oPgorI2luY2x1ZGUgPGFyY2hfbW0uaD4KKyNp bmNsdWRlIDxsaWJmZHQuaD4KKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHN0YXJ0 LW9mLWRheSBpbmZvLCBzdWNoIGFzIHBhZ2V0YWJsZSBiYXNlIHBvaW50ZXIsCisgKiBhZGRyZXNz IG9mIHRoZSBzaGFyZWRfaW5mbyBzdHJ1Y3R1cmUsIGFuZCB0aGluZ3MgbGlrZSB0aGF0LgorICog T24geDg2LCB0aGUgaHlwZXJ2aXNvciBwYXNzZXMgaXQgdG8gdXMuIE9uIEFSTSwgd2UgZmlsbCBp dCBpbiBvdXJzZWx2ZXMuCisgKi8KK3VuaW9uIHN0YXJ0X2luZm9fdW5pb24gc3RhcnRfaW5mb191 bmlvbjsKKworLyoKKyAqIFNoYXJlZCBwYWdlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGh5 cGVydmlzb3IuCisgKiBFdmVudHMgZmxhZ3MgZ28gaGVyZSwgZm9yIGV4YW1wbGUuCisgKi8KK3No YXJlZF9pbmZvX3QgKkhZUEVSVklTT1Jfc2hhcmVkX2luZm87CisKK2V4dGVybiBjaGFyIHNoYXJl ZF9pbmZvX3BhZ2VbUEFHRV9TSVpFXTsKKwordm9pZCAqZGV2aWNlX3RyZWU7CisKK3N0YXRpYyBp bnQgaHZtX2dldF9wYXJhbWV0ZXIoaW50IGlkeCwgdWludDY0X3QgKnZhbHVlKQoreworICAgIHN0 cnVjdCB4ZW5faHZtX3BhcmFtIHhodjsKKyAgICBpbnQgcmV0OworCisgICAgeGh2LmRvbWlkID0g RE9NSURfU0VMRjsKKyAgICB4aHYuaW5kZXggPSBpZHg7CisgICAgcmV0ID0gSFlQRVJWSVNPUl9o dm1fb3AoSFZNT1BfZ2V0X3BhcmFtLCAmeGh2KTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAg ICBCVUcoKTsKKyAgICB9CisgICAgKnZhbHVlID0geGh2LnZhbHVlOworICAgIHJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jb25zb2xlKHZvaWQpCit7CisgICAgdWludDY0X3QgdiA9 IC0xOworCisgICAgaHZtX2dldF9wYXJhbWV0ZXIoSFZNX1BBUkFNX0NPTlNPTEVfRVZUQ0hOLCAm dik7CisgICAgc3RhcnRfaW5mby5jb25zb2xlLmRvbVUuZXZ0Y2huID0gdjsKKworICAgIGh2bV9n ZXRfcGFyYW1ldGVyKEhWTV9QQVJBTV9DT05TT0xFX1BGTiwgJnYpOworICAgIHN0YXJ0X2luZm8u Y29uc29sZS5kb21VLm1mbiA9IHY7CisKKyAgICBwcmludGsoIkNvbnNvbGUgaXMgb24gcG9ydCAl ZFxuIiwgc3RhcnRfaW5mby5jb25zb2xlLmRvbVUuZXZ0Y2huKTsKKyAgICBwcmludGsoIkNvbnNv bGUgcmluZyBpcyBhdCBtZm4gJXhcbiIsIHN0YXJ0X2luZm8uY29uc29sZS5kb21VLm1mbik7Cit9 CisKK3ZvaWQgZ2V0X3hlbmJ1cyh2b2lkKQoreworICAgIHVpbnQ2NF90IHZhbHVlOworCisgICAg aWYgKGh2bV9nZXRfcGFyYW1ldGVyKEhWTV9QQVJBTV9TVE9SRV9FVlRDSE4sICZ2YWx1ZSkpCisg ICAgICAgIEJVRygpOworCisgICAgc3RhcnRfaW5mby5zdG9yZV9ldnRjaG4gPSAoaW50KXZhbHVl OworCisgICAgaWYoaHZtX2dldF9wYXJhbWV0ZXIoSFZNX1BBUkFNX1NUT1JFX1BGTiwgJnZhbHVl KSkKKyAgICAgICAgQlVHKCk7CisgICAgc3RhcnRfaW5mby5zdG9yZV9tZm4gPSAodW5zaWduZWQg bG9uZyl2YWx1ZTsKK30KKworLyoKKyAqIElOSVRJQUwgQyBFTlRSWSBQT0lOVC4KKyAqLwordm9p ZCBhcmNoX2luaXQodm9pZCAqZHRiX3BvaW50ZXIpCit7CisgICAgc3RydWN0IHhlbl9hZGRfdG9f cGh5c21hcCB4YXRwOworICAgIGludCByOworCisgICAgbWVtc2V0KCZfX2Jzc19zdGFydCwgMCwg Jl9lbmQgLSAmX19ic3Nfc3RhcnQpOworCisgICAgeHByaW50aygiVmlydHVhbCAtPiBwaHlzaWNh bCBvZmZzZXQgPSAleFxuIiwgcGh5c2ljYWxfYWRkcmVzc19vZmZzZXQpOworCisgICAgeHByaW50 aygiQ2hlY2tpbmcgRFRCIGF0ICV4Li4uXG4iLCBkdGJfcG9pbnRlcik7CisKKyAgICBpZiAoKHIg PSBmZHRfY2hlY2tfaGVhZGVyKGR0Yl9wb2ludGVyKSkpIHsKKyAgICAgICAgeHByaW50aygiSW52 YWxpZCBEVEIgZnJvbSBYZW46ICVzXG4iLCBmZHRfc3RyZXJyb3IocikpOworICAgICAgICBCVUco KTsKKyAgICB9CisgICAgZGV2aWNlX3RyZWUgPSBkdGJfcG9pbnRlcjsKKworICAgIC8qIE1hcCBz aGFyZWRfaW5mbyBwYWdlICovCisgICAgeGF0cC5kb21pZCA9IERPTUlEX1NFTEY7CisgICAgeGF0 cC5pZHggPSAwOworICAgIHhhdHAuc3BhY2UgPSBYRU5NQVBTUEFDRV9zaGFyZWRfaW5mbzsKKyAg ICB4YXRwLmdwZm4gPSB2aXJ0X3RvX3BmbihzaGFyZWRfaW5mb19wYWdlKTsKKyAgICBpZiAoSFlQ RVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX2FkZF90b19waHlzbWFwLCAmeGF0cCkgIT0gMCkKKyAg ICAgICAgQlVHKCk7CisgICAgSFlQRVJWSVNPUl9zaGFyZWRfaW5mbyA9IChzdHJ1Y3Qgc2hhcmVk X2luZm8gKilzaGFyZWRfaW5mb19wYWdlOworCisgICAgLyogRmlsbCBpbiBzdGFydF9pbmZvICov CisgICAgZ2V0X2NvbnNvbGUoKTsKKyAgICBnZXRfeGVuYnVzKCk7CisKKyAgICBnaWNfaW5pdCgp OworCisgICAgc3RhcnRfa2VybmVsKCk7Cit9CisKK3ZvaWQKK2FyY2hfZmluaSh2b2lkKQorewor fQorCit2b2lkCithcmNoX2RvX2V4aXQodm9pZCkKK3sKK30KZGlmZiAtLWdpdCBhL2V4dHJhcy9t aW5pLW9zL2FyY2gvYXJtL3RpbWUuYyBiL2V4dHJhcy9taW5pLW9zL2FyY2gvYXJtL3RpbWUuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTIyYWE5Ci0tLSAvZGV2L251bGwK KysrIGIvZXh0cmFzL21pbmktb3MvYXJjaC9hcm0vdGltZS5jCkBAIC0wLDAgKzEsMjAyIEBACisj aW5jbHVkZSA8bWluaS1vcy9vcy5oPgorI2luY2x1ZGUgPG1pbmktb3MvaHlwZXJ2aXNvci5oPgor I2luY2x1ZGUgPG1pbmktb3MvZXZlbnRzLmg+CisjaW5jbHVkZSA8bWluaS1vcy90cmFwcy5oPgor I2luY2x1ZGUgPG1pbmktb3MvdHlwZXMuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL3RpbWUuaD4KKyNp bmNsdWRlIDxtaW5pLW9zL2xpYi5oPgorCisvLyNkZWZpbmUgVlRJTUVSX0RFQlVHCisjaWZkZWYg VlRJTUVSX0RFQlVHCisjZGVmaW5lIERFQlVHKF9mLCBfYS4uLikgXAorICAgIHByaW50aygiTUlO SV9PUyhmaWxlPXZ0aW1lci5jLCBsaW5lPSVkKSAiIF9mICwgX19MSU5FX18sICMjIF9hKQorI2Vs c2UKKyNkZWZpbmUgREVCVUcoX2YsIF9hLi4uKSAgICAoKHZvaWQpMCkKKyNlbmRpZgorCisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiBUaW1lIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0 YXRpYyB1aW50NjRfdCBjbnR2Y3RfYXRfaW5pdDsKK3N0YXRpYyB1aW50MzJfdCBjb3VudGVyX2Zy ZXE7CisKKy8qIENvbXB1dGUgd2l0aCA5NiBiaXQgaW50ZXJtZWRpYXRlIHJlc3VsdDogKGEqYikv YyAqLwordWludDY0X3QgbXVsZGl2NjQodWludDY0X3QgYSwgdWludDMyX3QgYiwgdWludDMyX3Qg YykKK3sKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQ2NF90IGxsOworICAgICAgICBzdHJ1Y3Qg eworICAgICAgICAgICAgdWludDMyX3QgbG93LCBoaWdoOworICAgICAgICB9IGw7CisgICAgfSB1 LCByZXM7CisgICAgdWludDY0X3QgcmwsIHJoOworCisgICAgdS5sbCA9IGE7CisgICAgcmwgPSAo dWludDY0X3QpdS5sLmxvdyAqICh1aW50NjRfdCliOworICAgIHJoID0gKHVpbnQ2NF90KXUubC5o aWdoICogKHVpbnQ2NF90KWI7CisgICAgcmggKz0gKHJsID4+IDMyKTsKKyAgICByZXMubC5oaWdo ID0gcmggLyBjOworICAgIHJlcy5sLmxvdyA9ICgoKHJoICUgYykgPDwgMzIpICsgKHJsICYgMHhm ZmZmZmZmZikpIC8gYzsKKyAgICByZXR1cm4gcmVzLmxsOworfQorCitzdGF0aWMgaW5saW5lIHNf dGltZV90IHRpY2tzX3RvX25zKHVpbnQ2NF90IHRpY2tzKQoreworICAgIHJldHVybiBtdWxkaXY2 NCh0aWNrcywgU0VDT05EUygxKSwgY291bnRlcl9mcmVxKTsKK30KKworc3RhdGljIGlubGluZSB1 aW50NjRfdCBuc190b190aWNrcyhzX3RpbWVfdCBucykKK3sKKyAgICByZXR1cm4gbXVsZGl2NjQo bnMsIGNvdW50ZXJfZnJlcSwgU0VDT05EUygxKSk7Cit9CisKKy8qIFRoZXNlIGFyZSBwZXJpZGlj YWxseSB1cGRhdGVkIGluIHNoYXJlZF9pbmZvLCBhbmQgdGhlbiBjb3BpZWQgaGVyZS4gKi8KK3N0 cnVjdCBzaGFkb3dfdGltZV9pbmZvIHsKKyAgICB1aW50NjRfdCB0c2NfdGltZXN0YW1wOyAgICAg LyogVFNDIGF0IGxhc3QgdXBkYXRlIG9mIHRpbWUgdmFscy4gICovCisgICAgdWludDY0X3Qgc3lz dGVtX3RpbWVzdGFtcDsgIC8qIFRpbWUsIGluIG5hbm9zZWNzLCBzaW5jZSBib290LiAgICAqLwor ICAgIHVpbnQzMl90IHRzY190b19uc2VjX211bDsKKyAgICB1aW50MzJfdCB0c2NfdG9fdXNlY19t dWw7CisgICAgaW50IHRzY19zaGlmdDsKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworfTsKK3N0YXRp YyBzdHJ1Y3QgdGltZXNwZWMgc2hhZG93X3RzOworc3RhdGljIHVpbnQzMl90IHNoYWRvd190c192 ZXJzaW9uOworCitzdGF0aWMgc3RydWN0IHNoYWRvd190aW1lX2luZm8gc2hhZG93OworCitzdGF0 aWMgdm9pZCBnZXRfdGltZV92YWx1ZXNfZnJvbV94ZW4odm9pZCkKK3sKKyAgICBzdHJ1Y3QgdmNw dV90aW1lX2luZm8gICAgKnNyYyA9ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2luZm9b MF0udGltZTsKKworICAgICBkbyB7CisgICAgICAgIHNoYWRvdy52ZXJzaW9uID0gc3JjLT52ZXJz aW9uOworICAgICAgICBybWIoKTsKKyAgICAgICAgc2hhZG93LnRzY190aW1lc3RhbXAgICAgID0g c3JjLT50c2NfdGltZXN0YW1wOworICAgICAgICBzaGFkb3cuc3lzdGVtX3RpbWVzdGFtcCAgPSBz cmMtPnN5c3RlbV90aW1lOworICAgICAgICBzaGFkb3cudHNjX3RvX25zZWNfbXVsICAgPSBzcmMt PnRzY190b19zeXN0ZW1fbXVsOworICAgICAgICBzaGFkb3cudHNjX3NoaWZ0ICAgICAgICAgPSBz cmMtPnRzY19zaGlmdDsKKyAgICAgICAgcm1iKCk7CisgICAgfQorICAgIHdoaWxlICgoc3JjLT52 ZXJzaW9uICYgMSkgfCAoc2hhZG93LnZlcnNpb24gXiBzcmMtPnZlcnNpb24pKTsKKworICAgIHNo YWRvdy50c2NfdG9fdXNlY19tdWwgPSBzaGFkb3cudHNjX3RvX25zZWNfbXVsIC8gMTAwMDsKK30K Kworc3RhdGljIGlubGluZSB1aW50NjRfdCByZWFkX3ZpcnR1YWxfY291bnQodm9pZCkKK3sKKyAg ICB1aW50MzJfdCBjX2xvLCBjX2hpOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJpc2I7bXJy YyBwMTUsIDEsICUwLCAlMSwgYzE0IjoiPXIiKGNfbG8pLCAiPXIiKGNfaGkpKTsKKyAgICByZXR1 cm4gKCgodWludDY0X3QpIGNfaGkpIDw8IDMyKSArIGNfbG87Cit9CisKKy8qIG1vbm90b25pY19j bG9jaygpOiByZXR1cm5zICMgb2YgbmFub3NlY29uZHMgcGFzc2VkIHNpbmNlIHRpbWVfaW5pdCgp CisgKiAgICAgICAgTm90ZTogVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCB0byByZXR1cm4gYWNj dXJhdGUKKyAqICAgICAgICB0aW1lIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgbXVsdGlwbGUgdGlt ZXIgdGlja3MuCisgKi8KK3VpbnQ2NF90IG1vbm90b25pY19jbG9jayh2b2lkKQoreworICAgIHNf dGltZV90IHRpbWUgPSB0aWNrc190b19ucyhyZWFkX3ZpcnR1YWxfY291bnQoKSAtIGNudHZjdF9h dF9pbml0KTsKKyAgICAvL3ByaW50aygibW9ub3RvbmljX2Nsb2NrOiAlbGx1ICglbGx1KVxuIiwg dGltZSwgTlNFQ19UT19TRUModGltZSkpOworICAgIHJldHVybiB0aW1lOworfQorCitzdGF0aWMg dm9pZCB1cGRhdGVfd2FsbGNsb2NrKHZvaWQpCit7CisgICAgc2hhcmVkX2luZm9fdCAqcyA9IEhZ UEVSVklTT1Jfc2hhcmVkX2luZm87CisKKyAgICBkbyB7CisgICAgICAgIHNoYWRvd190c192ZXJz aW9uID0gcy0+d2NfdmVyc2lvbjsKKyAgICAgICAgcm1iKCk7CisgICAgICAgIHNoYWRvd190cy50 dl9zZWMgID0gcy0+d2Nfc2VjOworICAgICAgICBzaGFkb3dfdHMudHZfbnNlYyA9IHMtPndjX25z ZWM7CisgICAgICAgIHJtYigpOworICAgIH0KKyAgICB3aGlsZSAoKHMtPndjX3ZlcnNpb24gJiAx KSB8IChzaGFkb3dfdHNfdmVyc2lvbiBeIHMtPndjX3ZlcnNpb24pKTsKK30KKworCitpbnQgZ2V0 dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgdm9pZCAqdHopCit7CisgICAgdWludDY0X3Qg bnNlYyA9IG1vbm90b25pY19jbG9jaygpOworICAgIG5zZWMgKz0gc2hhZG93X3RzLnR2X25zZWM7 CisKKyAgICB0di0+dHZfc2VjID0gc2hhZG93X3RzLnR2X3NlYzsKKyAgICB0di0+dHZfc2VjICs9 IE5TRUNfVE9fU0VDKG5zZWMpOworICAgIHR2LT50dl91c2VjID0gTlNFQ19UT19VU0VDKG5zZWMg JSAxMDAwMDAwMDAwVUwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X3Z0aW1lcl9j b21wYXJlKHVpbnQ2NF90IHZhbHVlKSB7CisgICAgdWludDMyX3QgeCwgeTsKKworICAgIERFQlVH KCJOZXcgQ29tcGFyZVZhbHVlIDogJWxseFxuIiwgdmFsdWUpOworICAgIHggPSAweEZGRkZGRkZG VUxMICYgdmFsdWU7CisgICAgeSA9ICh2YWx1ZSA+PiAzMikgJiAweEZGRkZGRkZGOworCisgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oIm1jcnIgcDE1LCAzLCAlMCwgJTEsIGMxNCIKKyAgICAgICAg ICAgIDo6InIiKHgpLCAiciIoeSkpOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdiAl MCwgIzB4MVxuIgorICAgICAgICAgICAgIm1jciBwMTUsIDAsICUwLCBjMTQsIGMzLCAxXG4iIC8q IEVuYWJsZSB0aW1lciBhbmQgdW5tYXNrIHRoZSBvdXRwdXQgc2lnbmFsICovCisgICAgICAgICAg ICAiaXNiIjoiPXIiKHgpKTsKK30KKwordm9pZCB1bnNldF92dGltZXJfY29tcGFyZSh2b2lkKSB7 CisgICAgdWludDMyX3QgeDsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTAsICMw eDJcbiIKKyAgICAgICAgICAgICJtY3IgcDE1LCAwLCAlMCwgYzE0LCBjMywgMVxuIiAvKiBEaXNh YmxlIHRpbWVyIGFuZCBtYXNrIHRoZSBvdXRwdXQgc2lnbmFsICovCisgICAgICAgICAgICAiaXNi IjoiPXIiKHgpKTsKK30KKwordm9pZCBibG9ja19kb21haW4oc190aW1lX3QgdW50aWwpCit7Cisg ICAgdWludDY0X3QgdW50aWxfY291bnQgPSBuc190b190aWNrcyh1bnRpbCkgKyBjbnR2Y3RfYXRf aW5pdDsKKyAgICBBU1NFUlQoaXJxc19kaXNhYmxlZCgpKTsKKyAgICBpZiAocmVhZF92aXJ0dWFs X2NvdW50KCkgPCB1bnRpbF9jb3VudCkKKyAgICB7CisgICAgICAgIHNldF92dGltZXJfY29tcGFy ZSh1bnRpbF9jb3VudCk7CisgICAgICAgIC8vY2hhciBidWZbXSA9ICJzbGVlcFxuIjsgKHZvaWQp SFlQRVJWSVNPUl9jb25zb2xlX2lvKENPTlNPTEVJT193cml0ZSwgc3RybGVuKGJ1ZiksIGJ1Zik7 CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ3ZmkiKTsKKyAgICAgICAgLy9jaGFyIHdh a2VbXSA9ICJ3YWtlXG4iOyAodm9pZClIWVBFUlZJU09SX2NvbnNvbGVfaW8oQ09OU09MRUlPX3dy aXRlLCBzdHJsZW4od2FrZSksIHdha2UpOworICAgICAgICB1bnNldF92dGltZXJfY29tcGFyZSgp OworCisgICAgICAgIC8qIEdpdmUgdGhlIElSUSBoYW5kbGVyIGEgY2hhbmNlIHRvIGhhbmRsZSB3 aGF0ZXZlciB3b2tlIHVzIHVwLiAqLworICAgICAgICBsb2NhbF9pcnFfZW5hYmxlKCk7CisgICAg ICAgIGxvY2FsX2lycV9kaXNhYmxlKCk7CisgICAgfQorfQorCit2b2lkIHRpbWVyX2hhbmRsZXIo ZXZ0Y2huX3BvcnRfdCBwb3J0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqaWduKQorewor ICAgIERFQlVHKCJUaW1lciBraWNrXG4iKTsKKyAgICBnZXRfdGltZV92YWx1ZXNfZnJvbV94ZW4o KTsKKyAgICB1cGRhdGVfd2FsbGNsb2NrKCk7Cit9CisKK2V2dGNobl9wb3J0X3QgdGltZXJfcG9y dCA9IC0xOworCit2b2lkIGluaXRfdGltZSh2b2lkKQoreworICAgIHByaW50aygiSW5pdGlhbGlz aW5nIHRpbWVyIGludGVyZmFjZVxuIik7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJj IHAxNSwgMCwgJTAsIGMxNCwgYzAsIDAiOiI9ciIoY291bnRlcl9mcmVxKSk7CisgICAgY250dmN0 X2F0X2luaXQgPSByZWFkX3ZpcnR1YWxfY291bnQoKTsKKyAgICBwcmludGsoIlZpcnR1YWwgQ291 bnQgcmVnaXN0ZXIgaXMgJWxseCwgZnJlcSA9ICVkIEh6XG4iLCBjbnR2Y3RfYXRfaW5pdCwgY291 bnRlcl9mcmVxKTsKKworICAgIHRpbWVyX3BvcnQgPSBiaW5kX3ZpcnEoVklSUV9USU1FUiwgKGV2 dGNobl9oYW5kbGVyX3QpdGltZXJfaGFuZGxlciwgMCk7CisgICAgaWYgKHRpbWVyX3BvcnQgPT0g LTEpCisgICAgICAgIEJVRygpOworICAgIHVubWFza19ldnRjaG4odGltZXJfcG9ydCk7Cit9CisK K3ZvaWQgZmluaV90aW1lKHZvaWQpCit7CisgICAgaWYgKHRpbWVyX3BvcnQgIT0gLTEpCisgICAg eworICAgICAgICBtYXNrX2V2dGNobih0aW1lcl9wb3J0KTsKKyAgICAgICAgdW5iaW5kX2V2dGNo bih0aW1lcl9wb3J0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9leHRyYXMvbWluaS1vcy9rZXJu ZWwuYyBiL2V4dHJhcy9taW5pLW9zL2tlcm5lbC5jCmluZGV4IDlhMzA1NTAuLjQzN2U1YjQgMTAw NjQ0Ci0tLSBhL2V4dHJhcy9taW5pLW9zL2tlcm5lbC5jCisrKyBiL2V4dHJhcy9taW5pLW9zL2tl cm5lbC5jCkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBzdGFydF9rZXJuZWwodm9pZCkKICAgICBp bml0X2V2ZW50cygpOwogCiAgICAgLyogRU5BQkxFIEVWRU5UIERFTElWRVJZLiBUaGlzIGlzIGRp c2FibGVkIGF0IHN0YXJ0IG9mIGRheS4gKi8KLSAgICBfX3N0aSgpOworICAgIGxvY2FsX2lycV9l bmFibGUoKTsKIAogICAgIHNldHVwX3hlbl9mZWF0dXJlcygpOwogCi0tIAoyLjAuMAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==