From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v4 11/34] xsplice: Design document Date: Tue, 15 Mar 2016 13:56:33 -0400 Message-ID: <1458064616-23101-12-git-send-email-konrad.wilk@oracle.com> References: <1458064616-23101-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.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aftGn-0001Sp-2S for xen-devel@lists.xenproject.org; Tue, 15 Mar 2016 18:00:37 +0000 In-Reply-To: <1458064616-23101-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, ross.lagerwall@citrix.com, konrad@kernel.org, andrew.cooper3@citrix.com, mpohlack@amazon.de, 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 b3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgoKLS0tCkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tz b25AZXUuY2l0cml4LmNvbT4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6 IEtlaXIgRnJhc2VyIDxrZWlyQHhlbi5vcmc+CkNjOiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4K CnYxLTI6IHJldmlldwp2MzogU3BsaXQgZG9jdW1lbnQgaW4gdjEgYW5kIHYyICh0b2RvKSB0byBz aW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBnb2Fscy4KdjQ6IEFkZCBjb25zdCBvbiBzb21lIHN0cnVj dHVyZXMuIFRydW5jYXRlIHNpemUgdG8gdWludDE2X3Qgd2hlcmUgaXQgbWFrZXMgc2Vuc2UuCnY1 OiBDb252ZXJ0ICdpZCcgdG8gJ25hbWUnLCBBZGQgUm9zcydzIGNvbW1lbnRzIGFib3V0IHdoYXQg aXMgaW1wbGVtZW50ZWQuCnY2OiBXZWkncyBhbmQgUm9zcydzIHJldmlld3MuCnY3OiBKYW4ncyBy ZXZpZXcgY29tbWVudHMuCnY4OiBKYW4ncyByZXZpZXcgY29tbWVudHMuCiAgICBzL2ludDMyX3Qg c3RhdGUvdWludDMyX3Qgc3RhdGUvIG5vdyB0aGF0IHJldHVybiBjb2RlIGlzIGluIHNlcGVyYXRl CiAgICBmaWVsZCAocmMpLiBBZGQgdmFyaW91cyBvdGhlciB0eXBlcywgc3VjaCBhcyBSX1g4Nl82 NF9QQzY0IGluIHRoZSBsaXN0LgogICAgTWVudGlvbiB0aGUgbmVlZCBmb3IgY29tcGlsZXIgY2hl Y2suCnY5OiBEcm9wIHRoZSBMT0FERUQtPkNIRUNLRUQgc3RhdGUgYW5kIGdvIGRpcmVjdGx5IHRv IENIRUNLRUQgc3RhdGUuIERyb3AKICAgIExPQURFRC4KLS0tCiBkb2NzL21pc2MveHNwbGljZS5t YXJrZG93biB8IDEwMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDEgZmlsZSBjaGFuZ2VkLCAxMDI3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkb2NzL21pc2MveHNwbGljZS5tYXJrZG93bgoKZGlmZiAtLWdpdCBhL2RvY3MvbWlzYy94c3Bs aWNlLm1hcmtkb3duIGIvZG9jcy9taXNjL3hzcGxpY2UubWFya2Rvd24KbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYWY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvbWlz Yy94c3BsaWNlLm1hcmtkb3duCkBAIC0wLDAgKzEsMTAyNyBAQAorIyB4U3BsaWNlIERlc2lnbiB2 MQorCisjIyBSYXRpb25hbGUKKworQSBtZWNoYW5pc20gaXMgcmVxdWlyZWQgdG8gYmluYXJpbHkg cGF0Y2ggdGhlIHJ1bm5pbmcgaHlwZXJ2aXNvciB3aXRoIG5ldworb3Bjb2RlcyB0aGF0IGhhdmUg Y29tZSBhYm91dCBkdWUgdG8gcHJpbWFyaWx5IHNlY3VyaXR5IHVwZGF0ZXMuCisKK1RoaXMgZG9j dW1lbnQgZGVzY3JpYmVzIHRoZSBkZXNpZ24gb2YgdGhlIEFQSSB0aGF0IHdvdWxkIGFsbG93IHVz IHRvCit1cGxvYWQgdG8gdGhlIGh5cGVydmlzb3IgYmluYXJ5IHBhdGNoZXMuCisKK1RoZSBkb2N1 bWVudCBpcyBzcGxpdCBpbiBmb3VyIHNlY3Rpb25zOgorCisgKiBEZXRhaWxlZCBkZXNjcmlwdGlv bnMgb2YgdGhlIHByb2JsZW0gc3RhdGVtZW50LgorICogRGVzaWduIG9mIHRoZSBkYXRhIHN0cnVj dHVyZXMuCisgKiBEZXNpZ24gb2YgdGhlIGh5cGVyY2FsbHMuCisgKiBJbXBsZW1lbnRhdGlvbiBu b3RlcyB0aGF0IHNob3VsZCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uCisKKworIyMgR2xv c3NhcnkKKworICogc3BsaWNlIC0gcGF0Y2ggaW4gdGhlIGJpbmFyeSBjb2RlIHdpdGggbmV3IG9w Y29kZXMKKyAqIHRyYW1wb2xpbmUgLSBhIGp1bXAgdG8gYSBuZXcgaW5zdHJ1Y3Rpb24uCisgKiBw YXlsb2FkIC0gdGVsZW1ldHJpZXMgb2YgdGhlIG9sZCBjb2RlIGFsb25nIHdpdGggYmluYXJ5IGJs b2Igb2YgdGhlIG5ldworICAgZnVuY3Rpb24gKGlmIG5lZWRlZCkuCisgKiByZWxvYyAtIHRlbGVt ZXRyaWVzIGNvbnRhaW5lZCBpbiB0aGUgcGF5bG9hZCB0byBjb25zdHJ1Y3QgcHJvcGVyIHRyYW1w b2xpbmUuCisKKyMjIEhpc3RvcnkKKworVGhlIGRvY3VtZW50IGhhcyBnb25lIHVuZGVyIHZhcmlv dXMgcmV2aWV3cyBhbmQgb25seSBjb3ZlcnMgdjEgZGVzaWduLgorCitUaGUgZW5kIG9mIHRoZSBk b2N1bWVudCBoYXMgYSBzZWN0aW9uIHRpdGxlZCBgTm90IFlldCBEb25lYCB3aGljaAorb3V0bGlu ZXMgaWRlYXMgYW5kIGRlc2lnbiBmb3IgdGhlIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgd29yay4K KworIyMgTXVsdGlwbGUgd2F5cyB0byBwYXRjaAorCitUaGUgbWVjaGFuaXNtIG5lZWRzIHRvIGJl IGZsZXhpYmxlIHRvIHBhdGNoIHRoZSBoeXBlcnZpc29yIGluIG11bHRpcGxlIHdheXMKK2FuZCBi ZSBhcyBzaW1wbGUgYXMgcG9zc2libGUuIFRoZSBjb21waWxlZCBjb2RlIGlzIGNvbnRpZ3VvdXMg aW4gbWVtb3J5IHdpdGgKK25vIGdhcHMgLSBzbyB3ZSBoYXZlIG5vIGx1eHVyeSBvZiAnbW92aW5n JyBleGlzdGluZyBjb2RlIGFuZCBtdXN0IGVpdGhlcgoraW5zZXJ0IGEgdHJhbXBvbGluZSB0byB0 aGUgbmV3IGNvZGUgdG8gYmUgZXhlY3V0ZWQgLSBvciBvbmx5IG1vZGlmeSBpbi1wbGFjZQordGhl IGNvZGUgaWYgdGhlcmUgaXMgc3VmZmljaWVudCBzcGFjZS4gVGhlIHBsYWNlbWVudCBvZiBuZXcg Y29kZSBoYXMgdG8gYmUgZG9uZQorYnkgaHlwZXJ2aXNvciBhbmQgdGhlIHZpcnR1YWwgYWRkcmVz cyBmb3IgdGhlIG5ldyBjb2RlIGlzIGFsbG9jYXRlZCBkeW5hbWljYWxseS4KKworVGhpcyBpbXBs aWVzIHRoYXQgdGhlIGh5cGVydmlzb3IgbXVzdCBjb21wdXRlIHRoZSBuZXcgb2Zmc2V0cyB3aGVu IHNwbGljaW5nCitpbiB0aGUgbmV3IHRyYW1wb2xpbmUgY29kZS4gV2hlcmUgdGhlIHRyYW1wb2xp bmUgaXMgYWRkZWQgKGluc2lkZQordGhlIGZ1bmN0aW9uIHdlIGFyZSBwYXRjaGluZyBvciBqdXN0 IHRoZSBjYWxsZXJzPykgaXMgYWxzbyBpbXBvcnRhbnQuCisKK1RvIGxlc3NlbiB0aGUgYW1vdW50 IG9mIGNvZGUgaW4gaHlwZXJ2aXNvciwgdGhlIGNvbnN1bWVyIG9mIHRoZSBBUEkKK2lzIHJlc3Bv bnNpYmxlIGZvciBpZGVudGlmeWluZyB3aGljaCBtZWNoYW5pc20gdG8gZW1wbG95IGFuZCBob3cg bWFueSBsb2NhdGlvbnMKK3RvIHBhdGNoLiBDb21iaW5hdGlvbnMgb2YgbW9kaWZ5aW5nIGluLXBs YWNlIGNvZGUsIGFkZGluZyB0cmFtcG9saW5lLCBldGMKK2hhcyB0byBiZSBzdXBwb3J0ZWQuIFRo ZSBBUEkgc2hvdWxkIGFsbG93IHJlYWQvd3JpdGUgYW55IG1lbW9yeSB3aXRoaW4KK3RoZSBoeXBl cnZpc29yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KKworV2UgbXVzdCBhbHNvIGhhdmUgYSBtZWNo YW5pc20gdG8gcXVlcnkgd2hhdCBoYXMgYmVlbiBhcHBsaWVkIGFuZCBhIG1lY2hhbmlzbQordG8g cmV2ZXJ0IGl0IGlmIG5lZWRlZC4KKworIyMgV29ya2Zsb3cKKworVGhlIGV4cGVjdGVkIHdvcmtm bG93cyBvZiBoaWdoZXItbGV2ZWwgdG9vbHMgdGhhdCBtYW5hZ2UgbXVsdGlwbGUgcGF0Y2hlcwor b24gcHJvZHVjdGlvbiBtYWNoaW5lcyB3b3VsZCBiZToKKworICogVGhlIGZpcnN0IG9idmlvdXMg dGFzayBpcyBsb2FkaW5nIGFsbCBhdmFpbGFibGUgLyBzdWdnZXN0ZWQKKyAgIGhvdHBhdGNoZXMg d2hlbiB0aGV5IGFyZSBhdmFpbGFibGUuCisgKiBXaGVuZXZlciBuZXcgaG90cGF0Y2hlcyBhcmUg aW5zdGFsbGVkLCB0aGV5IHNob3VsZCBiZSBsb2FkZWQgdG9vLgorICogT25lIHdhbnRzIHRvIHF1 ZXJ5IHdoaWNoIG1vZHVsZXMgaGF2ZSBiZWVuIGxvYWRlZCBhdCBydW50aW1lLgorICogSWYgdW5s b2FkaW5nIGlzIGRlZW1lZCBzYWZlIChzZWUgdW5sb2FkaW5nIGJlbG93KSwgb25lIG1heSB3YW50 IHRvCisgICBzdXBwb3J0IGEgd29ya2Zsb3cgd2hlcmUgYSBzcGVjaWZpYyBob3RwYXRjaCBpcyBt YXJrZWQgYXMgYmFkIGFuZAorICAgdW5sb2FkZWQuCisKKyMjIFBhdGNoaW5nIGNvZGUKKworVGhl IGZpcnN0IG1lY2hhbmlzbSB0byBwYXRjaCB0aGF0IGNvbWVzIGluIG1pbmQgaXMgaW4tcGxhY2Ug cmVwbGFjZW1lbnQuCitUaGF0IGlzIHJlcGxhY2UgdGhlIGFmZmVjdGVkIGNvZGUgd2l0aCBuZXcg Y29kZS4gVW5mb3J0dW5hdGVseSB0aGUgeDg2CitJU0EgaXMgdmFyaWFibGUgc2l6ZSB3aGljaCBw bGFjZXMgbGltaXRzIG9uIGhvdyBtdWNoIHNwYWNlIHdlIGhhdmUgYXZhaWxhYmxlCit0byByZXBs YWNlIHRoZSBpbnN0cnVjdGlvbnMuIFRoYXQgaXMgbm90IGEgcHJvYmxlbSBpZiB0aGUgY2hhbmdl IGlzIHNtYWxsZXIKK3RoYW4gdGhlIG9yaWdpbmFsIG9wY29kZSBhbmQgd2UgY2FuIGZpbGwgaXQg d2l0aCBub3BzLiBQcm9ibGVtcyB3aWxsCithcHBlYXIgaWYgdGhlIHJlcGxhY2VtZW50IGNvZGUg aXMgbG9uZ2VyLgorCitUaGUgc2Vjb25kIG1lY2hhbmlzbSBpcyBieSB0aSByZXBsYWNlIHRoZSBj YWxsIG9yIGp1bXAgdG8gdGhlCitvbGQgZnVuY3Rpb24gd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUg bmV3IGZ1bmN0aW9uLgorCitBIHRoaXJkIG1lY2hhbmlzbSBpcyB0byBhZGQgYSBqdW1wIHRvIHRo ZSBuZXcgZnVuY3Rpb24gYXQgdGhlCitzdGFydCBvZiB0aGUgb2xkIGZ1bmN0aW9uLiBOLkIuIFRo ZSBYZW4gaHlwZXJ2aXNvciBpbXBsZW1lbnRzIHRoZSB0aGlyZAorbWVjaGFuaXNtLiBTZWUgYFRy YW1wb2xpbmUgKGU5IG9wY29kZSlgIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworIyMjIEV4 YW1wbGUgb2YgdHJhbXBvbGluZSBhbmQgaW4tcGxhY2Ugc3BsaWNpbmcKKworQXMgZXhhbXBsZSB3 ZSB3aWxsIGFzc3VtZSB0aGUgaHlwZXJ2aXNvciBkb2VzIG5vdCBoYXZlIFhTQS0xMzIgKHNlZQor KmRvbWN0bC9zeXNjdGw6IGRvbid0IGxlYWsgaHlwZXJ2aXNvciBzdGFjayB0byB0b29sc3RhY2tz KgorNGZmMzQ0OWYwZTlkMTc1Y2ViOTU1MWQzZjJhZWNiNTkyNzNmNjM5ZCkgYW5kIHdlIHdvdWxk IGxpa2UgdG8gYmluYXJ5IHBhdGNoCit0aGUgaHlwZXJ2aXNvciB3aXRoIGl0LiBUaGUgb3JpZ2lu YWwgY29kZSBsb29rcyBhcyBzbzoKKworPHByZT4KKyAgIDQ4IDg5IGUwICAgICAgICAgICAgICAg ICAgbW92ICAgICVyc3AsJXJheCAgCisgICA0OCAyNSAwMCA4MCBmZiBmZiAgICAgICAgIGFuZCAg ICAkMHhmZmZmZmZmZmZmZmY4MDAwLCVyYXggIAorPC9wcmU+CisKK3doaWxlIHRoZSBuZXcgcGF0 Y2hlZCBoeXBlcnZpc29yIHdvdWxkIGJlOgorCis8cHJlPgorICAgNDggYzcgNDUgYjggMDAgMDAg MDAgMDAgICBtb3ZxICAgJDB4MCwtMHg0OCglcmJwKSAgCisgICA0OCBjNyA0NSBjMCAwMCAwMCAw MCAwMCAgIG1vdnEgICAkMHgwLC0weDQwKCVyYnApICAKKyAgIDQ4IGM3IDQ1IGM4IDAwIDAwIDAw IDAwICAgbW92cSAgICQweDAsLTB4MzgoJXJicCkgIAorICAgNDggODkgZTAgICAgICAgICAgICAg ICAgICBtb3YgICAgJXJzcCwlcmF4ICAKKyAgIDQ4IDI1IDAwIDgwIGZmIGZmICAgICAgICAgYW5k ICAgICQweGZmZmZmZmZmZmZmZjgwMDAsJXJheCAgCis8L3ByZT4KKworVGhpcyBpcyBpbnNpZGUg dGhlIGFyY2hfZG9fZG9tY3RsLiBUaGlzIG5ldyBjaGFuZ2UgYWRkcyAyMSBleHRyYQorYnl0ZXMg b2YgY29kZSB3aGljaCBhbHRlcnMgYWxsIHRoZSBvZmZzZXRzIGluc2lkZSB0aGUgZnVuY3Rpb24u IFRvIGFsdGVyCit0aGVzZSBvZmZzZXRzIGFuZCBhZGQgdGhlIGV4dHJhIDIxIGJ5dGVzIG9mIGNv ZGUgd2UgbWlnaHQgbm90IGhhdmUgZW5vdWdoCitzcGFjZSBpbiAudGV4dCB0byBzcXVlZXplIHRo aXMgaW4uCisKK0FzIHN1Y2ggd2UgY291bGQgc2ltcGxpZnkgdGhpcyBwcm9ibGVtIGJ5IG9ubHkg cGF0Y2hpbmcgdGhlIHNpdGUKK3doaWNoIGNhbGxzIGFyY2hfZG9fZG9tY3RsOgorCis8cHJlPgor ZG9fZG9tY3RsOiAgCisgZTggNGIgYjEgMDUgMDAgICAgICAgICAgY2FsbHEgIGZmZmY4MmQwODAx NWZiYjkgPGFyY2hfZG9fZG9tY3RsPiAgCis8L3ByZT4KKword2l0aCBhIG5ldyBhZGRyZXNzIGZv ciB3aGVyZSB0aGUgbmV3IGBhcmNoX2RvX2RvbWN0bGAgd291bGQgYmUgKHRoaXMKK2FyZWEgd291 bGQgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5KS4KKworQXN0dXRlIHJlYWRlcnMgd2lsbCB3b25k ZXIgd2hhdCB3ZSBuZWVkIHRvIGRvIGlmIHdlIHdlcmUgdG8gcGF0Y2ggYGRvX2RvbWN0bGAKKy0g d2hpY2ggaXMgbm90IGNhbGxlZCBkaXJlY3RseSBieSBoeXBlcnZpc29yIGJ1dCBvbiBiZWhhbGYg b2YgdGhlIGd1ZXN0cyB2aWEKK3RoZSBgY29tcGF0X2h5cGVyY2FsbF90YWJsZWAgYW5kIGBoeXBl cmNhbGxfdGFibGVgLgorUGF0Y2hpbmcgdGhlIG9mZnNldCBpbiBgaHlwZXJjYWxsX3RhYmxlYCBm b3IgYGRvX2RvbWN0bDoKKyhmZmZmODJkMDgwMTAzMDc5IDxkb19kb21jdGw+OikKKworPHByZT4K KworIGZmZmY4MmQwODAyNGQ0OTA6ICAgNzkgMzAgIAorIGZmZmY4MmQwODAyNGQ0OTI6ICAgMTAg ODAgZDAgODIgZmYgZmYgICAKKworPC9wcmU+CisKK3dpdGggdGhlIG5ldyBhZGRyZXNzIHdoZXJl IHRoZSBuZXcgYGRvX2RvbWN0bGAgaXMgcG9zc2libGUuIFRoZSBvdGhlcgorcGxhY2Ugd2hlcmUg aXQgaXMgdXNlZCBpcyBpbiBgaHZtX2h5cGVyY2FsbDY0X3RhYmxlYCB3aGljaCB3b3VsZCBuZWVk Cit0byBiZSBwYXRjaGVkIGluIGEgc2ltaWxhciB3YXkuIFRoaXMgd291bGQgcmVxdWlyZSBhbiBp bi1wbGFjZSBzcGxpY2luZworb2YgdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3Mgb2YgYGFyY2hfZG9f ZG9tY3RsYC4KKworSW4gc3VtbWFyeSB0aGlzIGV4YW1wbGUgcGF0Y2hlZCB0aGUgY2FsbGVlIG9m IHRoZSBhZmZlY3RlZCBmdW5jdGlvbiBieQorICogYWxsb2NhdGluZyBtZW1vcnkgZm9yIHRoZSBu ZXcgY29kZSB0byBsaXZlIGluLAorICogY2hhbmdpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiBh bGwgdGhlIGZ1bmN0aW9ucyB3aGljaCBjYWxsZWQgdGhlIG9sZAorICAgY29kZSAoY29tcHV0aW5n IHRoZSBuZXcgb2Zmc2V0LCBwYXRjaGluZyB0aGUgY2FsbHEgd2l0aCBhIG5ldyBjYWxscSkuCisg KiBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZXMgd2l0aCB0aGUgbmV3IHZpcnR1 YWwgYWRkcmVzcyBvZgorICAgdGhlIGZ1bmN0aW9uIChzcGxpY2luZyBpbiB0aGUgbmV3IHZpcnR1 YWwgYWRkcmVzcykuIFNpbmNlIHRoaXMgdGFibGUKKyAgIHJlc2lkZXMgaW4gdGhlIC5yb2RhdGEg c2VjdGlvbiB3ZSB3b3VsZCBuZWVkIHRvIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUKKyAgIHBhZ2Ug dGFibGUgcGVybWlzc2lvbnMgZHVyaW5nIHRoaXMgcGFydC4KKworSG93ZXZlciBpdCBoYXMgZHJh d2JhY2tzIC0gdGhlIHNhZmV0eSBjaGVja3Mgd2hpY2ggaGF2ZSB0byBtYWtlIHN1cmUKK3RoZSBm dW5jdGlvbiBpcyBub3Qgb24gdGhlIHN0YWNrIC0gbXVzdCBhbHNvIGNoZWNrIGV2ZXJ5IGNhbGxl ci4gRm9yIHNvbWUKK3BhdGNoZXMgdGhpcyBjb3VsZCBtZWFuIC0gaWYgdGhlcmUgd2VyZSBhbiBz dWZmaWNpZW50IGxhcmdlIGFtb3VudCBvZgorY2FsbGVycyAtIHRoYXQgd2Ugd291bGQgbmV2ZXIg YmUgYWJsZSB0byBhcHBseSB0aGUgdXBkYXRlLgorCitIYXZpbmcgdGhlIHBhdGNoaW5nIGRvbmUg YXQgcHJlZGV0ZXJtaW5lZCBpbnN0YW5jZXMgd2hlcmUgdGhlIHN0YWNrcworYXJlIG5vdCBkZWVw IG1vc3RseSBzb2x2ZXMgdGhpcyBwcm9ibGVtLgorCisjIyMgRXhhbXBsZSBvZiBkaWZmZXJlbnQg dHJhbXBvbGluZSBwYXRjaGluZy4KKworQW4gYWx0ZXJuYXRpdmUgbWVjaGFuaXNtIGV4aXN0cyB3 aGVyZSB3ZSBjYW4gaW5zZXJ0IGEgdHJhbXBvbGluZSBpbiB0aGUKK2V4aXN0aW5nIGZ1bmN0aW9u IHRvIGJlIHBhdGNoZWQgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgbmV3IGNvZGUuIFRoaXMKK2xl c3NlbnMgdGhlIGxvY2F0aW9ucyB0byBiZSBwYXRjaGVkIHRvIG9uZSBidXQgaXQgcHV0cyBwcmVz c3VyZSBvbiB0aGUKK0NQVSBicmFuY2hpbmcgbG9naWMgKEktY2FjaGUsIGJ1dCBpdCBpcyBqdXN0 IG9uZSB1bmNvbmRpdGlvbmFsIGp1bXApLgorCitGb3IgdGhpcyBleGFtcGxlIHdlIHdpbGwgYXNz dW1lIHRoYXQgdGhlIGh5cGVydmlzb3IgaGFzIG5vdCBiZWVuIGNvbXBpbGVkCit3aXRoIGZlMmUw NzlmNjQyZWZmYjNkMjRhNmUxYTcwOTZlZjI2ZTY5MWQ5M2UgKFhTQS0xMjU6ICpwcmUtZmlsbCBz dHJ1Y3R1cmVzCitmb3IgY2VydGFpbiBIWVBFUlZJU09SX3hlbl92ZXJzaW9uIHN1Yi1vcHMqKSB3 aGljaCBtZW0tc2V0cyBhbiBzdHJ1Y3R1cmUKK2luIGB4ZW5fdmVyc2lvbmAgaHlwZXJjYWxsLiBU aGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgKiphbnl3aGVyZSoqIGluCit0aGUgaHlwZXJ2aXNv ciAoaXQgaXMgY2FsbGVkIGJ5IHRoZSBndWVzdCkgYnV0IHJlZmVyZW5jZWQgaW4gdGhlCitgY29t cGF0X2h5cGVyY2FsbF90YWJsZWAgYW5kIGBoeXBlcmNhbGxfdGFibGVgIChhbmQgaW5kaXJlY3Rs eSBjYWxsZWQKK2Zyb20gdGhhdCkuIFBhdGNoaW5nIHRoZSBvZmZzZXQgaW4gYGh5cGVyY2FsbF90 YWJsZWAgZm9yIHRoZSBvbGQKK2Bkb194ZW5fdmVyc2lvbmAgKGZmZmY4MmQwODAxMTJmOWUgPGRv X3hlbl92ZXJzaW9uPikKKworPC9wcmU+CisgZmZmZjgyZDA4MDI0YjI3MCA8aHlwZXJjYWxsX3Rh YmxlPjogICAKKyAuLi4gIAorIGZmZmY4MmQwODAyNGIyZjg6ICAgOWUgMmYgMTEgODAgZDAgODIg ZmYgZmYgIAorCis8L3ByZT4KKword2l0aCB0aGUgbmV3IGFkZHJlc3Mgd2hlcmUgdGhlIG5ldyBg ZG9feGVuX3ZlcnNpb25gIGlzIHBvc3NpYmxlLiBUaGUgb3RoZXIKK3BsYWNlIHdoZXJlIGl0IGlz IHVzZWQgaXMgaW4gYGh2bV9oeXBlcmNhbGw2NF90YWJsZWAgd2hpY2ggd291bGQgbmVlZAordG8g YmUgcGF0Y2hlZCBpbiBhIHNpbWlsYXIgd2F5LiBUaGlzIHdvdWxkIHJlcXVpcmUgYW4gaW4tcGxh Y2Ugc3BsaWNpbmcKK29mIHRoZSBuZXcgdmlydHVhbCBhZGRyZXNzIG9mIGBkb194ZW5fdmVyc2lv bmAuCisKK0FuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHdvdWxkIGJlIHRvIHBhdGNoIGluc2VydCBh IHRyYW1wb2xpbmUgaW4gdGhlCitvbGQgYGRvX3hlbl92ZXJzaW9uJyBmdW5jdGlvbiB0byBkaXJl Y3RseSBqdW1wIHRvIHRoZSBuZXcgYGRvX3hlbl92ZXJzaW9uYC4KKworPHByZT4KKyBmZmZmODJk MDgwMTEyZjllIGRvX3hlbl92ZXJzaW9uOiAgCisgZmZmZjgyZDA4MDExMmY5ZTogICAgICAgNDgg YzcgYzAgZGEgZmYgZmYgZmYgICAgbW92ICAgICQweGZmZmZmZmZmZmZmZmZmZGEsJXJheCAgCisg ZmZmZjgyZDA4MDExMmZhNTogICAgICAgODMgZmYgMDkgICAgICAgICAgICAgICAgY21wICAgICQw eDksJWVkaSAgCisgZmZmZjgyZDA4MDExMmZhODogICAgICAgMGYgODcgMjQgMDUgMDAgMDAgICAg ICAgamEgICAgIGZmZmY4MmQwODAxMTM0ZDIgOyBkb194ZW5fdmVyc2lvbisweDUzNCAgCis8L3By ZT4KKword2l0aDoKKworPHByZT4KKyBmZmZmODJkMDgwMTEyZjllIGRvX3hlbl92ZXJzaW9uOiAg CisgZmZmZjgyZDA4MDExMmY5ZTogICAgICAgZTkgWFggWVkgWlogUVEgICAgICAgICAgam1wcSAg IFtuZXcgZG9feGVuX3ZlcnNpb25dICAKKzwvcHJlPgorCit3aGljaCB3b3VsZCBsZXNzZW4gdGhl IGFtb3VudCBvZiBwYXRjaGluZyB0byBqdXN0IG9uZSBsb2NhdGlvbi4KKworSW4gc3VtbWFyeSB0 aGlzIGV4YW1wbGUgcGF0Y2hlZCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb24gdG8ganVtcCB0byB0aGUK K25ldyByZXBsYWNlbWVudCBmdW5jdGlvbiB3aGljaCByZXF1aXJlZDoKKyAqIGFsbG9jYXRpbmcg bWVtb3J5IGZvciB0aGUgbmV3IGNvZGUgdG8gbGl2ZSBpbiwKKyAqIGluc2VydGluZyB0cmFtcG9s aW5lIHdpdGggbmV3IG9mZnNldCBpbiB0aGUgb2xkIGZ1bmN0aW9uIHRvIHBvaW50IHRvIHRoZQor ICAgbmV3IGZ1bmN0aW9uLgorICogT3B0aW9uYWxseSB3ZSBjYW4gaW5zZXJ0IGluIHRoZSBvbGQg ZnVuY3Rpb24gYSB0cmFtcG9saW5lIGp1bXAgdG8gYW4gZnVuY3Rpb24KKyAgIHByb3ZpZGluZyBh biBCVUdfT04gdG8gY2F0Y2ggZXJyYW50IGNvZGUuCisKK1RoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhp cyBhcmUgdGhhdCB0aGUgdW5jb25kaXRpb25hbCBqdW1wIHdpbGwgY29uc3VtZSBhIHNtYWxsCitJ LWNhY2hlIHBlbmFsdHkuIEhvd2V2ZXIgdGhlIHNpbXBsaWNpdHkgb2YgdGhlIHBhdGNoaW5nIGFu ZCBoaWdoZXIgY2hhbmNlCitvZiBwYXNzaW5nIHNhZmV0eSBjaGVja3MgbWFrZSB0aGlzIGEgd29y dGh3aGlsZSBvcHRpb24uCisKK1RoaXMgcGF0Y2hpbmcgaGFzIGEgc2ltaWxhciBkcmF3YmFjayBh cyBpbmxpbmUgcGF0Y2hpbmcgLSB0aGUgc2FmZXR5CitjaGVja3MgaGF2ZSB0byBtYWtlIHN1cmUg dGhlIGZ1bmN0aW9uIGlzIG5vdCBvbiB0aGUgc3RhY2suIEhvd2V2ZXIKK3NpbmNlIHdlIGFyZSBy ZXBsYWNpbmcgYXQgYSBoaWdoZXIgbGV2ZWwgKGEgZnVsbCBmdW5jdGlvbiBhcyBvcHBvc2VkCit0 byB2YXJpb3VzIG9mZnNldHMgd2l0aGluIGZ1bmN0aW9ucykgdGhlIGNoZWNrcyBhcmUgc2ltcGxl ci4KKworSGF2aW5nIHRoZSBwYXRjaGluZyBkb25lIGF0IHByZWRldGVybWluZWQgaW5zdGFuY2Vz IHdoZXJlIHRoZSBzdGFja3MKK2FyZSBub3QgZGVlcCBtb3N0bHkgc29sdmVzIHRoaXMgcHJvYmxl bSBhcyB3ZWxsLgorCisjIyMgU2VjdXJpdHkKKworV2l0aCB0aGlzIG1ldGhvZCB3ZSBjYW4gcmUt d3JpdGUgdGhlIGh5cGVydmlzb3IgLSBhbmQgYXMgc3VjaCB3ZSAqKk1VU1QqKiBiZQorZGlsaWdl bnQgaW4gb25seSBhbGxvd2luZyBjZXJ0YWluIGd1ZXN0cyB0byBwZXJmb3JtIHRoaXMgb3BlcmF0 aW9uLgorCitGdXJ0aGVybW9yZSB3aXRoIFNlY3VyZUJvb3Qgb3IgdGJvb3QsIHdlICoqTVVTVCoq IGFsc28gdmVyaWZ5IHRoZSBzaWduYXR1cmUKK29mIHRoZSBwYXlsb2FkIHRvIGJlIGNlcnRhaW4g aXQgY2FtZSBmcm9tIGEgdHJ1c3RlZCBzb3VyY2UgYW5kIGludGVncml0eQord2FzIGludGFjdC4K KworQXMgc3VjaCB0aGUgaHlwZXJjYWxsICoqTVVTVCoqIHN1cHBvcnQgYW4gWFNNIHBvbGljeSB0 byBsaW1pdCB3aGF0IHRoZSBndWVzdAoraXMgYWxsb3dlZCB0byBpbnZva2UuIElmIHRoZSBzeXN0 ZW0gaXMgYm9vdGVkIHdpdGggc2lnbmF0dXJlIGNoZWNraW5nIHRoZQorc2lnbmF0dXJlIGNoZWNr aW5nIHdpbGwgYmUgZW5mb3JjZWQuCisKKyMjIERlc2lnbiBvZiBwYXlsb2FkIGZvcm1hdAorCitU aGUgcGF5bG9hZCAqKk1VU1QqKiBjb250YWluIGVub3VnaCBkYXRhIHRvIGFsbG93IHVzIHRvIGFw cGx5IHRoZSB1cGRhdGUKK2FuZCBhbHNvIHNhZmVseSByZXZlcnNlIGl0LiBBcyBzdWNoIHdlICoq TVVTVCoqIGtub3c6CisKKyAqIFRoZSBsb2NhdGlvbnMgaW4gbWVtb3J5IHRvIGJlIHBhdGNoZWQu IFRoaXMgY2FuIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkKKyAgIHZpYSBzeW1ib2xzIG9yIHZp YSB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqIFRoZSBuZXcgY29kZSB0aGF0IHdpbGwgYmUgcGF0Y2hl ZCBpbi4KKworVGhpcyBiaW5hcnkgZm9ybWF0IGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyBhbiBj dXN0b20gYmluYXJ5IGZvcm1hdCBidXQKK3RoZXJlIGFyZSBzZXZlcmUgZGlzYWR2YW50YWdlcyBv ZiBpdDoKKworICogVGhlIGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIGNoYW5nZWQgYW5kIHdlIG5l ZWQgYW4gbWVjaGFuaXNtIHRvIGFjY29tbW9kYXRlCisgICB0aGF0LgorICogSXQgaGFzIHRvIGJl IHBsYXRmb3JtIGFnbm9zdGljLgorICogRWFzaWx5IGNvbnN0cnVjdGVkIHVzaW5nIGV4aXN0aW5n IHRvb2xzLgorCitBcyBzdWNoIGhhdmluZyB0aGUgcGF5bG9hZCBpbiBhbiBFTEYgZmlsZSBpcyB0 aGUgc2Vuc2libGUgd2F5LiBXZSB3b3VsZCBiZQorY2FycnlpbmcgdGhlIHZhcmlvdXMgc2V0cyBv ZiBzdHJ1Y3R1cmVzIChhbmQgZGF0YSkgaW4gdGhlIEVMRiBzZWN0aW9ucyB1bmRlcgorZGlmZmVy ZW50IG5hbWVzIGFuZCB3aXRoIGRlZmluaXRpb25zLgorCitOb3RlIHRoYXQgZXZlcnkgc3RydWN0 dXJlIGhhcyBwYWRkaW5nLiBUaGlzIGlzIGFkZGVkIHNvIHRoYXQgdGhlIGh5cGVydmlzb3IKK2Nh biByZS11c2UgdGhvc2UgZmllbGRzIGFzIGl0IHNlZXMgZml0LgorCitFYXJsaWVyIGRlc2lnbiBh dHRlbXB0ZWQgdG8gaW5lcHRseSBleHBsYWluIHRoZSByZWxhdGlvbnMgb2YgdGhlIEVMRiBzZWN0 aW9ucwordG8gZWFjaCBvdGhlciB3aXRob3V0IHVzaW5nIHByb3BlciBFTEYgbWVjaGFuaXNtIChz aF9pbmZvLCBzaF9saW5rLCBkYXRhCitzdHJ1Y3R1cmVzIHVzaW5nIEVsZiB0eXBlcywgZXRjKS4g VGhpcyBkZXNpZ24gd2lsbCBleHBsYWluIHRoZSBzdHJ1Y3R1cmVzCithbmQgaG93IHRoZXkgYXJl IHVzZWQgdG9nZXRoZXIgYW5kIG5vdCBkaWcgaW4gdGhlIEVMRiBmb3JtYXQgLSBleGNlcHQgbWVu dGlvbgordGhhdCB0aGUgc2VjdGlvbiBuYW1lcyBzaG91bGQgbWF0Y2ggdGhlIHN0cnVjdHVyZSBu YW1lcy4KKworVGhlIHhTcGxpY2UgcGF5bG9hZCBpcyBhIHJlbG9jYXRhYmxlIEVMRiBiaW5hcnku IEEgdHlwaWNhbCBiaW5hcnkgd291bGQgaGF2ZToKKworICogT25lIG9yIG1vcmUgLnRleHQgc2Vj dGlvbnMuCisgKiBaZXJvIG9yIG1vcmUgcmVhZC1vbmx5IGRhdGEgc2VjdGlvbnMuCisgKiBaZXJv IG9yIG1vcmUgZGF0YSBzZWN0aW9ucy4KKyAqIFJlbG9jYXRpb25zIGZvciBlYWNoIG9mIHRoZXNl IHNlY3Rpb25zLgorCitJdCBtYXkgYWxzbyBoYXZlIHNvbWUgYXJjaGl0ZWN0dXJlLXNwZWNpZmlj IHNlY3Rpb25zLiBGb3IgZXhhbXBsZToKKworICogQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9ucy4K KyAqIEJ1ZyBmcmFtZXMuCisgKiBFeGNlcHRpb24gdGFibGVzLgorICogUmVsb2NhdGlvbnMgZm9y IGVhY2ggb2YgdGhlc2Ugc2VjdGlvbnMuCisKK1RoZSB4U3BsaWNlIGNvcmUgY29kZSBsb2FkcyB0 aGUgcGF5bG9hZCBhcyBhIHN0YW5kYXJkIEVMRiBiaW5hcnksIHJlbG9jYXRlcyBpdAorYW5kIGhh bmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZjIHNlY3Rpb25zIGFzIG5lZWRlZC4gVGhpcyBw cm9jZXNzIGlzIG11Y2gKK2xpa2Ugd2hhdCB0aGUgTGludXgga2VybmVsIG1vZHVsZSBsb2FkZXIg ZG9lcy4KKworVGhlIHBheWxvYWQgY29udGFpbnMgYSBzZWN0aW9uICh4c3BsaWNlX3BhdGNoX2Z1 bmMpIHdpdGggYW4gYXJyYXkgb2Ygc3RydWN0dXJlcworZGVzY3JpYmluZyB0aGUgZnVuY3Rpb25z IHRvIGJlIHBhdGNoZWQ6CisKKzxwcmU+CitzdHJ1Y3QgeHNwbGljZV9wYXRjaF9mdW5jIHsgIAor ICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAKKyAgICBFbGY2NF9Yd29yZCBuZXdfYWRkcjsgIAorICAg IEVsZjY0X1h3b3JkIG9sZF9hZGRyOyAgCisgICAgRWxmNjRfV29yZCBuZXdfc2l6ZTsgIAorICAg IEVsZjY0X1dvcmQgb2xkX3NpemU7ICAKKyAgICB1aW50OF90IHBhZFszMl07ICAKK307ICAKKzwv cHJlPgorCitUaGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGlzIDY0IGJ5dGVzLgorCisqIGBuYW1l YCBpcyB0aGUgc3ltYm9sIG5hbWUgb2YgdGhlIG9sZCBmdW5jdGlvbi4gT25seSB1c2VkIGlmIGBv bGRfYWRkcmAgaXMKKyAgIHplcm8sIG90aGVyd2lzZSB3aWxsIGJlIHVzZWQgZHVyaW5nIGR5bmFt aWMgbGlua2luZyAod2hlbiBoeXBlcnZpc29yIGxvYWRzCisgICB0aGUgcGF5bG9hZCkuCisKKyog YG9sZF9hZGRyYCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZCBh bmQgaXMgZmlsbGVkIGluIGF0CisgIHBheWxvYWQgZ2VuZXJhdGlvbiB0aW1lIGlmIGh5cGVydmlz b3IgZnVuY3Rpb24gYWRkcmVzcyBpcyBrbm93bi4gSWYgdW5rbm93biwKKyAgdGhlIHZhbHVlICpN VVNUKiBiZSB6ZXJvIGFuZCB0aGUgaHlwZXJ2aXNvciB3aWxsIGF0dGVtcHQgdG8gcmVzb2x2ZSB0 aGUgYWRkcmVzcy4KKworKiBgbmV3X2FkZHJgIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlv biB0aGF0IGlzIHJlcGxhY2luZyB0aGUgb2xkCisgIGZ1bmN0aW9uLiBUaGUgYWRkcmVzcyBpcyBm aWxsZWQgaW4gZHVyaW5nIHJlbG9jYXRpb24uIFRoZSB2YWx1ZSAqKk1VU1QqKiBiZQorICB0aGUg YWRkcmVzcyBvZiB0aGUgbmV3IGZ1bmN0aW9uIGluIHRoZSBmaWxlLgorCisqIGBvbGRfc2l6ZWAg YW5kIGBuZXdfc2l6ZWAgY29udGFpbiB0aGUgc2l6ZXMgb2YgdGhlIHJlc3BlY3RpdmUgZnVuY3Rp b25zIGluIGJ5dGVzLgorICAgVGhlIHZhbHVlIG9mIGBvbGRfc2l6ZWAgKipNVVNUKiogbm90IGJl IHplcm8uCisKKyogYHBhZGAgKipNVVNUKiogYmUgemVyby4KKworVGhlIHNpemUgb2YgdGhlIGB4 c3BsaWNlX3BhdGNoX2Z1bmNgIGFycmF5IGlzIGRldGVybWluZWQgZnJvbSB0aGUgRUxGIHNlY3Rp b24KK3NpemUuCisKK1doZW4gYXBwbHlpbmcgdGhlIHBhdGNoIHRoZSBoeXBlcnZpc29yIGl0ZXJh dGVzIG92ZXIgZWFjaCBgeHNwbGljZV9wYXRjaF9mdW5jYAorc3RydWN0dXJlIGFuZCB0aGUgY29y ZSBjb2RlIGluc2VydHMgYSB0cmFtcG9saW5lIGF0IGBvbGRfYWRkcmAgdG8gYG5ld19hZGRyYC4K KworV2hlbiByZXZlcnRpbmcgYSBwYXRjaCwgdGhlIGh5cGVydmlzb3IgaXRlcmF0ZXMgb3ZlciBl YWNoIGB4c3BsaWNlX3BhdGNoX2Z1bmNgCithbmQgdGhlIGNvcmUgY29kZSBjb3BpZXMgdGhlIGRh dGEgZnJvbSB0aGUgdW5kbyBidWZmZXIgKHByaXZhdGUgaW50ZXJuYWwgY29weSkKK3RvIGBvbGRf YWRkcmAuCisKKyMjIEh5cGVyY2FsbHMKKworV2Ugd2lsbCBlbXBsb3kgdGhlIHN1YiBvcGVyYXRp b25zIG9mIHRoZSBzeXN0ZW0gbWFuYWdlbWVudCBoeXBlcmNhbGwgKHN5c2N0bCkuCitUaGVyZSBh cmUgdG8gYmUgZm91ciBzdWItb3BlcmF0aW9uczoKKworICogdXBsb2FkIHRoZSBwYXlsb2Fkcy4K KyAqIGxpc3Rpbmcgb2YgcGF5bG9hZHMgc3VtbWFyeSB1cGxvYWRlZCBhbmQgdGhlaXIgc3RhdGUu CisgKiBnZXR0aW5nIGFuIHBhcnRpY3VsYXIgcGF5bG9hZCBzdW1tYXJ5IGFuZCBpdHMgc3RhdGUu CisgKiBjb21tYW5kIHRvIGFwcGx5LCBkZWxldGUsIG9yIHJldmVydCB0aGUgcGF5bG9hZC4KKwor TW9zdCBvZiB0aGUgYWN0aW9ucyBhcmUgYXN5bmNocm9ub3VzIHRoZXJlZm9yZSB0aGUgY2FsbGVy IGlzIHJlc3BvbnNpYmxlCit0byB2ZXJpZnkgdGhhdCBpdCBoYXMgYmVlbiBhcHBsaWVkIHByb3Bl cmx5IGJ5IHJldHJpZXZpbmcgdGhlIHN1bW1hcnkgb2YgaXQKK2FuZCB2ZXJpZnlpbmcgdGhhdCB0 aGVyZSBhcmUgbm8gZXJyb3IgY29kZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXlsb2FkLgorCitX ZSAqKk1VU1QqKiBtYWtlIHNvbWUgb2YgdGhlbSBhc3luY2hyb25vdXMgZHVlIHRvIHRoZSBuYXR1 cmUgb2YgcGF0Y2hpbmcKK2l0IHJlcXVpcmVzIGV2ZXJ5IHBoeXNpY2FsIENQVSB0byBiZSBsb2Nr LXN0ZXAgd2l0aCBlYWNoIG90aGVyLgorVGhlIHBhdGNoaW5nIG1lY2hhbmlzbSB3aGlsZSBhbiBp bXBsZW1lbnRhdGlvbiBkZXRhaWwsIGlzIG5vdCBhbiBzaG9ydAorb3BlcmF0aW9uIGFuZCBhcyBz dWNoIHRoZSBkZXNpZ24gKipNVVNUKiogYXNzdW1lIGl0IHdpbGwgYmUgYW4gbG9uZy1ydW5uaW5n CitvcGVyYXRpb24uCisKK1RoZSBzdWItb3BlcmF0aW9ucyB3aWxsIHNwZWxsIG91dCBob3cgcHJl ZW1wdGlvbiBpcyB0byBiZSBoYW5kbGVkIChpZiBhdCBhbGwpLgorCitGdXJ0aGVybW9yZSBpdCBp cyBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGRpZmZlcmVudCBwYXlsb2FkcyBmb3IgdGhlIHNh bWUKK2Z1bmN0aW9uLiBBcyBzdWNoIGFuIHVuaXF1ZSBuYW1lIHBlciBwYXlsb2FkIGhhcyB0byBi ZSB2aXNpYmxlIHRvIGFsbG93IHByb3BlciBtYW5pcHVsYXRpb24uCisKK1RoZSBoeXBlcmNhbGwg aXMgcGFydCBvZiB0aGUgYHhlbl9zeXNjdGxgLiBUaGUgdG9wIGxldmVsIHN0cnVjdHVyZSBjb250 YWlucworb25lIHVpbnQzMl90IHRvIGRldGVybWluZSB0aGUgc3ViLW9wZXJhdGlvbnMgYW5kIG9u ZSBwYWRkaW5nIGZpZWxkIHdoaWNoCisqTVVTVCogYWx3YXlzIGJlIHplcm8uCisKKzxwcmU+Citz dHJ1Y3QgeGVuX3N5c2N0bF94c3BsaWNlX29wIHsgIAorICAgIHVpbnQzMl90IGNtZDsgICAgICAg ICAgICAgICAgICAgLyogSU46IFhFTl9TWVNDVExfWFNQTElDRV8qLiAqLyAgCisgICAgdWludDMy X3QgcGFkOyAgICAgICAgICAgICAgICAgICAvKiBJTjogQWx3YXlzIHplcm8uICovICAKKwl1bmlv biB7ICAKKyAgICAgICAgICAuLi4gc2VlIGJlbG93IC4uLiAgCisgICAgICAgIH0gdTsgIAorfTsg IAorCis8L3ByZT4KK3doaWxlIHRoZSByZXN0IG9mIGh5cGVyY2FsbCBzcGVjaWZpYyBzdHJ1Y3R1 cmVzIGFyZSBwYXJ0IG9mIHRoZSB0aGlzIHN0cnVjdHVyZS4KKworIyMjIEJhc2ljIHR5cGU6IHN0 cnVjdCB4ZW5feHNwbGljZV9uYW1lCisKK01vc3Qgb2YgdGhlIGh5cGVyY2FsbHMgZW1wbG95IGFu IHNoYXJlZCBzdHJ1Y3R1cmUgY2FsbGVkIGBzdHJ1Y3QgeGVuX3hzcGxpY2VfbmFtZWAKK3doaWNo IGNvbnRhaW5zOgorCisgKiBgbmFtZWAgLSBwb2ludGVyIHdoZXJlIHRoZSBzdHJpbmcgZm9yIHRo ZSBuYW1lIGlzIGxvY2F0ZWQuCisgKiBgc2l6ZWAgLSB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nCisg KiBgcGFkYCAtIHBhZGRpbmcgLSB0byBiZSB6ZXJvLgorCitUaGUgc3RydWN0dXJlIGlzIGFzIGZv bGxvdzoKKworPHByZT4KKyNkZWZpbmUgWEVOX1hTUExJQ0VfTkFNRV9TSVpFIDEyOCAgCitzdHJ1 Y3QgeGVuX3hzcGxpY2VfbmFtZSB7ICAKKyAgICBYRU5fR1VFU1RfSEFORExFXzY0KGNoYXIpIG5h bWU7ICAgICAgICAgLyogSU4sIHBvaW50ZXIgdG8gbmFtZS4gKi8gIAorICAgIHVpbnQxNl90IHNp emU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTiwgc2l6ZSBvZiBuYW1lLiBNYXkgYmUg dXB0byAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY RU5fWFNQTElDRV9OQU1FX1NJWkUuICovICAKKyAgICB1aW50MTZfdCBwYWRbM107ICAgICAgICAg ICAgICAgICAgICAgICAgLyogSU46IE1VU1QgYmUgemVyby4gKi8gCit9OyAgCis8L3ByZT4KKwor IyMjIFhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQgKDApCisKK1VwbG9hZCBhIHBheWxvYWQgdG8g dGhlIGh5cGVydmlzb3IuIFRoZSBwYXlsb2FkIGlzIHZlcmlmaWVkCithZ2FpbnN0IGJhc2ljIGNo ZWNrcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgdGhlIHByb3BlciByZXR1cm4gY29kZQor d2lsbCBiZSByZXR1cm5lZC4gVGhlIHBheWxvYWQgaXMgbm90IGFwcGxpZWQgYXQgdGhpcyB0aW1l IC0gdGhhdCBpcworY29udHJvbGxlZCBieSAqWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTiouCisK K1RoZSBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIEEgYHN0cnVjdCB4ZW5feHNwbGljZV9uYW1lYCBj YWxsZWQgYG5hbWVgIHdoaWNoIGhhcyB0aGUgdW5pcXVlIG5hbWUuCisgKiBgc2l6ZWAgdGhlIHNp emUgb2YgdGhlIEVMRiBwYXlsb2FkIChpbiBieXRlcykuCisgKiBgcGF5bG9hZGAgdGhlIHZpcnR1 YWwgYWRkcmVzcyBvZiB3aGVyZSB0aGUgRUxGIHBheWxvYWQgaXMuCisKK1RoZSBgbmFtZWAgY291 bGQgYmUgYW4gVVVJRCB0aGF0IHN0YXlzIGZpeGVkIGZvcmV2ZXIgZm9yIGEgZ2l2ZW4KK3BheWxv YWQuIEl0IGNhbiBiZSBlbWJlZGRlZCBpbnRvIHRoZSBFTEYgcGF5bG9hZCBhdCBjcmVhdGlvbiB0 aW1lCithbmQgZXh0cmFjdGVkIGJ5IHRvb2xzLgorCitUaGUgcmV0dXJuIHZhbHVlIGlzIHplcm8g aWYgdGhlIHBheWxvYWQgd2FzIHN1Y2Nlc2Z1bGx5IHVwbG9hZGVkLgorT3RoZXJ3aXNlIGFuIC1Y RU5fRVhYIHJldHVybiB2YWx1ZSBpcyBwcm92aWRlZC4gRHVwbGljYXRlIGBuYW1lYCBhcmUgbm90 IHN1cHBvcnRlZC4KKworVGhlIGBwYXlsb2FkYCBpcyB0aGUgRUxGIHBheWxvYWQgYXMgbWVudGlv bmVkIGluIHRoZSBgUGF5bG9hZCBmb3JtYXRgIHNlY3Rpb24uCisKK1RoZSBzdHJ1Y3R1cmUgaXMg YXMgZm9sbG93OgorCis8cHJlPgorc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV91cGxvYWQgeyAg CisgICAgeGVuX3hzcGxpY2VfbmFtZV90IG5hbWU7ICAgICAgICAgICAgLyogSU4sIG5hbWUgb2Yg dGhlIHBhdGNoLiAqLyAgCisgICAgdWludDY0X3Qgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAg LyogSU4sIHNpemUgb2YgdGhlIEVMRiBmaWxlLiAqLyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82 NCh1aW50OCkgcGF5bG9hZDsgLyogSU46IEVMRiBmaWxlLiAqLyAgCit9OyAgCis8L3ByZT4KKwor IyMjIFhFTl9TWVNDVExfWFNQTElDRV9HRVQgKDEpCisKK1JldHJpZXZlIGFuIHN0YXR1cyBvZiBh biBzcGVjaWZpYyBwYXlsb2FkLiBUaGlzIGNhbGxlciBwcm92aWRlczoKKworICogQSBgc3RydWN0 IHhlbl94c3BsaWNlX25hbWVgIGNhbGxlZCBgbmFtZWAgd2hpY2ggaGFzIHRoZSB1bmlxdWUgbmFt ZS4KKyAqIEEgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgIHN0cnVjdHVyZS4gVGhlIG1lbWJl ciB2YWx1ZXMgd2lsbAorICAgYmUgb3Zlci13cml0dGVuIHVwb24gY29tcGxldGlvbi4KKworVXBv biBjb21wbGV0aW9uIHRoZSBgc3RydWN0IHhlbl94c3BsaWNlX3N0YXR1c2AgaXMgdXBkYXRlZC4K KworICogYHN0YXR1c2AgLSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBwYXls b2FkOgorICAgKiAqWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRCogICgxKSBsb2FkZWQgYW5kIHRoZSBF TEYgcGF5bG9hZCBzYWZldHkgY2hlY2tzIHBhc3NlZC4KKyAgICogKlhTUExJQ0VfU1RBVFVTX0FQ UExJRUQqICgyKSBsb2FkZWQsIGNoZWNrZWQsIGFuZCBhcHBsaWVkLgorICAgKiAgTm8gb3RoZXIg dmFsdWUgaXMgcG9zc2libGUuCisgKiBgcmNgIC0gLVhFTl9FWFggdHlwZSBlcnJvcnMgZW5jb3Vu dGVyZWQgd2hpbGUgcGVyZm9ybWluZyB0aGUgbGFzdAorICAgWFNQTElDRV9BQ1RJT05fKiBvcGVy YXRpb24uIFRoZSBub3JtYWwgdmFsdWVzIGNhbiBiZSB6ZXJvIG9yIC1YRU5fRUFHQUlOIHdoaWNo CisgICByZXNwZWN0aXZlbHkgbWVhbjogc3VjY2VzcyBvciBvcGVyYXRpb24gaW4gcHJvZ3Jlc3Mu IE90aGVyIHZhbHVlcworICAgaW1wbHkgYW4gZXJyb3Igb2NjdXJyZWQuIElmIHRoZXJlIGlzIGFu IGVycm9yIGluIGByY2AsIGBzdGF0dXNgIHdpbGwgKipOT1QqKgorICAgaGF2ZSBjaGFuZ2VkLgor CitUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBoeXBlcmNhbGwgaXMgemVybyBvbiBzdWNjZXNzIGFu ZCAtWEVOX0VYWCBvbiBmYWlsdXJlLgorKE5vdGUgdGhhdCB0aGUgYHJjYGAgdmFsdWUgY2FuIGJl IGRpZmZlcmVudCBmcm9tIHRoZSByZXR1cm4gdmFsdWUsIGFzIGluCityYz0tWEVOX0VBR0FJTiBh bmQgcmV0dXJuIHZhbHVlIGNhbiBiZSAwKS4KKworRm9yIGV4YW1wbGUsIHN1cHBvc2luZyB0aGVy ZSBpcyBhbiBwYXlsb2FkOgorCis8cHJlPgorIHN0YXR1czogWFNQTElDRV9TVEFUVVNfQ0hFQ0tF RAorIHJjOiAwCis8L3ByZT4KKworV2UgYXBwbHkgYW4gYWN0aW9uIC0gWFNQTElDRV9BQ1RJT05f UkVWRVJUIC0gdG8gcmV2ZXJ0IGl0ICh3aGljaCB3b24ndCB3b3JrCithcyB3ZSBoYXZlIG5vdCBl dmVuIGFwcGxpZWQgaXQuIEFmdGVyd2FyZHMgd2Ugd2lsbCBoYXZlOgorCis8cHJlPgorIHN0YXR1 czogWFNQTElDRV9TVEFUVVNfQ0hFQ0tFRAorIHJjOiAtWEVOX0VJTlZBTAorPC9wcmU+CisKK0l0 IGhhcyBmYWlsZWQgYnV0IGl0IHJlbWFpbnMgbG9hZGVkLgorCitUaGlzIG9wZXJhdGlvbiBpcyBz eW5jaHJvbm91cyBhbmQgZG9lcyBub3QgcmVxdWlyZSBwcmVlbXB0aW9uLgorCitUaGUgc3RydWN0 dXJlIGlzIGFzIGZvbGxvdzoKKworPHByZT4KK3N0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXMgeyAg CisjZGVmaW5lIFhTUExJQ0VfU1RBVFVTX0NIRUNLRUQgICAgICAxICAKKyNkZWZpbmUgWFNQTElD RV9TVEFUVVNfQVBQTElFRCAgICAgIDIgIAorICAgIHVpbnQzMl90IHN0YXRlOyAgICAgICAgICAg ICAgICAgLyogT1VUOiBYU1BMSUNFX1NUQVRFXyouICovICAKKyAgICBpbnQzMl90IHJjOyAgICAg ICAgICAgICAgICAgICAgIC8qIE9VVDogMCBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIC1YRU5fRVhY LiAqLyAgCit9OyAgCisKK3N0cnVjdCB4ZW5fc3lzY3RsX3hzcGxpY2VfZ2V0IHsgIAorICAgIHhl bl94c3BsaWNlX25hbWVfdCBuYW1lOyAgICAgICAgLyogSU4sIHRoZSBuYW1lIG9mIHRoZSBwYXls b2FkLiAqLyAgCisgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3Qgc3RhdHVzOyAgICAvKiBJTi9PVVQ6 IHN0YXR1cyBvZiB0aGUgcGF5bG9hZC4gKi8gIAorfTsgIAorPC9wcmU+CisKKyMjIyBYRU5fU1lT Q1RMX1hTUExJQ0VfTElTVCAoMikKKworUmV0cmlldmUgYW4gYXJyYXkgb2YgYWJicmV2aWF0ZWQg c3RhdHVzIGFuZCBuYW1lcyBvZiBwYXlsb2FkcyB0aGF0IGFyZSBsb2FkZWQgaW4gdGhlCitoeXBl cnZpc29yLgorCitUaGUgY2FsbGVyIHByb3ZpZGVzOgorCisgKiBgdmVyc2lvbmAuIEluaXRpYWxs eSAob24gZmlyc3QgaHlwZXJjYWxsKSAqTVVTVCogYmUgemVyby4KKyAqIGBpZHhgIGluZGV4IGl0 ZXJhdG9yLiBPbiBmaXJzdCBjYWxsICpNVVNUKiBiZSB6ZXJvLCBzdWJzZXF1ZW50IGNhbGxzIHZh cmllcy4KKyAqIGBucmAgdGhlIG1heCBudW1iZXIgb2YgZW50cmllcyB0byBwb3B1bGF0ZS4KKyAq IGBwYWRgIC0gKk1VU1QqIGJlIHplcm8uCisgKiBgc3RhdHVzYCB2aXJ0dWFsIGFkZHJlc3Mgb2Yg d2hlcmUgdG8gd3JpdGUgYHN0cnVjdCB4ZW5feHNwbGljZV9zdGF0dXNgCisgICBzdHJ1Y3R1cmVz LiBDYWxsZXIgKk1VU1QqIGFsbG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4KKyAqIGBuYW1lYCAt IHZpcnR1YWwgYWRkcmVzcyBvZiB3aGVyZSB0byB3cml0ZSB0aGUgdW5pcXVlIG5hbWUgb2YgdGhl IHBheWxvYWQuCisgICBDYWxsZXIgKk1VU1QqIGFsbG9jYXRlIHVwIHRvIGBucmAgb2YgdGhlbS4g RWFjaCAqTVVTVCogYmUgb2YKKyAgICoqWEVOX1hTUExJQ0VfTkFNRV9TSVpFKiogc2l6ZS4KKyAq IGBsZW5gIC0gdmlydHVhbCBhZGRyZXNzIG9mIHdoZXJlIHRvIHdyaXRlIHRoZSBsZW5ndGggb2Yg ZWFjaCB1bmlxdWUgbmFtZQorICAgb2YgdGhlIHBheWxvYWQuIENhbGxlciAqTVVTVCogYWxsb2Nh dGUgdXAgdG8gYG5yYCBvZiB0aGVtLiBFYWNoICpNVVNUKiBiZQorICAgb2Ygc2l6ZW9mKHVpbnQz Ml90KSAoNCBieXRlcykuCisKK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyBhbiBwb3NpdGl2ZSBu dW1iZXIsIGl0IGlzIHRoZSBudW1iZXIgKHVwdG8gYG5yYAorcHJvdmlkZWQgdG8gdGhlIGh5cGVy Y2FsbCkgb2YgdGhlIHBheWxvYWRzIHJldHVybmVkLCBhbG9uZyB3aXRoIGBucmAgdXBkYXRlZAor d2l0aCB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBwYXlsb2FkcywgYHZlcnNpb25gIHVwZGF0ZWQg KGl0IG1heSBiZSB0aGUgc2FtZQorYWNyb3NzIGh5cGVyY2FsbHMgLSBpZiBpdCB2YXJpZXMgdGhl IGRhdGEgaXMgc3RhbGUgYW5kIGZ1cnRoZXIgY2FsbHMgY291bGQKK2ZhaWwpLiBUaGUgYHN0YXR1 c2AsIGBuYW1lYCwgYW5kIGBsZW5gJyBhcmUgdXBkYXRlZCBhdCB0aGVpciBkZXNpZ25lZCBpbmRl eAordmFsdWUgKGBpZHhgKSB3aXRoIHRoZSByZXR1cm5lZCB2YWx1ZSBvZiBkYXRhLgorCitJZiB0 aGUgaHlwZXJjYWxsIHJldHVybnMgLVhFTl9FMkJJRyB0aGUgYG5yYCBpcyB0b28gYmlnIGFuZCBz aG91bGQgYmUKK2xvd2VyZWQuCisKK0lmIHRoZSBoeXBlcmNhbGwgcmV0dXJucyBhbiB6ZXJvIHZh bHVlIHRoZXJlIGFyZSBubyBtb3JlIHBheWxvYWRzLgorCitOb3RlIHRoYXQgZHVlIHRvIHRoZSBh c3luY2hyb25vdXMgbmF0dXJlIG9mIGh5cGVyY2FsbHMgdGhlIGNvbnRyb2wgZG9tYWluIG1pZ2h0 CitoYXZlIGFkZGVkIG9yIHJlbW92ZWQgYSBudW1iZXIgb2YgcGF5bG9hZHMgbWFraW5nIHRoaXMg aW5mb3JtYXRpb24gc3RhbGUuIEl0IGlzCit0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRvb2xz dGFjayB0byB1c2UgdGhlIGB2ZXJzaW9uYCBmaWVsZCB0byBjaGVjaworYmV0d2VlbiBlYWNoIGlu dm9jYXRpb24uIGlmIHRoZSB2ZXJzaW9uIGRpZmZlcnMgaXQgc2hvdWxkIGRpc2NhcmQgdGhlIHN0 YWxlCitkYXRhIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2guIEl0IGlzIE9LIGZvciB0aGUgdG9vbHN0 YWNrIHRvIHVzZSB0aGUgbmV3CitgdmVyc2lvbmAgZmllbGQuCisKK1RoZSBgc3RydWN0IHhlbl94 c3BsaWNlX3N0YXR1c2Agc3RydWN0dXJlIGNvbnRhaW5zIGFuIHN0YXR1cyBvZiBwYXlsb2FkIHdo aWNoIGluY2x1ZGVzOgorCisgKiBgc3RhdHVzYCAtIGluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0 dXMgb2YgdGhlIHBheWxvYWQ6CisgICAqICpYU1BMSUNFX1NUQVRVU19DSEVDS0VEKiAgKDEpIGxv YWRlZCBhbmQgdGhlIEVMRiBwYXlsb2FkIHNhZmV0eSBjaGVja3MgcGFzc2VkLgorICAgKiAqWFNQ TElDRV9TVEFUVVNfQVBQTElFRCogKDIpIGxvYWRlZCwgY2hlY2tlZCwgYW5kIGFwcGxpZWQuCisg ICAqICBObyBvdGhlciB2YWx1ZSBpcyBwb3NzaWJsZS4KKyAqIGByY2AgLSAtWEVOX0VYWCB0eXBl IGVycm9ycyBlbmNvdW50ZXJlZCB3aGlsZSBwZXJmb3JtaW5nIHRoZSBsYXN0CisgICBYU1BMSUNF X0FDVElPTl8qIG9wZXJhdGlvbi4gVGhlIG5vcm1hbCB2YWx1ZXMgY2FuIGJlIHplcm8gb3IgLVhF Tl9FQUdBSU4gd2hpY2gKKyAgIHJlc3BlY3RpdmVseSBtZWFuOiBzdWNjZXNzIG9yIG9wZXJhdGlv biBpbiBwcm9ncmVzcy4gT3RoZXIgdmFsdWVzCisgICBpbXBseSBhbiBlcnJvciBvY2N1cnJlZC4g SWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gYHJjYCwgYHN0YXR1c2Agd2lsbCAqKk5PVCoqCisgICBo YXZlIGNoYW5nZWQuCisKK1RoZSBzdHJ1Y3R1cmUgaXMgYXMgZm9sbG93OgorCis8cHJlPgorc3Ry dWN0IHhlbl9zeXNjdGxfeHNwbGljZV9saXN0IHsgIAorICAgIHVpbnQzMl90IHZlcnNpb247ICAg ICAgICAgICAgICAgICAgICAgICAvKiBJTi9PVVQ6IEluaXRpYWxseSAqTVVTVCogYmUgemVyby4g IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBzdWJz ZXF1ZW50IGNhbGxzIHJldXNlIHZhbHVlLiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIElmIHZhcmllcyBiZXR3ZWVuIGNhbGxzLCB3ZSBhcmUgIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBnZXR0aW5nIHN0YWxl IGRhdGEuICovICAKKyAgICB1aW50MzJfdCBpZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogSU4vT1VUOiBJbmRleCBpbnRvIGFycmF5LiAqLyAgCisgICAgdWludDMyX3QgbnI7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIElOOiBIb3cgbWFueSBzdGF0dXMsIG5hbWVzLCBhbmQg bGVuICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv dWxkIGZpbGwgb3V0LiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE9VVDogSG93IG1hbnkgcGF5bG9hZHMgbGVmdC4gKi8gIAorICAgIHVpbnQzMl90IHBh ZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTjogTXVzdCBiZSB6ZXJvLiAqLyAgCisg ICAgWEVOX0dVRVNUX0hBTkRMRV82NCh4ZW5feHNwbGljZV9zdGF0dXNfdCkgc3RhdHVzOyAgLyog T1VULiBNdXN0IGhhdmUgZW5vdWdoICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3BhY2UgYWxsb2NhdGUgZm9yIG5yIG9mIHRoZW0uICovICAKKyAgICBY RU5fR1VFU1RfSEFORExFXzY0KGNoYXIpIGlkOyAgICAgICAgICAgLyogT1VUOiBBcnJheSBvZiBu YW1lcy4gRWFjaCBtZW1iZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNVVNUIFhFTl9YU1BMSUNFX05BTUVfU0laRSBpbiBzaXplLiAgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgaGF2ZSBuciBvZiB0 aGVtLiAqLyAgCisgICAgWEVOX0dVRVNUX0hBTkRMRV82NCh1aW50MzIpIGxlbjsgICAgICAgIC8q IE9VVDogQXJyYXkgb2YgbGVuZ3RocyBvZiBuYW1lJ3MuICAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBoYXZlIG5yIG9mIHRoZW0uICovICAKK307 ICAKKzwvcHJlPgorCisjIyMgWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTiAoMykKKworUGVyZm9y bSBhbiBvcGVyYXRpb24gb24gdGhlIHBheWxvYWQgc3RydWN0dXJlIHJlZmVyZW5jZWQgYnkgdGhl IGBuYW1lYCBmaWVsZC4KK1RoZSBvcGVyYXRpb24gcmVxdWVzdCBpcyBhc3luY2hyb25vdXMgYW5k IHRoZSBzdGF0dXMgc2hvdWxkIGJlIHJldHJpZXZlZAorYnkgdXNpbmcgZWl0aGVyICoqWEVOX1NZ U0NUTF9YU1BMSUNFX0dFVCoqIG9yICoqWEVOX1NZU0NUTF9YU1BMSUNFX0xJU1QqKiBoeXBlcmNh bGwuCisKK1RoZSBjYWxsZXIgcHJvdmlkZXM6CisKKyAqIEEgJ3N0cnVjdCB4ZW5feHNwbGljZV9u YW1lYCBgbmFtZWAgY29udGFpbmluZyB0aGUgdW5pcXVlIG5hbWUuCisgKiBgY21kYCB0aGUgY29t bWFuZCByZXF1ZXN0ZWQ6CisgICogKlhTUExJQ0VfQUNUSU9OX0NIRUNLKiAoMSkgY2hlY2sgdGhh dCB0aGUgcGF5bG9hZCB3aWxsIGFwcGx5IHByb3Blcmx5LgorICAgIFRoaXMgYWxzbyB2ZXJmaWVz IHRoZSBwYXlsb2FkIC0gd2hpY2ggbWF5IHJlcXVpcmUgU2VjdXJlQm9vdCBmaXJtd2FyZQorICAg IGNhbGxzLiBUaGlzIGlzIHRoZSBpbml0aWFsIHN0YXRlIGFuIHBheWxvYWQgaXMgaW4uCisgICog KlhTUExJQ0VfQUNUSU9OX1VOTE9BRCogKDIpIHVubG9hZCB0aGUgcGF5bG9hZC4KKyAgIEFueSBm dXJ0aGVyIGh5cGVyY2FsbHMgYWdhaW5zdCB0aGUgYG5hbWVgIHdpbGwgcmVzdWx0IGluIGZhaWx1 cmUgdW5sZXNzCisgICAqKlhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQqKiBoeXBlcmNhbGwgaXMg cGVyZm9tZWQgd2l0aCBzYW1lIGBuYW1lYC4KKyAgKiAqWFNQTElDRV9BQ1RJT05fUkVWRVJUKiAo MykgcmV2ZXJ0IHRoZSBwYXlsb2FkLiBJZiB0aGUgb3BlcmF0aW9uIHRha2VzCisgIG1vcmUgdGlt ZSB0aGFuIHRoZSB1cHBlciBib3VuZCBvZiB0aW1lIHRoZSBgcmNgIGluIGB4ZW5feHNwbGljZV9z dGF0dXMnCisgIHJldHJpZXZlZCB2aWEgKipYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKiogd2lsbCBi ZSAtWEVOX0VCVVNZLgorICAqICpYU1BMSUNFX0FDVElPTl9BUFBMWSogKDQpIGFwcGx5IHRoZSBw YXlsb2FkLiBJZiB0aGUgb3BlcmF0aW9uIHRha2VzCisgIG1vcmUgdGltZSB0aGFuIHRoZSB1cHBl ciBib3VuZCBvZiB0aW1lIHRoZSBgcmNgIGluIGB4ZW5feHNwbGljZV9zdGF0dXMnCisgIHJldHJp ZXZlZCB2aWEgKipYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUKiogd2lsbCBiZSAtWEVOX0VCVVNZLgor ICAqICpYU1BMSUNFX0FDVElPTl9SRVBMQUNFKiAoNSkgcmV2ZXJ0IGFsbCBhcHBsaWVkIHBheWxv YWRzIGFuZCBhcHBseSB0aGlzCisgIHBheWxvYWQuIElmIHRoZSBvcGVyYXRpb24gdGFrZXMgbW9y ZSB0aW1lIHRoYW4gdGhlIHVwcGVyIGJvdW5kIG9mIHRpbWUKKyAgdGhlIGByY2AgaW4gYHhlbl94 c3BsaWNlX3N0YXR1cycgcmV0cmlldmVkIHZpYSAqKlhFTl9TWVNDVExfWFNQTElDRV9HRVQqKgor ICB3aWxsIGJlIC1YRU5fRUJVU1kuCisgKiBgdGltZWAgdGhlIHVwcGVyIGJvdW5kIG9mIHRpbWUg KG1zKSB0aGUgY21kIHNob3VsZCB0YWtlLiBaZXJvIG1lYW5zIGluZmluaXRlLgorICAgSWYgd2l0 aGluIHRoZSB0aW1lIHRoZSBvcGVyYXRpb24gZG9lcyBub3Qgc3VjY2VlZCB0aGUgb3BlcmF0aW9u IHdvdWxkIGdvIGluCisgICBlcnJvciBzdGF0ZS4KKyAqIGBwYWRgIC0gKk1VU1QqIGJlIHplcm8u CisKK1RoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB6ZXJvIHVubGVzcyB0aGUgcHJvdmlkZWQgZmll bGRzIGFyZSBpbmNvcnJlY3QuCisKK1RoZSBzdHJ1Y3R1cmUgaXMgYXMgZm9sbG93OgorCis8cHJl PgorI2RlZmluZSBYU1BMSUNFX0FDVElPTl9DSEVDSyAgIDEgIAorI2RlZmluZSBYU1BMSUNFX0FD VElPTl9VTkxPQUQgIDIgIAorI2RlZmluZSBYU1BMSUNFX0FDVElPTl9SRVZFUlQgIDMgIAorI2Rl ZmluZSBYU1BMSUNFX0FDVElPTl9BUFBMWSAgIDQgIAorI2RlZmluZSBYU1BMSUNFX0FDVElPTl9S RVBMQUNFIDUgIAorc3RydWN0IHhlbl9zeXNjdGxfeHNwbGljZV9hY3Rpb24geyAgCisgICAgeGVu X3hzcGxpY2VfbmFtZV90IG5hbWU7ICAgICAgICAgICAgICAgIC8qIElOLCBuYW1lIG9mIHRoZSBw YXRjaC4gKi8gIAorICAgIHVpbnQzMl90IGNtZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBJTjogWFNQTElDRV9BQ1RJT05fKiAqLyAgCisgICAgdWludDMyX3QgdGltZTsgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIElOOiBaZXJvIGlmIG5vIHRpbWVvdXQuICovICAgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9yIHVwcGVyIGJvdW5kIG9m IHRpbWUgKG1zKSAqLyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBmb3Igb3BlcmF0aW9uIHRvIHRha2UuICovICAKK307ICAKKworPC9wcmU+CisKKyMj IFN0YXRlIGRpYWdyYW1zIG9mIFhTUExJQ0VfQUNUSU9OIGNvbW1hbmRzLgorCitUaGVyZSBpcyBh IHN0cmljdCBvcmRlcmluZyBzdGF0ZSBvZiB3aGF0IHRoZSBjb21tYW5kcyBjYW4gYmUuCitUaGUg WFNQTElDRV9BQ1RJT04gcHJlZml4IGhhcyBiZWVuIGRyb3BwZWQgdG8gZWFzeSByZWFkaW5nIGFu ZAorZG9lcyBub3QgaW5jbHVkZSB0aGUgWFNQTElDRV9TVEFURVM6CisKKzxwcmU+CisgICAgICAg ICAgICAgIC8tPlwgIAorICAgICAgICAgICAgICBcICAvICAKKyBVTkxPQUQgPC0tLSBDSEVDSyAt LS0+IFJFUExBQ0V8QVBQTFkgLS0+IFJFVkVSVCAtLVwgIAorICAgICAgICAgICAgICAgIFwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgCisgICAgICAgICAgICAgICAgIFwtLS0t LS0tLS0tLS0tLS0tLS0tPC0tLS0tLS0tLS0tLS0vICAKKworPC9wcmU+CisjIyBTdGF0ZSB0cmFu c2l0aW9uIHRhYmxlIG9mIFhTUExJQ0VfQUNUSU9OIGNvbW1hbmRzIGFuZCBYU1BMSUNFX1NUQVRV Uy4KKworTm90ZSB0aGF0OgorCisgLSBUaGUgQ0hFQ0tFRCBzdGF0ZSBpcyB0aGUgc3RhcnRpbmcg b25lIGFjaGlldmVkIHdpdGggKlhFTl9TWVNDVExfWFNQTElDRV9VUExPQUQqIGh5cGVyY2FsbC4K KyAtIFRoZSBSRVZFUlQgb3BlcmF0aW9uIG9uIHN1Y2Nlc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IG1v dmUgdG8gdGhlIENIRUNLRUQgc3RhdGUuCisgLSBUaGVyZSBhcmUgdHdvIFNUQVRFUzogQ0hFQ0tF RCBhbmQgQVBQTElFRC4KKyAtIFRoZXJlIGFyZSBmaXZlIGFjdGlvbnMgKGFrYSBjb21tYW5kcyk6 IENIRUNLLCBBUFBMWSwgUkVQTEFDRSwgUkVWRVJULCBhbmQgVU5MT0FELgorCitUaGUgc3RhdGUg dHJhbnNpdGlvbiB0YWJsZSBvZiB2YWxpZCBzdGF0ZXMgYW5kIGFjdGlvbiBzdGF0ZXM6CisKKzxw cmU+CisKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IEFDVElPTiAgfCBDdXJyZW50IHwgUmVzdWx0ICAgICAg ICAgICAgICAgICAgICAgICAgIHwgTmV4dCBTVEFURTogICAgfAorfCBBQ1RJT04gIHwgU1RBVEUg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Q0hFQ0tFRHxBUFBMSUVEIHwKKyst LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0rCit8IENIRUNLICAgfCBDSEVDS0VEIHwgQ2hlY2sgcGF5bG9hZCAob25jZSBt b3JlLCBubykgIHwgICB4ICAgfCAgICAgICAgfAorfCAgICAgICAgIHwgICAgICAgICB8IGVycm9y cykgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgIHwKKystLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0t LS0rCit8IENIRUNLICAgfCBDSEVDS0VEIHwgQ2hlY2sgcGF5bG9hZCAob25jZSBtb3JlLCB3aXRo IHwgICAgICAgfCAgICAgICAgfAorfCAgICAgICAgIHwgICAgICAgICB8IGVycm9ycykgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IFVO TE9BRCAgfCBDSEVDS0VEIHwgVW5sb2FkIHBheWxvYWQuIEFsd2F5cyB3b3Jrcy4gIHwgICAgICAg fCAgICAgICAgfAorfCAgICAgICAgIHwgICAgICAgICB8IE5vIG5leHQgc3RhdGVzLiAgICAgICAg ICAgICAgICB8ICAgICAgIHwgICAgICAgIHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rCit8IEFQUExZICAgfCBD SEVDS0VEIHwgQXBwbHkgcGF5bG9hZCAoc3VjY2VzcykuICAgICAgIHwgICAgICAgfCAgIHggICAg fAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLSsKK3wgQVBQTFkgICB8IENIRUNLRUQgfCBBcHBseSBwYXlsb2FkIChl cnJvcnx0aW1lb3V0KSAgfCAgIHggICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBSRVBM QUNFIHwgQ0hFQ0tFRCB8IFJldmVydCBwYXlsb2FkcyBhbmQgYXBwbHkgbmV3ICB8ICAgICAgIHwg ICB4ICAgIHwKK3wgICAgICAgICB8ICAgICAgICAgfCBwYXlsb2FkIHdpdGggc3VjY2Vzcy4gICAg ICAgICAgfCAgICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBSRVBMQUNFIHwgQ0hF Q0tFRCB8IFJldmVydCBwYXlsb2FkcyBhbmQgYXBwbHkgbmV3ICB8ICAgeCAgIHwgICAgICAgIHwK K3wgICAgICAgICB8ICAgICAgICAgfCBwYXlsb2FkIHdpdGggZXJyb3IuICAgICAgICAgICAgfCAg ICAgICB8ICAgICAgICB8CisrLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKworfCBSRVZFUlQgIHwgQVBQTElFRCB8IFJl dmVydCBwYXlsb2FkIChzdWNjZXNzKS4gICAgICB8ICAgeCAgIHwgICAgICAgIHwKKystLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0rCit8IFJFVkVSVCAgfCBBUFBMSUVEIHwgUmV2ZXJ0IHBheWxvYWQgKGVycm9yfHRpbWVv dXQpIHwgICAgICAgfCAgIHggICAgfAorKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLSsKKzwvcHJlPgorCitBbGwgdGhl IG90aGVyIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBpbnZhbGlkLgorCisjIyBTZXF1ZW5jZSBvZiBl dmVudHMuCisKK1RoZSBub3JtYWwgc2VxdWVuY2Ugb2YgZXZlbnRzIGlzIHRvOgorCisgMS4gKlhF Tl9TWVNDVExfWFNQTElDRV9VUExPQUQqIHRvIHVwbG9hZCB0aGUgcGF5bG9hZC4gSWYgdGhlcmUg YXJlIGVycm9ycyAqU1RPUCogaGVyZS4KKyAyLiAqWEVOX1NZU0NUTF9YU1BMSUNFX0dFVCogdG8g Y2hlY2sgdGhlIGAtPnJjYC4gSWYgKi1YRU5fRUFHQUlOKiBzcGluLiBJZiB6ZXJvIGdvIHRvIG5l eHQgc3RlcC4KKyAzLiAqWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTiogd2l0aCAqWFNQTElDRV9B Q1RJT05fQVBQTFkqIHRvIGFwcGx5IHRoZSBwYXRjaC4KKyA0LiAqWEVOX1NZU0NUTF9YU1BMSUNF X0dFVCogdG8gY2hlY2sgdGhlIGAtPnJjYC4gSWYgaW4gKi1YRU5fRUFHQUlOKiBzcGluLiBJZiB6 ZXJvIGV4aXQgd2l0aCBzdWNjZXNzLgorCisKKyMjIEFkZGVuZHVtCisKK0ltcGxlbWVudGF0aW9u IHF1aXJrcyBzaG91bGQgbm90IGJlIGRpc2N1c3NlZCBpbiBhIGRlc2lnbiBkb2N1bWVudC4KKwor SG93ZXZlciB0aGVzZSBvYnNlcnZhdGlvbnMgY2FuIHByb3ZpZGUgYWlkIHdoZW4gZGV2ZWxvcGlu ZyBhZ2FpbnN0IHRoaXMKK2RvY3VtZW50LgorCisKKyMjIyBBbHRlcm5hdGl2ZSBhc3NlbWJsZXIK KworQWx0ZXJuYXRpdmUgYXNzZW1ibGVyIGlzIGEgbWVjaGFuaXNtIHRvIHVzZSBkaWZmZXJlbnQg aW5zdHJ1Y3Rpb25zIGRlcGVuZGluZworb24gd2hhdCB0aGUgQ1BVIHN1cHBvcnRzLiBUaGlzIGlz IGRvbmUgYnkgcHJvdmlkaW5nIG11bHRpcGxlIHN0cmVhbXMgb2YgY29kZQordGhhdCBjYW4gYmUg cGF0Y2hlZCBpbiAtIG9yIGlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBpdCAtIHBhZGRlZCB3 aXRoCitgbm9wYCBvcGVyYXRpb25zLiBUaGUgYWx0ZXJuYXRpdmUgYXNzZW1ibGVyIG1hY3JvcyBj YXVzZSB0aGUgY29tcGlsZXIgdG8KK2V4cGFuZCB0aGUgY29kZSB0byBwbGFjZSBhIG1vc3QgZ2Vu ZXJpYyBjb2RlIGluIHBsYWNlIC0gZW1pdCBhIHNwZWNpYWwKK0VMRiAuc2VjdGlvbiBoZWFkZXIg dG8gdGFnIHRoaXMgbG9jYXRpb24uIER1cmluZyBydW4tdGltZSB0aGUgaHlwZXJ2aXNvcgorY2Fu IGxlYXZlIHRoZSBhcmVhcyBhbG9uZSBvciBwYXRjaCB0aGVtIHdpdGggYW4gYmV0dGVyIHN1aXRl ZCBvcGNvZGVzLgorCitOb3RlIHRoYXQgcGF0Y2hpbmcgZnVuY3Rpb25zIHRoYXQgY29weSB0byBv ciBmcm9tIGd1ZXN0IG1lbW9yeSByZXF1aXJlcwordG8gc3VwcG9ydCBhbHRlcm5hdGl2ZSBzdXBw b3J0LiBGb3IgZXhhbXBsZSB0aGlzIGNhbiBiZSBkdWUgdG8gU01BUAorKHNwZWNpZmljYWxseSAq c3RhYyogYW5kICpjbGFjKiBvcGVyYXRpb25zKSB3aGljaCBpcyBlbmFibGVkIG9uIEJyb2Fkd2Vs bAorYW5kIGxhdGVyIGFyY2hpdGVjdHVyZXMuIEl0IG1heSBiZSByZWxhdGVkIHRvIG90aGVyIGFs dGVybmF0aXZlIGluc3RydWN0aW9ucy4KKworIyMjIFdoZW4gdG8gcGF0Y2gKKworRHVyaW5nIHRo ZSBkaXNjdXNzaW9uIG9uIHRoZSBkZXNpZ24gdHdvIGNhbmRpZGF0ZXMgYnViYmxlZCB3aGVyZQor dGhlIGNhbGwgc3RhY2sgZm9yIGVhY2ggQ1BVIHdvdWxkIGJlIGRldGVybWluaXN0aWMuIFRoaXMg d291bGQKK21pbmltaXplIHRoZSBjaGFuY2Ugb2YgdGhlIHBhdGNoIG5vdCBiZWluZyBhcHBsaWVk IGR1ZSB0byBzYWZldHkKK2NoZWNrcyBmYWlsaW5nLiBTYWZldHkgY2hlY2tzIHN1Y2ggYXMgbm90 IHBhdGNoaW5nIGNvZGUgd2hpY2gKK2lzIG9uIHRoZSBzdGFjayAtIHdoaWNoIGNhbiBsZWFkIHRv IGNvcnJ1cHRpb24uCisKKyMjIyMgUmVuZGV6dm91cyBjb2RlIGluc3RlYWQgb2Ygc3RvcF9tYWNo aW5lIGZvciBwYXRjaGluZworCitUaGUgaHlwZXJ2aXNvcidzIHRpbWUgcmVuZGV6dm91cyBjb2Rl IHJ1bnMgc3luY2hyb25vdXNseSBhY3Jvc3MgYWxsIENQVXMKK2V2ZXJ5IHNlY29uZC4gVXNpbmcg dGhlIHN0b3BfbWFjaGluZSB0byBwYXRjaCBjYW4gc3RhbGwgdGhlIHRpbWUgcmVuZGV6dm91cwor Y29kZSBhbmQgcmVzdWx0IGluIE5NSS4gQXMgc3VjaCBoYXZpbmcgdGhlIHBhdGNoaW5nIGJlIGRv bmUgYXQgdGhlIHRhaWwKK29mIHJlbmRlenZvdXMgY29kZSBzaG91bGQgYXZvaWQgdGhpcyBwcm9i bGVtLgorCitIb3dldmVyIHRoZSBlbnRyYW5jZSBwb2ludCBmb3IgdGhhdCBjb2RlIGlzCitkb19z b2Z0aXJxLT50aW1lcl9zb2Z0aXJxX2FjdGlvbi0+dGltZV9jYWxpYnJhdGlvbgord2hpY2ggZW5k cyB1cCBjYWxsaW5nIG9uX3NlbGVjdGVkX2NwdXMgb24gcmVtb3RlIENQVXMuCisKK1RoZSByZW1v dGUgQ1BVcyByZWNlaXZlIENBTExfRlVOQ1RJT05fVkVDVE9SIElQSSBhbmQgZXhlY3V0ZSB0aGUK K2Rlc2lyZWQgZnVuY3Rpb24uCisKKyMjIyMgQmVmb3JlIGVudGVyaW5nIHRoZSBndWVzdCBjb2Rl LgorCitCZWZvcmUgd2UgY2FsbCBWTVhSZXN1bWUgd2UgY2hlY2sgd2hldGhlciBhbnkgc29mdCBJ UlFzIG5lZWQgdG8gYmUgZXhlY3V0ZWQuCitUaGlzIGlzIGEgZ29vZCBzcG90IGJlY2F1c2UgYWxs IFhlbiBzdGFja3MgYXJlIGVmZmVjdGl2ZWx5IGVtcHR5IGF0Cit0aGF0IHBvaW50LgorCitUbyBy YW5kZXp2b3VzIGFsbCB0aGUgQ1BVcyBhbiBiYXJyaWVyIHdpdGggYW4gbWF4aW11bSB0aW1lb3V0 ICh3aGljaAorY291bGQgYmUgYWRqdXN0ZWQpLCBjb21iaW5lZCB3aXRoIGZvcmNpbmcgYWxsIG90 aGVyIENQVXMgdGhyb3VnaCB0aGUKK2h5cGVydmlzb3Igd2l0aCBJUElzLCBjYW4gYmUgdXRpbGl6 ZWQgdG8gZXhlY3V0ZSBsb2Nrc3RlcCBpbnN0cnVjdGlvbnMKK29uIGFsbCBDUFVzLgorCitUaGUg YXBwcm9hY2ggaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIHN0b3BfbWFjaGluZSBhbmQgdGhlIHRp bWUgcmVuZGV6dm91cworYnV0IGlzIHRpbWUtYm91bmQuIEhvd2V2ZXIgdGhlIGxvY2FsIENQVSBz dGFjayBpcyBtdWNoIHNob3J0ZXIgYW5kCithIGxvdCBtb3JlIGRldGVybWluaXN0aWMuCisKK1Ro aXMgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisKKyMjIyBD b21waWxpbmcgdGhlIGh5cGVydmlzb3IgY29kZQorCitIb3RwYXRjaCBnZW5lcmF0aW9uIG9mdGVu IHJlcXVpcmVzIHN1cHBvcnQgZm9yIGNvbXBpbGluZyB0aGUgdGFyZ2V0Cit3aXRoIC1mZnVuY3Rp b24tc2VjdGlvbnMgLyAtZmRhdGEtc2VjdGlvbnMuICBDaGFuZ2VzIHdvdWxkIGhhdmUgdG8KK2Jl IGRvbmUgdG8gdGhlIGxpbmtlciBzY3JpcHRzIHRvIHN1cHBvcnQgdGhpcy4KKworIyMjIEdlbmVy YXRpb24gb2YgeFNwbGljZSBFTEYgcGF5bG9hZHMKKworVGhlIGRlc2lnbiBvZiB0aGF0IGlzIG5v dCBkaXNjdXNzZWQgaW4gdGhpcyBkZXNpZ24uCisKK1RoaXMgaXMgaW1wbGVtZW50ZWQgaW4gYSBz ZXBlcmF0ZSB0b29sIHdoaWNoIGxpdmVzIGluIGEgc2VwZXJhdGUKK0dJVCByZXBvLgorCitDdXJy ZW50bHkgaXQgcmVzaWRlcyBhdCBodHRwczovL2dpdGh1Yi5jb20vcm9zc2xhZ2Vyd2FsbC94c3Bs aWNlLWJ1aWxkCisKKyMjIyBFeGNlcHRpb24gdGFibGVzIGFuZCBzeW1ib2wgdGFibGVzIGdyb3d0 aAorCitXZSBtYXkgbmVlZCBzdXBwb3J0IGZvciBhZGFwdGluZyBvciBhdWdtZW50aW5nIGV4Y2Vw dGlvbiB0YWJsZXMgaWYKK3BhdGNoaW5nIHN1Y2ggY29kZS4gIEhvdHBhdGNoZXMgbWF5IG5lZWQg dG8gYnJpbmcgdGhlaXIgb3duIHNtYWxsCitleGNlcHRpb24gdGFibGVzIChzaW1pbGFyIHRvIGhv dyBMaW51eCBtb2R1bGVzIHN1cHBvcnQgdGhpcykuCisKK0lmIHN1cHBvcnRpbmcgaG90cGF0Y2hl cyB0aGF0IGludHJvZHVjZSBhZGRpdGlvbmFsIGV4Y2VwdGlvbi1sb2NhdGlvbnMKK2lzIG5vdCBp bXBvcnRhbnQsIG9uZSBjb3VsZCBhbHNvIGNoYW5nZSB0aGUgZXhjZXB0aW9uIHRhYmxlIGluLXBs YWNlCithbmQgcmVvcmRlciBpdCBhZnRlcndhcmRzLgorCitBcyBmb3VuZCBhbG1vc3QgZXZlcnkg cGF0Y2ggKFhTQSkgdG8gYSBub24tdHJpdmlhbCBmdW5jdGlvbiByZXF1aXJlcworYWRkaXRpb25h bCBlbnRyaWVzIGluIHRoZSBleGNlcHRpb24gdGFibGUgYW5kL29yIHRoZSBidWcgZnJhbWVzLgor CitUaGlzIGlzIGltcGxlbWVudGVkIGluIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZpc29yLgorCisj IyMgLnJvZGF0YSBzZWN0aW9ucworCitUaGUgcGF0Y2hpbmcgbWlnaHQgcmVxdWlyZSBzdHJpbmdz IHRvIGJlIHVwZGF0ZWQgYXMgd2VsbC4gQXMgc3VjaCB3ZSBtdXN0IGJlCithbHNvIGFibGUgdG8g cGF0Y2ggdGhlIHN0cmluZ3MgYXMgbmVlZGVkLiBUaGlzIHNvdW5kcyBzaW1wbGUgLSBidXQgdGhl IGNvbXBpbGVyCitoYXMgYSBoYWJpdCBvZiBjb2FsZXNjaW5nIHN0cmluZ3MgdGhhdCBhcmUgdGhl IHNhbWUgLSB3aGljaCBtZWFucyBpZiB3ZSBpbi1wbGFjZQorYWx0ZXIgdGhlIHN0cmluZ3MgLSBv dGhlciB1c2VycyB3aWxsIGJlIGluYWR2ZXJ0ZW50bHkgYWZmZWN0ZWQgYXMgd2VsbC4KKworVGhp cyBpcyBhbHNvIHdoZXJlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyBsaXZlIC0gYW5kIHdlIG1heSBu ZWVkIHRvIHBhdGNoIHRoaXMKK2FzIHdlbGwuIEFuZCBzd2l0Y2gtc3R5bGUganVtcCB0YWJsZXMu CisKK1RvIGd1YXJkIGFnYWluc3QgdGhhdCB3ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGRvIHBhdGNo aW5nIHNpbWlsYXIgdG8KK3RyYW1wb2xpbmUgcGF0Y2hpbmcgb3IgaW4tbGluZSBkZXBlbmRpbmcg b24gdGhlIGZsYXZvdXIuIElmIHdlIGNhbgorZG8gaW4tbGluZSBwYXRjaGluZyB3ZSB3b3VsZCBu ZWVkIHRvOgorCisgKiBhbHRlciBgLnJvZGF0YWAgdG8gYmUgd3JpdGVhYmxlLgorICogaW5saW5l IHBhdGNoLgorICogYWx0ZXIgYC5yb2RhdGFgIHRvIGJlIHJlYWQtb25seS4KKworSWYgYXJlIGRv aW5nIHRyYW1wb2xpbmUgcGF0Y2hpbmcgd2Ugd291bGQgbmVlZCB0bzoKKworICogYWxsb2NhdGUg YSBuZXcgbWVtb3J5IGxvY2F0aW9uIGZvciB0aGUgc3RyaW5nLgorICogYWxsIGxvY2F0aW9ucyB3 aGljaCB1c2UgdGhpcyBzdHJpbmcgd2lsbCBoYXZlIHRvIGJlIHVwZGF0ZWQgdG8gdXNlIHRoZQor ICAgb2Zmc2V0IHRvIHRoZSBzdHJpbmcuCisgKiBtYXJrIHRoZSByZWdpb24gUk8gd2hlbiB3ZSBh cmUgZG9uZS4KKworVGhlIHRyYW1wb2xpbmUgcGF0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgaW4gdGhl IFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisKKyMjIyAuYnNzIGFuZCAuZGF0YSBzZWN0aW9ucy4K KworSW4gcGxhY2UgcGF0Y2hpbmcgd3JpdGFibGUgZGF0YSBpcyBub3Qgc3VpdGFibGUgYXMgaXQg aXMgdW5jbGVhciB3aGF0IHNob3VsZCBiZSBkb25lCitkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQg c3RhdGUgb2YgZGF0YS4gQXMgc3VjaCBpdCBzaG91bGQgbm90IGJlIGF0dGVtcHRlZC4KKworSG93 ZXZlciwgZnVuY3Rpb25zIHdoaWNoIGFyZSBiZWluZyBwYXRjaGVkIGNhbiBicmluZyBpbiBjaGFu Z2VzIHRvIHN0cmluZ3MKKyguZGF0YSBvciAucm9kYXRhIHNlY3Rpb24gY2hhbmdlcyksIG9yIGV2 ZW4gdG8gLmJzcyBzZWN0aW9ucy4KKworQXMgc3VjaCB0aGUgRUxGIHBheWxvYWQgY2FuIGludHJv ZHVjZSBuZXcgLnJvZGF0YSwgLmJzcywgYW5kIC5kYXRhIHNlY3Rpb25zLgorUGF0Y2hpbmcgaW4g dGhlIG5ldyBmdW5jdGlvbiB3aWxsIGVuZCB1cCBhbHNvIHBhdGNoaW5nIGluIHRoZSBuZXcgLnJv ZGF0YQorc2VjdGlvbiBhbmQgdGhlIG5ldyBmdW5jdGlvbiB3aWxsIHJlZmVyZW5jZSB0aGUgbmV3 IHN0cmluZyBpbiB0aGUgbmV3Cisucm9kYXRhIHNlY3Rpb24uCisKK1RoaXMgaXMgaW1wbGVtZW50 ZWQgaW4gdGhlIFhlbiBQcm9qZWN0IGh5cGVydmlzb3IuCisKKyMjIyBTZWN1cml0eQorCitPbmx5 IHRoZSBwcml2aWxlZ2VkIGRvbWFpbiBzaG91bGQgYmUgYWxsb3dlZCB0byBkbyB0aGlzIG9wZXJh dGlvbi4KKworCisjIE5vdCBZZXQgRG9uZQorCitUaGlzIGlzIGZvciBmdXJ0aGVyIGRldmVsb3Bt ZW50IG9mIHhTcGxpY2UuCisKKyMjIEdvYWxzCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGFs c28gaGF2ZSBhIG1lY2hhbmlzbSBmb3I6CisKKyAqICBBbiBkZXBlbmRlbmN5IG1lY2hhbmlzbSBm b3IgdGhlIHBheWxvYWRzLiBUbyB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBsb2FkOgorICAgIC0g VGhlIGFwcHJvcGlhdGUgcGF5bG9hZC4gVG8gdmVyaWZ5IHRoYXQgcGF5bG9hZCBpcyBidWlsdCBh Z2FpbnN0IHRoZQorICAgICAgaHlwZXJ2aXNvci4gVGhpcyBjYW4gYmUgZG9uZSB2aWEgdGhlIGBi dWlsZC1pZGAKKyAgICAgIG9yIHZpYSBwcm92aWRpbmcgYW4gY29weSBvZiB0aGUgb2xkIGNvZGUg LSBzbyB0aGF0IHRoZSBoeXBlcnZpc29yIGNhbgorICAgICAgIHZlcmlmeSBpdCBhZ2FpbnN0IHRo ZSBjb2RlIGluIG1lbW9yeS4KKyAgICAtIFRvIGNvbnN0cnVjdCBhbiBhcHByb3BpYXRlIG9yZGVy IG9mIHBheWxvYWRzIHRvIGxvYWQgaW4gY2FzZSB0aGV5CisgICAgICBkZXBlbmQgb24gZWFjaCBv dGhlci4KKyAqIEJlIGFibGUgdG8gbG9va3VwIGluIHRoZSBYZW4gaHlwZXJ2aXNvciB0aGUgc3lt Ym9sIG5hbWVzIG9mIGZ1bmN0aW9ucyBmcm9tIHRoZSBFTEYgcGF5bG9hZC4KKyAqIEJlIGFibGUg dG8gcGF0Y2ggLnJvZGF0YSwgLmJzcywgYW5kIC5kYXRhIHNlY3Rpb25zLgorICogRnVydGhlciBz YWZldHkgY2hlY2tzIChibGFja2xpc3Qgb2Ygd2hpY2ggZnVuY3Rpb25zIGNhbm5vdCBiZSBwYXRj aGVkLCBjaGVjaworICAgdGhlIHN0YWNrLCBtYWtlIHN1cmUgdGhlIHBheWxvYWQgaXMgYnVpbHQg d2l0aCBzYW1lIGNvbXBpbGVyIGFzIGh5cGVydmlzb3IpLgorICogTk9QIG91dCB0aGUgY29kZSBz ZXF1ZW5jZSBpZiBgbmV3X3NpemVgIGlzIHplcm8uCisgKiBEZWFsIHdpdGggb3RoZXIgcmVsb2Nh dGlvbiB0eXBlczogIFJfWDg2XzY0X1s4LDE2LDMyLDMyU10sIFJfWDg2XzY0X1BDWzgsMTYsNjRd IGluIHBheWxvYWQgZmlsZS4KKworIyMjIHhTcGxpY2UgaW50ZXJkZXBlbmRlbmNpZXMKKworeFNw bGljZSBwYXRjaGVzIGludGVyZGVwZW5kZW5jaWVzIGFyZSB0cmlja3kuCisKK1RoZXJlIGFyZSB0 aGUgd2F5cyB0aGlzIGNhbiBiZSBhZGRyZXNzZWQ6CisgKiBBIHNpbmdsZSBsYXJnZSBwYXRjaCB0 aGF0IHN1YnN1bWVzIGFuZCByZXBsYWNlcyBhbGwgcHJldmlvdXMgb25lcy4KKyAgIE92ZXIgdGhl IGxpZmUtdGltZSBvZiBwYXRjaGluZyB0aGUgaHlwZXJ2aXNvciB0aGlzIGxhcmdlIHBhdGNoCisg ICBncm93cyB0byBhY2N1bXVsYXRlIGFsbCB0aGUgY29kZSBjaGFuZ2VzLgorICogSG90cGF0Y2gg c3RhY2sgLSB3aGVyZSBhbiBtZWNoYW5pc20gZXhpc3RzIHRoYXQgbG9hZHMgdGhlIGhvdHBhdGNo ZXMKKyAgIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgd2VyZSBidWlsdCBpbi4gV2Ugd291bGQgbmVl ZCBhbiBidWlsZC1pZAorICAgb2YgdGhlIGh5cGV2aXNvciB0byBtYWtlIHN1cmUgdGhlIGhvdC1w YXRjaGVzIGFyZSBidWlsZCBhZ2FpbnN0IHRoZQorICAgY29ycmVjdCBidWlsZC4KKyAqIFBheWxv YWQgY29udGFpbmluZyB0aGUgb2xkIGNvZGUgdG8gY2hlY2sgYWdhaW5zdCB0aGF0LiBUaGF0IGFs bG93cworICAgdGhlIGhvdHBhdGNoZXMgdG8gYmUgbG9hZGVkIGluZGVwZWRlbnRseSAoaWYgdGhl eSBkb24ndCBvdmVybGFwKSAtIG9yCisgICBpZiB0aGUgb2xkIGNvZGUgYWxzbyBjb250YWluc3Qg cHJldmlvdXNseSBwYXRjaGVkIGNvZGUgLSBldmVuIGlmIHRoZXkKKyAgIG92ZXJsYXAuCisKK1Ro ZSBkaXNhZHZhbnRhZ2Ugb2YgdGhlIGZpcnN0IGxhcmdlIHBhdGNoIGlzIHRoYXQgaXQgY2FuIGdy b3cgb3ZlcgordGltZSBhbmQgbm90IHByb3ZpZGUgYW4gYmlzZWN0aW9uIG1lY2hhbmlzbSB0byBp ZGVudGlmeSBmYXVsdHkgcGF0Y2hlcy4KKworVGhlIGhvdC1wYXRjaCBzdGFjayBwdXRzIHN0cmlj dHMgcmVxdWlyZW1lbnRzIG9uIHRoZSBvcmRlciBvZiB0aGUgcGF0Y2hlcworYmVpbmcgbG9hZGVk IGFuZCByZXF1aXJlcyBhbiBoeXBlcnZpc29yIGJ1aWxkLWlkIHRvIG1hdGNoIGFnYWluc3QuCisK K1RoZSBvbGQgY29kZSBhbGxvd3MgbXVjaCBtb3JlIGZsZXhpYmlsaXR5IGFuZCBhbiBhZGRpdGlv bmFsIGd1YXJkLAorYnV0IGlzIG1vcmUgY29tcGxleCB0byBpbXBsZW1lbnQuCisKKyMjIyBIYW5k bGUgaW5saW5lZCBfX0xJTkVfXworCitUaGlzIHByb2JsZW0gaXMgcmVsYXRlZCB0byBob3RwYXRj aCBjb25zdHJ1Y3Rpb24KK2FuZCBwb3RlbnRpYWxseSBoYXMgaW5mbHVlbmNlIG9uIHRoZSBkZXNp Z24gb2YgdGhlIGhvdHBhdGNoaW5nCitpbmZyYXN0cnVjdHVyZSBpbiBYZW4uCisKK0ZvciBleGFt cGxlOgorCitXZSBoYXZlIGZpbGUxLmMgd2l0aCBmdW5jdGlvbnMgZjEgYW5kIGYyIChpbiB0aGF0 IG9yZGVyKS4gIGYyIGNvbnRhaW5zIGEKK0JVRygpIChvciBXQVJOKCkpIG1hY3JvIGFuZCBhdCB0 aGF0IHBvaW50IGVtYmVkcyB0aGUgc291cmNlIGxpbmUgbnVtYmVyCitpbnRvIHRoZSBnZW5lcmF0 ZWQgY29kZSBmb3IgZjIuCisKK05vdyB3ZSB3YW50IHRvIGhvdHBhdGNoIGYxIGFuZCB0aGUgaG90 cGF0Y2ggc291cmNlLWNvZGUgcGF0Y2ggYWRkcyAyCitsaW5lcyB0byBmMSBhbmQgYXMgYSBjb25z ZXF1ZW5jZSBzaGlmdHMgb3V0IGYyIGJ5IHR3byBsaW5lcy4gIFRoZSBuZXdseQorY29uc3RydWN0 ZWQgZmlsZTEubyB3aWxsIG5vdyBjb250YWluIGRpZmZlcmVuY2VzIGluIGJvdGggYmluYXJ5Citm dW5jdGlvbnMgZjEgKGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2hhbmdlZCBpdCB3aXRoIHRoZSBhcHBs aWVkIHBhdGNoKSBhbmQKK2YyIChiZWNhdXNlIHRoZSBjb250YWluZWQgQlVHIG1hY3JvIGVtYmVk cyB0aGUgbmV3IGxpbmUgbnVtYmVyKS4KKworV2l0aG91dCBhZGRpdGlvbmFsIGluZm9ybWF0aW9u LCBhbiBhbGdvcml0aG0gY29tcGFyaW5nIGZpbGUxLm8gYmVmb3JlCithbmQgYWZ0ZXIgaG90cGF0 Y2ggYXBwbGljYXRpb24gd2lsbCBkZXRlcm1pbmUgYm90aCBmdW5jdGlvbnMgdG8gYmUKK2NoYW5n ZWQgYW5kIHdpbGwgaGF2ZSB0byBpbmNsdWRlIGJvdGggaW50byB0aGUgYmluYXJ5IGhvdHBhdGNo LgorCitPcHRpb25zOgorCisxLiBUcmFuc2Zvcm0gc291cmNlIGNvZGUgcGF0Y2hlcyBmb3IgaG90 cGF0Y2hlcyB0byBiZSBsaW5lLW5ldXRyYWwgZm9yCisgICBlYWNoIGNodW5rLiAgVGhpcyBjYW4g YmUgZG9uZSBpbiBhbG1vc3QgYWxsIGNhc2VzIHdpdGggZWl0aGVyCisgICByZWZvcm1hdHRpbmcg b2YgdGhlIHNvdXJjZSBjb2RlIG9yIGJ5IGludHJvZHVjaW5nIGFydGlmaWNpYWwKKyAgIHByZXBy b2Nlc3NvciAiI2xpbmUgbiIgZGlyZWN0aXZlcyB0byBhZGp1c3QgZm9yIHRoZSBpbnRyb2R1Y2Vk CisgICBkaWZmZXJlbmNlcy4KKworICAgVGhpcyBhcHByb2FjaCBpcyBsb3ctdGVjaCBhbmQgc2lt cGxlLiAgUG90ZW50aWFsbHkgZ2VuZXJhdGVkCisgICBiYWNrdHJhY2VzIGFuZCBleGlzdGluZyBk ZWJ1ZyBpbmZvcm1hdGlvbiByZWZlcnMgdG8gdGhlIG9yaWdpbmFsCisgICBidWlsZCBhbmQgZG9l cyBub3QgcmVmbGVjdCBob3RwYXRjaGluZyBzdGF0ZSBleGNlcHQgZm9yIGFjdHVhbGx5CisgICBo b3RwYXRjaGVkIGZ1bmN0aW9ucyBidXQgc2hvdWxkIGJlIG1vc3RseSBjb3JyZWN0LgorCisyLiBJ Z25vcmluZyB0aGUgcHJvYmxlbSBhbmQgbGl2aW5nIHdpdGggYXJ0aWZpY2lhbGx5IGxhcmdlIGhv dHBhdGNoZXMKKyAgIHRoYXQgdW5uZWNlc3NhcmlseSBwYXRjaCBtYW55IGZ1bmN0aW9ucy4KKwor ICAgVGhpcyBhcHByb2FjaCBtaWdodCBsZWFkIHRvIHNvbWUgdmVyeSBsYXJnZSBob3RwYXRjaGVz IGRlcGVuZGluZyBvbgorICAgY29udGVudCBvZiBzcGVjaWZpYyBzb3VyY2UgZmlsZS4gIEl0IG1h eSBhbHNvIHRyaWdnZXIgcHVsbGluZyBpbgorICAgZnVuY3Rpb25zIGludG8gdGhlIGhvdHBhdGNo IHRoYXQgY2Fubm90IHJlYXNvbmFibGUgYmUgaG90cGF0Y2hlZCBkdWUKKyAgIHRvIGxpbWl0YXRp b25zIG9mIGEgaG90cGF0Y2hpbmcgZnJhbWV3b3JrIChpbml0LXNlY3Rpb25zLCBwYXJ0cyBvZgor ICAgdGhlIGhvdHBhdGNoaW5nIGZyYW1ld29yayBpdHNlbGYsIC4uLikgYW5kIG1heSB0aGVyZWJ5 IHByZXZlbnQgdXMKKyAgIGZyb20gcGF0Y2hpbmcgYSBzcGVjaWZpYyBwcm9ibGVtLgorCisgICBU aGUgZGVjaXNpb24gYmV0d2VlbiAxLiBhbmQgMi4gY2FuIGJlIG1hZGUgb24gYSBwYXRjaC0tYnkt cGF0Y2gKKyAgIGJhc2lzLgorCiszLiBJbnRyb2R1Y2luZyBhbiBpbmRpcmVjdGlvbiB0YWJsZSBm b3Igc3RvcmluZyBsaW5lIG51bWJlcnMgYW5kCisgICB0cmVhdGluZyB0aGF0IHNwZWNpYWxseSBm b3IgYmluYXJ5IGRpZmZpbmcuIExpbnV4IG1heSBmb2xsb3cKKyAgIHRoaXMgYXBwcm9hY2guCisK KyAgIFdlIG1pZ2h0IGVpdGhlciB1c2UgdGhpcyBpbmRpcmVjdGlvbiB0YWJsZSBmb3IgcnVudGlt ZSB1c2UgYW5kIHBhdGNoCisgICB0aGF0IHdpdGggZWFjaCBob3RwYXRjaCAoc2ltaWxhcmx5IHRv IGV4Y2VwdGlvbiB0YWJsZXMpIG9yIHdlIG1pZ2h0CisgICBwdXJlbHkgdXNlIGl0IHdoZW4gYnVp bGRpbmcgaG90cGF0Y2hlcyB0byBpZ25vcmUgZnVuY3Rpb25zIHRoYXQgb25seQorICAgZGlmZmVy IGF0IGV4YWN0bHkgdGhlIGxvY2F0aW9uIHdoZXJlIGEgbGluZS1udW1iZXIgaXMgZW1iZWRkZWQu CisKK0ZvciBCVUcoKSwgV0FSTigpLCBldGMuLCB0aGUgbGluZSBudW1iZXIgaXMgZW1iZWRkZWQg aW50byB0aGUgYnVnIGZyYW1lLCBub3QKK3RoZSBmdW5jdGlvbiBpdHNlbGYuCisKK1NpbWlsYXIg Y29uc2lkZXJhdGlvbnMgYXJlIHRydWUgdG8gYSBsZXNzZXIgZXh0ZW50IGZvciBfX0ZJTEVfXywg YnV0IGl0Citjb3VsZCBiZSBhcmd1ZWQgdGhhdCBmaWxlIHJlbmFtaW5nIHNob3VsZCBiZSBkb25l IG91dHNpZGUgb2YgaG90cGF0Y2hlcy4KKworIyMgU2lnbmF0dXJlIGNoZWNraW5nIHJlcXVpcmVt ZW50cy4KKworVGhlIHNpZ25hdHVyZSBjaGVja2luZyByZXF1aXJlcyB0aGF0IHRoZSBsYXlvdXQg b2YgdGhlIGRhdGEgaW4gbWVtb3J5CisqKk1VU1QqKiBiZSBzYW1lIGZvciBzaWduYXR1cmUgdG8g YmUgdmVyaWZpZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcGF5bG9hZAorZGF0YSBsYXlvdXQgaW4g RUxGIGZvcm1hdCAqKk1VU1QqKiBtYXRjaCB3aGF0IHRoZSBoeXBlcnZpc29yIHdvdWxkIGJlCitl eHBlY3Rpbmcgc3VjaCB0aGF0IGl0IGNhbiBwcm9wZXJseSBkbyBzaWduYXR1cmUgdmVyaWZpY2F0 aW9uLgorCitUaGUgc2lnbmF0dXJlIGlzIGJhc2VkIG9uIHRoZSBhbGwgb2YgdGhlIHBheWxvYWRz IGNvbnRpbnVvdXNseSBsYWlkIG91dAoraW4gbWVtb3J5LiBUaGUgc2lnbmF0dXJlIGlzIHRvIGJl IGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIEVMRiBwYXlsb2FkCitwcmVmaXhlZCB3aXRoIHRo ZSBzdHJpbmcgJ35Nb2R1bGUgc2lnbmF0dXJlIGFwcGVuZGVkflxuJywgZm9sbG93ZWQgYnkKK2Fu IHNpZ25hdHVyZSBoZWFkZXIgdGhlbiBmb2xsb3dlZCBieSB0aGUgc2lnbmF0dXJlLCBrZXkgaWRl bnRpZmllciwgYW5kIHNpZ25lcnMKK25hbWUuCisKK1NwZWNpZmljYWxseSB0aGUgc2lnbmF0dXJl IGhlYWRlciB3b3VsZCBiZToKKworPHByZT4KKyNkZWZpbmUgUEtFWV9BTEdPX0RTQSAgICAgICAw ICAKKyNkZWZpbmUgUEtFWV9BTEdPX1JTQSAgICAgICAxICAKKworI2RlZmluZSBQS0VZX0lEX1BH UCAgICAgICAgIDAgLyogT3BlblBHUCBnZW5lcmF0ZWQga2V5IElEICovICAKKyNkZWZpbmUgUEtF WV9JRF9YNTA5ICAgICAgICAxIC8qIFguNTA5IGFyYml0cmFyeSBzdWJqZWN0S2V5SWRlbnRpZmll ciAqLyAgCisKKyNkZWZpbmUgSEFTSF9BTEdPX01ENCAgICAgICAgICAwICAKKyNkZWZpbmUgSEFT SF9BTEdPX01ENSAgICAgICAgICAxICAKKyNkZWZpbmUgSEFTSF9BTEdPX1NIQTEgICAgICAgICAy ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJUEVfTURfMTYwICAzICAKKyNkZWZpbmUgSEFTSF9BTEdP X1NIQTI1NiAgICAgICA0ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1NIQTM4NCAgICAgICA1ICAKKyNk ZWZpbmUgSEFTSF9BTEdPX1NIQTUxMiAgICAgICA2ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1NIQTIy NCAgICAgICA3ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJUEVfTURfMTI4ICA4ICAKKyNkZWZpbmUg SEFTSF9BTEdPX1JJUEVfTURfMjU2ICA5ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1JJUEVfTURfMzIw IDEwICAKKyNkZWZpbmUgSEFTSF9BTEdPX1dQXzI1NiAgICAgIDExICAKKyNkZWZpbmUgSEFTSF9B TEdPX1dQXzM4NCAgICAgIDEyICAKKyNkZWZpbmUgSEFTSF9BTEdPX1dQXzUxMiAgICAgIDEzICAK KyNkZWZpbmUgSEFTSF9BTEdPX1RHUl8xMjggICAgIDE0ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1RH Ul8xNjAgICAgIDE1ICAKKyNkZWZpbmUgSEFTSF9BTEdPX1RHUl8xOTIgICAgIDE2ICAKKworCitz dHJ1Y3QgZWxmX3BheWxvYWRfc2lnbmF0dXJlIHsgIAorCXU4CWFsZ287CQkvKiBQdWJsaWMta2V5 IGNyeXB0byBhbGdvcml0aG0gUEtFWV9BTEdPXyouICovICAKKwl1OAloYXNoOwkJLyogRGlnZXN0 IGFsZ29yaXRobTogSEFTSF9BTEdPXyouICovICAKKwl1OAlpZF90eXBlOwkvKiBLZXkgaWRlbnRp ZmllciB0eXBlIFBLRVlfSUQqLiAqLyAgCisJdTgJc2lnbmVyX2xlbjsJLyogTGVuZ3RoIG9mIHNp Z25lcidzIG5hbWUgKi8gIAorCXU4CWtleV9pZF9sZW47CS8qIExlbmd0aCBvZiBrZXkgaWRlbnRp ZmllciAqLyAgCisJdTgJX19wYWRbM107ICAKKwlfX2JlMzIJc2lnX2xlbjsJLyogTGVuZ3RoIG9m IHNpZ25hdHVyZSBkYXRhICovICAKK307CisKKzwvcHJlPgorKE5vdGUgdGhhdCB0aGlzIGhhcyBi ZWVuIGJvcnJvd2VkIGZyb20gTGludXggbW9kdWxlIHNpZ25hdHVyZSBjb2RlLikuCisKKworIyMj IC5ic3MgYW5kIC5kYXRhIHNlY3Rpb25zLgorCitJbiBwbGFjZSBwYXRjaGluZyB3cml0YWJsZSBk YXRhIGlzIG5vdCBzdWl0YWJsZSBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgc2hvdWxkIGJlIGRvbmUK K2RlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBkYXRhLiBBcyBzdWNoIGl0IHNob3Vs ZCBub3QgYmUgYXR0ZW1wdGVkLgorCitUaGF0IHNhaWQgd2Ugc2hvdWxkIHByb3ZpZGUgaG9vayBm dW5jdGlvbnMgc28gdGhhdCB0aGUgZXhpc3RpbmcgZGF0YQorY2FuIGJlIGNoYW5nZWQgZHVyaW5n IHBheWxvYWQgYXBwbGljYXRpb24uCisKKworIyMjIElubGluZSBwYXRjaGluZworCitUaGUgaHlw ZXJ2aXNvciBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlIGluLXBsYWNlIHBhdGNoaW5nIHdvdWxkIGZp dCB3aXRoaW4KK3RoZSBjb2RlIG9yIGRhdGEuCisKKyMjIyBUcmFtcG9saW5lIChlOSBvcGNvZGUp CisKK1RoZSBlOSBvcGNvZGUgdXNlZCBmb3Igam1wcSB1c2VzIGEgMzItYml0IHNpZ25lZCBkaXNw bGFjZW1lbnQuIFRoYXQgbWVhbnMKK3dlIGFyZSBsaW1pdGVkIHRvIHVwIHRvIDJHQiBvZiB2aXJ0 dWFsIGFkZHJlc3MgdG8gcGxhY2UgdGhlIG5ldyBjb2RlCitmcm9tIHRoZSBvbGQgY29kZS4gVGhh dCBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSBzaW5jZSBYZW4gaHlwZXJ2aXNvciBoYXMKK2EgdmVy eSBzbWFsbCBmb290cHJpbnQuCisKK0hvd2V2ZXIgaWYgd2UgbmVlZCAtIHdlIGNhbiBhbHdheXMg YWRkIHR3byB0cmFtcG9saW5lcy4gT25lIGF0IHRoZSAyR0IKK2xpbWl0IHRoYXQgY2FsbHMgdGhl IG5leHQgdHJhbXBvbGluZS4KKworUGxlYXNlIG5vdGUgdGhlcmUgaXMgYSBzbWFsbCBsaW1pdGF0 aW9uIGZvciB0cmFtcG9saW5lcyBpbgorZnVuY3Rpb24gZW50cmllczogVGhlIHRhcmdldCBmdW5j dGlvbiAoKyB0cmFpbGluZyBwYWRkaW5nKSBtdXN0IGJlIGFibGUKK3RvIGFjY29tb2RhdGUgdGhl IHRyYW1wb2xpbmUuIE9uIHg4NiB3aXRoICstMiBHQiByZWxhdGl2ZSBqdW1wcywKK3RoaXMgbWVh bnMgNSBieXRlcyBhcmUgcmVxdWlyZWQuCisKK0RlcGVuZGluZyBvbiBjb21waWxlciBzZXR0aW5n cywgdGhlcmUgYXJlIHNldmVyYWwgZnVuY3Rpb25zIGluIFhlbiB0aGF0CithcmUgc21hbGxlciAo d2l0aG91dCBpbnRlci1mdW5jdGlvbiBwYWRkaW5nKS4KKworPHByZT4gCityZWFkZWxmIC1zVyB4 ZW4tc3ltcyB8IGdyZXAgIiBGVU5DICIgfCBcCisgICAgYXdrICd7IGlmICgkMyA8IDUpIHByaW50 ICQzLCAkNCwgJDUsICQ4IH0nCisKKy4uLgorMyBGVU5DIExPQ0FMIHdiaW52ZF9pcGkKKzMgRlVO QyBMT0NBTCBzaGFkb3dfbDFfaW5kZXgKKy4uLgorPC9wcmU+CitBIGNvbXBpbGUtdGltZSBjaGVj ayBmb3IsIGUuZy4sIGEgbWluaW11bSBhbGlnbm1lbnQgb2YgZnVuY3Rpb25zIG9yIGEKK3J1bnRp bWUgY2hlY2sgdGhhdCB2ZXJpZmllcyBzeW1ib2wgc2l6ZSAoKyBwYWRkaW5nIHRvIG5leHQgc3lt Ym9scykgZm9yCit0aGF0IGluIHRoZSBoeXBlcnZpc29yIGlzIGFkdmlzZWQuCisKK1RoZSB0b29s IGZvciBnZW5lcmF0aW5nIHBheWxvYWRzIGN1cnJlbnRseSBkb2VzIHBlcmZvcm0gYSBjb21waWxl LXRpbWUKK2NoZWNrIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbiB0byBiZSByZXBsYWNlZCBp cyBsYXJnZSBlbm91Z2guCisKLS0gCjIuNS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK