From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v8.1 03/27] xsplice: Design document Date: Wed, 13 Apr 2016 18:01:44 -0400 Message-ID: <1460584928-32440-4-git-send-email-konrad.wilk@oracle.com> References: <1460584928-32440-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 1aqSrt-00049x-HL for xen-devel@lists.xenproject.org; Wed, 13 Apr 2016 22:02:37 +0000 In-Reply-To: <1460584928-32440-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: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com, mpohlack@amazon.com, andrew.cooper3@citrix.com, sasha.levin@oracle.com 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 aXQpLgogICAgQWRkIGFsc28gJ3ZlcnNpb24nIGZpZWxkIHRvIHBheWxvYWQuCi0tLQotLS0KIGRv Y3MvbWlzYy94c3BsaWNlLm1hcmtkb3duIHwgMTA0NCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwNDQgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRvY3MvbWlzYy94c3BsaWNlLm1hcmtkb3duCgpkaWZmIC0tZ2l0 IGEvZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24gYi9kb2NzL21pc2MveHNwbGljZS5tYXJrZG93 bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGU3ZDc1Ci0tLSAvZGV2L251 bGwKKysrIGIvZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24KQEAgLTAsMCArMSwxMDQ0IEBACisj IHhTcGxpY2UgRGVzaWduIHYxCisKKyMjIFJhdGlvbmFsZQorCitBIG1lY2hhbmlzbSBpcyByZXF1 aXJlZCB0byBiaW5hcmlseSBwYXRjaCB0aGUgcnVubmluZyBoeXBlcnZpc29yIHdpdGggbmV3Citv cGNvZGVzIHRoYXQgaGF2ZSBjb21lIGFib3V0IGR1ZSB0byBwcmltYXJpbHkgc2VjdXJpdHkgdXBk YXRlcy4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRlc2lnbiBvZiB0aGUgQVBJIHRo YXQgd291bGQgYWxsb3cgdXMgdG8KK3VwbG9hZCB0byB0aGUgaHlwZXJ2aXNvciBiaW5hcnkgcGF0 Y2hlcy4KKworVGhlIGRvY3VtZW50IGlzIHNwbGl0IGluIGZvdXIgc2VjdGlvbnM6CisKKyAqIERl dGFpbGVkIGRlc2NyaXB0aW9ucyBvZiB0aGUgcHJvYmxlbSBzdGF0ZW1lbnQuCisgKiBEZXNpZ24g b2YgdGhlIGRhdGEgc3RydWN0dXJlcy4KKyAqIERlc2lnbiBvZiB0aGUgaHlwZXJjYWxscy4KKyAq IEltcGxlbWVudGF0aW9uIG5vdGVzIHRoYXQgc2hvdWxkIGJlIHRha2VuIGludG8gY29uc2lkZXJh dGlvbi4KKworCisjIyBHbG9zc2FyeQorCisgKiBzcGxpY2UgLSBwYXRjaCBpbiB0aGUgYmluYXJ5 IGNvZGUgd2l0aCBuZXcgb3Bjb2RlcworICogdHJhbXBvbGluZSAtIGEganVtcCB0byBhIG5ldyBp bnN0cnVjdGlvbi4KKyAqIHBheWxvYWQgLSB0ZWxlbWV0cmllcyBvZiB0aGUgb2xkIGNvZGUgYWxv bmcgd2l0aCBiaW5hcnkgYmxvYiBvZiB0aGUgbmV3CisgICBmdW5jdGlvbiAoaWYgbmVlZGVkKS4K KyAqIHJlbG9jIC0gdGVsZW1ldHJpZXMgY29udGFpbmVkIGluIHRoZSBwYXlsb2FkIHRvIGNvbnN0 cnVjdCBwcm9wZXIgdHJhbXBvbGluZS4KKworIyMgSGlzdG9yeQorCitUaGUgZG9jdW1lbnQgaGFz IGdvbmUgdW5kZXIgdmFyaW91cyByZXZpZXdzIGFuZCBvbmx5IGNvdmVycyB2MSBkZXNpZ24uCisK K1RoZSBlbmQgb2YgdGhlIGRvY3VtZW50IGhhcyBhIHNlY3Rpb24gdGl0bGVkIGBOb3QgWWV0IERv bmVgIHdoaWNoCitvdXRsaW5lcyBpZGVhcyBhbmQgZGVzaWduIGZvciB0aGUgZnV0dXJlIHZlcnNp b24gb2YgdGhpcyB3b3JrLgorCisjIyBNdWx0aXBsZSB3YXlzIHRvIHBhdGNoCisKK1RoZSBtZWNo YW5pc20gbmVlZHMgdG8gYmUgZmxleGlibGUgdG8gcGF0Y2ggdGhlIGh5cGVydmlzb3IgaW4gbXVs dGlwbGUgd2F5cworYW5kIGJlIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4gVGhlIGNvbXBpbGVkIGNv ZGUgaXMgY29udGlndW91cyBpbiBtZW1vcnkgd2l0aAorbm8gZ2FwcyAtIHNvIHdlIGhhdmUgbm8g bHV4dXJ5IG9mICdtb3ZpbmcnIGV4aXN0aW5nIGNvZGUgYW5kIG11c3QgZWl0aGVyCitpbnNlcnQg YSB0cmFtcG9saW5lIHRvIHRoZSBuZXcgY29kZSB0byBiZSBleGVjdXRlZCAtIG9yIG9ubHkgbW9k aWZ5IGluLXBsYWNlCit0aGUgY29kZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlLiBUaGUg cGxhY2VtZW50IG9mIG5ldyBjb2RlIGhhcyB0byBiZSBkb25lCitieSBoeXBlcnZpc29yIGFuZCB0 aGUgdmlydHVhbCBhZGRyZXNzIGZvciB0aGUgbmV3IGNvZGUgaXMgYWxsb2NhdGVkIGR5bmFtaWNh bGx5LgorCitUaGlzIGltcGxpZXMgdGhhdCB0aGUgaHlwZXJ2aXNvciBtdXN0IGNvbXB1dGUgdGhl IG5ldyBvZmZzZXRzIHdoZW4gc3BsaWNpbmcKK2luIHRoZSBuZXcgdHJhbXBvbGluZSBjb2RlLiBX aGVyZSB0aGUgdHJhbXBvbGluZSBpcyBhZGRlZCAoaW5zaWRlCit0aGUgZnVuY3Rpb24gd2UgYXJl IHBhdGNoaW5nIG9yIGp1c3QgdGhlIGNhbGxlcnM/KSBpcyBhbHNvIGltcG9ydGFudC4KKworVG8g bGVzc2VuIHRoZSBhbW91bnQgb2YgY29kZSBpbiBoeXBlcnZpc29yLCB0aGUgY29uc3VtZXIgb2Yg dGhlIEFQSQoraXMgcmVzcG9uc2libGUgZm9yIGlkZW50aWZ5aW5nIHdoaWNoIG1lY2hhbmlzbSB0 byBlbXBsb3kgYW5kIGhvdyBtYW55IGxvY2F0aW9ucwordG8gcGF0Y2guIENvbWJpbmF0aW9ucyBv ZiBtb2RpZnlpbmcgaW4tcGxhY2UgY29kZSwgYWRkaW5nIHRyYW1wb2xpbmUsIGV0YworaGFzIHRv IGJlIHN1cHBvcnRlZC4gVGhlIEFQSSBzaG91bGQgYWxsb3cgcmVhZC93cml0ZSBhbnkgbWVtb3J5 IHdpdGhpbgordGhlIGh5cGVydmlzb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgorCitXZSBtdXN0 IGFsc28gaGF2ZSBhIG1lY2hhbmlzbSB0byBxdWVyeSB3aGF0IGhhcyBiZWVuIGFwcGxpZWQgYW5k IGEgbWVjaGFuaXNtCit0byByZXZlcnQgaXQgaWYgbmVlZGVkLgorCisjIyBXb3JrZmxvdworCitU aGUgZXhwZWN0ZWQgd29ya2Zsb3dzIG9mIGhpZ2hlci1sZXZlbCB0b29scyB0aGF0IG1hbmFnZSBt dWx0aXBsZSBwYXRjaGVzCitvbiBwcm9kdWN0aW9uIG1hY2hpbmVzIHdvdWxkIGJlOgorCisgKiBU aGUgZmlyc3Qgb2J2aW91cyB0YXNrIGlzIGxvYWRpbmcgYWxsIGF2YWlsYWJsZSAvIHN1Z2dlc3Rl ZAorICAgaG90cGF0Y2hlcyB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4KKyAqIFdoZW5ldmVyIG5l dyBob3RwYXRjaGVzIGFyZSBpbnN0YWxsZWQsIHRoZXkgc2hvdWxkIGJlIGxvYWRlZCB0b28uCisg KiBPbmUgd2FudHMgdG8gcXVlcnkgd2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4gbG9hZGVkIGF0IHJ1 bnRpbWUuCisgKiBJZiB1bmxvYWRpbmcgaXMgZGVlbWVkIHNhZmUgKHNlZSB1bmxvYWRpbmcgYmVs b3cpLCBvbmUgbWF5IHdhbnQgdG8KKyAgIHN1cHBvcnQgYSB3b3JrZmxvdyB3aGVyZSBhIHNwZWNp ZmljIGhvdHBhdGNoIGlzIG1hcmtlZCBhcyBiYWQgYW5kCisgICB1bmxvYWRlZC4KKworIyMgUGF0 Y2hpbmcgY29kZQorCitUaGUgZmlyc3QgbWVjaGFuaXNtIHRvIHBhdGNoIHRoYXQgY29tZXMgaW4g bWluZCBpcyBpbi1wbGFjZSByZXBsYWNlbWVudC4KK1RoYXQgaXMgcmVwbGFjZSB0aGUgYWZmZWN0 ZWQgY29kZSB3aXRoIG5ldyBjb2RlLiBVbmZvcnR1bmF0ZWx5IHRoZSB4ODYKK0lTQSBpcyB2YXJp YWJsZSBzaXplIHdoaWNoIHBsYWNlcyBsaW1pdHMgb24gaG93IG11Y2ggc3BhY2Ugd2UgaGF2ZSBh dmFpbGFibGUKK3RvIHJlcGxhY2UgdGhlIGluc3RydWN0aW9ucy4gVGhhdCBpcyBub3QgYSBwcm9i bGVtIGlmIHRoZSBjaGFuZ2UgaXMgc21hbGxlcgordGhhbiB0aGUgb3JpZ2luYWwgb3Bjb2RlIGFu ZCB3ZSBjYW4gZmlsbCBpdCB3aXRoIG5vcHMuIFByb2JsZW1zIHdpbGwKK2FwcGVhciBpZiB0aGUg cmVwbGFjZW1lbnQgY29kZSBpcyBsb25nZXIuCisKK1RoZSBzZWNvbmQgbWVjaGFuaXNtIGlzIGJ5 IHRpIHJlcGxhY2UgdGhlIGNhbGwgb3IganVtcCB0byB0aGUKK29sZCBmdW5jdGlvbiB3aXRoIHRo ZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnVuY3Rpb24uCisKK0EgdGhpcmQgbWVjaGFuaXNtIGlzIHRv IGFkZCBhIGp1bXAgdG8gdGhlIG5ldyBmdW5jdGlvbiBhdCB0aGUKK3N0YXJ0IG9mIHRoZSBvbGQg ZnVuY3Rpb24uIE4uQi4gVGhlIFhlbiBoeXBlcnZpc29yIGltcGxlbWVudHMgdGhlIHRoaXJkCitt ZWNoYW5pc20uIFNlZSBgVHJhbXBvbGluZSAoZTkgb3Bjb2RlKWAgc2VjdGlvbiBmb3IgbW9yZSBk ZXRhaWxzLgorCisjIyMgRXhhbXBsZSBvZiB0cmFtcG9saW5lIGFuZCBpbi1wbGFjZSBzcGxpY2lu ZworCitBcyBleGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoZSBoeXBlcnZpc29yIGRvZXMgbm90IGhh dmUgWFNBLTEzMiAoc2VlCisqZG9tY3RsL3N5c2N0bDogZG9uJ3QgbGVhayBoeXBlcnZpc29yIHN0 YWNrIHRvIHRvb2xzdGFja3MqCis0ZmYzNDQ5ZjBlOWQxNzVjZWI5NTUxZDNmMmFlY2I1OTI3M2Y2 MzlkKSBhbmQgd2Ugd291bGQgbGlrZSB0byBiaW5hcnkgcGF0Y2gKK3RoZSBoeXBlcnZpc29yIHdp dGggaXQuIFRoZSBvcmlnaW5hbCBjb2RlIGxvb2tzIGFzIHNvOgorCis8cHJlPgorICAgNDggODkg ZTAgICAgICAgICAgICAgICAgICBtb3YgICAgJXJzcCwlcmF4ICAKKyAgIDQ4IDI1IDAwIDgwIGZm IGZmICAgICAgICAgYW5kICAgICQweGZmZmZmZmZmZmZmZjgwMDAsJXJheCAgCis8L3ByZT4KKwor d2hpbGUgdGhlIG5ldyBwYXRjaGVkIGh5cGVydmlzb3Igd291bGQgYmU6CisKKzxwcmU+CisgICA0 OCBjNyA0NSBiOCAwMCAwMCAwMCAwMCAgIG1vdnEgICAkMHgwLC0weDQ4KCVyYnApICAKKyAgIDQ4 IGM3IDQ1IGMwIDAwIDAwIDAwIDAwICAgbW92cSAgICQweDAsLTB4NDAoJXJicCkgIAorICAgNDgg YzcgNDUgYzggMDAgMDAgMDAgMDAgICBtb3ZxICAgJDB4MCwtMHgzOCglcmJwKSAgCisgICA0OCA4 OSBlMCAgICAgICAgICAgICAgICAgIG1vdiAgICAlcnNwLCVyYXggIAorICAgNDggMjUgMDAgODAg ZmYgZmYgICAgICAgICBhbmQgICAgJDB4ZmZmZmZmZmZmZmZmODAwMCwlcmF4ICAKKzwvcHJlPgor CitUaGlzIGlzIGluc2lkZSB0aGUgYXJjaF9kb19kb21jdGwuIFRoaXMgbmV3IGNoYW5nZSBhZGRz IDIxIGV4dHJhCitieXRlcyBvZiBjb2RlIHdoaWNoIGFsdGVycyBhbGwgdGhlIG9mZnNldHMgaW5z aWRlIHRoZSBmdW5jdGlvbi4gVG8gYWx0ZXIKK3RoZXNlIG9mZnNldHMgYW5kIGFkZCB0aGUgZXh0 cmEgMjEgYnl0ZXMgb2YgY29kZSB3ZSBtaWdodCBub3QgaGF2ZSBlbm91Z2gKK3NwYWNlIGluIC50 ZXh0IHRvIHNxdWVlemUgdGhpcyBpbi4KKworQXMgc3VjaCB3ZSBjb3VsZCBzaW1wbGlmeSB0aGlz IHByb2JsZW0gYnkgb25seSBwYXRjaGluZyB0aGUgc2l0ZQord2hpY2ggY2FsbHMgYXJjaF9kb19k b21jdGw6CisKKzxwcmU+Citkb19kb21jdGw6ICAKKyBlOCA0YiBiMSAwNSAwMCAgICAgICAgICBj YWxscSAgZmZmZjgyZDA4MDE1ZmJiOSA8YXJjaF9kb19kb21jdGw+ICAKKzwvcHJlPgorCit3aXRo IGEgbmV3IGFkZHJlc3MgZm9yIHdoZXJlIHRoZSBuZXcgYGFyY2hfZG9fZG9tY3RsYCB3b3VsZCBi ZSAodGhpcworYXJlYSB3b3VsZCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkpLgorCitBc3R1dGUg cmVhZGVycyB3aWxsIHdvbmRlciB3aGF0IHdlIG5lZWQgdG8gZG8gaWYgd2Ugd2VyZSB0byBwYXRj aCBgZG9fZG9tY3RsYAorLSB3aGljaCBpcyBub3QgY2FsbGVkIGRpcmVjdGx5IGJ5IGh5cGVydmlz b3IgYnV0IG9uIGJlaGFsZiBvZiB0aGUgZ3Vlc3RzIHZpYQordGhlIGBjb21wYXRfaHlwZXJjYWxs X3RhYmxlYCBhbmQgYGh5cGVyY2FsbF90YWJsZWAuCitQYXRjaGluZyB0aGUgb2Zmc2V0IGluIGBo eXBlcmNhbGxfdGFibGVgIGZvciBgZG9fZG9tY3RsOgorKGZmZmY4MmQwODAxMDMwNzkgPGRvX2Rv bWN0bD46KQorCis8cHJlPgorCisgZmZmZjgyZDA4MDI0ZDQ5MDogICA3OSAzMCAgCisgZmZmZjgy ZDA4MDI0ZDQ5MjogICAxMCA4MCBkMCA4MiBmZiBmZiAgIAorCis8L3ByZT4KKword2l0aCB0aGUg bmV3IGFkZHJlc3Mgd2hlcmUgdGhlIG5ldyBgZG9fZG9tY3RsYCBpcyBwb3NzaWJsZS4gVGhlIG90 aGVyCitwbGFjZSB3aGVyZSBpdCBpcyB1c2VkIGlzIGluIGBodm1faHlwZXJjYWxsNjRfdGFibGVg IHdoaWNoIHdvdWxkIG5lZWQKK3RvIGJlIHBhdGNoZWQgaW4gYSBzaW1pbGFyIHdheS4gVGhpcyB3 b3VsZCByZXF1aXJlIGFuIGluLXBsYWNlIHNwbGljaW5nCitvZiB0aGUgbmV3IHZpcnR1YWwgYWRk cmVzcyBvZiBgYXJjaF9kb19kb21jdGxgLgorCitJbiBzdW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRj aGVkIHRoZSBjYWxsZWUgb2YgdGhlIGFmZmVjdGVkIGZ1bmN0aW9uIGJ5CisgKiBhbGxvY2F0aW5n IG1lbW9yeSBmb3IgdGhlIG5ldyBjb2RlIHRvIGxpdmUgaW4sCisgKiBjaGFuZ2luZyB0aGUgdmly dHVhbCBhZGRyZXNzIGluIGFsbCB0aGUgZnVuY3Rpb25zIHdoaWNoIGNhbGxlZCB0aGUgb2xkCisg ICBjb2RlIChjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXQsIHBhdGNoaW5nIHRoZSBjYWxscSB3aXRo IGEgbmV3IGNhbGxxKS4KKyAqIGNoYW5naW5nIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcyB3 aXRoIHRoZSBuZXcgdmlydHVhbCBhZGRyZXNzIG9mCisgICB0aGUgZnVuY3Rpb24gKHNwbGljaW5n IGluIHRoZSBuZXcgdmlydHVhbCBhZGRyZXNzKS4gU2luY2UgdGhpcyB0YWJsZQorICAgcmVzaWRl cyBpbiB0aGUgLnJvZGF0YSBzZWN0aW9uIHdlIHdvdWxkIG5lZWQgdG8gdGVtcG9yYXJpbHkgY2hh bmdlIHRoZQorICAgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyBkdXJpbmcgdGhpcyBwYXJ0LgorCitI b3dldmVyIGl0IGhhcyBkcmF3YmFja3MgLSB0aGUgc2FmZXR5IGNoZWNrcyB3aGljaCBoYXZlIHRv IG1ha2Ugc3VyZQordGhlIGZ1bmN0aW9uIGlzIG5vdCBvbiB0aGUgc3RhY2sgLSBtdXN0IGFsc28g Y2hlY2sgZXZlcnkgY2FsbGVyLiBGb3Igc29tZQorcGF0Y2hlcyB0aGlzIGNvdWxkIG1lYW4gLSBp ZiB0aGVyZSB3ZXJlIGFuIHN1ZmZpY2llbnQgbGFyZ2UgYW1vdW50IG9mCitjYWxsZXJzIC0gdGhh dCB3ZSB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIGFwcGx5IHRoZSB1cGRhdGUuCisKK0hhdmluZyB0 aGUgcGF0Y2hpbmcgZG9uZSBhdCBwcmVkZXRlcm1pbmVkIGluc3RhbmNlcyB3aGVyZSB0aGUgc3Rh Y2tzCithcmUgbm90IGRlZXAgbW9zdGx5IHNvbHZlcyB0aGlzIHByb2JsZW0uCisKKyMjIyBFeGFt cGxlIG9mIGRpZmZlcmVudCB0cmFtcG9saW5lIHBhdGNoaW5nLgorCitBbiBhbHRlcm5hdGl2ZSBt ZWNoYW5pc20gZXhpc3RzIHdoZXJlIHdlIGNhbiBpbnNlcnQgYSB0cmFtcG9saW5lIGluIHRoZQor ZXhpc3RpbmcgZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZCB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBu ZXcgY29kZS4gVGhpcworbGVzc2VucyB0aGUgbG9jYXRpb25zIHRvIGJlIHBhdGNoZWQgdG8gb25l IGJ1dCBpdCBwdXRzIHByZXNzdXJlIG9uIHRoZQorQ1BVIGJyYW5jaGluZyBsb2dpYyAoSS1jYWNo ZSwgYnV0IGl0IGlzIGp1c3Qgb25lIHVuY29uZGl0aW9uYWwganVtcCkuCisKK0ZvciB0aGlzIGV4 YW1wbGUgd2Ugd2lsbCBhc3N1bWUgdGhhdCB0aGUgaHlwZXJ2aXNvciBoYXMgbm90IGJlZW4gY29t cGlsZWQKK3dpdGggZmUyZTA3OWY2NDJlZmZiM2QyNGE2ZTFhNzA5NmVmMjZlNjkxZDkzZSAoWFNB LTEyNTogKnByZS1maWxsIHN0cnVjdHVyZXMKK2ZvciBjZXJ0YWluIEhZUEVSVklTT1JfeGVuX3Zl cnNpb24gc3ViLW9wcyopIHdoaWNoIG1lbS1zZXRzIGFuIHN0cnVjdHVyZQoraW4gYHhlbl92ZXJz aW9uYCBoeXBlcmNhbGwuIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZCAqKmFueXdoZXJlKiog aW4KK3RoZSBoeXBlcnZpc29yIChpdCBpcyBjYWxsZWQgYnkgdGhlIGd1ZXN0KSBidXQgcmVmZXJl bmNlZCBpbiB0aGUKK2Bjb21wYXRfaHlwZXJjYWxsX3RhYmxlYCBhbmQgYGh5cGVyY2FsbF90YWJs ZWAgKGFuZCBpbmRpcmVjdGx5IGNhbGxlZAorZnJvbSB0aGF0KS4gUGF0Y2hpbmcgdGhlIG9mZnNl dCBpbiBgaHlwZXJjYWxsX3RhYmxlYCBmb3IgdGhlIG9sZAorYGRvX3hlbl92ZXJzaW9uYCAoZmZm ZjgyZDA4MDExMmY5ZSA8ZG9feGVuX3ZlcnNpb24+KQorCis8L3ByZT4KKyBmZmZmODJkMDgwMjRi MjcwIDxoeXBlcmNhbGxfdGFibGU+OiAgIAorIC4uLiAgCisgZmZmZjgyZDA4MDI0YjJmODogICA5 ZSAyZiAxMSA4MCBkMCA4MiBmZiBmZiAgCisKKzwvcHJlPgorCit3aXRoIHRoZSBuZXcgYWRkcmVz cyB3aGVyZSB0aGUgbmV3IGBkb194ZW5fdmVyc2lvbmAgaXMgcG9zc2libGUuIFRoZSBvdGhlcgor cGxhY2Ugd2hlcmUgaXQgaXMgdXNlZCBpcyBpbiBgaHZtX2h5cGVyY2FsbDY0X3RhYmxlYCB3aGlj aCB3b3VsZCBuZWVkCit0byBiZSBwYXRjaGVkIGluIGEgc2ltaWxhciB3YXkuIFRoaXMgd291bGQg cmVxdWlyZSBhbiBpbi1wbGFjZSBzcGxpY2luZworb2YgdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3Mg b2YgYGRvX3hlbl92ZXJzaW9uYC4KKworQW4gYWx0ZXJuYXRpdmUgc29sdXRpb24gd291bGQgYmUg dG8gcGF0Y2ggaW5zZXJ0IGEgdHJhbXBvbGluZSBpbiB0aGUKK29sZCBgZG9feGVuX3ZlcnNpb24n IGZ1bmN0aW9uIHRvIGRpcmVjdGx5IGp1bXAgdG8gdGhlIG5ldyBgZG9feGVuX3ZlcnNpb25gLgor Cis8cHJlPgorIGZmZmY4MmQwODAxMTJmOWUgZG9feGVuX3ZlcnNpb246ICAKKyBmZmZmODJkMDgw MTEyZjllOiAgICAgICA0OCBjNyBjMCBkYSBmZiBmZiBmZiAgICBtb3YgICAgJDB4ZmZmZmZmZmZm ZmZmZmZkYSwlcmF4ICAKKyBmZmZmODJkMDgwMTEyZmE1OiAgICAgICA4MyBmZiAwOSAgICAgICAg ICAgICAgICBjbXAgICAgJDB4OSwlZWRpICAKKyBmZmZmODJkMDgwMTEyZmE4OiAgICAgICAwZiA4 NyAyNCAwNSAwMCAwMCAgICAgICBqYSAgICAgZmZmZjgyZDA4MDExMzRkMiA7IGRvX3hlbl92ZXJz aW9uKzB4NTM0ICAKKzwvcHJlPgorCit3aXRoOgorCis8cHJlPgorIGZmZmY4MmQwODAxMTJmOWUg ZG9feGVuX3ZlcnNpb246ICAKKyBmZmZmODJkMDgwMTEyZjllOiAgICAgICBlOSBYWCBZWSBaWiBR USAgICAgICAgICBqbXBxICAgW25ldyBkb194ZW5fdmVyc2lvbl0gIAorPC9wcmU+CisKK3doaWNo IHdvdWxkIGxlc3NlbiB0aGUgYW1vdW50IG9mIHBhdGNoaW5nIHRvIGp1c3Qgb25lIGxvY2F0aW9u LgorCitJbiBzdW1tYXJ5IHRoaXMgZXhhbXBsZSBwYXRjaGVkIHRoZSBhZmZlY3RlZCBmdW5jdGlv biB0byBqdW1wIHRvIHRoZQorbmV3IHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdoaWNoIHJlcXVpcmVk OgorICogYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBuZXcgY29kZSB0byBsaXZlIGluLAorICog aW5zZXJ0aW5nIHRyYW1wb2xpbmUgd2l0aCBuZXcgb2Zmc2V0IGluIHRoZSBvbGQgZnVuY3Rpb24g dG8gcG9pbnQgdG8gdGhlCisgICBuZXcgZnVuY3Rpb24uCisgKiBPcHRpb25hbGx5IHdlIGNhbiBp bnNlcnQgaW4gdGhlIG9sZCBmdW5jdGlvbiBhIHRyYW1wb2xpbmUganVtcCB0byBhbiBmdW5jdGlv bgorICAgcHJvdmlkaW5nIGFuIEJVR19PTiB0byBjYXRjaCBlcnJhbnQgY29kZS4KKworVGhlIGRp c2FkdmFudGFnZSBvZiB0aGlzIGFyZSB0aGF0IHRoZSB1bmNvbmRpdGlvbmFsIGp1bXAgd2lsbCBj b25zdW1lIGEgc21hbGwKK0ktY2FjaGUgcGVuYWx0eS4gSG93ZXZlciB0aGUgc2ltcGxpY2l0eSBv ZiB0aGUgcGF0Y2hpbmcgYW5kIGhpZ2hlciBjaGFuY2UKK29mIHBhc3Npbmcgc2FmZXR5IGNoZWNr cyBtYWtlIHRoaXMgYSB3b3J0aHdoaWxlIG9wdGlvbi4KKworVGhpcyBwYXRjaGluZyBoYXMgYSBz aW1pbGFyIGRyYXdiYWNrIGFzIGlubGluZSBwYXRjaGluZyAtIHRoZSBzYWZldHkKK2NoZWNrcyBo YXZlIHRvIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24gaXMgbm90IG9uIHRoZSBzdGFjay4gSG93ZXZl cgorc2luY2Ugd2UgYXJlIHJlcGxhY2luZyBhdCBhIGhpZ2hlciBsZXZlbCAoYSBmdWxsIGZ1bmN0 aW9uIGFzIG9wcG9zZWQKK3RvIHZhcmlvdXMgb2Zmc2V0cyB3aXRoaW4gZnVuY3Rpb25zKSB0aGUg Y2hlY2tzIGFyZSBzaW1wbGVyLgorCitIYXZpbmcgdGhlIHBhdGNoaW5nIGRvbmUgYXQgcHJlZGV0 ZXJtaW5lZCBpbnN0YW5jZXMgd2hlcmUgdGhlIHN0YWNrcworYXJlIG5vdCBkZWVwIG1vc3RseSBz b2x2ZXMgdGhpcyBwcm9ibGVtIGFzIHdlbGwuCisKKyMjIyBTZWN1cml0eQorCitXaXRoIHRoaXMg bWV0aG9kIHdlIGNhbiByZS13cml0ZSB0aGUgaHlwZXJ2aXNvciAtIGFuZCBhcyBzdWNoIHdlICoq TVVTVCoqIGJlCitkaWxpZ2VudCBpbiBvbmx5IGFsbG93aW5nIGNlcnRhaW4gZ3Vlc3RzIHRvIHBl cmZvcm0gdGhpcyBvcGVyYXRpb24uCisKK0Z1cnRoZXJtb3JlIHdpdGggU2VjdXJlQm9vdCBvciB0 Ym9vdCwgd2UgKipNVVNUKiogYWxzbyB2ZXJpZnkgdGhlIHNpZ25hdHVyZQorb2YgdGhlIHBheWxv YWQgdG8gYmUgY2VydGFpbiBpdCBjYW1lIGZyb20gYSB0cnVzdGVkIHNvdXJjZSBhbmQgaW50ZWdy aXR5Cit3YXMgaW50YWN0LgorCitBcyBzdWNoIHRoZSBoeXBlcmNhbGwgKipNVVNUKiogc3VwcG9y dCBhbiBYU00gcG9saWN5IHRvIGxpbWl0IHdoYXQgdGhlIGd1ZXN0CitpcyBhbGxvd2VkIHRvIGlu dm9rZS4gSWYgdGhlIHN5c3RlbSBpcyBib290ZWQgd2l0aCBzaWduYXR1cmUgY2hlY2tpbmcgdGhl CitzaWduYXR1cmUgY2hlY2tpbmcgd2lsbCBiZSBlbmZvcmNlZC4KKworIyMgRGVzaWduIG9mIHBh eWxvYWQgZm9ybWF0CisKK1RoZSBwYXlsb2FkICoqTVVTVCoqIGNvbnRhaW4gZW5vdWdoIGRhdGEg dG8gYWxsb3cgdXMgdG8gYXBwbHkgdGhlIHVwZGF0ZQorYW5kIGFsc28gc2FmZWx5IHJldmVyc2Ug aXQuIEFzIHN1Y2ggd2UgKipNVVNUKioga25vdzoKKworICogVGhlIGxvY2F0aW9ucyBpbiBtZW1v cnkgdG8gYmUgcGF0Y2hlZC4gVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseQorICAg dmlhIHN5bWJvbHMgb3IgdmlhIHZpcnR1YWwgYWRkcmVzc2VzLgorICogVGhlIG5ldyBjb2RlIHRo YXQgd2lsbCBiZSBwYXRjaGVkIGluLgorCitUaGlzIGJpbmFyeSBmb3JtYXQgY2FuIGJlIGNvbnN0 cnVjdGVkIHVzaW5nIGFuIGN1c3RvbSBiaW5hcnkgZm9ybWF0IGJ1dAordGhlcmUgYXJlIHNldmVy ZSBkaXNhZHZhbnRhZ2VzIG9mIGl0OgorCisgKiBUaGUgZm9ybWF0IG1pZ2h0IG5lZWQgdG8gYmUg Y2hhbmdlZCBhbmQgd2UgbmVlZCBhbiBtZWNoYW5pc20gdG8gYWNjb21tb2RhdGUKKyAgIHRoYXQu CisgKiBJdCBoYXMgdG8gYmUgcGxhdGZvcm0gYWdub3N0aWMuCisgKiBFYXNpbHkgY29uc3RydWN0 ZWQgdXNpbmcgZXhpc3RpbmcgdG9vbHMuCisKK0FzIHN1Y2ggaGF2aW5nIHRoZSBwYXlsb2FkIGlu IGFuIEVMRiBmaWxlIGlzIHRoZSBzZW5zaWJsZSB3YXkuIFdlIHdvdWxkIGJlCitjYXJyeWluZyB0 aGUgdmFyaW91cyBzZXRzIG9mIHN0cnVjdHVyZXMgKGFuZCBkYXRhKSBpbiB0aGUgRUxGIHNlY3Rp b25zIHVuZGVyCitkaWZmZXJlbnQgbmFtZXMgYW5kIHdpdGggZGVmaW5pdGlvbnMuCisKK05vdGUg dGhhdCBldmVyeSBzdHJ1Y3R1cmUgaGFzIHBhZGRpbmcuIFRoaXMgaXMgYWRkZWQgc28gdGhhdCB0 aGUgaHlwZXJ2aXNvcgorY2FuIHJlLXVzZSB0aG9zZSBmaWVsZHMgYXMgaXQgc2VlcyBmaXQuCisK K0VhcmxpZXIgZGVzaWduIGF0dGVtcHRlZCB0byBpbmVwdGx5IGV4cGxhaW4gdGhlIHJlbGF0aW9u cyBvZiB0aGUgRUxGIHNlY3Rpb25zCit0byBlYWNoIG90aGVyIHdpdGhvdXQgdXNpbmcgcHJvcGVy IEVMRiBtZWNoYW5pc20gKHNoX2luZm8sIHNoX2xpbmssIGRhdGEKK3N0cnVjdHVyZXMgdXNpbmcg RWxmIHR5cGVzLCBldGMpLiBUaGlzIGRlc2lnbiB3aWxsIGV4cGxhaW4gdGhlIHN0cnVjdHVyZXMK K2FuZCBob3cgdGhleSBhcmUgdXNlZCB0b2dldGhlciBhbmQgbm90IGRpZyBpbiB0aGUgRUxGIGZv cm1hdCAtIGV4Y2VwdCBtZW50aW9uCit0aGF0IHRoZSBzZWN0aW9uIG5hbWVzIHNob3VsZCBtYXRj aCB0aGUgc3RydWN0dXJlIG5hbWVzLgorCitUaGUgeFNwbGljZSBwYXlsb2FkIGlzIGEgcmVsb2Nh dGFibGUgRUxGIGJpbmFyeS4gQSB0eXBpY2FsIGJpbmFyeSB3b3VsZCBoYXZlOgorCisgKiBPbmUg b3IgbW9yZSAudGV4dCBzZWN0aW9ucy4KKyAqIFplcm8gb3IgbW9yZSByZWFkLW9ubHkgZGF0YSBz ZWN0aW9ucy4KKyAqIFplcm8gb3IgbW9yZSBkYXRhIHNlY3Rpb25zLgorICogUmVsb2NhdGlvbnMg Zm9yIGVhY2ggb2YgdGhlc2Ugc2VjdGlvbnMuCisKK0l0IG1heSBhbHNvIGhhdmUgc29tZSBhcmNo aXRlY3R1cmUtc3BlY2lmaWMgc2VjdGlvbnMuIEZvciBleGFtcGxlOgorCisgKiBBbHRlcm5hdGl2 ZXMgaW5zdHJ1Y3Rpb25zLgorICogQnVnIGZyYW1lcy4KKyAqIEV4Y2VwdGlvbiB0YWJsZXMuCisg KiBSZWxvY2F0aW9ucyBmb3IgZWFjaCBvZiB0aGVzZSBzZWN0aW9ucy4KKworVGhlIHhTcGxpY2Ug Y29yZSBjb2RlIGxvYWRzIHRoZSBwYXlsb2FkIGFzIGEgc3RhbmRhcmQgRUxGIGJpbmFyeSwgcmVs b2NhdGVzIGl0CithbmQgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmMgc2VjdGlvbnMg YXMgbmVlZGVkLiBUaGlzIHByb2Nlc3MgaXMgbXVjaAorbGlrZSB3aGF0IHRoZSBMaW51eCBrZXJu ZWwgbW9kdWxlIGxvYWRlciBkb2VzLgorCitUaGUgcGF5bG9hZCBjb250YWlucyBhIHNlY3Rpb24g KHhzcGxpY2VfcGF0Y2hfZnVuYykgd2l0aCBhbiBhcnJheSBvZiBzdHJ1Y3R1cmVzCitkZXNjcmli aW5nIHRoZSBmdW5jdGlvbnMgdG8gYmUgcGF0Y2hlZDoKKworPHByZT4KK3N0cnVjdCB4c3BsaWNl X3BhdGNoX2Z1bmMgeyAgCisgICAgY29uc3QgY2hhciAqbmFtZTsgIAorICAgIHVpbnQ2NF90IG5l d19hZGRyOyAgCisgICAgdWludDY0X3Qgb2xkX2FkZHI7ICAKKyAgICB1aW50MzJfdCBuZXdfc2l6 ZTsgIAorICAgIHVpbnQzMl90IG9sZF9zaXplOyAgCisgICAgdWludDhfdCB2ZXJzaW9uOyAgCisg ICAgdWludDhfdCBwYWRbMzFdOyAgCit9OyAgCis8L3ByZT4KKworVGhlIHNpemUgb2YgdGhlIHN0 cnVjdHVyZSBpcyA2NCBieXRlcy4KKworKiBgbmFtZWAgaXMgdGhlIHN5bWJvbCBuYW1lIG9mIHRo ZSBvbGQgZnVuY3Rpb24uIE9ubHkgdXNlZCBpZiBgb2xkX2FkZHJgIGlzCisgICB6ZXJvLCBvdGhl cndpc2Ugd2lsbCBiZSB1c2VkIGR1cmluZyBkeW5hbWljIGxpbmtpbmcgKHdoZW4gaHlwZXJ2aXNv ciBsb2FkcworICAgdGhlIHBheWxvYWQpLgorCisqIGBvbGRfYWRkcmAgaXMgdGhlIGFkZHJlc3Mg b2YgdGhlIGZ1bmN0aW9uIHRvIGJlIHBhdGNoZWQgYW5kIGlzIGZpbGxlZCBpbiBhdAorICBwYXls b2FkIGdlbmVyYXRpb24gdGltZSBpZiBoeXBlcnZpc29yIGZ1bmN0aW9uIGFkZHJlc3MgaXMga25v d24uIElmIHVua25vd24sCisgIHRoZSB2YWx1ZSAqTVVTVCogYmUgemVybyBhbmQgdGhlIGh5cGVy dmlzb3Igd2lsbCBhdHRlbXB0IHRvIHJlc29sdmUgdGhlIGFkZHJlc3MuCisKKyogYG5ld19hZGRy YCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdGhhdCBpcyByZXBsYWNpbmcgdGhlIG9s ZAorICBmdW5jdGlvbi4gVGhlIGFkZHJlc3MgaXMgZmlsbGVkIGluIGR1cmluZyByZWxvY2F0aW9u LiBUaGUgdmFsdWUgKipNVVNUKiogYmUKKyAgdGhlIGFkZHJlc3Mgb2YgdGhlIG5ldyBmdW5jdGlv biBpbiB0aGUgZmlsZS4KKworKiBgb2xkX3NpemVgIGFuZCBgbmV3X3NpemVgIGNvbnRhaW4gdGhl IHNpemVzIG9mIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9ucyBpbiBieXRlcy4KKyAgIFRoZSB2YWx1 ZSBvZiBgb2xkX3NpemVgICoqTVVTVCoqIG5vdCBiZSB6ZXJvLgorCisqIGB2ZXJzaW9uYCBpcyB0 byBiZSBvbmUuCisKKyogYHBhZGAgKipNVVNUKiogYmUgemVyby4KKworVGhlIHNpemUgb2YgdGhl IGB4c3BsaWNlX3BhdGNoX2Z1bmNgIGFycmF5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgRUxGIHNl Y3Rpb24KK3NpemUuCisKK1doZW4gYXBwbHlpbmcgdGhlIHBhdGNoIHRoZSBoeXBlcnZpc29yIGl0 ZXJhdGVzIG92ZXIgZWFjaCBgeHNwbGljZV9wYXRjaF9mdW5jYAorc3RydWN0dXJlIGFuZCB0aGUg Y29yZSBjb2RlIGluc2VydHMgYSB0cmFtcG9saW5lIGF0IGBvbGRfYWRkcmAgdG8gYG5ld19hZGRy YC4KK1RoZSBgbmV3X2FkZHJgIGlzIGFsdGVyZWQgd2hlbiB0aGUgRUxGIHBheWxvYWQgaXMgbG9h ZGVkLgorCitXaGVuIHJldmVydGluZyBhIHBhdGNoLCB0aGUgaHlwZXJ2aXNvciBpdGVyYXRlcyBv dmVyIGVhY2ggYHhzcGxpY2VfcGF0Y2hfZnVuY2AKK2FuZCB0aGUgY29yZSBjb2RlIGNvcGllcyB0 aGUgZGF0YSBmcm9tIHRoZSB1bmRvIGJ1ZmZlciAocHJpdmF0ZSBpbnRlcm5hbCBjb3B5KQordG8g YG9sZF9hZGRyYC4KKworIyMgSHlwZXJjYWxscworCitXZSB3aWxsIGVtcGxveSB0aGUgc3ViIG9w ZXJhdGlvbnMgb2YgdGhlIHN5c3RlbSBtYW5hZ2VtZW50IGh5cGVyY2FsbCAoc3lzY3RsKS4KK1Ro ZXJlIGFyZSB0byBiZSBmb3VyIHN1Yi1vcGVyYXRpb25zOgorCisgKiB1cGxvYWQgdGhlIHBheWxv YWRzLgorICogbGlzdGluZyBvZiBwYXlsb2FkcyBzdW1tYXJ5IHVwbG9hZGVkIGFuZCB0aGVpciBz dGF0ZS4KKyAqIGdldHRpbmcgYW4gcGFydGljdWxhciBwYXlsb2FkIHN1bW1hcnkgYW5kIGl0cyBz dGF0ZS4KKyAqIGNvbW1hbmQgdG8gYXBwbHksIGRlbGV0ZSwgb3IgcmV2ZXJ0IHRoZSBwYXlsb2Fk LgorCitNb3N0IG9mIHRoZSBhY3Rpb25zIGFyZSBhc3luY2hyb25vdXMgdGhlcmVmb3JlIHRoZSBj YWxsZXIgaXMgcmVzcG9uc2libGUKK3RvIHZlcmlmeSB0aGF0IGl0IGhhcyBiZWVuIGFwcGxpZWQg cHJvcGVybHkgYnkgcmV0cmlldmluZyB0aGUgc3VtbWFyeSBvZiBpdAorYW5kIHZlcmlmeWluZyB0 aGF0IHRoZXJlIGFyZSBubyBlcnJvciBjb2RlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBheWxvYWQu CisKK1dlICoqTVVTVCoqIG1ha2Ugc29tZSBvZiB0aGVtIGFzeW5jaHJvbm91cyBkdWUgdG8gdGhl IG5hdHVyZSBvZiBwYXRjaGluZworaXQgcmVxdWlyZXMgZXZlcnkgcGh5c2ljYWwgQ1BVIHRvIGJl IGxvY2stc3RlcCB3aXRoIGVhY2ggb3RoZXIuCitUaGUgcGF0Y2hpbmcgbWVjaGFuaXNtIHdoaWxl IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgaXMgbm90IGFuIHNob3J0CitvcGVyYXRpb24gYW5k IGFzIHN1Y2ggdGhlIGRlc2lnbiAqKk1VU1QqKiBhc3N1bWUgaXQgd2lsbCBiZSBhbiBsb25nLXJ1 bm5pbmcKK29wZXJhdGlvbi4KKworVGhlIHN1Yi1vcGVyYXRpb25zIHdpbGwgc3BlbGwgb3V0IGhv dyBwcmVlbXB0aW9uIGlzIHRvIGJlIGhhbmRsZWQgKGlmIGF0IGFsbCkuCisKK0Z1cnRoZXJtb3Jl IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgZGlmZmVyZW50IHBheWxvYWRzIGZvciB0 aGUgc2FtZQorZnVuY3Rpb24uIEFzIHN1Y2ggYW4gdW5pcXVlIG5hbWUgcGVyIHBheWxvYWQgaGFz IHRvIGJlIHZpc2libGUgdG8gYWxsb3cgcHJvcGVyIG1hbmlwdWxhdGlvbi4KKworVGhlIGh5cGVy Y2FsbCBpcyBwYXJ0IG9mIHRoZSBgeGVuX3N5c2N0bGAuIFRoZSB0b3AgbGV2ZWwgc3RydWN0dXJl IGNvbnRhaW5zCitvbmUgdWludDMyX3QgdG8gZGV0ZXJtaW5lIHRoZSBzdWItb3BlcmF0aW9ucyBh bmQgb25lIHBhZGRpbmcgZmllbGQgd2hpY2gKKypNVVNUKiBhbHdheXMgYmUgemVyby4KKworPHBy ZT4KK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2Vfb3AgeyAgCisgICAgdWludDMyX3QgY21kOyAg ICAgICAgICAgICAgICAgICAvKiBJTjogWEVOX1NZU0NUTF9YU1BMSUNFXyouICovICAKKyAgICB1 aW50MzJfdCBwYWQ7ICAgICAgICAgICAgICAgICAgIC8qIElOOiBBbHdheXMgemVyby4gKi8gIAor CXVuaW9uIHsgIAorICAgICAgICAgIC4uLiBzZWUgYmVsb3cgLi4uICAKKyAgICAgICAgfSB1OyAg Cit9OyAgCisKKzwvcHJlPgord2hpbGUgdGhlIHJlc3Qgb2YgaHlwZXJjYWxsIHNwZWNpZmljIHN0 cnVjdHVyZXMgYXJlIHBhcnQgb2YgdGhlIHRoaXMgc3RydWN0dXJlLgorCisjIyMgQmFzaWMgdHlw ZTogc3RydWN0IHhlbl94c3BsaWNlX25hbWUKKworTW9zdCBvZiB0aGUgaHlwZXJjYWxscyBlbXBs b3kgYW4gc2hhcmVkIHN0cnVjdHVyZSBjYWxsZWQgYHN0cnVjdCB4ZW5feHNwbGljZV9uYW1lYAor d2hpY2ggY29udGFpbnM6CisKKyAqIGBuYW1lYCAtIHBvaW50ZXIgd2hlcmUgdGhlIHN0cmluZyBm b3IgdGhlIG5hbWUgaXMgbG9jYXRlZC4KKyAqIGBzaXplYCAtIHRoZSBzaXplIG9mIHRoZSBzdHJp bmcKKyAqIGBwYWRgIC0gcGFkZGluZyAtIHRvIGJlIHplcm8uCisKK1RoZSBzdHJ1Y3R1cmUgaXMg YXMgZm9sbG93OgorCis8cHJlPgorLyogIAorICogIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHBh eWxvYWQuICBTaG91bGQgYmUgaHVtYW4gcmVhZGFibGUuICAKKyAqIEluY2x1ZGVzIHRoZSBOVUwg dGVybWluYXRvciAgCisgKi8gIAorI2RlZmluZSBYRU5fWFNQTElDRV9OQU1FX1NJWkUgMTI4ICAK K3N0cnVjdCB4ZW5feHNwbGljZV9uYW1lIHsgIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoY2hh cikgbmFtZTsgICAgICAgICAvKiBJTiwgcG9pbnRlciB0byBuYW1lLiAqLyAgCisgICAgdWludDE2 X3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOLCBzaXplIG9mIG5hbWUuIE1h eSBiZSB1cHRvICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhFTl9YU1BMSUNFX05BTUVfU0laRS4gKi8gIAorICAgIHVpbnQxNl90IHBhZFszXTsgICAg ICAgICAgICAgICAgICAgICAgICAvKiBJTjogTVVTVCBiZSB6ZXJvLiAqLyAKK307ICAKKzwvcHJl PgorCisjIyMgWEVOX1NZU0NUTF9YU1BMSUNFX1VQTE9BRCAoMCkKKworVXBsb2FkIGEgcGF5bG9h ZCB0byB0aGUgaHlwZXJ2aXNvci4gVGhlIHBheWxvYWQgaXMgdmVyaWZpZWQKK2FnYWluc3QgYmFz aWMgY2hlY2tzIGFuZCBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB0aGUgcHJvcGVyIHJldHVybiBj b2RlCit3aWxsIGJlIHJldHVybmVkLiBUaGUgcGF5bG9hZCBpcyBub3QgYXBwbGllZCBhdCB0aGlz IHRpbWUgLSB0aGF0IGlzCitjb250cm9sbGVkIGJ5ICpYRU5fU1lTQ1RMX1hTUExJQ0VfQUNUSU9O Ki4KKworVGhlIGNhbGxlciBwcm92aWRlczoKKworICogQSBgc3RydWN0IHhlbl94c3BsaWNlX25h bWVgIGNhbGxlZCBgbmFtZWAgd2hpY2ggaGFzIHRoZSB1bmlxdWUgbmFtZS4KKyAqIGBzaXplYCB0 aGUgc2l6ZSBvZiB0aGUgRUxGIHBheWxvYWQgKGluIGJ5dGVzKS4KKyAqIGBwYXlsb2FkYCB0aGUg dmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRoZSBFTEYgcGF5bG9hZCBpcy4KKworVGhlIGBuYW1l YCBjb3VsZCBiZSBhbiBVVUlEIHRoYXQgc3RheXMgZml4ZWQgZm9yZXZlciBmb3IgYSBnaXZlbgor cGF5bG9hZC4gSXQgY2FuIGJlIGVtYmVkZGVkIGludG8gdGhlIEVMRiBwYXlsb2FkIGF0IGNyZWF0 aW9uIHRpbWUKK2FuZCBleHRyYWN0ZWQgYnkgdG9vbHMuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMg emVybyBpZiB0aGUgcGF5bG9hZCB3YXMgc3VjY2VzZnVsbHkgdXBsb2FkZWQuCitPdGhlcndpc2Ug YW4gLVhFTl9FWFggcmV0dXJuIHZhbHVlIGlzIHByb3ZpZGVkLiBEdXBsaWNhdGUgYG5hbWVgIGFy ZSBub3Qgc3VwcG9ydGVkLgorCitUaGUgYHBheWxvYWRgIGlzIHRoZSBFTEYgcGF5bG9hZCBhcyBt ZW50aW9uZWQgaW4gdGhlIGBQYXlsb2FkIGZvcm1hdGAgc2VjdGlvbi4KKworVGhlIHN0cnVjdHVy ZSBpcyBhcyBmb2xsb3c6CisKKzxwcmU+CitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX3VwbG9h ZCB7ICAKKyAgICB4ZW5feHNwbGljZV9uYW1lX3QgbmFtZTsgICAgICAgICAgICAvKiBJTiwgbmFt ZSBvZiB0aGUgcGF0Y2guICovICAKKyAgICB1aW50NjRfdCBzaXplOyAgICAgICAgICAgICAgICAg ICAgICAvKiBJTiwgc2l6ZSBvZiB0aGUgRUxGIGZpbGUuICovICAKKyAgICBYRU5fR1VFU1RfSEFO RExFXzY0KHVpbnQ4KSBwYXlsb2FkOyAvKiBJTjogRUxGIGZpbGUuICovICAKK307ICAKKzwvcHJl PgorCisjIyMgWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCAoMSkKKworUmV0cmlldmUgYW4gc3RhdHVz IG9mIGFuIHNwZWNpZmljIHBheWxvYWQuIFRoaXMgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBBIGBz dHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAgY2FsbGVkIGBuYW1lYCB3aGljaCBoYXMgdGhlIHVuaXF1 ZSBuYW1lLgorICogQSBgc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1c2Agc3RydWN0dXJlLiBUaGUg bWVtYmVyIHZhbHVlcyB3aWxsCisgICBiZSBvdmVyLXdyaXR0ZW4gdXBvbiBjb21wbGV0aW9uLgor CitVcG9uIGNvbXBsZXRpb24gdGhlIGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYCBpcyB1cGRh dGVkLgorCisgKiBgc3RhdHVzYCAtIGluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhl IHBheWxvYWQ6CisgICAqICpYU1BMSUNFX1NUQVRVU19DSEVDS0VEKiAgKDEpIGxvYWRlZCBhbmQg dGhlIEVMRiBwYXlsb2FkIHNhZmV0eSBjaGVja3MgcGFzc2VkLgorICAgKiAqWFNQTElDRV9TVEFU VVNfQVBQTElFRCogKDIpIGxvYWRlZCwgY2hlY2tlZCwgYW5kIGFwcGxpZWQuCisgICAqICBObyBv dGhlciB2YWx1ZSBpcyBwb3NzaWJsZS4KKyAqIGByY2AgLSAtWEVOX0VYWCB0eXBlIGVycm9ycyBl bmNvdW50ZXJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsYXN0CisgICBYU1BMSUNFX0FDVElPTl8q IG9wZXJhdGlvbi4gVGhlIG5vcm1hbCB2YWx1ZXMgY2FuIGJlIHplcm8gb3IgLVhFTl9FQUdBSU4g d2hpY2gKKyAgIHJlc3BlY3RpdmVseSBtZWFuOiBzdWNjZXNzIG9yIG9wZXJhdGlvbiBpbiBwcm9n cmVzcy4gT3RoZXIgdmFsdWVzCisgICBpbXBseSBhbiBlcnJvciBvY2N1cnJlZC4gSWYgdGhlcmUg aXMgYW4gZXJyb3IgaW4gYHJjYCwgYHN0YXR1c2Agd2lsbCAqKk5PVCoqCisgICBoYXZlIGNoYW5n ZWQuCisKK1RoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGh5cGVyY2FsbCBpcyB6ZXJvIG9uIHN1Y2Nl c3MgYW5kIC1YRU5fRVhYIG9uIGZhaWx1cmUuCisoTm90ZSB0aGF0IHRoZSBgcmNgYCB2YWx1ZSBj YW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIHJldHVybiB2YWx1ZSwgYXMgaW4KK3JjPS1YRU5fRUFH QUlOIGFuZCByZXR1cm4gdmFsdWUgY2FuIGJlIDApLgorCitGb3IgZXhhbXBsZSwgc3VwcG9zaW5n IHRoZXJlIGlzIGFuIHBheWxvYWQ6CisKKzxwcmU+Cisgc3RhdHVzOiBYU1BMSUNFX1NUQVRVU19D SEVDS0VECisgcmM6IDAKKzwvcHJlPgorCitXZSBhcHBseSBhbiBhY3Rpb24gLSBYU1BMSUNFX0FD VElPTl9SRVZFUlQgLSB0byByZXZlcnQgaXQgKHdoaWNoIHdvbid0IHdvcmsKK2FzIHdlIGhhdmUg bm90IGV2ZW4gYXBwbGllZCBpdC4gQWZ0ZXJ3YXJkcyB3ZSB3aWxsIGhhdmU6CisKKzxwcmU+Cisg c3RhdHVzOiBYU1BMSUNFX1NUQVRVU19DSEVDS0VECisgcmM6IC1YRU5fRUlOVkFMCis8L3ByZT4K KworSXQgaGFzIGZhaWxlZCBidXQgaXQgcmVtYWlucyBsb2FkZWQuCisKK1RoaXMgb3BlcmF0aW9u IGlzIHN5bmNocm9ub3VzIGFuZCBkb2VzIG5vdCByZXF1aXJlIHByZWVtcHRpb24uCisKK1RoZSBz dHJ1Y3R1cmUgaXMgYXMgZm9sbG93OgorCis8cHJlPgorc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1 cyB7ICAKKyNkZWZpbmUgWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRCAgICAgIDEgIAorI2RlZmluZSBY U1BMSUNFX1NUQVRVU19BUFBMSUVEICAgICAgMiAgCisgICAgdWludDMyX3Qgc3RhdGU7ICAgICAg ICAgICAgICAgICAvKiBPVVQ6IFhTUExJQ0VfU1RBVEVfKi4gKi8gIAorICAgIGludDMyX3QgcmM7 ICAgICAgICAgICAgICAgICAgICAgLyogT1VUOiAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgLVhF Tl9FWFguICovICAKK307ICAKKworc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9nZXQgeyAgCisg ICAgeGVuX3hzcGxpY2VfbmFtZV90IG5hbWU7ICAgICAgICAvKiBJTiwgdGhlIG5hbWUgb2YgdGhl IHBheWxvYWQuICovICAKKyAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCBzdGF0dXM7ICAgIC8qIElO L09VVDogc3RhdHVzIG9mIHRoZSBwYXlsb2FkLiAqLyAgCit9OyAgCis8L3ByZT4KKworIyMjIFhF Tl9TWVNDVExfWFNQTElDRV9MSVNUICgyKQorCitSZXRyaWV2ZSBhbiBhcnJheSBvZiBhYmJyZXZp YXRlZCBzdGF0dXMgYW5kIG5hbWVzIG9mIHBheWxvYWRzIHRoYXQgYXJlIGxvYWRlZCBpbiB0aGUK K2h5cGVydmlzb3IuCisKK1RoZSBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIGB2ZXJzaW9uYC4gVmVy c2lvbiBvZiB0aGUgcGF5bG9hZC4gQ2FsbGVyIHNob3VsZCByZS11c2UgdGhlIGZpZWxkIHByb3Zp ZGVkIGJ5CisgICAgdGhlIGh5cGVydmlzb3IuIElmIHRoZSB2YWx1ZSBkaWZmZXJzIHRoZSBkYXRh IGlzIHN0YWxlLgorICogYGlkeGAgaW5kZXggaXRlcmF0b3IuIFRoZSBpbmRleCBpbnRvIHRoZSBo eXBlcnZpc29yJ3MgcGF5bG9hZCBjb3VudC4gSXQgaXMKKyAgICByZWNvbW1lbmRlZCB0aGF0IG9u IGZpcnN0IGludm9jYXRpb24gemVybyBiZSB1c2VkIHNvIHRoYXQgYG5yYCAod2hpY2ggdGhlCisg ICAgaHlwZXJ2aXNvciB3aWxsIHVwZGF0ZSB3aXRoIHRoZSByZW1haW5pbmcgcGF5bG9hZCBjb3Vu dCkgYmUgcHJvdmlkZWQuCisgICAgQWxzbyB0aGUgaHlwZXJ2aXNvciB3aWxsIHByb3ZpZGUgYHZl cnNpb25gIHdpdGggdGhlIG1vc3QgY3VycmVudCB2YWx1ZS4KKyAqIGBucmAgdGhlIG1heCBudW1i ZXIgb2YgZW50cmllcyB0byBwb3B1bGF0ZS4gQ2FuIGJlIHplcm8gd2hpY2ggd2lsbCByZXN1bHQK KyAgICBpbiB0aGUgaHlwZXJjYWxsIGJlaW5nIGEgcHJvYmluZyBvbmUgYW5kIHJldHVybiB0aGUg bnVtYmVyIG9mIHBheWxvYWRzCisgICAgKGFuZCB1cGRhdGUgdGhlIGB2ZXJzaW9uYCkuCisgKiBg cGFkYCAtICpNVVNUKiBiZSB6ZXJvLgorICogYHN0YXR1c2AgdmlydHVhbCBhZGRyZXNzIG9mIHdo ZXJlIHRvIHdyaXRlIGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYAorICAgc3RydWN0dXJlcy4g Q2FsbGVyICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9mIHRoZW0uCisgKiBgbmFtZWAgLSB2 aXJ0dWFsIGFkZHJlc3Mgb2Ygd2hlcmUgdG8gd3JpdGUgdGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBw YXlsb2FkLgorICAgQ2FsbGVyICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9mIHRoZW0uIEVh Y2ggKk1VU1QqIGJlIG9mCisgICAqKlhFTl9YU1BMSUNFX05BTUVfU0laRSoqIHNpemUuIE5vdGUg dGhhdCAqKlhFTl9YU1BMSUNFX05BTUVfU0laRSoqIGluY2x1ZGVzCisgICB0aGUgTlVMIHRlcm1p bmF0b3IuCisgKiBgbGVuYCAtIHZpcnR1YWwgYWRkcmVzcyBvZiB3aGVyZSB0byB3cml0ZSB0aGUg bGVuZ3RoIG9mIGVhY2ggdW5pcXVlIG5hbWUKKyAgIG9mIHRoZSBwYXlsb2FkLiBDYWxsZXIgKk1V U1QqIGFsbG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4gRWFjaCAqTVVTVCogYmUKKyAgIG9mIHNp emVvZih1aW50MzJfdCkgKDQgYnl0ZXMpLgorCitJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMgYW4g cG9zaXRpdmUgbnVtYmVyLCBpdCBpcyB0aGUgbnVtYmVyICh1cHRvIGBucmAKK3Byb3ZpZGVkIHRv IHRoZSBoeXBlcmNhbGwpIG9mIHRoZSBwYXlsb2FkcyByZXR1cm5lZCwgYWxvbmcgd2l0aCBgbnJg IHVwZGF0ZWQKK3dpdGggdGhlIG51bWJlciBvZiByZW1haW5pbmcgcGF5bG9hZHMsIGB2ZXJzaW9u YCB1cGRhdGVkIChpdCBtYXkgYmUgdGhlIHNhbWUKK2Fjcm9zcyBoeXBlcmNhbGxzIC0gaWYgaXQg dmFyaWVzIHRoZSBkYXRhIGlzIHN0YWxlIGFuZCBmdXJ0aGVyIGNhbGxzIGNvdWxkCitmYWlsKS4g VGhlIGBzdGF0dXNgLCBgbmFtZWAsIGFuZCBgbGVuYCcgYXJlIHVwZGF0ZWQgYXQgdGhlaXIgZGVz aWduZWQgaW5kZXgKK3ZhbHVlIChgaWR4YCkgd2l0aCB0aGUgcmV0dXJuZWQgdmFsdWUgb2YgZGF0 YS4KKworSWYgdGhlIGh5cGVyY2FsbCByZXR1cm5zIC1YRU5fRTJCSUcgdGhlIGBucmAgaXMgdG9v IGJpZyBhbmQgc2hvdWxkIGJlCitsb3dlcmVkLgorCitJZiB0aGUgaHlwZXJjYWxsIHJldHVybnMg YW4gemVybyB2YWx1ZSB0aGVyZSBhcmUgbm8gbW9yZSBwYXlsb2Fkcy4KKworTm90ZSB0aGF0IGR1 ZSB0byB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBoeXBlcmNhbGxzIHRoZSBjb250cm9sIGRv bWFpbiBtaWdodAoraGF2ZSBhZGRlZCBvciByZW1vdmVkIGEgbnVtYmVyIG9mIHBheWxvYWRzIG1h a2luZyB0aGlzIGluZm9ybWF0aW9uIHN0YWxlLiBJdCBpcwordGhlIHJlc3BvbnNpYmlsaXR5IG9m IHRoZSB0b29sc3RhY2sgdG8gdXNlIHRoZSBgdmVyc2lvbmAgZmllbGQgdG8gY2hlY2sKK2JldHdl ZW4gZWFjaCBpbnZvY2F0aW9uLiBpZiB0aGUgdmVyc2lvbiBkaWZmZXJzIGl0IHNob3VsZCBkaXNj YXJkIHRoZSBzdGFsZQorZGF0YSBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoLiBJdCBpcyBPSyBmb3Ig dGhlIHRvb2xzdGFjayB0byB1c2UgdGhlIG5ldworYHZlcnNpb25gIGZpZWxkLgorCitUaGUgYHN0 cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgIHN0cnVjdHVyZSBjb250YWlucyBhbiBzdGF0dXMgb2Yg cGF5bG9hZCB3aGljaCBpbmNsdWRlczoKKworICogYHN0YXR1c2AgLSBpbmRpY2F0ZXMgdGhlIGN1 cnJlbnQgc3RhdHVzIG9mIHRoZSBwYXlsb2FkOgorICAgKiAqWFNQTElDRV9TVEFUVVNfQ0hFQ0tF RCogICgxKSBsb2FkZWQgYW5kIHRoZSBFTEYgcGF5bG9hZCBzYWZldHkgY2hlY2tzIHBhc3NlZC4K KyAgICogKlhTUExJQ0VfU1RBVFVTX0FQUExJRUQqICgyKSBsb2FkZWQsIGNoZWNrZWQsIGFuZCBh cHBsaWVkLgorICAgKiAgTm8gb3RoZXIgdmFsdWUgaXMgcG9zc2libGUuCisgKiBgcmNgIC0gLVhF Tl9FWFggdHlwZSBlcnJvcnMgZW5jb3VudGVyZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUgbGFzdAor ICAgWFNQTElDRV9BQ1RJT05fKiBvcGVyYXRpb24uIFRoZSBub3JtYWwgdmFsdWVzIGNhbiBiZSB6 ZXJvIG9yIC1YRU5fRUFHQUlOIHdoaWNoCisgICByZXNwZWN0aXZlbHkgbWVhbjogc3VjY2VzcyBv ciBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MuIE90aGVyIHZhbHVlcworICAgaW1wbHkgYW4gZXJyb3Ig b2NjdXJyZWQuIElmIHRoZXJlIGlzIGFuIGVycm9yIGluIGByY2AsIGBzdGF0dXNgIHdpbGwgKipO T1QqKgorICAgaGF2ZSBjaGFuZ2VkLgorCitUaGUgc3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKKwor PHByZT4KK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfbGlzdCB7ICAKKyAgICB1aW50MzJfdCB2 ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgLyogT1VUOiBIeXBlcnZpc29yIHN0YW1wcyB2 YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYg dmFyaWVzIGJldHdlZW4gY2FsbHMsIHdlIGFyZSAgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldHRpbmcgc3RhbGUgZGF0YS4gKi8gIAorICAgIHVpbnQz Ml90IGlkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogSW5kZXggaW50byBoeXBl cnZpc29yIGxpc3QuICovCisgICAgdWludDMyX3QgbnI7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIElOOiBIb3cgbWFueSBzdGF0dXMsIG5hbWVzLCBhbmQgbGVuICAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGZpbGxlZCBvdXQu IENhbiBiZSB6ZXJvIHRvIGdldCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFtb3VudCBvZiBwYXlsb2FkcyBhbmQgdmVyc2lvbi4gIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQ6IEhvdyBtYW55IHBheWxv YWRzIGxlZnQuICovICAKKyAgICB1aW50MzJfdCBwYWQ7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogSU46IE11c3QgYmUgemVyby4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoeGVu X3hzcGxpY2Vfc3RhdHVzX3QpIHN0YXR1czsgIC8qIE9VVC4gTXVzdCBoYXZlIGVub3VnaCAgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlIGFsbG9j YXRlIGZvciBuciBvZiB0aGVtLiAqLyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82NChjaGFyKSBp ZDsgICAgICAgICAgIC8qIE9VVDogQXJyYXkgb2YgbmFtZXMuIEVhY2ggbWVtYmVyICAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVTVCBYRU5fWFNQTElD RV9OQU1FX1NJWkUgaW4gc2l6ZS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNdXN0IGhhdmUgbnIgb2YgdGhlbS4gKi8gIAorICAgIFhFTl9HVUVTVF9I QU5ETEVfNjQodWludDMyKSBsZW47ICAgICAgICAvKiBPVVQ6IEFycmF5IG9mIGxlbmd0aHMgb2Yg bmFtZSdzLiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE11c3QgaGF2ZSBuciBvZiB0aGVtLiAqLyAgCit9OyAgCis8L3ByZT4KKworIyMjIFhFTl9TWVND VExfWFNQTElDRV9BQ1RJT04gKDMpCisKK1BlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIHRoZSBwYXls b2FkIHN0cnVjdHVyZSByZWZlcmVuY2VkIGJ5IHRoZSBgbmFtZWAgZmllbGQuCitUaGUgb3BlcmF0 aW9uIHJlcXVlc3QgaXMgYXN5bmNocm9ub3VzIGFuZCB0aGUgc3RhdHVzIHNob3VsZCBiZSByZXRy aWV2ZWQKK2J5IHVzaW5nIGVpdGhlciAqKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqKiBvciAqKlhF Tl9TWVNDVExfWFNQTElDRV9MSVNUKiogaHlwZXJjYWxsLgorCitUaGUgY2FsbGVyIHByb3ZpZGVz OgorCisgKiBBICdzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAgYG5hbWVgIGNvbnRhaW5pbmcgdGhl IHVuaXF1ZSBuYW1lLgorICogYGNtZGAgdGhlIGNvbW1hbmQgcmVxdWVzdGVkOgorICAqICpYU1BM SUNFX0FDVElPTl9DSEVDSyogKDEpIGNoZWNrIHRoYXQgdGhlIHBheWxvYWQgd2lsbCBhcHBseSBw cm9wZXJseS4KKyAgICBUaGlzIGFsc28gdmVyZmllcyB0aGUgcGF5bG9hZCAtIHdoaWNoIG1heSBy ZXF1aXJlIFNlY3VyZUJvb3QgZmlybXdhcmUKKyAgICBjYWxscy4gVGhpcyBpcyB0aGUgaW5pdGlh bCBzdGF0ZSBhbiBwYXlsb2FkIGlzIGluLgorICAqICpYU1BMSUNFX0FDVElPTl9VTkxPQUQqICgy KSB1bmxvYWQgdGhlIHBheWxvYWQuCisgICBBbnkgZnVydGhlciBoeXBlcmNhbGxzIGFnYWluc3Qg dGhlIGBuYW1lYCB3aWxsIHJlc3VsdCBpbiBmYWlsdXJlIHVubGVzcworICAgKipYRU5fU1lTQ1RM X1hTUExJQ0VfVVBMT0FEKiogaHlwZXJjYWxsIGlzIHBlcmZvbWVkIHdpdGggc2FtZSBgbmFtZWAu CisgICogKlhTUExJQ0VfQUNUSU9OX1JFVkVSVCogKDMpIHJldmVydCB0aGUgcGF5bG9hZC4gSWYg dGhlIG9wZXJhdGlvbiB0YWtlcworICBtb3JlIHRpbWUgdGhhbiB0aGUgdXBwZXIgYm91bmQgb2Yg dGltZSB0aGUgYHJjYCBpbiBgeGVuX3hzcGxpY2Vfc3RhdHVzJworICByZXRyaWV2ZWQgdmlhICoq WEVOX1NZU0NUTF9YU1BMSUNFX0dFVCoqIHdpbGwgYmUgLVhFTl9FQlVTWS4KKyAgKiAqWFNQTElD RV9BQ1RJT05fQVBQTFkqICg0KSBhcHBseSB0aGUgcGF5bG9hZC4gSWYgdGhlIG9wZXJhdGlvbiB0 YWtlcworICBtb3JlIHRpbWUgdGhhbiB0aGUgdXBwZXIgYm91bmQgb2YgdGltZSB0aGUgYHJjYCBp biBgeGVuX3hzcGxpY2Vfc3RhdHVzJworICByZXRyaWV2ZWQgdmlhICoqWEVOX1NZU0NUTF9YU1BM SUNFX0dFVCoqIHdpbGwgYmUgLVhFTl9FQlVTWS4KKyAgKiAqWFNQTElDRV9BQ1RJT05fUkVQTEFD RSogKDUpIHJldmVydCBhbGwgYXBwbGllZCBwYXlsb2FkcyBhbmQgYXBwbHkgdGhpcworICBwYXls b2FkLiBJZiB0aGUgb3BlcmF0aW9uIHRha2VzIG1vcmUgdGltZSB0aGFuIHRoZSB1cHBlciBib3Vu ZCBvZiB0aW1lCisgIHRoZSBgcmNgIGluIGB4ZW5feHNwbGljZV9zdGF0dXMnIHJldHJpZXZlZCB2 aWEgKipYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKioKKyAgd2lsbCBiZSAtWEVOX0VCVVNZLgorICog YHRpbWVgIHRoZSB1cHBlciBib3VuZCBvZiB0aW1lIChtcykgdGhlIGNtZCBzaG91bGQgdGFrZS4g WmVybyBtZWFucyBpbmZpbml0ZS4KKyAgIElmIHdpdGhpbiB0aGUgdGltZSB0aGUgb3BlcmF0aW9u IGRvZXMgbm90IHN1Y2NlZWQgdGhlIG9wZXJhdGlvbiB3b3VsZCBnbyBpbgorICAgZXJyb3Igc3Rh dGUuCisgKiBgcGFkYCAtICpNVVNUKiBiZSB6ZXJvLgorCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwg YmUgemVybyB1bmxlc3MgdGhlIHByb3ZpZGVkIGZpZWxkcyBhcmUgaW5jb3JyZWN0LgorCitUaGUg c3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKKworPHByZT4KKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05f Q0hFQ0sgICAxICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fVU5MT0FEICAyICAKKyNkZWZpbmUg WFNQTElDRV9BQ1RJT05fUkVWRVJUICAzICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fQVBQTFkg ICA0ICAKKyNkZWZpbmUgWFNQTElDRV9BQ1RJT05fUkVQTEFDRSA1ICAKK3N0cnVjdCB4ZW5fc3lz Y3RsX3hzcGxpY2VfYWN0aW9uIHsgIAorICAgIHhlbl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAg ICAgICAgICAgICAvKiBJTiwgbmFtZSBvZiB0aGUgcGF0Y2guICovICAKKyAgICB1aW50MzJfdCBj bWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IFhTUExJQ0VfQUNUSU9OXyogKi8g IAorICAgIHVpbnQzMl90IHRpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogWmVy byBpZiBubyB0aW1lb3V0LiAqLyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvKiBPciB1cHBlciBib3VuZCBvZiB0aW1lIChtcykgKi8gICAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIG9wZXJhdGlvbiB0byB0 YWtlLiAqLyAgCit9OyAgCisKKzwvcHJlPgorCisjIyBTdGF0ZSBkaWFncmFtcyBvZiBYU1BMSUNF X0FDVElPTiBjb21tYW5kcy4KKworVGhlcmUgaXMgYSBzdHJpY3Qgb3JkZXJpbmcgc3RhdGUgb2Yg d2hhdCB0aGUgY29tbWFuZHMgY2FuIGJlLgorVGhlIFhTUExJQ0VfQUNUSU9OIHByZWZpeCBoYXMg YmVlbiBkcm9wcGVkIHRvIGVhc3kgcmVhZGluZyBhbmQKK2RvZXMgbm90IGluY2x1ZGUgdGhlIFhT UExJQ0VfU1RBVEVTOgorCis8cHJlPgorICAgICAgICAgICAgICAvLT5cICAKKyAgICAgICAgICAg ICAgXCAgLyAgCisgVU5MT0FEIDwtLS0gQ0hFQ0sgLS0tPiBSRVBMQUNFfEFQUExZIC0tPiBSRVZF UlQgLS1cICAKKyAgICAgICAgICAgICAgICBcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIAorICAgICAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLTwtLS0tLS0tLS0t LS0tLyAgCisKKzwvcHJlPgorIyMgU3RhdGUgdHJhbnNpdGlvbiB0YWJsZSBvZiBYU1BMSUNFX0FD VElPTiBjb21tYW5kcyBhbmQgWFNQTElDRV9TVEFUVVMuCisKK05vdGUgdGhhdDoKKworIC0gVGhl IENIRUNLRUQgc3RhdGUgaXMgdGhlIHN0YXJ0aW5nIG9uZSBhY2hpZXZlZCB3aXRoICpYRU5fU1lT Q1RMX1hTUExJQ0VfVVBMT0FEKiBoeXBlcmNhbGwuCisgLSBUaGUgUkVWRVJUIG9wZXJhdGlvbiBv biBzdWNjZXNzIHdpbGwgYXV0b21hdGljYWxseSBtb3ZlIHRvIHRoZSBDSEVDS0VEIHN0YXRlLgor IC0gVGhlcmUgYXJlIHR3byBTVEFURVM6IENIRUNLRUQgYW5kIEFQUExJRUQuCisgLSBUaGVyZSBh cmUgZml2ZSBhY3Rpb25zIChha2EgY29tbWFuZHMpOiBDSEVDSywgQVBQTFksIFJFUExBQ0UsIFJF VkVSVCwgYW5kIFVOTE9BRC4KKworVGhlIHN0YXRlIHRyYW5zaXRpb24gdGFibGUgb2YgdmFsaWQg c3RhdGVzIGFuZCBhY3Rpb24gc3RhdGVzOgorCis8cHJlPgorCisrLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBB Q1RJT04gIHwgQ3VycmVudCB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICB8IE5leHQg U1RBVEU6ICAgIHwKK3wgQUNUSU9OICB8IFNUQVRFICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfENIRUNLRUR8QVBQTElFRCB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBDSEVDSyAgIHwg Q0hFQ0tFRCB8IENoZWNrIHBheWxvYWQgKG9uY2UgbW9yZSwgbm8pICB8ICAgeCAgIHwgICAgICAg IHwKK3wgICAgICAgICB8ICAgICAgICAgfCBlcnJvcnMpICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBDSEVDSyAgIHwgQ0hFQ0tFRCB8 IENoZWNrIHBheWxvYWQgKG9uY2UgbW9yZSwgd2l0aCB8ICAgICAgIHwgICAgICAgIHwKK3wgICAg ICAgICB8ICAgICAgICAgfCBlcnJvcnMpICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8 ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBVTkxPQUQgIHwgQ0hFQ0tFRCB8IFVubG9hZCBw YXlsb2FkLiBBbHdheXMgd29ya3MuICB8ICAgICAgIHwgICAgICAgIHwKK3wgICAgICAgICB8ICAg ICAgICAgfCBObyBuZXh0IHN0YXRlcy4gICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICB8 CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tKy0tLS0tLS0tKworfCBBUFBMWSAgIHwgQ0hFQ0tFRCB8IEFwcGx5IHBheWxvYWQgKHN1 Y2Nlc3MpLiAgICAgICB8ICAgICAgIHwgICB4ICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IEFQUExZ ICAgfCBDSEVDS0VEIHwgQXBwbHkgcGF5bG9hZCAoZXJyb3J8dGltZW91dCkgIHwgICB4ICAgfCAg ICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgUkVQTEFDRSB8IENIRUNLRUQgfCBSZXZlcnQgcGF5 bG9hZHMgYW5kIGFwcGx5IG5ldyAgfCAgICAgICB8ICAgeCAgICB8Cit8ICAgICAgICAgfCAgICAg ICAgIHwgcGF5bG9hZCB3aXRoIHN1Y2Nlc3MuICAgICAgICAgIHwgICAgICAgfCAgICAgICAgfAor Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLSsKK3wgUkVQTEFDRSB8IENIRUNLRUQgfCBSZXZlcnQgcGF5bG9hZHMgYW5k IGFwcGx5IG5ldyAgfCAgIHggICB8ICAgICAgICB8Cit8ICAgICAgICAgfCAgICAgICAgIHwgcGF5 bG9hZCB3aXRoIGVycm9yLiAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgfAorKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLSsKK3wgUkVWRVJUICB8IEFQUExJRUQgfCBSZXZlcnQgcGF5bG9hZCAoc3VjY2VzcykuICAg ICAgfCAgIHggICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBSRVZFUlQgIHwgQVBQTElF RCB8IFJldmVydCBwYXlsb2FkIChlcnJvcnx0aW1lb3V0KSB8ICAgICAgIHwgICB4ICAgIHwKKyst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0rCis8L3ByZT4KKworQWxsIHRoZSBvdGhlciBzdGF0ZSB0cmFuc2l0aW9ucyBh cmUgaW52YWxpZC4KKworIyMgU2VxdWVuY2Ugb2YgZXZlbnRzLgorCitUaGUgbm9ybWFsIHNlcXVl bmNlIG9mIGV2ZW50cyBpcyB0bzoKKworIDEuICpYRU5fU1lTQ1RMX1hTUExJQ0VfVVBMT0FEKiB0 byB1cGxvYWQgdGhlIHBheWxvYWQuIElmIHRoZXJlIGFyZSBlcnJvcnMgKlNUT1AqIGhlcmUuCisg Mi4gKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqIHRvIGNoZWNrIHRoZSBgLT5yY2AuIElmICotWEVO X0VBR0FJTiogc3Bpbi4gSWYgemVybyBnbyB0byBuZXh0IHN0ZXAuCisgMy4gKlhFTl9TWVNDVExf WFNQTElDRV9BQ1RJT04qIHdpdGggKlhTUExJQ0VfQUNUSU9OX0FQUExZKiB0byBhcHBseSB0aGUg cGF0Y2guCisgNC4gKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqIHRvIGNoZWNrIHRoZSBgLT5yY2Au IElmIGluICotWEVOX0VBR0FJTiogc3Bpbi4gSWYgemVybyBleGl0IHdpdGggc3VjY2Vzcy4KKwor CisjIyBBZGRlbmR1bQorCitJbXBsZW1lbnRhdGlvbiBxdWlya3Mgc2hvdWxkIG5vdCBiZSBkaXNj dXNzZWQgaW4gYSBkZXNpZ24gZG9jdW1lbnQuCisKK0hvd2V2ZXIgdGhlc2Ugb2JzZXJ2YXRpb25z IGNhbiBwcm92aWRlIGFpZCB3aGVuIGRldmVsb3BpbmcgYWdhaW5zdCB0aGlzCitkb2N1bWVudC4K KworCisjIyMgQWx0ZXJuYXRpdmUgYXNzZW1ibGVyCisKK0FsdGVybmF0aXZlIGFzc2VtYmxlciBp cyBhIG1lY2hhbmlzbSB0byB1c2UgZGlmZmVyZW50IGluc3RydWN0aW9ucyBkZXBlbmRpbmcKK29u IHdoYXQgdGhlIENQVSBzdXBwb3J0cy4gVGhpcyBpcyBkb25lIGJ5IHByb3ZpZGluZyBtdWx0aXBs ZSBzdHJlYW1zIG9mIGNvZGUKK3RoYXQgY2FuIGJlIHBhdGNoZWQgaW4gLSBvciBpZiB0aGUgQ1BV IGRvZXMgbm90IHN1cHBvcnQgaXQgLSBwYWRkZWQgd2l0aAorYG5vcGAgb3BlcmF0aW9ucy4gVGhl IGFsdGVybmF0aXZlIGFzc2VtYmxlciBtYWNyb3MgY2F1c2UgdGhlIGNvbXBpbGVyIHRvCitleHBh bmQgdGhlIGNvZGUgdG8gcGxhY2UgYSBtb3N0IGdlbmVyaWMgY29kZSBpbiBwbGFjZSAtIGVtaXQg YSBzcGVjaWFsCitFTEYgLnNlY3Rpb24gaGVhZGVyIHRvIHRhZyB0aGlzIGxvY2F0aW9uLiBEdXJp bmcgcnVuLXRpbWUgdGhlIGh5cGVydmlzb3IKK2NhbiBsZWF2ZSB0aGUgYXJlYXMgYWxvbmUgb3Ig cGF0Y2ggdGhlbSB3aXRoIGFuIGJldHRlciBzdWl0ZWQgb3Bjb2Rlcy4KKworTm90ZSB0aGF0IHBh dGNoaW5nIGZ1bmN0aW9ucyB0aGF0IGNvcHkgdG8gb3IgZnJvbSBndWVzdCBtZW1vcnkgcmVxdWly ZXMKK3RvIHN1cHBvcnQgYWx0ZXJuYXRpdmUgc3VwcG9ydC4gRm9yIGV4YW1wbGUgdGhpcyBjYW4g YmUgZHVlIHRvIFNNQVAKKyhzcGVjaWZpY2FsbHkgKnN0YWMqIGFuZCAqY2xhYyogb3BlcmF0aW9u cykgd2hpY2ggaXMgZW5hYmxlZCBvbiBCcm9hZHdlbGwKK2FuZCBsYXRlciBhcmNoaXRlY3R1cmVz LiBJdCBtYXkgYmUgcmVsYXRlZCB0byBvdGhlciBhbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMuCisK KyMjIyBXaGVuIHRvIHBhdGNoCisKK0R1cmluZyB0aGUgZGlzY3Vzc2lvbiBvbiB0aGUgZGVzaWdu IHR3byBjYW5kaWRhdGVzIGJ1YmJsZWQgd2hlcmUKK3RoZSBjYWxsIHN0YWNrIGZvciBlYWNoIENQ VSB3b3VsZCBiZSBkZXRlcm1pbmlzdGljLiBUaGlzIHdvdWxkCittaW5pbWl6ZSB0aGUgY2hhbmNl IG9mIHRoZSBwYXRjaCBub3QgYmVpbmcgYXBwbGllZCBkdWUgdG8gc2FmZXR5CitjaGVja3MgZmFp bGluZy4gU2FmZXR5IGNoZWNrcyBzdWNoIGFzIG5vdCBwYXRjaGluZyBjb2RlIHdoaWNoCitpcyBv biB0aGUgc3RhY2sgLSB3aGljaCBjYW4gbGVhZCB0byBjb3JydXB0aW9uLgorCisjIyMjIFJlbmRl enZvdXMgY29kZSBpbnN0ZWFkIG9mIHN0b3BfbWFjaGluZSBmb3IgcGF0Y2hpbmcKKworVGhlIGh5 cGVydmlzb3IncyB0aW1lIHJlbmRlenZvdXMgY29kZSBydW5zIHN5bmNocm9ub3VzbHkgYWNyb3Nz IGFsbCBDUFVzCitldmVyeSBzZWNvbmQuIFVzaW5nIHRoZSBzdG9wX21hY2hpbmUgdG8gcGF0Y2gg Y2FuIHN0YWxsIHRoZSB0aW1lIHJlbmRlenZvdXMKK2NvZGUgYW5kIHJlc3VsdCBpbiBOTUkuIEFz IHN1Y2ggaGF2aW5nIHRoZSBwYXRjaGluZyBiZSBkb25lIGF0IHRoZSB0YWlsCitvZiByZW5kZXp2 b3VzIGNvZGUgc2hvdWxkIGF2b2lkIHRoaXMgcHJvYmxlbS4KKworSG93ZXZlciB0aGUgZW50cmFu Y2UgcG9pbnQgZm9yIHRoYXQgY29kZSBpcworZG9fc29mdGlycS0+dGltZXJfc29mdGlycV9hY3Rp b24tPnRpbWVfY2FsaWJyYXRpb24KK3doaWNoIGVuZHMgdXAgY2FsbGluZyBvbl9zZWxlY3RlZF9j cHVzIG9uIHJlbW90ZSBDUFVzLgorCitUaGUgcmVtb3RlIENQVXMgcmVjZWl2ZSBDQUxMX0ZVTkNU SU9OX1ZFQ1RPUiBJUEkgYW5kIGV4ZWN1dGUgdGhlCitkZXNpcmVkIGZ1bmN0aW9uLgorCisjIyMj IEJlZm9yZSBlbnRlcmluZyB0aGUgZ3Vlc3QgY29kZS4KKworQmVmb3JlIHdlIGNhbGwgVk1YUmVz dW1lIHdlIGNoZWNrIHdoZXRoZXIgYW55IHNvZnQgSVJRcyBuZWVkIHRvIGJlIGV4ZWN1dGVkLgor VGhpcyBpcyBhIGdvb2Qgc3BvdCBiZWNhdXNlIGFsbCBYZW4gc3RhY2tzIGFyZSBlZmZlY3RpdmVs eSBlbXB0eSBhdAordGhhdCBwb2ludC4KKworVG8gcmFuZGV6dm91cyBhbGwgdGhlIENQVXMgYW4g YmFycmllciB3aXRoIGFuIG1heGltdW0gdGltZW91dCAod2hpY2gKK2NvdWxkIGJlIGFkanVzdGVk KSwgY29tYmluZWQgd2l0aCBmb3JjaW5nIGFsbCBvdGhlciBDUFVzIHRocm91Z2ggdGhlCitoeXBl cnZpc29yIHdpdGggSVBJcywgY2FuIGJlIHV0aWxpemVkIHRvIGV4ZWN1dGUgbG9ja3N0ZXAgaW5z dHJ1Y3Rpb25zCitvbiBhbGwgQ1BVcy4KKworVGhlIGFwcHJvYWNoIGlzIHNpbWlsYXIgaW4gY29u Y2VwdCB0byBzdG9wX21hY2hpbmUgYW5kIHRoZSB0aW1lIHJlbmRlenZvdXMKK2J1dCBpcyB0aW1l LWJvdW5kLiBIb3dldmVyIHRoZSBsb2NhbCBDUFUgc3RhY2sgaXMgbXVjaCBzaG9ydGVyIGFuZAor YSBsb3QgbW9yZSBkZXRlcm1pbmlzdGljLgorCitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBY ZW4gUHJvamVjdCBoeXBlcnZpc29yLgorCisjIyMgQ29tcGlsaW5nIHRoZSBoeXBlcnZpc29yIGNv ZGUKKworSG90cGF0Y2ggZ2VuZXJhdGlvbiBvZnRlbiByZXF1aXJlcyBzdXBwb3J0IGZvciBjb21w aWxpbmcgdGhlIHRhcmdldAord2l0aCAtZmZ1bmN0aW9uLXNlY3Rpb25zIC8gLWZkYXRhLXNlY3Rp b25zLiAgQ2hhbmdlcyB3b3VsZCBoYXZlIHRvCitiZSBkb25lIHRvIHRoZSBsaW5rZXIgc2NyaXB0 cyB0byBzdXBwb3J0IHRoaXMuCisKKyMjIyBHZW5lcmF0aW9uIG9mIHhTcGxpY2UgRUxGIHBheWxv YWRzCisKK1RoZSBkZXNpZ24gb2YgdGhhdCBpcyBub3QgZGlzY3Vzc2VkIGluIHRoaXMgZGVzaWdu LgorCitUaGlzIGlzIGltcGxlbWVudGVkIGluIGEgc2VwZXJhdGUgdG9vbCB3aGljaCBsaXZlcyBp biBhIHNlcGVyYXRlCitHSVQgcmVwby4KKworQ3VycmVudGx5IGl0IHJlc2lkZXMgYXQgaHR0cHM6 Ly9naXRodWIuY29tL3Jvc3NsYWdlcndhbGwveHNwbGljZS1idWlsZAorCisjIyMgRXhjZXB0aW9u IHRhYmxlcyBhbmQgc3ltYm9sIHRhYmxlcyBncm93dGgKKworV2UgbWF5IG5lZWQgc3VwcG9ydCBm b3IgYWRhcHRpbmcgb3IgYXVnbWVudGluZyBleGNlcHRpb24gdGFibGVzIGlmCitwYXRjaGluZyBz dWNoIGNvZGUuICBIb3RwYXRjaGVzIG1heSBuZWVkIHRvIGJyaW5nIHRoZWlyIG93biBzbWFsbAor ZXhjZXB0aW9uIHRhYmxlcyAoc2ltaWxhciB0byBob3cgTGludXggbW9kdWxlcyBzdXBwb3J0IHRo aXMpLgorCitJZiBzdXBwb3J0aW5nIGhvdHBhdGNoZXMgdGhhdCBpbnRyb2R1Y2UgYWRkaXRpb25h bCBleGNlcHRpb24tbG9jYXRpb25zCitpcyBub3QgaW1wb3J0YW50LCBvbmUgY291bGQgYWxzbyBj aGFuZ2UgdGhlIGV4Y2VwdGlvbiB0YWJsZSBpbi1wbGFjZQorYW5kIHJlb3JkZXIgaXQgYWZ0ZXJ3 YXJkcy4KKworQXMgZm91bmQgYWxtb3N0IGV2ZXJ5IHBhdGNoIChYU0EpIHRvIGEgbm9uLXRyaXZp YWwgZnVuY3Rpb24gcmVxdWlyZXMKK2FkZGl0aW9uYWwgZW50cmllcyBpbiB0aGUgZXhjZXB0aW9u IHRhYmxlIGFuZC9vciB0aGUgYnVnIGZyYW1lcy4KKworVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiB0 aGUgWGVuIFByb2plY3QgaHlwZXJ2aXNvci4KKworIyMjIC5yb2RhdGEgc2VjdGlvbnMKKworVGhl IHBhdGNoaW5nIG1pZ2h0IHJlcXVpcmUgc3RyaW5ncyB0byBiZSB1cGRhdGVkIGFzIHdlbGwuIEFz IHN1Y2ggd2UgbXVzdCBiZQorYWxzbyBhYmxlIHRvIHBhdGNoIHRoZSBzdHJpbmdzIGFzIG5lZWRl ZC4gVGhpcyBzb3VuZHMgc2ltcGxlIC0gYnV0IHRoZSBjb21waWxlcgoraGFzIGEgaGFiaXQgb2Yg Y29hbGVzY2luZyBzdHJpbmdzIHRoYXQgYXJlIHRoZSBzYW1lIC0gd2hpY2ggbWVhbnMgaWYgd2Ug aW4tcGxhY2UKK2FsdGVyIHRoZSBzdHJpbmdzIC0gb3RoZXIgdXNlcnMgd2lsbCBiZSBpbmFkdmVy dGVudGx5IGFmZmVjdGVkIGFzIHdlbGwuCisKK1RoaXMgaXMgYWxzbyB3aGVyZSBwb2ludGVycyB0 byBmdW5jdGlvbnMgbGl2ZSAtIGFuZCB3ZSBtYXkgbmVlZCB0byBwYXRjaCB0aGlzCithcyB3ZWxs LiBBbmQgc3dpdGNoLXN0eWxlIGp1bXAgdGFibGVzLgorCitUbyBndWFyZCBhZ2FpbnN0IHRoYXQg d2UgbXVzdCBiZSBwcmVwYXJlZCB0byBkbyBwYXRjaGluZyBzaW1pbGFyIHRvCit0cmFtcG9saW5l IHBhdGNoaW5nIG9yIGluLWxpbmUgZGVwZW5kaW5nIG9uIHRoZSBmbGF2b3VyLiBJZiB3ZSBjYW4K K2RvIGluLWxpbmUgcGF0Y2hpbmcgd2Ugd291bGQgbmVlZCB0bzoKKworICogYWx0ZXIgYC5yb2Rh dGFgIHRvIGJlIHdyaXRlYWJsZS4KKyAqIGlubGluZSBwYXRjaC4KKyAqIGFsdGVyIGAucm9kYXRh YCB0byBiZSByZWFkLW9ubHkuCisKK0lmIGFyZSBkb2luZyB0cmFtcG9saW5lIHBhdGNoaW5nIHdl IHdvdWxkIG5lZWQgdG86CisKKyAqIGFsbG9jYXRlIGEgbmV3IG1lbW9yeSBsb2NhdGlvbiBmb3Ig dGhlIHN0cmluZy4KKyAqIGFsbCBsb2NhdGlvbnMgd2hpY2ggdXNlIHRoaXMgc3RyaW5nIHdpbGwg aGF2ZSB0byBiZSB1cGRhdGVkIHRvIHVzZSB0aGUKKyAgIG9mZnNldCB0byB0aGUgc3RyaW5nLgor ICogbWFyayB0aGUgcmVnaW9uIFJPIHdoZW4gd2UgYXJlIGRvbmUuCisKK1RoZSB0cmFtcG9saW5l IHBhdGNoaW5nIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZpc29yLgor CisjIyMgLmJzcyBhbmQgLmRhdGEgc2VjdGlvbnMuCisKK0luIHBsYWNlIHBhdGNoaW5nIHdyaXRh YmxlIGRhdGEgaXMgbm90IHN1aXRhYmxlIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBzaG91bGQgYmUg ZG9uZQorZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRhdGEuIEFzIHN1Y2ggaXQg c2hvdWxkIG5vdCBiZSBhdHRlbXB0ZWQuCisKK0hvd2V2ZXIsIGZ1bmN0aW9ucyB3aGljaCBhcmUg YmVpbmcgcGF0Y2hlZCBjYW4gYnJpbmcgaW4gY2hhbmdlcyB0byBzdHJpbmdzCisoLmRhdGEgb3Ig LnJvZGF0YSBzZWN0aW9uIGNoYW5nZXMpLCBvciBldmVuIHRvIC5ic3Mgc2VjdGlvbnMuCisKK0Fz IHN1Y2ggdGhlIEVMRiBwYXlsb2FkIGNhbiBpbnRyb2R1Y2UgbmV3IC5yb2RhdGEsIC5ic3MsIGFu ZCAuZGF0YSBzZWN0aW9ucy4KK1BhdGNoaW5nIGluIHRoZSBuZXcgZnVuY3Rpb24gd2lsbCBlbmQg dXAgYWxzbyBwYXRjaGluZyBpbiB0aGUgbmV3IC5yb2RhdGEKK3NlY3Rpb24gYW5kIHRoZSBuZXcg ZnVuY3Rpb24gd2lsbCByZWZlcmVuY2UgdGhlIG5ldyBzdHJpbmcgaW4gdGhlIG5ldworLnJvZGF0 YSBzZWN0aW9uLgorCitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBoeXBl cnZpc29yLgorCisjIyMgU2VjdXJpdHkKKworT25seSB0aGUgcHJpdmlsZWdlZCBkb21haW4gc2hv dWxkIGJlIGFsbG93ZWQgdG8gZG8gdGhpcyBvcGVyYXRpb24uCisKKworIyBOb3QgWWV0IERvbmUK KworVGhpcyBpcyBmb3IgZnVydGhlciBkZXZlbG9wbWVudCBvZiB4U3BsaWNlLgorCisjIyBUT0RP IEdvYWxzCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGFsc28gaGF2ZSBhIG1lY2hhbmlzbSBm b3IgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpOgorCisgKiBCZSBhYmxlIHRvIGxvb2t1cCBpbiB0 aGUgWGVuIGh5cGVydmlzb3IgdGhlIHN5bWJvbCBuYW1lcyBvZiBmdW5jdGlvbnMgZnJvbSB0aGUg RUxGIHBheWxvYWQuCisgKiBCZSBhYmxlIHRvIHBhdGNoIC5yb2RhdGEsIC5ic3MsIGFuZCAuZGF0 YSBzZWN0aW9ucy4KKyAqIERlYWwgd2l0aCBOTUkvTUNFIGNoZWNrcyBkdXJpbmcgcGF0Y2hpbmcg aW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtLgorICogRnVydGhlciBzYWZldHkgY2hlY2tzIChibGFj a2xpc3Qgb2Ygd2hpY2ggZnVuY3Rpb25zIGNhbm5vdCBiZSBwYXRjaGVkLCBjaGVjaworICAgdGhl IHN0YWNrLCBtYWtlIHN1cmUgdGhlIHBheWxvYWQgaXMgYnVpbHQgd2l0aCBzYW1lIGNvbXBpbGVy IGFzIGh5cGVydmlzb3IpLgorICAgU3BlY2lmaWNhbGx5IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRo YXQgeFNwbGljZSBjb2RlcGF0aHMgY2Fubm90IGJlIHBhdGNoZWQuCisgKiBOT1Agb3V0IHRoZSBj b2RlIHNlcXVlbmNlIGlmIGBuZXdfc2l6ZWAgaXMgemVyby4KKyAqIERlYWwgd2l0aCBvdGhlciBy ZWxvY2F0aW9uIHR5cGVzOiAgUl9YODZfNjRfWzgsMTYsMzIsMzJTXSwgUl9YODZfNjRfUENbOCwx Niw2NF0gaW4gcGF5bG9hZCBmaWxlLgorICogQW4gZGVwZW5kZW5jeSBtZWNoYW5pc20gZm9yIHRo ZSBwYXlsb2Fkcy4gVG8gdXNlIHRoYXQgaW5mb3JtYXRpb24gdG8gbG9hZDoKKyAgICAtIFRoZSBh cHByb3BpYXRlIHBheWxvYWQuIFRvIHZlcmlmeSB0aGF0IHBheWxvYWQgaXMgYnVpbHQgYWdhaW5z dCB0aGUKKyAgICAgIGh5cGVydmlzb3IuIFRoaXMgY2FuIGJlIGRvbmUgdmlhIHRoZSBgYnVpbGQt aWRgCisgICAgICBvciB2aWEgcHJvdmlkaW5nIGFuIGNvcHkgb2YgdGhlIG9sZCBjb2RlIC0gc28g dGhhdCB0aGUgaHlwZXJ2aXNvciBjYW4KKyAgICAgICB2ZXJpZnkgaXQgYWdhaW5zdCB0aGUgY29k ZSBpbiBtZW1vcnkuCisgICAgLSBUbyBjb25zdHJ1Y3QgYW4gYXBwcm9waWF0ZSBvcmRlciBvZiBw YXlsb2FkcyB0byBsb2FkIGluIGNhc2UgdGhleQorICAgICAgZGVwZW5kIG9uIGVhY2ggb3RoZXIu CisKKyMjIyBIYW5kbGUgaW5saW5lZCBfX0xJTkVfXworCitUaGlzIHByb2JsZW0gaXMgcmVsYXRl ZCB0byBob3RwYXRjaCBjb25zdHJ1Y3Rpb24KK2FuZCBwb3RlbnRpYWxseSBoYXMgaW5mbHVlbmNl IG9uIHRoZSBkZXNpZ24gb2YgdGhlIGhvdHBhdGNoaW5nCitpbmZyYXN0cnVjdHVyZSBpbiBYZW4u CisKK0ZvciBleGFtcGxlOgorCitXZSBoYXZlIGZpbGUxLmMgd2l0aCBmdW5jdGlvbnMgZjEgYW5k IGYyIChpbiB0aGF0IG9yZGVyKS4gIGYyIGNvbnRhaW5zIGEKK0JVRygpIChvciBXQVJOKCkpIG1h Y3JvIGFuZCBhdCB0aGF0IHBvaW50IGVtYmVkcyB0aGUgc291cmNlIGxpbmUgbnVtYmVyCitpbnRv IHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgZjIuCisKK05vdyB3ZSB3YW50IHRvIGhvdHBhdGNoIGYx IGFuZCB0aGUgaG90cGF0Y2ggc291cmNlLWNvZGUgcGF0Y2ggYWRkcyAyCitsaW5lcyB0byBmMSBh bmQgYXMgYSBjb25zZXF1ZW5jZSBzaGlmdHMgb3V0IGYyIGJ5IHR3byBsaW5lcy4gIFRoZSBuZXds eQorY29uc3RydWN0ZWQgZmlsZTEubyB3aWxsIG5vdyBjb250YWluIGRpZmZlcmVuY2VzIGluIGJv dGggYmluYXJ5CitmdW5jdGlvbnMgZjEgKGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2hhbmdlZCBpdCB3 aXRoIHRoZSBhcHBsaWVkIHBhdGNoKSBhbmQKK2YyIChiZWNhdXNlIHRoZSBjb250YWluZWQgQlVH IG1hY3JvIGVtYmVkcyB0aGUgbmV3IGxpbmUgbnVtYmVyKS4KKworV2l0aG91dCBhZGRpdGlvbmFs IGluZm9ybWF0aW9uLCBhbiBhbGdvcml0aG0gY29tcGFyaW5nIGZpbGUxLm8gYmVmb3JlCithbmQg YWZ0ZXIgaG90cGF0Y2ggYXBwbGljYXRpb24gd2lsbCBkZXRlcm1pbmUgYm90aCBmdW5jdGlvbnMg dG8gYmUKK2NoYW5nZWQgYW5kIHdpbGwgaGF2ZSB0byBpbmNsdWRlIGJvdGggaW50byB0aGUgYmlu YXJ5IGhvdHBhdGNoLgorCitPcHRpb25zOgorCisxLiBUcmFuc2Zvcm0gc291cmNlIGNvZGUgcGF0 Y2hlcyBmb3IgaG90cGF0Y2hlcyB0byBiZSBsaW5lLW5ldXRyYWwgZm9yCisgICBlYWNoIGNodW5r LiAgVGhpcyBjYW4gYmUgZG9uZSBpbiBhbG1vc3QgYWxsIGNhc2VzIHdpdGggZWl0aGVyCisgICBy ZWZvcm1hdHRpbmcgb2YgdGhlIHNvdXJjZSBjb2RlIG9yIGJ5IGludHJvZHVjaW5nIGFydGlmaWNp YWwKKyAgIHByZXByb2Nlc3NvciAiI2xpbmUgbiIgZGlyZWN0aXZlcyB0byBhZGp1c3QgZm9yIHRo ZSBpbnRyb2R1Y2VkCisgICBkaWZmZXJlbmNlcy4KKworICAgVGhpcyBhcHByb2FjaCBpcyBsb3ct dGVjaCBhbmQgc2ltcGxlLiAgUG90ZW50aWFsbHkgZ2VuZXJhdGVkCisgICBiYWNrdHJhY2VzIGFu ZCBleGlzdGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiByZWZlcnMgdG8gdGhlIG9yaWdpbmFsCisgICBi dWlsZCBhbmQgZG9lcyBub3QgcmVmbGVjdCBob3RwYXRjaGluZyBzdGF0ZSBleGNlcHQgZm9yIGFj dHVhbGx5CisgICBob3RwYXRjaGVkIGZ1bmN0aW9ucyBidXQgc2hvdWxkIGJlIG1vc3RseSBjb3Jy ZWN0LgorCisyLiBJZ25vcmluZyB0aGUgcHJvYmxlbSBhbmQgbGl2aW5nIHdpdGggYXJ0aWZpY2lh bGx5IGxhcmdlIGhvdHBhdGNoZXMKKyAgIHRoYXQgdW5uZWNlc3NhcmlseSBwYXRjaCBtYW55IGZ1 bmN0aW9ucy4KKworICAgVGhpcyBhcHByb2FjaCBtaWdodCBsZWFkIHRvIHNvbWUgdmVyeSBsYXJn ZSBob3RwYXRjaGVzIGRlcGVuZGluZyBvbgorICAgY29udGVudCBvZiBzcGVjaWZpYyBzb3VyY2Ug ZmlsZS4gIEl0IG1heSBhbHNvIHRyaWdnZXIgcHVsbGluZyBpbgorICAgZnVuY3Rpb25zIGludG8g dGhlIGhvdHBhdGNoIHRoYXQgY2Fubm90IHJlYXNvbmFibGUgYmUgaG90cGF0Y2hlZCBkdWUKKyAg IHRvIGxpbWl0YXRpb25zIG9mIGEgaG90cGF0Y2hpbmcgZnJhbWV3b3JrIChpbml0LXNlY3Rpb25z LCBwYXJ0cyBvZgorICAgdGhlIGhvdHBhdGNoaW5nIGZyYW1ld29yayBpdHNlbGYsIC4uLikgYW5k IG1heSB0aGVyZWJ5IHByZXZlbnQgdXMKKyAgIGZyb20gcGF0Y2hpbmcgYSBzcGVjaWZpYyBwcm9i bGVtLgorCisgICBUaGUgZGVjaXNpb24gYmV0d2VlbiAxLiBhbmQgMi4gY2FuIGJlIG1hZGUgb24g YSBwYXRjaC0tYnktcGF0Y2gKKyAgIGJhc2lzLgorCiszLiBJbnRyb2R1Y2luZyBhbiBpbmRpcmVj dGlvbiB0YWJsZSBmb3Igc3RvcmluZyBsaW5lIG51bWJlcnMgYW5kCisgICB0cmVhdGluZyB0aGF0 IHNwZWNpYWxseSBmb3IgYmluYXJ5IGRpZmZpbmcuIExpbnV4IG1heSBmb2xsb3cKKyAgIHRoaXMg YXBwcm9hY2guCisKKyAgIFdlIG1pZ2h0IGVpdGhlciB1c2UgdGhpcyBpbmRpcmVjdGlvbiB0YWJs ZSBmb3IgcnVudGltZSB1c2UgYW5kIHBhdGNoCisgICB0aGF0IHdpdGggZWFjaCBob3RwYXRjaCAo c2ltaWxhcmx5IHRvIGV4Y2VwdGlvbiB0YWJsZXMpIG9yIHdlIG1pZ2h0CisgICBwdXJlbHkgdXNl IGl0IHdoZW4gYnVpbGRpbmcgaG90cGF0Y2hlcyB0byBpZ25vcmUgZnVuY3Rpb25zIHRoYXQgb25s eQorICAgZGlmZmVyIGF0IGV4YWN0bHkgdGhlIGxvY2F0aW9uIHdoZXJlIGEgbGluZS1udW1iZXIg aXMgZW1iZWRkZWQuCisKK0ZvciBCVUcoKSwgV0FSTigpLCBldGMuLCB0aGUgbGluZSBudW1iZXIg aXMgZW1iZWRkZWQgaW50byB0aGUgYnVnIGZyYW1lLCBub3QKK3RoZSBmdW5jdGlvbiBpdHNlbGYu CisKK1NpbWlsYXIgY29uc2lkZXJhdGlvbnMgYXJlIHRydWUgdG8gYSBsZXNzZXIgZXh0ZW50IGZv ciBfX0ZJTEVfXywgYnV0IGl0Citjb3VsZCBiZSBhcmd1ZWQgdGhhdCBmaWxlIHJlbmFtaW5nIHNo b3VsZCBiZSBkb25lIG91dHNpZGUgb2YgaG90cGF0Y2hlcy4KKworIyMjIHhTcGxpY2UgaW50ZXJk ZXBlbmRlbmNpZXMKKworeFNwbGljZSBwYXRjaGVzIGludGVyZGVwZW5kZW5jaWVzIGFyZSB0cmlj a3kuCisKK1RoZXJlIGFyZSB0aGUgd2F5cyB0aGlzIGNhbiBiZSBhZGRyZXNzZWQ6CisgKiBBIHNp bmdsZSBsYXJnZSBwYXRjaCB0aGF0IHN1YnN1bWVzIGFuZCByZXBsYWNlcyBhbGwgcHJldmlvdXMg b25lcy4KKyAgIE92ZXIgdGhlIGxpZmUtdGltZSBvZiBwYXRjaGluZyB0aGUgaHlwZXJ2aXNvciB0 aGlzIGxhcmdlIHBhdGNoCisgICBncm93cyB0byBhY2N1bXVsYXRlIGFsbCB0aGUgY29kZSBjaGFu Z2VzLgorICogSG90cGF0Y2ggc3RhY2sgLSB3aGVyZSBhbiBtZWNoYW5pc20gZXhpc3RzIHRoYXQg bG9hZHMgdGhlIGhvdHBhdGNoZXMKKyAgIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSBidWls dCBpbi4gV2Ugd291bGQgbmVlZCBhbiBidWlsZC1pZAorICAgb2YgdGhlIGh5cGV2aXNvciB0byBt YWtlIHN1cmUgdGhlIGhvdC1wYXRjaGVzIGFyZSBidWlsZCBhZ2FpbnN0IHRoZQorICAgY29ycmVj dCBidWlsZC4KKyAqIFBheWxvYWQgY29udGFpbmluZyB0aGUgb2xkIGNvZGUgdG8gY2hlY2sgYWdh aW5zdCB0aGF0LiBUaGF0IGFsbG93cworICAgdGhlIGhvdHBhdGNoZXMgdG8gYmUgbG9hZGVkIGlu ZGVwZWRlbnRseSAoaWYgdGhleSBkb24ndCBvdmVybGFwKSAtIG9yCisgICBpZiB0aGUgb2xkIGNv ZGUgYWxzbyBjb250YWluc3QgcHJldmlvdXNseSBwYXRjaGVkIGNvZGUgLSBldmVuIGlmIHRoZXkK KyAgIG92ZXJsYXAuCisKK1RoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhlIGZpcnN0IGxhcmdlIHBhdGNo IGlzIHRoYXQgaXQgY2FuIGdyb3cgb3ZlcgordGltZSBhbmQgbm90IHByb3ZpZGUgYW4gYmlzZWN0 aW9uIG1lY2hhbmlzbSB0byBpZGVudGlmeSBmYXVsdHkgcGF0Y2hlcy4KKworVGhlIGhvdC1wYXRj aCBzdGFjayBwdXRzIHN0cmljdHMgcmVxdWlyZW1lbnRzIG9uIHRoZSBvcmRlciBvZiB0aGUgcGF0 Y2hlcworYmVpbmcgbG9hZGVkIGFuZCByZXF1aXJlcyBhbiBoeXBlcnZpc29yIGJ1aWxkLWlkIHRv IG1hdGNoIGFnYWluc3QuCisKK1RoZSBvbGQgY29kZSBhbGxvd3MgbXVjaCBtb3JlIGZsZXhpYmls aXR5IGFuZCBhbiBhZGRpdGlvbmFsIGd1YXJkLAorYnV0IGlzIG1vcmUgY29tcGxleCB0byBpbXBs ZW1lbnQuCisKKyMjIFNpZ25hdHVyZSBjaGVja2luZyByZXF1aXJlbWVudHMuCisKK1RoZSBzaWdu YXR1cmUgY2hlY2tpbmcgcmVxdWlyZXMgdGhhdCB0aGUgbGF5b3V0IG9mIHRoZSBkYXRhIGluIG1l bW9yeQorKipNVVNUKiogYmUgc2FtZSBmb3Igc2lnbmF0dXJlIHRvIGJlIHZlcmlmaWVkLiBUaGlz IG1lYW5zIHRoYXQgdGhlIHBheWxvYWQKK2RhdGEgbGF5b3V0IGluIEVMRiBmb3JtYXQgKipNVVNU KiogbWF0Y2ggd2hhdCB0aGUgaHlwZXJ2aXNvciB3b3VsZCBiZQorZXhwZWN0aW5nIHN1Y2ggdGhh dCBpdCBjYW4gcHJvcGVybHkgZG8gc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKworVGhlIHNpZ25h dHVyZSBpcyBiYXNlZCBvbiB0aGUgYWxsIG9mIHRoZSBwYXlsb2FkcyBjb250aW51b3VzbHkgbGFp ZCBvdXQKK2luIG1lbW9yeS4gVGhlIHNpZ25hdHVyZSBpcyB0byBiZSBhcHBlbmRlZCBhdCB0aGUg ZW5kIG9mIHRoZSBFTEYgcGF5bG9hZAorcHJlZml4ZWQgd2l0aCB0aGUgc3RyaW5nICd+TW9kdWxl IHNpZ25hdHVyZSBhcHBlbmRlZH5cbicsIGZvbGxvd2VkIGJ5CithbiBzaWduYXR1cmUgaGVhZGVy IHRoZW4gZm9sbG93ZWQgYnkgdGhlIHNpZ25hdHVyZSwga2V5IGlkZW50aWZpZXIsIGFuZCBzaWdu ZXJzCituYW1lLgorCitTcGVjaWZpY2FsbHkgdGhlIHNpZ25hdHVyZSBoZWFkZXIgd291bGQgYmU6 CisKKzxwcmU+CisjZGVmaW5lIFBLRVlfQUxHT19EU0EgICAgICAgMCAgCisjZGVmaW5lIFBLRVlf QUxHT19SU0EgICAgICAgMSAgCisKKyNkZWZpbmUgUEtFWV9JRF9QR1AgICAgICAgICAwIC8qIE9w ZW5QR1AgZ2VuZXJhdGVkIGtleSBJRCAqLyAgCisjZGVmaW5lIFBLRVlfSURfWDUwOSAgICAgICAg MSAvKiBYLjUwOSBhcmJpdHJhcnkgc3ViamVjdEtleUlkZW50aWZpZXIgKi8gIAorCisjZGVmaW5l IEhBU0hfQUxHT19NRDQgICAgICAgICAgMCAgCisjZGVmaW5lIEhBU0hfQUxHT19NRDUgICAgICAg ICAgMSAgCisjZGVmaW5lIEhBU0hfQUxHT19TSEExICAgICAgICAgMiAgCisjZGVmaW5lIEhBU0hf QUxHT19SSVBFX01EXzE2MCAgMyAgCisjZGVmaW5lIEhBU0hfQUxHT19TSEEyNTYgICAgICAgNCAg CisjZGVmaW5lIEhBU0hfQUxHT19TSEEzODQgICAgICAgNSAgCisjZGVmaW5lIEhBU0hfQUxHT19T SEE1MTIgICAgICAgNiAgCisjZGVmaW5lIEhBU0hfQUxHT19TSEEyMjQgICAgICAgNyAgCisjZGVm aW5lIEhBU0hfQUxHT19SSVBFX01EXzEyOCAgOCAgCisjZGVmaW5lIEhBU0hfQUxHT19SSVBFX01E XzI1NiAgOSAgCisjZGVmaW5lIEhBU0hfQUxHT19SSVBFX01EXzMyMCAxMCAgCisjZGVmaW5lIEhB U0hfQUxHT19XUF8yNTYgICAgICAxMSAgCisjZGVmaW5lIEhBU0hfQUxHT19XUF8zODQgICAgICAx MiAgCisjZGVmaW5lIEhBU0hfQUxHT19XUF81MTIgICAgICAxMyAgCisjZGVmaW5lIEhBU0hfQUxH T19UR1JfMTI4ICAgICAxNCAgCisjZGVmaW5lIEhBU0hfQUxHT19UR1JfMTYwICAgICAxNSAgCisj ZGVmaW5lIEhBU0hfQUxHT19UR1JfMTkyICAgICAxNiAgCisKKworc3RydWN0IGVsZl9wYXlsb2Fk X3NpZ25hdHVyZSB7ICAKKwl1OAlhbGdvOwkJLyogUHVibGljLWtleSBjcnlwdG8gYWxnb3JpdGht IFBLRVlfQUxHT18qLiAqLyAgCisJdTgJaGFzaDsJCS8qIERpZ2VzdCBhbGdvcml0aG06IEhBU0hf QUxHT18qLiAqLyAgCisJdTgJaWRfdHlwZTsJLyogS2V5IGlkZW50aWZpZXIgdHlwZSBQS0VZX0lE Ki4gKi8gIAorCXU4CXNpZ25lcl9sZW47CS8qIExlbmd0aCBvZiBzaWduZXIncyBuYW1lICovICAK Kwl1OAlrZXlfaWRfbGVuOwkvKiBMZW5ndGggb2Yga2V5IGlkZW50aWZpZXIgKi8gIAorCXU4CV9f cGFkWzNdOyAgCisJX19iZTMyCXNpZ19sZW47CS8qIExlbmd0aCBvZiBzaWduYXR1cmUgZGF0YSAq LyAgCit9OworCis8L3ByZT4KKyhOb3RlIHRoYXQgdGhpcyBoYXMgYmVlbiBib3Jyb3dlZCBmcm9t IExpbnV4IG1vZHVsZSBzaWduYXR1cmUgY29kZS4pLgorCisKKyMjIyAuYnNzIGFuZCAuZGF0YSBz ZWN0aW9ucy4KKworSW4gcGxhY2UgcGF0Y2hpbmcgd3JpdGFibGUgZGF0YSBpcyBub3Qgc3VpdGFi bGUgYXMgaXQgaXMgdW5jbGVhciB3aGF0IHNob3VsZCBiZSBkb25lCitkZXBlbmRpbmcgb24gdGhl IGN1cnJlbnQgc3RhdGUgb2YgZGF0YS4gQXMgc3VjaCBpdCBzaG91bGQgbm90IGJlIGF0dGVtcHRl ZC4KKworVGhhdCBzYWlkIHdlIHNob3VsZCBwcm92aWRlIGhvb2sgZnVuY3Rpb25zIHNvIHRoYXQg dGhlIGV4aXN0aW5nIGRhdGEKK2NhbiBiZSBjaGFuZ2VkIGR1cmluZyBwYXlsb2FkIGFwcGxpY2F0 aW9uLgorCisKKyMjIyBJbmxpbmUgcGF0Y2hpbmcKKworVGhlIGh5cGVydmlzb3Igc2hvdWxkIHZl cmlmeSB0aGF0IHRoZSBpbi1wbGFjZSBwYXRjaGluZyB3b3VsZCBmaXQgd2l0aGluCit0aGUgY29k ZSBvciBkYXRhLgorCisjIyMgVHJhbXBvbGluZSAoZTkgb3Bjb2RlKQorCitUaGUgZTkgb3Bjb2Rl IHVzZWQgZm9yIGptcHEgdXNlcyBhIDMyLWJpdCBzaWduZWQgZGlzcGxhY2VtZW50LiBUaGF0IG1l YW5zCit3ZSBhcmUgbGltaXRlZCB0byB1cCB0byAyR0Igb2YgdmlydHVhbCBhZGRyZXNzIHRvIHBs YWNlIHRoZSBuZXcgY29kZQorZnJvbSB0aGUgb2xkIGNvZGUuIFRoYXQgc2hvdWxkIG5vdCBiZSBh IHByb2JsZW0gc2luY2UgWGVuIGh5cGVydmlzb3IgaGFzCithIHZlcnkgc21hbGwgZm9vdHByaW50 LgorCitIb3dldmVyIGlmIHdlIG5lZWQgLSB3ZSBjYW4gYWx3YXlzIGFkZCB0d28gdHJhbXBvbGlu ZXMuIE9uZSBhdCB0aGUgMkdCCitsaW1pdCB0aGF0IGNhbGxzIHRoZSBuZXh0IHRyYW1wb2xpbmUu CisKK1BsZWFzZSBub3RlIHRoZXJlIGlzIGEgc21hbGwgbGltaXRhdGlvbiBmb3IgdHJhbXBvbGlu ZXMgaW4KK2Z1bmN0aW9uIGVudHJpZXM6IFRoZSB0YXJnZXQgZnVuY3Rpb24gKCsgdHJhaWxpbmcg cGFkZGluZykgbXVzdCBiZSBhYmxlCit0byBhY2NvbW9kYXRlIHRoZSB0cmFtcG9saW5lLiBPbiB4 ODYgd2l0aCArLTIgR0IgcmVsYXRpdmUganVtcHMsCit0aGlzIG1lYW5zIDUgYnl0ZXMgYXJlIHJl cXVpcmVkLgorCitEZXBlbmRpbmcgb24gY29tcGlsZXIgc2V0dGluZ3MsIHRoZXJlIGFyZSBzZXZl cmFsIGZ1bmN0aW9ucyBpbiBYZW4gdGhhdAorYXJlIHNtYWxsZXIgKHdpdGhvdXQgaW50ZXItZnVu Y3Rpb24gcGFkZGluZykuCisKKzxwcmU+IAorcmVhZGVsZiAtc1cgeGVuLXN5bXMgfCBncmVwICIg RlVOQyAiIHwgXAorICAgIGF3ayAneyBpZiAoJDMgPCA1KSBwcmludCAkMywgJDQsICQ1LCAkOCB9 JworCisuLi4KKzMgRlVOQyBMT0NBTCB3YmludmRfaXBpCiszIEZVTkMgTE9DQUwgc2hhZG93X2wx X2luZGV4CisuLi4KKzwvcHJlPgorQSBjb21waWxlLXRpbWUgY2hlY2sgZm9yLCBlLmcuLCBhIG1p bmltdW0gYWxpZ25tZW50IG9mIGZ1bmN0aW9ucyBvciBhCitydW50aW1lIGNoZWNrIHRoYXQgdmVy aWZpZXMgc3ltYm9sIHNpemUgKCsgcGFkZGluZyB0byBuZXh0IHN5bWJvbHMpIGZvcgordGhhdCBp biB0aGUgaHlwZXJ2aXNvciBpcyBhZHZpc2VkLgorCitUaGUgdG9vbCBmb3IgZ2VuZXJhdGluZyBw YXlsb2FkcyBjdXJyZW50bHkgZG9lcyBwZXJmb3JtIGEgY29tcGlsZS10aW1lCitjaGVjayB0byBl bnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gdG8gYmUgcmVwbGFjZWQgaXMgbGFyZ2UgZW5vdWdoLgor Ci0tIAoyLjUuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==