From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v10 01/24] xsplice: Design document Date: Wed, 27 Apr 2016 15:26:58 -0400 Message-ID: <1461785241-4481-2-git-send-email-konrad.wilk@oracle.com> References: <1461785241-4481-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1avV8f-0004yy-Nn for xen-devel@lists.xenproject.org; Wed, 27 Apr 2016 19:28:46 +0000 In-Reply-To: <1461785241-4481-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Keir Fraser , Tim Deegan , Ian Jackson , Jan Beulich , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org QSBtZWNoYW5pc20gaXMgcmVxdWlyZWQgdG8gYmluYXJpbHkgcGF0Y2ggdGhlIHJ1bm5pbmcgaHlw ZXJ2aXNvciB3aXRoIG5ldwpvcGNvZGVzIHRoYXQgaGF2ZSBjb21lIGFib3V0IGR1ZSB0byBwcmlt YXJpbHkgc2VjdXJpdHkgdXBkYXRlcy4KClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXNp Z24gb2YgdGhlIEFQSSB0aGF0IHdvdWxkIGFsbG93IHVzIHRvCnVwbG9hZCB0byB0aGUgaHlwZXJ2 aXNvciBiaW5hcnkgcGF0Y2hlcy4KClRoaXMgZG9jdW1lbnQgaGFzIGJlZW4gc2hhcGVkIGJ5IHRo ZSBpbnB1dCBmcm9tOgogIE1hcnRpbiBQb2hsYWNrIDxtcG9obGFja0BhbWF6b24uZGU+CiAgSmFu IEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgoKVGhhbmsgeW91IQoKSW5wdXQtZnJvbTogTWFy dGluIFBvaGxhY2sgPG1wb2hsYWNrQGFtYXpvbi5kZT4KSW5wdXQtZnJvbTogSmFuIEJldWxpY2gg PGpiZXVsaWNoQHN1c2UuY29tPgpTaWduZWQtb2ZmLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsg PGtvbnJhZC53aWxrQG9yYWNsZS5jb20+ClNpZ25lZC1vZmYtYnk6IFJvc3MgTGFnZXJ3YWxsIDxy b3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgpBY2tlZC1ieTogSWFuIEphY2tzb24gPGlhbi5qYWNr c29uQGV1LmNpdHJpeC5jb20+CgotLS0KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5j aXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzogS2VpciBG cmFzZXIgPGtlaXJAeGVuLm9yZz4KQ2M6IFRpbSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgoKdjEtMjog cmV2aWV3CnYzOiBTcGxpdCBkb2N1bWVudCBpbiB2MSBhbmQgdjIgKHRvZG8pIHRvIHNpbXBsaWZ5 IGltcGxlbWVudGF0aW9uIGdvYWxzLgogLSBBZGQgY29uc3Qgb24gc29tZSBzdHJ1Y3R1cmVzLiBU cnVuY2F0ZSBzaXplIHRvIHVpbnQxNl90IHdoZXJlIGl0IG1ha2VzIHNlbnNlLgogLSBDb252ZXJ0 ICdpZCcgdG8gJ25hbWUnLCBBZGQgUm9zcydzIGNvbW1lbnRzIGFib3V0IHdoYXQgaXMgaW1wbGVt ZW50ZWQuCiAtIFdlaSdzIGFuZCBSb3NzJ3MgcmV2aWV3cy4KIC0gSmFuJ3MgcmV2aWV3IGNvbW1l bnRzLgogLSBKYW4ncyByZXZpZXcgY29tbWVudHMuCiAgICBzL2ludDMyX3Qgc3RhdGUvdWludDMy X3Qgc3RhdGUvIG5vdyB0aGF0IHJldHVybiBjb2RlIGlzIGluIHNlcGVyYXRlCiAgICBmaWVsZCAo cmMpLiBBZGQgdmFyaW91cyBvdGhlciB0eXBlcywgc3VjaCBhcyBSX1g4Nl82NF9QQzY0IGluIHRo ZSBsaXN0LgogICAgTWVudGlvbiB0aGUgbmVlZCBmb3IgY29tcGlsZXIgY2hlY2suCnY0OgogLSBE cm9wIHRoZSBMT0FERUQtPkNIRUNLRUQgc3RhdGUgYW5kIGdvIGRpcmVjdGx5IHRvIENIRUNLRUQg c3RhdGUuIERyb3AKICAgIExPQURFRC4KdjU6IEp1bGllbiBtZW50aW9uZWQgQVJNIDMyLWJpdCB3 b3VsZCBub3QgdXNlIEVMRjY0LCBzbyBtYWtlIHRoZSAueHNwbGljZS5mdW5jCiAgICB1c2UgdWlu dFhYX3QgdHlwZXMgaW5zdGVhZCBvZiBFTEYgb25lcy4gUmVtb3ZlIHRoZSBPVVQgb24gaWR4IHN1 YmZpZWxkLgogICAgTWVudGlvbiB0aGF0ICducicgYmVpbmcgemVybyBjYW4gYmUgdXNlZCBmb3Ig cHJvYmluZyB0aGUgbnVtYmVyIG9mIHBheWxvYWRzLgogICAgVXBkYXRlIHdoYXQgJ2lkeCcgbWVh bnMuCnY2OiBVcGRhdGUgd2hhdCAnaWR4JyBtZWFucyBhZ2FpbiEKICAgIE1vdmUgdGhlICJJbnRl cmRlcGVuZGVuY2llcyBzZWN0aW9uIiB0byBtYWtlIGl0IGVhc2llciB0byBpbiB0aGUgZGVzaWdu CiAgICBkb2MgdGhlIG1vdmVtZW50IG9mIHRleHQgKHdoZW4gdGhlIHBhdGNoIGltcGxlbWVudHMg aXQpLgogICAgQWRkIGFsc28gJ3ZlcnNpb24nIGZpZWxkIHRvIHBheWxvYWQuCnY5OgogICB1aW50 NjRfdCB0byB2b2lkIGluIHN0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1bmMuIEFsc28gbWVudGlvbiB0 aGUgc2l6ZQogICBvbiAzMiBhbmQgNjQgYml0IGh5cGVydmlzb3JzLgogICBNYWtlIHRoZSBwYWRk aW5nIGJlIGNhbGxlZCBvcGFxdWUuCiAgIEFkZCBzeW1ib2wrb2Zmc2V0IHRvIFRvZG8KdjEwOgog IFJlbW92ZSBYU1BMSUNFX0FDVElPTl9DSEVDSyBhbHRvZ2V0aGVyLgotLS0KIGRvY3MvbWlzYy94 c3BsaWNlLm1hcmtkb3duIHwgMTAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRvY3MvbWlzYy94c3BsaWNlLm1hcmtkb3duCgpkaWZmIC0tZ2l0IGEvZG9jcy9t aXNjL3hzcGxpY2UubWFya2Rvd24gYi9kb2NzL21pc2MveHNwbGljZS5tYXJrZG93bgpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWIxNTBlCi0tLSAvZGV2L251bGwKKysrIGIv ZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24KQEAgLTAsMCArMSwxMDM3IEBACisjIHhTcGxpY2Ug RGVzaWduIHYxCisKKyMjIFJhdGlvbmFsZQorCitBIG1lY2hhbmlzbSBpcyByZXF1aXJlZCB0byBi aW5hcmlseSBwYXRjaCB0aGUgcnVubmluZyBoeXBlcnZpc29yIHdpdGggbmV3CitvcGNvZGVzIHRo YXQgaGF2ZSBjb21lIGFib3V0IGR1ZSB0byBwcmltYXJpbHkgc2VjdXJpdHkgdXBkYXRlcy4KKwor VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBvZiB0aGUgQVBJIHRoYXQgd291bGQg YWxsb3cgdXMgdG8KK3VwbG9hZCB0byB0aGUgaHlwZXJ2aXNvciBiaW5hcnkgcGF0Y2hlcy4KKwor VGhlIGRvY3VtZW50IGlzIHNwbGl0IGluIGZvdXIgc2VjdGlvbnM6CisKKyAqIERldGFpbGVkIGRl c2NyaXB0aW9ucyBvZiB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQuCisgKiBEZXNpZ24gb2YgdGhlIGRh dGEgc3RydWN0dXJlcy4KKyAqIERlc2lnbiBvZiB0aGUgaHlwZXJjYWxscy4KKyAqIEltcGxlbWVu dGF0aW9uIG5vdGVzIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4KKwor CisjIyBHbG9zc2FyeQorCisgKiBzcGxpY2UgLSBwYXRjaCBpbiB0aGUgYmluYXJ5IGNvZGUgd2l0 aCBuZXcgb3Bjb2RlcworICogdHJhbXBvbGluZSAtIGEganVtcCB0byBhIG5ldyBpbnN0cnVjdGlv bi4KKyAqIHBheWxvYWQgLSB0ZWxlbWV0cmllcyBvZiB0aGUgb2xkIGNvZGUgYWxvbmcgd2l0aCBi aW5hcnkgYmxvYiBvZiB0aGUgbmV3CisgICBmdW5jdGlvbiAoaWYgbmVlZGVkKS4KKyAqIHJlbG9j IC0gdGVsZW1ldHJpZXMgY29udGFpbmVkIGluIHRoZSBwYXlsb2FkIHRvIGNvbnN0cnVjdCBwcm9w ZXIgdHJhbXBvbGluZS4KKworIyMgSGlzdG9yeQorCitUaGUgZG9jdW1lbnQgaGFzIGdvbmUgdW5k ZXIgdmFyaW91cyByZXZpZXdzIGFuZCBvbmx5IGNvdmVycyB2MSBkZXNpZ24uCisKK1RoZSBlbmQg b2YgdGhlIGRvY3VtZW50IGhhcyBhIHNlY3Rpb24gdGl0bGVkIGBOb3QgWWV0IERvbmVgIHdoaWNo CitvdXRsaW5lcyBpZGVhcyBhbmQgZGVzaWduIGZvciB0aGUgZnV0dXJlIHZlcnNpb24gb2YgdGhp cyB3b3JrLgorCisjIyBNdWx0aXBsZSB3YXlzIHRvIHBhdGNoCisKK1RoZSBtZWNoYW5pc20gbmVl ZHMgdG8gYmUgZmxleGlibGUgdG8gcGF0Y2ggdGhlIGh5cGVydmlzb3IgaW4gbXVsdGlwbGUgd2F5 cworYW5kIGJlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gVGhlIGNvbXBpbGVkIGNvZGUgaXMgY29u dGlndW91cyBpbiBtZW1vcnkgd2l0aAorbm8gZ2FwcyAtIHNvIHdlIGhhdmUgbm8gbHV4dXJ5IG9m ICdtb3ZpbmcnIGV4aXN0aW5nIGNvZGUgYW5kIG11c3QgZWl0aGVyCitpbnNlcnQgYSB0cmFtcG9s aW5lIHRvIHRoZSBuZXcgY29kZSB0byBiZSBleGVjdXRlZCAtIG9yIG9ubHkgbW9kaWZ5IGluLXBs YWNlCit0aGUgY29kZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlLiBUaGUgcGxhY2VtZW50 IG9mIG5ldyBjb2RlIGhhcyB0byBiZSBkb25lCitieSBoeXBlcnZpc29yIGFuZCB0aGUgdmlydHVh bCBhZGRyZXNzIGZvciB0aGUgbmV3IGNvZGUgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LgorCitU aGlzIGltcGxpZXMgdGhhdCB0aGUgaHlwZXJ2aXNvciBtdXN0IGNvbXB1dGUgdGhlIG5ldyBvZmZz ZXRzIHdoZW4gc3BsaWNpbmcKK2luIHRoZSBuZXcgdHJhbXBvbGluZSBjb2RlLiBXaGVyZSB0aGUg dHJhbXBvbGluZSBpcyBhZGRlZCAoaW5zaWRlCit0aGUgZnVuY3Rpb24gd2UgYXJlIHBhdGNoaW5n IG9yIGp1c3QgdGhlIGNhbGxlcnM/KSBpcyBhbHNvIGltcG9ydGFudC4KKworVG8gbGVzc2VuIHRo ZSBhbW91bnQgb2YgY29kZSBpbiBoeXBlcnZpc29yLCB0aGUgY29uc3VtZXIgb2YgdGhlIEFQSQor aXMgcmVzcG9uc2libGUgZm9yIGlkZW50aWZ5aW5nIHdoaWNoIG1lY2hhbmlzbSB0byBlbXBsb3kg YW5kIGhvdyBtYW55IGxvY2F0aW9ucwordG8gcGF0Y2guIENvbWJpbmF0aW9ucyBvZiBtb2RpZnlp bmcgaW4tcGxhY2UgY29kZSwgYWRkaW5nIHRyYW1wb2xpbmUsIGV0YworaGFzIHRvIGJlIHN1cHBv cnRlZC4gVGhlIEFQSSBzaG91bGQgYWxsb3cgcmVhZC93cml0ZSBhbnkgbWVtb3J5IHdpdGhpbgor dGhlIGh5cGVydmlzb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorCitXZSBtdXN0IGFsc28gaGF2 ZSBhIG1lY2hhbmlzbSB0byBxdWVyeSB3aGF0IGhhcyBiZWVuIGFwcGxpZWQgYW5kIGEgbWVjaGFu aXNtCit0byByZXZlcnQgaXQgaWYgbmVlZGVkLgorCisjIyBXb3JrZmxvdworCitUaGUgZXhwZWN0 ZWQgd29ya2Zsb3dzIG9mIGhpZ2hlci1sZXZlbCB0b29scyB0aGF0IG1hbmFnZSBtdWx0aXBsZSBw YXRjaGVzCitvbiBwcm9kdWN0aW9uIG1hY2hpbmVzIHdvdWxkIGJlOgorCisgKiBUaGUgZmlyc3Qg b2J2aW91cyB0YXNrIGlzIGxvYWRpbmcgYWxsIGF2YWlsYWJsZSAvIHN1Z2dlc3RlZAorICAgaG90 cGF0Y2hlcyB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KKyAqIFdoZW5ldmVyIG5ldyBob3RwYXRj aGVzIGFyZSBpbnN0YWxsZWQsIHRoZXkgc2hvdWxkIGJlIGxvYWRlZCB0b28uCisgKiBPbmUgd2Fu dHMgdG8gcXVlcnkgd2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4gbG9hZGVkIGF0IHJ1bnRpbWUuCisg KiBJZiB1bmxvYWRpbmcgaXMgZGVlbWVkIHNhZmUgKHNlZSB1bmxvYWRpbmcgYmVsb3cpLCBvbmUg bWF5IHdhbnQgdG8KKyAgIHN1cHBvcnQgYSB3b3JrZmxvdyB3aGVyZSBhIHNwZWNpZmljIGhvdHBh dGNoIGlzIG1hcmtlZCBhcyBiYWQgYW5kCisgICB1bmxvYWRlZC4KKworIyMgUGF0Y2hpbmcgY29k ZQorCitUaGUgZmlyc3QgbWVjaGFuaXNtIHRvIHBhdGNoIHRoYXQgY29tZXMgaW4gbWluZCBpcyBp bi1wbGFjZSByZXBsYWNlbWVudC4KK1RoYXQgaXMgcmVwbGFjZSB0aGUgYWZmZWN0ZWQgY29kZSB3 aXRoIG5ldyBjb2RlLiBVbmZvcnR1bmF0ZWx5IHRoZSB4ODYKK0lTQSBpcyB2YXJpYWJsZSBzaXpl IHdoaWNoIHBsYWNlcyBsaW1pdHMgb24gaG93IG11Y2ggc3BhY2Ugd2UgaGF2ZSBhdmFpbGFibGUK K3RvIHJlcGxhY2UgdGhlIGluc3RydWN0aW9ucy4gVGhhdCBpcyBub3QgYSBwcm9ibGVtIGlmIHRo ZSBjaGFuZ2UgaXMgc21hbGxlcgordGhhbiB0aGUgb3JpZ2luYWwgb3Bjb2RlIGFuZCB3ZSBjYW4g ZmlsbCBpdCB3aXRoIG5vcHMuIFByb2JsZW1zIHdpbGwKK2FwcGVhciBpZiB0aGUgcmVwbGFjZW1l bnQgY29kZSBpcyBsb25nZXIuCisKK1RoZSBzZWNvbmQgbWVjaGFuaXNtIGlzIGJ5IHRpIHJlcGxh Y2UgdGhlIGNhbGwgb3IganVtcCB0byB0aGUKK29sZCBmdW5jdGlvbiB3aXRoIHRoZSBhZGRyZXNz IG9mIHRoZSBuZXcgZnVuY3Rpb24uCisKK0EgdGhpcmQgbWVjaGFuaXNtIGlzIHRvIGFkZCBhIGp1 bXAgdG8gdGhlIG5ldyBmdW5jdGlvbiBhdCB0aGUKK3N0YXJ0IG9mIHRoZSBvbGQgZnVuY3Rpb24u IE4uQi4gVGhlIFhlbiBoeXBlcnZpc29yIGltcGxlbWVudHMgdGhlIHRoaXJkCittZWNoYW5pc20u IFNlZSBgVHJhbXBvbGluZSAoZTkgb3Bjb2RlKWAgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgor CisjIyMgRXhhbXBsZSBvZiB0cmFtcG9saW5lIGFuZCBpbi1wbGFjZSBzcGxpY2luZworCitBcyBl eGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoZSBoeXBlcnZpc29yIGRvZXMgbm90IGhhdmUgWFNBLTEz MiAoc2VlCisqZG9tY3RsL3N5c2N0bDogZG9uJ3QgbGVhayBoeXBlcnZpc29yIHN0YWNrIHRvIHRv b2xzdGFja3MqCis0ZmYzNDQ5ZjBlOWQxNzVjZWI5NTUxZDNmMmFlY2I1OTI3M2Y2MzlkKSBhbmQg d2Ugd291bGQgbGlrZSB0byBiaW5hcnkgcGF0Y2gKK3RoZSBoeXBlcnZpc29yIHdpdGggaXQuIFRo ZSBvcmlnaW5hbCBjb2RlIGxvb2tzIGFzIHNvOgorCis8cHJlPgorICAgNDggODkgZTAgICAgICAg ICAgICAgICAgICBtb3YgICAgJXJzcCwlcmF4ICAKKyAgIDQ4IDI1IDAwIDgwIGZmIGZmICAgICAg ICAgYW5kICAgICQweGZmZmZmZmZmZmZmZjgwMDAsJXJheCAgCis8L3ByZT4KKword2hpbGUgdGhl IG5ldyBwYXRjaGVkIGh5cGVydmlzb3Igd291bGQgYmU6CisKKzxwcmU+CisgICA0OCBjNyA0NSBi OCAwMCAwMCAwMCAwMCAgIG1vdnEgICAkMHgwLC0weDQ4KCVyYnApICAKKyAgIDQ4IGM3IDQ1IGMw IDAwIDAwIDAwIDAwICAgbW92cSAgICQweDAsLTB4NDAoJXJicCkgIAorICAgNDggYzcgNDUgYzgg MDAgMDAgMDAgMDAgICBtb3ZxICAgJDB4MCwtMHgzOCglcmJwKSAgCisgICA0OCA4OSBlMCAgICAg ICAgICAgICAgICAgIG1vdiAgICAlcnNwLCVyYXggIAorICAgNDggMjUgMDAgODAgZmYgZmYgICAg ICAgICBhbmQgICAgJDB4ZmZmZmZmZmZmZmZmODAwMCwlcmF4ICAKKzwvcHJlPgorCitUaGlzIGlz IGluc2lkZSB0aGUgYXJjaF9kb19kb21jdGwuIFRoaXMgbmV3IGNoYW5nZSBhZGRzIDIxIGV4dHJh CitieXRlcyBvZiBjb2RlIHdoaWNoIGFsdGVycyBhbGwgdGhlIG9mZnNldHMgaW5zaWRlIHRoZSBm dW5jdGlvbi4gVG8gYWx0ZXIKK3RoZXNlIG9mZnNldHMgYW5kIGFkZCB0aGUgZXh0cmEgMjEgYnl0 ZXMgb2YgY29kZSB3ZSBtaWdodCBub3QgaGF2ZSBlbm91Z2gKK3NwYWNlIGluIC50ZXh0IHRvIHNx dWVlemUgdGhpcyBpbi4KKworQXMgc3VjaCB3ZSBjb3VsZCBzaW1wbGlmeSB0aGlzIHByb2JsZW0g Ynkgb25seSBwYXRjaGluZyB0aGUgc2l0ZQord2hpY2ggY2FsbHMgYXJjaF9kb19kb21jdGw6CisK KzxwcmU+Citkb19kb21jdGw6ICAKKyBlOCA0YiBiMSAwNSAwMCAgICAgICAgICBjYWxscSAgZmZm ZjgyZDA4MDE1ZmJiOSA8YXJjaF9kb19kb21jdGw+ICAKKzwvcHJlPgorCit3aXRoIGEgbmV3IGFk ZHJlc3MgZm9yIHdoZXJlIHRoZSBuZXcgYGFyY2hfZG9fZG9tY3RsYCB3b3VsZCBiZSAodGhpcwor YXJlYSB3b3VsZCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkpLgorCitBc3R1dGUgcmVhZGVycyB3 aWxsIHdvbmRlciB3aGF0IHdlIG5lZWQgdG8gZG8gaWYgd2Ugd2VyZSB0byBwYXRjaCBgZG9fZG9t Y3RsYAorLSB3aGljaCBpcyBub3QgY2FsbGVkIGRpcmVjdGx5IGJ5IGh5cGVydmlzb3IgYnV0IG9u IGJlaGFsZiBvZiB0aGUgZ3Vlc3RzIHZpYQordGhlIGBjb21wYXRfaHlwZXJjYWxsX3RhYmxlYCBh bmQgYGh5cGVyY2FsbF90YWJsZWAuCitQYXRjaGluZyB0aGUgb2Zmc2V0IGluIGBoeXBlcmNhbGxf dGFibGVgIGZvciBgZG9fZG9tY3RsOgorKGZmZmY4MmQwODAxMDMwNzkgPGRvX2RvbWN0bD46KQor Cis8cHJlPgorCisgZmZmZjgyZDA4MDI0ZDQ5MDogICA3OSAzMCAgCisgZmZmZjgyZDA4MDI0ZDQ5 MjogICAxMCA4MCBkMCA4MiBmZiBmZiAgIAorCis8L3ByZT4KKword2l0aCB0aGUgbmV3IGFkZHJl c3Mgd2hlcmUgdGhlIG5ldyBgZG9fZG9tY3RsYCBpcyBwb3NzaWJsZS4gVGhlIG90aGVyCitwbGFj ZSB3aGVyZSBpdCBpcyB1c2VkIGlzIGluIGBodm1faHlwZXJjYWxsNjRfdGFibGVgIHdoaWNoIHdv dWxkIG5lZWQKK3RvIGJlIHBhdGNoZWQgaW4gYSBzaW1pbGFyIHdheS4gVGhpcyB3b3VsZCByZXF1 aXJlIGFuIGluLXBsYWNlIHNwbGljaW5nCitvZiB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcyBvZiBg YXJjaF9kb19kb21jdGxgLgorCitJbiBzdW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRjaGVkIHRoZSBj YWxsZWUgb2YgdGhlIGFmZmVjdGVkIGZ1bmN0aW9uIGJ5CisgKiBhbGxvY2F0aW5nIG1lbW9yeSBm b3IgdGhlIG5ldyBjb2RlIHRvIGxpdmUgaW4sCisgKiBjaGFuZ2luZyB0aGUgdmlydHVhbCBhZGRy ZXNzIGluIGFsbCB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbGxlZCB0aGUgb2xkCisgICBjb2RlIChj b21wdXRpbmcgdGhlIG5ldyBvZmZzZXQsIHBhdGNoaW5nIHRoZSBjYWxscSB3aXRoIGEgbmV3IGNh bGxxKS4KKyAqIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcyB3aXRoIHRoZSBu ZXcgdmlydHVhbCBhZGRyZXNzIG9mCisgICB0aGUgZnVuY3Rpb24gKHNwbGljaW5nIGluIHRoZSBu ZXcgdmlydHVhbCBhZGRyZXNzKS4gU2luY2UgdGhpcyB0YWJsZQorICAgcmVzaWRlcyBpbiB0aGUg LnJvZGF0YSBzZWN0aW9uIHdlIHdvdWxkIG5lZWQgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZQor ICAgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyBkdXJpbmcgdGhpcyBwYXJ0LgorCitIb3dldmVyIGl0 IGhhcyBkcmF3YmFja3MgLSB0aGUgc2FmZXR5IGNoZWNrcyB3aGljaCBoYXZlIHRvIG1ha2Ugc3Vy ZQordGhlIGZ1bmN0aW9uIGlzIG5vdCBvbiB0aGUgc3RhY2sgLSBtdXN0IGFsc28gY2hlY2sgZXZl cnkgY2FsbGVyLiBGb3Igc29tZQorcGF0Y2hlcyB0aGlzIGNvdWxkIG1lYW4gLSBpZiB0aGVyZSB3 ZXJlIGFuIHN1ZmZpY2llbnQgbGFyZ2UgYW1vdW50IG9mCitjYWxsZXJzIC0gdGhhdCB3ZSB3b3Vs ZCBuZXZlciBiZSBhYmxlIHRvIGFwcGx5IHRoZSB1cGRhdGUuCisKK0hhdmluZyB0aGUgcGF0Y2hp bmcgZG9uZSBhdCBwcmVkZXRlcm1pbmVkIGluc3RhbmNlcyB3aGVyZSB0aGUgc3RhY2tzCithcmUg bm90IGRlZXAgbW9zdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKKyMjIyBFeGFtcGxlIG9mIGRp ZmZlcmVudCB0cmFtcG9saW5lIHBhdGNoaW5nLgorCitBbiBhbHRlcm5hdGl2ZSBtZWNoYW5pc20g ZXhpc3RzIHdoZXJlIHdlIGNhbiBpbnNlcnQgYSB0cmFtcG9saW5lIGluIHRoZQorZXhpc3Rpbmcg ZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZCB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBuZXcgY29kZS4g VGhpcworbGVzc2VucyB0aGUgbG9jYXRpb25zIHRvIGJlIHBhdGNoZWQgdG8gb25lIGJ1dCBpdCBw dXRzIHByZXNzdXJlIG9uIHRoZQorQ1BVIGJyYW5jaGluZyBsb2dpYyAoSS1jYWNoZSwgYnV0IGl0 IGlzIGp1c3Qgb25lIHVuY29uZGl0aW9uYWwganVtcCkuCisKK0ZvciB0aGlzIGV4YW1wbGUgd2Ug d2lsbCBhc3N1bWUgdGhhdCB0aGUgaHlwZXJ2aXNvciBoYXMgbm90IGJlZW4gY29tcGlsZWQKK3dp dGggZmUyZTA3OWY2NDJlZmZiM2QyNGE2ZTFhNzA5NmVmMjZlNjkxZDkzZSAoWFNBLTEyNTogKnBy ZS1maWxsIHN0cnVjdHVyZXMKK2ZvciBjZXJ0YWluIEhZUEVSVklTT1JfeGVuX3ZlcnNpb24gc3Vi LW9wcyopIHdoaWNoIG1lbS1zZXRzIGFuIHN0cnVjdHVyZQoraW4gYHhlbl92ZXJzaW9uYCBoeXBl cmNhbGwuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCAqKmFueXdoZXJlKiogaW4KK3RoZSBo eXBlcnZpc29yIChpdCBpcyBjYWxsZWQgYnkgdGhlIGd1ZXN0KSBidXQgcmVmZXJlbmNlZCBpbiB0 aGUKK2Bjb21wYXRfaHlwZXJjYWxsX3RhYmxlYCBhbmQgYGh5cGVyY2FsbF90YWJsZWAgKGFuZCBp bmRpcmVjdGx5IGNhbGxlZAorZnJvbSB0aGF0KS4gUGF0Y2hpbmcgdGhlIG9mZnNldCBpbiBgaHlw ZXJjYWxsX3RhYmxlYCBmb3IgdGhlIG9sZAorYGRvX3hlbl92ZXJzaW9uYCAoZmZmZjgyZDA4MDEx MmY5ZSA8ZG9feGVuX3ZlcnNpb24+KQorCis8L3ByZT4KKyBmZmZmODJkMDgwMjRiMjcwIDxoeXBl cmNhbGxfdGFibGU+OiAgIAorIC4uLiAgCisgZmZmZjgyZDA4MDI0YjJmODogICA5ZSAyZiAxMSA4 MCBkMCA4MiBmZiBmZiAgCisKKzwvcHJlPgorCit3aXRoIHRoZSBuZXcgYWRkcmVzcyB3aGVyZSB0 aGUgbmV3IGBkb194ZW5fdmVyc2lvbmAgaXMgcG9zc2libGUuIFRoZSBvdGhlcgorcGxhY2Ugd2hl cmUgaXQgaXMgdXNlZCBpcyBpbiBgaHZtX2h5cGVyY2FsbDY0X3RhYmxlYCB3aGljaCB3b3VsZCBu ZWVkCit0byBiZSBwYXRjaGVkIGluIGEgc2ltaWxhciB3YXkuIFRoaXMgd291bGQgcmVxdWlyZSBh biBpbi1wbGFjZSBzcGxpY2luZworb2YgdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3Mgb2YgYGRvX3hl bl92ZXJzaW9uYC4KKworQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gd291bGQgYmUgdG8gcGF0Y2gg aW5zZXJ0IGEgdHJhbXBvbGluZSBpbiB0aGUKK29sZCBgZG9feGVuX3ZlcnNpb24nIGZ1bmN0aW9u IHRvIGRpcmVjdGx5IGp1bXAgdG8gdGhlIG5ldyBgZG9feGVuX3ZlcnNpb25gLgorCis8cHJlPgor IGZmZmY4MmQwODAxMTJmOWUgZG9feGVuX3ZlcnNpb246ICAKKyBmZmZmODJkMDgwMTEyZjllOiAg ICAgICA0OCBjNyBjMCBkYSBmZiBmZiBmZiAgICBtb3YgICAgJDB4ZmZmZmZmZmZmZmZmZmZkYSwl cmF4ICAKKyBmZmZmODJkMDgwMTEyZmE1OiAgICAgICA4MyBmZiAwOSAgICAgICAgICAgICAgICBj bXAgICAgJDB4OSwlZWRpICAKKyBmZmZmODJkMDgwMTEyZmE4OiAgICAgICAwZiA4NyAyNCAwNSAw MCAwMCAgICAgICBqYSAgICAgZmZmZjgyZDA4MDExMzRkMiA7IGRvX3hlbl92ZXJzaW9uKzB4NTM0 ICAKKzwvcHJlPgorCit3aXRoOgorCis8cHJlPgorIGZmZmY4MmQwODAxMTJmOWUgZG9feGVuX3Zl cnNpb246ICAKKyBmZmZmODJkMDgwMTEyZjllOiAgICAgICBlOSBYWCBZWSBaWiBRUSAgICAgICAg ICBqbXBxICAgW25ldyBkb194ZW5fdmVyc2lvbl0gIAorPC9wcmU+CisKK3doaWNoIHdvdWxkIGxl c3NlbiB0aGUgYW1vdW50IG9mIHBhdGNoaW5nIHRvIGp1c3Qgb25lIGxvY2F0aW9uLgorCitJbiBz dW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRjaGVkIHRoZSBhZmZlY3RlZCBmdW5jdGlvbiB0byBqdW1w IHRvIHRoZQorbmV3IHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdoaWNoIHJlcXVpcmVkOgorICogYWxs b2NhdGluZyBtZW1vcnkgZm9yIHRoZSBuZXcgY29kZSB0byBsaXZlIGluLAorICogaW5zZXJ0aW5n IHRyYW1wb2xpbmUgd2l0aCBuZXcgb2Zmc2V0IGluIHRoZSBvbGQgZnVuY3Rpb24gdG8gcG9pbnQg dG8gdGhlCisgICBuZXcgZnVuY3Rpb24uCisgKiBPcHRpb25hbGx5IHdlIGNhbiBpbnNlcnQgaW4g dGhlIG9sZCBmdW5jdGlvbiBhIHRyYW1wb2xpbmUganVtcCB0byBhbiBmdW5jdGlvbgorICAgcHJv dmlkaW5nIGFuIEJVR19PTiB0byBjYXRjaCBlcnJhbnQgY29kZS4KKworVGhlIGRpc2FkdmFudGFn ZSBvZiB0aGlzIGFyZSB0aGF0IHRoZSB1bmNvbmRpdGlvbmFsIGp1bXAgd2lsbCBjb25zdW1lIGEg c21hbGwKK0ktY2FjaGUgcGVuYWx0eS4gSG93ZXZlciB0aGUgc2ltcGxpY2l0eSBvZiB0aGUgcGF0 Y2hpbmcgYW5kIGhpZ2hlciBjaGFuY2UKK29mIHBhc3Npbmcgc2FmZXR5IGNoZWNrcyBtYWtlIHRo aXMgYSB3b3J0aHdoaWxlIG9wdGlvbi4KKworVGhpcyBwYXRjaGluZyBoYXMgYSBzaW1pbGFyIGRy YXdiYWNrIGFzIGlubGluZSBwYXRjaGluZyAtIHRoZSBzYWZldHkKK2NoZWNrcyBoYXZlIHRvIG1h a2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9uIHRoZSBzdGFjay4gSG93ZXZlcgorc2luY2Ug d2UgYXJlIHJlcGxhY2luZyBhdCBhIGhpZ2hlciBsZXZlbCAoYSBmdWxsIGZ1bmN0aW9uIGFzIG9w cG9zZWQKK3RvIHZhcmlvdXMgb2Zmc2V0cyB3aXRoaW4gZnVuY3Rpb25zKSB0aGUgY2hlY2tzIGFy ZSBzaW1wbGVyLgorCitIYXZpbmcgdGhlIHBhdGNoaW5nIGRvbmUgYXQgcHJlZGV0ZXJtaW5lZCBp bnN0YW5jZXMgd2hlcmUgdGhlIHN0YWNrcworYXJlIG5vdCBkZWVwIG1vc3RseSBzb2x2ZXMgdGhp cyBwcm9ibGVtIGFzIHdlbGwuCisKKyMjIyBTZWN1cml0eQorCitXaXRoIHRoaXMgbWV0aG9kIHdl IGNhbiByZS13cml0ZSB0aGUgaHlwZXJ2aXNvciAtIGFuZCBhcyBzdWNoIHdlICoqTVVTVCoqIGJl CitkaWxpZ2VudCBpbiBvbmx5IGFsbG93aW5nIGNlcnRhaW4gZ3Vlc3RzIHRvIHBlcmZvcm0gdGhp cyBvcGVyYXRpb24uCisKK0Z1cnRoZXJtb3JlIHdpdGggU2VjdXJlQm9vdCBvciB0Ym9vdCwgd2Ug KipNVVNUKiogYWxzbyB2ZXJpZnkgdGhlIHNpZ25hdHVyZQorb2YgdGhlIHBheWxvYWQgdG8gYmUg Y2VydGFpbiBpdCBjYW1lIGZyb20gYSB0cnVzdGVkIHNvdXJjZSBhbmQgaW50ZWdyaXR5Cit3YXMg aW50YWN0LgorCitBcyBzdWNoIHRoZSBoeXBlcmNhbGwgKipNVVNUKiogc3VwcG9ydCBhbiBYU00g cG9saWN5IHRvIGxpbWl0IHdoYXQgdGhlIGd1ZXN0CitpcyBhbGxvd2VkIHRvIGludm9rZS4gSWYg dGhlIHN5c3RlbSBpcyBib290ZWQgd2l0aCBzaWduYXR1cmUgY2hlY2tpbmcgdGhlCitzaWduYXR1 cmUgY2hlY2tpbmcgd2lsbCBiZSBlbmZvcmNlZC4KKworIyMgRGVzaWduIG9mIHBheWxvYWQgZm9y bWF0CisKK1RoZSBwYXlsb2FkICoqTVVTVCoqIGNvbnRhaW4gZW5vdWdoIGRhdGEgdG8gYWxsb3cg dXMgdG8gYXBwbHkgdGhlIHVwZGF0ZQorYW5kIGFsc28gc2FmZWx5IHJldmVyc2UgaXQuIEFzIHN1 Y2ggd2UgKipNVVNUKioga25vdzoKKworICogVGhlIGxvY2F0aW9ucyBpbiBtZW1vcnkgdG8gYmUg cGF0Y2hlZC4gVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseQorICAgdmlhIHN5bWJv bHMgb3IgdmlhIHZpcnR1YWwgYWRkcmVzc2VzLgorICogVGhlIG5ldyBjb2RlIHRoYXQgd2lsbCBi ZSBwYXRjaGVkIGluLgorCitUaGlzIGJpbmFyeSBmb3JtYXQgY2FuIGJlIGNvbnN0cnVjdGVkIHVz aW5nIGFuIGN1c3RvbSBiaW5hcnkgZm9ybWF0IGJ1dAordGhlcmUgYXJlIHNldmVyZSBkaXNhZHZh bnRhZ2VzIG9mIGl0OgorCisgKiBUaGUgZm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUgY2hhbmdlZCBh bmQgd2UgbmVlZCBhbiBtZWNoYW5pc20gdG8gYWNjb21tb2RhdGUKKyAgIHRoYXQuCisgKiBJdCBo YXMgdG8gYmUgcGxhdGZvcm0gYWdub3N0aWMuCisgKiBFYXNpbHkgY29uc3RydWN0ZWQgdXNpbmcg ZXhpc3RpbmcgdG9vbHMuCisKK0FzIHN1Y2ggaGF2aW5nIHRoZSBwYXlsb2FkIGluIGFuIEVMRiBm aWxlIGlzIHRoZSBzZW5zaWJsZSB3YXkuIFdlIHdvdWxkIGJlCitjYXJyeWluZyB0aGUgdmFyaW91 cyBzZXRzIG9mIHN0cnVjdHVyZXMgKGFuZCBkYXRhKSBpbiB0aGUgRUxGIHNlY3Rpb25zIHVuZGVy CitkaWZmZXJlbnQgbmFtZXMgYW5kIHdpdGggZGVmaW5pdGlvbnMuCisKK05vdGUgdGhhdCBldmVy eSBzdHJ1Y3R1cmUgaGFzIHBhZGRpbmcuIFRoaXMgaXMgYWRkZWQgc28gdGhhdCB0aGUgaHlwZXJ2 aXNvcgorY2FuIHJlLXVzZSB0aG9zZSBmaWVsZHMgYXMgaXQgc2VlcyBmaXQuCisKK0VhcmxpZXIg ZGVzaWduIGF0dGVtcHRlZCB0byBpbmVwdGx5IGV4cGxhaW4gdGhlIHJlbGF0aW9ucyBvZiB0aGUg RUxGIHNlY3Rpb25zCit0byBlYWNoIG90aGVyIHdpdGhvdXQgdXNpbmcgcHJvcGVyIEVMRiBtZWNo YW5pc20gKHNoX2luZm8sIHNoX2xpbmssIGRhdGEKK3N0cnVjdHVyZXMgdXNpbmcgRWxmIHR5cGVz LCBldGMpLiBUaGlzIGRlc2lnbiB3aWxsIGV4cGxhaW4gdGhlIHN0cnVjdHVyZXMKK2FuZCBob3cg dGhleSBhcmUgdXNlZCB0b2dldGhlciBhbmQgbm90IGRpZyBpbiB0aGUgRUxGIGZvcm1hdCAtIGV4 Y2VwdCBtZW50aW9uCit0aGF0IHRoZSBzZWN0aW9uIG5hbWVzIHNob3VsZCBtYXRjaCB0aGUgc3Ry dWN0dXJlIG5hbWVzLgorCitUaGUgeFNwbGljZSBwYXlsb2FkIGlzIGEgcmVsb2NhdGFibGUgRUxG IGJpbmFyeS4gQSB0eXBpY2FsIGJpbmFyeSB3b3VsZCBoYXZlOgorCisgKiBPbmUgb3IgbW9yZSAu dGV4dCBzZWN0aW9ucy4KKyAqIFplcm8gb3IgbW9yZSByZWFkLW9ubHkgZGF0YSBzZWN0aW9ucy4K KyAqIFplcm8gb3IgbW9yZSBkYXRhIHNlY3Rpb25zLgorICogUmVsb2NhdGlvbnMgZm9yIGVhY2gg b2YgdGhlc2Ugc2VjdGlvbnMuCisKK0l0IG1heSBhbHNvIGhhdmUgc29tZSBhcmNoaXRlY3R1cmUt c3BlY2lmaWMgc2VjdGlvbnMuIEZvciBleGFtcGxlOgorCisgKiBBbHRlcm5hdGl2ZXMgaW5zdHJ1 Y3Rpb25zLgorICogQnVnIGZyYW1lcy4KKyAqIEV4Y2VwdGlvbiB0YWJsZXMuCisgKiBSZWxvY2F0 aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBzZWN0aW9ucy4KKworVGhlIHhTcGxpY2UgY29yZSBjb2Rl IGxvYWRzIHRoZSBwYXlsb2FkIGFzIGEgc3RhbmRhcmQgRUxGIGJpbmFyeSwgcmVsb2NhdGVzIGl0 CithbmQgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmMgc2VjdGlvbnMgYXMgbmVlZGVk LiBUaGlzIHByb2Nlc3MgaXMgbXVjaAorbGlrZSB3aGF0IHRoZSBMaW51eCBrZXJuZWwgbW9kdWxl IGxvYWRlciBkb2VzLgorCitUaGUgcGF5bG9hZCBjb250YWlucyBhIHNlY3Rpb24gKHhzcGxpY2Vf cGF0Y2hfZnVuYykgd2l0aCBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzCitkZXNjcmliaW5nIHRoZSBm dW5jdGlvbnMgdG8gYmUgcGF0Y2hlZDoKKworPHByZT4KK3N0cnVjdCB4c3BsaWNlX3BhdGNoX2Z1 bmMgeyAgCisgICAgY29uc3QgY2hhciAqbmFtZTsgIAorICAgIHZvaWQgKm5ld19hZGRyOyAgCisg ICAgdm9pZCAqb2xkX2FkZHI7ICAKKyAgICB1aW50MzJfdCBuZXdfc2l6ZTsgIAorICAgIHVpbnQz Ml90IG9sZF9zaXplOyAgCisgICAgdWludDhfdCB2ZXJzaW9uOyAgCisgICAgdWludDhfdCBvcGFx dWVbMzFdOyAgCit9OyAgCis8L3ByZT4KKworVGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSBpcyA2 NCBieXRlcyBvbiA2NC1iaXQgaHlwZXJ2aXNvcnMuIEl0IHdpbGwgYmUKKzUyIG9uIDMyLWJpdCBo eXBlcnZpc29ycy4KKworKiBgbmFtZWAgaXMgdGhlIHN5bWJvbCBuYW1lIG9mIHRoZSBvbGQgZnVu Y3Rpb24uIE9ubHkgdXNlZCBpZiBgb2xkX2FkZHJgIGlzCisgICB6ZXJvLCBvdGhlcndpc2Ugd2ls bCBiZSB1c2VkIGR1cmluZyBkeW5hbWljIGxpbmtpbmcgKHdoZW4gaHlwZXJ2aXNvciBsb2Fkcwor ICAgdGhlIHBheWxvYWQpLgorCisqIGBvbGRfYWRkcmAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1 bmN0aW9uIHRvIGJlIHBhdGNoZWQgYW5kIGlzIGZpbGxlZCBpbiBhdAorICBwYXlsb2FkIGdlbmVy YXRpb24gdGltZSBpZiBoeXBlcnZpc29yIGZ1bmN0aW9uIGFkZHJlc3MgaXMga25vd24uIElmIHVu a25vd24sCisgIHRoZSB2YWx1ZSAqTVVTVCogYmUgemVybyBhbmQgdGhlIGh5cGVydmlzb3Igd2ls bCBhdHRlbXB0IHRvIHJlc29sdmUgdGhlIGFkZHJlc3MuCisKKyogYG5ld19hZGRyYCBpcyB0aGUg YWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBpcyByZXBsYWNpbmcgdGhlIG9sZAorICBmdW5j dGlvbi4gVGhlIGFkZHJlc3MgaXMgZmlsbGVkIGluIGR1cmluZyByZWxvY2F0aW9uLiBUaGUgdmFs dWUgKipNVVNUKiogYmUKKyAgdGhlIGFkZHJlc3Mgb2YgdGhlIG5ldyBmdW5jdGlvbiBpbiB0aGUg ZmlsZS4KKworKiBgb2xkX3NpemVgIGFuZCBgbmV3X3NpemVgIGNvbnRhaW4gdGhlIHNpemVzIG9m IHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9ucyBpbiBieXRlcy4KKyAgIFRoZSB2YWx1ZSBvZiBgb2xk X3NpemVgICoqTVVTVCoqIG5vdCBiZSB6ZXJvLgorCisqIGB2ZXJzaW9uYCBpcyB0byBiZSBvbmUu CisKKyogYG9wYXF1ZWAgKipNVVNUKiogYmUgemVyby4KKworVGhlIHNpemUgb2YgdGhlIGB4c3Bs aWNlX3BhdGNoX2Z1bmNgIGFycmF5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgRUxGIHNlY3Rpb24K K3NpemUuCisKK1doZW4gYXBwbHlpbmcgdGhlIHBhdGNoIHRoZSBoeXBlcnZpc29yIGl0ZXJhdGVz IG92ZXIgZWFjaCBgeHNwbGljZV9wYXRjaF9mdW5jYAorc3RydWN0dXJlIGFuZCB0aGUgY29yZSBj b2RlIGluc2VydHMgYSB0cmFtcG9saW5lIGF0IGBvbGRfYWRkcmAgdG8gYG5ld19hZGRyYC4KK1Ro ZSBgbmV3X2FkZHJgIGlzIGFsdGVyZWQgd2hlbiB0aGUgRUxGIHBheWxvYWQgaXMgbG9hZGVkLgor CitXaGVuIHJldmVydGluZyBhIHBhdGNoLCB0aGUgaHlwZXJ2aXNvciBpdGVyYXRlcyBvdmVyIGVh Y2ggYHhzcGxpY2VfcGF0Y2hfZnVuY2AKK2FuZCB0aGUgY29yZSBjb2RlIGNvcGllcyB0aGUgZGF0 YSBmcm9tIHRoZSB1bmRvIGJ1ZmZlciAocHJpdmF0ZSBpbnRlcm5hbCBjb3B5KQordG8gYG9sZF9h ZGRyYC4KKworIyMgSHlwZXJjYWxscworCitXZSB3aWxsIGVtcGxveSB0aGUgc3ViIG9wZXJhdGlv bnMgb2YgdGhlIHN5c3RlbSBtYW5hZ2VtZW50IGh5cGVyY2FsbCAoc3lzY3RsKS4KK1RoZXJlIGFy ZSB0byBiZSBmb3VyIHN1Yi1vcGVyYXRpb25zOgorCisgKiB1cGxvYWQgdGhlIHBheWxvYWRzLgor ICogbGlzdGluZyBvZiBwYXlsb2FkcyBzdW1tYXJ5IHVwbG9hZGVkIGFuZCB0aGVpciBzdGF0ZS4K KyAqIGdldHRpbmcgYW4gcGFydGljdWxhciBwYXlsb2FkIHN1bW1hcnkgYW5kIGl0cyBzdGF0ZS4K KyAqIGNvbW1hbmQgdG8gYXBwbHksIGRlbGV0ZSwgb3IgcmV2ZXJ0IHRoZSBwYXlsb2FkLgorCitN b3N0IG9mIHRoZSBhY3Rpb25zIGFyZSBhc3luY2hyb25vdXMgdGhlcmVmb3JlIHRoZSBjYWxsZXIg aXMgcmVzcG9uc2libGUKK3RvIHZlcmlmeSB0aGF0IGl0IGhhcyBiZWVuIGFwcGxpZWQgcHJvcGVy bHkgYnkgcmV0cmlldmluZyB0aGUgc3VtbWFyeSBvZiBpdAorYW5kIHZlcmlmeWluZyB0aGF0IHRo ZXJlIGFyZSBubyBlcnJvciBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBheWxvYWQuCisKK1dl ICoqTVVTVCoqIG1ha2Ugc29tZSBvZiB0aGVtIGFzeW5jaHJvbm91cyBkdWUgdG8gdGhlIG5hdHVy ZSBvZiBwYXRjaGluZworaXQgcmVxdWlyZXMgZXZlcnkgcGh5c2ljYWwgQ1BVIHRvIGJlIGxvY2st c3RlcCB3aXRoIGVhY2ggb3RoZXIuCitUaGUgcGF0Y2hpbmcgbWVjaGFuaXNtIHdoaWxlIGFuIGlt cGxlbWVudGF0aW9uIGRldGFpbCwgaXMgbm90IGFuIHNob3J0CitvcGVyYXRpb24gYW5kIGFzIHN1 Y2ggdGhlIGRlc2lnbiAqKk1VU1QqKiBhc3N1bWUgaXQgd2lsbCBiZSBhbiBsb25nLXJ1bm5pbmcK K29wZXJhdGlvbi4KKworVGhlIHN1Yi1vcGVyYXRpb25zIHdpbGwgc3BlbGwgb3V0IGhvdyBwcmVl bXB0aW9uIGlzIHRvIGJlIGhhbmRsZWQgKGlmIGF0IGFsbCkuCisKK0Z1cnRoZXJtb3JlIGl0IGlz IHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgZGlmZmVyZW50IHBheWxvYWRzIGZvciB0aGUgc2Ft ZQorZnVuY3Rpb24uIEFzIHN1Y2ggYW4gdW5pcXVlIG5hbWUgcGVyIHBheWxvYWQgaGFzIHRvIGJl IHZpc2libGUgdG8gYWxsb3cgcHJvcGVyIG1hbmlwdWxhdGlvbi4KKworVGhlIGh5cGVyY2FsbCBp cyBwYXJ0IG9mIHRoZSBgeGVuX3N5c2N0bGAuIFRoZSB0b3AgbGV2ZWwgc3RydWN0dXJlIGNvbnRh aW5zCitvbmUgdWludDMyX3QgdG8gZGV0ZXJtaW5lIHRoZSBzdWItb3BlcmF0aW9ucyBhbmQgb25l IHBhZGRpbmcgZmllbGQgd2hpY2gKKypNVVNUKiBhbHdheXMgYmUgemVyby4KKworPHByZT4KK3N0 cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3AgeyAgCisgICAgdWludDMyX3QgY21kOyAgICAgICAg ICAgICAgICAgICAvKiBJTjogWEVOX1NZU0NUTF9YU1BMSUNFXyouICovICAKKyAgICB1aW50MzJf dCBwYWQ7ICAgICAgICAgICAgICAgICAgIC8qIElOOiBBbHdheXMgemVyby4gKi8gIAorCXVuaW9u IHsgIAorICAgICAgICAgIC4uLiBzZWUgYmVsb3cgLi4uICAKKyAgICAgICAgfSB1OyAgCit9OyAg CisKKzwvcHJlPgord2hpbGUgdGhlIHJlc3Qgb2YgaHlwZXJjYWxsIHNwZWNpZmljIHN0cnVjdHVy ZXMgYXJlIHBhcnQgb2YgdGhlIHRoaXMgc3RydWN0dXJlLgorCisjIyMgQmFzaWMgdHlwZTogc3Ry dWN0IHhlbl94c3BsaWNlX25hbWUKKworTW9zdCBvZiB0aGUgaHlwZXJjYWxscyBlbXBsb3kgYW4g c2hhcmVkIHN0cnVjdHVyZSBjYWxsZWQgYHN0cnVjdCB4ZW5feHNwbGljZV9uYW1lYAord2hpY2gg Y29udGFpbnM6CisKKyAqIGBuYW1lYCAtIHBvaW50ZXIgd2hlcmUgdGhlIHN0cmluZyBmb3IgdGhl IG5hbWUgaXMgbG9jYXRlZC4KKyAqIGBzaXplYCAtIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcKKyAq IGBwYWRgIC0gcGFkZGluZyAtIHRvIGJlIHplcm8uCisKK1RoZSBzdHJ1Y3R1cmUgaXMgYXMgZm9s bG93OgorCis8cHJlPgorLyogIAorICogIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHBheWxvYWQu ICBTaG91bGQgYmUgaHVtYW4gcmVhZGFibGUuICAKKyAqIEluY2x1ZGVzIHRoZSBOVUwgdGVybWlu YXRvciAgCisgKi8gIAorI2RlZmluZSBYRU5fWFNQTElDRV9OQU1FX1NJWkUgMTI4ICAKK3N0cnVj dCB4ZW5feHNwbGljZV9uYW1lIHsgIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoY2hhcikgbmFt ZTsgICAgICAgICAvKiBJTiwgcG9pbnRlciB0byBuYW1lLiAqLyAgCisgICAgdWludDE2X3Qgc2l6 ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOLCBzaXplIG9mIG5hbWUuIE1heSBiZSB1 cHRvICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhF Tl9YU1BMSUNFX05BTUVfU0laRS4gKi8gIAorICAgIHVpbnQxNl90IHBhZFszXTsgICAgICAgICAg ICAgICAgICAgICAgICAvKiBJTjogTVVTVCBiZSB6ZXJvLiAqLyAKK307ICAKKzwvcHJlPgorCisj IyMgWEVOX1NZU0NUTF9YU1BMSUNFX1VQTE9BRCAoMCkKKworVXBsb2FkIGEgcGF5bG9hZCB0byB0 aGUgaHlwZXJ2aXNvci4gVGhlIHBheWxvYWQgaXMgdmVyaWZpZWQKK2FnYWluc3QgYmFzaWMgY2hl Y2tzIGFuZCBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB0aGUgcHJvcGVyIHJldHVybiBjb2RlCit3 aWxsIGJlIHJldHVybmVkLiBUaGUgcGF5bG9hZCBpcyBub3QgYXBwbGllZCBhdCB0aGlzIHRpbWUg LSB0aGF0IGlzCitjb250cm9sbGVkIGJ5ICpYRU5fU1lTQ1RMX1hTUExJQ0VfQUNUSU9OKi4KKwor VGhlIGNhbGxlciBwcm92aWRlczoKKworICogQSBgc3RydWN0IHhlbl94c3BsaWNlX25hbWVgIGNh bGxlZCBgbmFtZWAgd2hpY2ggaGFzIHRoZSB1bmlxdWUgbmFtZS4KKyAqIGBzaXplYCB0aGUgc2l6 ZSBvZiB0aGUgRUxGIHBheWxvYWQgKGluIGJ5dGVzKS4KKyAqIGBwYXlsb2FkYCB0aGUgdmlydHVh bCBhZGRyZXNzIG9mIHdoZXJlIHRoZSBFTEYgcGF5bG9hZCBpcy4KKworVGhlIGBuYW1lYCBjb3Vs ZCBiZSBhbiBVVUlEIHRoYXQgc3RheXMgZml4ZWQgZm9yZXZlciBmb3IgYSBnaXZlbgorcGF5bG9h ZC4gSXQgY2FuIGJlIGVtYmVkZGVkIGludG8gdGhlIEVMRiBwYXlsb2FkIGF0IGNyZWF0aW9uIHRp bWUKK2FuZCBleHRyYWN0ZWQgYnkgdG9vbHMuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgemVybyBp ZiB0aGUgcGF5bG9hZCB3YXMgc3VjY2VzZnVsbHkgdXBsb2FkZWQuCitPdGhlcndpc2UgYW4gLVhF Tl9FWFggcmV0dXJuIHZhbHVlIGlzIHByb3ZpZGVkLiBEdXBsaWNhdGUgYG5hbWVgIGFyZSBub3Qg c3VwcG9ydGVkLgorCitUaGUgYHBheWxvYWRgIGlzIHRoZSBFTEYgcGF5bG9hZCBhcyBtZW50aW9u ZWQgaW4gdGhlIGBQYXlsb2FkIGZvcm1hdGAgc2VjdGlvbi4KKworVGhlIHN0cnVjdHVyZSBpcyBh cyBmb2xsb3c6CisKKzxwcmU+CitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX3VwbG9hZCB7ICAK KyAgICB4ZW5feHNwbGljZV9uYW1lX3QgbmFtZTsgICAgICAgICAgICAvKiBJTiwgbmFtZSBvZiB0 aGUgcGF0Y2guICovICAKKyAgICB1aW50NjRfdCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAv KiBJTiwgc2l6ZSBvZiB0aGUgRUxGIGZpbGUuICovICAKKyAgICBYRU5fR1VFU1RfSEFORExFXzY0 KHVpbnQ4KSBwYXlsb2FkOyAvKiBJTjogRUxGIGZpbGUuICovICAKK307ICAKKzwvcHJlPgorCisj IyMgWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCAoMSkKKworUmV0cmlldmUgYW4gc3RhdHVzIG9mIGFu IHNwZWNpZmljIHBheWxvYWQuIFRoaXMgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBBIGBzdHJ1Y3Qg eGVuX3hzcGxpY2VfbmFtZWAgY2FsbGVkIGBuYW1lYCB3aGljaCBoYXMgdGhlIHVuaXF1ZSBuYW1l LgorICogQSBgc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1c2Agc3RydWN0dXJlLiBUaGUgbWVtYmVy IHZhbHVlcyB3aWxsCisgICBiZSBvdmVyLXdyaXR0ZW4gdXBvbiBjb21wbGV0aW9uLgorCitVcG9u IGNvbXBsZXRpb24gdGhlIGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYCBpcyB1cGRhdGVkLgor CisgKiBgc3RhdHVzYCAtIGluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHBheWxv YWQ6CisgICAqICpYU1BMSUNFX1NUQVRVU19DSEVDS0VEKiAgKDEpIGxvYWRlZCBhbmQgdGhlIEVM RiBwYXlsb2FkIHNhZmV0eSBjaGVja3MgcGFzc2VkLgorICAgKiAqWFNQTElDRV9TVEFUVVNfQVBQ TElFRCogKDIpIGxvYWRlZCwgY2hlY2tlZCwgYW5kIGFwcGxpZWQuCisgICAqICBObyBvdGhlciB2 YWx1ZSBpcyBwb3NzaWJsZS4KKyAqIGByY2AgLSAtWEVOX0VYWCB0eXBlIGVycm9ycyBlbmNvdW50 ZXJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsYXN0CisgICBYU1BMSUNFX0FDVElPTl8qIG9wZXJh dGlvbi4gVGhlIG5vcm1hbCB2YWx1ZXMgY2FuIGJlIHplcm8gb3IgLVhFTl9FQUdBSU4gd2hpY2gK KyAgIHJlc3BlY3RpdmVseSBtZWFuOiBzdWNjZXNzIG9yIG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4g T3RoZXIgdmFsdWVzCisgICBpbXBseSBhbiBlcnJvciBvY2N1cnJlZC4gSWYgdGhlcmUgaXMgYW4g ZXJyb3IgaW4gYHJjYCwgYHN0YXR1c2Agd2lsbCAqKk5PVCoqCisgICBoYXZlIGNoYW5nZWQuCisK K1RoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGh5cGVyY2FsbCBpcyB6ZXJvIG9uIHN1Y2Nlc3MgYW5k IC1YRU5fRVhYIG9uIGZhaWx1cmUuCisoTm90ZSB0aGF0IHRoZSBgcmNgYCB2YWx1ZSBjYW4gYmUg ZGlmZmVyZW50IGZyb20gdGhlIHJldHVybiB2YWx1ZSwgYXMgaW4KK3JjPS1YRU5fRUFHQUlOIGFu ZCByZXR1cm4gdmFsdWUgY2FuIGJlIDApLgorCitGb3IgZXhhbXBsZSwgc3VwcG9zaW5nIHRoZXJl IGlzIGFuIHBheWxvYWQ6CisKKzxwcmU+Cisgc3RhdHVzOiBYU1BMSUNFX1NUQVRVU19DSEVDS0VE CisgcmM6IDAKKzwvcHJlPgorCitXZSBhcHBseSBhbiBhY3Rpb24gLSBYU1BMSUNFX0FDVElPTl9S RVZFUlQgLSB0byByZXZlcnQgaXQgKHdoaWNoIHdvbid0IHdvcmsKK2FzIHdlIGhhdmUgbm90IGV2 ZW4gYXBwbGllZCBpdC4gQWZ0ZXJ3YXJkcyB3ZSB3aWxsIGhhdmU6CisKKzxwcmU+Cisgc3RhdHVz OiBYU1BMSUNFX1NUQVRVU19DSEVDS0VECisgcmM6IC1YRU5fRUlOVkFMCis8L3ByZT4KKworSXQg aGFzIGZhaWxlZCBidXQgaXQgcmVtYWlucyBsb2FkZWQuCisKK1RoaXMgb3BlcmF0aW9uIGlzIHN5 bmNocm9ub3VzIGFuZCBkb2VzIG5vdCByZXF1aXJlIHByZWVtcHRpb24uCisKK1RoZSBzdHJ1Y3R1 cmUgaXMgYXMgZm9sbG93OgorCis8cHJlPgorc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1cyB7ICAK KyNkZWZpbmUgWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRCAgICAgIDEgIAorI2RlZmluZSBYU1BMSUNF X1NUQVRVU19BUFBMSUVEICAgICAgMiAgCisgICAgdWludDMyX3Qgc3RhdGU7ICAgICAgICAgICAg ICAgICAvKiBPVVQ6IFhTUExJQ0VfU1RBVEVfKi4gKi8gIAorICAgIGludDMyX3QgcmM7ICAgICAg ICAgICAgICAgICAgICAgLyogT1VUOiAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgLVhFTl9FWFgu ICovICAKK307ICAKKworc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9nZXQgeyAgCisgICAgeGVu X3hzcGxpY2VfbmFtZV90IG5hbWU7ICAgICAgICAvKiBJTiwgdGhlIG5hbWUgb2YgdGhlIHBheWxv YWQuICovICAKKyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCBzdGF0dXM7ICAgIC8qIElOL09VVDog c3RhdHVzIG9mIHRoZSBwYXlsb2FkLiAqLyAgCit9OyAgCis8L3ByZT4KKworIyMjIFhFTl9TWVND VExfWFNQTElDRV9MSVNUICgyKQorCitSZXRyaWV2ZSBhbiBhcnJheSBvZiBhYmJyZXZpYXRlZCBz dGF0dXMgYW5kIG5hbWVzIG9mIHBheWxvYWRzIHRoYXQgYXJlIGxvYWRlZCBpbiB0aGUKK2h5cGVy dmlzb3IuCisKK1RoZSBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIGB2ZXJzaW9uYC4gVmVyc2lvbiBv ZiB0aGUgcGF5bG9hZC4gQ2FsbGVyIHNob3VsZCByZS11c2UgdGhlIGZpZWxkIHByb3ZpZGVkIGJ5 CisgICAgdGhlIGh5cGVydmlzb3IuIElmIHRoZSB2YWx1ZSBkaWZmZXJzIHRoZSBkYXRhIGlzIHN0 YWxlLgorICogYGlkeGAgaW5kZXggaXRlcmF0b3IuIFRoZSBpbmRleCBpbnRvIHRoZSBoeXBlcnZp c29yJ3MgcGF5bG9hZCBjb3VudC4gSXQgaXMKKyAgICByZWNvbW1lbmRlZCB0aGF0IG9uIGZpcnN0 IGludm9jYXRpb24gemVybyBiZSB1c2VkIHNvIHRoYXQgYG5yYCAod2hpY2ggdGhlCisgICAgaHlw ZXJ2aXNvciB3aWxsIHVwZGF0ZSB3aXRoIHRoZSByZW1haW5pbmcgcGF5bG9hZCBjb3VudCkgYmUg cHJvdmlkZWQuCisgICAgQWxzbyB0aGUgaHlwZXJ2aXNvciB3aWxsIHByb3ZpZGUgYHZlcnNpb25g IHdpdGggdGhlIG1vc3QgY3VycmVudCB2YWx1ZS4KKyAqIGBucmAgdGhlIG1heCBudW1iZXIgb2Yg ZW50cmllcyB0byBwb3B1bGF0ZS4gQ2FuIGJlIHplcm8gd2hpY2ggd2lsbCByZXN1bHQKKyAgICBp biB0aGUgaHlwZXJjYWxsIGJlaW5nIGEgcHJvYmluZyBvbmUgYW5kIHJldHVybiB0aGUgbnVtYmVy IG9mIHBheWxvYWRzCisgICAgKGFuZCB1cGRhdGUgdGhlIGB2ZXJzaW9uYCkuCisgKiBgcGFkYCAt ICpNVVNUKiBiZSB6ZXJvLgorICogYHN0YXR1c2AgdmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRv IHdyaXRlIGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYAorICAgc3RydWN0dXJlcy4gQ2FsbGVy ICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9mIHRoZW0uCisgKiBgbmFtZWAgLSB2aXJ0dWFs IGFkZHJlc3Mgb2Ygd2hlcmUgdG8gd3JpdGUgdGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBwYXlsb2Fk LgorICAgQ2FsbGVyICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9mIHRoZW0uIEVhY2ggKk1V U1QqIGJlIG9mCisgICAqKlhFTl9YU1BMSUNFX05BTUVfU0laRSoqIHNpemUuIE5vdGUgdGhhdCAq KlhFTl9YU1BMSUNFX05BTUVfU0laRSoqIGluY2x1ZGVzCisgICB0aGUgTlVMIHRlcm1pbmF0b3Iu CisgKiBgbGVuYCAtIHZpcnR1YWwgYWRkcmVzcyBvZiB3aGVyZSB0byB3cml0ZSB0aGUgbGVuZ3Ro IG9mIGVhY2ggdW5pcXVlIG5hbWUKKyAgIG9mIHRoZSBwYXlsb2FkLiBDYWxsZXIgKk1VU1QqIGFs bG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4gRWFjaCAqTVVTVCogYmUKKyAgIG9mIHNpemVvZih1 aW50MzJfdCkgKDQgYnl0ZXMpLgorCitJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgYW4gcG9zaXRp dmUgbnVtYmVyLCBpdCBpcyB0aGUgbnVtYmVyICh1cHRvIGBucmAKK3Byb3ZpZGVkIHRvIHRoZSBo eXBlcmNhbGwpIG9mIHRoZSBwYXlsb2FkcyByZXR1cm5lZCwgYWxvbmcgd2l0aCBgbnJgIHVwZGF0 ZWQKK3dpdGggdGhlIG51bWJlciBvZiByZW1haW5pbmcgcGF5bG9hZHMsIGB2ZXJzaW9uYCB1cGRh dGVkIChpdCBtYXkgYmUgdGhlIHNhbWUKK2Fjcm9zcyBoeXBlcmNhbGxzIC0gaWYgaXQgdmFyaWVz IHRoZSBkYXRhIGlzIHN0YWxlIGFuZCBmdXJ0aGVyIGNhbGxzIGNvdWxkCitmYWlsKS4gVGhlIGBz dGF0dXNgLCBgbmFtZWAsIGFuZCBgbGVuYCcgYXJlIHVwZGF0ZWQgYXQgdGhlaXIgZGVzaWduZWQg aW5kZXgKK3ZhbHVlIChgaWR4YCkgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgZGF0YS4KKwor SWYgdGhlIGh5cGVyY2FsbCByZXR1cm5zIC1YRU5fRTJCSUcgdGhlIGBucmAgaXMgdG9vIGJpZyBh bmQgc2hvdWxkIGJlCitsb3dlcmVkLgorCitJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgYW4gemVy byB2YWx1ZSB0aGVyZSBhcmUgbm8gbW9yZSBwYXlsb2Fkcy4KKworTm90ZSB0aGF0IGR1ZSB0byB0 aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBoeXBlcmNhbGxzIHRoZSBjb250cm9sIGRvbWFpbiBt aWdodAoraGF2ZSBhZGRlZCBvciByZW1vdmVkIGEgbnVtYmVyIG9mIHBheWxvYWRzIG1ha2luZyB0 aGlzIGluZm9ybWF0aW9uIHN0YWxlLiBJdCBpcwordGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0 b29sc3RhY2sgdG8gdXNlIHRoZSBgdmVyc2lvbmAgZmllbGQgdG8gY2hlY2sKK2JldHdlZW4gZWFj aCBpbnZvY2F0aW9uLiBpZiB0aGUgdmVyc2lvbiBkaWZmZXJzIGl0IHNob3VsZCBkaXNjYXJkIHRo ZSBzdGFsZQorZGF0YSBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoLiBJdCBpcyBPSyBmb3IgdGhlIHRv b2xzdGFjayB0byB1c2UgdGhlIG5ldworYHZlcnNpb25gIGZpZWxkLgorCitUaGUgYHN0cnVjdCB4 ZW5feHNwbGljZV9zdGF0dXNgIHN0cnVjdHVyZSBjb250YWlucyBhbiBzdGF0dXMgb2YgcGF5bG9h ZCB3aGljaCBpbmNsdWRlczoKKworICogYHN0YXR1c2AgLSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQg c3RhdHVzIG9mIHRoZSBwYXlsb2FkOgorICAgKiAqWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRCogICgx KSBsb2FkZWQgYW5kIHRoZSBFTEYgcGF5bG9hZCBzYWZldHkgY2hlY2tzIHBhc3NlZC4KKyAgICog KlhTUExJQ0VfU1RBVFVTX0FQUExJRUQqICgyKSBsb2FkZWQsIGNoZWNrZWQsIGFuZCBhcHBsaWVk LgorICAgKiAgTm8gb3RoZXIgdmFsdWUgaXMgcG9zc2libGUuCisgKiBgcmNgIC0gLVhFTl9FWFgg dHlwZSBlcnJvcnMgZW5jb3VudGVyZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUgbGFzdAorICAgWFNQ TElDRV9BQ1RJT05fKiBvcGVyYXRpb24uIFRoZSBub3JtYWwgdmFsdWVzIGNhbiBiZSB6ZXJvIG9y IC1YRU5fRUFHQUlOIHdoaWNoCisgICByZXNwZWN0aXZlbHkgbWVhbjogc3VjY2VzcyBvciBvcGVy YXRpb24gaW4gcHJvZ3Jlc3MuIE90aGVyIHZhbHVlcworICAgaW1wbHkgYW4gZXJyb3Igb2NjdXJy ZWQuIElmIHRoZXJlIGlzIGFuIGVycm9yIGluIGByY2AsIGBzdGF0dXNgIHdpbGwgKipOT1QqKgor ICAgaGF2ZSBjaGFuZ2VkLgorCitUaGUgc3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKKworPHByZT4K K3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdCB7ICAKKyAgICB1aW50MzJfdCB2ZXJzaW9u OyAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUOiBIeXBlcnZpc29yIHN0YW1wcyB2YWx1ZS4K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdmFyaWVz IGJldHdlZW4gY2FsbHMsIHdlIGFyZSAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldHRpbmcgc3RhbGUgZGF0YS4gKi8gIAorICAgIHVpbnQzMl90IGlk eDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogSW5kZXggaW50byBoeXBlcnZpc29y IGxpc3QuICovCisgICAgdWludDMyX3QgbnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IElOOiBIb3cgbWFueSBzdGF0dXMsIG5hbWVzLCBhbmQgbGVuICAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGZpbGxlZCBvdXQuIENhbiBi ZSB6ZXJvIHRvIGdldCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFtb3VudCBvZiBwYXlsb2FkcyBhbmQgdmVyc2lvbi4gIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQ6IEhvdyBtYW55IHBheWxvYWRzIGxl ZnQuICovICAKKyAgICB1aW50MzJfdCBwYWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog SU46IE11c3QgYmUgemVyby4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoeGVuX3hzcGxp Y2Vfc3RhdHVzX3QpIHN0YXR1czsgIC8qIE9VVC4gTXVzdCBoYXZlIGVub3VnaCAgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFsbG9jYXRlIGZv ciBuciBvZiB0aGVtLiAqLyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82NChjaGFyKSBpZDsgICAg ICAgICAgIC8qIE9VVDogQXJyYXkgb2YgbmFtZXMuIEVhY2ggbWVtYmVyICAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVTVCBYRU5fWFNQTElDRV9OQU1F X1NJWkUgaW4gc2l6ZS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNdXN0IGhhdmUgbnIgb2YgdGhlbS4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVf NjQodWludDMyKSBsZW47ICAgICAgICAvKiBPVVQ6IEFycmF5IG9mIGxlbmd0aHMgb2YgbmFtZSdz LiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3Qg aGF2ZSBuciBvZiB0aGVtLiAqLyAgCit9OyAgCis8L3ByZT4KKworIyMjIFhFTl9TWVNDVExfWFNQ TElDRV9BQ1RJT04gKDMpCisKK1BlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIHRoZSBwYXlsb2FkIHN0 cnVjdHVyZSByZWZlcmVuY2VkIGJ5IHRoZSBgbmFtZWAgZmllbGQuCitUaGUgb3BlcmF0aW9uIHJl cXVlc3QgaXMgYXN5bmNocm9ub3VzIGFuZCB0aGUgc3RhdHVzIHNob3VsZCBiZSByZXRyaWV2ZWQK K2J5IHVzaW5nIGVpdGhlciAqKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqKiBvciAqKlhFTl9TWVND VExfWFNQTElDRV9MSVNUKiogaHlwZXJjYWxsLgorCitUaGUgY2FsbGVyIHByb3ZpZGVzOgorCisg KiBBICdzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAgYG5hbWVgIGNvbnRhaW5pbmcgdGhlIHVuaXF1 ZSBuYW1lLgorICogYGNtZGAgdGhlIGNvbW1hbmQgcmVxdWVzdGVkOgorICAqICpYU1BMSUNFX0FD VElPTl9VTkxPQUQqICgxKSB1bmxvYWQgdGhlIHBheWxvYWQuCisgICBBbnkgZnVydGhlciBoeXBl cmNhbGxzIGFnYWluc3QgdGhlIGBuYW1lYCB3aWxsIHJlc3VsdCBpbiBmYWlsdXJlIHVubGVzcwor ICAgKipYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEKiogaHlwZXJjYWxsIGlzIHBlcmZvbWVkIHdp dGggc2FtZSBgbmFtZWAuCisgICogKlhTUExJQ0VfQUNUSU9OX1JFVkVSVCogKDIpIHJldmVydCB0 aGUgcGF5bG9hZC4gSWYgdGhlIG9wZXJhdGlvbiB0YWtlcworICBtb3JlIHRpbWUgdGhhbiB0aGUg dXBwZXIgYm91bmQgb2YgdGltZSB0aGUgYHJjYCBpbiBgeGVuX3hzcGxpY2Vfc3RhdHVzJworICBy ZXRyaWV2ZWQgdmlhICoqWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCoqIHdpbGwgYmUgLVhFTl9FQlVT WS4KKyAgKiAqWFNQTElDRV9BQ1RJT05fQVBQTFkqICgzKSBhcHBseSB0aGUgcGF5bG9hZC4gSWYg dGhlIG9wZXJhdGlvbiB0YWtlcworICBtb3JlIHRpbWUgdGhhbiB0aGUgdXBwZXIgYm91bmQgb2Yg dGltZSB0aGUgYHJjYCBpbiBgeGVuX3hzcGxpY2Vfc3RhdHVzJworICByZXRyaWV2ZWQgdmlhICoq WEVOX1NZU0NUTF9YU1BMSUNFX0dFVCoqIHdpbGwgYmUgLVhFTl9FQlVTWS4KKyAgKiAqWFNQTElD RV9BQ1RJT05fUkVQTEFDRSogKDQpIHJldmVydCBhbGwgYXBwbGllZCBwYXlsb2FkcyBhbmQgYXBw bHkgdGhpcworICBwYXlsb2FkLiBJZiB0aGUgb3BlcmF0aW9uIHRha2VzIG1vcmUgdGltZSB0aGFu IHRoZSB1cHBlciBib3VuZCBvZiB0aW1lCisgIHRoZSBgcmNgIGluIGB4ZW5feHNwbGljZV9zdGF0 dXMnIHJldHJpZXZlZCB2aWEgKipYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKioKKyAgd2lsbCBiZSAt WEVOX0VCVVNZLgorICogYHRpbWVgIHRoZSB1cHBlciBib3VuZCBvZiB0aW1lIChtcykgdGhlIGNt ZCBzaG91bGQgdGFrZS4gWmVybyBtZWFucyBpbmZpbml0ZS4KKyAgIElmIHdpdGhpbiB0aGUgdGlt ZSB0aGUgb3BlcmF0aW9uIGRvZXMgbm90IHN1Y2NlZWQgdGhlIG9wZXJhdGlvbiB3b3VsZCBnbyBp bgorICAgZXJyb3Igc3RhdGUuCisgKiBgcGFkYCAtICpNVVNUKiBiZSB6ZXJvLgorCitUaGUgcmV0 dXJuIHZhbHVlIHdpbGwgYmUgemVybyB1bmxlc3MgdGhlIHByb3ZpZGVkIGZpZWxkcyBhcmUgaW5j b3JyZWN0LgorCitUaGUgc3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKKworPHByZT4KKyNkZWZpbmUg WFNQTElDRV9BQ1RJT05fVU5MT0FEICAxICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fUkVWRVJU ICAyICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fQVBQTFkgICAzICAKKyNkZWZpbmUgWFNQTElD RV9BQ1RJT05fUkVQTEFDRSA0ICAKK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfYWN0aW9uIHsg IAorICAgIHhlbl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAgICAgICAgICAgICAvKiBJTiwgbmFt ZSBvZiB0aGUgcGF0Y2guICovICAKKyAgICB1aW50MzJfdCBjbWQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogSU46IFhTUExJQ0VfQUNUSU9OXyogKi8gIAorICAgIHVpbnQzMl90IHRpbWU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogWmVybyBpZiBubyB0aW1lb3V0LiAqLyAg IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPciB1cHBl ciBib3VuZCBvZiB0aW1lIChtcykgKi8gICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogZm9yIG9wZXJhdGlvbiB0byB0YWtlLiAqLyAgCit9OyAgCisKKzwv cHJlPgorCisjIyBTdGF0ZSBkaWFncmFtcyBvZiBYU1BMSUNFX0FDVElPTiBjb21tYW5kcy4KKwor VGhlcmUgaXMgYSBzdHJpY3Qgb3JkZXJpbmcgc3RhdGUgb2Ygd2hhdCB0aGUgY29tbWFuZHMgY2Fu IGJlLgorVGhlIFhTUExJQ0VfQUNUSU9OIHByZWZpeCBoYXMgYmVlbiBkcm9wcGVkIHRvIGVhc3kg cmVhZGluZyBhbmQKK2RvZXMgbm90IGluY2x1ZGUgdGhlIFhTUExJQ0VfU1RBVEVTOgorCis8cHJl PgorICAgICAgICAgICAgICAvLT5cICAKKyAgICAgICAgICAgICAgXCAgLyAgCisgVU5MT0FEIDwt LS0gQ0hFQ0sgLS0tPiBSRVBMQUNFfEFQUExZIC0tPiBSRVZFUlQgLS1cICAKKyAgICAgICAgICAg ICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIAorICAgICAgICAgICAg ICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLTwtLS0tLS0tLS0tLS0tLyAgCisKKzwvcHJlPgorIyMg U3RhdGUgdHJhbnNpdGlvbiB0YWJsZSBvZiBYU1BMSUNFX0FDVElPTiBjb21tYW5kcyBhbmQgWFNQ TElDRV9TVEFUVVMuCisKK05vdGUgdGhhdDoKKworIC0gVGhlIENIRUNLRUQgc3RhdGUgaXMgdGhl IHN0YXJ0aW5nIG9uZSBhY2hpZXZlZCB3aXRoICpYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEKiBo eXBlcmNhbGwuCisgLSBUaGUgUkVWRVJUIG9wZXJhdGlvbiBvbiBzdWNjZXNzIHdpbGwgYXV0b21h dGljYWxseSBtb3ZlIHRvIHRoZSBDSEVDS0VEIHN0YXRlLgorIC0gVGhlcmUgYXJlIHR3byBTVEFU RVM6IENIRUNLRUQgYW5kIEFQUExJRUQuCisgLSBUaGVyZSBhcmUgZm91ciBhY3Rpb25zIChha2Eg Y29tbWFuZHMpOiBBUFBMWSwgUkVQTEFDRSwgUkVWRVJULCBhbmQgVU5MT0FELgorCitUaGUgc3Rh dGUgdHJhbnNpdGlvbiB0YWJsZSBvZiB2YWxpZCBzdGF0ZXMgYW5kIGFjdGlvbiBzdGF0ZXM6CisK KzxwcmU+CisKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IEFDVElPTiAgfCBDdXJyZW50IHwgUmVzdWx0ICAg ICAgICAgICAgICAgICAgICAgICAgIHwgTmV4dCBTVEFURTogICAgfAorfCBBQ1RJT04gIHwgU1RB VEUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Q0hFQ0tFRHxBUFBMSUVEIHwK KystLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0rCit8IFVOTE9BRCAgfCBDSEVDS0VEIHwgVW5sb2FkIHBheWxvYWQuIEFs d2F5cyB3b3Jrcy4gIHwgICAgICAgfCAgICAgICAgfAorfCAgICAgICAgIHwgICAgICAgICB8IE5v IG5leHQgc3RhdGVzLiAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgIHwKKystLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0rCit8IEFQUExZICAgfCBDSEVDS0VEIHwgQXBwbHkgcGF5bG9hZCAoc3VjY2VzcykuICAg ICAgIHwgICAgICAgfCAgIHggICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgQVBQTFkgICB8IENIRUNL RUQgfCBBcHBseSBwYXlsb2FkIChlcnJvcnx0aW1lb3V0KSAgfCAgIHggICB8ICAgICAgICB8Cisr LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tKy0tLS0tLS0tKworfCBSRVBMQUNFIHwgQ0hFQ0tFRCB8IFJldmVydCBwYXlsb2FkcyBhbmQg YXBwbHkgbmV3ICB8ICAgICAgIHwgICB4ICAgIHwKK3wgICAgICAgICB8ICAgICAgICAgfCBwYXls b2FkIHdpdGggc3VjY2Vzcy4gICAgICAgICAgfCAgICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tKworfCBSRVBMQUNFIHwgQ0hFQ0tFRCB8IFJldmVydCBwYXlsb2FkcyBhbmQgYXBwbHkgbmV3 ICB8ICAgeCAgIHwgICAgICAgIHwKK3wgICAgICAgICB8ICAgICAgICAgfCBwYXlsb2FkIHdpdGgg ZXJyb3IuICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBS RVZFUlQgIHwgQVBQTElFRCB8IFJldmVydCBwYXlsb2FkIChzdWNjZXNzKS4gICAgICB8ICAgeCAg IHwgICAgICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IFJFVkVSVCAgfCBBUFBMSUVEIHwgUmV2ZXJ0 IHBheWxvYWQgKGVycm9yfHRpbWVvdXQpIHwgICAgICAgfCAgIHggICAgfAorKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0t LSsKKzwvcHJlPgorCitBbGwgdGhlIG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBpbnZhbGlk LgorCisjIyBTZXF1ZW5jZSBvZiBldmVudHMuCisKK1RoZSBub3JtYWwgc2VxdWVuY2Ugb2YgZXZl bnRzIGlzIHRvOgorCisgMS4gKlhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQqIHRvIHVwbG9hZCB0 aGUgcGF5bG9hZC4gSWYgdGhlcmUgYXJlIGVycm9ycyAqU1RPUCogaGVyZS4KKyAyLiAqWEVOX1NZ U0NUTF9YU1BMSUNFX0dFVCogdG8gY2hlY2sgdGhlIGAtPnJjYC4gSWYgKi1YRU5fRUFHQUlOKiBz cGluLiBJZiB6ZXJvIGdvIHRvIG5leHQgc3RlcC4KKyAzLiAqWEVOX1NZU0NUTF9YU1BMSUNFX0FD VElPTiogd2l0aCAqWFNQTElDRV9BQ1RJT05fQVBQTFkqIHRvIGFwcGx5IHRoZSBwYXRjaC4KKyA0 LiAqWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCogdG8gY2hlY2sgdGhlIGAtPnJjYC4gSWYgaW4gKi1Y RU5fRUFHQUlOKiBzcGluLiBJZiB6ZXJvIGV4aXQgd2l0aCBzdWNjZXNzLgorCisKKyMjIEFkZGVu ZHVtCisKK0ltcGxlbWVudGF0aW9uIHF1aXJrcyBzaG91bGQgbm90IGJlIGRpc2N1c3NlZCBpbiBh IGRlc2lnbiBkb2N1bWVudC4KKworSG93ZXZlciB0aGVzZSBvYnNlcnZhdGlvbnMgY2FuIHByb3Zp ZGUgYWlkIHdoZW4gZGV2ZWxvcGluZyBhZ2FpbnN0IHRoaXMKK2RvY3VtZW50LgorCisKKyMjIyBB bHRlcm5hdGl2ZSBhc3NlbWJsZXIKKworQWx0ZXJuYXRpdmUgYXNzZW1ibGVyIGlzIGEgbWVjaGFu aXNtIHRvIHVzZSBkaWZmZXJlbnQgaW5zdHJ1Y3Rpb25zIGRlcGVuZGluZworb24gd2hhdCB0aGUg Q1BVIHN1cHBvcnRzLiBUaGlzIGlzIGRvbmUgYnkgcHJvdmlkaW5nIG11bHRpcGxlIHN0cmVhbXMg b2YgY29kZQordGhhdCBjYW4gYmUgcGF0Y2hlZCBpbiAtIG9yIGlmIHRoZSBDUFUgZG9lcyBub3Qg c3VwcG9ydCBpdCAtIHBhZGRlZCB3aXRoCitgbm9wYCBvcGVyYXRpb25zLiBUaGUgYWx0ZXJuYXRp dmUgYXNzZW1ibGVyIG1hY3JvcyBjYXVzZSB0aGUgY29tcGlsZXIgdG8KK2V4cGFuZCB0aGUgY29k ZSB0byBwbGFjZSBhIG1vc3QgZ2VuZXJpYyBjb2RlIGluIHBsYWNlIC0gZW1pdCBhIHNwZWNpYWwK K0VMRiAuc2VjdGlvbiBoZWFkZXIgdG8gdGFnIHRoaXMgbG9jYXRpb24uIER1cmluZyBydW4tdGlt ZSB0aGUgaHlwZXJ2aXNvcgorY2FuIGxlYXZlIHRoZSBhcmVhcyBhbG9uZSBvciBwYXRjaCB0aGVt IHdpdGggYW4gYmV0dGVyIHN1aXRlZCBvcGNvZGVzLgorCitOb3RlIHRoYXQgcGF0Y2hpbmcgZnVu Y3Rpb25zIHRoYXQgY29weSB0byBvciBmcm9tIGd1ZXN0IG1lbW9yeSByZXF1aXJlcwordG8gc3Vw cG9ydCBhbHRlcm5hdGl2ZSBzdXBwb3J0LiBGb3IgZXhhbXBsZSB0aGlzIGNhbiBiZSBkdWUgdG8g U01BUAorKHNwZWNpZmljYWxseSAqc3RhYyogYW5kICpjbGFjKiBvcGVyYXRpb25zKSB3aGljaCBp cyBlbmFibGVkIG9uIEJyb2Fkd2VsbAorYW5kIGxhdGVyIGFyY2hpdGVjdHVyZXMuIEl0IG1heSBi ZSByZWxhdGVkIHRvIG90aGVyIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucy4KKworIyMjIFdoZW4g dG8gcGF0Y2gKKworRHVyaW5nIHRoZSBkaXNjdXNzaW9uIG9uIHRoZSBkZXNpZ24gdHdvIGNhbmRp ZGF0ZXMgYnViYmxlZCB3aGVyZQordGhlIGNhbGwgc3RhY2sgZm9yIGVhY2ggQ1BVIHdvdWxkIGJl IGRldGVybWluaXN0aWMuIFRoaXMgd291bGQKK21pbmltaXplIHRoZSBjaGFuY2Ugb2YgdGhlIHBh dGNoIG5vdCBiZWluZyBhcHBsaWVkIGR1ZSB0byBzYWZldHkKK2NoZWNrcyBmYWlsaW5nLiBTYWZl dHkgY2hlY2tzIHN1Y2ggYXMgbm90IHBhdGNoaW5nIGNvZGUgd2hpY2gKK2lzIG9uIHRoZSBzdGFj ayAtIHdoaWNoIGNhbiBsZWFkIHRvIGNvcnJ1cHRpb24uCisKKyMjIyMgUmVuZGV6dm91cyBjb2Rl IGluc3RlYWQgb2Ygc3RvcF9tYWNoaW5lIGZvciBwYXRjaGluZworCitUaGUgaHlwZXJ2aXNvcidz IHRpbWUgcmVuZGV6dm91cyBjb2RlIHJ1bnMgc3luY2hyb25vdXNseSBhY3Jvc3MgYWxsIENQVXMK K2V2ZXJ5IHNlY29uZC4gVXNpbmcgdGhlIHN0b3BfbWFjaGluZSB0byBwYXRjaCBjYW4gc3RhbGwg dGhlIHRpbWUgcmVuZGV6dm91cworY29kZSBhbmQgcmVzdWx0IGluIE5NSS4gQXMgc3VjaCBoYXZp bmcgdGhlIHBhdGNoaW5nIGJlIGRvbmUgYXQgdGhlIHRhaWwKK29mIHJlbmRlenZvdXMgY29kZSBz aG91bGQgYXZvaWQgdGhpcyBwcm9ibGVtLgorCitIb3dldmVyIHRoZSBlbnRyYW5jZSBwb2ludCBm b3IgdGhhdCBjb2RlIGlzCitkb19zb2Z0aXJxLT50aW1lcl9zb2Z0aXJxX2FjdGlvbi0+dGltZV9j YWxpYnJhdGlvbgord2hpY2ggZW5kcyB1cCBjYWxsaW5nIG9uX3NlbGVjdGVkX2NwdXMgb24gcmVt b3RlIENQVXMuCisKK1RoZSByZW1vdGUgQ1BVcyByZWNlaXZlIENBTExfRlVOQ1RJT05fVkVDVE9S IElQSSBhbmQgZXhlY3V0ZSB0aGUKK2Rlc2lyZWQgZnVuY3Rpb24uCisKKyMjIyMgQmVmb3JlIGVu dGVyaW5nIHRoZSBndWVzdCBjb2RlLgorCitCZWZvcmUgd2UgY2FsbCBWTVhSZXN1bWUgd2UgY2hl Y2sgd2hldGhlciBhbnkgc29mdCBJUlFzIG5lZWQgdG8gYmUgZXhlY3V0ZWQuCitUaGlzIGlzIGEg Z29vZCBzcG90IGJlY2F1c2UgYWxsIFhlbiBzdGFja3MgYXJlIGVmZmVjdGl2ZWx5IGVtcHR5IGF0 Cit0aGF0IHBvaW50LgorCitUbyByYW5kZXp2b3VzIGFsbCB0aGUgQ1BVcyBhbiBiYXJyaWVyIHdp dGggYW4gbWF4aW11bSB0aW1lb3V0ICh3aGljaAorY291bGQgYmUgYWRqdXN0ZWQpLCBjb21iaW5l ZCB3aXRoIGZvcmNpbmcgYWxsIG90aGVyIENQVXMgdGhyb3VnaCB0aGUKK2h5cGVydmlzb3Igd2l0 aCBJUElzLCBjYW4gYmUgdXRpbGl6ZWQgdG8gZXhlY3V0ZSBsb2Nrc3RlcCBpbnN0cnVjdGlvbnMK K29uIGFsbCBDUFVzLgorCitUaGUgYXBwcm9hY2ggaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIHN0 b3BfbWFjaGluZSBhbmQgdGhlIHRpbWUgcmVuZGV6dm91cworYnV0IGlzIHRpbWUtYm91bmQuIEhv d2V2ZXIgdGhlIGxvY2FsIENQVSBzdGFjayBpcyBtdWNoIHNob3J0ZXIgYW5kCithIGxvdCBtb3Jl IGRldGVybWluaXN0aWMuCisKK1RoaXMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIFhlbiBQcm9qZWN0 IGh5cGVydmlzb3IuCisKKyMjIyBDb21waWxpbmcgdGhlIGh5cGVydmlzb3IgY29kZQorCitIb3Rw YXRjaCBnZW5lcmF0aW9uIG9mdGVuIHJlcXVpcmVzIHN1cHBvcnQgZm9yIGNvbXBpbGluZyB0aGUg dGFyZ2V0Cit3aXRoIC1mZnVuY3Rpb24tc2VjdGlvbnMgLyAtZmRhdGEtc2VjdGlvbnMuICBDaGFu Z2VzIHdvdWxkIGhhdmUgdG8KK2JlIGRvbmUgdG8gdGhlIGxpbmtlciBzY3JpcHRzIHRvIHN1cHBv cnQgdGhpcy4KKworIyMjIEdlbmVyYXRpb24gb2YgeFNwbGljZSBFTEYgcGF5bG9hZHMKKworVGhl IGRlc2lnbiBvZiB0aGF0IGlzIG5vdCBkaXNjdXNzZWQgaW4gdGhpcyBkZXNpZ24uCisKK1RoaXMg aXMgaW1wbGVtZW50ZWQgaW4gYSBzZXBlcmF0ZSB0b29sIHdoaWNoIGxpdmVzIGluIGEgc2VwZXJh dGUKK0dJVCByZXBvLgorCitDdXJyZW50bHkgaXQgcmVzaWRlcyBhdCBodHRwczovL2dpdGh1Yi5j b20vcm9zc2xhZ2Vyd2FsbC94c3BsaWNlLWJ1aWxkCisKKyMjIyBFeGNlcHRpb24gdGFibGVzIGFu ZCBzeW1ib2wgdGFibGVzIGdyb3d0aAorCitXZSBtYXkgbmVlZCBzdXBwb3J0IGZvciBhZGFwdGlu ZyBvciBhdWdtZW50aW5nIGV4Y2VwdGlvbiB0YWJsZXMgaWYKK3BhdGNoaW5nIHN1Y2ggY29kZS4g IEhvdHBhdGNoZXMgbWF5IG5lZWQgdG8gYnJpbmcgdGhlaXIgb3duIHNtYWxsCitleGNlcHRpb24g dGFibGVzIChzaW1pbGFyIHRvIGhvdyBMaW51eCBtb2R1bGVzIHN1cHBvcnQgdGhpcykuCisKK0lm IHN1cHBvcnRpbmcgaG90cGF0Y2hlcyB0aGF0IGludHJvZHVjZSBhZGRpdGlvbmFsIGV4Y2VwdGlv bi1sb2NhdGlvbnMKK2lzIG5vdCBpbXBvcnRhbnQsIG9uZSBjb3VsZCBhbHNvIGNoYW5nZSB0aGUg ZXhjZXB0aW9uIHRhYmxlIGluLXBsYWNlCithbmQgcmVvcmRlciBpdCBhZnRlcndhcmRzLgorCitB cyBmb3VuZCBhbG1vc3QgZXZlcnkgcGF0Y2ggKFhTQSkgdG8gYSBub24tdHJpdmlhbCBmdW5jdGlv biByZXF1aXJlcworYWRkaXRpb25hbCBlbnRyaWVzIGluIHRoZSBleGNlcHRpb24gdGFibGUgYW5k L29yIHRoZSBidWcgZnJhbWVzLgorCitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJv amVjdCBoeXBlcnZpc29yLgorCisjIyMgLnJvZGF0YSBzZWN0aW9ucworCitUaGUgcGF0Y2hpbmcg bWlnaHQgcmVxdWlyZSBzdHJpbmdzIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4gQXMgc3VjaCB3ZSBt dXN0IGJlCithbHNvIGFibGUgdG8gcGF0Y2ggdGhlIHN0cmluZ3MgYXMgbmVlZGVkLiBUaGlzIHNv dW5kcyBzaW1wbGUgLSBidXQgdGhlIGNvbXBpbGVyCitoYXMgYSBoYWJpdCBvZiBjb2FsZXNjaW5n IHN0cmluZ3MgdGhhdCBhcmUgdGhlIHNhbWUgLSB3aGljaCBtZWFucyBpZiB3ZSBpbi1wbGFjZQor YWx0ZXIgdGhlIHN0cmluZ3MgLSBvdGhlciB1c2VycyB3aWxsIGJlIGluYWR2ZXJ0ZW50bHkgYWZm ZWN0ZWQgYXMgd2VsbC4KKworVGhpcyBpcyBhbHNvIHdoZXJlIHBvaW50ZXJzIHRvIGZ1bmN0aW9u cyBsaXZlIC0gYW5kIHdlIG1heSBuZWVkIHRvIHBhdGNoIHRoaXMKK2FzIHdlbGwuIEFuZCBzd2l0 Y2gtc3R5bGUganVtcCB0YWJsZXMuCisKK1RvIGd1YXJkIGFnYWluc3QgdGhhdCB3ZSBtdXN0IGJl IHByZXBhcmVkIHRvIGRvIHBhdGNoaW5nIHNpbWlsYXIgdG8KK3RyYW1wb2xpbmUgcGF0Y2hpbmcg b3IgaW4tbGluZSBkZXBlbmRpbmcgb24gdGhlIGZsYXZvdXIuIElmIHdlIGNhbgorZG8gaW4tbGlu ZSBwYXRjaGluZyB3ZSB3b3VsZCBuZWVkIHRvOgorCisgKiBhbHRlciBgLnJvZGF0YWAgdG8gYmUg d3JpdGVhYmxlLgorICogaW5saW5lIHBhdGNoLgorICogYWx0ZXIgYC5yb2RhdGFgIHRvIGJlIHJl YWQtb25seS4KKworSWYgYXJlIGRvaW5nIHRyYW1wb2xpbmUgcGF0Y2hpbmcgd2Ugd291bGQgbmVl ZCB0bzoKKworICogYWxsb2NhdGUgYSBuZXcgbWVtb3J5IGxvY2F0aW9uIGZvciB0aGUgc3RyaW5n LgorICogYWxsIGxvY2F0aW9ucyB3aGljaCB1c2UgdGhpcyBzdHJpbmcgd2lsbCBoYXZlIHRvIGJl IHVwZGF0ZWQgdG8gdXNlIHRoZQorICAgb2Zmc2V0IHRvIHRoZSBzdHJpbmcuCisgKiBtYXJrIHRo ZSByZWdpb24gUk8gd2hlbiB3ZSBhcmUgZG9uZS4KKworVGhlIHRyYW1wb2xpbmUgcGF0Y2hpbmcg aXMgaW1wbGVtZW50ZWQgaW4gdGhlIFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisKKyMjIyAuYnNz IGFuZCAuZGF0YSBzZWN0aW9ucy4KKworSW4gcGxhY2UgcGF0Y2hpbmcgd3JpdGFibGUgZGF0YSBp cyBub3Qgc3VpdGFibGUgYXMgaXQgaXMgdW5jbGVhciB3aGF0IHNob3VsZCBiZSBkb25lCitkZXBl bmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGF0YS4gQXMgc3VjaCBpdCBzaG91bGQgbm90 IGJlIGF0dGVtcHRlZC4KKworSG93ZXZlciwgZnVuY3Rpb25zIHdoaWNoIGFyZSBiZWluZyBwYXRj aGVkIGNhbiBicmluZyBpbiBjaGFuZ2VzIHRvIHN0cmluZ3MKKyguZGF0YSBvciAucm9kYXRhIHNl Y3Rpb24gY2hhbmdlcyksIG9yIGV2ZW4gdG8gLmJzcyBzZWN0aW9ucy4KKworQXMgc3VjaCB0aGUg RUxGIHBheWxvYWQgY2FuIGludHJvZHVjZSBuZXcgLnJvZGF0YSwgLmJzcywgYW5kIC5kYXRhIHNl Y3Rpb25zLgorUGF0Y2hpbmcgaW4gdGhlIG5ldyBmdW5jdGlvbiB3aWxsIGVuZCB1cCBhbHNvIHBh dGNoaW5nIGluIHRoZSBuZXcgLnJvZGF0YQorc2VjdGlvbiBhbmQgdGhlIG5ldyBmdW5jdGlvbiB3 aWxsIHJlZmVyZW5jZSB0aGUgbmV3IHN0cmluZyBpbiB0aGUgbmV3Cisucm9kYXRhIHNlY3Rpb24u CisKK1RoaXMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisK KyMjIyBTZWN1cml0eQorCitPbmx5IHRoZSBwcml2aWxlZ2VkIGRvbWFpbiBzaG91bGQgYmUgYWxs b3dlZCB0byBkbyB0aGlzIG9wZXJhdGlvbi4KKworCisjIE5vdCBZZXQgRG9uZQorCitUaGlzIGlz IGZvciBmdXJ0aGVyIGRldmVsb3BtZW50IG9mIHhTcGxpY2UuCisKKyMjIFRPRE8gR29hbHMKKwor VGhlIGltcGxlbWVudGF0aW9uIG11c3QgYWxzbyBoYXZlIGEgbWVjaGFuaXNtIGZvciAoaW4gbm8g cGFydGljdWxhciBvcmRlcik6CisKKyAqIEJlIGFibGUgdG8gbG9va3VwIGluIHRoZSBYZW4gaHlw ZXJ2aXNvciB0aGUgc3ltYm9sIG5hbWVzIG9mIGZ1bmN0aW9ucyBmcm9tIHRoZQorICAgRUxGIHBh eWxvYWQuIChFaXRoZXIgYXMgYHN5bWJvbGAgb3IgYHN5bWJvbGArYG9mZnNldGApLgorICogQmUg YWJsZSB0byBwYXRjaCAucm9kYXRhLCAuYnNzLCBhbmQgLmRhdGEgc2VjdGlvbnMuCisgKiBEZWFs IHdpdGggTk1JL01DRSBjaGVja3MgZHVyaW5nIHBhdGNoaW5nIGluc3RlYWQgb2YgaWdub3Jpbmcg dGhlbS4KKyAqIEZ1cnRoZXIgc2FmZXR5IGNoZWNrcyAoYmxhY2tsaXN0IG9mIHdoaWNoIGZ1bmN0 aW9ucyBjYW5ub3QgYmUgcGF0Y2hlZCwgY2hlY2sKKyAgIHRoZSBzdGFjaywgbWFrZSBzdXJlIHRo ZSBwYXlsb2FkIGlzIGJ1aWx0IHdpdGggc2FtZSBjb21waWxlciBhcyBoeXBlcnZpc29yKS4KKyAg IFNwZWNpZmljYWxseSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHhTcGxpY2UgY29kZXBhdGhz IGNhbm5vdCBiZSBwYXRjaGVkLgorICogTk9QIG91dCB0aGUgY29kZSBzZXF1ZW5jZSBpZiBgbmV3 X3NpemVgIGlzIHplcm8uCisgKiBEZWFsIHdpdGggb3RoZXIgcmVsb2NhdGlvbiB0eXBlczogIFJf WDg2XzY0X1s4LDE2LDMyLDMyU10sIFJfWDg2XzY0X1BDWzgsMTYsNjRdCisgICBpbiBwYXlsb2Fk IGZpbGUuCisgKiBBbiBkZXBlbmRlbmN5IG1lY2hhbmlzbSBmb3IgdGhlIHBheWxvYWRzLiBUbyB1 c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBsb2FkOgorICAgIC0gVGhlIGFwcHJvcGlhdGUgcGF5bG9h ZC4gVG8gdmVyaWZ5IHRoYXQgcGF5bG9hZCBpcyBidWlsdCBhZ2FpbnN0IHRoZQorICAgICAgaHlw ZXJ2aXNvci4gVGhpcyBjYW4gYmUgZG9uZSB2aWEgdGhlIGBidWlsZC1pZGAKKyAgICAgIG9yIHZp YSBwcm92aWRpbmcgYW4gY29weSBvZiB0aGUgb2xkIGNvZGUgLSBzbyB0aGF0IHRoZSBoeXBlcnZp c29yIGNhbgorICAgICAgIHZlcmlmeSBpdCBhZ2FpbnN0IHRoZSBjb2RlIGluIG1lbW9yeS4KKyAg ICAtIFRvIGNvbnN0cnVjdCBhbiBhcHByb3BpYXRlIG9yZGVyIG9mIHBheWxvYWRzIHRvIGxvYWQg aW4gY2FzZSB0aGV5CisgICAgICBkZXBlbmQgb24gZWFjaCBvdGhlci4KKworIyMjIEhhbmRsZSBp bmxpbmVkIF9fTElORV9fCisKK1RoaXMgcHJvYmxlbSBpcyByZWxhdGVkIHRvIGhvdHBhdGNoIGNv bnN0cnVjdGlvbgorYW5kIHBvdGVudGlhbGx5IGhhcyBpbmZsdWVuY2Ugb24gdGhlIGRlc2lnbiBv ZiB0aGUgaG90cGF0Y2hpbmcKK2luZnJhc3RydWN0dXJlIGluIFhlbi4KKworRm9yIGV4YW1wbGU6 CisKK1dlIGhhdmUgZmlsZTEuYyB3aXRoIGZ1bmN0aW9ucyBmMSBhbmQgZjIgKGluIHRoYXQgb3Jk ZXIpLiAgZjIgY29udGFpbnMgYQorQlVHKCkgKG9yIFdBUk4oKSkgbWFjcm8gYW5kIGF0IHRoYXQg cG9pbnQgZW1iZWRzIHRoZSBzb3VyY2UgbGluZSBudW1iZXIKK2ludG8gdGhlIGdlbmVyYXRlZCBj b2RlIGZvciBmMi4KKworTm93IHdlIHdhbnQgdG8gaG90cGF0Y2ggZjEgYW5kIHRoZSBob3RwYXRj aCBzb3VyY2UtY29kZSBwYXRjaCBhZGRzIDIKK2xpbmVzIHRvIGYxIGFuZCBhcyBhIGNvbnNlcXVl bmNlIHNoaWZ0cyBvdXQgZjIgYnkgdHdvIGxpbmVzLiAgVGhlIG5ld2x5Citjb25zdHJ1Y3RlZCBm aWxlMS5vIHdpbGwgbm93IGNvbnRhaW4gZGlmZmVyZW5jZXMgaW4gYm90aCBiaW5hcnkKK2Z1bmN0 aW9ucyBmMSAoYmVjYXVzZSB3ZSBhY3R1YWxseSBjaGFuZ2VkIGl0IHdpdGggdGhlIGFwcGxpZWQg cGF0Y2gpIGFuZAorZjIgKGJlY2F1c2UgdGhlIGNvbnRhaW5lZCBCVUcgbWFjcm8gZW1iZWRzIHRo ZSBuZXcgbGluZSBudW1iZXIpLgorCitXaXRob3V0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGFu IGFsZ29yaXRobSBjb21wYXJpbmcgZmlsZTEubyBiZWZvcmUKK2FuZCBhZnRlciBob3RwYXRjaCBh cHBsaWNhdGlvbiB3aWxsIGRldGVybWluZSBib3RoIGZ1bmN0aW9ucyB0byBiZQorY2hhbmdlZCBh bmQgd2lsbCBoYXZlIHRvIGluY2x1ZGUgYm90aCBpbnRvIHRoZSBiaW5hcnkgaG90cGF0Y2guCisK K09wdGlvbnM6CisKKzEuIFRyYW5zZm9ybSBzb3VyY2UgY29kZSBwYXRjaGVzIGZvciBob3RwYXRj aGVzIHRvIGJlIGxpbmUtbmV1dHJhbCBmb3IKKyAgIGVhY2ggY2h1bmsuICBUaGlzIGNhbiBiZSBk b25lIGluIGFsbW9zdCBhbGwgY2FzZXMgd2l0aCBlaXRoZXIKKyAgIHJlZm9ybWF0dGluZyBvZiB0 aGUgc291cmNlIGNvZGUgb3IgYnkgaW50cm9kdWNpbmcgYXJ0aWZpY2lhbAorICAgcHJlcHJvY2Vz c29yICIjbGluZSBuIiBkaXJlY3RpdmVzIHRvIGFkanVzdCBmb3IgdGhlIGludHJvZHVjZWQKKyAg IGRpZmZlcmVuY2VzLgorCisgICBUaGlzIGFwcHJvYWNoIGlzIGxvdy10ZWNoIGFuZCBzaW1wbGUu ICBQb3RlbnRpYWxseSBnZW5lcmF0ZWQKKyAgIGJhY2t0cmFjZXMgYW5kIGV4aXN0aW5nIGRlYnVn IGluZm9ybWF0aW9uIHJlZmVycyB0byB0aGUgb3JpZ2luYWwKKyAgIGJ1aWxkIGFuZCBkb2VzIG5v dCByZWZsZWN0IGhvdHBhdGNoaW5nIHN0YXRlIGV4Y2VwdCBmb3IgYWN0dWFsbHkKKyAgIGhvdHBh dGNoZWQgZnVuY3Rpb25zIGJ1dCBzaG91bGQgYmUgbW9zdGx5IGNvcnJlY3QuCisKKzIuIElnbm9y aW5nIHRoZSBwcm9ibGVtIGFuZCBsaXZpbmcgd2l0aCBhcnRpZmljaWFsbHkgbGFyZ2UgaG90cGF0 Y2hlcworICAgdGhhdCB1bm5lY2Vzc2FyaWx5IHBhdGNoIG1hbnkgZnVuY3Rpb25zLgorCisgICBU aGlzIGFwcHJvYWNoIG1pZ2h0IGxlYWQgdG8gc29tZSB2ZXJ5IGxhcmdlIGhvdHBhdGNoZXMgZGVw ZW5kaW5nIG9uCisgICBjb250ZW50IG9mIHNwZWNpZmljIHNvdXJjZSBmaWxlLiAgSXQgbWF5IGFs c28gdHJpZ2dlciBwdWxsaW5nIGluCisgICBmdW5jdGlvbnMgaW50byB0aGUgaG90cGF0Y2ggdGhh dCBjYW5ub3QgcmVhc29uYWJsZSBiZSBob3RwYXRjaGVkIGR1ZQorICAgdG8gbGltaXRhdGlvbnMg b2YgYSBob3RwYXRjaGluZyBmcmFtZXdvcmsgKGluaXQtc2VjdGlvbnMsIHBhcnRzIG9mCisgICB0 aGUgaG90cGF0Y2hpbmcgZnJhbWV3b3JrIGl0c2VsZiwgLi4uKSBhbmQgbWF5IHRoZXJlYnkgcHJl dmVudCB1cworICAgZnJvbSBwYXRjaGluZyBhIHNwZWNpZmljIHByb2JsZW0uCisKKyAgIFRoZSBk ZWNpc2lvbiBiZXR3ZWVuIDEuIGFuZCAyLiBjYW4gYmUgbWFkZSBvbiBhIHBhdGNoLS1ieS1wYXRj aAorICAgYmFzaXMuCisKKzMuIEludHJvZHVjaW5nIGFuIGluZGlyZWN0aW9uIHRhYmxlIGZvciBz dG9yaW5nIGxpbmUgbnVtYmVycyBhbmQKKyAgIHRyZWF0aW5nIHRoYXQgc3BlY2lhbGx5IGZvciBi aW5hcnkgZGlmZmluZy4gTGludXggbWF5IGZvbGxvdworICAgdGhpcyBhcHByb2FjaC4KKworICAg V2UgbWlnaHQgZWl0aGVyIHVzZSB0aGlzIGluZGlyZWN0aW9uIHRhYmxlIGZvciBydW50aW1lIHVz ZSBhbmQgcGF0Y2gKKyAgIHRoYXQgd2l0aCBlYWNoIGhvdHBhdGNoIChzaW1pbGFybHkgdG8gZXhj ZXB0aW9uIHRhYmxlcykgb3Igd2UgbWlnaHQKKyAgIHB1cmVseSB1c2UgaXQgd2hlbiBidWlsZGlu ZyBob3RwYXRjaGVzIHRvIGlnbm9yZSBmdW5jdGlvbnMgdGhhdCBvbmx5CisgICBkaWZmZXIgYXQg ZXhhY3RseSB0aGUgbG9jYXRpb24gd2hlcmUgYSBsaW5lLW51bWJlciBpcyBlbWJlZGRlZC4KKwor Rm9yIEJVRygpLCBXQVJOKCksIGV0Yy4sIHRoZSBsaW5lIG51bWJlciBpcyBlbWJlZGRlZCBpbnRv IHRoZSBidWcgZnJhbWUsIG5vdAordGhlIGZ1bmN0aW9uIGl0c2VsZi4KKworU2ltaWxhciBjb25z aWRlcmF0aW9ucyBhcmUgdHJ1ZSB0byBhIGxlc3NlciBleHRlbnQgZm9yIF9fRklMRV9fLCBidXQg aXQKK2NvdWxkIGJlIGFyZ3VlZCB0aGF0IGZpbGUgcmVuYW1pbmcgc2hvdWxkIGJlIGRvbmUgb3V0 c2lkZSBvZiBob3RwYXRjaGVzLgorCisjIyMgeFNwbGljZSBpbnRlcmRlcGVuZGVuY2llcworCit4 U3BsaWNlIHBhdGNoZXMgaW50ZXJkZXBlbmRlbmNpZXMgYXJlIHRyaWNreS4KKworVGhlcmUgYXJl IHRoZSB3YXlzIHRoaXMgY2FuIGJlIGFkZHJlc3NlZDoKKyAqIEEgc2luZ2xlIGxhcmdlIHBhdGNo IHRoYXQgc3Vic3VtZXMgYW5kIHJlcGxhY2VzIGFsbCBwcmV2aW91cyBvbmVzLgorICAgT3ZlciB0 aGUgbGlmZS10aW1lIG9mIHBhdGNoaW5nIHRoZSBoeXBlcnZpc29yIHRoaXMgbGFyZ2UgcGF0Y2gK KyAgIGdyb3dzIHRvIGFjY3VtdWxhdGUgYWxsIHRoZSBjb2RlIGNoYW5nZXMuCisgKiBIb3RwYXRj aCBzdGFjayAtIHdoZXJlIGFuIG1lY2hhbmlzbSBleGlzdHMgdGhhdCBsb2FkcyB0aGUgaG90cGF0 Y2hlcworICAgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSB3ZXJlIGJ1aWx0IGluLiBXZSB3b3VsZCBu ZWVkIGFuIGJ1aWxkLWlkCisgICBvZiB0aGUgaHlwZXZpc29yIHRvIG1ha2Ugc3VyZSB0aGUgaG90 LXBhdGNoZXMgYXJlIGJ1aWxkIGFnYWluc3QgdGhlCisgICBjb3JyZWN0IGJ1aWxkLgorICogUGF5 bG9hZCBjb250YWluaW5nIHRoZSBvbGQgY29kZSB0byBjaGVjayBhZ2FpbnN0IHRoYXQuIFRoYXQg YWxsb3dzCisgICB0aGUgaG90cGF0Y2hlcyB0byBiZSBsb2FkZWQgaW5kZXBlZGVudGx5IChpZiB0 aGV5IGRvbid0IG92ZXJsYXApIC0gb3IKKyAgIGlmIHRoZSBvbGQgY29kZSBhbHNvIGNvbnRhaW5z dCBwcmV2aW91c2x5IHBhdGNoZWQgY29kZSAtIGV2ZW4gaWYgdGhleQorICAgb3ZlcmxhcC4KKwor VGhlIGRpc2FkdmFudGFnZSBvZiB0aGUgZmlyc3QgbGFyZ2UgcGF0Y2ggaXMgdGhhdCBpdCBjYW4g Z3JvdyBvdmVyCit0aW1lIGFuZCBub3QgcHJvdmlkZSBhbiBiaXNlY3Rpb24gbWVjaGFuaXNtIHRv IGlkZW50aWZ5IGZhdWx0eSBwYXRjaGVzLgorCitUaGUgaG90LXBhdGNoIHN0YWNrIHB1dHMgc3Ry aWN0cyByZXF1aXJlbWVudHMgb24gdGhlIG9yZGVyIG9mIHRoZSBwYXRjaGVzCitiZWluZyBsb2Fk ZWQgYW5kIHJlcXVpcmVzIGFuIGh5cGVydmlzb3IgYnVpbGQtaWQgdG8gbWF0Y2ggYWdhaW5zdC4K KworVGhlIG9sZCBjb2RlIGFsbG93cyBtdWNoIG1vcmUgZmxleGliaWxpdHkgYW5kIGFuIGFkZGl0 aW9uYWwgZ3VhcmQsCitidXQgaXMgbW9yZSBjb21wbGV4IHRvIGltcGxlbWVudC4KKworIyMgU2ln bmF0dXJlIGNoZWNraW5nIHJlcXVpcmVtZW50cy4KKworVGhlIHNpZ25hdHVyZSBjaGVja2luZyBy ZXF1aXJlcyB0aGF0IHRoZSBsYXlvdXQgb2YgdGhlIGRhdGEgaW4gbWVtb3J5CisqKk1VU1QqKiBi ZSBzYW1lIGZvciBzaWduYXR1cmUgdG8gYmUgdmVyaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUg cGF5bG9hZAorZGF0YSBsYXlvdXQgaW4gRUxGIGZvcm1hdCAqKk1VU1QqKiBtYXRjaCB3aGF0IHRo ZSBoeXBlcnZpc29yIHdvdWxkIGJlCitleHBlY3Rpbmcgc3VjaCB0aGF0IGl0IGNhbiBwcm9wZXJs eSBkbyBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLgorCitUaGUgc2lnbmF0dXJlIGlzIGJhc2VkIG9u IHRoZSBhbGwgb2YgdGhlIHBheWxvYWRzIGNvbnRpbnVvdXNseSBsYWlkIG91dAoraW4gbWVtb3J5 LiBUaGUgc2lnbmF0dXJlIGlzIHRvIGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIEVMRiBw YXlsb2FkCitwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgJ35Nb2R1bGUgc2lnbmF0dXJlIGFwcGVu ZGVkflxuJywgZm9sbG93ZWQgYnkKK2FuIHNpZ25hdHVyZSBoZWFkZXIgdGhlbiBmb2xsb3dlZCBi eSB0aGUgc2lnbmF0dXJlLCBrZXkgaWRlbnRpZmllciwgYW5kIHNpZ25lcnMKK25hbWUuCisKK1Nw ZWNpZmljYWxseSB0aGUgc2lnbmF0dXJlIGhlYWRlciB3b3VsZCBiZToKKworPHByZT4KKyNkZWZp bmUgUEtFWV9BTEdPX0RTQSAgICAgICAwICAKKyNkZWZpbmUgUEtFWV9BTEdPX1JTQSAgICAgICAx ICAKKworI2RlZmluZSBQS0VZX0lEX1BHUCAgICAgICAgIDAgLyogT3BlblBHUCBnZW5lcmF0ZWQg a2V5IElEICovICAKKyNkZWZpbmUgUEtFWV9JRF9YNTA5ICAgICAgICAxIC8qIFguNTA5IGFyYml0 cmFyeSBzdWJqZWN0S2V5SWRlbnRpZmllciAqLyAgCisKKyNkZWZpbmUgSEFTSF9BTEdPX01ENCAg ICAgICAgICAwICAKKyNkZWZpbmUgSEFTSF9BTEdPX01ENSAgICAgICAgICAxICAKKyNkZWZpbmUg SEFTSF9BTEdPX1NIQTEgICAgICAgICAyICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJUEVfTURfMTYw ICAzICAKKyNkZWZpbmUgSEFTSF9BTEdPX1NIQTI1NiAgICAgICA0ICAKKyNkZWZpbmUgSEFTSF9B TEdPX1NIQTM4NCAgICAgICA1ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1NIQTUxMiAgICAgICA2ICAK KyNkZWZpbmUgSEFTSF9BTEdPX1NIQTIyNCAgICAgICA3ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJ UEVfTURfMTI4ICA4ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJUEVfTURfMjU2ICA5ICAKKyNkZWZp bmUgSEFTSF9BTEdPX1JJUEVfTURfMzIwIDEwICAKKyNkZWZpbmUgSEFTSF9BTEdPX1dQXzI1NiAg ICAgIDExICAKKyNkZWZpbmUgSEFTSF9BTEdPX1dQXzM4NCAgICAgIDEyICAKKyNkZWZpbmUgSEFT SF9BTEdPX1dQXzUxMiAgICAgIDEzICAKKyNkZWZpbmUgSEFTSF9BTEdPX1RHUl8xMjggICAgIDE0 ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1RHUl8xNjAgICAgIDE1ICAKKyNkZWZpbmUgSEFTSF9BTEdP X1RHUl8xOTIgICAgIDE2ICAKKworCitzdHJ1Y3QgZWxmX3BheWxvYWRfc2lnbmF0dXJlIHsgIAor CXU4CWFsZ287CQkvKiBQdWJsaWMta2V5IGNyeXB0byBhbGdvcml0aG0gUEtFWV9BTEdPXyouICov ICAKKwl1OAloYXNoOwkJLyogRGlnZXN0IGFsZ29yaXRobTogSEFTSF9BTEdPXyouICovICAKKwl1 OAlpZF90eXBlOwkvKiBLZXkgaWRlbnRpZmllciB0eXBlIFBLRVlfSUQqLiAqLyAgCisJdTgJc2ln bmVyX2xlbjsJLyogTGVuZ3RoIG9mIHNpZ25lcidzIG5hbWUgKi8gIAorCXU4CWtleV9pZF9sZW47 CS8qIExlbmd0aCBvZiBrZXkgaWRlbnRpZmllciAqLyAgCisJdTgJX19wYWRbM107ICAKKwlfX2Jl MzIJc2lnX2xlbjsJLyogTGVuZ3RoIG9mIHNpZ25hdHVyZSBkYXRhICovICAKK307CisKKzwvcHJl PgorKE5vdGUgdGhhdCB0aGlzIGhhcyBiZWVuIGJvcnJvd2VkIGZyb20gTGludXggbW9kdWxlIHNp Z25hdHVyZSBjb2RlLikuCisKKworIyMjIC5ic3MgYW5kIC5kYXRhIHNlY3Rpb25zLgorCitJbiBw bGFjZSBwYXRjaGluZyB3cml0YWJsZSBkYXRhIGlzIG5vdCBzdWl0YWJsZSBhcyBpdCBpcyB1bmNs ZWFyIHdoYXQgc2hvdWxkIGJlIGRvbmUKK2RlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBv ZiBkYXRhLiBBcyBzdWNoIGl0IHNob3VsZCBub3QgYmUgYXR0ZW1wdGVkLgorCitUaGF0IHNhaWQg d2Ugc2hvdWxkIHByb3ZpZGUgaG9vayBmdW5jdGlvbnMgc28gdGhhdCB0aGUgZXhpc3RpbmcgZGF0 YQorY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHBheWxvYWQgYXBwbGljYXRpb24uCisKKworIyMjIElu bGluZSBwYXRjaGluZworCitUaGUgaHlwZXJ2aXNvciBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGlu LXBsYWNlIHBhdGNoaW5nIHdvdWxkIGZpdCB3aXRoaW4KK3RoZSBjb2RlIG9yIGRhdGEuCisKKyMj IyBUcmFtcG9saW5lIChlOSBvcGNvZGUpCisKK1RoZSBlOSBvcGNvZGUgdXNlZCBmb3Igam1wcSB1 c2VzIGEgMzItYml0IHNpZ25lZCBkaXNwbGFjZW1lbnQuIFRoYXQgbWVhbnMKK3dlIGFyZSBsaW1p dGVkIHRvIHVwIHRvIDJHQiBvZiB2aXJ0dWFsIGFkZHJlc3MgdG8gcGxhY2UgdGhlIG5ldyBjb2Rl Citmcm9tIHRoZSBvbGQgY29kZS4gVGhhdCBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSBzaW5jZSBY ZW4gaHlwZXJ2aXNvciBoYXMKK2EgdmVyeSBzbWFsbCBmb290cHJpbnQuCisKK0hvd2V2ZXIgaWYg d2UgbmVlZCAtIHdlIGNhbiBhbHdheXMgYWRkIHR3byB0cmFtcG9saW5lcy4gT25lIGF0IHRoZSAy R0IKK2xpbWl0IHRoYXQgY2FsbHMgdGhlIG5leHQgdHJhbXBvbGluZS4KKworUGxlYXNlIG5vdGUg dGhlcmUgaXMgYSBzbWFsbCBsaW1pdGF0aW9uIGZvciB0cmFtcG9saW5lcyBpbgorZnVuY3Rpb24g ZW50cmllczogVGhlIHRhcmdldCBmdW5jdGlvbiAoKyB0cmFpbGluZyBwYWRkaW5nKSBtdXN0IGJl IGFibGUKK3RvIGFjY29tb2RhdGUgdGhlIHRyYW1wb2xpbmUuIE9uIHg4NiB3aXRoICstMiBHQiBy ZWxhdGl2ZSBqdW1wcywKK3RoaXMgbWVhbnMgNSBieXRlcyBhcmUgcmVxdWlyZWQuCisKK0RlcGVu ZGluZyBvbiBjb21waWxlciBzZXR0aW5ncywgdGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zIGlu IFhlbiB0aGF0CithcmUgc21hbGxlciAod2l0aG91dCBpbnRlci1mdW5jdGlvbiBwYWRkaW5nKS4K KworPHByZT4gCityZWFkZWxmIC1zVyB4ZW4tc3ltcyB8IGdyZXAgIiBGVU5DICIgfCBcCisgICAg YXdrICd7IGlmICgkMyA8IDUpIHByaW50ICQzLCAkNCwgJDUsICQ4IH0nCisKKy4uLgorMyBGVU5D IExPQ0FMIHdiaW52ZF9pcGkKKzMgRlVOQyBMT0NBTCBzaGFkb3dfbDFfaW5kZXgKKy4uLgorPC9w cmU+CitBIGNvbXBpbGUtdGltZSBjaGVjayBmb3IsIGUuZy4sIGEgbWluaW11bSBhbGlnbm1lbnQg b2YgZnVuY3Rpb25zIG9yIGEKK3J1bnRpbWUgY2hlY2sgdGhhdCB2ZXJpZmllcyBzeW1ib2wgc2l6 ZSAoKyBwYWRkaW5nIHRvIG5leHQgc3ltYm9scykgZm9yCit0aGF0IGluIHRoZSBoeXBlcnZpc29y IGlzIGFkdmlzZWQuCisKK1RoZSB0b29sIGZvciBnZW5lcmF0aW5nIHBheWxvYWRzIGN1cnJlbnRs eSBkb2VzIHBlcmZvcm0gYSBjb21waWxlLXRpbWUKK2NoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBm dW5jdGlvbiB0byBiZSByZXBsYWNlZCBpcyBsYXJnZSBlbm91Z2guCisKLS0gCjIuNS4wCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK