From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v9 03/27] xsplice: Design document Date: Mon, 25 Apr 2016 11:34:50 -0400 Message-ID: <1461598514-5440-4-git-send-email-konrad.wilk@oracle.com> References: <1461598514-5440-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.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1auiYT-00048w-KY for xen-devel@lists.xenproject.org; Mon, 25 Apr 2016 15:36:09 +0000 In-Reply-To: <1461598514-5440-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 aW5nIGJlIGNhbGxlZCBvcGFxdWUuCiAgIEFkZCBzeW1ib2wrb2Zmc2V0IHRvIFRvZG8KLS0tCiBk b2NzL21pc2MveHNwbGljZS5tYXJrZG93biB8IDEwNDcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMDQ3IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2NzL21pc2MveHNwbGljZS5tYXJrZG93bgoKZGlmZiAtLWdp dCBhL2RvY3MvbWlzYy94c3BsaWNlLm1hcmtkb3duIGIvZG9jcy9taXNjL3hzcGxpY2UubWFya2Rv d24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3MTFiZgotLS0gL2Rldi9u dWxsCisrKyBiL2RvY3MvbWlzYy94c3BsaWNlLm1hcmtkb3duCkBAIC0wLDAgKzEsMTA0NyBAQAor IyB4U3BsaWNlIERlc2lnbiB2MQorCisjIyBSYXRpb25hbGUKKworQSBtZWNoYW5pc20gaXMgcmVx dWlyZWQgdG8gYmluYXJpbHkgcGF0Y2ggdGhlIHJ1bm5pbmcgaHlwZXJ2aXNvciB3aXRoIG5ldwor b3Bjb2RlcyB0aGF0IGhhdmUgY29tZSBhYm91dCBkdWUgdG8gcHJpbWFyaWx5IHNlY3VyaXR5IHVw ZGF0ZXMuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXNpZ24gb2YgdGhlIEFQSSB0 aGF0IHdvdWxkIGFsbG93IHVzIHRvCit1cGxvYWQgdG8gdGhlIGh5cGVydmlzb3IgYmluYXJ5IHBh dGNoZXMuCisKK1RoZSBkb2N1bWVudCBpcyBzcGxpdCBpbiBmb3VyIHNlY3Rpb25zOgorCisgKiBE ZXRhaWxlZCBkZXNjcmlwdGlvbnMgb2YgdGhlIHByb2JsZW0gc3RhdGVtZW50LgorICogRGVzaWdu IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMuCisgKiBEZXNpZ24gb2YgdGhlIGh5cGVyY2FsbHMuCisg KiBJbXBsZW1lbnRhdGlvbiBub3RlcyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVy YXRpb24uCisKKworIyMgR2xvc3NhcnkKKworICogc3BsaWNlIC0gcGF0Y2ggaW4gdGhlIGJpbmFy eSBjb2RlIHdpdGggbmV3IG9wY29kZXMKKyAqIHRyYW1wb2xpbmUgLSBhIGp1bXAgdG8gYSBuZXcg aW5zdHJ1Y3Rpb24uCisgKiBwYXlsb2FkIC0gdGVsZW1ldHJpZXMgb2YgdGhlIG9sZCBjb2RlIGFs b25nIHdpdGggYmluYXJ5IGJsb2Igb2YgdGhlIG5ldworICAgZnVuY3Rpb24gKGlmIG5lZWRlZCku CisgKiByZWxvYyAtIHRlbGVtZXRyaWVzIGNvbnRhaW5lZCBpbiB0aGUgcGF5bG9hZCB0byBjb25z dHJ1Y3QgcHJvcGVyIHRyYW1wb2xpbmUuCisKKyMjIEhpc3RvcnkKKworVGhlIGRvY3VtZW50IGhh cyBnb25lIHVuZGVyIHZhcmlvdXMgcmV2aWV3cyBhbmQgb25seSBjb3ZlcnMgdjEgZGVzaWduLgor CitUaGUgZW5kIG9mIHRoZSBkb2N1bWVudCBoYXMgYSBzZWN0aW9uIHRpdGxlZCBgTm90IFlldCBE b25lYCB3aGljaAorb3V0bGluZXMgaWRlYXMgYW5kIGRlc2lnbiBmb3IgdGhlIGZ1dHVyZSB2ZXJz aW9uIG9mIHRoaXMgd29yay4KKworIyMgTXVsdGlwbGUgd2F5cyB0byBwYXRjaAorCitUaGUgbWVj aGFuaXNtIG5lZWRzIHRvIGJlIGZsZXhpYmxlIHRvIHBhdGNoIHRoZSBoeXBlcnZpc29yIGluIG11 bHRpcGxlIHdheXMKK2FuZCBiZSBhcyBzaW1wbGUgYXMgcG9zc2libGUuIFRoZSBjb21waWxlZCBj b2RlIGlzIGNvbnRpZ3VvdXMgaW4gbWVtb3J5IHdpdGgKK25vIGdhcHMgLSBzbyB3ZSBoYXZlIG5v IGx1eHVyeSBvZiAnbW92aW5nJyBleGlzdGluZyBjb2RlIGFuZCBtdXN0IGVpdGhlcgoraW5zZXJ0 IGEgdHJhbXBvbGluZSB0byB0aGUgbmV3IGNvZGUgdG8gYmUgZXhlY3V0ZWQgLSBvciBvbmx5IG1v ZGlmeSBpbi1wbGFjZQordGhlIGNvZGUgaWYgdGhlcmUgaXMgc3VmZmljaWVudCBzcGFjZS4gVGhl IHBsYWNlbWVudCBvZiBuZXcgY29kZSBoYXMgdG8gYmUgZG9uZQorYnkgaHlwZXJ2aXNvciBhbmQg dGhlIHZpcnR1YWwgYWRkcmVzcyBmb3IgdGhlIG5ldyBjb2RlIGlzIGFsbG9jYXRlZCBkeW5hbWlj YWxseS4KKworVGhpcyBpbXBsaWVzIHRoYXQgdGhlIGh5cGVydmlzb3IgbXVzdCBjb21wdXRlIHRo ZSBuZXcgb2Zmc2V0cyB3aGVuIHNwbGljaW5nCitpbiB0aGUgbmV3IHRyYW1wb2xpbmUgY29kZS4g V2hlcmUgdGhlIHRyYW1wb2xpbmUgaXMgYWRkZWQgKGluc2lkZQordGhlIGZ1bmN0aW9uIHdlIGFy ZSBwYXRjaGluZyBvciBqdXN0IHRoZSBjYWxsZXJzPykgaXMgYWxzbyBpbXBvcnRhbnQuCisKK1Rv IGxlc3NlbiB0aGUgYW1vdW50IG9mIGNvZGUgaW4gaHlwZXJ2aXNvciwgdGhlIGNvbnN1bWVyIG9m IHRoZSBBUEkKK2lzIHJlc3BvbnNpYmxlIGZvciBpZGVudGlmeWluZyB3aGljaCBtZWNoYW5pc20g dG8gZW1wbG95IGFuZCBob3cgbWFueSBsb2NhdGlvbnMKK3RvIHBhdGNoLiBDb21iaW5hdGlvbnMg b2YgbW9kaWZ5aW5nIGluLXBsYWNlIGNvZGUsIGFkZGluZyB0cmFtcG9saW5lLCBldGMKK2hhcyB0 byBiZSBzdXBwb3J0ZWQuIFRoZSBBUEkgc2hvdWxkIGFsbG93IHJlYWQvd3JpdGUgYW55IG1lbW9y eSB3aXRoaW4KK3RoZSBoeXBlcnZpc29yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKworV2UgbXVz dCBhbHNvIGhhdmUgYSBtZWNoYW5pc20gdG8gcXVlcnkgd2hhdCBoYXMgYmVlbiBhcHBsaWVkIGFu ZCBhIG1lY2hhbmlzbQordG8gcmV2ZXJ0IGl0IGlmIG5lZWRlZC4KKworIyMgV29ya2Zsb3cKKwor VGhlIGV4cGVjdGVkIHdvcmtmbG93cyBvZiBoaWdoZXItbGV2ZWwgdG9vbHMgdGhhdCBtYW5hZ2Ug bXVsdGlwbGUgcGF0Y2hlcworb24gcHJvZHVjdGlvbiBtYWNoaW5lcyB3b3VsZCBiZToKKworICog VGhlIGZpcnN0IG9idmlvdXMgdGFzayBpcyBsb2FkaW5nIGFsbCBhdmFpbGFibGUgLyBzdWdnZXN0 ZWQKKyAgIGhvdHBhdGNoZXMgd2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuCisgKiBXaGVuZXZlciBu ZXcgaG90cGF0Y2hlcyBhcmUgaW5zdGFsbGVkLCB0aGV5IHNob3VsZCBiZSBsb2FkZWQgdG9vLgor ICogT25lIHdhbnRzIHRvIHF1ZXJ5IHdoaWNoIG1vZHVsZXMgaGF2ZSBiZWVuIGxvYWRlZCBhdCBy dW50aW1lLgorICogSWYgdW5sb2FkaW5nIGlzIGRlZW1lZCBzYWZlIChzZWUgdW5sb2FkaW5nIGJl bG93KSwgb25lIG1heSB3YW50IHRvCisgICBzdXBwb3J0IGEgd29ya2Zsb3cgd2hlcmUgYSBzcGVj aWZpYyBob3RwYXRjaCBpcyBtYXJrZWQgYXMgYmFkIGFuZAorICAgdW5sb2FkZWQuCisKKyMjIFBh dGNoaW5nIGNvZGUKKworVGhlIGZpcnN0IG1lY2hhbmlzbSB0byBwYXRjaCB0aGF0IGNvbWVzIGlu IG1pbmQgaXMgaW4tcGxhY2UgcmVwbGFjZW1lbnQuCitUaGF0IGlzIHJlcGxhY2UgdGhlIGFmZmVj dGVkIGNvZGUgd2l0aCBuZXcgY29kZS4gVW5mb3J0dW5hdGVseSB0aGUgeDg2CitJU0EgaXMgdmFy aWFibGUgc2l6ZSB3aGljaCBwbGFjZXMgbGltaXRzIG9uIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUg YXZhaWxhYmxlCit0byByZXBsYWNlIHRoZSBpbnN0cnVjdGlvbnMuIFRoYXQgaXMgbm90IGEgcHJv YmxlbSBpZiB0aGUgY2hhbmdlIGlzIHNtYWxsZXIKK3RoYW4gdGhlIG9yaWdpbmFsIG9wY29kZSBh bmQgd2UgY2FuIGZpbGwgaXQgd2l0aCBub3BzLiBQcm9ibGVtcyB3aWxsCithcHBlYXIgaWYgdGhl IHJlcGxhY2VtZW50IGNvZGUgaXMgbG9uZ2VyLgorCitUaGUgc2Vjb25kIG1lY2hhbmlzbSBpcyBi eSB0aSByZXBsYWNlIHRoZSBjYWxsIG9yIGp1bXAgdG8gdGhlCitvbGQgZnVuY3Rpb24gd2l0aCB0 aGUgYWRkcmVzcyBvZiB0aGUgbmV3IGZ1bmN0aW9uLgorCitBIHRoaXJkIG1lY2hhbmlzbSBpcyB0 byBhZGQgYSBqdW1wIHRvIHRoZSBuZXcgZnVuY3Rpb24gYXQgdGhlCitzdGFydCBvZiB0aGUgb2xk IGZ1bmN0aW9uLiBOLkIuIFRoZSBYZW4gaHlwZXJ2aXNvciBpbXBsZW1lbnRzIHRoZSB0aGlyZAor bWVjaGFuaXNtLiBTZWUgYFRyYW1wb2xpbmUgKGU5IG9wY29kZSlgIHNlY3Rpb24gZm9yIG1vcmUg ZGV0YWlscy4KKworIyMjIEV4YW1wbGUgb2YgdHJhbXBvbGluZSBhbmQgaW4tcGxhY2Ugc3BsaWNp bmcKKworQXMgZXhhbXBsZSB3ZSB3aWxsIGFzc3VtZSB0aGUgaHlwZXJ2aXNvciBkb2VzIG5vdCBo YXZlIFhTQS0xMzIgKHNlZQorKmRvbWN0bC9zeXNjdGw6IGRvbid0IGxlYWsgaHlwZXJ2aXNvciBz dGFjayB0byB0b29sc3RhY2tzKgorNGZmMzQ0OWYwZTlkMTc1Y2ViOTU1MWQzZjJhZWNiNTkyNzNm NjM5ZCkgYW5kIHdlIHdvdWxkIGxpa2UgdG8gYmluYXJ5IHBhdGNoCit0aGUgaHlwZXJ2aXNvciB3 aXRoIGl0LiBUaGUgb3JpZ2luYWwgY29kZSBsb29rcyBhcyBzbzoKKworPHByZT4KKyAgIDQ4IDg5 IGUwICAgICAgICAgICAgICAgICAgbW92ICAgICVyc3AsJXJheCAgCisgICA0OCAyNSAwMCA4MCBm ZiBmZiAgICAgICAgIGFuZCAgICAkMHhmZmZmZmZmZmZmZmY4MDAwLCVyYXggIAorPC9wcmU+CisK K3doaWxlIHRoZSBuZXcgcGF0Y2hlZCBoeXBlcnZpc29yIHdvdWxkIGJlOgorCis8cHJlPgorICAg NDggYzcgNDUgYjggMDAgMDAgMDAgMDAgICBtb3ZxICAgJDB4MCwtMHg0OCglcmJwKSAgCisgICA0 OCBjNyA0NSBjMCAwMCAwMCAwMCAwMCAgIG1vdnEgICAkMHgwLC0weDQwKCVyYnApICAKKyAgIDQ4 IGM3IDQ1IGM4IDAwIDAwIDAwIDAwICAgbW92cSAgICQweDAsLTB4MzgoJXJicCkgIAorICAgNDgg ODkgZTAgICAgICAgICAgICAgICAgICBtb3YgICAgJXJzcCwlcmF4ICAKKyAgIDQ4IDI1IDAwIDgw IGZmIGZmICAgICAgICAgYW5kICAgICQweGZmZmZmZmZmZmZmZjgwMDAsJXJheCAgCis8L3ByZT4K KworVGhpcyBpcyBpbnNpZGUgdGhlIGFyY2hfZG9fZG9tY3RsLiBUaGlzIG5ldyBjaGFuZ2UgYWRk cyAyMSBleHRyYQorYnl0ZXMgb2YgY29kZSB3aGljaCBhbHRlcnMgYWxsIHRoZSBvZmZzZXRzIGlu c2lkZSB0aGUgZnVuY3Rpb24uIFRvIGFsdGVyCit0aGVzZSBvZmZzZXRzIGFuZCBhZGQgdGhlIGV4 dHJhIDIxIGJ5dGVzIG9mIGNvZGUgd2UgbWlnaHQgbm90IGhhdmUgZW5vdWdoCitzcGFjZSBpbiAu dGV4dCB0byBzcXVlZXplIHRoaXMgaW4uCisKK0FzIHN1Y2ggd2UgY291bGQgc2ltcGxpZnkgdGhp cyBwcm9ibGVtIGJ5IG9ubHkgcGF0Y2hpbmcgdGhlIHNpdGUKK3doaWNoIGNhbGxzIGFyY2hfZG9f ZG9tY3RsOgorCis8cHJlPgorZG9fZG9tY3RsOiAgCisgZTggNGIgYjEgMDUgMDAgICAgICAgICAg Y2FsbHEgIGZmZmY4MmQwODAxNWZiYjkgPGFyY2hfZG9fZG9tY3RsPiAgCis8L3ByZT4KKword2l0 aCBhIG5ldyBhZGRyZXNzIGZvciB3aGVyZSB0aGUgbmV3IGBhcmNoX2RvX2RvbWN0bGAgd291bGQg YmUgKHRoaXMKK2FyZWEgd291bGQgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5KS4KKworQXN0dXRl IHJlYWRlcnMgd2lsbCB3b25kZXIgd2hhdCB3ZSBuZWVkIHRvIGRvIGlmIHdlIHdlcmUgdG8gcGF0 Y2ggYGRvX2RvbWN0bGAKKy0gd2hpY2ggaXMgbm90IGNhbGxlZCBkaXJlY3RseSBieSBoeXBlcnZp c29yIGJ1dCBvbiBiZWhhbGYgb2YgdGhlIGd1ZXN0cyB2aWEKK3RoZSBgY29tcGF0X2h5cGVyY2Fs bF90YWJsZWAgYW5kIGBoeXBlcmNhbGxfdGFibGVgLgorUGF0Y2hpbmcgdGhlIG9mZnNldCBpbiBg aHlwZXJjYWxsX3RhYmxlYCBmb3IgYGRvX2RvbWN0bDoKKyhmZmZmODJkMDgwMTAzMDc5IDxkb19k b21jdGw+OikKKworPHByZT4KKworIGZmZmY4MmQwODAyNGQ0OTA6ICAgNzkgMzAgIAorIGZmZmY4 MmQwODAyNGQ0OTI6ICAgMTAgODAgZDAgODIgZmYgZmYgICAKKworPC9wcmU+CisKK3dpdGggdGhl IG5ldyBhZGRyZXNzIHdoZXJlIHRoZSBuZXcgYGRvX2RvbWN0bGAgaXMgcG9zc2libGUuIFRoZSBv dGhlcgorcGxhY2Ugd2hlcmUgaXQgaXMgdXNlZCBpcyBpbiBgaHZtX2h5cGVyY2FsbDY0X3RhYmxl YCB3aGljaCB3b3VsZCBuZWVkCit0byBiZSBwYXRjaGVkIGluIGEgc2ltaWxhciB3YXkuIFRoaXMg d291bGQgcmVxdWlyZSBhbiBpbi1wbGFjZSBzcGxpY2luZworb2YgdGhlIG5ldyB2aXJ0dWFsIGFk ZHJlc3Mgb2YgYGFyY2hfZG9fZG9tY3RsYC4KKworSW4gc3VtbWFyeSB0aGlzIGV4YW1wbGUgcGF0 Y2hlZCB0aGUgY2FsbGVlIG9mIHRoZSBhZmZlY3RlZCBmdW5jdGlvbiBieQorICogYWxsb2NhdGlu ZyBtZW1vcnkgZm9yIHRoZSBuZXcgY29kZSB0byBsaXZlIGluLAorICogY2hhbmdpbmcgdGhlIHZp cnR1YWwgYWRkcmVzcyBpbiBhbGwgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYWxsZWQgdGhlIG9sZAor ICAgY29kZSAoY29tcHV0aW5nIHRoZSBuZXcgb2Zmc2V0LCBwYXRjaGluZyB0aGUgY2FsbHEgd2l0 aCBhIG5ldyBjYWxscSkuCisgKiBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZXMg d2l0aCB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcyBvZgorICAgdGhlIGZ1bmN0aW9uIChzcGxpY2lu ZyBpbiB0aGUgbmV3IHZpcnR1YWwgYWRkcmVzcykuIFNpbmNlIHRoaXMgdGFibGUKKyAgIHJlc2lk ZXMgaW4gdGhlIC5yb2RhdGEgc2VjdGlvbiB3ZSB3b3VsZCBuZWVkIHRvIHRlbXBvcmFyaWx5IGNo YW5nZSB0aGUKKyAgIHBhZ2UgdGFibGUgcGVybWlzc2lvbnMgZHVyaW5nIHRoaXMgcGFydC4KKwor SG93ZXZlciBpdCBoYXMgZHJhd2JhY2tzIC0gdGhlIHNhZmV0eSBjaGVja3Mgd2hpY2ggaGF2ZSB0 byBtYWtlIHN1cmUKK3RoZSBmdW5jdGlvbiBpcyBub3Qgb24gdGhlIHN0YWNrIC0gbXVzdCBhbHNv IGNoZWNrIGV2ZXJ5IGNhbGxlci4gRm9yIHNvbWUKK3BhdGNoZXMgdGhpcyBjb3VsZCBtZWFuIC0g aWYgdGhlcmUgd2VyZSBhbiBzdWZmaWNpZW50IGxhcmdlIGFtb3VudCBvZgorY2FsbGVycyAtIHRo YXQgd2Ugd291bGQgbmV2ZXIgYmUgYWJsZSB0byBhcHBseSB0aGUgdXBkYXRlLgorCitIYXZpbmcg dGhlIHBhdGNoaW5nIGRvbmUgYXQgcHJlZGV0ZXJtaW5lZCBpbnN0YW5jZXMgd2hlcmUgdGhlIHN0 YWNrcworYXJlIG5vdCBkZWVwIG1vc3RseSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgorCisjIyMgRXhh bXBsZSBvZiBkaWZmZXJlbnQgdHJhbXBvbGluZSBwYXRjaGluZy4KKworQW4gYWx0ZXJuYXRpdmUg bWVjaGFuaXNtIGV4aXN0cyB3aGVyZSB3ZSBjYW4gaW5zZXJ0IGEgdHJhbXBvbGluZSBpbiB0aGUK K2V4aXN0aW5nIGZ1bmN0aW9uIHRvIGJlIHBhdGNoZWQgdG8ganVtcCBkaXJlY3RseSB0byB0aGUg bmV3IGNvZGUuIFRoaXMKK2xlc3NlbnMgdGhlIGxvY2F0aW9ucyB0byBiZSBwYXRjaGVkIHRvIG9u ZSBidXQgaXQgcHV0cyBwcmVzc3VyZSBvbiB0aGUKK0NQVSBicmFuY2hpbmcgbG9naWMgKEktY2Fj aGUsIGJ1dCBpdCBpcyBqdXN0IG9uZSB1bmNvbmRpdGlvbmFsIGp1bXApLgorCitGb3IgdGhpcyBl eGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGh5cGVydmlzb3IgaGFzIG5vdCBiZWVuIGNv bXBpbGVkCit3aXRoIGZlMmUwNzlmNjQyZWZmYjNkMjRhNmUxYTcwOTZlZjI2ZTY5MWQ5M2UgKFhT QS0xMjU6ICpwcmUtZmlsbCBzdHJ1Y3R1cmVzCitmb3IgY2VydGFpbiBIWVBFUlZJU09SX3hlbl92 ZXJzaW9uIHN1Yi1vcHMqKSB3aGljaCBtZW0tc2V0cyBhbiBzdHJ1Y3R1cmUKK2luIGB4ZW5fdmVy c2lvbmAgaHlwZXJjYWxsLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgKiphbnl3aGVyZSoq IGluCit0aGUgaHlwZXJ2aXNvciAoaXQgaXMgY2FsbGVkIGJ5IHRoZSBndWVzdCkgYnV0IHJlZmVy ZW5jZWQgaW4gdGhlCitgY29tcGF0X2h5cGVyY2FsbF90YWJsZWAgYW5kIGBoeXBlcmNhbGxfdGFi bGVgIChhbmQgaW5kaXJlY3RseSBjYWxsZWQKK2Zyb20gdGhhdCkuIFBhdGNoaW5nIHRoZSBvZmZz ZXQgaW4gYGh5cGVyY2FsbF90YWJsZWAgZm9yIHRoZSBvbGQKK2Bkb194ZW5fdmVyc2lvbmAgKGZm ZmY4MmQwODAxMTJmOWUgPGRvX3hlbl92ZXJzaW9uPikKKworPC9wcmU+CisgZmZmZjgyZDA4MDI0 YjI3MCA8aHlwZXJjYWxsX3RhYmxlPjogICAKKyAuLi4gIAorIGZmZmY4MmQwODAyNGIyZjg6ICAg OWUgMmYgMTEgODAgZDAgODIgZmYgZmYgIAorCis8L3ByZT4KKword2l0aCB0aGUgbmV3IGFkZHJl c3Mgd2hlcmUgdGhlIG5ldyBgZG9feGVuX3ZlcnNpb25gIGlzIHBvc3NpYmxlLiBUaGUgb3RoZXIK K3BsYWNlIHdoZXJlIGl0IGlzIHVzZWQgaXMgaW4gYGh2bV9oeXBlcmNhbGw2NF90YWJsZWAgd2hp Y2ggd291bGQgbmVlZAordG8gYmUgcGF0Y2hlZCBpbiBhIHNpbWlsYXIgd2F5LiBUaGlzIHdvdWxk IHJlcXVpcmUgYW4gaW4tcGxhY2Ugc3BsaWNpbmcKK29mIHRoZSBuZXcgdmlydHVhbCBhZGRyZXNz IG9mIGBkb194ZW5fdmVyc2lvbmAuCisKK0FuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHdvdWxkIGJl IHRvIHBhdGNoIGluc2VydCBhIHRyYW1wb2xpbmUgaW4gdGhlCitvbGQgYGRvX3hlbl92ZXJzaW9u JyBmdW5jdGlvbiB0byBkaXJlY3RseSBqdW1wIHRvIHRoZSBuZXcgYGRvX3hlbl92ZXJzaW9uYC4K KworPHByZT4KKyBmZmZmODJkMDgwMTEyZjllIGRvX3hlbl92ZXJzaW9uOiAgCisgZmZmZjgyZDA4 MDExMmY5ZTogICAgICAgNDggYzcgYzAgZGEgZmYgZmYgZmYgICAgbW92ICAgICQweGZmZmZmZmZm ZmZmZmZmZGEsJXJheCAgCisgZmZmZjgyZDA4MDExMmZhNTogICAgICAgODMgZmYgMDkgICAgICAg ICAgICAgICAgY21wICAgICQweDksJWVkaSAgCisgZmZmZjgyZDA4MDExMmZhODogICAgICAgMGYg ODcgMjQgMDUgMDAgMDAgICAgICAgamEgICAgIGZmZmY4MmQwODAxMTM0ZDIgOyBkb194ZW5fdmVy c2lvbisweDUzNCAgCis8L3ByZT4KKword2l0aDoKKworPHByZT4KKyBmZmZmODJkMDgwMTEyZjll IGRvX3hlbl92ZXJzaW9uOiAgCisgZmZmZjgyZDA4MDExMmY5ZTogICAgICAgZTkgWFggWVkgWlog UVEgICAgICAgICAgam1wcSAgIFtuZXcgZG9feGVuX3ZlcnNpb25dICAKKzwvcHJlPgorCit3aGlj aCB3b3VsZCBsZXNzZW4gdGhlIGFtb3VudCBvZiBwYXRjaGluZyB0byBqdXN0IG9uZSBsb2NhdGlv bi4KKworSW4gc3VtbWFyeSB0aGlzIGV4YW1wbGUgcGF0Y2hlZCB0aGUgYWZmZWN0ZWQgZnVuY3Rp b24gdG8ganVtcCB0byB0aGUKK25ldyByZXBsYWNlbWVudCBmdW5jdGlvbiB3aGljaCByZXF1aXJl ZDoKKyAqIGFsbG9jYXRpbmcgbWVtb3J5IGZvciB0aGUgbmV3IGNvZGUgdG8gbGl2ZSBpbiwKKyAq IGluc2VydGluZyB0cmFtcG9saW5lIHdpdGggbmV3IG9mZnNldCBpbiB0aGUgb2xkIGZ1bmN0aW9u IHRvIHBvaW50IHRvIHRoZQorICAgbmV3IGZ1bmN0aW9uLgorICogT3B0aW9uYWxseSB3ZSBjYW4g aW5zZXJ0IGluIHRoZSBvbGQgZnVuY3Rpb24gYSB0cmFtcG9saW5lIGp1bXAgdG8gYW4gZnVuY3Rp b24KKyAgIHByb3ZpZGluZyBhbiBCVUdfT04gdG8gY2F0Y2ggZXJyYW50IGNvZGUuCisKK1RoZSBk aXNhZHZhbnRhZ2Ugb2YgdGhpcyBhcmUgdGhhdCB0aGUgdW5jb25kaXRpb25hbCBqdW1wIHdpbGwg Y29uc3VtZSBhIHNtYWxsCitJLWNhY2hlIHBlbmFsdHkuIEhvd2V2ZXIgdGhlIHNpbXBsaWNpdHkg b2YgdGhlIHBhdGNoaW5nIGFuZCBoaWdoZXIgY2hhbmNlCitvZiBwYXNzaW5nIHNhZmV0eSBjaGVj a3MgbWFrZSB0aGlzIGEgd29ydGh3aGlsZSBvcHRpb24uCisKK1RoaXMgcGF0Y2hpbmcgaGFzIGEg c2ltaWxhciBkcmF3YmFjayBhcyBpbmxpbmUgcGF0Y2hpbmcgLSB0aGUgc2FmZXR5CitjaGVja3Mg aGF2ZSB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvbiB0aGUgc3RhY2suIEhvd2V2 ZXIKK3NpbmNlIHdlIGFyZSByZXBsYWNpbmcgYXQgYSBoaWdoZXIgbGV2ZWwgKGEgZnVsbCBmdW5j dGlvbiBhcyBvcHBvc2VkCit0byB2YXJpb3VzIG9mZnNldHMgd2l0aGluIGZ1bmN0aW9ucykgdGhl IGNoZWNrcyBhcmUgc2ltcGxlci4KKworSGF2aW5nIHRoZSBwYXRjaGluZyBkb25lIGF0IHByZWRl dGVybWluZWQgaW5zdGFuY2VzIHdoZXJlIHRoZSBzdGFja3MKK2FyZSBub3QgZGVlcCBtb3N0bHkg c29sdmVzIHRoaXMgcHJvYmxlbSBhcyB3ZWxsLgorCisjIyMgU2VjdXJpdHkKKworV2l0aCB0aGlz IG1ldGhvZCB3ZSBjYW4gcmUtd3JpdGUgdGhlIGh5cGVydmlzb3IgLSBhbmQgYXMgc3VjaCB3ZSAq Kk1VU1QqKiBiZQorZGlsaWdlbnQgaW4gb25seSBhbGxvd2luZyBjZXJ0YWluIGd1ZXN0cyB0byBw ZXJmb3JtIHRoaXMgb3BlcmF0aW9uLgorCitGdXJ0aGVybW9yZSB3aXRoIFNlY3VyZUJvb3Qgb3Ig dGJvb3QsIHdlICoqTVVTVCoqIGFsc28gdmVyaWZ5IHRoZSBzaWduYXR1cmUKK29mIHRoZSBwYXls b2FkIHRvIGJlIGNlcnRhaW4gaXQgY2FtZSBmcm9tIGEgdHJ1c3RlZCBzb3VyY2UgYW5kIGludGVn cml0eQord2FzIGludGFjdC4KKworQXMgc3VjaCB0aGUgaHlwZXJjYWxsICoqTVVTVCoqIHN1cHBv cnQgYW4gWFNNIHBvbGljeSB0byBsaW1pdCB3aGF0IHRoZSBndWVzdAoraXMgYWxsb3dlZCB0byBp bnZva2UuIElmIHRoZSBzeXN0ZW0gaXMgYm9vdGVkIHdpdGggc2lnbmF0dXJlIGNoZWNraW5nIHRo ZQorc2lnbmF0dXJlIGNoZWNraW5nIHdpbGwgYmUgZW5mb3JjZWQuCisKKyMjIERlc2lnbiBvZiBw YXlsb2FkIGZvcm1hdAorCitUaGUgcGF5bG9hZCAqKk1VU1QqKiBjb250YWluIGVub3VnaCBkYXRh IHRvIGFsbG93IHVzIHRvIGFwcGx5IHRoZSB1cGRhdGUKK2FuZCBhbHNvIHNhZmVseSByZXZlcnNl IGl0LiBBcyBzdWNoIHdlICoqTVVTVCoqIGtub3c6CisKKyAqIFRoZSBsb2NhdGlvbnMgaW4gbWVt b3J5IHRvIGJlIHBhdGNoZWQuIFRoaXMgY2FuIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkKKyAg IHZpYSBzeW1ib2xzIG9yIHZpYSB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqIFRoZSBuZXcgY29kZSB0 aGF0IHdpbGwgYmUgcGF0Y2hlZCBpbi4KKworVGhpcyBiaW5hcnkgZm9ybWF0IGNhbiBiZSBjb25z dHJ1Y3RlZCB1c2luZyBhbiBjdXN0b20gYmluYXJ5IGZvcm1hdCBidXQKK3RoZXJlIGFyZSBzZXZl cmUgZGlzYWR2YW50YWdlcyBvZiBpdDoKKworICogVGhlIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJl IGNoYW5nZWQgYW5kIHdlIG5lZWQgYW4gbWVjaGFuaXNtIHRvIGFjY29tbW9kYXRlCisgICB0aGF0 LgorICogSXQgaGFzIHRvIGJlIHBsYXRmb3JtIGFnbm9zdGljLgorICogRWFzaWx5IGNvbnN0cnVj dGVkIHVzaW5nIGV4aXN0aW5nIHRvb2xzLgorCitBcyBzdWNoIGhhdmluZyB0aGUgcGF5bG9hZCBp biBhbiBFTEYgZmlsZSBpcyB0aGUgc2Vuc2libGUgd2F5LiBXZSB3b3VsZCBiZQorY2Fycnlpbmcg dGhlIHZhcmlvdXMgc2V0cyBvZiBzdHJ1Y3R1cmVzIChhbmQgZGF0YSkgaW4gdGhlIEVMRiBzZWN0 aW9ucyB1bmRlcgorZGlmZmVyZW50IG5hbWVzIGFuZCB3aXRoIGRlZmluaXRpb25zLgorCitOb3Rl IHRoYXQgZXZlcnkgc3RydWN0dXJlIGhhcyBwYWRkaW5nLiBUaGlzIGlzIGFkZGVkIHNvIHRoYXQg dGhlIGh5cGVydmlzb3IKK2NhbiByZS11c2UgdGhvc2UgZmllbGRzIGFzIGl0IHNlZXMgZml0Lgor CitFYXJsaWVyIGRlc2lnbiBhdHRlbXB0ZWQgdG8gaW5lcHRseSBleHBsYWluIHRoZSByZWxhdGlv bnMgb2YgdGhlIEVMRiBzZWN0aW9ucwordG8gZWFjaCBvdGhlciB3aXRob3V0IHVzaW5nIHByb3Bl ciBFTEYgbWVjaGFuaXNtIChzaF9pbmZvLCBzaF9saW5rLCBkYXRhCitzdHJ1Y3R1cmVzIHVzaW5n IEVsZiB0eXBlcywgZXRjKS4gVGhpcyBkZXNpZ24gd2lsbCBleHBsYWluIHRoZSBzdHJ1Y3R1cmVz CithbmQgaG93IHRoZXkgYXJlIHVzZWQgdG9nZXRoZXIgYW5kIG5vdCBkaWcgaW4gdGhlIEVMRiBm b3JtYXQgLSBleGNlcHQgbWVudGlvbgordGhhdCB0aGUgc2VjdGlvbiBuYW1lcyBzaG91bGQgbWF0 Y2ggdGhlIHN0cnVjdHVyZSBuYW1lcy4KKworVGhlIHhTcGxpY2UgcGF5bG9hZCBpcyBhIHJlbG9j YXRhYmxlIEVMRiBiaW5hcnkuIEEgdHlwaWNhbCBiaW5hcnkgd291bGQgaGF2ZToKKworICogT25l IG9yIG1vcmUgLnRleHQgc2VjdGlvbnMuCisgKiBaZXJvIG9yIG1vcmUgcmVhZC1vbmx5IGRhdGEg c2VjdGlvbnMuCisgKiBaZXJvIG9yIG1vcmUgZGF0YSBzZWN0aW9ucy4KKyAqIFJlbG9jYXRpb25z IGZvciBlYWNoIG9mIHRoZXNlIHNlY3Rpb25zLgorCitJdCBtYXkgYWxzbyBoYXZlIHNvbWUgYXJj aGl0ZWN0dXJlLXNwZWNpZmljIHNlY3Rpb25zLiBGb3IgZXhhbXBsZToKKworICogQWx0ZXJuYXRp dmVzIGluc3RydWN0aW9ucy4KKyAqIEJ1ZyBmcmFtZXMuCisgKiBFeGNlcHRpb24gdGFibGVzLgor ICogUmVsb2NhdGlvbnMgZm9yIGVhY2ggb2YgdGhlc2Ugc2VjdGlvbnMuCisKK1RoZSB4U3BsaWNl IGNvcmUgY29kZSBsb2FkcyB0aGUgcGF5bG9hZCBhcyBhIHN0YW5kYXJkIEVMRiBiaW5hcnksIHJl bG9jYXRlcyBpdAorYW5kIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZjIHNlY3Rpb25z IGFzIG5lZWRlZC4gVGhpcyBwcm9jZXNzIGlzIG11Y2gKK2xpa2Ugd2hhdCB0aGUgTGludXgga2Vy bmVsIG1vZHVsZSBsb2FkZXIgZG9lcy4KKworVGhlIHBheWxvYWQgY29udGFpbnMgYSBzZWN0aW9u ICh4c3BsaWNlX3BhdGNoX2Z1bmMpIHdpdGggYW4gYXJyYXkgb2Ygc3RydWN0dXJlcworZGVzY3Jp YmluZyB0aGUgZnVuY3Rpb25zIHRvIGJlIHBhdGNoZWQ6CisKKzxwcmU+CitzdHJ1Y3QgeHNwbGlj ZV9wYXRjaF9mdW5jIHsgIAorICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAKKyAgICB2b2lkICpuZXdf YWRkcjsgIAorICAgIHZvaWQgKm9sZF9hZGRyOyAgCisgICAgdWludDMyX3QgbmV3X3NpemU7ICAK KyAgICB1aW50MzJfdCBvbGRfc2l6ZTsgIAorICAgIHVpbnQ4X3QgdmVyc2lvbjsgIAorICAgIHVp bnQ4X3Qgb3BhcXVlWzMxXTsgIAorfTsgIAorPC9wcmU+CisKK1RoZSBzaXplIG9mIHRoZSBzdHJ1 Y3R1cmUgaXMgNjQgYnl0ZXMgb24gNjQtYml0IGh5cGVydmlzb3JzLiBJdCB3aWxsIGJlCis1MiBv biAzMi1iaXQgaHlwZXJ2aXNvcnMuCisKKyogYG5hbWVgIGlzIHRoZSBzeW1ib2wgbmFtZSBvZiB0 aGUgb2xkIGZ1bmN0aW9uLiBPbmx5IHVzZWQgaWYgYG9sZF9hZGRyYCBpcworICAgemVybywgb3Ro ZXJ3aXNlIHdpbGwgYmUgdXNlZCBkdXJpbmcgZHluYW1pYyBsaW5raW5nICh3aGVuIGh5cGVydmlz b3IgbG9hZHMKKyAgIHRoZSBwYXlsb2FkKS4KKworKiBgb2xkX2FkZHJgIGlzIHRoZSBhZGRyZXNz IG9mIHRoZSBmdW5jdGlvbiB0byBiZSBwYXRjaGVkIGFuZCBpcyBmaWxsZWQgaW4gYXQKKyAgcGF5 bG9hZCBnZW5lcmF0aW9uIHRpbWUgaWYgaHlwZXJ2aXNvciBmdW5jdGlvbiBhZGRyZXNzIGlzIGtu b3duLiBJZiB1bmtub3duLAorICB0aGUgdmFsdWUgKk1VU1QqIGJlIHplcm8gYW5kIHRoZSBoeXBl cnZpc29yIHdpbGwgYXR0ZW1wdCB0byByZXNvbHZlIHRoZSBhZGRyZXNzLgorCisqIGBuZXdfYWRk cmAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcmVwbGFjaW5nIHRoZSBv bGQKKyAgZnVuY3Rpb24uIFRoZSBhZGRyZXNzIGlzIGZpbGxlZCBpbiBkdXJpbmcgcmVsb2NhdGlv bi4gVGhlIHZhbHVlICoqTVVTVCoqIGJlCisgIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXcgZnVuY3Rp b24gaW4gdGhlIGZpbGUuCisKKyogYG9sZF9zaXplYCBhbmQgYG5ld19zaXplYCBjb250YWluIHRo ZSBzaXplcyBvZiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMgaW4gYnl0ZXMuCisgICBUaGUgdmFs dWUgb2YgYG9sZF9zaXplYCAqKk1VU1QqKiBub3QgYmUgemVyby4KKworKiBgdmVyc2lvbmAgaXMg dG8gYmUgb25lLgorCisqIGBvcGFxdWVgICoqTVVTVCoqIGJlIHplcm8uCisKK1RoZSBzaXplIG9m IHRoZSBgeHNwbGljZV9wYXRjaF9mdW5jYCBhcnJheSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIEVM RiBzZWN0aW9uCitzaXplLgorCitXaGVuIGFwcGx5aW5nIHRoZSBwYXRjaCB0aGUgaHlwZXJ2aXNv ciBpdGVyYXRlcyBvdmVyIGVhY2ggYHhzcGxpY2VfcGF0Y2hfZnVuY2AKK3N0cnVjdHVyZSBhbmQg dGhlIGNvcmUgY29kZSBpbnNlcnRzIGEgdHJhbXBvbGluZSBhdCBgb2xkX2FkZHJgIHRvIGBuZXdf YWRkcmAuCitUaGUgYG5ld19hZGRyYCBpcyBhbHRlcmVkIHdoZW4gdGhlIEVMRiBwYXlsb2FkIGlz IGxvYWRlZC4KKworV2hlbiByZXZlcnRpbmcgYSBwYXRjaCwgdGhlIGh5cGVydmlzb3IgaXRlcmF0 ZXMgb3ZlciBlYWNoIGB4c3BsaWNlX3BhdGNoX2Z1bmNgCithbmQgdGhlIGNvcmUgY29kZSBjb3Bp ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdW5kbyBidWZmZXIgKHByaXZhdGUgaW50ZXJuYWwgY29weSkK K3RvIGBvbGRfYWRkcmAuCisKKyMjIEh5cGVyY2FsbHMKKworV2Ugd2lsbCBlbXBsb3kgdGhlIHN1 YiBvcGVyYXRpb25zIG9mIHRoZSBzeXN0ZW0gbWFuYWdlbWVudCBoeXBlcmNhbGwgKHN5c2N0bCku CitUaGVyZSBhcmUgdG8gYmUgZm91ciBzdWItb3BlcmF0aW9uczoKKworICogdXBsb2FkIHRoZSBw YXlsb2Fkcy4KKyAqIGxpc3Rpbmcgb2YgcGF5bG9hZHMgc3VtbWFyeSB1cGxvYWRlZCBhbmQgdGhl aXIgc3RhdGUuCisgKiBnZXR0aW5nIGFuIHBhcnRpY3VsYXIgcGF5bG9hZCBzdW1tYXJ5IGFuZCBp dHMgc3RhdGUuCisgKiBjb21tYW5kIHRvIGFwcGx5LCBkZWxldGUsIG9yIHJldmVydCB0aGUgcGF5 bG9hZC4KKworTW9zdCBvZiB0aGUgYWN0aW9ucyBhcmUgYXN5bmNocm9ub3VzIHRoZXJlZm9yZSB0 aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlCit0byB2ZXJpZnkgdGhhdCBpdCBoYXMgYmVlbiBhcHBs aWVkIHByb3Blcmx5IGJ5IHJldHJpZXZpbmcgdGhlIHN1bW1hcnkgb2YgaXQKK2FuZCB2ZXJpZnlp bmcgdGhhdCB0aGVyZSBhcmUgbm8gZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXls b2FkLgorCitXZSAqKk1VU1QqKiBtYWtlIHNvbWUgb2YgdGhlbSBhc3luY2hyb25vdXMgZHVlIHRv IHRoZSBuYXR1cmUgb2YgcGF0Y2hpbmcKK2l0IHJlcXVpcmVzIGV2ZXJ5IHBoeXNpY2FsIENQVSB0 byBiZSBsb2NrLXN0ZXAgd2l0aCBlYWNoIG90aGVyLgorVGhlIHBhdGNoaW5nIG1lY2hhbmlzbSB3 aGlsZSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGlzIG5vdCBhbiBzaG9ydAorb3BlcmF0aW9u IGFuZCBhcyBzdWNoIHRoZSBkZXNpZ24gKipNVVNUKiogYXNzdW1lIGl0IHdpbGwgYmUgYW4gbG9u Zy1ydW5uaW5nCitvcGVyYXRpb24uCisKK1RoZSBzdWItb3BlcmF0aW9ucyB3aWxsIHNwZWxsIG91 dCBob3cgcHJlZW1wdGlvbiBpcyB0byBiZSBoYW5kbGVkIChpZiBhdCBhbGwpLgorCitGdXJ0aGVy bW9yZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBwYXlsb2FkcyBm b3IgdGhlIHNhbWUKK2Z1bmN0aW9uLiBBcyBzdWNoIGFuIHVuaXF1ZSBuYW1lIHBlciBwYXlsb2Fk IGhhcyB0byBiZSB2aXNpYmxlIHRvIGFsbG93IHByb3BlciBtYW5pcHVsYXRpb24uCisKK1RoZSBo eXBlcmNhbGwgaXMgcGFydCBvZiB0aGUgYHhlbl9zeXNjdGxgLiBUaGUgdG9wIGxldmVsIHN0cnVj dHVyZSBjb250YWlucworb25lIHVpbnQzMl90IHRvIGRldGVybWluZSB0aGUgc3ViLW9wZXJhdGlv bnMgYW5kIG9uZSBwYWRkaW5nIGZpZWxkIHdoaWNoCisqTVVTVCogYWx3YXlzIGJlIHplcm8uCisK KzxwcmU+CitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX29wIHsgIAorICAgIHVpbnQzMl90IGNt ZDsgICAgICAgICAgICAgICAgICAgLyogSU46IFhFTl9TWVNDVExfWFNQTElDRV8qLiAqLyAgCisg ICAgdWludDMyX3QgcGFkOyAgICAgICAgICAgICAgICAgICAvKiBJTjogQWx3YXlzIHplcm8uICov ICAKKwl1bmlvbiB7ICAKKyAgICAgICAgICAuLi4gc2VlIGJlbG93IC4uLiAgCisgICAgICAgIH0g dTsgIAorfTsgIAorCis8L3ByZT4KK3doaWxlIHRoZSByZXN0IG9mIGh5cGVyY2FsbCBzcGVjaWZp YyBzdHJ1Y3R1cmVzIGFyZSBwYXJ0IG9mIHRoZSB0aGlzIHN0cnVjdHVyZS4KKworIyMjIEJhc2lj IHR5cGU6IHN0cnVjdCB4ZW5feHNwbGljZV9uYW1lCisKK01vc3Qgb2YgdGhlIGh5cGVyY2FsbHMg ZW1wbG95IGFuIHNoYXJlZCBzdHJ1Y3R1cmUgY2FsbGVkIGBzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFt ZWAKK3doaWNoIGNvbnRhaW5zOgorCisgKiBgbmFtZWAgLSBwb2ludGVyIHdoZXJlIHRoZSBzdHJp bmcgZm9yIHRoZSBuYW1lIGlzIGxvY2F0ZWQuCisgKiBgc2l6ZWAgLSB0aGUgc2l6ZSBvZiB0aGUg c3RyaW5nCisgKiBgcGFkYCAtIHBhZGRpbmcgLSB0byBiZSB6ZXJvLgorCitUaGUgc3RydWN0dXJl IGlzIGFzIGZvbGxvdzoKKworPHByZT4KKy8qICAKKyAqICBVbmlxdWVseSBpZGVudGlmaWVzIHRo ZSBwYXlsb2FkLiAgU2hvdWxkIGJlIGh1bWFuIHJlYWRhYmxlLiAgCisgKiBJbmNsdWRlcyB0aGUg TlVMIHRlcm1pbmF0b3IgIAorICovICAKKyNkZWZpbmUgWEVOX1hTUExJQ0VfTkFNRV9TSVpFIDEy OCAgCitzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZSB7ICAKKyAgICBYRU5fR1VFU1RfSEFORExFXzY0 KGNoYXIpIG5hbWU7ICAgICAgICAgLyogSU4sIHBvaW50ZXIgdG8gbmFtZS4gKi8gIAorICAgIHVp bnQxNl90IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTiwgc2l6ZSBvZiBuYW1l LiBNYXkgYmUgdXB0byAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYRU5fWFNQTElDRV9OQU1FX1NJWkUuICovICAKKyAgICB1aW50MTZfdCBwYWRbM107 ICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IE1VU1QgYmUgemVyby4gKi8gCit9OyAgCis8 L3ByZT4KKworIyMjIFhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQgKDApCisKK1VwbG9hZCBhIHBh eWxvYWQgdG8gdGhlIGh5cGVydmlzb3IuIFRoZSBwYXlsb2FkIGlzIHZlcmlmaWVkCithZ2FpbnN0 IGJhc2ljIGNoZWNrcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgdGhlIHByb3BlciByZXR1 cm4gY29kZQord2lsbCBiZSByZXR1cm5lZC4gVGhlIHBheWxvYWQgaXMgbm90IGFwcGxpZWQgYXQg dGhpcyB0aW1lIC0gdGhhdCBpcworY29udHJvbGxlZCBieSAqWEVOX1NZU0NUTF9YU1BMSUNFX0FD VElPTiouCisKK1RoZSBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIEEgYHN0cnVjdCB4ZW5feHNwbGlj ZV9uYW1lYCBjYWxsZWQgYG5hbWVgIHdoaWNoIGhhcyB0aGUgdW5pcXVlIG5hbWUuCisgKiBgc2l6 ZWAgdGhlIHNpemUgb2YgdGhlIEVMRiBwYXlsb2FkIChpbiBieXRlcykuCisgKiBgcGF5bG9hZGAg dGhlIHZpcnR1YWwgYWRkcmVzcyBvZiB3aGVyZSB0aGUgRUxGIHBheWxvYWQgaXMuCisKK1RoZSBg bmFtZWAgY291bGQgYmUgYW4gVVVJRCB0aGF0IHN0YXlzIGZpeGVkIGZvcmV2ZXIgZm9yIGEgZ2l2 ZW4KK3BheWxvYWQuIEl0IGNhbiBiZSBlbWJlZGRlZCBpbnRvIHRoZSBFTEYgcGF5bG9hZCBhdCBj cmVhdGlvbiB0aW1lCithbmQgZXh0cmFjdGVkIGJ5IHRvb2xzLgorCitUaGUgcmV0dXJuIHZhbHVl IGlzIHplcm8gaWYgdGhlIHBheWxvYWQgd2FzIHN1Y2Nlc2Z1bGx5IHVwbG9hZGVkLgorT3RoZXJ3 aXNlIGFuIC1YRU5fRVhYIHJldHVybiB2YWx1ZSBpcyBwcm92aWRlZC4gRHVwbGljYXRlIGBuYW1l YCBhcmUgbm90IHN1cHBvcnRlZC4KKworVGhlIGBwYXlsb2FkYCBpcyB0aGUgRUxGIHBheWxvYWQg YXMgbWVudGlvbmVkIGluIHRoZSBgUGF5bG9hZCBmb3JtYXRgIHNlY3Rpb24uCisKK1RoZSBzdHJ1 Y3R1cmUgaXMgYXMgZm9sbG93OgorCis8cHJlPgorc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV91 cGxvYWQgeyAgCisgICAgeGVuX3hzcGxpY2VfbmFtZV90IG5hbWU7ICAgICAgICAgICAgLyogSU4s IG5hbWUgb2YgdGhlIHBhdGNoLiAqLyAgCisgICAgdWludDY0X3Qgc2l6ZTsgICAgICAgICAgICAg ICAgICAgICAgLyogSU4sIHNpemUgb2YgdGhlIEVMRiBmaWxlLiAqLyAgCisgICAgWEVOX0dVRVNU X0hBTkRMRV82NCh1aW50OCkgcGF5bG9hZDsgLyogSU46IEVMRiBmaWxlLiAqLyAgCit9OyAgCis8 L3ByZT4KKworIyMjIFhFTl9TWVNDVExfWFNQTElDRV9HRVQgKDEpCisKK1JldHJpZXZlIGFuIHN0 YXR1cyBvZiBhbiBzcGVjaWZpYyBwYXlsb2FkLiBUaGlzIGNhbGxlciBwcm92aWRlczoKKworICog QSBgc3RydWN0IHhlbl94c3BsaWNlX25hbWVgIGNhbGxlZCBgbmFtZWAgd2hpY2ggaGFzIHRoZSB1 bmlxdWUgbmFtZS4KKyAqIEEgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgIHN0cnVjdHVyZS4g VGhlIG1lbWJlciB2YWx1ZXMgd2lsbAorICAgYmUgb3Zlci13cml0dGVuIHVwb24gY29tcGxldGlv bi4KKworVXBvbiBjb21wbGV0aW9uIHRoZSBgc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1c2AgaXMg dXBkYXRlZC4KKworICogYHN0YXR1c2AgLSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9m IHRoZSBwYXlsb2FkOgorICAgKiAqWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRCogICgxKSBsb2FkZWQg YW5kIHRoZSBFTEYgcGF5bG9hZCBzYWZldHkgY2hlY2tzIHBhc3NlZC4KKyAgICogKlhTUExJQ0Vf U1RBVFVTX0FQUExJRUQqICgyKSBsb2FkZWQsIGNoZWNrZWQsIGFuZCBhcHBsaWVkLgorICAgKiAg Tm8gb3RoZXIgdmFsdWUgaXMgcG9zc2libGUuCisgKiBgcmNgIC0gLVhFTl9FWFggdHlwZSBlcnJv cnMgZW5jb3VudGVyZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUgbGFzdAorICAgWFNQTElDRV9BQ1RJ T05fKiBvcGVyYXRpb24uIFRoZSBub3JtYWwgdmFsdWVzIGNhbiBiZSB6ZXJvIG9yIC1YRU5fRUFH QUlOIHdoaWNoCisgICByZXNwZWN0aXZlbHkgbWVhbjogc3VjY2VzcyBvciBvcGVyYXRpb24gaW4g cHJvZ3Jlc3MuIE90aGVyIHZhbHVlcworICAgaW1wbHkgYW4gZXJyb3Igb2NjdXJyZWQuIElmIHRo ZXJlIGlzIGFuIGVycm9yIGluIGByY2AsIGBzdGF0dXNgIHdpbGwgKipOT1QqKgorICAgaGF2ZSBj aGFuZ2VkLgorCitUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBoeXBlcmNhbGwgaXMgemVybyBvbiBz dWNjZXNzIGFuZCAtWEVOX0VYWCBvbiBmYWlsdXJlLgorKE5vdGUgdGhhdCB0aGUgYHJjYGAgdmFs dWUgY2FuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSByZXR1cm4gdmFsdWUsIGFzIGluCityYz0tWEVO X0VBR0FJTiBhbmQgcmV0dXJuIHZhbHVlIGNhbiBiZSAwKS4KKworRm9yIGV4YW1wbGUsIHN1cHBv c2luZyB0aGVyZSBpcyBhbiBwYXlsb2FkOgorCis8cHJlPgorIHN0YXR1czogWFNQTElDRV9TVEFU VVNfQ0hFQ0tFRAorIHJjOiAwCis8L3ByZT4KKworV2UgYXBwbHkgYW4gYWN0aW9uIC0gWFNQTElD RV9BQ1RJT05fUkVWRVJUIC0gdG8gcmV2ZXJ0IGl0ICh3aGljaCB3b24ndCB3b3JrCithcyB3ZSBo YXZlIG5vdCBldmVuIGFwcGxpZWQgaXQuIEFmdGVyd2FyZHMgd2Ugd2lsbCBoYXZlOgorCis8cHJl PgorIHN0YXR1czogWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRAorIHJjOiAtWEVOX0VJTlZBTAorPC9w cmU+CisKK0l0IGhhcyBmYWlsZWQgYnV0IGl0IHJlbWFpbnMgbG9hZGVkLgorCitUaGlzIG9wZXJh dGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgZG9lcyBub3QgcmVxdWlyZSBwcmVlbXB0aW9uLgorCitU aGUgc3RydWN0dXJlIGlzIGFzIGZvbGxvdzoKKworPHByZT4KK3N0cnVjdCB4ZW5feHNwbGljZV9z dGF0dXMgeyAgCisjZGVmaW5lIFhTUExJQ0VfU1RBVFVTX0NIRUNLRUQgICAgICAxICAKKyNkZWZp bmUgWFNQTElDRV9TVEFUVVNfQVBQTElFRCAgICAgIDIgIAorICAgIHVpbnQzMl90IHN0YXRlOyAg ICAgICAgICAgICAgICAgLyogT1VUOiBYU1BMSUNFX1NUQVRFXyouICovICAKKyAgICBpbnQzMl90 IHJjOyAgICAgICAgICAgICAgICAgICAgIC8qIE9VVDogMCBpZiBubyBlcnJvciwgb3RoZXJ3aXNl IC1YRU5fRVhYLiAqLyAgCit9OyAgCisKK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfZ2V0IHsg IAorICAgIHhlbl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAgICAgLyogSU4sIHRoZSBuYW1lIG9m IHRoZSBwYXlsb2FkLiAqLyAgCisgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3Qgc3RhdHVzOyAgICAv KiBJTi9PVVQ6IHN0YXR1cyBvZiB0aGUgcGF5bG9hZC4gKi8gIAorfTsgIAorPC9wcmU+CisKKyMj IyBYRU5fU1lTQ1RMX1hTUExJQ0VfTElTVCAoMikKKworUmV0cmlldmUgYW4gYXJyYXkgb2YgYWJi cmV2aWF0ZWQgc3RhdHVzIGFuZCBuYW1lcyBvZiBwYXlsb2FkcyB0aGF0IGFyZSBsb2FkZWQgaW4g dGhlCitoeXBlcnZpc29yLgorCitUaGUgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBgdmVyc2lvbmAu IFZlcnNpb24gb2YgdGhlIHBheWxvYWQuIENhbGxlciBzaG91bGQgcmUtdXNlIHRoZSBmaWVsZCBw cm92aWRlZCBieQorICAgIHRoZSBoeXBlcnZpc29yLiBJZiB0aGUgdmFsdWUgZGlmZmVycyB0aGUg ZGF0YSBpcyBzdGFsZS4KKyAqIGBpZHhgIGluZGV4IGl0ZXJhdG9yLiBUaGUgaW5kZXggaW50byB0 aGUgaHlwZXJ2aXNvcidzIHBheWxvYWQgY291bnQuIEl0IGlzCisgICAgcmVjb21tZW5kZWQgdGhh dCBvbiBmaXJzdCBpbnZvY2F0aW9uIHplcm8gYmUgdXNlZCBzbyB0aGF0IGBucmAgKHdoaWNoIHRo ZQorICAgIGh5cGVydmlzb3Igd2lsbCB1cGRhdGUgd2l0aCB0aGUgcmVtYWluaW5nIHBheWxvYWQg Y291bnQpIGJlIHByb3ZpZGVkLgorICAgIEFsc28gdGhlIGh5cGVydmlzb3Igd2lsbCBwcm92aWRl IGB2ZXJzaW9uYCB3aXRoIHRoZSBtb3N0IGN1cnJlbnQgdmFsdWUuCisgKiBgbnJgIHRoZSBtYXgg bnVtYmVyIG9mIGVudHJpZXMgdG8gcG9wdWxhdGUuIENhbiBiZSB6ZXJvIHdoaWNoIHdpbGwgcmVz dWx0CisgICAgaW4gdGhlIGh5cGVyY2FsbCBiZWluZyBhIHByb2Jpbmcgb25lIGFuZCByZXR1cm4g dGhlIG51bWJlciBvZiBwYXlsb2FkcworICAgIChhbmQgdXBkYXRlIHRoZSBgdmVyc2lvbmApLgor ICogYHBhZGAgLSAqTVVTVCogYmUgemVyby4KKyAqIGBzdGF0dXNgIHZpcnR1YWwgYWRkcmVzcyBv ZiB3aGVyZSB0byB3cml0ZSBgc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1c2AKKyAgIHN0cnVjdHVy ZXMuIENhbGxlciAqTVVTVCogYWxsb2NhdGUgdXAgdG8gYG5yYCBvZiB0aGVtLgorICogYG5hbWVg IC0gdmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRvIHdyaXRlIHRoZSB1bmlxdWUgbmFtZSBvZiB0 aGUgcGF5bG9hZC4KKyAgIENhbGxlciAqTVVTVCogYWxsb2NhdGUgdXAgdG8gYG5yYCBvZiB0aGVt LiBFYWNoICpNVVNUKiBiZSBvZgorICAgKipYRU5fWFNQTElDRV9OQU1FX1NJWkUqKiBzaXplLiBO b3RlIHRoYXQgKipYRU5fWFNQTElDRV9OQU1FX1NJWkUqKiBpbmNsdWRlcworICAgdGhlIE5VTCB0 ZXJtaW5hdG9yLgorICogYGxlbmAgLSB2aXJ0dWFsIGFkZHJlc3Mgb2Ygd2hlcmUgdG8gd3JpdGUg dGhlIGxlbmd0aCBvZiBlYWNoIHVuaXF1ZSBuYW1lCisgICBvZiB0aGUgcGF5bG9hZC4gQ2FsbGVy ICpNVVNUKiBhbGxvY2F0ZSB1cCB0byBgbnJgIG9mIHRoZW0uIEVhY2ggKk1VU1QqIGJlCisgICBv ZiBzaXplb2YodWludDMyX3QpICg0IGJ5dGVzKS4KKworSWYgdGhlIGh5cGVyY2FsbCByZXR1cm5z IGFuIHBvc2l0aXZlIG51bWJlciwgaXQgaXMgdGhlIG51bWJlciAodXB0byBgbnJgCitwcm92aWRl ZCB0byB0aGUgaHlwZXJjYWxsKSBvZiB0aGUgcGF5bG9hZHMgcmV0dXJuZWQsIGFsb25nIHdpdGgg YG5yYCB1cGRhdGVkCit3aXRoIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHBheWxvYWRzLCBgdmVy c2lvbmAgdXBkYXRlZCAoaXQgbWF5IGJlIHRoZSBzYW1lCithY3Jvc3MgaHlwZXJjYWxscyAtIGlm IGl0IHZhcmllcyB0aGUgZGF0YSBpcyBzdGFsZSBhbmQgZnVydGhlciBjYWxscyBjb3VsZAorZmFp bCkuIFRoZSBgc3RhdHVzYCwgYG5hbWVgLCBhbmQgYGxlbmAnIGFyZSB1cGRhdGVkIGF0IHRoZWly IGRlc2lnbmVkIGluZGV4Cit2YWx1ZSAoYGlkeGApIHdpdGggdGhlIHJldHVybmVkIHZhbHVlIG9m IGRhdGEuCisKK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyAtWEVOX0UyQklHIHRoZSBgbnJgIGlz IHRvbyBiaWcgYW5kIHNob3VsZCBiZQorbG93ZXJlZC4KKworSWYgdGhlIGh5cGVyY2FsbCByZXR1 cm5zIGFuIHplcm8gdmFsdWUgdGhlcmUgYXJlIG5vIG1vcmUgcGF5bG9hZHMuCisKK05vdGUgdGhh dCBkdWUgdG8gdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgaHlwZXJjYWxscyB0aGUgY29udHJv bCBkb21haW4gbWlnaHQKK2hhdmUgYWRkZWQgb3IgcmVtb3ZlZCBhIG51bWJlciBvZiBwYXlsb2Fk cyBtYWtpbmcgdGhpcyBpbmZvcm1hdGlvbiBzdGFsZS4gSXQgaXMKK3RoZSByZXNwb25zaWJpbGl0 eSBvZiB0aGUgdG9vbHN0YWNrIHRvIHVzZSB0aGUgYHZlcnNpb25gIGZpZWxkIHRvIGNoZWNrCiti ZXR3ZWVuIGVhY2ggaW52b2NhdGlvbi4gaWYgdGhlIHZlcnNpb24gZGlmZmVycyBpdCBzaG91bGQg ZGlzY2FyZCB0aGUgc3RhbGUKK2RhdGEgYW5kIHN0YXJ0IGZyb20gc2NyYXRjaC4gSXQgaXMgT0sg Zm9yIHRoZSB0b29sc3RhY2sgdG8gdXNlIHRoZSBuZXcKK2B2ZXJzaW9uYCBmaWVsZC4KKworVGhl IGBzdHJ1Y3QgeGVuX3hzcGxpY2Vfc3RhdHVzYCBzdHJ1Y3R1cmUgY29udGFpbnMgYW4gc3RhdHVz IG9mIHBheWxvYWQgd2hpY2ggaW5jbHVkZXM6CisKKyAqIGBzdGF0dXNgIC0gaW5kaWNhdGVzIHRo ZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgcGF5bG9hZDoKKyAgICogKlhTUExJQ0VfU1RBVFVTX0NI RUNLRUQqICAoMSkgbG9hZGVkIGFuZCB0aGUgRUxGIHBheWxvYWQgc2FmZXR5IGNoZWNrcyBwYXNz ZWQuCisgICAqICpYU1BMSUNFX1NUQVRVU19BUFBMSUVEKiAoMikgbG9hZGVkLCBjaGVja2VkLCBh bmQgYXBwbGllZC4KKyAgICogIE5vIG90aGVyIHZhbHVlIGlzIHBvc3NpYmxlLgorICogYHJjYCAt IC1YRU5fRVhYIHR5cGUgZXJyb3JzIGVuY291bnRlcmVkIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGxh c3QKKyAgIFhTUExJQ0VfQUNUSU9OXyogb3BlcmF0aW9uLiBUaGUgbm9ybWFsIHZhbHVlcyBjYW4g YmUgemVybyBvciAtWEVOX0VBR0FJTiB3aGljaAorICAgcmVzcGVjdGl2ZWx5IG1lYW46IHN1Y2Nl c3Mgb3Igb3BlcmF0aW9uIGluIHByb2dyZXNzLiBPdGhlciB2YWx1ZXMKKyAgIGltcGx5IGFuIGVy cm9yIG9jY3VycmVkLiBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBgcmNgLCBgc3RhdHVzYCB3aWxs ICoqTk9UKioKKyAgIGhhdmUgY2hhbmdlZC4KKworVGhlIHN0cnVjdHVyZSBpcyBhcyBmb2xsb3c6 CisKKzxwcmU+CitzdHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX2xpc3QgeyAgCisgICAgdWludDMy X3QgdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9VVDogSHlwZXJ2aXNvciBzdGFt cHMgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElmIHZhcmllcyBiZXR3ZWVuIGNhbGxzLCB3ZSBhcmUgIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW5nIHN0YWxlIGRhdGEuICovICAKKyAgICB1 aW50MzJfdCBpZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46IEluZGV4IGludG8g aHlwZXJ2aXNvciBsaXN0LiAqLworICAgIHVpbnQzMl90IG5yOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJTjogSG93IG1hbnkgc3RhdHVzLCBuYW1lcywgYW5kIGxlbiAgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBmaWxsZWQg b3V0LiBDYW4gYmUgemVybyB0byBnZXQgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhbW91bnQgb2YgcGF5bG9hZHMgYW5kIHZlcnNpb24uICAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUOiBIb3cgbWFueSBw YXlsb2FkcyBsZWZ0LiAqLyAgCisgICAgdWludDMyX3QgcGFkOyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIElOOiBNdXN0IGJlIHplcm8uICovICAKKyAgICBYRU5fR1VFU1RfSEFORExFXzY0 KHhlbl94c3BsaWNlX3N0YXR1c190KSBzdGF0dXM7ICAvKiBPVVQuIE11c3QgaGF2ZSBlbm91Z2gg IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZSBh bGxvY2F0ZSBmb3IgbnIgb2YgdGhlbS4gKi8gIAorICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQoY2hh cikgaWQ7ICAgICAgICAgICAvKiBPVVQ6IEFycmF5IG9mIG5hbWVzLiBFYWNoIG1lbWJlciAgCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VU1QgWEVOX1hT UExJQ0VfTkFNRV9TSVpFIGluIHNpemUuICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTXVzdCBoYXZlIG5yIG9mIHRoZW0uICovICAKKyAgICBYRU5fR1VF U1RfSEFORExFXzY0KHVpbnQzMikgbGVuOyAgICAgICAgLyogT1VUOiBBcnJheSBvZiBsZW5ndGhz IG9mIG5hbWUncy4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNdXN0IGhhdmUgbnIgb2YgdGhlbS4gKi8gIAorfTsgIAorPC9wcmU+CisKKyMjIyBYRU5f U1lTQ1RMX1hTUExJQ0VfQUNUSU9OICgzKQorCitQZXJmb3JtIGFuIG9wZXJhdGlvbiBvbiB0aGUg cGF5bG9hZCBzdHJ1Y3R1cmUgcmVmZXJlbmNlZCBieSB0aGUgYG5hbWVgIGZpZWxkLgorVGhlIG9w ZXJhdGlvbiByZXF1ZXN0IGlzIGFzeW5jaHJvbm91cyBhbmQgdGhlIHN0YXR1cyBzaG91bGQgYmUg cmV0cmlldmVkCitieSB1c2luZyBlaXRoZXIgKipYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKiogb3Ig KipYRU5fU1lTQ1RMX1hTUExJQ0VfTElTVCoqIGh5cGVyY2FsbC4KKworVGhlIGNhbGxlciBwcm92 aWRlczoKKworICogQSAnc3RydWN0IHhlbl94c3BsaWNlX25hbWVgIGBuYW1lYCBjb250YWluaW5n IHRoZSB1bmlxdWUgbmFtZS4KKyAqIGBjbWRgIHRoZSBjb21tYW5kIHJlcXVlc3RlZDoKKyAgKiAq WFNQTElDRV9BQ1RJT05fQ0hFQ0sqICgxKSBjaGVjayB0aGF0IHRoZSBwYXlsb2FkIHdpbGwgYXBw bHkgcHJvcGVybHkuCisgICAgVGhpcyBhbHNvIHZlcmZpZXMgdGhlIHBheWxvYWQgLSB3aGljaCBt YXkgcmVxdWlyZSBTZWN1cmVCb290IGZpcm13YXJlCisgICAgY2FsbHMuIFRoaXMgaXMgdGhlIGlu aXRpYWwgc3RhdGUgYW4gcGF5bG9hZCBpcyBpbi4KKyAgKiAqWFNQTElDRV9BQ1RJT05fVU5MT0FE KiAoMikgdW5sb2FkIHRoZSBwYXlsb2FkLgorICAgQW55IGZ1cnRoZXIgaHlwZXJjYWxscyBhZ2Fp bnN0IHRoZSBgbmFtZWAgd2lsbCByZXN1bHQgaW4gZmFpbHVyZSB1bmxlc3MKKyAgICoqWEVOX1NZ U0NUTF9YU1BMSUNFX1VQTE9BRCoqIGh5cGVyY2FsbCBpcyBwZXJmb21lZCB3aXRoIHNhbWUgYG5h bWVgLgorICAqICpYU1BMSUNFX0FDVElPTl9SRVZFUlQqICgzKSByZXZlcnQgdGhlIHBheWxvYWQu IElmIHRoZSBvcGVyYXRpb24gdGFrZXMKKyAgbW9yZSB0aW1lIHRoYW4gdGhlIHVwcGVyIGJvdW5k IG9mIHRpbWUgdGhlIGByY2AgaW4gYHhlbl94c3BsaWNlX3N0YXR1cycKKyAgcmV0cmlldmVkIHZp YSAqKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqKiB3aWxsIGJlIC1YRU5fRUJVU1kuCisgICogKlhT UExJQ0VfQUNUSU9OX0FQUExZKiAoNCkgYXBwbHkgdGhlIHBheWxvYWQuIElmIHRoZSBvcGVyYXRp b24gdGFrZXMKKyAgbW9yZSB0aW1lIHRoYW4gdGhlIHVwcGVyIGJvdW5kIG9mIHRpbWUgdGhlIGBy Y2AgaW4gYHhlbl94c3BsaWNlX3N0YXR1cycKKyAgcmV0cmlldmVkIHZpYSAqKlhFTl9TWVNDVExf WFNQTElDRV9HRVQqKiB3aWxsIGJlIC1YRU5fRUJVU1kuCisgICogKlhTUExJQ0VfQUNUSU9OX1JF UExBQ0UqICg1KSByZXZlcnQgYWxsIGFwcGxpZWQgcGF5bG9hZHMgYW5kIGFwcGx5IHRoaXMKKyAg cGF5bG9hZC4gSWYgdGhlIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRpbWUgdGhhbiB0aGUgdXBwZXIg Ym91bmQgb2YgdGltZQorICB0aGUgYHJjYCBpbiBgeGVuX3hzcGxpY2Vfc3RhdHVzJyByZXRyaWV2 ZWQgdmlhICoqWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCoqCisgIHdpbGwgYmUgLVhFTl9FQlVTWS4K KyAqIGB0aW1lYCB0aGUgdXBwZXIgYm91bmQgb2YgdGltZSAobXMpIHRoZSBjbWQgc2hvdWxkIHRh a2UuIFplcm8gbWVhbnMgaW5maW5pdGUuCisgICBJZiB3aXRoaW4gdGhlIHRpbWUgdGhlIG9wZXJh dGlvbiBkb2VzIG5vdCBzdWNjZWVkIHRoZSBvcGVyYXRpb24gd291bGQgZ28gaW4KKyAgIGVycm9y IHN0YXRlLgorICogYHBhZGAgLSAqTVVTVCogYmUgemVyby4KKworVGhlIHJldHVybiB2YWx1ZSB3 aWxsIGJlIHplcm8gdW5sZXNzIHRoZSBwcm92aWRlZCBmaWVsZHMgYXJlIGluY29ycmVjdC4KKwor VGhlIHN0cnVjdHVyZSBpcyBhcyBmb2xsb3c6CisKKzxwcmU+CisjZGVmaW5lIFhTUExJQ0VfQUNU SU9OX0NIRUNLICAgMSAgCisjZGVmaW5lIFhTUExJQ0VfQUNUSU9OX1VOTE9BRCAgMiAgCisjZGVm aW5lIFhTUExJQ0VfQUNUSU9OX1JFVkVSVCAgMyAgCisjZGVmaW5lIFhTUExJQ0VfQUNUSU9OX0FQ UExZICAgNCAgCisjZGVmaW5lIFhTUExJQ0VfQUNUSU9OX1JFUExBQ0UgNSAgCitzdHJ1Y3QgeGVu X3N5c2N0bF94c3BsaWNlX2FjdGlvbiB7ICAKKyAgICB4ZW5feHNwbGljZV9uYW1lX3QgbmFtZTsg ICAgICAgICAgICAgICAgLyogSU4sIG5hbWUgb2YgdGhlIHBhdGNoLiAqLyAgCisgICAgdWludDMy X3QgY21kOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElOOiBYU1BMSUNFX0FDVElPTl8q ICovICAKKyAgICB1aW50MzJfdCB0aW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU46 IFplcm8gaWYgbm8gdGltZW91dC4gKi8gICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogT3IgdXBwZXIgYm91bmQgb2YgdGltZSAobXMpICovICAgCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBvcGVyYXRpb24g dG8gdGFrZS4gKi8gIAorfTsgIAorCis8L3ByZT4KKworIyMgU3RhdGUgZGlhZ3JhbXMgb2YgWFNQ TElDRV9BQ1RJT04gY29tbWFuZHMuCisKK1RoZXJlIGlzIGEgc3RyaWN0IG9yZGVyaW5nIHN0YXRl IG9mIHdoYXQgdGhlIGNvbW1hbmRzIGNhbiBiZS4KK1RoZSBYU1BMSUNFX0FDVElPTiBwcmVmaXgg aGFzIGJlZW4gZHJvcHBlZCB0byBlYXN5IHJlYWRpbmcgYW5kCitkb2VzIG5vdCBpbmNsdWRlIHRo ZSBYU1BMSUNFX1NUQVRFUzoKKworPHByZT4KKyAgICAgICAgICAgICAgLy0+XCAgCisgICAgICAg ICAgICAgIFwgIC8gIAorIFVOTE9BRCA8LS0tIENIRUNLIC0tLT4gUkVQTEFDRXxBUFBMWSAtLT4g UkVWRVJUIC0tXCAgCisgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAKKyAgICAgICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS08LS0tLS0t LS0tLS0tLS8gIAorCis8L3ByZT4KKyMjIFN0YXRlIHRyYW5zaXRpb24gdGFibGUgb2YgWFNQTElD RV9BQ1RJT04gY29tbWFuZHMgYW5kIFhTUExJQ0VfU1RBVFVTLgorCitOb3RlIHRoYXQ6CisKKyAt IFRoZSBDSEVDS0VEIHN0YXRlIGlzIHRoZSBzdGFydGluZyBvbmUgYWNoaWV2ZWQgd2l0aCAqWEVO X1NZU0NUTF9YU1BMSUNFX1VQTE9BRCogaHlwZXJjYWxsLgorIC0gVGhlIFJFVkVSVCBvcGVyYXRp b24gb24gc3VjY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgbW92ZSB0byB0aGUgQ0hFQ0tFRCBzdGF0 ZS4KKyAtIFRoZXJlIGFyZSB0d28gU1RBVEVTOiBDSEVDS0VEIGFuZCBBUFBMSUVELgorIC0gVGhl cmUgYXJlIGZpdmUgYWN0aW9ucyAoYWthIGNvbW1hbmRzKTogQ0hFQ0ssIEFQUExZLCBSRVBMQUNF LCBSRVZFUlQsIGFuZCBVTkxPQUQuCisKK1RoZSBzdGF0ZSB0cmFuc2l0aW9uIHRhYmxlIG9mIHZh bGlkIHN0YXRlcyBhbmQgYWN0aW9uIHN0YXRlczoKKworPHByZT4KKworKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsK K3wgQUNUSU9OICB8IEN1cnJlbnQgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgfCBO ZXh0IFNUQVRFOiAgICB8Cit8IEFDVElPTiAgfCBTVEFURSAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHxDSEVDS0VEfEFQUExJRUQgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgQ0hFQ0sg ICB8IENIRUNLRUQgfCBDaGVjayBwYXlsb2FkIChvbmNlIG1vcmUsIG5vKSAgfCAgIHggICB8ICAg ICAgICB8Cit8ICAgICAgICAgfCAgICAgICAgIHwgZXJyb3JzKSAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgfCAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgQ0hFQ0sgICB8IENIRUNL RUQgfCBDaGVjayBwYXlsb2FkIChvbmNlIG1vcmUsIHdpdGggfCAgICAgICB8ICAgICAgICB8Cit8 ICAgICAgICAgfCAgICAgICAgIHwgZXJyb3JzKSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgfCAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgVU5MT0FEICB8IENIRUNLRUQgfCBVbmxv YWQgcGF5bG9hZC4gQWx3YXlzIHdvcmtzLiAgfCAgICAgICB8ICAgICAgICB8Cit8ICAgICAgICAg fCAgICAgICAgIHwgTm8gbmV4dCBzdGF0ZXMuICAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAg ICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgQVBQTFkgICB8IENIRUNLRUQgfCBBcHBseSBwYXlsb2Fk IChzdWNjZXNzKS4gICAgICAgfCAgICAgICB8ICAgeCAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBB UFBMWSAgIHwgQ0hFQ0tFRCB8IEFwcGx5IHBheWxvYWQgKGVycm9yfHRpbWVvdXQpICB8ICAgeCAg IHwgICAgICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IFJFUExBQ0UgfCBDSEVDS0VEIHwgUmV2ZXJ0 IHBheWxvYWRzIGFuZCBhcHBseSBuZXcgIHwgICAgICAgfCAgIHggICAgfAorfCAgICAgICAgIHwg ICAgICAgICB8IHBheWxvYWQgd2l0aCBzdWNjZXNzLiAgICAgICAgICB8ICAgICAgIHwgICAgICAg IHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0rLS0tLS0tLS0rCit8IFJFUExBQ0UgfCBDSEVDS0VEIHwgUmV2ZXJ0IHBheWxvYWRz IGFuZCBhcHBseSBuZXcgIHwgICB4ICAgfCAgICAgICAgfAorfCAgICAgICAgIHwgICAgICAgICB8 IHBheWxvYWQgd2l0aCBlcnJvci4gICAgICAgICAgICB8ICAgICAgIHwgICAgICAgIHwKKystLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0rCit8IFJFVkVSVCAgfCBBUFBMSUVEIHwgUmV2ZXJ0IHBheWxvYWQgKHN1Y2Nlc3Mp LiAgICAgIHwgICB4ICAgfCAgICAgICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKK3wgUkVWRVJUICB8IEFQ UExJRUQgfCBSZXZlcnQgcGF5bG9hZCAoZXJyb3J8dGltZW91dCkgfCAgICAgICB8ICAgeCAgICB8 CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tKy0tLS0tLS0tKworPC9wcmU+CisKK0FsbCB0aGUgb3RoZXIgc3RhdGUgdHJhbnNpdGlv bnMgYXJlIGludmFsaWQuCisKKyMjIFNlcXVlbmNlIG9mIGV2ZW50cy4KKworVGhlIG5vcm1hbCBz ZXF1ZW5jZSBvZiBldmVudHMgaXMgdG86CisKKyAxLiAqWEVOX1NZU0NUTF9YU1BMSUNFX1VQTE9B RCogdG8gdXBsb2FkIHRoZSBwYXlsb2FkLiBJZiB0aGVyZSBhcmUgZXJyb3JzICpTVE9QKiBoZXJl LgorIDIuICpYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKiB0byBjaGVjayB0aGUgYC0+cmNgLiBJZiAq LVhFTl9FQUdBSU4qIHNwaW4uIElmIHplcm8gZ28gdG8gbmV4dCBzdGVwLgorIDMuICpYRU5fU1lT Q1RMX1hTUExJQ0VfQUNUSU9OKiB3aXRoICpYU1BMSUNFX0FDVElPTl9BUFBMWSogdG8gYXBwbHkg dGhlIHBhdGNoLgorIDQuICpYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKiB0byBjaGVjayB0aGUgYC0+ cmNgLiBJZiBpbiAqLVhFTl9FQUdBSU4qIHNwaW4uIElmIHplcm8gZXhpdCB3aXRoIHN1Y2Nlc3Mu CisKKworIyMgQWRkZW5kdW0KKworSW1wbGVtZW50YXRpb24gcXVpcmtzIHNob3VsZCBub3QgYmUg ZGlzY3Vzc2VkIGluIGEgZGVzaWduIGRvY3VtZW50LgorCitIb3dldmVyIHRoZXNlIG9ic2VydmF0 aW9ucyBjYW4gcHJvdmlkZSBhaWQgd2hlbiBkZXZlbG9waW5nIGFnYWluc3QgdGhpcworZG9jdW1l bnQuCisKKworIyMjIEFsdGVybmF0aXZlIGFzc2VtYmxlcgorCitBbHRlcm5hdGl2ZSBhc3NlbWJs ZXIgaXMgYSBtZWNoYW5pc20gdG8gdXNlIGRpZmZlcmVudCBpbnN0cnVjdGlvbnMgZGVwZW5kaW5n CitvbiB3aGF0IHRoZSBDUFUgc3VwcG9ydHMuIFRoaXMgaXMgZG9uZSBieSBwcm92aWRpbmcgbXVs dGlwbGUgc3RyZWFtcyBvZiBjb2RlCit0aGF0IGNhbiBiZSBwYXRjaGVkIGluIC0gb3IgaWYgdGhl IENQVSBkb2VzIG5vdCBzdXBwb3J0IGl0IC0gcGFkZGVkIHdpdGgKK2Bub3BgIG9wZXJhdGlvbnMu IFRoZSBhbHRlcm5hdGl2ZSBhc3NlbWJsZXIgbWFjcm9zIGNhdXNlIHRoZSBjb21waWxlciB0bwor ZXhwYW5kIHRoZSBjb2RlIHRvIHBsYWNlIGEgbW9zdCBnZW5lcmljIGNvZGUgaW4gcGxhY2UgLSBl bWl0IGEgc3BlY2lhbAorRUxGIC5zZWN0aW9uIGhlYWRlciB0byB0YWcgdGhpcyBsb2NhdGlvbi4g RHVyaW5nIHJ1bi10aW1lIHRoZSBoeXBlcnZpc29yCitjYW4gbGVhdmUgdGhlIGFyZWFzIGFsb25l IG9yIHBhdGNoIHRoZW0gd2l0aCBhbiBiZXR0ZXIgc3VpdGVkIG9wY29kZXMuCisKK05vdGUgdGhh dCBwYXRjaGluZyBmdW5jdGlvbnMgdGhhdCBjb3B5IHRvIG9yIGZyb20gZ3Vlc3QgbWVtb3J5IHJl cXVpcmVzCit0byBzdXBwb3J0IGFsdGVybmF0aXZlIHN1cHBvcnQuIEZvciBleGFtcGxlIHRoaXMg Y2FuIGJlIGR1ZSB0byBTTUFQCisoc3BlY2lmaWNhbGx5ICpzdGFjKiBhbmQgKmNsYWMqIG9wZXJh dGlvbnMpIHdoaWNoIGlzIGVuYWJsZWQgb24gQnJvYWR3ZWxsCithbmQgbGF0ZXIgYXJjaGl0ZWN0 dXJlcy4gSXQgbWF5IGJlIHJlbGF0ZWQgdG8gb3RoZXIgYWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25z LgorCisjIyMgV2hlbiB0byBwYXRjaAorCitEdXJpbmcgdGhlIGRpc2N1c3Npb24gb24gdGhlIGRl c2lnbiB0d28gY2FuZGlkYXRlcyBidWJibGVkIHdoZXJlCit0aGUgY2FsbCBzdGFjayBmb3IgZWFj aCBDUFUgd291bGQgYmUgZGV0ZXJtaW5pc3RpYy4gVGhpcyB3b3VsZAorbWluaW1pemUgdGhlIGNo YW5jZSBvZiB0aGUgcGF0Y2ggbm90IGJlaW5nIGFwcGxpZWQgZHVlIHRvIHNhZmV0eQorY2hlY2tz IGZhaWxpbmcuIFNhZmV0eSBjaGVja3Mgc3VjaCBhcyBub3QgcGF0Y2hpbmcgY29kZSB3aGljaAor aXMgb24gdGhlIHN0YWNrIC0gd2hpY2ggY2FuIGxlYWQgdG8gY29ycnVwdGlvbi4KKworIyMjIyBS ZW5kZXp2b3VzIGNvZGUgaW5zdGVhZCBvZiBzdG9wX21hY2hpbmUgZm9yIHBhdGNoaW5nCisKK1Ro ZSBoeXBlcnZpc29yJ3MgdGltZSByZW5kZXp2b3VzIGNvZGUgcnVucyBzeW5jaHJvbm91c2x5IGFj cm9zcyBhbGwgQ1BVcworZXZlcnkgc2Vjb25kLiBVc2luZyB0aGUgc3RvcF9tYWNoaW5lIHRvIHBh dGNoIGNhbiBzdGFsbCB0aGUgdGltZSByZW5kZXp2b3VzCitjb2RlIGFuZCByZXN1bHQgaW4gTk1J LiBBcyBzdWNoIGhhdmluZyB0aGUgcGF0Y2hpbmcgYmUgZG9uZSBhdCB0aGUgdGFpbAorb2YgcmVu ZGV6dm91cyBjb2RlIHNob3VsZCBhdm9pZCB0aGlzIHByb2JsZW0uCisKK0hvd2V2ZXIgdGhlIGVu dHJhbmNlIHBvaW50IGZvciB0aGF0IGNvZGUgaXMKK2RvX3NvZnRpcnEtPnRpbWVyX3NvZnRpcnFf YWN0aW9uLT50aW1lX2NhbGlicmF0aW9uCit3aGljaCBlbmRzIHVwIGNhbGxpbmcgb25fc2VsZWN0 ZWRfY3B1cyBvbiByZW1vdGUgQ1BVcy4KKworVGhlIHJlbW90ZSBDUFVzIHJlY2VpdmUgQ0FMTF9G VU5DVElPTl9WRUNUT1IgSVBJIGFuZCBleGVjdXRlIHRoZQorZGVzaXJlZCBmdW5jdGlvbi4KKwor IyMjIyBCZWZvcmUgZW50ZXJpbmcgdGhlIGd1ZXN0IGNvZGUuCisKK0JlZm9yZSB3ZSBjYWxsIFZN WFJlc3VtZSB3ZSBjaGVjayB3aGV0aGVyIGFueSBzb2Z0IElSUXMgbmVlZCB0byBiZSBleGVjdXRl ZC4KK1RoaXMgaXMgYSBnb29kIHNwb3QgYmVjYXVzZSBhbGwgWGVuIHN0YWNrcyBhcmUgZWZmZWN0 aXZlbHkgZW1wdHkgYXQKK3RoYXQgcG9pbnQuCisKK1RvIHJhbmRlenZvdXMgYWxsIHRoZSBDUFVz IGFuIGJhcnJpZXIgd2l0aCBhbiBtYXhpbXVtIHRpbWVvdXQgKHdoaWNoCitjb3VsZCBiZSBhZGp1 c3RlZCksIGNvbWJpbmVkIHdpdGggZm9yY2luZyBhbGwgb3RoZXIgQ1BVcyB0aHJvdWdoIHRoZQor aHlwZXJ2aXNvciB3aXRoIElQSXMsIGNhbiBiZSB1dGlsaXplZCB0byBleGVjdXRlIGxvY2tzdGVw IGluc3RydWN0aW9ucworb24gYWxsIENQVXMuCisKK1RoZSBhcHByb2FjaCBpcyBzaW1pbGFyIGlu IGNvbmNlcHQgdG8gc3RvcF9tYWNoaW5lIGFuZCB0aGUgdGltZSByZW5kZXp2b3VzCitidXQgaXMg dGltZS1ib3VuZC4gSG93ZXZlciB0aGUgbG9jYWwgQ1BVIHN0YWNrIGlzIG11Y2ggc2hvcnRlciBh bmQKK2EgbG90IG1vcmUgZGV0ZXJtaW5pc3RpYy4KKworVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiB0 aGUgWGVuIFByb2plY3QgaHlwZXJ2aXNvci4KKworIyMjIENvbXBpbGluZyB0aGUgaHlwZXJ2aXNv ciBjb2RlCisKK0hvdHBhdGNoIGdlbmVyYXRpb24gb2Z0ZW4gcmVxdWlyZXMgc3VwcG9ydCBmb3Ig Y29tcGlsaW5nIHRoZSB0YXJnZXQKK3dpdGggLWZmdW5jdGlvbi1zZWN0aW9ucyAvIC1mZGF0YS1z ZWN0aW9ucy4gIENoYW5nZXMgd291bGQgaGF2ZSB0bworYmUgZG9uZSB0byB0aGUgbGlua2VyIHNj cmlwdHMgdG8gc3VwcG9ydCB0aGlzLgorCisjIyMgR2VuZXJhdGlvbiBvZiB4U3BsaWNlIEVMRiBw YXlsb2FkcworCitUaGUgZGVzaWduIG9mIHRoYXQgaXMgbm90IGRpc2N1c3NlZCBpbiB0aGlzIGRl c2lnbi4KKworVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBhIHNlcGVyYXRlIHRvb2wgd2hpY2ggbGl2 ZXMgaW4gYSBzZXBlcmF0ZQorR0lUIHJlcG8uCisKK0N1cnJlbnRseSBpdCByZXNpZGVzIGF0IGh0 dHBzOi8vZ2l0aHViLmNvbS9yb3NzbGFnZXJ3YWxsL3hzcGxpY2UtYnVpbGQKKworIyMjIEV4Y2Vw dGlvbiB0YWJsZXMgYW5kIHN5bWJvbCB0YWJsZXMgZ3Jvd3RoCisKK1dlIG1heSBuZWVkIHN1cHBv cnQgZm9yIGFkYXB0aW5nIG9yIGF1Z21lbnRpbmcgZXhjZXB0aW9uIHRhYmxlcyBpZgorcGF0Y2hp bmcgc3VjaCBjb2RlLiAgSG90cGF0Y2hlcyBtYXkgbmVlZCB0byBicmluZyB0aGVpciBvd24gc21h bGwKK2V4Y2VwdGlvbiB0YWJsZXMgKHNpbWlsYXIgdG8gaG93IExpbnV4IG1vZHVsZXMgc3VwcG9y dCB0aGlzKS4KKworSWYgc3VwcG9ydGluZyBob3RwYXRjaGVzIHRoYXQgaW50cm9kdWNlIGFkZGl0 aW9uYWwgZXhjZXB0aW9uLWxvY2F0aW9ucworaXMgbm90IGltcG9ydGFudCwgb25lIGNvdWxkIGFs c28gY2hhbmdlIHRoZSBleGNlcHRpb24gdGFibGUgaW4tcGxhY2UKK2FuZCByZW9yZGVyIGl0IGFm dGVyd2FyZHMuCisKK0FzIGZvdW5kIGFsbW9zdCBldmVyeSBwYXRjaCAoWFNBKSB0byBhIG5vbi10 cml2aWFsIGZ1bmN0aW9uIHJlcXVpcmVzCithZGRpdGlvbmFsIGVudHJpZXMgaW4gdGhlIGV4Y2Vw dGlvbiB0YWJsZSBhbmQvb3IgdGhlIGJ1ZyBmcmFtZXMuCisKK1RoaXMgaXMgaW1wbGVtZW50ZWQg aW4gdGhlIFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisKKyMjIyAucm9kYXRhIHNlY3Rpb25zCisK K1RoZSBwYXRjaGluZyBtaWdodCByZXF1aXJlIHN0cmluZ3MgdG8gYmUgdXBkYXRlZCBhcyB3ZWxs LiBBcyBzdWNoIHdlIG11c3QgYmUKK2Fsc28gYWJsZSB0byBwYXRjaCB0aGUgc3RyaW5ncyBhcyBu ZWVkZWQuIFRoaXMgc291bmRzIHNpbXBsZSAtIGJ1dCB0aGUgY29tcGlsZXIKK2hhcyBhIGhhYml0 IG9mIGNvYWxlc2Npbmcgc3RyaW5ncyB0aGF0IGFyZSB0aGUgc2FtZSAtIHdoaWNoIG1lYW5zIGlm IHdlIGluLXBsYWNlCithbHRlciB0aGUgc3RyaW5ncyAtIG90aGVyIHVzZXJzIHdpbGwgYmUgaW5h ZHZlcnRlbnRseSBhZmZlY3RlZCBhcyB3ZWxsLgorCitUaGlzIGlzIGFsc28gd2hlcmUgcG9pbnRl cnMgdG8gZnVuY3Rpb25zIGxpdmUgLSBhbmQgd2UgbWF5IG5lZWQgdG8gcGF0Y2ggdGhpcworYXMg d2VsbC4gQW5kIHN3aXRjaC1zdHlsZSBqdW1wIHRhYmxlcy4KKworVG8gZ3VhcmQgYWdhaW5zdCB0 aGF0IHdlIG11c3QgYmUgcHJlcGFyZWQgdG8gZG8gcGF0Y2hpbmcgc2ltaWxhciB0bwordHJhbXBv bGluZSBwYXRjaGluZyBvciBpbi1saW5lIGRlcGVuZGluZyBvbiB0aGUgZmxhdm91ci4gSWYgd2Ug Y2FuCitkbyBpbi1saW5lIHBhdGNoaW5nIHdlIHdvdWxkIG5lZWQgdG86CisKKyAqIGFsdGVyIGAu cm9kYXRhYCB0byBiZSB3cml0ZWFibGUuCisgKiBpbmxpbmUgcGF0Y2guCisgKiBhbHRlciBgLnJv ZGF0YWAgdG8gYmUgcmVhZC1vbmx5LgorCitJZiBhcmUgZG9pbmcgdHJhbXBvbGluZSBwYXRjaGlu ZyB3ZSB3b3VsZCBuZWVkIHRvOgorCisgKiBhbGxvY2F0ZSBhIG5ldyBtZW1vcnkgbG9jYXRpb24g Zm9yIHRoZSBzdHJpbmcuCisgKiBhbGwgbG9jYXRpb25zIHdoaWNoIHVzZSB0aGlzIHN0cmluZyB3 aWxsIGhhdmUgdG8gYmUgdXBkYXRlZCB0byB1c2UgdGhlCisgICBvZmZzZXQgdG8gdGhlIHN0cmlu Zy4KKyAqIG1hcmsgdGhlIHJlZ2lvbiBSTyB3aGVuIHdlIGFyZSBkb25lLgorCitUaGUgdHJhbXBv bGluZSBwYXRjaGluZyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgWGVuIFByb2plY3QgaHlwZXJ2aXNv ci4KKworIyMjIC5ic3MgYW5kIC5kYXRhIHNlY3Rpb25zLgorCitJbiBwbGFjZSBwYXRjaGluZyB3 cml0YWJsZSBkYXRhIGlzIG5vdCBzdWl0YWJsZSBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgc2hvdWxk IGJlIGRvbmUKK2RlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBkYXRhLiBBcyBzdWNo IGl0IHNob3VsZCBub3QgYmUgYXR0ZW1wdGVkLgorCitIb3dldmVyLCBmdW5jdGlvbnMgd2hpY2gg YXJlIGJlaW5nIHBhdGNoZWQgY2FuIGJyaW5nIGluIGNoYW5nZXMgdG8gc3RyaW5ncworKC5kYXRh IG9yIC5yb2RhdGEgc2VjdGlvbiBjaGFuZ2VzKSwgb3IgZXZlbiB0byAuYnNzIHNlY3Rpb25zLgor CitBcyBzdWNoIHRoZSBFTEYgcGF5bG9hZCBjYW4gaW50cm9kdWNlIG5ldyAucm9kYXRhLCAuYnNz LCBhbmQgLmRhdGEgc2VjdGlvbnMuCitQYXRjaGluZyBpbiB0aGUgbmV3IGZ1bmN0aW9uIHdpbGwg ZW5kIHVwIGFsc28gcGF0Y2hpbmcgaW4gdGhlIG5ldyAucm9kYXRhCitzZWN0aW9uIGFuZCB0aGUg bmV3IGZ1bmN0aW9uIHdpbGwgcmVmZXJlbmNlIHRoZSBuZXcgc3RyaW5nIGluIHRoZSBuZXcKKy5y b2RhdGEgc2VjdGlvbi4KKworVGhpcyBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgWGVuIFByb2plY3Qg aHlwZXJ2aXNvci4KKworIyMjIFNlY3VyaXR5CisKK09ubHkgdGhlIHByaXZpbGVnZWQgZG9tYWlu IHNob3VsZCBiZSBhbGxvd2VkIHRvIGRvIHRoaXMgb3BlcmF0aW9uLgorCisKKyMgTm90IFlldCBE b25lCisKK1RoaXMgaXMgZm9yIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgb2YgeFNwbGljZS4KKworIyMg VE9ETyBHb2FscworCitUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBhbHNvIGhhdmUgYSBtZWNoYW5p c20gZm9yIChpbiBubyBwYXJ0aWN1bGFyIG9yZGVyKToKKworICogQmUgYWJsZSB0byBsb29rdXAg aW4gdGhlIFhlbiBoeXBlcnZpc29yIHRoZSBzeW1ib2wgbmFtZXMgb2YgZnVuY3Rpb25zIGZyb20g dGhlCisgICBFTEYgcGF5bG9hZC4gKEVpdGhlciBhcyBgc3ltYm9sYCBvciBgc3ltYm9sYCtgb2Zm c2V0YCkuCisgKiBCZSBhYmxlIHRvIHBhdGNoIC5yb2RhdGEsIC5ic3MsIGFuZCAuZGF0YSBzZWN0 aW9ucy4KKyAqIERlYWwgd2l0aCBOTUkvTUNFIGNoZWNrcyBkdXJpbmcgcGF0Y2hpbmcgaW5zdGVh ZCBvZiBpZ25vcmluZyB0aGVtLgorICogRnVydGhlciBzYWZldHkgY2hlY2tzIChibGFja2xpc3Qg b2Ygd2hpY2ggZnVuY3Rpb25zIGNhbm5vdCBiZSBwYXRjaGVkLCBjaGVjaworICAgdGhlIHN0YWNr LCBtYWtlIHN1cmUgdGhlIHBheWxvYWQgaXMgYnVpbHQgd2l0aCBzYW1lIGNvbXBpbGVyIGFzIGh5 cGVydmlzb3IpLgorICAgU3BlY2lmaWNhbGx5IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeFNw bGljZSBjb2RlcGF0aHMgY2Fubm90IGJlIHBhdGNoZWQuCisgKiBOT1Agb3V0IHRoZSBjb2RlIHNl cXVlbmNlIGlmIGBuZXdfc2l6ZWAgaXMgemVyby4KKyAqIERlYWwgd2l0aCBvdGhlciByZWxvY2F0 aW9uIHR5cGVzOiAgUl9YODZfNjRfWzgsMTYsMzIsMzJTXSwgUl9YODZfNjRfUENbOCwxNiw2NF0K KyAgIGluIHBheWxvYWQgZmlsZS4KKyAqIEFuIGRlcGVuZGVuY3kgbWVjaGFuaXNtIGZvciB0aGUg cGF5bG9hZHMuIFRvIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGxvYWQ6CisgICAgLSBUaGUgYXBw cm9waWF0ZSBwYXlsb2FkLiBUbyB2ZXJpZnkgdGhhdCBwYXlsb2FkIGlzIGJ1aWx0IGFnYWluc3Qg dGhlCisgICAgICBoeXBlcnZpc29yLiBUaGlzIGNhbiBiZSBkb25lIHZpYSB0aGUgYGJ1aWxkLWlk YAorICAgICAgb3IgdmlhIHByb3ZpZGluZyBhbiBjb3B5IG9mIHRoZSBvbGQgY29kZSAtIHNvIHRo YXQgdGhlIGh5cGVydmlzb3IgY2FuCisgICAgICAgdmVyaWZ5IGl0IGFnYWluc3QgdGhlIGNvZGUg aW4gbWVtb3J5LgorICAgIC0gVG8gY29uc3RydWN0IGFuIGFwcHJvcGlhdGUgb3JkZXIgb2YgcGF5 bG9hZHMgdG8gbG9hZCBpbiBjYXNlIHRoZXkKKyAgICAgIGRlcGVuZCBvbiBlYWNoIG90aGVyLgor CisjIyMgSGFuZGxlIGlubGluZWQgX19MSU5FX18KKworVGhpcyBwcm9ibGVtIGlzIHJlbGF0ZWQg dG8gaG90cGF0Y2ggY29uc3RydWN0aW9uCithbmQgcG90ZW50aWFsbHkgaGFzIGluZmx1ZW5jZSBv biB0aGUgZGVzaWduIG9mIHRoZSBob3RwYXRjaGluZworaW5mcmFzdHJ1Y3R1cmUgaW4gWGVuLgor CitGb3IgZXhhbXBsZToKKworV2UgaGF2ZSBmaWxlMS5jIHdpdGggZnVuY3Rpb25zIGYxIGFuZCBm MiAoaW4gdGhhdCBvcmRlcikuICBmMiBjb250YWlucyBhCitCVUcoKSAob3IgV0FSTigpKSBtYWNy byBhbmQgYXQgdGhhdCBwb2ludCBlbWJlZHMgdGhlIHNvdXJjZSBsaW5lIG51bWJlcgoraW50byB0 aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGYyLgorCitOb3cgd2Ugd2FudCB0byBob3RwYXRjaCBmMSBh bmQgdGhlIGhvdHBhdGNoIHNvdXJjZS1jb2RlIHBhdGNoIGFkZHMgMgorbGluZXMgdG8gZjEgYW5k IGFzIGEgY29uc2VxdWVuY2Ugc2hpZnRzIG91dCBmMiBieSB0d28gbGluZXMuICBUaGUgbmV3bHkK K2NvbnN0cnVjdGVkIGZpbGUxLm8gd2lsbCBub3cgY29udGFpbiBkaWZmZXJlbmNlcyBpbiBib3Ro IGJpbmFyeQorZnVuY3Rpb25zIGYxIChiZWNhdXNlIHdlIGFjdHVhbGx5IGNoYW5nZWQgaXQgd2l0 aCB0aGUgYXBwbGllZCBwYXRjaCkgYW5kCitmMiAoYmVjYXVzZSB0aGUgY29udGFpbmVkIEJVRyBt YWNybyBlbWJlZHMgdGhlIG5ldyBsaW5lIG51bWJlcikuCisKK1dpdGhvdXQgYWRkaXRpb25hbCBp bmZvcm1hdGlvbiwgYW4gYWxnb3JpdGhtIGNvbXBhcmluZyBmaWxlMS5vIGJlZm9yZQorYW5kIGFm dGVyIGhvdHBhdGNoIGFwcGxpY2F0aW9uIHdpbGwgZGV0ZXJtaW5lIGJvdGggZnVuY3Rpb25zIHRv IGJlCitjaGFuZ2VkIGFuZCB3aWxsIGhhdmUgdG8gaW5jbHVkZSBib3RoIGludG8gdGhlIGJpbmFy eSBob3RwYXRjaC4KKworT3B0aW9uczoKKworMS4gVHJhbnNmb3JtIHNvdXJjZSBjb2RlIHBhdGNo ZXMgZm9yIGhvdHBhdGNoZXMgdG8gYmUgbGluZS1uZXV0cmFsIGZvcgorICAgZWFjaCBjaHVuay4g IFRoaXMgY2FuIGJlIGRvbmUgaW4gYWxtb3N0IGFsbCBjYXNlcyB3aXRoIGVpdGhlcgorICAgcmVm b3JtYXR0aW5nIG9mIHRoZSBzb3VyY2UgY29kZSBvciBieSBpbnRyb2R1Y2luZyBhcnRpZmljaWFs CisgICBwcmVwcm9jZXNzb3IgIiNsaW5lIG4iIGRpcmVjdGl2ZXMgdG8gYWRqdXN0IGZvciB0aGUg aW50cm9kdWNlZAorICAgZGlmZmVyZW5jZXMuCisKKyAgIFRoaXMgYXBwcm9hY2ggaXMgbG93LXRl Y2ggYW5kIHNpbXBsZS4gIFBvdGVudGlhbGx5IGdlbmVyYXRlZAorICAgYmFja3RyYWNlcyBhbmQg ZXhpc3RpbmcgZGVidWcgaW5mb3JtYXRpb24gcmVmZXJzIHRvIHRoZSBvcmlnaW5hbAorICAgYnVp bGQgYW5kIGRvZXMgbm90IHJlZmxlY3QgaG90cGF0Y2hpbmcgc3RhdGUgZXhjZXB0IGZvciBhY3R1 YWxseQorICAgaG90cGF0Y2hlZCBmdW5jdGlvbnMgYnV0IHNob3VsZCBiZSBtb3N0bHkgY29ycmVj dC4KKworMi4gSWdub3JpbmcgdGhlIHByb2JsZW0gYW5kIGxpdmluZyB3aXRoIGFydGlmaWNpYWxs eSBsYXJnZSBob3RwYXRjaGVzCisgICB0aGF0IHVubmVjZXNzYXJpbHkgcGF0Y2ggbWFueSBmdW5j dGlvbnMuCisKKyAgIFRoaXMgYXBwcm9hY2ggbWlnaHQgbGVhZCB0byBzb21lIHZlcnkgbGFyZ2Ug aG90cGF0Y2hlcyBkZXBlbmRpbmcgb24KKyAgIGNvbnRlbnQgb2Ygc3BlY2lmaWMgc291cmNlIGZp bGUuICBJdCBtYXkgYWxzbyB0cmlnZ2VyIHB1bGxpbmcgaW4KKyAgIGZ1bmN0aW9ucyBpbnRvIHRo ZSBob3RwYXRjaCB0aGF0IGNhbm5vdCByZWFzb25hYmxlIGJlIGhvdHBhdGNoZWQgZHVlCisgICB0 byBsaW1pdGF0aW9ucyBvZiBhIGhvdHBhdGNoaW5nIGZyYW1ld29yayAoaW5pdC1zZWN0aW9ucywg cGFydHMgb2YKKyAgIHRoZSBob3RwYXRjaGluZyBmcmFtZXdvcmsgaXRzZWxmLCAuLi4pIGFuZCBt YXkgdGhlcmVieSBwcmV2ZW50IHVzCisgICBmcm9tIHBhdGNoaW5nIGEgc3BlY2lmaWMgcHJvYmxl bS4KKworICAgVGhlIGRlY2lzaW9uIGJldHdlZW4gMS4gYW5kIDIuIGNhbiBiZSBtYWRlIG9uIGEg cGF0Y2gtLWJ5LXBhdGNoCisgICBiYXNpcy4KKworMy4gSW50cm9kdWNpbmcgYW4gaW5kaXJlY3Rp b24gdGFibGUgZm9yIHN0b3JpbmcgbGluZSBudW1iZXJzIGFuZAorICAgdHJlYXRpbmcgdGhhdCBz cGVjaWFsbHkgZm9yIGJpbmFyeSBkaWZmaW5nLiBMaW51eCBtYXkgZm9sbG93CisgICB0aGlzIGFw cHJvYWNoLgorCisgICBXZSBtaWdodCBlaXRoZXIgdXNlIHRoaXMgaW5kaXJlY3Rpb24gdGFibGUg Zm9yIHJ1bnRpbWUgdXNlIGFuZCBwYXRjaAorICAgdGhhdCB3aXRoIGVhY2ggaG90cGF0Y2ggKHNp bWlsYXJseSB0byBleGNlcHRpb24gdGFibGVzKSBvciB3ZSBtaWdodAorICAgcHVyZWx5IHVzZSBp dCB3aGVuIGJ1aWxkaW5nIGhvdHBhdGNoZXMgdG8gaWdub3JlIGZ1bmN0aW9ucyB0aGF0IG9ubHkK KyAgIGRpZmZlciBhdCBleGFjdGx5IHRoZSBsb2NhdGlvbiB3aGVyZSBhIGxpbmUtbnVtYmVyIGlz IGVtYmVkZGVkLgorCitGb3IgQlVHKCksIFdBUk4oKSwgZXRjLiwgdGhlIGxpbmUgbnVtYmVyIGlz IGVtYmVkZGVkIGludG8gdGhlIGJ1ZyBmcmFtZSwgbm90Cit0aGUgZnVuY3Rpb24gaXRzZWxmLgor CitTaW1pbGFyIGNvbnNpZGVyYXRpb25zIGFyZSB0cnVlIHRvIGEgbGVzc2VyIGV4dGVudCBmb3Ig X19GSUxFX18sIGJ1dCBpdAorY291bGQgYmUgYXJndWVkIHRoYXQgZmlsZSByZW5hbWluZyBzaG91 bGQgYmUgZG9uZSBvdXRzaWRlIG9mIGhvdHBhdGNoZXMuCisKKyMjIyB4U3BsaWNlIGludGVyZGVw ZW5kZW5jaWVzCisKK3hTcGxpY2UgcGF0Y2hlcyBpbnRlcmRlcGVuZGVuY2llcyBhcmUgdHJpY2t5 LgorCitUaGVyZSBhcmUgdGhlIHdheXMgdGhpcyBjYW4gYmUgYWRkcmVzc2VkOgorICogQSBzaW5n bGUgbGFyZ2UgcGF0Y2ggdGhhdCBzdWJzdW1lcyBhbmQgcmVwbGFjZXMgYWxsIHByZXZpb3VzIG9u ZXMuCisgICBPdmVyIHRoZSBsaWZlLXRpbWUgb2YgcGF0Y2hpbmcgdGhlIGh5cGVydmlzb3IgdGhp cyBsYXJnZSBwYXRjaAorICAgZ3Jvd3MgdG8gYWNjdW11bGF0ZSBhbGwgdGhlIGNvZGUgY2hhbmdl cy4KKyAqIEhvdHBhdGNoIHN0YWNrIC0gd2hlcmUgYW4gbWVjaGFuaXNtIGV4aXN0cyB0aGF0IGxv YWRzIHRoZSBob3RwYXRjaGVzCisgICBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IHdlcmUgYnVpbHQg aW4uIFdlIHdvdWxkIG5lZWQgYW4gYnVpbGQtaWQKKyAgIG9mIHRoZSBoeXBldmlzb3IgdG8gbWFr ZSBzdXJlIHRoZSBob3QtcGF0Y2hlcyBhcmUgYnVpbGQgYWdhaW5zdCB0aGUKKyAgIGNvcnJlY3Qg YnVpbGQuCisgKiBQYXlsb2FkIGNvbnRhaW5pbmcgdGhlIG9sZCBjb2RlIHRvIGNoZWNrIGFnYWlu c3QgdGhhdC4gVGhhdCBhbGxvd3MKKyAgIHRoZSBob3RwYXRjaGVzIHRvIGJlIGxvYWRlZCBpbmRl cGVkZW50bHkgKGlmIHRoZXkgZG9uJ3Qgb3ZlcmxhcCkgLSBvcgorICAgaWYgdGhlIG9sZCBjb2Rl IGFsc28gY29udGFpbnN0IHByZXZpb3VzbHkgcGF0Y2hlZCBjb2RlIC0gZXZlbiBpZiB0aGV5Cisg ICBvdmVybGFwLgorCitUaGUgZGlzYWR2YW50YWdlIG9mIHRoZSBmaXJzdCBsYXJnZSBwYXRjaCBp cyB0aGF0IGl0IGNhbiBncm93IG92ZXIKK3RpbWUgYW5kIG5vdCBwcm92aWRlIGFuIGJpc2VjdGlv biBtZWNoYW5pc20gdG8gaWRlbnRpZnkgZmF1bHR5IHBhdGNoZXMuCisKK1RoZSBob3QtcGF0Y2gg c3RhY2sgcHV0cyBzdHJpY3RzIHJlcXVpcmVtZW50cyBvbiB0aGUgb3JkZXIgb2YgdGhlIHBhdGNo ZXMKK2JlaW5nIGxvYWRlZCBhbmQgcmVxdWlyZXMgYW4gaHlwZXJ2aXNvciBidWlsZC1pZCB0byBt YXRjaCBhZ2FpbnN0LgorCitUaGUgb2xkIGNvZGUgYWxsb3dzIG11Y2ggbW9yZSBmbGV4aWJpbGl0 eSBhbmQgYW4gYWRkaXRpb25hbCBndWFyZCwKK2J1dCBpcyBtb3JlIGNvbXBsZXggdG8gaW1wbGVt ZW50LgorCisjIyBTaWduYXR1cmUgY2hlY2tpbmcgcmVxdWlyZW1lbnRzLgorCitUaGUgc2lnbmF0 dXJlIGNoZWNraW5nIHJlcXVpcmVzIHRoYXQgdGhlIGxheW91dCBvZiB0aGUgZGF0YSBpbiBtZW1v cnkKKyoqTVVTVCoqIGJlIHNhbWUgZm9yIHNpZ25hdHVyZSB0byBiZSB2ZXJpZmllZC4gVGhpcyBt ZWFucyB0aGF0IHRoZSBwYXlsb2FkCitkYXRhIGxheW91dCBpbiBFTEYgZm9ybWF0ICoqTVVTVCoq IG1hdGNoIHdoYXQgdGhlIGh5cGVydmlzb3Igd291bGQgYmUKK2V4cGVjdGluZyBzdWNoIHRoYXQg aXQgY2FuIHByb3Blcmx5IGRvIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisKK1RoZSBzaWduYXR1 cmUgaXMgYmFzZWQgb24gdGhlIGFsbCBvZiB0aGUgcGF5bG9hZHMgY29udGludW91c2x5IGxhaWQg b3V0CitpbiBtZW1vcnkuIFRoZSBzaWduYXR1cmUgaXMgdG8gYmUgYXBwZW5kZWQgYXQgdGhlIGVu ZCBvZiB0aGUgRUxGIHBheWxvYWQKK3ByZWZpeGVkIHdpdGggdGhlIHN0cmluZyAnfk1vZHVsZSBz aWduYXR1cmUgYXBwZW5kZWR+XG4nLCBmb2xsb3dlZCBieQorYW4gc2lnbmF0dXJlIGhlYWRlciB0 aGVuIGZvbGxvd2VkIGJ5IHRoZSBzaWduYXR1cmUsIGtleSBpZGVudGlmaWVyLCBhbmQgc2lnbmVy cworbmFtZS4KKworU3BlY2lmaWNhbGx5IHRoZSBzaWduYXR1cmUgaGVhZGVyIHdvdWxkIGJlOgor Cis8cHJlPgorI2RlZmluZSBQS0VZX0FMR09fRFNBICAgICAgIDAgIAorI2RlZmluZSBQS0VZX0FM R09fUlNBICAgICAgIDEgIAorCisjZGVmaW5lIFBLRVlfSURfUEdQICAgICAgICAgMCAvKiBPcGVu UEdQIGdlbmVyYXRlZCBrZXkgSUQgKi8gIAorI2RlZmluZSBQS0VZX0lEX1g1MDkgICAgICAgIDEg LyogWC41MDkgYXJiaXRyYXJ5IHN1YmplY3RLZXlJZGVudGlmaWVyICovICAKKworI2RlZmluZSBI QVNIX0FMR09fTUQ0ICAgICAgICAgIDAgIAorI2RlZmluZSBIQVNIX0FMR09fTUQ1ICAgICAgICAg IDEgIAorI2RlZmluZSBIQVNIX0FMR09fU0hBMSAgICAgICAgIDIgIAorI2RlZmluZSBIQVNIX0FM R09fUklQRV9NRF8xNjAgIDMgIAorI2RlZmluZSBIQVNIX0FMR09fU0hBMjU2ICAgICAgIDQgIAor I2RlZmluZSBIQVNIX0FMR09fU0hBMzg0ICAgICAgIDUgIAorI2RlZmluZSBIQVNIX0FMR09fU0hB NTEyICAgICAgIDYgIAorI2RlZmluZSBIQVNIX0FMR09fU0hBMjI0ICAgICAgIDcgIAorI2RlZmlu ZSBIQVNIX0FMR09fUklQRV9NRF8xMjggIDggIAorI2RlZmluZSBIQVNIX0FMR09fUklQRV9NRF8y NTYgIDkgIAorI2RlZmluZSBIQVNIX0FMR09fUklQRV9NRF8zMjAgMTAgIAorI2RlZmluZSBIQVNI X0FMR09fV1BfMjU2ICAgICAgMTEgIAorI2RlZmluZSBIQVNIX0FMR09fV1BfMzg0ICAgICAgMTIg IAorI2RlZmluZSBIQVNIX0FMR09fV1BfNTEyICAgICAgMTMgIAorI2RlZmluZSBIQVNIX0FMR09f VEdSXzEyOCAgICAgMTQgIAorI2RlZmluZSBIQVNIX0FMR09fVEdSXzE2MCAgICAgMTUgIAorI2Rl ZmluZSBIQVNIX0FMR09fVEdSXzE5MiAgICAgMTYgIAorCisKK3N0cnVjdCBlbGZfcGF5bG9hZF9z aWduYXR1cmUgeyAgCisJdTgJYWxnbzsJCS8qIFB1YmxpYy1rZXkgY3J5cHRvIGFsZ29yaXRobSBQ S0VZX0FMR09fKi4gKi8gIAorCXU4CWhhc2g7CQkvKiBEaWdlc3QgYWxnb3JpdGhtOiBIQVNIX0FM R09fKi4gKi8gIAorCXU4CWlkX3R5cGU7CS8qIEtleSBpZGVudGlmaWVyIHR5cGUgUEtFWV9JRCou ICovICAKKwl1OAlzaWduZXJfbGVuOwkvKiBMZW5ndGggb2Ygc2lnbmVyJ3MgbmFtZSAqLyAgCisJ dTgJa2V5X2lkX2xlbjsJLyogTGVuZ3RoIG9mIGtleSBpZGVudGlmaWVyICovICAKKwl1OAlfX3Bh ZFszXTsgIAorCV9fYmUzMglzaWdfbGVuOwkvKiBMZW5ndGggb2Ygc2lnbmF0dXJlIGRhdGEgKi8g IAorfTsKKworPC9wcmU+CisoTm90ZSB0aGF0IHRoaXMgaGFzIGJlZW4gYm9ycm93ZWQgZnJvbSBM aW51eCBtb2R1bGUgc2lnbmF0dXJlIGNvZGUuKS4KKworCisjIyMgLmJzcyBhbmQgLmRhdGEgc2Vj dGlvbnMuCisKK0luIHBsYWNlIHBhdGNoaW5nIHdyaXRhYmxlIGRhdGEgaXMgbm90IHN1aXRhYmxl IGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBzaG91bGQgYmUgZG9uZQorZGVwZW5kaW5nIG9uIHRoZSBj dXJyZW50IHN0YXRlIG9mIGRhdGEuIEFzIHN1Y2ggaXQgc2hvdWxkIG5vdCBiZSBhdHRlbXB0ZWQu CisKK1RoYXQgc2FpZCB3ZSBzaG91bGQgcHJvdmlkZSBob29rIGZ1bmN0aW9ucyBzbyB0aGF0IHRo ZSBleGlzdGluZyBkYXRhCitjYW4gYmUgY2hhbmdlZCBkdXJpbmcgcGF5bG9hZCBhcHBsaWNhdGlv bi4KKworCisjIyMgSW5saW5lIHBhdGNoaW5nCisKK1RoZSBoeXBlcnZpc29yIHNob3VsZCB2ZXJp ZnkgdGhhdCB0aGUgaW4tcGxhY2UgcGF0Y2hpbmcgd291bGQgZml0IHdpdGhpbgordGhlIGNvZGUg b3IgZGF0YS4KKworIyMjIFRyYW1wb2xpbmUgKGU5IG9wY29kZSkKKworVGhlIGU5IG9wY29kZSB1 c2VkIGZvciBqbXBxIHVzZXMgYSAzMi1iaXQgc2lnbmVkIGRpc3BsYWNlbWVudC4gVGhhdCBtZWFu cword2UgYXJlIGxpbWl0ZWQgdG8gdXAgdG8gMkdCIG9mIHZpcnR1YWwgYWRkcmVzcyB0byBwbGFj ZSB0aGUgbmV3IGNvZGUKK2Zyb20gdGhlIG9sZCBjb2RlLiBUaGF0IHNob3VsZCBub3QgYmUgYSBw cm9ibGVtIHNpbmNlIFhlbiBoeXBlcnZpc29yIGhhcworYSB2ZXJ5IHNtYWxsIGZvb3RwcmludC4K KworSG93ZXZlciBpZiB3ZSBuZWVkIC0gd2UgY2FuIGFsd2F5cyBhZGQgdHdvIHRyYW1wb2xpbmVz LiBPbmUgYXQgdGhlIDJHQgorbGltaXQgdGhhdCBjYWxscyB0aGUgbmV4dCB0cmFtcG9saW5lLgor CitQbGVhc2Ugbm90ZSB0aGVyZSBpcyBhIHNtYWxsIGxpbWl0YXRpb24gZm9yIHRyYW1wb2xpbmVz IGluCitmdW5jdGlvbiBlbnRyaWVzOiBUaGUgdGFyZ2V0IGZ1bmN0aW9uICgrIHRyYWlsaW5nIHBh ZGRpbmcpIG11c3QgYmUgYWJsZQordG8gYWNjb21vZGF0ZSB0aGUgdHJhbXBvbGluZS4gT24geDg2 IHdpdGggKy0yIEdCIHJlbGF0aXZlIGp1bXBzLAordGhpcyBtZWFucyA1IGJ5dGVzIGFyZSByZXF1 aXJlZC4KKworRGVwZW5kaW5nIG9uIGNvbXBpbGVyIHNldHRpbmdzLCB0aGVyZSBhcmUgc2V2ZXJh bCBmdW5jdGlvbnMgaW4gWGVuIHRoYXQKK2FyZSBzbWFsbGVyICh3aXRob3V0IGludGVyLWZ1bmN0 aW9uIHBhZGRpbmcpLgorCis8cHJlPiAKK3JlYWRlbGYgLXNXIHhlbi1zeW1zIHwgZ3JlcCAiIEZV TkMgIiB8IFwKKyAgICBhd2sgJ3sgaWYgKCQzIDwgNSkgcHJpbnQgJDMsICQ0LCAkNSwgJDggfScK KworLi4uCiszIEZVTkMgTE9DQUwgd2JpbnZkX2lwaQorMyBGVU5DIExPQ0FMIHNoYWRvd19sMV9p bmRleAorLi4uCis8L3ByZT4KK0EgY29tcGlsZS10aW1lIGNoZWNrIGZvciwgZS5nLiwgYSBtaW5p bXVtIGFsaWdubWVudCBvZiBmdW5jdGlvbnMgb3IgYQorcnVudGltZSBjaGVjayB0aGF0IHZlcmlm aWVzIHN5bWJvbCBzaXplICgrIHBhZGRpbmcgdG8gbmV4dCBzeW1ib2xzKSBmb3IKK3RoYXQgaW4g dGhlIGh5cGVydmlzb3IgaXMgYWR2aXNlZC4KKworVGhlIHRvb2wgZm9yIGdlbmVyYXRpbmcgcGF5 bG9hZHMgY3VycmVudGx5IGRvZXMgcGVyZm9ybSBhIGNvbXBpbGUtdGltZQorY2hlY2sgdG8gZW5z dXJlIHRoYXQgdGhlIGZ1bmN0aW9uIHRvIGJlIHJlcGxhY2VkIGlzIGxhcmdlIGVub3VnaC4KKwot LSAKMi41LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=